Commit Graph

7 Commits

Author SHA1 Message Date
Andrea Pappacoda
77982de955
CMakePackageConfigHelpers: only emit arch check if needed
Before this patch, the write_basic_package_version_file() function of
the CMakePackageConfigHelpers module always emitted an architecture
check, even if the ARCH_INDEPENDENT option was specified. While this is
not an issue when configuring builds, as the check is skipped, this can
create issues when the "arch independent" version files are installed in
the datadir (e.g. /usr/share) in a MultiArch environment like Debian,
where different architecture packages of the same libraries can be
coinstalled; as the amd64 version of a given library contains "8 * 8"
in the file, while the i386 one contains "4 * 8", there's a conflict, as
files in /usr/share are expected to be identical across architectures.

This patch fixes this issue by only emitting the architecture check code
if needed; when ARCH_INDEPENDENT is specified, no code is written at
all.

Here's a diff between the version files generated before and after this
patch:

    diff -u old/indep.cmake new/indep.cmake
    --- old/indep.cmake	2023-01-29 13:43:04.840671117 +0100
    +++ new/indep.cmake	2023-01-29 13:57:28.475191551 +0100
    @@ -52,19 +52,3 @@
     endif()

    -# if the installed project requested no architecture check, don't perform the check
    -if("TRUE")
    -  return()
    -endif()
    -
    -# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
    -if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "")
    -  return()
    -endif()
    -
    -# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
    -if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8")
    -  math(EXPR installedBits "8 * 8")
    -  set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
    -  set(PACKAGE_VERSION_UNSUITABLE TRUE)
    -endif()
    diff -u old/no-indep.cmake new/no-indep.cmake
    --- old/no-indep.cmake	2023-01-29 13:42:05.010710508 +0100
    +++ new/no-indep.cmake	2023-01-29 13:57:40.914237219 +0100
    @@ -52,13 +52,8 @@
     endif()

    -# if the installed project requested no architecture check, don't perform the check
    -if("FALSE")
    -  return()
    -endif()
    -
     # if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
    -if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "")
    +if(CMAKE_SIZEOF_VOID_P STREQUAL "" OR "8" STREQUAL "")
       return()
     endif()

Fixes: #24375
2023-01-29 14:00:13 +01:00
Robert Maynard
e609afeb5f WriteBasicConfigVersion supports version strings such as 21.07.04
Fixes #22207
2021-05-27 15:18:37 -04:00
Marc Chevrier
55c3b6a77e CMakePackageConfigHelpers: Relax restrictions on version range 2020-12-15 09:24:09 +11:00
Marc Chevrier
5b3356263c CMakePackageConfigHelpers: Add version range support 2020-09-23 12:52:25 +02:00
Kitware Robot
932dcce1e6 Modules: Consistently use 2 space indentation 2019-05-14 15:26:46 -04:00
Justin Bassett
eb973f935f CMakePackageConfigHelpers: Add ARCH_INDEPENDENT option
Allow skipping the architecture check in the package version file generated from calling
write_basic_package_version_file. Document said architecture check.

Fixes: #16184
2018-11-30 22:52:40 -08:00
Daniele E. Domenichelli
16a93de0a8 WriteBasicConfigVersionFile: Add SameMinorVersion COMPATIBILITY option 2017-11-21 09:27:07 +01:00