diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b070dc4..e2d0261b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,8 +89,13 @@ endif() ## install header files, generate and install cmake config files for find_package() ## include(CMakePackageConfigHelpers) -write_basic_package_version_file( - ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} COMPATIBILITY SameMajorVersion +# use a custom package version config file instead of +# write_basic_package_version_file to ensure that it's architecture-independent +# https://github.com/nlohmann/json/issues/1697 +configure_file( + "cmake/nlohmann_jsonConfigVersion.cmake.in" + ${NLOHMANN_JSON_CMAKE_VERSION_CONFIG_FILE} + @ONLY ) configure_file( ${NLOHMANN_JSON_CMAKE_CONFIG_TEMPLATE} diff --git a/cmake/nlohmann_jsonConfigVersion.cmake.in b/cmake/nlohmann_jsonConfigVersion.cmake.in new file mode 100644 index 00000000..10910859 --- /dev/null +++ b/cmake/nlohmann_jsonConfigVersion.cmake.in @@ -0,0 +1,20 @@ +# This is essentially cmake's BasicConfigVersion-SameMajorVersion.cmake.in but +# without the 32/64-bit check. Since json is a header-only library, it doesn't +# matter if it was built on a different platform than what it is used on (see +# https://github.com/nlohmann/json/issues/1697). +set(PACKAGE_VERSION "@PROJECT_VERSION@") + +if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + + if(PACKAGE_FIND_VERSION_MAJOR STREQUAL "@PROJECT_VERSION_MAJOR@") + set(PACKAGE_VERSION_COMPATIBLE TRUE) + else() + set(PACKAGE_VERSION_COMPATIBLE FALSE) + endif() + + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif()