111 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
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()
 |