netcdf-c/debug/libdispatch/Make0
Dennis Heimbigner 245961de00 re: github issues
https://github.com/Unidata/netcdf-c/issues/1168
    https://github.com/Unidata/netcdf-c/issues/1163
    https://github.com/Unidata/netcdf-c/issues/1162

This PR partially fixes memory leaks in the netcdf-c library,
in the ncdump utility, and in some test cases.

The netcdf-c library now runs memory clean with the assumption
that the --disable-utilities option is used. The primary remaining
problem is ncgen. Once that is fixed, I believe the netcdf-c library
will run memory clean with no limitations.

Notes
-----------
1. Memory checking was performed using gcc -fsanitize=address.
   Valgrind-based testing has yet to be performed.
2. The pnetcdf, hdf4, and examples code has not been tested.

Misc. Non-leak changes
1. Make tst_diskless2 only run when netcdf4 is enabled (issue 1162)
2. Fix CmakeLists.txt to turn off logging if ENABLE_NETCDF_4 is OFF
3. Isolated all my debug scripts into a single top-level directory
   called debug
4. Fix some USE_NETCDF4 dependencies in nc_test and nc_test4 Makefile.am
2018-10-30 20:48:12 -06:00

278 lines
7.2 KiB
Plaintext

#NETCDF4=1
#CURLLIB=-L/opt/csw/lib -lcurl
# for irix
#CURLLIB=/upc/share/stdinstall/local/flip/lib/libcurl.a -llber -lldap -lz
#CURLLIB=-L/opt/csw/lib -lcurl -lidn -lssl -lcrypto -llber -lldap -lnsl
#CURLINCL=-I/opt/csw/include
#RPCLIB=-lnsl
#ZLIB=-L/opt/csw/lib -lz
#TESTURL=file:///upc/share/dmh/nc/netcdf-3/ncdap_test/testdata3
VALGRIND=valgrind --leak-check=full
#NCLIB=/tmp/install/lib/libnetcdf.a
NCLIB=../liblib/.libs/libnetcdf.a
NCINCL=-I ../liblib
#OCLIB=liboc.a
#OCINCL=-I./oc
LFLAG=-L/upc/share/ed/local/${HOST}/lib
CURLLIB=-lcurl
ZLIB=-lz
#HDF5LIB=-lhdf5_hl -lhdf5
HDF5LIB=/upc/share/stdinstall/local/${HOST}/lib/libhdf5_hl.a /upc/share/stdinstall/local/${HOST}/lib/libhdf5.a
OTHERLIBS=-lm
LIBS=${NCLIB} ${LFLAG} ${CURLLIB} ${HDF5LIB} ${ZLIB} ${OTHERLIBS}
INCL=-I. -I.. -I../include ${NCINCL} ${CURLINCL}
RPATH=-Wl,-rpath,${LFLAG}
# Might want to specify a particular C compiler with flags
CC=cc
CFLAGS=-g -O0 -Wall -DHAVE_CONFIG_H
#CFLAGS=-DHAVE_CONFIG_H
GFLAGS=-g3 -O0
#############################################
TESTLIBS=${LIBS}
TESTINCL=${INCL}
##################################################
SRC=\
dapcvt.c \
dapalign.c \
dapodom.c \
getvar3.c \
ncdaperr.c \
cdf3.c \
ncdap3.c \
dapdispatch3.c \
dispatch3.c \
dapdump.c \
dapdebug.c \
daputil.c \
nchashmap.c nclist.c ncbytes.c
HDRS=\
daprename.h \
dapalign.h \
dapodom.h \
getvar3.h \
dapnc.h \
daputil.h \
dispatch3.h \
dispatchdefs3.h \
dapdispatch3.h \
ncdap3.h \
dapdebug.h \
dapdump.h \
nchashmap.c nclist.h ncbytebuffer.h
OBJ=${SRC:%.c=%.o}
ALLSRC=${SRC} ${HDRS} dap.y ce.y
EXE=main.exe
DRNOLIB=libncdap.a
##################################################
#all:: ncd octest
all: varm
##################################################
${EXE}: ${DRNOLIB} main.c
${CC} ${INCL} ${GFLAGS} -c main.c
if test -e ./libs/${DRNOLIB} ; then \
${CC} -o ${EXE} main.o ./.libs/${DRNOLIB} ./oc/.libs/${OCLIB} ${LIBS} ; \
else \
${CC} -o ${EXE} main.o ${DRNOLIB} ${OCLIB} ${LIBS} ; \
fi
${DRNOLIB}: ${OBJ}
ar r ${DRNOLIB} ${OBJ}
${OBJ}: ${SRC} ${HDRS}
${CC} ${CFLAGS} ${GFLAGS} -c ${INCL} ${SRC}
##################################################
clean::
rm -f *.o *.exe ${EXE} ${DRNOLIB}
rm -fr *.tab.c *.tab.h *.output
rm -f *.stackdump
rm -fr results
##################################################
${OCLIB}:
cp oc/${OCLIB} .
##################################################
UTILDIR=~/nc/utils
util:: ncbytes.h nclist.h nchashmap.h
ncbytes.h ncbytes.c: ${UTILDIR}/bytes_template.h ${UTILDIR}/bytes_template.c
rm -f ncbytes.h ncbytes.c
sed -e 's/<<>>/NC/g' -e 's/<>/nc/g' <${UTILDIR}/bytes_template.h >./ncbytes.h
sed -e 's/<<>>/NC/g' -e 's/<>/nc/g' <${UTILDIR}/bytes_template.c >./ncbytes.c
nclist.h nclist.c: ${UTILDIR}/list_template.h ${UTILDIR}/list_template.c
rm -f nclist.h nclist.c
sed -e 's/<<>>/NC/g' -e 's/<>/nc/g' <${UTILDIR}/list_template.h >./nclist.h
sed -e 's/<<>>/NC/g' -e 's/<>/nc/g' <${UTILDIR}/list_template.c >./nclist.c
nchashmap.h nchashmap.c: ${UTILDIR}/hashmap_template.h ${UTILDIR}/hashmap_template.c
rm -f nchashmap.h nchashmap.c
sed -e 's/<<>>/NC/g' -e 's/<>/nc/g' <${UTILDIR}/hashmap_template.h >./nchashmap.h
sed -e 's/<<>>/NC/g' -e 's/<>/nc/g' <${UTILDIR}/hashmap_template.c >./nchashmap.c
##################################################
XDRSRC=xdr.c xdr_float.c xdr_mem.c xdr_stdio.c
librpc.a: ${XDRSRC}
${CC} ${CFLAGS} ${GFLAGS} -c ${XDRSRC}
ar r librpc.a ${XDRSRC:.c=.o}
##################################################
# for f in $$OCFILES; do
makeoc::
-mkdir ./oc
rm -f ./oc/*.[chy]
for f in ${HOME}/nc/oc/*.[chy]; do base=`basename $$f` ; \
cat $$f | tr -d '\r' >./oc/$$base; done
cd ./oc; rm -f i.* apitest.* getoc.* imain.* main.*
cd ./oc; rm -f config.h dap.tab.c dap.tab.h ce.y ceparselex.*
cd ./oc; rm -f ocshadow.*
cd ./oc; rm -f octest.c
cd ./oc; rm -f ocinternal.h
sed -e 's|/[*]#undef OC_DISK_STORAGE[*]/|#undef OC_DISK_STORAGE|g' \
< ${HOME}/nc/oc/ocinternal.h | tr -d '\r' >./oc/ocinternal.h
# cd ./oc; rm -f ocdebug.h
# sed -e 's|#undef DUMPTEMP|#define DUMPTEMP|g' \
-e 's|#undef OCCATCHERROR|#define OCCATCHERROR|g' \
<${HOME}/nc/oc/ocdebug.h >./oc/ocdebug.h
# echo '#undef HAVE_RPC_XDR_H' >./oc/ocinternal.h
# echo '#define HAVE_RPC_XDR_H' >>./oc/ocinternal.h
# cat ${HOME}/nc/oc/ocdebug.h >>./oc/ocdebug.h
diffoc::
for f in /home/dmh/nc/oc/*.[chy] ; do \
x=`basename $$f|tr -d '
' ` ; \
if test "x$$x" = "xdaptab.c"; then continue ; fi ; \
if test -e oc/$$x ; then diff -qw oc/$$x $$f ; fi; \
done
for f in /home/dmh/nc/oc/*.[chy] ; do \
x=`basename $$f|tr -d '
' ` ; \
if test "x$$x" = "xdaptab.c"; then continue ; fi ; \
if test -e oc/$$x ; then \
if ! diff -qw oc/$$x $$f > /dev/null ; then \
echo diff -w oc/$$x $$f ;\
diff -w oc/$$x $$f ; \
fi; \
fi; \
done
octest::
cd oc; make -f Make0 all
cp oc/octest.exe ./octest
##################################################
TESTPARAMS=[unlimitedsequence][limit=10]
#TESTDEBUG=-d
ALLTESTS=synth1 synth2 synth3 synth4 synth5 synth6
TESTURL=file:///home/dmh/nc/netcdf-3/ncdap_test/testdata3
tests::
rm -fr results
mkdir results
for t in ${ALLTESTS} ; do (\
echo "-------------------------" ; \
echo "$${t}:" ; \
echo "-------------------------"; \
if ! ./${EXE} "${TESTPARAMS}${TESTURL}/$${t}${TESTCONS}" > results/$${t}.dmp ; then \
echo "$${t} failed"; \
fi; \
echo; \
) done
td:: ${TESTSRC} ${TEST}.c
${CC} ${CFLAGS} ${TESTINCL} ${GFLAGS} -c ${TEST}.c ${TESTSRC}
${CC} -o ${TEST}.exe ${TEST}.o ${TESTOBJ} ${TESTLIBS}
./${TEST}.exe -v ${TEST}
URL=${TESTPARAMS}${TESTURL}/${TEST}${TESTCONS}
t:: ${EXE}
${VALGRIND} ./${EXE} -v ${TESTDEBUG} "${URL}"
cpp::
rm -f junki
cc -E -DHAVE_CONFIG_H -I. -I.. -I../fortran -I../libsrc -I../libncdap/oc ${GFLAGS} drno.c >junk
##################################################
# ncd
NCDUMPC=../ncdump/dumplib.c ../ncdump/indent.c ../ncdump/ncdump.c ../ncdump/nctime.c ../ncdump/vardata.c ../ncdump/utils.c
NCDUMPH=../ncdump/cdl.h ../ncdump/dumplib.h ../ncdump/indent.h ../ncdump/isnan.h ../ncdump/ncdump.h ../ncdump/nctime.h ../ncdump/vardata.h ../ncdump/utils.h
NCDUMPOBJ=${NCDUMPC:../ncdump/%.c=%.o}
#${NCDUMPC} ${NCDUMPH} ${NCLIB}
ncd::
cd ..; make
${CC} -I.. ${CFLAGS} ${GFLAGS} -c ${INCL} ${NCDUMPC}
${CC} -o ncd ${NCDUMPOBJ} ${LIBS}
##################################################
# ncc
NCCOPYC=../ncdump/nccopy.c ../ncdump/nciter.c
NCCOPYH=
NCCOPYOBJ=${NCCOPYC:%.c=%.o}
#${NCDUMPC} ${NCDUMPH} ${NCLIB}
ncc::
cd ../libsrc; make
${CC} -I.. ${CFLAGS} ${GFLAGS} -c ${INCL} ${NCCOPYC}
${CC} -o ncc ${NCCOPYOBJ} ${NCLIB} ${CURLLIB} ${HDFLIBS} ${OTHERLIBS}
##################################################
vpt::
${CC} -g -O0 ${CFLAGS} -c ${INCL} vpt.c
${CC} -o vpt.exe vpt.o ${NCLIB} ${CURLLIB} ${HDFLIBS} ${OTHERLIBS}
date; ./vpt.exe "[compile]http://oceanwatch.pfeg.noaa.gov/opendap/GLOBEC/GLOBEC_vpt" vpt.year; date
##################################################
#T=test_varm3
#T=t_dap3b
T=t_dap3c
v::
cc -g -c ${T}.c ${INCL}
cc -g -o v ${T}.o ${LIBS} ${RPATH}
do::
pushd ..; make; popd ; $(MAKE) -f Make0 ncd
##################################################
FF=cache constraints3 dapattr3 dapdebug daputil ncdap3 ncdap3a
fix::
for f in ${FF} ; do \
rm -f ./$${f}.c ;\
sed -e 's/oc_log/nclog/g' -e 's/OCLOG/NCLOG/g' <ckp1/$${f}.c >./$${f}.c ; \
done