openPMD/openPMD-api

Query backend versions

Open

#1,563 opened on Dec 1, 2023

 (1 comment) (0 reactions) (0 assignees)C++ (57 forks)auto 404
backenddiscussionfeature requestfrontend: C++17frontend: Python3help wanted

Repository metrics

Stars
 (160 stars)
PR merge metrics
 (PR metrics pending)

Description

Is your feature request related to a problem? If so, please describe.

Downstream applications might need to guard against bugs in e.g. ADIOS2 or HDF5. This is currently difficult, since it requires including backend-specific headers.

Describe the solution you'd like Since backend versions can be changed in openPMD-api's design without an ABI change, this should ideally be runtime call.

We already have the following in version.hpp:

/** Return the feature variants of the openPMD-api library (run-time)
 *
 * @return std::map< std::string, bool > with variants such as backends
 */
std::map<std::string, bool> getVariants();

This cannot be extended to include version information without breaking API, but an additional call could help:

struct backend_information
{
     std::string version;
};

std::map<std::string, backend_information> getVariantsDetailed();

Describe alternatives you've considered

  1. Using #define macros: Would require including backend headers into public headers, which goes against our project structure and would make the ABI of user code depend on the available backends. Currently, installing a new version of e.g. ADIOS2 only requires relinking downstream applications.
  2. Fetching this information manually in downstream applications: Requires interacting with the backend libraries instead of going via openPMD-api.

Additional context Required for implementing the open TODO in https://github.com/ComputationalRadiationPhysics/picongpu/pull/4759

Contributor guide