You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
2.9 KiB

cmake_minimum_required(VERSION 3.5)
project(FindLibraryTest NONE)
set(CMAKE_FIND_DEBUG_MODE 1)
macro(test_find_library desc expected)
unset(LIB CACHE)
find_library(LIB ${ARGN} NO_DEFAULT_PATH)
if(LIB)
# Convert to relative path for comparison to expected location.
file(RELATIVE_PATH REL_LIB "${CMAKE_CURRENT_SOURCE_DIR}" "${LIB}")
# Check and report failure.
if(NOT "${REL_LIB}" STREQUAL "${expected}")
message(SEND_ERROR "Library ${expected} found as [${REL_LIB}]${desc}")
elseif(CMAKE_FIND_DEBUG_MODE)
message(STATUS "Library ${expected} found as [${REL_LIB}]${desc}")
endif()
else()
message(SEND_ERROR "Library ${expected} NOT FOUND${desc}")
endif()
endmacro()
macro(test_find_library_subst expected)
get_filename_component(dir ${expected} PATH)
get_filename_component(name ${expected} NAME)
string(REGEX REPLACE "lib/?[36Xx][24Y3][Z2]*" "lib" dir "${dir}")
test_find_library(", searched as ${dir}" "${expected}"
NAMES ${name}
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/${dir}
)
endmacro()
set(CMAKE_FIND_LIBRARY_PREFIXES "lib")
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIBX32_PATHS TRUE)
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS TRUE)
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE)
set(CMAKE_INTERNAL_PLATFORM_ABI "ELF")
set(CMAKE_SIZEOF_VOID_P 4)
foreach(lib
lib/32/libtest5.a
lib/A/lib/libtest1.a
lib/A/lib32/libtest3.a
lib/A/libtest1.a
lib/libtest1.a
lib/libtest2.a
lib/libtest3.a
lib/libtest3.a
lib32/A/lib/libtest2.a
lib32/A/lib32/libtest4.a
lib32/A/libtest4.a
lib32/libtest4.a
)
test_find_library_subst(${lib})
endforeach()
set(CMAKE_SIZEOF_VOID_P 8)
foreach(lib64
lib/64/libtest2.a
lib/A/lib64/libtest3.a
lib/libtest3.a
lib64/A/lib/libtest2.a
lib64/A/lib64/libtest1.a
lib64/A/libtest1.a
lib64/libtest1.a
)
test_find_library_subst(${lib64})
endforeach()
set(CMAKE_INTERNAL_PLATFORM_ABI "ELF X32")
set(CMAKE_SIZEOF_VOID_P 4)
foreach(libx32
lib/x32/libtest2.a
lib/A/libx32/libtest3.a
lib/libtest3.a
libx32/A/lib/libtest2.a
libx32/A/libx32/libtest1.a
libx32/A/libtest1.a
libx32/libtest1.a
)
test_find_library_subst(${libx32})
endforeach()
test_find_library("" A/libtestA.a
NAMES testA testB
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/A ${CMAKE_CURRENT_SOURCE_DIR}/B
)
test_find_library("" B/libtestB.a
NAMES testB testA
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/A ${CMAKE_CURRENT_SOURCE_DIR}/B
)
test_find_library("" A/libtestA.a
NAMES testB testA NAMES_PER_DIR
PATHS ${CMAKE_CURRENT_SOURCE_DIR}/A ${CMAKE_CURRENT_SOURCE_DIR}/B
)
set(CMAKE_FIND_LIBRARY_CUSTOM_LIB_SUFFIX "XYZ")
foreach(libXYZ
lib/XYZ/libtest1.a
lib/A/libXYZ/libtest2.a
lib/libtest3.a
libXYZ/A/lib/libtest4.a
libXYZ/A/libXYZ/libtest5.a
libXYZ/A/libtest6.a
libXYZ/libtest7.a
)
test_find_library_subst(${libXYZ})
endforeach()