File: CMakeLists.txt

package info (click to toggle)
cmake 4.2.3-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 152,456 kB
  • sloc: ansic: 403,896; cpp: 303,920; sh: 4,105; python: 3,583; yacc: 3,106; lex: 1,279; f90: 538; asm: 471; lisp: 375; cs: 270; java: 266; fortran: 239; objc: 215; perl: 213; xml: 198; makefile: 111; javascript: 83; pascal: 63; tcl: 55; php: 25; ruby: 22
file content (334 lines) | stat: -rw-r--r-- 12,599 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
cmake_minimum_required(VERSION 3.31)
project(FindPackageCpsTest)

set(CMAKE_EXPERIMENTAL_FIND_CPS_PACKAGES "e82e467b-f997-4464-8ace-b00808fff261")

# Protect tests from running inside the default install prefix.
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/NotDefaultPrefix")

# Use the test directory to Look for packages.
set(CMAKE_PREFIX_PATH ${CMAKE_CURRENT_SOURCE_DIR})

# Disable built-in search paths.
set(CMAKE_FIND_USE_PACKAGE_ROOT_PATH OFF)
set(CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH OFF)
set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH OFF)
set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH OFF)
set(CMAKE_FIND_USE_INSTALL_PREFIX OFF)

# Enable framework searching.
set(CMAKE_FIND_FRAMEWORK FIRST)

add_executable(FindPackageCpsTest FindPackageTest.cxx)

###############################################################################

function(expect PACKAGE VAR OP VALUE WHAT)
  if(NOT ${PACKAGE}_${VAR} ${OP} ${VALUE})
    message(SEND_ERROR "${PACKAGE} wrong ${WHAT} ${${PACKAGE}_${VAR}} !")
  endif()
endfunction()

function(test_version PACKAGE LITERAL COUNT MAJOR MINOR PATCH TWEAK)
  if(NOT ${PACKAGE}_FOUND)
    message(SEND_ERROR "${PACKAGE} not found !")
  else()
    expect(${PACKAGE} VERSION STREQUAL "${LITERAL}" "version")
    expect(${PACKAGE} VERSION_COUNT EQUAL ${COUNT} "version count")
    expect(${PACKAGE} VERSION_MAJOR EQUAL ${MAJOR} "major version")
    expect(${PACKAGE} VERSION_MINOR EQUAL ${MINOR} "minor version")
    expect(${PACKAGE} VERSION_PATCH EQUAL ${PATCH} "patch version")
    expect(${PACKAGE} VERSION_TWEAK EQUAL ${TWEAK} "tweak version")
  endif()
endfunction()

function(test_unparsed_version PACKAGE VERSION)
  find_package(${PACKAGE} CONFIG)
  test_version(${PACKAGE} "${VERSION}" 0 0 0 0 0)
endfunction()

###############################################################################
# Test a basic package search.
# It should NOT find the package's CMake package file.

find_package(Sample CONFIG)
test_version(Sample "2.10.11" 3 2 10 11 0)

###############################################################################
# Test some more complicated version parsing.

find_package(LongVersion CONFIG)
test_version(LongVersion "1.1.2.3.5.8+fibonacci" 6 1 1 2 3)

find_package(EmptyMarker CONFIG)
test_version(EmptyMarker "1.1+" 2 1 1 0 0)

test_unparsed_version(BadVersion1 "1..1")
test_unparsed_version(BadVersion2 "1.1a.0")
test_unparsed_version(BadVersion3 "1.1.")
test_unparsed_version(BadVersion4 "+42")
test_unparsed_version(CustomVersion "VII")

###############################################################################
# Test finding a package whose CPS file is in the package prefix root.
set(RootTest_DIR "${CMAKE_CURRENT_SOURCE_DIR}/RootTest")
find_package(RootTest)
if(NOT RootTest_FOUND)
  message(SEND_ERROR "RootTest not found !")
endif()

###############################################################################
# Test glob sorting.

foreach(CMAKE_FIND_PACKAGE_SORT_DIRECTION IN ITEMS "" ASC Bogus)
  set(SortLib_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE)
  set(CMAKE_FIND_PACKAGE_SORT_ORDER NAME)
  find_package(SortLib CONFIG)
  if(NOT "${SortLib_VERSION}" STREQUAL "3.1.1")
    message(SEND_ERROR "FIND_PACKAGE_SORT_ORDER Name Asc! ${SortLib_VERSION}")
  endif()
  unset(SortLib_VERSION)
endforeach()


set(SortLib_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE)
set(CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL)
set(CMAKE_FIND_PACKAGE_SORT_DIRECTION DEC)
find_package(SortLib CONFIG)
if(NOT "${SortLib_VERSION}" STREQUAL "3.10.1")
  message(SEND_ERROR "FIND_PACKAGE_SORT_ORDER Natural! Dec ${SortLib_VERSION}")
endif()
set(SortLib_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE)
unset(SortLib_VERSION)


set(SortLib_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE)
FIND_PACKAGE(SortLib 4.0 CONFIG)
IF (NOT "${SortLib_VERSION}" STREQUAL "4.0.0")
  message(SEND_ERROR "FIND_PACKAGE_SORT_ORDER gave up too soon! ${SortLib_VERSION}")
endif()
unset(SortLib_VERSION)


set(SortLib_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE)
# Expected to default to 'NATURAL' and 'DEC'
unset(CMAKE_FIND_PACKAGE_SORT_ORDER)
unset(CMAKE_FIND_PACKAGE_SORT_DIRECTION)
FIND_PACKAGE(SortLib CONFIG)
IF (NOT "${SortLib_VERSION}" STREQUAL "3.10.1")
  message(SEND_ERROR "FIND_PACKAGE_SORT_ORDER Default! ${SortLib_VERSION}")
endif()
unset(SortLib_VERSION)


set(SortFramework_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE)
set(CMAKE_FIND_PACKAGE_SORT_ORDER NAME)
set(CMAKE_FIND_PACKAGE_SORT_DIRECTION ASC)
find_package(SortFramework CONFIG)
if(NOT "${SortFramework_VERSION}" STREQUAL "3.1.1")
  message(SEND_ERROR "FIND_PACKAGE_SORT_ORDER Framework Name Asc! ${SortFramework_VERSION}")
endif()
set(SortLib_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE)
unset(SortFramework_VERSION)


set(SortFramework_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE)
set(CMAKE_FIND_PACKAGE_SORT_ORDER NATURAL)
set(CMAKE_FIND_PACKAGE_SORT_DIRECTION DEC)
find_package(SortFramework CONFIG)
if(NOT "${SortFramework_VERSION}" STREQUAL "3.10.1")
  message(SEND_ERROR "FIND_PACKAGE_SORT_ORDER Framework Natural! Dec ${SortFramework_VERSION}")
endif()
set(SortLib_DIR "" CACHE FILEPATH "Wipe out find results for testing." FORCE)
unset(SortFramework_VERSION)


unset(CMAKE_FIND_PACKAGE_SORT_ORDER)
unset(CMAKE_FIND_PACKAGE_SORT_DIRECTION)

###############################################################################
# Find a package that actually has some content.

find_package(Foo CONFIG)
if(NOT Foo_FOUND)
  message(SEND_ERROR "Foo not found !")
elseif(NOT TARGET Foo::PrefixTest)
  message(SEND_ERROR "Foo::PrefixTest missing !")
elseif(NOT TARGET Foo::RelativeTest)
  message(SEND_ERROR "Foo::RelativeTest missing !")
elseif(NOT TARGET Foo::Empty)
  message(SEND_ERROR "Foo::Empty missing !")
else()
  get_property(pt_includes
    TARGET Foo::PrefixTest PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
  if(NOT "${pt_includes}" STREQUAL "$<$<CONFIG:default>:${CMAKE_CURRENT_SOURCE_DIR}/include>" )
    message(SEND_ERROR "Foo::PrefixTest has wrong includes '${pt_includes}' !")
  endif()
  set(pt_includes)

  get_property(rt_includes
    TARGET Foo::RelativeTest PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
  if(NOT "${rt_includes}" STREQUAL "$<$<CONFIG:default>:${CMAKE_CURRENT_SOURCE_DIR}/cps/../include>")
    message(SEND_ERROR "Foo::RelativeTest has wrong includes '${rt_includes}' !")
  endif()
  set(rt_includes)
endif()

###############################################################################
# Test importing of compile definitions.

find_package(defs CONFIG REQUIRED)

if(CMAKE_GENERATOR STREQUAL "Xcode" OR CMAKE_GENERATOR MATCHES "Visual Studio")
  # VS/Xcode generators cannot use different definitions within the same
  # target, so we must split the test into one target per language.
  add_library(defs-test-c STATIC defs-test-c.c)
  add_library(defs-test-cxx STATIC defs-test-cxx.cxx)
  target_link_libraries(defs-test-c defs::defs)
  target_link_libraries(defs-test-cxx defs::defs)
else()
  add_library(defs-test STATIC defs-test-c.c defs-test-cxx.cxx)
  target_link_libraries(defs-test defs::defs)
endif()

###############################################################################
# Test importing and mangling of requirements (i.e. link libraries).

find_package(RequiresTest CONFIG REQUIRED)

add_library(requires-test STATIC requires-test.cxx)
target_link_libraries(requires-test RequiresTest::Indirect)

###############################################################################
# Test importing of (language-specific) include paths.

include(CheckIncludeFile)
include(CheckIncludeFileCXX)

find_package(includes CONFIG REQUIRED)

set(CMAKE_REQUIRED_LIBRARIES includes::default)
check_include_file(cmincludetest/global.h C_GLOBAL_H)
check_include_file(cmincludetest/cxxonly.h C_CXXONLY_H)
check_include_file_cxx(cmincludetest/cxxonly.h CXX_CXXONLY_H)
set(CMAKE_REQUIRED_LIBRARIES)

if(NOT C_GLOBAL_H)
  message(SEND_ERROR "cmincludetest/global.h not found !")
endif()
if(NOT CXX_CXXONLY_H)
  message(SEND_ERROR "cmincludetest/cxxonly.h not found in C++ mode !")
endif()
if(C_CXXONLY_H)
  message(SEND_ERROR "cmincludetest/cxxonly.h unexpectedly found in C mode ?!")
endif()

###############################################################################
# Find a package that has dependencies.

find_package(Bar)
if(NOT Bar_FOUND)
  message(SEND_ERROR "Bar not found !")
elseif(NOT Dep1_FOUND)
  message(SEND_ERROR "Bar's Dep1 not found !")
elseif(NOT Dep2_FOUND)
  message(SEND_ERROR "Bar's Dep2 not found !")
elseif(NOT Dep3_FOUND)
  message(SEND_ERROR "Bar's Dep3 not found !")
elseif(NOT TARGET Dep1::Target)
  message(SEND_ERROR "Dep1::Target missing !")
elseif(NOT TARGET Dep2::Target)
  message(SEND_ERROR "Dep2::Target missing !")
elseif(NOT TARGET Dep3::Target)
  message(SEND_ERROR "Dep3::Target missing !")
elseif(NOT TARGET Bar::Target1)
  message(SEND_ERROR "Bar::Target1 missing !")
elseif(NOT TARGET Bar::Target2)
  message(SEND_ERROR "Bar::Target2 missing !")
endif()

###############################################################################
# Test requesting components from a package.

find_package(ComponentTest
  COMPONENTS Target1 Target2
  OPTIONAL_COMPONENTS Target4 Target6)
if(NOT ComponentTest_FOUND)
  message(SEND_ERROR "ComponentTest not found !")
elseif(NOT TARGET ComponentTest::Target1)
  message(SEND_ERROR "ComponentTest::Target1 missing !")
elseif(NOT TARGET ComponentTest::Target2)
  message(SEND_ERROR "ComponentTest::Target2 missing !")
elseif(NOT TARGET ComponentTest::Target3)
  message(SEND_ERROR "ComponentTest::Target3 missing !")
elseif(NOT TARGET ComponentTest::Target4)
  message(SEND_ERROR "ComponentTest::Target4 missing !")
elseif(NOT TARGET ComponentTest::Target5)
  message(SEND_ERROR "ComponentTest::Target5 missing !")
elseif(TARGET ComponentTest::Target6)
  message(SEND_ERROR "ComponentTest::Target6 exists ?!")
elseif(TARGET ComponentTest::Target7)
  message(SEND_ERROR "ComponentTest::Target7 exists ?!")
elseif(TARGET ComponentTest::Target8)
  message(SEND_ERROR "ComponentTest::Target8 exists ?!")
endif()

###############################################################################
# Test requesting components from a dependency.

find_package(TransitiveTest)
if(NOT TransitiveTest_FOUND)
  message(SEND_ERROR "TransitiveTest not found !")
elseif(NOT TransitiveDep_FOUND)
  message(SEND_ERROR "TransitiveTest's TransitiveDep not found !")
elseif(NOT TARGET TransitiveDep::Target1)
  message(SEND_ERROR "TransitiveDep::Target1 missing !")
elseif(NOT TARGET TransitiveDep::Target2)
  message(SEND_ERROR "TransitiveDep::Target2 missing !")
elseif(NOT TARGET TransitiveDep::Target3)
  message(SEND_ERROR "TransitiveDep::Target3 missing !")
elseif(TARGET TransitiveDep::Target4)
  message(SEND_ERROR "TransitiveDep::Target4 exists ?!")
elseif(TARGET TransitiveDep::Target5)
  message(SEND_ERROR "TransitiveDep::Target5 exists ?!")
endif()

###############################################################################
# Test finding a package more than once.

find_package(Repeat REQUIRED OPTIONAL_COMPONENTS DoesNotExist)
if(NOT TARGET Repeat::Base)
  message(SEND_ERROR "Repeat::Base missing !")
elseif(TARGET Repeat::Extra)
  message(SEND_ERROR "Repeat::Extra exists ?!")
endif()

find_package(Repeat REQUIRED COMPONENTS Extra)
if(NOT TARGET Repeat::Extra)
  message(SEND_ERROR "Repeat::Extra missing !")
endif()

###############################################################################
# Test default configurations.

find_package(DefaultConfigurationsTest)
if(NOT DefaultConfigurationsTest_FOUND)
  message(SEND_ERROR "DefaultConfigurationsTest not found !")
elseif(NOT TARGET DefaultConfigurationsTest::Target1)
  message(SEND_ERROR "DefaultConfigurationsTest::Target1 missing !")
elseif(NOT TARGET DefaultConfigurationsTest::Target2)
  message(SEND_ERROR "DefaultConfigurationsTest::Target2 missing !")
else()
  get_property(dct1_configs
    TARGET DefaultConfigurationsTest::Target1 PROPERTY IMPORTED_CONFIGURATIONS)
  if(NOT "${dct1_configs}" STREQUAL "DEFAULT;TEST")
    message(SEND_ERROR "DefaultConfigurationsTest::Target1 has wrong configurations '${dct1_configs}' !")
  endif()
  get_property(dct2_configs
    TARGET DefaultConfigurationsTest::Target2 PROPERTY IMPORTED_CONFIGURATIONS)
  if(NOT "${dct2_configs}" STREQUAL "TEST")
    message(SEND_ERROR "DefaultConfigurationsTest::Target2 has wrong configurations '${dct2_configs}' !")
  endif()
  set(dct1_configs)
  set(dct2_configs)
endif()