Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Kitware
GitHub Repository: Kitware/CMake
Path: blob/master/Tests/CMakeOnly/find_library/CMakeLists.txt
3153 views
1
cmake_minimum_required(VERSION 3.10)
2
project(FindLibraryTest NONE)
3
4
set(CMAKE_FIND_DEBUG_MODE 1)
5
6
macro(test_find_library desc expected)
7
unset(LIB CACHE)
8
find_library(LIB ${ARGN} NO_DEFAULT_PATH)
9
if(LIB)
10
# Convert to relative path for comparison to expected location.
11
file(RELATIVE_PATH REL_LIB "${CMAKE_CURRENT_SOURCE_DIR}" "${LIB}")
12
13
# Check and report failure.
14
if(NOT "${REL_LIB}" STREQUAL "${expected}")
15
message(SEND_ERROR "Library ${expected} found as [${REL_LIB}]${desc}")
16
elseif(CMAKE_FIND_DEBUG_MODE)
17
message(STATUS "Library ${expected} found as [${REL_LIB}]${desc}")
18
endif()
19
else()
20
message(SEND_ERROR "Library ${expected} NOT FOUND${desc}")
21
endif()
22
endmacro()
23
24
macro(test_find_library_subst expected)
25
get_filename_component(dir ${expected} PATH)
26
get_filename_component(name ${expected} NAME)
27
string(REGEX REPLACE "lib/?[36Xx][24Y3][Z2]*" "lib" dir "${dir}")
28
test_find_library(", searched as ${dir}" "${expected}"
29
NAMES ${name}
30
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/${dir}
31
)
32
endmacro()
33
34
set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
35
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
36
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS TRUE)
37
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS TRUE)
38
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE)
39
40
set(CMAKE_INTERNAL_PLATFORM_ABI "ELF")
41
set(CMAKE_SIZEOF_VOID_P 4)
42
foreach(lib
43
lib/32/libtest5.a
44
lib/A/lib/libtest1.a
45
lib/A/lib32/libtest3.a
46
lib/A/libtest1.a
47
lib/libtest1.a
48
lib/libtest2.a
49
lib/libtest3.a
50
lib/libtest3.a
51
lib32/A/lib/libtest2.a
52
lib32/A/lib32/libtest4.a
53
lib32/A/libtest4.a
54
lib32/libtest4.a
55
)
56
test_find_library_subst(${lib})
57
endforeach()
58
59
set(CMAKE_SIZEOF_VOID_P 8)
60
foreach(lib64
61
lib/64/libtest2.a
62
lib/A/lib64/libtest3.a
63
lib/libtest3.a
64
lib64/A/lib/libtest2.a
65
lib64/A/lib64/libtest1.a
66
lib64/A/libtest1.a
67
lib64/libtest1.a
68
)
69
test_find_library_subst(${lib64})
70
endforeach()
71
72
set(CMAKE_INTERNAL_PLATFORM_ABI "ELF X32")
73
set(CMAKE_SIZEOF_VOID_P 4)
74
foreach(libx32
75
lib/x32/libtest2.a
76
lib/A/libx32/libtest3.a
77
lib/libtest3.a
78
libx32/A/lib/libtest2.a
79
libx32/A/libx32/libtest1.a
80
libx32/A/libtest1.a
81
libx32/libtest1.a
82
)
83
test_find_library_subst(${libx32})
84
endforeach()
85
86
test_find_library("" A/libtestA.a
87
NAMES testA testB
88
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/A ${CMAKE_CURRENT_SOURCE_DIR}/B
89
)
90
test_find_library("" B/libtestB.a
91
NAMES testB testA
92
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/A ${CMAKE_CURRENT_SOURCE_DIR}/B
93
)
94
test_find_library("" A/libtestA.a
95
NAMES testB testA NAMES_PER_DIR
96
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/A ${CMAKE_CURRENT_SOURCE_DIR}/B
97
)
98
99
set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX "XYZ")
100
foreach(libXYZ
101
lib/XYZ/libtest1.a
102
lib/A/libXYZ/libtest2.a
103
lib/libtest3.a
104
libXYZ/A/lib/libtest4.a
105
libXYZ/A/libXYZ/libtest5.a
106
libXYZ/A/libtest6.a
107
libXYZ/libtest7.a
108
)
109
test_find_library_subst(${libXYZ})
110
endforeach()
111
112