CMakeLists.txt 2.9 KB

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