| # Distributed under the OSI-approved BSD 3-Clause License. See accompanying | |
| # file Copyright.txt or https://cmake.org/licensing for details. | |
| #.rst: | |
| # CMakeFindPackageMode | |
| # -------------------- | |
| # | |
| # | |
| # | |
| # This file is executed by cmake when invoked with --find-package. It | |
| # expects that the following variables are set using -D: | |
| # | |
| # ``NAME`` | |
| # name of the package | |
| # ``COMPILER_ID`` | |
| # the CMake compiler ID for which the result is, | |
| # i.e. GNU/Intel/Clang/MSVC, etc. | |
| # ``LANGUAGE`` | |
| # language for which the result will be used, | |
| # i.e. C/CXX/Fortan/ASM | |
| # ``MODE`` | |
| # ``EXIST`` | |
| # only check for existence of the given package | |
| # ``COMPILE`` | |
| # print the flags needed for compiling an object file which uses | |
| # the given package | |
| # ``LINK`` | |
| # print the flags needed for linking when using the given package | |
| # ``QUIET`` | |
| # if TRUE, don't print anything | |
| if(NOT NAME) | |
| message(FATAL_ERROR "Name of the package to be searched not specified. Set the CMake variable NAME, e.g. -DNAME=JPEG .") | |
| endif() | |
| if(NOT COMPILER_ID) | |
| message(FATAL_ERROR "COMPILER_ID argument not specified. In doubt, use GNU.") | |
| endif() | |
| if(NOT LANGUAGE) | |
| message(FATAL_ERROR "LANGUAGE argument not specified. Use C, CXX or Fortran.") | |
| endif() | |
| if(NOT MODE) | |
| message(FATAL_ERROR "MODE argument not specified. Use either EXIST, COMPILE or LINK.") | |
| endif() | |
| # require the current version. If we don't do this, Platforms/CYGWIN.cmake complains because | |
| # it doesn't know whether it should set WIN32 or not: | |
| cmake_minimum_required(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} ) | |
| macro(ENABLE_LANGUAGE) | |
| # disable the enable_language() command, otherwise --find-package breaks on Windows. | |
| # On Windows, enable_language(RC) is called in the platform files unconditionally. | |
| # But in --find-package mode, we don't want (and can't) enable any language. | |
| endmacro() | |
| set(CMAKE_PLATFORM_INFO_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}) | |
| include(CMakeDetermineSystem) | |
| # short-cut some tests on Darwin, see Darwin-GNU.cmake: | |
| if("${CMAKE_SYSTEM_NAME}" MATCHES Darwin AND "${COMPILER_ID}" MATCHES GNU) | |
| set(CMAKE_${LANGUAGE}_SYSROOT_FLAG "") | |
| set(CMAKE_${LANGUAGE}_OSX_DEPLOYMENT_TARGET_FLAG "") | |
| endif() | |
| # Also load the system specific file, which sets up e.g. the search paths. | |
| # This makes the FIND_XXX() calls work much better | |
| include(CMakeSystemSpecificInformation) | |
| if(UNIX) | |
| # try to guess whether we have a 64bit system, if it has not been set | |
| # from the outside | |
| if(NOT CMAKE_SIZEOF_VOID_P) | |
| set(CMAKE_SIZEOF_VOID_P 4) | |
| if(EXISTS /usr/lib64) | |
| set(CMAKE_SIZEOF_VOID_P 8) | |
| else() | |
| # use the file utility to check whether itself is 64 bit: | |
| find_program(FILE_EXECUTABLE file) | |
| if(FILE_EXECUTABLE) | |
| get_filename_component(FILE_ABSPATH "${FILE_EXECUTABLE}" ABSOLUTE) | |
| execute_process(COMMAND "${FILE_ABSPATH}" "${FILE_ABSPATH}" OUTPUT_VARIABLE fileOutput ERROR_QUIET) | |
| if("${fileOutput}" MATCHES "64-bit") | |
| set(CMAKE_SIZEOF_VOID_P 8) | |
| endif() | |
| endif() | |
| endif() | |
| endif() | |
| # guess Debian multiarch if it has not been set: | |
| if(EXISTS /etc/debian_version) | |
| if(NOT CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE ) | |
| file(GLOB filesInLib RELATIVE /lib /lib/*-linux-gnu* ) | |
| foreach(file ${filesInLib}) | |
| if("${file}" MATCHES "${CMAKE_LIBRARY_ARCHITECTURE_REGEX}") | |
| set(CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE ${file}) | |
| break() | |
| endif() | |
| endforeach() | |
| endif() | |
| if(NOT CMAKE_LIBRARY_ARCHITECTURE) | |
| set(CMAKE_LIBRARY_ARCHITECTURE ${CMAKE_${LANGUAGE}_LIBRARY_ARCHITECTURE}) | |
| endif() | |
| endif() | |
| endif() | |
| set(CMAKE_${LANGUAGE}_COMPILER "dummy") | |
| set(CMAKE_${LANGUAGE}_COMPILER_ID "${COMPILER_ID}") | |
| include(CMake${LANGUAGE}Information) | |
| function(set_compile_flags_var _packageName) | |
| string(TOUPPER "${_packageName}" PACKAGE_NAME) | |
| # Check the following variables: | |
| # FOO_INCLUDE_DIRS | |
| # Foo_INCLUDE_DIRS | |
| # FOO_INCLUDES | |
| # Foo_INCLUDES | |
| # FOO_INCLUDE_DIR | |
| # Foo_INCLUDE_DIR | |
| set(includes) | |
| if(DEFINED ${_packageName}_INCLUDE_DIRS) | |
| set(includes ${_packageName}_INCLUDE_DIRS) | |
| elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIRS) | |
| set(includes ${PACKAGE_NAME}_INCLUDE_DIRS) | |
| elseif(DEFINED ${_packageName}_INCLUDES) | |
| set(includes ${_packageName}_INCLUDES) | |
| elseif(DEFINED ${PACKAGE_NAME}_INCLUDES) | |
| set(includes ${PACKAGE_NAME}_INCLUDES) | |
| elseif(DEFINED ${_packageName}_INCLUDE_DIR) | |
| set(includes ${_packageName}_INCLUDE_DIR) | |
| elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIR) | |
| set(includes ${PACKAGE_NAME}_INCLUDE_DIR) | |
| endif() | |
| set(PACKAGE_INCLUDE_DIRS "${${includes}}" PARENT_SCOPE) | |
| # Check the following variables: | |
| # FOO_DEFINITIONS | |
| # Foo_DEFINITIONS | |
| set(definitions) | |
| if(DEFINED ${_packageName}_DEFINITIONS) | |
| set(definitions ${_packageName}_DEFINITIONS) | |
| elseif(DEFINED ${PACKAGE_NAME}_DEFINITIONS) | |
| set(definitions ${PACKAGE_NAME}_DEFINITIONS) | |
| endif() | |
| set(PACKAGE_DEFINITIONS "${${definitions}}" ) | |
| endfunction() | |
| function(set_link_flags_var _packageName) | |
| string(TOUPPER "${_packageName}" PACKAGE_NAME) | |
| # Check the following variables: | |
| # FOO_LIBRARIES | |
| # Foo_LIBRARIES | |
| # FOO_LIBS | |
| # Foo_LIBS | |
| set(libs) | |
| if(DEFINED ${_packageName}_LIBRARIES) | |
| set(libs ${_packageName}_LIBRARIES) | |
| elseif(DEFINED ${PACKAGE_NAME}_LIBRARIES) | |
| set(libs ${PACKAGE_NAME}_LIBRARIES) | |
| elseif(DEFINED ${_packageName}_LIBS) | |
| set(libs ${_packageName}_LIBS) | |
| elseif(DEFINED ${PACKAGE_NAME}_LIBS) | |
| set(libs ${PACKAGE_NAME}_LIBS) | |
| endif() | |
| set(PACKAGE_LIBRARIES "${${libs}}" PARENT_SCOPE ) | |
| endfunction() | |
| find_package("${NAME}" QUIET) | |
| set(PACKAGE_FOUND FALSE) | |
| string(TOUPPER "${NAME}" UPPERCASE_NAME) | |
| if(${NAME}_FOUND OR ${UPPERCASE_NAME}_FOUND) | |
| set(PACKAGE_FOUND TRUE) | |
| if("${MODE}" STREQUAL "EXIST") | |
| # do nothing | |
| elseif("${MODE}" STREQUAL "COMPILE") | |
| set_compile_flags_var(${NAME}) | |
| elseif("${MODE}" STREQUAL "LINK") | |
| set_link_flags_var(${NAME}) | |
| else() | |
| message(FATAL_ERROR "Invalid mode argument ${MODE} given.") | |
| endif() | |
| endif() | |
| set(PACKAGE_QUIET ${SILENT} ) |