Merge topic 'cuda_add_12.8_new_sm_support'
[kiteware-cmake.git] / Modules / CMakeFindPackageMode.cmake
bloba6bbcc4280d86657fa0e6d2a791aa189f1ccf58a
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:
5 CMakeFindPackageMode
6 --------------------
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``:
12 ``NAME``
13   name of the package
14 ``COMPILER_ID``
15   the CMake compiler ID for which the result is,
16   i.e. GNU/Intel/Clang/MSVC, etc.
17 ``LANGUAGE``
18   language for which the result will be used,
19   i.e. C/CXX/Fortran/ASM
20 ``MODE``
21   ``EXIST``
22     only check for existence of the given package
23   ``COMPILE``
24     print the flags needed for compiling an object file which uses
25     the given package
26   ``LINK``
27     print the flags needed for linking when using the given package
28 ``QUIET``
29   if TRUE, don't print anything
30 #]=======================================================================]
32 if(NOT NAME)
33   message(FATAL_ERROR "Name of the package to be searched not specified. Set the CMake variable NAME, e.g. -DNAME=JPEG .")
34 endif()
36 if(NOT COMPILER_ID)
37   message(FATAL_ERROR "COMPILER_ID argument not specified. In doubt, use GNU.")
38 endif()
40 if(NOT LANGUAGE)
41   message(FATAL_ERROR "LANGUAGE argument not specified. Use C, CXX or Fortran.")
42 endif()
44 if(NOT MODE)
45   message(FATAL_ERROR "MODE argument not specified. Use either EXIST, COMPILE or LINK.")
46 endif()
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.
56 endmacro()
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 "")
66 endif()
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)
74 if(UNIX)
76   # try to guess whether we have a 64bit system, if it has not been set
77   # from the outside
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)
82     else()
83       # use the file utility to check whether itself is 64 bit:
84       find_program(FILE_EXECUTABLE file)
85       if(FILE_EXECUTABLE)
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)
90         endif()
91       endif()
92     endif()
93   endif()
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})
102           break()
103         endif()
104       endforeach()
105     endif()
106     if(NOT CMAKE_LIBRARY_ARCHITECTURE)
107       set(CMAKE_LIBRARY_ARCHITECTURE ${CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE})
108     endif()
109   endif()
111 endif()
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:
121   # FOO_INCLUDE_DIRS
122   # Foo_INCLUDE_DIRS
123   # FOO_INCLUDES
124   # Foo_INCLUDES
125   # FOO_INCLUDE_DIR
126   # Foo_INCLUDE_DIR
127   set(includes)
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)
140   endif()
142   set(PACKAGE_INCLUDE_DIRS "${${includes}}" PARENT_SCOPE)
144   # Check the following variables:
145   # FOO_DEFINITIONS
146   # Foo_DEFINITIONS
147   set(definitions)
148   if(DEFINED ${_packageName}_DEFINITIONS)
149     set(definitions ${_packageName}_DEFINITIONS)
150   elseif(DEFINED ${PACKAGE_NAME}_DEFINITIONS)
151     set(definitions ${PACKAGE_NAME}_DEFINITIONS)
152   endif()
154   set(PACKAGE_DEFINITIONS  "${${definitions}}" )
156 endfunction()
159 function(set_link_flags_var _packageName)
160   string(TOUPPER "${_packageName}" PACKAGE_NAME)
161   # Check the following variables:
162   # FOO_LIBRARIES
163   # Foo_LIBRARIES
164   # FOO_LIBS
165   # Foo_LIBS
166   set(libs)
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)
175   endif()
177   set(PACKAGE_LIBRARIES "${${libs}}" PARENT_SCOPE )
179 endfunction()
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")
192     # do nothing
193   elseif("${MODE}" STREQUAL "COMPILE")
194     set_compile_flags_var(${NAME})
195   elseif("${MODE}" STREQUAL "LINK")
196     set_link_flags_var(${NAME})
197   else()
198     message(FATAL_ERROR "Invalid mode argument ${MODE} given.")
199   endif()
201 endif()
203 set(PACKAGE_QUIET ${SILENT} )