mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-12-27 08:49:16 +08:00
8b0e1134b4
re: Issue https://github.com/Unidata/netcdf-c/issues/2419 There are effectively two json subsystems in netcdf-c. 1. ncjson.[ch] in libnetcdf 2. netcdf_json.h for use by plugins so they can be built without need for libnetcdf. The netcdf_json.h file is constructed from the concatenation of ncjson.h plus ncjson.c. It turned out that in doing this, I was leaving some symbols externally visible so that if, for some reason, a plugin was built and needed libnetcdf, then symbol conflicts arose. The solution is to prefix the declarations in ncjson.[ch] with a macro (OPTSTATIC) that can be resolved to either nothing or to "static". Then in netcdf_json.h, it resolves to "static" and prevents the symbol conflicts. Note that netcdf_json.h is constructed once in netcdf-c/include/Makefile.am with the rule named "makepluginjson". This means that it is included in the distribution. However, this also means that if ncjson.[ch] is changed, then it is necessary to invoke makepluginjson explicitly to rebuild netcdf_json.h
47 lines
1.8 KiB
Makefile
47 lines
1.8 KiB
Makefile
## This is a automake file, part of Unidata's netCDF package.
|
|
# Copyright 2018, see the COPYRIGHT file for more information.
|
|
|
|
# This automake file generates the Makefile to build the include
|
|
# directory.
|
|
|
|
# Ed Hartnett, Dennis Heimbigner, Ward Fisher
|
|
|
|
include_HEADERS = netcdf.h netcdf_meta.h netcdf_mem.h netcdf_aux.h \
|
|
netcdf_filter.h netcdf_filter_build.h netcdf_filter_hdf5_build.h netcdf_dispatch.h netcdf_json.h
|
|
|
|
if BUILD_PARALLEL
|
|
include_HEADERS += netcdf_par.h
|
|
endif
|
|
|
|
noinst_HEADERS = nc_logging.h nc_tests.h fbits.h nc.h nclist.h \
|
|
ncuri.h ncutf8.h ncdispatch.h ncdimscale.h netcdf_f.h err_macros.h \
|
|
ncbytes.h nchashmap.h ceconstraints.h rnd.h nclog.h ncconfigure.h \
|
|
nc4internal.h nctime.h nc3internal.h onstack.h ncrc.h ncauth.h \
|
|
ncoffsets.h nctestserver.h nc4dispatch.h nc3dispatch.h ncexternl.h \
|
|
ncpathmgr.h ncindex.h hdf4dispatch.h hdf5internal.h nc_provenance.h \
|
|
hdf5dispatch.h ncmodel.h isnan.h nccrc.h ncexhash.h ncxcache.h \
|
|
ncjson.h ncxml.h ncs3sdk.h
|
|
|
|
if USE_DAP
|
|
noinst_HEADERS += ncdap.h
|
|
endif
|
|
|
|
if ENABLE_BYTERANGE
|
|
noinst_HEADERS += nchttp.h
|
|
endif
|
|
|
|
EXTRA_DIST = CMakeLists.txt XGetopt.h netcdf_meta.h.in netcdf_dispatch.h.in
|
|
|
|
# netcdf_json.h is constructed as a header-only file for use by
|
|
# nczarr code wrappers in the plugin directory. It is
|
|
# constructed by joining libdispatch/ncjson.c with
|
|
# include/ncjson.h. Additionally all the entry points are
|
|
# marked with a macro (OPTSTATIC) that marks the entry point as
|
|
# static inside netcdf_json.h. This is an ugly hack to avoid
|
|
# having to reference libnetcdf in the nczarr code wrappers.
|
|
|
|
# Give the recipe for rebuilding netcdf_json.h
|
|
makepluginjson::
|
|
sed -e 's/NCJSON_H/NETCDF_JSON_H/' -e '/ncjson.h/d' <${srcdir}/ncjson.h > netcdf_json.h
|
|
sed -e '/ncjson.h/d' < ${srcdir}/../libdispatch/ncjson.c >> netcdf_json.h
|