NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
Dear netCDf-users, there was another question concerning netCDF and Linux - and since I'm using netCDF's on various platforms including Linux I thought someone might be interested in the following... First, I had no difficulties at all to compile netCDF 2.4 beta 6 on Linux (Slackware 3.0 with ELF), and the binaries pass all tests provided with the distribution. Then, to include Fortran support, it is sufficient to add a symbolic link linux.m4 -> f2c.m4 in the `src/fortran' subdirectory before starting the compiling. A script named `f77' should be available that drives f2c (there is one in the standard Slackware). As far as I remember the `f2c.m4' file was provided by myself a year ago or so, and it still works without problems. I actually worked with an older version (2.3.2) for a long time on both Linux and Solaris (with f2c instead of a real Fortran compiler), and I never experienced any problems with the fortran interface. A note concerning g77: Currently, g77 does not support the byte type, so I have not yet written an m4-file for this compiler; however, since it uses the same naming conventions as f2c, they probably will not differ too much. I might look into this as soon as g77 supports byte and integer*2... Finally, Linux now uses the ELF library format (which is available with Slackware 3.0), providing a simple way to build and use shared libraries. This reduces the disk space needed by binaries; especially large sets of programs like GMT will benefit from their availability. I therefore build a set of ELF shared libraries and patched the Makefiles (or better the `Makefile.in' and `master.mk.in' files in the distribution of netCDF 2.4b6) in order to build shared and static libraries. I'll append the diffs at the end of this mail. To apply these: - Untar the netCDF 2.4 beta 6 source code tree from the tar-file; - apply the patches _without_ cd'ing into the netCDF tree with patch < file_with_diffs ; - cd to netcdf-2.4-beta6/src/fortran and add the necessary link for the fortran interface with the command ln -s f2c.m4 linux.m4 ; - run `configure' in the netcdf-2.4-beta6/src subdirectory; - run `make' and `make test' and `make install'. Some (now really final) remarks: c++: I don't know too much about c++, so I just can state that all tests during `make test' are passed succesfully; IEEE: For some reason, configure does not detect the correct options to enable IEEE arithmetic under Linux. It can be enabled using the `-lieee' option at linktime (i.e., by linking with the `libieee.a' library). This (and the compilation with 486 optimizations) can be enforced by calling configure with CCFLAGS='-m486 -lieee' configure which will, however, give rise to a warning message during the compilation of each individual source code file (which can be ignored). For those who do not like to compile their own version I have prepared a tar file containing the libraries (static and shared), the ncdump and ncgen progs, include files and documentation (man pages and info files) which can easily be installed with Slackware's `installpkg'. They have been build with `-m486', and they support IEEE arithmatic. Currently, they can be obtained via anonymous ftp from strat06.met.fu-berlin.de (160.45.75.6) ^ | a `zero' in the pub/netcdf directory. Along with the binary distribution you'll find the appended diffs, a copy of this mail and another package with a few contributed programs (nccat, gennet, ncrename, and ncks) which are linked against the shared libraries. I do not know how much interest there is in Linux binaries, but I could continue to provide binary versions of the current netCDF release in static and shared versions. If enough people think this would be useful, I would be really thankful if someone could provide an anonymous ftp server; strat06 is just my (slow) working PC at the university, and it is switched off sometimes... I would be happy to receive comments and tips for the patches to make them more stable and useful. Regards from Berlin, Chris Marquardt (marq@xxxxxxxxxxxxxxxxxxxxxxxx) And here are the diff's... -------- snip, snip --------------------------------------------------------- diff -r -C3 netcdf-2.4-beta6.orig/src/Makefile.in netcdf-2.4-beta6/src/Makefile.in *** netcdf-2.4-beta6.orig/src/Makefile.in Mon Nov 13 21:46:03 1995 --- netcdf-2.4-beta6/src/Makefile.in Wed Jan 31 22:10:48 1996 *************** *** 18,28 **** ncdump/all ncdump/test ncdump/install ncdump/clean ncdump/distclean \ ncgen/all ncgen/test ncgen/install ncgen/clean ncgen/distclean \ nctest/all nctest/test nctest/clean nctest/distclean \ ! libsrc/all libsrc/test libsrc/install libsrc/clean libsrc/distclean \ xdr/all xdr/test xdr/install xdr/clean xdr/distclean \ c++/all c++/test c++/install c++/clean c++/distclean ! all: port/all xdr/all libsrc/all @FORTRAN_TARGET_ALL@ ncdump/all \ ncgen/all nctest/all \ @CXX_TARGET_ALL@ doc/all test: xdr/test libsrc/test nctest/test @FORTRAN_TARGET_TEST@ \ --- 18,28 ---- ncdump/all ncdump/test ncdump/install ncdump/clean ncdump/distclean \ ncgen/all ncgen/test ncgen/install ncgen/clean ncgen/distclean \ nctest/all nctest/test nctest/clean nctest/distclean \ ! libsrc/all libsrc/library_so libsrc/test libsrc/install libsrc/clean libsrc/distclean \ xdr/all xdr/test xdr/install xdr/clean xdr/distclean \ c++/all c++/test c++/install c++/clean c++/distclean ! all: port/all xdr/all libsrc/all @FORTRAN_TARGET_ALL@ libsrc/library_so ncdump/all \ ncgen/all nctest/all \ @CXX_TARGET_ALL@ doc/all test: xdr/test libsrc/test nctest/test @FORTRAN_TARGET_TEST@ \ diff -r -C3 netcdf-2.4-beta6.orig/src/c++/Makefile.in netcdf-2.4-beta6/src/c++/Makefile.in *** netcdf-2.4-beta6.orig/src/c++/Makefile.in Thu Jan 4 04:08:38 1996 --- netcdf-2.4-beta6/src/c++/Makefile.in Wed Jan 31 22:14:07 1996 *************** *** 29,42 **** PROG_OBJS = nctst.o GARBAGE = $(PROG) $(PROG_OBJS) $(LIBOBJS) test.out example.nc ! all: library $(PROG) test: expected $(PROG) ./$(PROG) > test.out @cmp expected test.out && \ echo "*** C++ test successful ***" ; ! install: installed_library installed_headers clean: default_clean -rm -f $(PROG_OBJS) $(PROG) $(LIBOBJS) example.nc test.out --- 29,48 ---- PROG_OBJS = nctst.o GARBAGE = $(PROG) $(PROG_OBJS) $(LIBOBJS) test.out example.nc ! # ! # Uncomment the following line if you have buildt shared libraries under Linux ! # and want to test ncdump without havin installed them. ! # ! export LD_LIBRARY_PATH := .:../libsrc:$(LD_LIBRARY_PATH) ! ! all: library library_so $(PROG) test: expected $(PROG) ./$(PROG) > test.out @cmp expected test.out && \ echo "*** C++ test successful ***" ; ! install: installed_library installed_headers library library_so clean: default_clean -rm -f $(PROG_OBJS) $(PROG) $(LIBOBJS) example.nc test.out diff -r -C3 netcdf-2.4-beta6.orig/src/fortran/Makefile.in netcdf-2.4-beta6/src/fortran/Makefile.in *** netcdf-2.4-beta6.orig/src/fortran/Makefile.in Fri Oct 13 21:58:26 1995 --- netcdf-2.4-beta6/src/fortran/Makefile.in Wed Jan 31 18:05:34 1996 *************** *** 29,41 **** LIBOBJS = jackets.o LIBNAME = netcdf REMOTE_LIBRARY = ../libsrc/lib$(LIBNAME).a OBJS = $(PROGRAM).o LD_XDR = @LD_XDR@ ! LD_NETCDF = -L../libsrc -lnetcdf ! LIBS = $(LD_NETCDF) $(LD_XDR) prefix = ../../.. ! all: netcdf.inc remote_library test: $(PROGRAM) FORCE ./$(PROGRAM) --- 29,48 ---- LIBOBJS = jackets.o LIBNAME = netcdf REMOTE_LIBRARY = ../libsrc/lib$(LIBNAME).a + REMOTE_LIB_SO = ../libsrc/lib$(LIBNAME).shared.archive OBJS = $(PROGRAM).o LD_XDR = @LD_XDR@ ! LD_NETCDF = ../libsrc/lib$(LIBNAME).a ! LIBS = -L../libsrc -l$(LIBNAME) $(LD_XDR) prefix = ../../.. ! # ! # Uncomment the following line if you have buildt shared libraries under Linux ! # and want to test ncdump without havin installed them. ! # ! export LD_LIBRARY_PATH := .:../libsrc:$(LD_LIBRARY_PATH) ! ! all: netcdf.inc remote_library remote_lib_so test: $(PROGRAM) FORCE ./$(PROGRAM) diff -r -C3 netcdf-2.4-beta6.orig/src/ncdump/Makefile.in netcdf-2.4-beta6/src/ncdump/Makefile.in *** netcdf-2.4-beta6.orig/src/ncdump/Makefile.in Sat Jan 6 15:47:32 1996 --- netcdf-2.4-beta6/src/ncdump/Makefile.in Wed Jan 31 17:08:24 1996 *************** *** 18,27 **** OBJS = ncdump.o vardata.o dumplib.o PROGRAM_SRCS = ncdump.c vardata.c dumplib.c LD_XDR = @LD_XDR@ ! LIBS = $(LD_NETCDF) $(LD_XDR) prefix = ../../.. GARBAGE = $(PROGRAM) test0.nc test1.nc test1.cdl test2.cdl all: $(PROGRAM) $(PROGRAM): $(LD_NETCDF) --- 18,33 ---- OBJS = ncdump.o vardata.o dumplib.o PROGRAM_SRCS = ncdump.c vardata.c dumplib.c LD_XDR = @LD_XDR@ ! LIBS = -L../libsrc -l$(LIBNAME) $(LD_XDR) prefix = ../../.. GARBAGE = $(PROGRAM) test0.nc test1.nc test1.cdl test2.cdl + # + # Uncomment the following line if you have buildt shared libraries under Linux + # and want to test ncdump without havin installed them. + # + export LD_LIBRARY_PATH := .:../libsrc:$(LD_LIBRARY_PATH) + all: $(PROGRAM) $(PROGRAM): $(LD_NETCDF) *************** *** 38,44 **** $(PROGRAM)_oc : $(PROGRAM_SRCS) #setopt primary_language C ! #load -C $(CPPFLAGS) $(PROGRAM_SRCS) #load -C $(LIBS) #setopt program_name $(PROGRAM) --- 44,50 ---- $(PROGRAM)_oc : $(PROGRAM_SRCS) #setopt primary_language C ! oad -C $(CPPFLAGS) $(PROGRAM_SRCS) #load -C $(LIBS) #setopt program_name $(PROGRAM) diff -r -C3 netcdf-2.4-beta6.orig/src/ncgen/Makefile.in netcdf-2.4-beta6/src/ncgen/Makefile.in *** netcdf-2.4-beta6.orig/src/ncgen/Makefile.in Mon Nov 13 21:47:27 1995 --- netcdf-2.4-beta6/src/ncgen/Makefile.in Wed Jan 31 17:13:08 1996 *************** *** 30,39 **** OBJS = main.o load.o ncgentab.o escapes.o \ getfill.o init.o close.o genlib.o LD_XDR = @LD_XDR@ ! LIBS = $(LD_NETCDF) $(LD_XDR) LEX = @LEX@ YACC = @YACC@ prefix = ../../.. all: $(PROGRAM) --- 30,45 ---- OBJS = main.o load.o ncgentab.o escapes.o \ getfill.o init.o close.o genlib.o LD_XDR = @LD_XDR@ ! LIBS = -L../libsrc -l$(LIBNAME) $(LD_XDR) LEX = @LEX@ YACC = @YACC@ prefix = ../../.. + + # + # Uncomment the following line if you have buildt shared libraries under Linux + # and want to test ncdump without havin installed them. + # + export LD_LIBRARY_PATH := .:../libsrc:$(LD_LIBRARY_PATH) all: $(PROGRAM) diff -r -C3 netcdf-2.4-beta6.orig/src/nctest/Makefile.in netcdf-2.4-beta6/src/nctest/Makefile.in *** netcdf-2.4-beta6.orig/src/nctest/Makefile.in Fri Oct 13 22:01:40 1995 --- netcdf-2.4-beta6/src/nctest/Makefile.in Wed Jan 31 17:14:31 1996 *************** *** 22,29 **** vputget.o vputgetg.o driver.o cdftests.o dimtests.o rec.o \ atttests.o misctest.o add.o error.o emalloc.o val.o slabs.o LD_XDR = @LD_XDR@ ! LIBS = $(LD_NETCDF) $(LD_XDR) GARBAGE = $(PROGRAM) lint.out *.cdf *.log test.nc test2.nc all: program --- 22,35 ---- vputget.o vputgetg.o driver.o cdftests.o dimtests.o rec.o \ atttests.o misctest.o add.o error.o emalloc.o val.o slabs.o LD_XDR = @LD_XDR@ ! LIBS = -L../libsrc -l$(LIBNAME) $(LD_XDR) GARBAGE = $(PROGRAM) lint.out *.cdf *.log test.nc test2.nc + + # + # Uncomment the following line if you have buildt shared libraries under Linux + # and want to test ncdump without havin installed them. + # + export LD_LIBRARY_PATH := .:../libsrc:$(LD_LIBRARY_PATH) all: program diff -r -C3 netcdf-2.4-beta6.orig/src/port/master.mk.in netcdf-2.4-beta6/src/port/master.mk.in *** netcdf-2.4-beta6.orig/src/port/master.mk.in Fri Oct 13 20:13:08 1995 --- netcdf-2.4-beta6/src/port/master.mk.in Wed Jan 31 22:26:16 1996 *************** *** 29,34 **** --- 29,36 ---- TBL = @TBL@ WHICH = @WHICH@ + MAJOR_NO = 2 + MINOR_NO = 4 ############################################################################ # Recursive Macros (command-line changes to others aren't supported): *************** *** 167,173 **** # The following rule is forced because the library can be created by a # makefile in another directory prior to the execution of the following rule. # ! $(LIB_A): $(LIBOBJS) FORCE $(AR) rcuv $@ $(LIBOBJS) $(RANLIB) $@ --- 169,175 ---- # The following rule is forced because the library can be created by a # makefile in another directory prior to the execution of the following rule. # ! $(LIB_A): $(LIBOBJS) FORCE $(AR) rcuv $@ $(LIBOBJS) $(RANLIB) $@ *************** *** 209,256 **** mkdir -p $@ chmod u+rwx,g+rws,o=rx $@ ! LIB_SO = lib$(LIBRARY).so.$(MAJOR_NO).$(MINOR_NO) ! LIB_SA = lib$(LIBRARY).sa.$(MAJOR_NO).$(MINOR_NO) ! #library: FORCE ! # @so_objs=`echo $(LIBOBJS) | sed 's/\.o/.so/g'`; \ ! # if [ -z "$$so_objs" ]; then \ ! # :; \ ! # else \ ! # $(MAKE) $(MFLAGS) $(LOCAL_MACROS) $(LIB_SO) \ ! # SO_OBJS="$$so_objs"; \ ! # fi ! # @if [ -z "$(SA_OBJS)" ]; then \ ! # :; \ ! # else \ ! # $(MAKE) $(MFLAGS) $(LOCAL_MACROS) $(LIB_SA); \ ! # fi $(LIB_SO): $(SO_OBJS) ! ld -assert pure-text $(SO_OBJS) -o $@ $(LIB_SA): $(SA_OBJS) FORCE $(AR) rcuv $@ $(SA_OBJS) .fc.so: ! $(FORTC) -O $(OS) $< > $*.c \ ! || (rm -f $*.c; exit 1) ! $(CC) -c -o $$$$.o -pic $(CFLAGS) $(CPPFLAGS) $*.c \ ! || (rm -f $$$$.o; exit 1) ! mv $$$$.o $@ .c.so: ! $(CC) -c -o $$$$.o -pic $(CFLAGS) $(CPPFLAGS) $< \ ! || (rm -f $$$$.o; exit 1) ! mv $$$$.o $@ ! ! #installed_library: $(LIBDIR)/$(LIB_SO) ! # @if [ -z "$(SA_OBJS)" ]; then \ ! # :; \ ! # else \ ! # $(MAKE) $(MFLAGS) $(LOCAL_MACROS) $(LIBDIR)/$(LIB_SA); \ ! # fi $(LIBDIR)/$(LIB_SO): $(LIBDIR) $(LIB_SO) cp $(LIB_SO) $(LIBDIR)/$(LIB_SO) $(LIBDIR)/$(LIB_SA): $(LIBDIR) $(LIB_SA) cp $(LIB_SA) $(LIBDIR)/$(LIB_SA) --- 211,358 ---- mkdir -p $@ chmod u+rwx,g+rws,o=rx $@ ! # ! # Shared libraries (tested for Linux only) ! # ! ! LIB_SO = lib$(LIBRARY).so.$(MAJOR_NO).$(MINOR_NO) ! LIB_SO_NAME = lib$(LIBRARY).so.$(MAJOR_NO) ! LIB_SO_ARCH = lib$(LIBRARY).shared.archive ! LIB_SA = lib$(LIBRARY).sa.$(MAJOR_NO).$(MINOR_NO) ! ! library: FORCE ! @so_objs=`echo $(LIBOBJS) | sed 's/\.o/.so/g'`; \ ! if [ -z "$$so_objs" ]; then \ ! :; \ ! else \ ! case `uname -s` in \ ! Linux) \ ! $(MAKE) $(MFLAGS) $(LOCAL_MACROS) $(LIB_SO_ARCH) \ ! SO_OBJS="$$so_objs";; \ ! *) \ ! $(MAKE) $(MFLAGS) $(LOCAL_MACROS) $(LIB_SO) \ ! SO_OBJS="$$so_objs";; \ ! esac ; \ ! fi ! @if [ -z "$(SA_OBJS)" ]; then \ ! :; \ ! else \ ! $(MAKE) $(MFLAGS) $(LOCAL_MACROS) $(LIB_SA); \ ! fi ! ! ! # A problem under Linux: to make a lib<something>.so with gcc's -shared option ! # _all_ sharable objects must be available. Therefore, all objects compiled with ! # -fPIC are collected in LIB_SO_ARCH first (via the remote_lib_so_arch target ! # in case of remote libraries), and then the shared library is buildt. This is ! # done in a temporary subdirectory in order not to destroy the relocatables in ! # the current subdirectory. ! ! library_so: $(LIB_SO_ARCH) FORCE ! case `uname -s` in \ ! Linux) mkdir -p ./tmp ; \ ! cd ./tmp ; \ ! ar -x ../$(LIB_SO_ARCH) ; \ ! gcc -shared -Wl,-soname,$(LIB_SO_NAME) *.so -o ../$(LIB_SO) ; \ ! rm -f *.so ; \ ! cd .. ; \ ! rmdir ./tmp ; \ ! rm -f $(LIB_SO_NAME) ; \ ! ln -s $(LIB_SO) $(LIB_SO_NAME) ; \ ! ;; \ ! *) ;; \ ! esac ! ! $(LIB_SO_ARCH): $(SO_OBJS) FORCE ! @case `uname -s` in \ ! Linux) $(AR) rcuv $@ $(SO_OBJS) ; \ ! $(RANLIB) $@ ;; \ ! *) ;; \ ! esac ! ! remote_lib_so: FORCE ! @so_objs=`echo $(LIBOBJS) | sed 's/\.o/.so/g'`; \ ! if [ -z "$$so_objs" ]; then \ ! :; \ ! else \ ! case `uname -s` in \ ! Linux) \ ! $(MAKE) $(MFLAGS) $(LOCAL_MACROS) remote_lib_so_arch \ ! SO_OBJS="$$so_objs";; \ ! *) ;; \ ! esac ; \ ! fi ! remote_lib_so_arch: $(SO_OBJS) FORCE ! $(AR) rcuv $(REMOTE_LIB_SO) $(SO_OBJS) ! $(RANLIB) $(REMOTE_LIB_SO) ! ! ! # Shared libraries for other platforms $(LIB_SO): $(SO_OBJS) ! @case `uname -s` in \ ! Linux) ;; \ ! *) ld -assert pure-text $(SO_OBJS) -o $@ ;; \ ! esac ! $(LIB_SA): $(SA_OBJS) FORCE $(AR) rcuv $@ $(SA_OBJS) + + # Compiling sharable (relocatable) objects + .fc.so: ! case `uname -s` in \ ! Linux) \ ! $(FORTC) -O $(OS) $< > $*.c \ ! || (rm -f $*.c; exit 1); \ ! $(CC) -c -o $@ -fPIC $(CFLAGS) $(CPPFLAGS) $*.c ;; \ ! *) \ ! $(FORTC) -O $(OS) $< > $*.c \ ! || (rm -f $*.c; exit 1); \ ! $(CC) -c -o $$$$.o -pic $(CFLAGS) $(CPPFLAGS) $*.c \ ! || (rm -f $$$$.o; exit 1) ; \ ! mv $$$$.o $@ ;; \ ! esac .c.so: ! case `uname -s` in \ ! Linux) \ ! $(CC) -c -o $@ -fPIC $(CFLAGS) $(CPPFLAGS) $< ;; \ ! *) \ ! $(CC) -c -o $$$$.o -pic $(CFLAGS) $(CPPFLAGS) $< \ ! || (rm -f $$$$.o; exit 1) ; \ ! mv $$$$.o $@ ;; \ ! esac ! ! .cc.so: ! case `uname -s` in \ ! Linux) \ ! $(CXX) -c -o $@ -fPIC $(CXXFLAGS) $(CXXCPPFLAGS) $< ;; \ ! *) \ ! $(CXX) -c -o $@ -pic $(CXXFLAGS) $(CXXCPPFLAGS) $< ;; \ ! esac + installed_library: $(LIBDIR)/$(LIB_SO) $(LIBDIR)/$(LIB_A) + @if [ -z "$(SA_OBJS)" ]; then \ + :; \ + else \ + $(MAKE) $(MFLAGS) $(LOCAL_MACROS) $(LIBDIR)/$(LIB_SA); \ + fi + + $(LIBDIR)/$(LIB_A): $(LIBDIR) $(LIB_A) + cp $(LIB_A) $(LIBDIR)/$(LIB_A) + $(RANLIB) $(LIBDIR)/$(LIB_A) $(LIBDIR)/$(LIB_SO): $(LIBDIR) $(LIB_SO) cp $(LIB_SO) $(LIBDIR)/$(LIB_SO) + case `uname -s` in \ + Linux) \ + ( cd $(LIBDIR) ; rm -f $(LIB_SO_NAME) lib$(LIBRARY).so ; \ + ln -s $(LIB_SO) $(LIB_SO_NAME) ; ln -s $(LIB_SO_NAME) lib$(LIBRARY).so ) ;; \ + *) ;; \ + esac + + $(LIBDIR)/$(LIB_SA): $(LIBDIR) $(LIB_SA) cp $(LIB_SA) $(LIBDIR)/$(LIB_SA) *************** *** 397,402 **** --- 499,505 ---- AIX);; \ HP-UX);; \ IRIX*);; \ + Linux);; \ ULTRIX);; \ UNICOS|sn*);; \ *) $(MAKE) $(MFLAGS) $(MANDIR)/whatis;; \ *************** *** 436,441 **** --- 539,547 ---- $(MANDIR)/whatis: FORCE catman -w -M $(MANDIR) + $(MANDIR)/makewhatis: FORCE + makewhatis -w $(MANDIR) + ############################################################################ # TeX-Info Pages: *************** *** 506,519 **** realclean: default_realclean default_clean: FORCE rm -f $(GARBAGE) $(PROGRAM) a.out core *.o *.i *.a *.so.* *.sa.* \ ! *.so *.u *.pure *.pure_hardlink *.pure_linkinfo conftest* \ *.nc test.out \ *.aux *.toc *.dvi \ config.cache *.Z *.log tags MANIFEST *~ default_distclean: default_realclean default_realclean: FORCE rm -f $(GARBAGE) $(PROGRAM) a.out core *.o *.i *.a *.so.* *.sa.* \ ! *.so *.u *.pure *.pure_hardlink *.pure_linkinfo conftest* \ *.nc test.out \ *.aux *.toc *.dvi \ config.cache *.Z *.log tags TAGS MANIFEST *~ \ --- 612,625 ---- realclean: default_realclean default_clean: FORCE rm -f $(GARBAGE) $(PROGRAM) a.out core *.o *.i *.a *.so.* *.sa.* \ ! *.so *.shared.* *.u *.pure *.pure_hardlink *.pure_linkinfo conftest* \ *.nc test.out \ *.aux *.toc *.dvi \ config.cache *.Z *.log tags MANIFEST *~ default_distclean: default_realclean default_realclean: FORCE rm -f $(GARBAGE) $(PROGRAM) a.out core *.o *.i *.a *.so.* *.sa.* \ ! *.so *.shared.* *.u *.pure *.pure_hardlink *.pure_linkinfo conftest* \ *.nc test.out \ *.aux *.toc *.dvi \ config.cache *.Z *.log tags TAGS MANIFEST *~ \
netcdfgroup
archives: