123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- # 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/Fortran/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()
- include(CMakeSystemSpecificInitialize)
- # 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} )
|