Commit Graph

868 Commits

Author SHA1 Message Date
Sean McBride
5a4040b8e2 Fixed various clang Wunused-but-set-variable warnings
Mostly, this was dead code.

In some cases, the variable looked useful in debug, so I kept it but mark it unused by casting it to void.
2024-11-15 23:55:07 -05:00
Ward Fisher
818f56d933 Correct typo. 2024-11-12 10:30:31 -07:00
Dennis Heimbigner
efdec07f3d Extend the netcdf API to support programmatic changes to the plugin search path
Replaces PR https://github.com/Unidata/netcdf-c/pull/3024
         and PR https://github.com/Unidata/netcdf-c/pull/3033

re: https://github.com/Unidata/netcdf-c/issues/2753

As suggested by Ed Hartnett, This PR extends the netcdf.h API to support programmatic control over the search path used to locate plugins.

I created several different APIs, but finally settled on the following API as being the simplest possible. It does have the disadvantage that it requires use of a global lock (not implemented) if used in a threaded environment.

Specifically, note that modifying the plugin path must be done "atomically". That is, in a multi-threaded environment, it is important that the sequence of actions involved in setting up the plugin path must be done by a single processor or in some other way as to guarantee that two or more processors are not simultaneously accessing the plugin path get/set operations.

As an example, assume there exists a mutex lock called PLUGINLOCK. Then any processor accessing the plugin paths should operate as follows:
````
lock(PLUGINLOCK);
nc_plugin_path_get(...);
<rebuild plugin path>
nc_plugin_path_set(...);
unlock(PLUGINLOCK);
````
## Internal Architecture

It is assumed here that there only needs to be a single set of plugin path directories that is shared by all filter code and is independent of any file descriptor; it is global in other words. This means, for example, that the path list for NCZarr and for HDF5 will always be the same.

However internally, processing the set of plugin paths depends on the particular NC_FORMATX value (NC_FORMATX_NC_HDF5 and NC_FORMATX_NCZARR, currently). So the *nc_plugin_path_set* function, will take the paths it is given and propagate them to each of the NC_FORMATX dispatchers to store in a way that is appropriate to the given dispatcher.

There is a complication with respect to the *nc_plugin_path_get* function. It is possible for users to bypass the netcdf API and modify the HDF5 plugin paths directly. This can result in an inconsistent plugin path between the value used by HDF5 and the global value used by netcdf-c. Since there is no obvious fix for this, we warn the user of this possibility and otherwise ignore it.

## Test Changes
* New tests<br>
    a. unit_test/run_pluginpaths.sh -- was created to test this new capability.<br>
    b. A new test utility has been added as *unit_test/run_dfaltpluginpath.sh* to test the default plugin path list.
* New test support utilities<br>
    a. unit_test/ncpluginpath.c -- report current state of the plugin path<br>
    b. unit_test/tst_pluginpaths.c -- test program to support run_pluginpaths.sh

## Documentation
* A new file -- docs/pluginpath.md -- provides documentation of the new API. It includes some
  material taken fro filters.md.

## Other Major Changes
1. Cleanup the whole plugin path decision tree. This is described in the *docs/pluginpath.md* document and summarized in Addendum 2 below.
2. I noticed that the ncdump/testpathcvt.sh had been disabled, so fixed and re-enabled it. This necessitated some significant changes to dpathmgr.c.

## Misc. Changes
1. Add some path manipulation utilities to netcf_aux.h
2. Fix some minor bugs in netcdf_json.h
3. Convert netcdf_json.h and netcdf_proplist.h to BUILT_SOURCE.
4. Add NETCDF_ENABLE_HDF5 as synonym for USE_HDF5
5. Fix some size_t <-> int conversion warnings.
6. Encountered and fixed the Windows \r\n problem in tst_pluginpaths.c.
7. Cleanup some minor CMakeLists.txt problems.
8. Provide an implementation of echo -n since it appears to not be
   available on all platforms.
9. Add a property list mechanism to pass environmental information to filters.
10. Cleanup Doxyfile.in
11. Fixed a memory leak in libdap2; surprised that I did not find this earlier.

## Addendum 1: Proposed API

The API makes use of a counted vector of strings representing the sequence of directories in the path. The relevant type definition is as follows.
````
typedef struct NCPluginList {size_t ndirs; char** dirs;} NCPluginList;
````

The API proposed in this PR looks like this (from netcdf-c/include/netcdf_filter.h).

* ````int nc_plugin_path_ndirs(size_t* ndirsp);````
    Arguments: *ndirsp* -- store the number of directories in this memory.

    This function returns the number of directories in the sequence if internal directories of the internal plugin path list.

* ````int nc_plugin_path_get(NCPluginList* dirs);````
    Arguments:  *dirs* -- counted vector for storing the sequence of directies in the internal path list.

    This function returns the current sequence of directories from the internal plugin path list. Since this function does not modify the plugin path, it does not need to be locked; it is only when used to get the path to be modified that locking is required.  If the value of *dirs.dirs* is NULL (the normal case), then memory is allocated to hold the vector of directories. Otherwise, use the memory of *dirs.dirs* to hold the vector of directories.

* ````int nc_plugin_path_set(const NCPluginList* dirs);````
    Arguments: *dirs* -- counted vector for providing the new sequence of directories in the internal path list.

    This function empties the current internal path sequence and replaces it with the sequence of directories argument. Using an *ndirs* argument of 0 will clear the set of plugin paths.

## Addendum 2: Build-Time and Run-Time Constants.

### Build-Time Constants
<table style="border:2px solid black;border-collapse:collapse">
<tr style="outline: thin solid;" align="center"><td colspan="4">Table showing the build-time computation of NETCDF_PLUGIN_INSTALL_DIR and NETCDF_PLUGIN_SEARCH_PATH.</td>
<tr style="outline: thin solid" ><th>--with-plugin-dir<th>--prefix<th>NETCDF_PLUGIN_INSTALL_DIR<th>NETCDF_PLUGIN_SEARCH_PATH
<tr style="outline: thin solid" ><td>undefined<td>undefined<td>undefined<td>PLATFORMDEFALT
<tr style="outline: thin solid" ><td>undefined<td>&lt;abspath-prefix&gt;<td>&lt;abspath-prefix&gt;/hdf5/lib/plugin<td>&lt;abspath-prefix&gt;/hdf5/lib/plugin&lt;SEP&gt;PLATFORMDEFALT
<tr style="outline: thin solid" ><td>&lt;abspath-plugins&gt;<td>N.A.<td>&lt;abspath-plugins&gt;<td>&lt;abspath-plugins&gt;&lt;SEP&gt;PLATFORMDEFALT
</table>

<table style="border:2px solid black;border-collapse:collapse">
<tr style="outline: thin solid" align="center"><td colspan="2">Table showing the computation of the initial global plugin path</td>
<tr style="outline: thin solid"><th>HDF5_PLUGIN_PATH<th>Initial global plugin path
<tr style="outline: thin solid"><td>undefined<td>NETCDF_PLUGIN_SEARCH_PATH
<tr style="outline: thin solid"><td>&lt;path1;...pathn&gt;<td>&lt;path1;...pathn&gt;
</table>
2024-10-18 19:23:59 -06:00
Dennis Heimbigner
ef425b9171 ckp 2024-09-30 14:39:48 -06:00
Edward Hartnett
ccf29e68af adjusted cmake file 2024-08-17 05:49:30 -06:00
Ed
cef710abc5 added dependency for ncdump test ncdump_tst_nccopy3 2024-08-16 06:40:03 -06:00
Ed
b55fbfe6e8 added dependency for ncdump test ncdump_tst_nccopy3 2024-08-16 06:35:53 -06:00
Dennis Heimbigner
f0f0f39950 Cleanup various Zarr-related build issues
# Description
Remove various obsolete build options. Also do some code movement.

## Specific Changes

* The remotetest server is sometimes unstable, so provide a mechanism
  to force disabling calls to remotetest.unidata.ucar.edu.
  This is enabled by adding a repository variable named
  REMOTETESTDOWN with the value "yes".
* Fix CMakeLists.txt to use the uname command as an alternate
  to using the hostname command (which does not work under cygwin).
* Remove the JNA stuff as obsolete
* Remove the ENABLE_CLIENTSIDE_FILTERS options since it has been
  disabled for a while.
* Fix bad option flag in some github action .yml files: change --disable-xml2 to --disable-libxml2
* Collect globalstate definitions into nc4internal.h
* Remove ENABLE_NCZARR_FILTERS_TESTING option as obsolete and replace
  with ENABLE_NCZARR_FILTERS
* Move some dispatcher independent functions from libsrc4/nc4internal.c to libdispatch/ddispatch.c
* As a long term goal, and because it is now the case that --enable-nczarr
    => USE_NETCDF4, make the external options --enable-netcdf-4 and
    --enable-netcdf4 obsolete in favor of --enable-hdf5
    We will do the following for one more release cycle.
        1. Make --enable-netcdf-4 be an alias for --enable-netcdf4.
        2. Make --enable-netcdf4 an alias for --enable-hdf5.
        3. Internally, convert most uses of USE_NETCDF_4 ad USE_NETCDF4 to USE_HDF5
    After the next release, --enable-netcdf-4 and --enable-netcdf4 will
    be removed.
2024-05-15 18:46:25 -06:00
Ward Fisher
f8164e3b73
Merge pull request #2917 from MehdiChinoune/ci-mingw
CI: Setup a CMake job for MSYS2/MinGW
2024-05-14 17:26:43 -07:00
Ward Fisher
ebd3f36a9a Modify CMakeLists.txt to honor CMAKE_INSTALL_MANDIR in support of https://github.com/Unidata/netcdf-c/issues/2920. 2024-05-07 16:46:43 -06:00
Dennis Heimbigner
211538cf25 Modify ncdump to print char-valued variables as utf8.
re: Issue https://github.com/Unidata/netcdf-c/issues/2916

Currently, ncdump prints char-valued variables as a mix
of ascii and octal characters. The octal format is used
for non-printable ascii character values.

This PR changes this to print the char variable values
as raw binary. This means in practice that utf-8 tags
are properly interpreted and printed as utf-8.
2024-05-07 10:36:14 -06:00
مهدي شينون (Mehdi Chinoune)
c5c2d931cc CMake: Fix running tests on MinGW 2024-05-07 04:44:54 +01:00
Ward Fisher
c26f7eabf4 Refactor macro _FillValue to NC_FillValue in support of https://github.com/Unidata/netcdf-c/issues/2858 2024-04-24 11:38:07 -06:00
Ward Fisher
cdfe909a1a Add CI for a Windows Runner on Github Actions. 2024-04-17 13:29:18 -05:00
Ward Fisher
9639ba445d
Merge pull request #2875 from seanm/clang-tidy-fixes
Misc clang-tidy fixes, and added a .clang-tidy config file
2024-04-05 14:45:22 -06:00
Ward Fisher
38d3831319
Merge branch 'main' into clang-tidy-fixes 2024-04-02 15:30:47 -06:00
Peter Hill
3c6bd83330
Change format of backwards-loops
Enables using correct `size_t` type for loop counter, usually fixing
some conversion warnings
2024-03-25 14:25:38 +00:00
Ward Fisher
ad53ef4203
Merge pull request #2814 from ZedThree/fix-dumplib-warnings
Fix most warnings in `dumplib.c`
2024-03-20 17:19:52 -06:00
Kyle Shores
a82659b0e9 Replace ENABLE_TESTS with NETCDF_ENABLE_TESTS 2024-03-18 15:54:48 -05:00
Kyle Shores
d1334f7b88 Replace ENABLE_NCZARR with NETCDF_ENABLE_NCZARR 2024-03-18 15:52:19 -05:00
Kyle Shores
ba2cf68597 Replace ENABLE_LARGE_FILE_TESTS with NETCDF_ENABLE_LARGE_FILE_TESTS 2024-03-18 15:52:07 -05:00
Kyle Shores
d270aa8e93 Replace ENABLE_DAP with NETCDF_ENABLE_DAP 2024-03-18 15:51:14 -05:00
Kyle Shores
2bce1e6776 Replace ENABLE_CDF5 with NETCDF_ENABLE_CDF5 2024-03-18 15:51:04 -05:00
Sean McBride
fb5c6b139c Auto fixed clang-tidy readability-uppercase-literal-suffix warnings 2024-03-01 20:46:58 -05:00
Sean McBride
4188db2817 Auto fixed clang-tidy readability-redundant-control-flow warnings 2024-03-01 20:46:58 -05:00
Sean McBride
0d82e3cd28 Auto fixed clang-tidy bugprone-suspicious-string-compare warnings 2024-03-01 20:46:58 -05:00
Kyle Shores
3526faa98d removing debug information 2024-02-23 09:01:28 -06:00
Kyle Shores
a73f4960e3 fixing a typo 2024-02-22 16:00:48 -06:00
Kyle Shores
dda2c2de69 merging main 2024-02-22 09:59:05 -06:00
Peter Hill
907e5cc43f
CMake: Use target_link_libraries with HDF5::HDF5 target 2024-02-16 10:51:20 +00:00
Kyle Shores
53887b2295 and now this 2024-02-15 16:51:38 -06:00
Kyle Shores
12120235b2 making netcdf link publicly to hdf5 includd directoriess 2024-02-14 10:40:53 -06:00
Kyle Shores
0a01ea62dd por que no los dos 2024-02-14 10:28:31 -06:00
Kyle Shores
5cc35dee1c maybe it's this one? 2024-02-14 10:24:25 -06:00
Kyle Shores
5eaa72cf35 trying to link to hdf5 2024-02-14 10:14:30 -06:00
Kyle Shores
d7e26cad6b there has to be a better way to debug this 2024-02-13 16:33:20 -06:00
Ward Fisher
25fc13bd80
Merge pull request #2840 from ZedThree/silence-ncdump-warnings
Silence ncdump warnings
2024-02-09 16:49:01 -07:00
Kyle Shores
0b78616ddb lowercase things 2024-02-09 16:27:18 -06:00
Ward Fisher
fff6e53854 Rebased on current Unidata/netcdf-c main branch. 2024-01-23 11:55:31 -08:00
Ward Fisher
13d9fc38c2
Merge branch 'main' into unity 2024-01-22 12:42:25 -08:00
Ward Fisher
42b3f5582e Added a comment block for future reference. 2024-01-22 12:37:35 -08:00
Ward Fisher
16bcb1ddb9 Merge branch 'silence-nclist-warnings' of https://github.com/ZedThree/netcdf-c into rebase-gh2812.wif 2024-01-19 11:11:21 -07:00
Peter Hill
700dfd29cc
Fix argument type on internal utility function 2024-01-15 15:46:14 +00:00
Peter Hill
0706278119
Remove unused argument from internal utility function 2024-01-15 15:46:13 +00:00
Peter Hill
ea5a0631c5
Fix misleading indentation on if/else statements 2024-01-15 15:46:13 +00:00
Peter Hill
b6eb730684
Silence various conversion warnings in ncdump 2024-01-15 15:46:13 +00:00
Peter Hill
409ca579ab
Fix return type on a couple of internal utility functions 2024-01-15 15:46:13 +00:00
Peter Hill
b94199874d
Fix returning wrong type 2024-01-15 15:46:13 +00:00
Peter Hill
472b30f313
Remove some unused variables 2024-01-15 15:46:13 +00:00
Peter Hill
a7552b4b83
Fix a couple of conversion warnings in shared nczarr/ncdump test 2024-01-15 13:57:22 +00:00