| #.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 |
| |
| #============================================================================= |
| # Copyright 2006-2011 Alexander Neundorf, <[email protected]> |
| # |
| # Distributed under the OSI-approved BSD License (the "License"); |
| # see accompanying file Copyright.txt for details. |
| # |
| # This software is distributed WITHOUT ANY WARRANTY; without even the |
| # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| # See the License for more information. |
| #============================================================================= |
| # (To distribute this file outside of CMake, substitute the full |
| # License text for the above reference.) |
| |
| 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} ) |