1 # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
2 # file Copyright.txt or https://cmake.org/licensing for details.
4 #[=======================================================================[.rst:
8 This file is executed by cmake when invoked with
9 :ref:`--find-package <Find-Package Tool Mode>`.
10 It expects that the following variables are set using ``-D``:
15 the CMake compiler ID for which the result is,
16 i.e. GNU/Intel/Clang/MSVC, etc.
18 language for which the result will be used,
19 i.e. C/CXX/Fortran/ASM
22 only check for existence of the given package
24 print the flags needed for compiling an object file which uses
27 print the flags needed for linking when using the given package
29 if TRUE, don't print anything
30 #]=======================================================================]
33 message(FATAL_ERROR "Name of the package to be searched not specified. Set the CMake variable NAME, e.g. -DNAME=JPEG .")
37 message(FATAL_ERROR "COMPILER_ID argument not specified. In doubt, use GNU.")
41 message(FATAL_ERROR "LANGUAGE argument not specified. Use C, CXX or Fortran.")
45 message(FATAL_ERROR "MODE argument not specified. Use either EXIST, COMPILE or LINK.")
48 # require the current version. If we don't do this, Platforms/CYGWIN.cmake complains because
49 # it doesn't know whether it should set WIN32 or not:
50 cmake_minimum_required(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} )
52 macro(ENABLE_LANGUAGE)
53 # disable the enable_language() command, otherwise --find-package breaks on Windows.
54 # On Windows, enable_language(RC) is called in the platform files unconditionally.
55 # But in --find-package mode, we don't want (and can't) enable any language.
58 set(CMAKE_PLATFORM_INFO_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
60 include(CMakeDetermineSystem)
62 # short-cut some tests on Darwin, see Darwin-GNU.cmake:
63 if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin AND "${COMPILER_ID}" MATCHES GNU)
64 set(CMAKE_${LANGUAGE}_SYSROOT_FLAG "")
65 set(CMAKE_${LANGUAGE}_OSX_DEPLOYMENT_TARGET_FLAG "")
68 include(CMakeSystemSpecificInitialize)
70 # Also load the system specific file, which sets up e.g. the search paths.
71 # This makes the FIND_XXX() calls work much better
72 include(CMakeSystemSpecificInformation)
76 # try to guess whether we have a 64bit system, if it has not been set
78 if(NOT CMAKE_SIZEOF_VOID_P)
79 set(CMAKE_SIZEOF_VOID_P 4)
80 if(EXISTS ${CMAKE_SYSROOT}/usr/lib64)
81 set(CMAKE_SIZEOF_VOID_P 8)
83 # use the file utility to check whether itself is 64 bit:
84 find_program(FILE_EXECUTABLE file)
86 get_filename_component(FILE_ABSPATH "${FILE_EXECUTABLE}" ABSOLUTE)
87 execute_process(COMMAND "${FILE_ABSPATH}" "${FILE_ABSPATH}" OUTPUT_VARIABLE fileOutput ERROR_QUIET)
88 if("${fileOutput}" MATCHES "64-bit")
89 set(CMAKE_SIZEOF_VOID_P 8)
95 # guess Debian multiarch if it has not been set:
96 if(EXISTS /etc/debian_version)
97 if(NOT CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE )
98 file(GLOB filesInLib RELATIVE /lib /lib/*-linux-gnu* )
99 foreach(file ${filesInLib})
100 if("${file}" MATCHES "${CMAKE_LIBRARY_ARCHITECTURE_REGEX}")
101 set(CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE ${file})
106 if(NOT CMAKE_LIBRARY_ARCHITECTURE)
107 set(CMAKE_LIBRARY_ARCHITECTURE ${CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE})
113 set(CMAKE_${LANGUAGE}_COMPILER "dummy")
114 set(CMAKE_${LANGUAGE}_COMPILER_ID "${COMPILER_ID}")
115 include(CMake${LANGUAGE}Information)
118 function(set_compile_flags_var _packageName)
119 string(TOUPPER "${_packageName}" PACKAGE_NAME)
120 # Check the following variables:
128 if(DEFINED ${_packageName}_INCLUDE_DIRS)
129 set(includes ${_packageName}_INCLUDE_DIRS)
130 elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIRS)
131 set(includes ${PACKAGE_NAME}_INCLUDE_DIRS)
132 elseif(DEFINED ${_packageName}_INCLUDES)
133 set(includes ${_packageName}_INCLUDES)
134 elseif(DEFINED ${PACKAGE_NAME}_INCLUDES)
135 set(includes ${PACKAGE_NAME}_INCLUDES)
136 elseif(DEFINED ${_packageName}_INCLUDE_DIR)
137 set(includes ${_packageName}_INCLUDE_DIR)
138 elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIR)
139 set(includes ${PACKAGE_NAME}_INCLUDE_DIR)
142 set(PACKAGE_INCLUDE_DIRS "${${includes}}" PARENT_SCOPE)
144 # Check the following variables:
148 if(DEFINED ${_packageName}_DEFINITIONS)
149 set(definitions ${_packageName}_DEFINITIONS)
150 elseif(DEFINED ${PACKAGE_NAME}_DEFINITIONS)
151 set(definitions ${PACKAGE_NAME}_DEFINITIONS)
154 set(PACKAGE_DEFINITIONS "${${definitions}}" )
159 function(set_link_flags_var _packageName)
160 string(TOUPPER "${_packageName}" PACKAGE_NAME)
161 # Check the following variables:
167 if(DEFINED ${_packageName}_LIBRARIES)
168 set(libs ${_packageName}_LIBRARIES)
169 elseif(DEFINED ${PACKAGE_NAME}_LIBRARIES)
170 set(libs ${PACKAGE_NAME}_LIBRARIES)
171 elseif(DEFINED ${_packageName}_LIBS)
172 set(libs ${_packageName}_LIBS)
173 elseif(DEFINED ${PACKAGE_NAME}_LIBS)
174 set(libs ${PACKAGE_NAME}_LIBS)
177 set(PACKAGE_LIBRARIES "${${libs}}" PARENT_SCOPE )
182 find_package("${NAME}" QUIET)
184 set(PACKAGE_FOUND FALSE)
186 string(TOUPPER "${NAME}" UPPERCASE_NAME)
188 if(${NAME}_FOUND OR ${UPPERCASE_NAME}_FOUND)
189 set(PACKAGE_FOUND TRUE)
191 if("${MODE}" STREQUAL "EXIST")
193 elseif("${MODE}" STREQUAL "COMPILE")
194 set_compile_flags_var(${NAME})
195 elseif("${MODE}" STREQUAL "LINK")
196 set_link_flags_var(${NAME})
198 message(FATAL_ERROR "Invalid mode argument ${MODE} given.")
203 set(PACKAGE_QUIET ${SILENT} )