Search code examples
c++cmakemongo-c-driver

find_package with specified version in configuration script name


I need to use mangrove (mongo ODM lib over mongo-c-driver and mongo-cxx-driver) and included this into my project as CMake ExternalProject_Add command, with a dependency on mongo-c-driver/mongo-cxx-driver

mongocxx generates CMake configuration scripts with a names like :

libmongocxx-config.cmake

libmongocxx-config-version.cmake

and no issues to find these by mangrove with that script:

set(LIBMONGOCXX_REQUIRED_VERSION 3.1.3)
set(LIBMONGOCXX_REQUIRED_ABI_VERSION v_noabi)
find_package(libmongocxx ${LIBMONGOCXX_REQUIRED_VERSION} REQUIRED)

However mongo-c-driver generates those scripts with a name which incudes ABI version into file names.

libmongoc-1.0-config.cmake

libmongoc-1.0-config-version.cmake

and similar CMake code:

set(LIBMONGOC_REQUIRED_VERSION 1.7.0)
set(LIBMONGOC_REQUIRED_ABI_VERSION 1.0)
find_package(LibMongoC ${LIBMONGOC_REQUIRED_VERSION} REQUIRED)

can't find out the scripts.

Of course, if I manually remove the version from file names, it can find those files, but I'd like to fix the problem in a script and on mangove side.

So the question about CMake techniques :

Is there an ability to specify the version of package which will automatically used by (inside CMake scripts names) find_package command to look for?


Solution

  • According to find_package documentation, the version is embedded inside the libmongocxx-config-version.cmake file.

    This means that if you want to get the package libmongoc-1.0-config.cmake, you should use:

    find_package(libmongoc-1.0 ${LIBMONGOC_REQUIRED_VERSION} REQUIRED)