[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [netcdfgroup] nc-config and @NC_FLIBS@

Hi Russ,

We've based our build for netcdf4 on
nc-config --flibs

to give us the libraries needed to link netcdf to our f90 code,
that no longer works now.

But there is a new nf-config so why can't nc-config --flibs just call nf-config --libs so that I don't have to make another special case for netcdf version handling?

If I make the switch to use pkg-config do I have any assurance that you will continue to support it?   We really need some stability in the tools we rely on.


On Wed, Mar 28, 2012 at 2:50 PM, Russ Rew <address@hidden> wrote:
Hi Thomas,

> > shell$ nc-config --flibs
> > -L/some/path/lib @NC_FLIBS@
> Oh, I see ... there is nf-config now. I have to adapt my Makefile, then,
> for another case. Now it would be rather smart if nc-config would call
> nf-config transparently for fortran stuff, eh? Even better: What
> exactly is the reason not to provide files for pkg-config instead? Now
> we have two config scripts for NetCDF, I guess three with the C++
> interface. It gets messy and I wonder what for.
> But, well, putting a hint about nf-config in some docs would also be
> nice... it may be obvious, but I was not looking for it; just trying
> to get NetCDF re-installed quickly to get working Fortran module again
> (because of non-existent binary compatibility even between versions of
> the same compiler).

The functionality is there, but as you've pointed out, it's not properly
documented and it looks like there were bugs using pkg-config for
netcdf-fortran.  The pkg-config files for the netCDF 4.2 C and
Fortran packages get installed when you invoke "make install", e.g. for
version 4.2 of netcdf and netcdf-fortran:

 -rw-r--r--  1 root root  315 Mar 27 12:45 netcdf-fortran.pc
 -rw-r--r--  1 root root  305 Mar 26 12:37 netcdf.pc

The C library pkg-config seems to work OK:

 $ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
 $ pkg-config --cflags --libs netcdf
 -I/usr/local/include  -L/usr/local/lib -lnetcdf

I've just tidied-up the C pkg-config file and redone the Fortran file,
by modifying the top-level files netcdf.pc.in and netcdf-fortran.pc.in
in the snapshot releases for each package.  I've also documented the use
of pkg-config for the Fortran version 4.2 library with a couple of
examples in the man4/netcdf-f77.texi and man4/netcdf-f90.texi files.

Basically it's used like this:

 $ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
 $ f90 myprogram.f90 -o myprogram `pkg-config --cflags --libs netcdf-fortran`

where here `--cflags' means *compiler* flags and `libs' requests that
the appropriate libraries be linked in, so it's different from the
nf-config options of "fflags" and "flibs", but consistent with the
pkg-config conventions.

If you want to try these, you can get just the netcdf.pc.in and
netcdf-fortran.pc.in files from our svn tree:


Then put them in the top-level directories of the C and Fortran
releases, configure, make check, and make install.  The generated
pkg-config files get installed in the ${prefix}/lib/pkgconfig directory.

Thanks for pointing out the problems.  Please let me know if you have
other improvements to suggest.  I wasn't able to figure out what was
meant by

> ... nc-config would call nf-config transparently for fortran stuff

but I think pkg-config is a more scalable solution.


Jim Edwards

CESM Software Engineering Group
National Center for Atmospheric Research
Boulder, CO

NOTE: All email exchanges with Unidata User Support are recorded in the Unidata inquiry tracking system and then made publicly available through the web. If you do not want to have your interactions made available in this way, you must let us know in each email you send to us.