summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorAndrea Pappacoda <andrea@pappacoda.it>2023-01-29 13:00:13 (GMT)
committerAndrea Pappacoda <andrea@pappacoda.it>2023-01-29 13:00:13 (GMT)
commit77982de955fd011769c469b7dce2825483ba33aa (patch)
tree0889d45a0f24dd1755d170b16118c64bf0eb6d55 /Modules
parenta5e272c76fddb7aeaa48d6ebafbc2be330e37fb3 (diff)
downloadCMake-77982de955fd011769c469b7dce2825483ba33aa.zip
CMake-77982de955fd011769c469b7dce2825483ba33aa.tar.gz
CMake-77982de955fd011769c469b7dce2825483ba33aa.tar.bz2
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
Diffstat (limited to 'Modules')
-rw-r--r--Modules/BasicConfigVersion-AnyNewerVersion.cmake.in18
-rw-r--r--Modules/BasicConfigVersion-ExactVersion.cmake.in18
-rw-r--r--Modules/BasicConfigVersion-SameMajorVersion.cmake.in18
-rw-r--r--Modules/BasicConfigVersion-SameMinorVersion.cmake.in18
-rw-r--r--Modules/WriteBasicConfigVersionFile.cmake15
5 files changed, 19 insertions, 68 deletions
diff --git a/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in b/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
index 46b8b2a..aeac0d9 100644
--- a/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
+++ b/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
@@ -29,20 +29,4 @@ else()
endif()
endif()
-
-# if the installed project requested no architecture check, don't perform the check
-if("@CVF_ARCH_INDEPENDENT@")
- 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 "@CMAKE_SIZEOF_VOID_P@" 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 "@CMAKE_SIZEOF_VOID_P@")
- math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
- set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
- set(PACKAGE_VERSION_UNSUITABLE TRUE)
-endif()
+@CVF_ARCH_INDEPENDENT_CHECK@
diff --git a/Modules/BasicConfigVersion-ExactVersion.cmake.in b/Modules/BasicConfigVersion-ExactVersion.cmake.in
index c8d2695..8dac2af 100644
--- a/Modules/BasicConfigVersion-ExactVersion.cmake.in
+++ b/Modules/BasicConfigVersion-ExactVersion.cmake.in
@@ -69,20 +69,4 @@ if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION)
set(PACKAGE_VERSION_EXACT TRUE)
endif()
-
-# if the installed project requested no architecture check, don't perform the check
-if("@CVF_ARCH_INDEPENDENT@")
- 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 "@CMAKE_SIZEOF_VOID_P@" 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 "@CMAKE_SIZEOF_VOID_P@")
- math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
- set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
- set(PACKAGE_VERSION_UNSUITABLE TRUE)
-endif()
+@CVF_ARCH_INDEPENDENT_CHECK@
diff --git a/Modules/BasicConfigVersion-SameMajorVersion.cmake.in b/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
index cf73f60..85a0355 100644
--- a/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
+++ b/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
@@ -51,20 +51,4 @@ else()
endif()
endif()
-
-# if the installed project requested no architecture check, don't perform the check
-if("@CVF_ARCH_INDEPENDENT@")
- 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 "@CMAKE_SIZEOF_VOID_P@" 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 "@CMAKE_SIZEOF_VOID_P@")
- math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
- set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
- set(PACKAGE_VERSION_UNSUITABLE TRUE)
-endif()
+@CVF_ARCH_INDEPENDENT_CHECK@
diff --git a/Modules/BasicConfigVersion-SameMinorVersion.cmake.in b/Modules/BasicConfigVersion-SameMinorVersion.cmake.in
index ef21df6..87c4930 100644
--- a/Modules/BasicConfigVersion-SameMinorVersion.cmake.in
+++ b/Modules/BasicConfigVersion-SameMinorVersion.cmake.in
@@ -71,20 +71,4 @@ else()
endif()
endif()
-
-# if the installed project requested no architecture check, don't perform the check
-if("@CVF_ARCH_INDEPENDENT@")
- 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 "@CMAKE_SIZEOF_VOID_P@" 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 "@CMAKE_SIZEOF_VOID_P@")
- math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
- set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
- set(PACKAGE_VERSION_UNSUITABLE TRUE)
-endif()
+@CVF_ARCH_INDEPENDENT_CHECK@
diff --git a/Modules/WriteBasicConfigVersionFile.cmake b/Modules/WriteBasicConfigVersionFile.cmake
index 45f9e58..1c5ecd5 100644
--- a/Modules/WriteBasicConfigVersionFile.cmake
+++ b/Modules/WriteBasicConfigVersionFile.cmake
@@ -46,6 +46,21 @@ function(WRITE_BASIC_CONFIG_VERSION_FILE _filename)
endif()
endif()
+ if(NOT CVF_ARCH_INDEPENDENT)
+ set(CVF_ARCH_INDEPENDENT_CHECK "
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if(CMAKE_SIZEOF_VOID_P STREQUAL \"\" OR \"${CMAKE_SIZEOF_VOID_P}\" 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 \"${CMAKE_SIZEOF_VOID_P}\")
+ math(EXPR installedBits \"${CMAKE_SIZEOF_VOID_P} * 8\")
+ set(PACKAGE_VERSION \"\${PACKAGE_VERSION} (\${installedBits}bit)\")
+ set(PACKAGE_VERSION_UNSUITABLE TRUE)
+endif()")
+ endif()
+
configure_file("${versionTemplateFile}" "${_filename}" @ONLY)
endfunction()