From dpierce at ucsd.edu  Thu Dec 11 19:34:00 2003
From: dpierce at ucsd.edu (dpierce@ucsd.edu)
Date: Thu Dec 11 19:33:14 2003
Subject: [Rd] bug + insufficient doc in R CMD INSTALL (PR#5703)
Message-ID: <20031211183400.1A750FC07@slim.kubism.ku.dk>

Hello,

I believe I have found a bug in the R INSTALL script
(src/scripts/INSTALL.in). The problem comes up when a user tries to
specify more than one "--config-args" (or, I imagine, "--config-vars") on
the R CMD INSTALL line. In such a case, no error message is generated, but
the first specification is silently overwritten by the second
specification.  The process therefore fails.

So for instance, a user contacted me after typing this:

R CMD INSTALL
--configure-args=-with-netcdf_incdir=/usr/local/netcdf/include
--configure-args=-with-netcdf_libdir=/usr/local/netcdf/lib ncdf_1.1.tar.gz

and it failed (they contacted me because I'm the maintainer of the ncdf
package).

I would say that this is both a bug and something that needs more
documentation.  It's a bug because it accepts the incorrect line without
giving an error message, but does not parse it "as expected."  And I would
say it needs more documentation because I looked through the R docs on
this, and could find no place where the correct syntax is given.  You
probably already know (I didn't), but the syntax should be this instead:

R CMD INSTALL
--configure-args="-with-netcdf_incdir=/usr/local/netcdf/include
-with-netcdf_libdir=/usr/local/netcdf/lib" ncdf_1.1.tar.gz

and, of course, although I'm using the ncdf package as an example for
concreteness, this is a general problem for any R package.

The place in INSTALL.in that seems to be problematic is this bit:

----------------------------------
configure_args=
configure_vars=
with_package_versions=false
save="CHECK"
save_args=
fake=false

while test -n "${1}"; do
  case ${1} in
    -h|--help)
      echo "${usage}"; exit 0 ;;
...skip stuff...
    --configure-args=*)
      configure_args=`echo "${1}" | sed -e 's/[^=]*=//'` ;;
    --configure-vars=*)
      configure_vars=`echo "${1}" | sed -e 's/[^=]*=//'` ;;

---------------------------------

It seems pretty clear that if multiple --configure-args are given on the
command line, they are silently overwritten.

One possible fix is to check and make sure the configure_args variable is
empty before setting it, as follows:

-----------------------------------

    --configure-args=*)
      if test x${configure_args} != x; then
        echo "INSTALL: command line error: only one --configure_args
argument can be given.  To specify multiple args to the configure
script, put them in quotes, separated by a space, like this:
--configure_args=\"--config_arg_1 --config_arg_2\""
        exit 1
      fi
      configure_args=`echo "${1}" | sed -e 's/[^=]*=//'` ;;
    --configure-vars=*)
      if test x${configure_vars} != x; then
        echo "INSTALL: command line error: only one --configure_vars
argument can be given.  To specify multiple vars to the configure
script, put them in quotes, separated by a space, like this:
--configure_vars=\"--config_vars_1 --config_vars_2\""
        exit 1
      fi
      configure_vars=`echo "${1}" | sed -e 's/[^=]*=//'` ;;

-------------------------------------

Another option would be to concatenate multiple --configure-args arguments
... I imagine it's your call on which way to go.

Regards,

--Dave

---------------------------------------------------------------
David W. Pierce        / Climate Research Division
Scripps Inst. Oceanog. / (858) 534-8276 (voice)
dpierce@ucsd.edu       / (858) 534-8561 (fax)


[Rd] bug + insufficient doc in R CMD INSTALL (PR#5703)
dpierce@ucsd.edu