[R] need automake/autoconf help to build RnetCDF and ncdf packages

Paul Johnson pauljohn32 at gmail.com
Tue Apr 25 22:46:26 CEST 2006


I imagine this "where are your header files" problem comes up in other
packages, so I'm asking this as a general R question. How should
configure scripts be re-written so they look in more places?


Briefly, the problem is that Fedora-Extras installs the header files
in a subdirectory /usr/include/netcdf-3 rather than /usr/include:

# rpm -ql netcdf-devel
/usr/include/netcdf-3
/usr/include/netcdf-3/ncvalues.h
/usr/include/netcdf-3/netcdf.h
/usr/lib/netcdf-3/libnetcdf.a
/usr/lib/netcdf-3/libnetcdf_c++.a
/usr/lib/netcdf-3/libnetcdf_g77.a

Last week I posted in this list that I re-built the Fedora-Extras
netcdf rpm so that it would have more standard installation, and then
I was able to make RNetCDF work.

In the meanwhile,  I posted in bugzilla.redhat.com asking if they
might use the standard packaging, but their response is an adamant
refusal:

https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=189734

When netcdf updates are issued in the Fedora-Extras network, the
special hacks I put in to un-do their special hacks are lost, and
netcdf programs don't work anymore.

The attempt to build "ncdf" fails inside R or on the command line, but
it gives a GOOD HINT about a command line work around:

# R CMD INSTALL ncdf_1.5.tar.gz
[...]

checking /sw/include/netcdf.h presence... no
checking for /sw/include/netcdf.h... no

Fatal error: I cannot find the directory that holds the netcdf include
file netcdf.h!
You can specify it as follows:
      ./configure --with-netcdf_incdir=directory_with_file_netcdf.h

 *** Special note for R CMD INSTALL users: *********************************
     The syntax for specifying multiple --configure-args does not seem to be
     well documented in R.  If you have installed the netcdf include and library
     directories in some non-standard location, you can specify BOTH these
     during the R CMD INSTALL process using the following syntax:

   R CMD INSTALL
--configure-args="-with-netcdf_incdir=/path/to/netcdf/incdir
-with-netcdf_libdir=/path/to/netcdf/libdir" ncdf_1.1.tar.gz

     where you should, of course, specify your own netcdf include and library
     directories, and the actual package name.
 ***************************************************************************


I found that the following did work!

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

It is not the best solution, because special administrative effort is
required. And the "install.packages" approach inside R won't work.

However, with RNetCDF, the problem is slightly worse, and no such
helpful message appears:

# R CMD INSTALL  RNetCDF_1.1-3.tar.gz
* Installing *source* package 'RNetCDF' ...
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for executable suffix...
checking for object suffix... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for main in -lnetcdf... no
configure: error: netcdf library not found
ERROR: configuration failed for package 'RNetCDF'
** Removing '/usr/lib/R/library/RNetCDF'


I have no reason to doubt that the Fedora-Extras authors are right,
and that some changes in the configure scripts for these packages are
required.

In RnetCDF's configure.ac file, I see the place where it specifies the
NETCDF_INCDIR

if test -z "${NETCDF_PATH}"; then
    AC_CHECK_FILE(/usr/local/include/netcdf.h,
        [USR_LOCAL_NETCDF_H=TRUE], [USR_LOCAL_NETCDF_H=FALSE])
    if test "${USR_LOCAL_NETCDF_H}" = TRUE; then
        NETCDF_INCDIR="/usr/local/include"
        NETCDF_LIBDIR="/usr/local/lib"
        NETCDF_LIBNAME="netcdf"
        HAVE_NETCDF_H=TRUE
    elif test "${HAVE_NETCDF_H}" = FALSE; then
        AC_CHECK_FILE(/usr/include/netcdf.h,
            [USR_NETCDF_H=TRUE], [USR_NETCDF_H=FALSE])
        if test "${USR_NETCDF_H}" = TRUE; then
            NETCDF_INCDIR="/usr/include"
            NETCDF_LIBDIR="/usr/lib"
            NETCDF_LIBNAME="netcdf"
            HAVE_NETCDF_H=TRUE
        fi
    fi
else
    NETCDF_INCDIR="${NETCDF_PATH}/include"
    NETCDF_LIBDIR="${NETCDF_PATH}/lib"
    NETCDF_LIBNAME="netcdf"
    AC_CHECK_FILE(${NETCDF_INCDIR}/netcdf.h,
        [INCDIR_NETCDF_H=TRUE], [INCDIR_NETCDF_H=FALSE])
    if test "${INCDIR_NETCDF_H}" = TRUE; then
        HAVE_NETCDF_H=TRUE
    fi

fi

I've tried fiddling around in this, and then typing

#autoconf configure.ac > newconfigure

sh ./newconfigure

But it always ends the same:

checking for main in -lnetcdf... no
: error: netcdf library not found

So, is there somebody here who know how configure scripts ought to be
written to accomodate this?



--
Paul E. Johnson
Professor, Political Science
1541 Lilac Lane, Room 504
University of Kansas




More information about the R-help mailing list