Skip to content

Commit 244370f

Browse files
committed
Refactor find module versions handling
This now enables using version ranges in all find modules and simplifies code.
1 parent a008b50 commit 244370f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+303
-422
lines changed

cmake/cmake/modules/FindACL.cmake

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ if(ACL_IS_BUILT_IN)
141141
else()
142142
set(_ACL_REQUIRED_VARS ACL_LIBRARY ACL_INCLUDE_DIR)
143143

144-
# Use pkgconf, if available on the system.
144+
# Try pkg-config.
145145
find_package(PkgConfig QUIET)
146146
if(PKG_CONFIG_FOUND)
147147
pkg_check_modules(PC_ACL QUIET libacl)
@@ -169,17 +169,10 @@ else()
169169
string(APPEND _reason "ACL library not found. ")
170170
endif()
171171

172-
# Get version.
173-
block(PROPAGATE ACL_VERSION)
174-
# ACL headers don't provide version. Try pkgconf version, if found.
175-
if(PC_ACL_VERSION AND ACL_INCLUDE_DIR)
176-
cmake_path(COMPARE "${ACL_INCLUDE_DIR}" EQUAL "${PC_ACL_INCLUDEDIR}" isEqual)
177-
178-
if(isEqual)
179-
set(ACL_VERSION ${PC_ACL_VERSION})
180-
endif()
181-
endif()
182-
endblock()
172+
# ACL headers don't provide version. Try pkg-config.
173+
if(PC_ACL_VERSION AND ACL_INCLUDE_DIR IN_LIST PC_ACL_INCLUDE_DIRS)
174+
set(ACL_VERSION ${PC_ACL_VERSION})
175+
endif()
183176

184177
_acl_check(_acl_works)
185178

@@ -204,6 +197,7 @@ find_package_handle_standard_args(
204197
${_ACL_REQUIRED_VARS}
205198
_acl_works
206199
VERSION_VAR ACL_VERSION
200+
HANDLE_VERSION_RANGE
207201
REASON_FAILURE_MESSAGE "${_reason}"
208202
)
209203

cmake/cmake/modules/FindApache.cmake

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,7 @@ if(Apache_APR_CONFIG_EXECUTABLE)
190190
)
191191
endif()
192192

193-
# Find the apr library (Apache portable runtime).
194-
# Use pkgconf, if available on the system.
193+
# Try pkg-config.
195194
find_package(PkgConfig QUIET)
196195
if(PKG_CONFIG_FOUND)
197196
pkg_check_modules(PC_Apache_APR QUIET apr-1)
@@ -294,7 +293,7 @@ endif()
294293

295294
# Get Apache version.
296295
block(PROPAGATE Apache_VERSION)
297-
if(Apache_INCLUDE_DIR AND EXISTS ${Apache_INCLUDE_DIR}/ap_release.h)
296+
if(EXISTS ${Apache_INCLUDE_DIR}/ap_release.h)
298297
file(
299298
STRINGS
300299
${Apache_INCLUDE_DIR}/ap_release.h
@@ -397,6 +396,7 @@ find_package_handle_standard_args(
397396
Apache_APR_INCLUDE_DIR
398397
Apache_EXECUTABLE
399398
VERSION_VAR Apache_VERSION
399+
HANDLE_VERSION_RANGE
400400
REASON_FAILURE_MESSAGE "${_reason}"
401401
)
402402

cmake/cmake/modules/FindAppArmor.cmake

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ set_package_properties(
3535

3636
set(_reason "")
3737

38-
# Use pkgconf, if available on the system.
38+
# Try pkg-config.
3939
find_package(PkgConfig QUIET)
4040
if(PKG_CONFIG_FOUND)
4141
pkg_check_modules(PC_AppArmor QUIET libapparmor)
@@ -77,21 +77,13 @@ if(NOT _apparmor_sanity_check)
7777
string(APPEND _reason "Sanity check failed: aa_change_profile not found. ")
7878
endif()
7979

80-
# Get version.
81-
block(PROPAGATE AppArmor_VERSION)
82-
# AppArmor headers don't provide version. Try pkgconf version, if found.
83-
if(PC_AppArmor_VERSION)
84-
cmake_path(
85-
COMPARE
86-
"${PC_AppArmor_INCLUDEDIR}" EQUAL "${AppArmor_INCLUDE_DIR}"
87-
isEqual
88-
)
89-
90-
if(isEqual)
91-
set(AppArmor_VERSION ${PC_AppArmor_VERSION})
92-
endif()
93-
endif()
94-
endblock()
80+
# AppArmor headers don't provide version. Try pkg-config.
81+
if(
82+
PC_AppArmor_VERSION
83+
AND AppArmor_INCLUDE_DIR IN_LIST PC_AppArmor_INCLUDE_DIRS
84+
)
85+
set(AppArmor_VERSION ${PC_AppArmor_VERSION})
86+
endif()
9587

9688
mark_as_advanced(AppArmor_INCLUDE_DIR AppArmor_LIBRARY)
9789

@@ -102,6 +94,7 @@ find_package_handle_standard_args(
10294
AppArmor_INCLUDE_DIR
10395
_apparmor_sanity_check
10496
VERSION_VAR AppArmor_VERSION
97+
HANDLE_VERSION_RANGE
10598
REASON_FAILURE_MESSAGE "${_reason}"
10699
)
107100

cmake/cmake/modules/FindArgon2.cmake

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ set_package_properties(
3434

3535
set(_reason "")
3636

37-
# Use pkgconf, if available on the system.
37+
# Try pkg-config.
3838
find_package(PkgConfig QUIET)
3939
if(PKG_CONFIG_FOUND)
4040
pkg_check_modules(PC_Argon2 QUIET libargon2)
@@ -62,21 +62,10 @@ if(NOT Argon2_LIBRARY)
6262
string(APPEND _reason "Argon2 library (libargon2) not found. ")
6363
endif()
6464

65-
# Get version.
66-
block(PROPAGATE Argon2_VERSION)
67-
# Argon2 headers don't provide version. Try pkgconf version, if found.
68-
if(PC_Argon2_VERSION)
69-
cmake_path(
70-
COMPARE
71-
"${PC_Argon2_INCLUDEDIR}" EQUAL "${Argon2_INCLUDE_DIR}"
72-
isEqual
73-
)
74-
75-
if(isEqual)
76-
set(Argon2_VERSION ${PC_Argon2_VERSION})
77-
endif()
78-
endif()
79-
endblock()
65+
# Argon2 headers don't provide version. Try pkg-config.
66+
if(PC_Argon2_VERSION AND Argon2_INCLUDE_DIR IN_LIST PC_Argon2_INCLUDE_DIRS)
67+
set(Argon2_VERSION ${PC_Argon2_VERSION})
68+
endif()
8069

8170
mark_as_advanced(Argon2_INCLUDE_DIR Argon2_LIBRARY)
8271

@@ -86,6 +75,7 @@ find_package_handle_standard_args(
8675
Argon2_LIBRARY
8776
Argon2_INCLUDE_DIR
8877
VERSION_VAR Argon2_VERSION
78+
HANDLE_VERSION_RANGE
8979
REASON_FAILURE_MESSAGE "${_reason}"
9080
)
9181

cmake/cmake/modules/FindBerkeleyDB.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ find_package_handle_standard_args(
155155
BerkeleyDB_INCLUDE_DIR
156156
_berkeleydb_sanity_check
157157
VERSION_VAR BerkeleyDB_VERSION
158+
HANDLE_VERSION_RANGE
158159
REASON_FAILURE_MESSAGE "${_reason}"
159160
)
160161

cmake/cmake/modules/FindCapstone.cmake

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@ Module defines the following `IMPORTED` target(s):
55
66
* `Capstone::Capstone` - The package library, if found.
77
8-
Result variables:
8+
## Result variables
99
1010
* `Capstone_FOUND` - Whether the package has been found.
1111
* `Capstone_INCLUDE_DIRS` - Include directories needed to use this package.
1212
* `Capstone_LIBRARIES` - Libraries needed to link to the package library.
1313
* `Capstone_VERSION` - Package version, if found.
1414
15-
Cache variables:
15+
## Cache variables
1616
1717
* `Capstone_INCLUDE_DIR` - Directory containing package library headers.
1818
* `Capstone_LIBRARY` - The path to the package library.
1919
20-
Hints:
20+
## Hints
2121
2222
The `Capstone_ROOT` variable adds custom search path.
2323
#]=============================================================================]
@@ -34,7 +34,7 @@ set_package_properties(
3434

3535
set(_reason "")
3636

37-
# Use pkgconf, if available on the system.
37+
# Try pkg-config.
3838
find_package(PkgConfig QUIET)
3939
if(PKG_CONFIG_FOUND)
4040
pkg_check_modules(PC_Capstone QUIET capstone)
@@ -72,19 +72,27 @@ block(PROPAGATE Capstone_VERSION)
7272
"^#[ \t]*define[ \t]+CS_(API_MAJOR|API_MINOR|VERSION_EXTRA)[ \t]+[0-9]+[ \t]*$"
7373
)
7474

75-
unset(Capstone_VERSION)
75+
set(Capstone_VERSION)
7676

7777
foreach(item CS_API_MAJOR CS_API_MINOR CS_VERSION_EXTRA)
7878
foreach(line ${results})
7979
if(line MATCHES "^#[ \t]*define[ \t]+${item}[ \t]+([0-9]+)[ \t]*$")
80-
if(DEFINED Capstone_VERSION)
80+
if(Capstone_VERSION)
8181
string(APPEND Capstone_VERSION ".${CMAKE_MATCH_1}")
8282
else()
8383
set(Capstone_VERSION "${CMAKE_MATCH_1}")
8484
endif()
8585
endif()
8686
endforeach()
8787
endforeach()
88+
89+
if(
90+
NOT Capstone_VERSION
91+
AND PC_Capstone_VERSION
92+
AND Capstone_INCLUDE_DIR IN_LIST PC_Capstone_INCLUDE_DIRS
93+
)
94+
set(Capstone_VERSION ${PC_Capstone_VERSION})
95+
endif()
8896
endif()
8997
endblock()
9098

@@ -96,6 +104,7 @@ find_package_handle_standard_args(
96104
Capstone_LIBRARY
97105
Capstone_INCLUDE_DIR
98106
VERSION_VAR Capstone_VERSION
107+
HANDLE_VERSION_RANGE
99108
REASON_FAILURE_MESSAGE "${_reason}"
100109
)
101110

@@ -109,20 +118,20 @@ endif()
109118
# <capstone/capstone.h>. Here both include directories are added so the code can
110119
# work with both includes. The "subdir" can be removed and simplified in the
111120
# future. See: https://github.com/capstone-engine/capstone/issues/1982
112-
block(PROPAGATE Capstone_INCLUDE_DIRS Capstone_LIBRARIES)
113-
set(subdir "${Capstone_INCLUDE_DIR}/capstone")
114-
115-
set(Capstone_INCLUDE_DIRS ${Capstone_INCLUDE_DIR} ${subdir})
116-
set(Capstone_LIBRARIES ${Capstone_LIBRARY})
121+
set(
122+
Capstone_INCLUDE_DIRS
123+
${Capstone_INCLUDE_DIR}
124+
${Capstone_INCLUDE_DIR}/capstone
125+
)
126+
set(Capstone_LIBRARIES ${Capstone_LIBRARY})
117127

118-
if(NOT TARGET Capstone::Capstone)
119-
add_library(Capstone::Capstone UNKNOWN IMPORTED)
128+
if(NOT TARGET Capstone::Capstone)
129+
add_library(Capstone::Capstone UNKNOWN IMPORTED)
120130

121-
set_target_properties(
122-
Capstone::Capstone
123-
PROPERTIES
124-
IMPORTED_LOCATION "${Capstone_LIBRARY}"
125-
INTERFACE_INCLUDE_DIRECTORIES "${Capstone_INCLUDE_DIR};${subdir}"
126-
)
127-
endif()
128-
endblock()
131+
set_target_properties(
132+
Capstone::Capstone
133+
PROPERTIES
134+
IMPORTED_LOCATION "${Capstone_LIBRARY}"
135+
INTERFACE_INCLUDE_DIRECTORIES "${Capstone_INCLUDE_DIRS}"
136+
)
137+
endif()

cmake/cmake/modules/FindCcache.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ find_package_handle_standard_args(
6060
REQUIRED_VARS
6161
Ccache_EXECUTABLE
6262
VERSION_VAR Ccache_VERSION
63+
HANDLE_VERSION_RANGE
6364
REASON_FAILURE_MESSAGE "${_reason}"
6465
)
6566

cmake/cmake/modules/FindCdb.cmake

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ set_package_properties(
3535

3636
set(_reason "")
3737

38-
# Use pkgconf, if available on the system.
38+
# Try pkg-config.
3939
find_package(PkgConfig QUIET)
4040
if(PKG_CONFIG_FOUND)
4141
pkg_check_modules(PC_Cdb QUIET libcdb)
@@ -77,14 +77,11 @@ block(PROPAGATE Cdb_VERSION)
7777
if(Cdb_INCLUDE_DIR)
7878
set(regex [[^[ \t]*#[ \t]*define[ \t]+TINYCDB_VERSION[ \t]+([0-9.]+)[ \t]*$]])
7979

80-
file(STRINGS ${Cdb_INCLUDE_DIR}/cdb.h results REGEX "${regex}")
80+
file(STRINGS ${Cdb_INCLUDE_DIR}/cdb.h result REGEX "${regex}")
8181

82-
foreach(line ${results})
83-
if(line MATCHES "${regex}")
84-
set(Cdb_VERSION "${CMAKE_MATCH_1}")
85-
break()
86-
endif()
87-
endforeach()
82+
if(result MATCHES "${regex}")
83+
set(Cdb_VERSION "${CMAKE_MATCH_1}")
84+
endif()
8885
endif()
8986
endblock()
9087

@@ -97,6 +94,7 @@ find_package_handle_standard_args(
9794
Cdb_INCLUDE_DIR
9895
_cdb_sanity_check
9996
VERSION_VAR Cdb_VERSION
97+
HANDLE_VERSION_RANGE
10098
REASON_FAILURE_MESSAGE "${_reason}"
10199
)
102100

cmake/cmake/modules/FindCrypt.cmake

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ if(Crypt_IS_BUILT_IN)
8383
else()
8484
set(_Crypt_REQUIRED_VARS Crypt_LIBRARY Crypt_INCLUDE_DIR _Crypt_SANITY_CHECK)
8585

86-
# Use pkgconf, if available on the system.
86+
# Try pkg-config.
8787
find_package(PkgConfig QUIET)
8888
if(PKG_CONFIG_FOUND)
8989
pkg_search_module(PC_Crypt QUIET libcrypt libxcrypt)
@@ -124,29 +124,22 @@ endif()
124124

125125
# Get version.
126126
block(PROPAGATE Crypt_VERSION)
127-
if(Crypt_INCLUDE_DIR AND EXISTS ${Crypt_INCLUDE_DIR}/crypt.h)
128-
set(regex [[^[ \t]*#[ \t]*define[ \t]+XCRYPT_VERSION_STR[ \t]+"?([0-9.]+)"?[ \t]*$]])
127+
if(EXISTS ${Crypt_INCLUDE_DIR}/crypt.h)
128+
set(regex [[^[ \t]*#[ \t]*define[ \t]+XCRYPT_VERSION_STR[ \t]+"?([^"]+)"?[ \t]*$]])
129129

130-
file(STRINGS ${Crypt_INCLUDE_DIR}/crypt.h results REGEX "${regex}")
130+
file(STRINGS ${Crypt_INCLUDE_DIR}/crypt.h result REGEX "${regex}")
131131

132-
foreach(line ${results})
133-
if(line MATCHES "${regex}")
134-
set(Crypt_VERSION "${CMAKE_MATCH_1}")
135-
break()
136-
endif()
137-
endforeach()
132+
if(result MATCHES "${regex}")
133+
set(Crypt_VERSION "${CMAKE_MATCH_1}")
134+
endif()
138135
endif()
139136

140-
if(NOT Crypt_VERSION AND PC_Crypt_VERSION)
141-
cmake_path(
142-
COMPARE
143-
"${PC_Crypt_INCLUDEDIR}" EQUAL "${Crypt_INCLUDE_DIR}"
144-
isEqual
145-
)
146-
147-
if(isEqual)
148-
set(Crypt_VERSION ${PC_Crypt_VERSION})
149-
endif()
137+
if(
138+
NOT Crypt_VERSION
139+
AND PC_Crypt_VERSION
140+
AND Crypt_INCLUDE_DIR IN_LIST PC_Crypt_INCLUDE_DIRS
141+
)
142+
set(Crypt_VERSION ${PC_Crypt_VERSION})
150143
endif()
151144
endblock()
152145

@@ -159,6 +152,7 @@ find_package_handle_standard_args(
159152
REQUIRED_VARS
160153
${_Crypt_REQUIRED_VARS}
161154
VERSION_VAR Crypt_VERSION
155+
HANDLE_VERSION_RANGE
162156
REASON_FAILURE_MESSAGE "${_reason}"
163157
)
164158

cmake/cmake/modules/FindDmalloc.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ find_package_handle_standard_args(
8888
Dmalloc_LIBRARY
8989
Dmalloc_INCLUDE_DIR
9090
VERSION_VAR Dmalloc_VERSION
91+
HANDLE_VERSION_RANGE
9192
REASON_FAILURE_MESSAGE "${_reason}"
9293
)
9394

0 commit comments

Comments
 (0)