This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
George, >Date: Fri, 07 Feb 1997 15:38:45 -0500 >From: "George E. Juras" <address@hidden> >Organization: PROMULA Development Corporation >To: Steve Emmerson <address@hidden> >Subject: Re: netcdf ftest with PROMULA FORTRAN >Keywords: 199612121831.AA26117 In the above message you wrote: > Using your instructions (from Dec 30, 1996), I tried to finish the netcdf > ftest soon after the holidays and here are the results. Sorry that it took > me a while to get back to this project. > > As you can see, your promula script does not do the link step properly. > PROMULA FORTRAN only translates ftest.f to ftest.c. cc then compiles > to ftest.o and cc links ftest.o with the netcdf libraries AND the > PROMULA FORTRAN Runtime Library, libpfc.a, AND the C > math library, lm.a, to produce the ftest executable. > > Steve, could you fix (or tell me how to fix) your promula script so that > it does the link properly, as part of 'make test'? Thanks. > > George > ------------------------------------------------------------------------------ > /netcdf/netcdf-2.4.3/src: > /netcdf/netcdf-2.4.3/src: > /netcdf/netcdf-2.4.3/src:make test > > making `test' in directory /netcdf/netcdf-2.4.3/src/xdr > > ./xdrtest > xdrtest_out.new > diff xdrtest_out.new testout.sav > *** XDR passes formatted test *** > cmp test.xdr test_xdr.sav > *** XDR passes binary test *** > > returning to directory /netcdf/netcdf-2.4.3/src > > > making `test' in directory /netcdf/netcdf-2.4.3/src/libsrc > > ar rcuv libnetcdf.a array.o attr.o cdf.o dim.o file.o iarray.o error.o > globdef.o putget.o putgetg.o sharray.o string.o var.o xdrposix.o > case "" in \ > '') ;; \ > *) ar rucv libnetcdf.a ;; \ > esac > ranlib libnetcdf.a > c89 -o cdftest +z -O cdftest.o libnetcdf.a > ./cdftest > cdftest_out.new > nccreate: filename "test.nc": File exists > trying again > diff cdftest_out.new testout.sav > *** netCDF passes formatted test *** > cmp test.nc test_cdf.sav > *** netCDF passes binary test *** > > returning to directory /netcdf/netcdf-2.4.3/src > > > making `test' in directory /netcdf/netcdf-2.4.3/src/nctest > > c89 -o nctest -O varget.o vargetg.o varput.o varputg.o vardef.o vartests.o > 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 ../libsrc/libnetcdf.a > ./nctest > *** Testing nccreate ... ok *** > *** Testing ncopen ... ok *** > *** Testing ncredef ... ok *** > *** Testing ncendef ... ok *** > *** Testing ncclose ... ok *** > *** Testing ncinquire ... ok *** > *** Testing ncsync ... ok *** > *** Testing ncabort ... ok *** > *** Testing ncdimdef ... ok *** > *** Testing ncdimid ... ok *** > *** Testing ncdiminq ... ok *** > *** Testing ncdimrename ... ok *** > *** Testing ncvardef ... ok *** > *** Testing ncvarid ... ok *** > *** Testing ncvarinq ... ok *** > *** Testing ncvarput1 ... ok *** > *** Testing ncvarget1 ... ok *** > *** Testing ncvarput ... ok *** > *** Testing ncvarget ... ok *** > *** Testing ncvarputg ... ok *** > *** Testing ncvargetg ... ok *** > *** Testing ncrecinq ... ok *** > *** Testing ncrecput ... ok *** > *** Testing ncrecget ... ok *** > *** Testing ncvarrename ... ok *** > *** Testing ncattput ... ok *** > *** Testing ncattinq ... ok *** > *** Testing ncattget ... ok *** > *** Testing ncattcopy ... ok *** > *** Testing ncattname ... ok *** > *** Testing ncattrename ... ok *** > *** Testing ncattdel ... ok *** > *** Testing nctypelen ... ok *** > > returning to directory /netcdf/netcdf-2.4.3/src > > > making `test' in directory /netcdf/netcdf-2.4.3/src/fortran > > ar rcuv ../libsrc/libnetcdf.a jackets.o > ranlib ../libsrc/libnetcdf.a > /netcdf/netcdf-2.4.3/src/promula -c ftest.f > PROMULA.FORTRAN to C V6.10 (Beta 001) (c) 1988-96 PROMULA Development Corp. > /netcdf/netcdf-2.4.3/src/promula -o ftest ftest.o -L../libsrc -lnetcdf > /netcdf/netcdf-2.4.3/src/promula: Usage: > /netcdf/netcdf-2.4.3/src/promula file_or_option ... > /netcdf/netcdf-2.4.3/src/promula: Usage: > /netcdf/netcdf-2.4.3/src/promula file_or_option ... > /netcdf/netcdf-2.4.3/src/promula[77]: shift: The specified number is not > valid for this command. > *** Error exit code 1 > > Stop. > *** Error exit code 1 > > Stop. > > Steve, your script needs to link libpfc.a and lm.a in order to make the ftest > executable, as I am doing below. > > /netcdf/netcdf-2.4.3/src: > /netcdf/netcdf-2.4.3/src:cd fortran > /netcdf/netcdf-2.4.3/src/fortran: > /netcdf/netcdf-2.4.3/src/fortran:cc -o ftest ftest.o -L../libsrc -lnetcdf > -lpfc -lm > /netcdf/netcdf-2.4.3/src/fortran: > /netcdf/netcdf-2.4.3/src/fortran:./ftest > *** Testing nccre ... > *** Testing ncddef ... > *** Testing ncvdef ... > *** Testing ncapt, ncaptc ... > *** Testing ncclos ... > *** Testing ncvpt1 ... > *** Testing ncvgt1 ... > *** Testing ncvpt ... > *** Testing ncopn, ncinq, ncdinq, ncvinq, ncanam, ncainq ... > *** Testing ncvgt, ncvgtc ... > *** Testing ncagt, ncagtc ... > *** Testing ncredf, ncdren, ncvren, ncaren, ncendf ... > *** Testing ncacpy ... > *** Testing ncadel ... > *** Testing fill values ... > /netcdf/netcdf-2.4.3/src/fortran: > > To refresh your memory, here is a listing of your promula script. Thanks. I've enclosed a new version of the script. Please let me know how it works. -------- Steve Emmerson <address@hidden> --------Begin promula script # Script for emulating a FORTRAN utility using the PROMULA `pfc' # FORTRAN-to-C translator. # Customizations. Modify as necessary. # translator=pfc compiler=cc # Print a message to standard error. # # Internal function. # errmsg() { echo 1>&2 $arg0: "$@" } # Print a usage message. # # Internal function. # usage() { errmsg "\ Usage: $arg0 file_or_option ..." } # Translate and compile a file. # translate_and_compile() { file=$1 if eval $translator $tflags $file; then name=`basename $file .f` if eval $compiler -c $cflags $outopt $name.c; then rm $name.c else errmsg "Unable to compile $file" return 1 fi else errmsg "Unable to translate $file" return 1 fi } # Decode the arguments. # arg0=$0 compile_only=0 outopt= files= tflags= cflags= while :; do case $# in 0) break ;; *) case $1 in -c) compile_only=1 ;; -o) shift outopt="-o $1" ;; -*) usage ;; *) files="$files $1" ;; esac ;; esac shift done # Perform the action. # case $compile_only in 0) objs= for file in "$files"; do case $file in *.f) if eval translate_and_compile $file; then objs="$objs `basename $file .f`.o" else break fi ;; *) objs="$objs $file" esac done case $? in 0) $compiler $cflags $outopt $objs -lpfc -lm ;; esac ;; *) for file in "$files"; do case $file in *.f) name=`basename $file .f` if eval translate_and_compile $file; then : true else break fi ;; *) if eval $compiler -c $cflags $outopt $file; then : true else errmsg "Unable to compile $file" break fi ;; esac done ;; esac exit