diff options
Diffstat (limited to 'Modules')
307 files changed, 13878 insertions, 15039 deletions
diff --git a/Modules/AddFileDependencies.cmake b/Modules/AddFileDependencies.cmake index fdd8432..4a4e645 100644 --- a/Modules/AddFileDependencies.cmake +++ b/Modules/AddFileDependencies.cmake @@ -1,13 +1,18 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# AddFileDependencies -# ------------------- -# -# ADD_FILE_DEPENDENCIES(source_file depend_files...) -# -# Adds the given files as dependencies to source_file +#[=======================================================================[.rst: +AddFileDependencies +------------------- + +Add dependencies to a source file. + +.. code-block:: cmake + + ADD_FILE_DEPENDENCIES(<source> <files>) + +Adds the given ``<files>`` to the dependencies of file ``<source>``. +#]=======================================================================] macro(ADD_FILE_DEPENDENCIES _file) diff --git a/Modules/AndroidTestUtilities.cmake b/Modules/AndroidTestUtilities.cmake index 62d04f3..e333cdb 100644 --- a/Modules/AndroidTestUtilities.cmake +++ b/Modules/AndroidTestUtilities.cmake @@ -40,7 +40,7 @@ Module Functions .. command:: android_add_test_data - :: + .. code-block:: cmake android_add_test_data(<test-name> [FILES <files>...] [FILES_DEST <device-dir>] diff --git a/Modules/BundleUtilities.cmake b/Modules/BundleUtilities.cmake index 121a8f0..4a3f476 100644 --- a/Modules/BundleUtilities.cmake +++ b/Modules/BundleUtilities.cmake @@ -1,223 +1,243 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# BundleUtilities -# --------------- -# -# Functions to help assemble a standalone bundle application. -# -# A collection of CMake utility functions useful for dealing with .app -# bundles on the Mac and bundle-like directories on any OS. -# -# The following functions are provided by this module: -# -# :: -# -# fixup_bundle -# copy_and_fixup_bundle -# verify_app -# get_bundle_main_executable -# get_dotapp_dir -# get_bundle_and_executable -# get_bundle_all_executables -# get_item_key -# get_item_rpaths -# clear_bundle_keys -# set_bundle_key_values -# get_bundle_keys -# copy_resolved_item_into_bundle -# copy_resolved_framework_into_bundle -# fixup_bundle_item -# verify_bundle_prerequisites -# verify_bundle_symlinks -# -# Requires CMake 2.6 or greater because it uses function, break and -# PARENT_SCOPE. Also depends on GetPrerequisites.cmake. -# -# :: -# -# FIXUP_BUNDLE(<app> <libs> <dirs>) -# -# Fix up a bundle in-place and make it standalone, such that it can be -# drag-n-drop copied to another machine and run on that machine as long -# as all of the system libraries are compatible. -# -# If you pass plugins to fixup_bundle as the libs parameter, you should -# install them or copy them into the bundle before calling fixup_bundle. -# The "libs" parameter is a list of libraries that must be fixed up, but -# that cannot be determined by otool output analysis. (i.e., plugins) -# -# Gather all the keys for all the executables and libraries in a bundle, -# and then, for each key, copy each prerequisite into the bundle. Then -# fix each one up according to its own list of prerequisites. -# -# Then clear all the keys and call verify_app on the final bundle to -# ensure that it is truly standalone. -# -# As an optional parameter (IGNORE_ITEM) a list of file names can be passed, -# which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") -# -# :: -# -# COPY_AND_FIXUP_BUNDLE(<src> <dst> <libs> <dirs>) -# -# Makes a copy of the bundle <src> at location <dst> and then fixes up -# the new copied bundle in-place at <dst>... -# -# :: -# -# VERIFY_APP(<app>) -# -# Verifies that an application <app> appears valid based on running -# analysis tools on it. Calls "message(FATAL_ERROR" if the application -# is not verified. -# -# As an optional parameter (IGNORE_ITEM) a list of file names can be passed, -# which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") -# -# :: -# -# GET_BUNDLE_MAIN_EXECUTABLE(<bundle> <result_var>) -# -# The result will be the full path name of the bundle's main executable -# file or an "error:" prefixed string if it could not be determined. -# -# :: -# -# GET_DOTAPP_DIR(<exe> <dotapp_dir_var>) -# -# Returns the nearest parent dir whose name ends with ".app" given the -# full path to an executable. If there is no such parent dir, then -# simply return the dir containing the executable. -# -# The returned directory may or may not exist. -# -# :: -# -# GET_BUNDLE_AND_EXECUTABLE(<app> <bundle_var> <executable_var> <valid_var>) -# -# Takes either a ".app" directory name or the name of an executable -# nested inside a ".app" directory and returns the path to the ".app" -# directory in <bundle_var> and the path to its main executable in -# <executable_var> -# -# :: -# -# GET_BUNDLE_ALL_EXECUTABLES(<bundle> <exes_var>) -# -# Scans the given bundle recursively for all executable files and -# accumulates them into a variable. -# -# :: -# -# GET_ITEM_KEY(<item> <key_var>) -# -# Given a file (item) name, generate a key that should be unique -# considering the set of libraries that need copying or fixing up to -# make a bundle standalone. This is essentially the file name including -# extension with "." replaced by "_" -# -# This key is used as a prefix for CMake variables so that we can -# associate a set of variables with a given item based on its key. -# -# :: -# -# CLEAR_BUNDLE_KEYS(<keys_var>) -# -# Loop over the list of keys, clearing all the variables associated with -# each key. After the loop, clear the list of keys itself. -# -# Caller of get_bundle_keys should call clear_bundle_keys when done with -# list of keys. -# -# :: -# -# SET_BUNDLE_KEY_VALUES(<keys_var> <context> <item> <exepath> <dirs> -# <copyflag> [<rpaths>]) -# -# Add a key to the list (if necessary) for the given item. If added, -# also set all the variables associated with that key. -# -# :: -# -# GET_BUNDLE_KEYS(<app> <libs> <dirs> <keys_var>) -# -# Loop over all the executable and library files within the bundle (and -# given as extra <libs>) and accumulate a list of keys representing -# them. Set values associated with each key such that we can loop over -# all of them and copy prerequisite libs into the bundle and then do -# appropriate install_name_tool fixups. -# -# As an optional parameter (IGNORE_ITEM) a list of file names can be passed, -# which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") -# -# :: -# -# COPY_RESOLVED_ITEM_INTO_BUNDLE(<resolved_item> <resolved_embedded_item>) -# -# Copy a resolved item into the bundle if necessary. Copy is not -# necessary if the resolved_item is "the same as" the -# resolved_embedded_item. -# -# :: -# -# COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE(<resolved_item> <resolved_embedded_item>) -# -# Copy a resolved framework into the bundle if necessary. Copy is not -# necessary if the resolved_item is "the same as" the -# resolved_embedded_item. -# -# By default, BU_COPY_FULL_FRAMEWORK_CONTENTS is not set. If you want -# full frameworks embedded in your bundles, set -# BU_COPY_FULL_FRAMEWORK_CONTENTS to ON before calling fixup_bundle. By -# default, COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE copies the framework -# dylib itself plus the framework Resources directory. -# -# :: -# -# FIXUP_BUNDLE_ITEM(<resolved_embedded_item> <exepath> <dirs>) -# -# Get the direct/non-system prerequisites of the resolved embedded item. -# For each prerequisite, change the way it is referenced to the value of -# the _EMBEDDED_ITEM keyed variable for that prerequisite. (Most likely -# changing to an "@executable_path" style reference.) -# -# This function requires that the resolved_embedded_item be "inside" the -# bundle already. In other words, if you pass plugins to fixup_bundle -# as the libs parameter, you should install them or copy them into the -# bundle before calling fixup_bundle. The "libs" parameter is a list of -# libraries that must be fixed up, but that cannot be determined by -# otool output analysis. (i.e., plugins) -# -# Also, change the id of the item being fixed up to its own -# _EMBEDDED_ITEM value. -# -# Accumulate changes in a local variable and make *one* call to -# install_name_tool at the end of the function with all the changes at -# once. -# -# If the BU_CHMOD_BUNDLE_ITEMS variable is set then bundle items will be -# marked writable before install_name_tool tries to change them. -# -# :: -# -# VERIFY_BUNDLE_PREREQUISITES(<bundle> <result_var> <info_var>) -# -# Verifies that the sum of all prerequisites of all files inside the -# bundle are contained within the bundle or are "system" libraries, -# presumed to exist everywhere. -# -# As an optional parameter (IGNORE_ITEM) a list of file names can be passed, -# which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") -# -# :: -# -# VERIFY_BUNDLE_SYMLINKS(<bundle> <result_var> <info_var>) -# -# Verifies that any symlinks found in the bundle point to other files -# that are already also in the bundle... Anything that points to an -# external file causes this function to fail the verification. +#[=======================================================================[.rst: +BundleUtilities +--------------- + +Functions to help assemble a standalone bundle application. + +A collection of CMake utility functions useful for dealing with .app +bundles on the Mac and bundle-like directories on any OS. + +The following functions are provided by this module: + +.. code-block:: cmake + + fixup_bundle + copy_and_fixup_bundle + verify_app + get_bundle_main_executable + get_dotapp_dir + get_bundle_and_executable + get_bundle_all_executables + get_item_key + get_item_rpaths + clear_bundle_keys + set_bundle_key_values + get_bundle_keys + copy_resolved_item_into_bundle + copy_resolved_framework_into_bundle + fixup_bundle_item + verify_bundle_prerequisites + verify_bundle_symlinks + +Requires CMake 2.6 or greater because it uses function, break and +PARENT_SCOPE. Also depends on GetPrerequisites.cmake. + +DO NOT USE THESE FUNCTIONS AT CONFIGURE TIME (from ``CMakeLists.txt``)! +Instead, invoke them from an :command:`install(CODE)` or +:command:`install(SCRIPT)` rule. + +.. code-block:: cmake + + FIXUP_BUNDLE(<app> <libs> <dirs>) + +Fix up a bundle in-place and make it standalone, such that it can be +drag-n-drop copied to another machine and run on that machine as long +as all of the system libraries are compatible. + +If you pass plugins to fixup_bundle as the libs parameter, you should +install them or copy them into the bundle before calling fixup_bundle. +The "libs" parameter is a list of libraries that must be fixed up, but +that cannot be determined by otool output analysis. (i.e., plugins) + +Gather all the keys for all the executables and libraries in a bundle, +and then, for each key, copy each prerequisite into the bundle. Then +fix each one up according to its own list of prerequisites. + +Then clear all the keys and call verify_app on the final bundle to +ensure that it is truly standalone. + +As an optional parameter (IGNORE_ITEM) a list of file names can be passed, +which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") + +.. code-block:: cmake + + COPY_AND_FIXUP_BUNDLE(<src> <dst> <libs> <dirs>) + +Makes a copy of the bundle <src> at location <dst> and then fixes up +the new copied bundle in-place at <dst>... + +.. code-block:: cmake + + VERIFY_APP(<app>) + +Verifies that an application <app> appears valid based on running +analysis tools on it. Calls "message(FATAL_ERROR" if the application +is not verified. + +As an optional parameter (IGNORE_ITEM) a list of file names can be passed, +which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") + +.. code-block:: cmake + + GET_BUNDLE_MAIN_EXECUTABLE(<bundle> <result_var>) + +The result will be the full path name of the bundle's main executable +file or an "error:" prefixed string if it could not be determined. + +.. code-block:: cmake + + GET_DOTAPP_DIR(<exe> <dotapp_dir_var>) + +Returns the nearest parent dir whose name ends with ".app" given the +full path to an executable. If there is no such parent dir, then +simply return the dir containing the executable. + +The returned directory may or may not exist. + +.. code-block:: cmake + + GET_BUNDLE_AND_EXECUTABLE(<app> <bundle_var> <executable_var> <valid_var>) + +Takes either a ".app" directory name or the name of an executable +nested inside a ".app" directory and returns the path to the ".app" +directory in <bundle_var> and the path to its main executable in +<executable_var> + +.. code-block:: cmake + + GET_BUNDLE_ALL_EXECUTABLES(<bundle> <exes_var>) + +Scans the given bundle recursively for all executable files and +accumulates them into a variable. + +.. code-block:: cmake + + GET_ITEM_KEY(<item> <key_var>) + +Given a file (item) name, generate a key that should be unique +considering the set of libraries that need copying or fixing up to +make a bundle standalone. This is essentially the file name including +extension with "." replaced by "_" + +This key is used as a prefix for CMake variables so that we can +associate a set of variables with a given item based on its key. + +.. code-block:: cmake + + CLEAR_BUNDLE_KEYS(<keys_var>) + +Loop over the list of keys, clearing all the variables associated with +each key. After the loop, clear the list of keys itself. + +Caller of get_bundle_keys should call clear_bundle_keys when done with +list of keys. + +.. code-block:: cmake + + SET_BUNDLE_KEY_VALUES(<keys_var> <context> <item> <exepath> <dirs> + <copyflag> [<rpaths>]) + +Add a key to the list (if necessary) for the given item. If added, +also set all the variables associated with that key. + +.. code-block:: cmake + + GET_BUNDLE_KEYS(<app> <libs> <dirs> <keys_var>) + +Loop over all the executable and library files within the bundle (and +given as extra <libs>) and accumulate a list of keys representing +them. Set values associated with each key such that we can loop over +all of them and copy prerequisite libs into the bundle and then do +appropriate install_name_tool fixups. + +As an optional parameter (IGNORE_ITEM) a list of file names can be passed, +which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") + +.. code-block:: cmake + + COPY_RESOLVED_ITEM_INTO_BUNDLE(<resolved_item> <resolved_embedded_item>) + +Copy a resolved item into the bundle if necessary. Copy is not +necessary if the resolved_item is "the same as" the +resolved_embedded_item. + +.. code-block:: cmake + + COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE(<resolved_item> <resolved_embedded_item>) + +Copy a resolved framework into the bundle if necessary. Copy is not +necessary if the resolved_item is "the same as" the +resolved_embedded_item. + +By default, BU_COPY_FULL_FRAMEWORK_CONTENTS is not set. If you want +full frameworks embedded in your bundles, set +BU_COPY_FULL_FRAMEWORK_CONTENTS to ON before calling fixup_bundle. By +default, COPY_RESOLVED_FRAMEWORK_INTO_BUNDLE copies the framework +dylib itself plus the framework Resources directory. + +.. code-block:: cmake + + FIXUP_BUNDLE_ITEM(<resolved_embedded_item> <exepath> <dirs>) + +Get the direct/non-system prerequisites of the resolved embedded item. +For each prerequisite, change the way it is referenced to the value of +the _EMBEDDED_ITEM keyed variable for that prerequisite. (Most likely +changing to an "@executable_path" style reference.) + +This function requires that the resolved_embedded_item be "inside" the +bundle already. In other words, if you pass plugins to fixup_bundle +as the libs parameter, you should install them or copy them into the +bundle before calling fixup_bundle. The "libs" parameter is a list of +libraries that must be fixed up, but that cannot be determined by +otool output analysis. (i.e., plugins) + +Also, change the id of the item being fixed up to its own +_EMBEDDED_ITEM value. + +Accumulate changes in a local variable and make *one* call to +install_name_tool at the end of the function with all the changes at +once. + +If the BU_CHMOD_BUNDLE_ITEMS variable is set then bundle items will be +marked writable before install_name_tool tries to change them. + +.. code-block:: cmake + + VERIFY_BUNDLE_PREREQUISITES(<bundle> <result_var> <info_var>) + +Verifies that the sum of all prerequisites of all files inside the +bundle are contained within the bundle or are "system" libraries, +presumed to exist everywhere. + +As an optional parameter (IGNORE_ITEM) a list of file names can be passed, +which are then ignored (e.g. IGNORE_ITEM "vcredist_x86.exe;vcredist_x64.exe") + +.. code-block:: cmake + + VERIFY_BUNDLE_SYMLINKS(<bundle> <result_var> <info_var>) + +Verifies that any symlinks found in the bundle point to other files +that are already also in the bundle... Anything that points to an +external file causes this function to fail the verification. +#]=======================================================================] + +function(_warn_cmp0080) + cmake_policy(GET_WARNING CMP0080 _cmp0080_warning) + message(AUTHOR_WARNING "${_cmp0080_warning}\n") +endfunction() + +# Do not include this module at configure time! +if(DEFINED CMAKE_GENERATOR) + cmake_policy(GET CMP0080 _BundleUtilities_CMP0080) + if(_BundleUtilities_CMP0080 STREQUAL "NEW") + message(FATAL_ERROR "BundleUtilities cannot be included at configure time!") + elseif(NOT _BundleUtilities_CMP0080 STREQUAL "OLD" AND NOT _CMP0080_SUPPRESS_WARNING) + _warn_cmp0080() + endif() +endif() # The functions defined in this file depend on the get_prerequisites function # (and possibly others) found in: @@ -421,7 +441,12 @@ function(get_item_rpaths item rpaths_var) execute_process( COMMAND "${otool_cmd}" -l "${item}" OUTPUT_VARIABLE load_cmds_ov + RESULT_VARIABLE otool_rv + ERROR_VARIABLE otool_ev ) + if(NOT otool_rv STREQUAL "0") + message(FATAL_ERROR "otool -l failed: ${otool_rv}\n${otool_ev}") + endif() string(REGEX REPLACE "[^\n]+cmd LC_RPATH\n[^\n]+\n[^\n]+path ([^\n]+) \\(offset[^\n]+\n" "rpath \\1\n" load_cmds_ov "${load_cmds_ov}") string(REGEX MATCHALL "rpath [^\n]+" load_cmds_ov "${load_cmds_ov}") string(REGEX REPLACE "rpath " "" load_cmds_ov "${load_cmds_ov}") diff --git a/Modules/CMakeAddFortranSubdirectory.cmake b/Modules/CMakeAddFortranSubdirectory.cmake index 4649f35..2bb3128 100644 --- a/Modules/CMakeAddFortranSubdirectory.cmake +++ b/Modules/CMakeAddFortranSubdirectory.cmake @@ -1,46 +1,47 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakeAddFortranSubdirectory -# --------------------------- -# -# Use MinGW gfortran from VS if a fortran compiler is not found. -# -# The 'add_fortran_subdirectory' function adds a subdirectory to a -# project that contains a fortran only sub-project. The module will -# check the current compiler and see if it can support fortran. If no -# fortran compiler is found and the compiler is MSVC, then this module -# will find the MinGW gfortran. It will then use an external project to -# build with the MinGW tools. It will also create imported targets for -# the libraries created. This will only work if the fortran code is -# built into a dll, so BUILD_SHARED_LIBS is turned on in the project. -# In addition the CMAKE_GNUtoMS option is set to on, so that the MS .lib -# files are created. Usage is as follows: -# -# :: -# -# cmake_add_fortran_subdirectory( -# <subdir> # name of subdirectory -# PROJECT <project_name> # project name in subdir top CMakeLists.txt -# ARCHIVE_DIR <dir> # dir where project places .lib files -# RUNTIME_DIR <dir> # dir where project places .dll files -# LIBRARIES <lib>... # names of library targets to import -# LINK_LIBRARIES # link interface libraries for LIBRARIES -# [LINK_LIBS <lib> <dep>...]... -# CMAKE_COMMAND_LINE ... # extra command line flags to pass to cmake -# NO_EXTERNAL_INSTALL # skip installation of external project -# ) -# -# Relative paths in ARCHIVE_DIR and RUNTIME_DIR are interpreted with -# respect to the build directory corresponding to the source directory -# in which the function is invoked. -# -# Limitations: -# -# NO_EXTERNAL_INSTALL is required for forward compatibility with a -# future version that supports installation of the external project -# binaries during "make install". +#[=======================================================================[.rst: +CMakeAddFortranSubdirectory +--------------------------- + +Use MinGW gfortran from VS if a fortran compiler is not found. + +The 'add_fortran_subdirectory' function adds a subdirectory to a +project that contains a fortran only sub-project. The module will +check the current compiler and see if it can support fortran. If no +fortran compiler is found and the compiler is MSVC, then this module +will find the MinGW gfortran. It will then use an external project to +build with the MinGW tools. It will also create imported targets for +the libraries created. This will only work if the fortran code is +built into a dll, so BUILD_SHARED_LIBS is turned on in the project. +In addition the CMAKE_GNUtoMS option is set to on, so that the MS .lib +files are created. Usage is as follows: + +:: + + cmake_add_fortran_subdirectory( + <subdir> # name of subdirectory + PROJECT <project_name> # project name in subdir top CMakeLists.txt + ARCHIVE_DIR <dir> # dir where project places .lib files + RUNTIME_DIR <dir> # dir where project places .dll files + LIBRARIES <lib>... # names of library targets to import + LINK_LIBRARIES # link interface libraries for LIBRARIES + [LINK_LIBS <lib> <dep>...]... + CMAKE_COMMAND_LINE ... # extra command line flags to pass to cmake + NO_EXTERNAL_INSTALL # skip installation of external project + ) + +Relative paths in ARCHIVE_DIR and RUNTIME_DIR are interpreted with +respect to the build directory corresponding to the source directory +in which the function is invoked. + +Limitations: + +NO_EXTERNAL_INSTALL is required for forward compatibility with a +future version that supports installation of the external project +binaries during "make install". +#]=======================================================================] set(_MS_MINGW_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}) include(CheckLanguage) diff --git a/Modules/CMakeBackwardCompatibilityCXX.cmake b/Modules/CMakeBackwardCompatibilityCXX.cmake index cbd5ea7..628b541 100644 --- a/Modules/CMakeBackwardCompatibilityCXX.cmake +++ b/Modules/CMakeBackwardCompatibilityCXX.cmake @@ -1,20 +1,21 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakeBackwardCompatibilityCXX -# ----------------------------- -# -# define a bunch of backwards compatibility variables -# -# :: -# -# CMAKE_ANSI_CXXFLAGS - flag for ansi c++ -# CMAKE_HAS_ANSI_STRING_STREAM - has <strstream> -# include(TestForANSIStreamHeaders) -# include(CheckIncludeFileCXX) -# include(TestForSTDNamespace) -# include(TestForANSIForScope) +#[=======================================================================[.rst: +CMakeBackwardCompatibilityCXX +----------------------------- + +define a bunch of backwards compatibility variables + +:: + + CMAKE_ANSI_CXXFLAGS - flag for ansi c++ + CMAKE_HAS_ANSI_STRING_STREAM - has <strstream> + include(TestForANSIStreamHeaders) + include(CheckIncludeFileCXX) + include(TestForSTDNamespace) + include(TestForANSIForScope) +#]=======================================================================] if(NOT CMAKE_SKIP_COMPATIBILITY_TESTS) # check for some ANSI flags in the CXX compiler if it is not gnu diff --git a/Modules/CMakeDependentOption.cmake b/Modules/CMakeDependentOption.cmake index 21d3c96..6046d85 100644 --- a/Modules/CMakeDependentOption.cmake +++ b/Modules/CMakeDependentOption.cmake @@ -1,27 +1,28 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakeDependentOption -# -------------------- -# -# Macro to provide an option dependent on other options. -# -# This macro presents an option to the user only if a set of other -# conditions are true. When the option is not presented a default value -# is used, but any value set by the user is preserved for when the -# option is presented again. Example invocation: -# -# :: -# -# CMAKE_DEPENDENT_OPTION(USE_FOO "Use Foo" ON -# "USE_BAR;NOT USE_ZOT" OFF) -# -# If USE_BAR is true and USE_ZOT is false, this provides an option -# called USE_FOO that defaults to ON. Otherwise, it sets USE_FOO to -# OFF. If the status of USE_BAR or USE_ZOT ever changes, any value for -# the USE_FOO option is saved so that when the option is re-enabled it -# retains its old value. +#[=======================================================================[.rst: +CMakeDependentOption +-------------------- + +Macro to provide an option dependent on other options. + +This macro presents an option to the user only if a set of other +conditions are true. When the option is not presented a default value +is used, but any value set by the user is preserved for when the +option is presented again. Example invocation: + +:: + + CMAKE_DEPENDENT_OPTION(USE_FOO "Use Foo" ON + "USE_BAR;NOT USE_ZOT" OFF) + +If USE_BAR is true and USE_ZOT is false, this provides an option +called USE_FOO that defaults to ON. Otherwise, it sets USE_FOO to +OFF. If the status of USE_BAR or USE_ZOT ever changes, any value for +the USE_FOO option is saved so that when the option is re-enabled it +retains its old value. +#]=======================================================================] macro(CMAKE_DEPENDENT_OPTION option doc default depends force) if(${option}_ISSET MATCHES "^${option}_ISSET$") diff --git a/Modules/CMakeDetermineASMCompiler.cmake b/Modules/CMakeDetermineASMCompiler.cmake index 24048ed..45dea8f 100644 --- a/Modules/CMakeDetermineASMCompiler.cmake +++ b/Modules/CMakeDetermineASMCompiler.cmake @@ -22,11 +22,9 @@ if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER) if("ASM${ASM_DIALECT}" STREQUAL "ASM") # the generic assembler support if(NOT CMAKE_ASM_COMPILER_INIT) if(CMAKE_C_COMPILER) - set(CMAKE_ASM_COMPILER "${CMAKE_C_COMPILER}" CACHE FILEPATH "The ASM compiler") - set(CMAKE_ASM_COMPILER_ID "${CMAKE_C_COMPILER_ID}") + set(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST ${CMAKE_C_COMPILER}) elseif(CMAKE_CXX_COMPILER) - set(CMAKE_ASM_COMPILER "${CMAKE_CXX_COMPILER}" CACHE FILEPATH "The ASM compiler") - set(CMAKE_ASM_COMPILER_ID "${CMAKE_CXX_COMPILER_ID}") + set(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST ${CMAKE_CXX_COMPILER}) else() # List all default C and CXX compilers set(CMAKE_ASM${ASM_DIALECT}_COMPILER_LIST diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 16dde65..5e2df26a 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -355,6 +355,12 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS} else() set(id_development_team "") endif() + if(DEFINED CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY) + set(id_code_sign_identity + "CODE_SIGN_IDENTITY = \"${CMAKE_XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY}\";") + else() + set(id_code_sign_identity "") + endif() configure_file(${CMAKE_ROOT}/Modules/CompilerId/Xcode-3.pbxproj.in ${id_dir}/CompilerId${lang}.xcodeproj/project.pbxproj @ONLY) unset(_ENV_MACOSX_DEPLOYMENT_TARGET) @@ -519,6 +525,9 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file) ${CMAKE_${lang}_COMPILER_ID_STRINGS_PARAMETERS} REGEX "INFO:[A-Za-z0-9_]+\\[[^]]*\\]") set(COMPILER_ID_TWICE) + # With the IAR Compiler, some strings are found twice, first time as incomplete + # list like "?<Constant "INFO:compiler[IAR]">". Remove the incomplete copies. + list(FILTER CMAKE_${lang}_COMPILER_ID_STRINGS EXCLUDE REGEX "\\?<Constant \\\"") # In C# binaries, some strings are found more than once. list(REMOVE_DUPLICATES CMAKE_${lang}_COMPILER_ID_STRINGS) foreach(info ${CMAKE_${lang}_COMPILER_ID_STRINGS}) diff --git a/Modules/CMakeDetermineVSServicePack.cmake b/Modules/CMakeDetermineVSServicePack.cmake index 0264621..9edc309 100644 --- a/Modules/CMakeDetermineVSServicePack.cmake +++ b/Modules/CMakeDetermineVSServicePack.cmake @@ -1,35 +1,38 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakeDetermineVSServicePack -# --------------------------- -# -# Deprecated. Do not use. -# -# The functionality of this module has been superseded by the -# :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable that contains -# the compiler version number. -# -# Determine the Visual Studio service pack of the 'cl' in use. -# -# Usage:: -# -# if(MSVC) -# include(CMakeDetermineVSServicePack) -# DetermineVSServicePack( my_service_pack ) -# if( my_service_pack ) -# message(STATUS "Detected: ${my_service_pack}") -# endif() -# endif() -# -# Function DetermineVSServicePack sets the given variable to one of the -# following values or an empty string if unknown:: -# -# vc80, vc80sp1 -# vc90, vc90sp1 -# vc100, vc100sp1 -# vc110, vc110sp1, vc110sp2, vc110sp3, vc110sp4 +#[=======================================================================[.rst: +CMakeDetermineVSServicePack +--------------------------- + +.. deprecated:: 3.0 + + Do not use. + +The functionality of this module has been superseded by the +:variable:`CMAKE_<LANG>_COMPILER_VERSION` variable that contains +the compiler version number. + +Determine the Visual Studio service pack of the 'cl' in use. + +Usage:: + + if(MSVC) + include(CMakeDetermineVSServicePack) + DetermineVSServicePack( my_service_pack ) + if( my_service_pack ) + message(STATUS "Detected: ${my_service_pack}") + endif() + endif() + +Function DetermineVSServicePack sets the given variable to one of the +following values or an empty string if unknown:: + + vc80, vc80sp1 + vc90, vc90sp1 + vc100, vc100sp1 + vc110, vc110sp1, vc110sp2, vc110sp3, vc110sp4 +#]=======================================================================] if(NOT CMAKE_MINIMUM_REQUIRED_VERSION VERSION_LESS 2.8.8) message(DEPRECATION @@ -169,4 +172,3 @@ function(DetermineVSServicePack _pack) endif() endif() endfunction() - diff --git a/Modules/CMakeExpandImportedTargets.cmake b/Modules/CMakeExpandImportedTargets.cmake index 21a3065..ae26cc2 100644 --- a/Modules/CMakeExpandImportedTargets.cmake +++ b/Modules/CMakeExpandImportedTargets.cmake @@ -1,41 +1,44 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakeExpandImportedTargets -# -------------------------- -# -# Deprecated. Do not use. -# -# This module was once needed to expand imported targets to the underlying -# libraries they reference on disk for use with the :command:`try_compile` -# and :command:`try_run` commands. These commands now support imported -# libraries in their ``LINK_LIBRARIES`` options (since CMake 2.8.11 -# for :command:`try_compile` and since CMake 3.2 for :command:`try_run`). -# -# This module does not support the policy :policy:`CMP0022` ``NEW`` -# behavior or use of the :prop_tgt:`INTERFACE_LINK_LIBRARIES` property -# because :manual:`generator expressions <cmake-generator-expressions(7)>` -# cannot be evaluated during configuration. -# -# :: -# -# CMAKE_EXPAND_IMPORTED_TARGETS(<var> LIBRARIES lib1 lib2...libN -# [CONFIGURATION <config>]) -# -# CMAKE_EXPAND_IMPORTED_TARGETS() takes a list of libraries and replaces -# all imported targets contained in this list with their actual file -# paths of the referenced libraries on disk, including the libraries -# from their link interfaces. If a CONFIGURATION is given, it uses the -# respective configuration of the imported targets if it exists. If no -# CONFIGURATION is given, it uses the first configuration from -# ${CMAKE_CONFIGURATION_TYPES} if set, otherwise ${CMAKE_BUILD_TYPE}. -# -# :: -# -# cmake_expand_imported_targets(expandedLibs -# LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} -# CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}" ) +#[=======================================================================[.rst: +CMakeExpandImportedTargets +-------------------------- + +.. deprecated:: 3.4 + + Do not use. + +This module was once needed to expand imported targets to the underlying +libraries they reference on disk for use with the :command:`try_compile` +and :command:`try_run` commands. These commands now support imported +libraries in their ``LINK_LIBRARIES`` options (since CMake 2.8.11 +for :command:`try_compile` and since CMake 3.2 for :command:`try_run`). + +This module does not support the policy :policy:`CMP0022` ``NEW`` +behavior or use of the :prop_tgt:`INTERFACE_LINK_LIBRARIES` property +because :manual:`generator expressions <cmake-generator-expressions(7)>` +cannot be evaluated during configuration. + +:: + + CMAKE_EXPAND_IMPORTED_TARGETS(<var> LIBRARIES lib1 lib2...libN + [CONFIGURATION <config>]) + +CMAKE_EXPAND_IMPORTED_TARGETS() takes a list of libraries and replaces +all imported targets contained in this list with their actual file +paths of the referenced libraries on disk, including the libraries +from their link interfaces. If a CONFIGURATION is given, it uses the +respective configuration of the imported targets if it exists. If no +CONFIGURATION is given, it uses the first configuration from +${CMAKE_CONFIGURATION_TYPES} if set, otherwise ${CMAKE_BUILD_TYPE}. + +:: + + cmake_expand_imported_targets(expandedLibs + LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} + CONFIGURATION "${CMAKE_TRY_COMPILE_CONFIGURATION}" ) +#]=======================================================================] function(CMAKE_EXPAND_IMPORTED_TARGETS _RESULT ) diff --git a/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake b/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake index 3a72622..11f4a29 100644 --- a/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake +++ b/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake @@ -27,6 +27,7 @@ macro(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang _resultIncludeDirs _resultDefines set(_compilerExecutable "${CMAKE_C_COMPILER}") set(_arg1 "${CMAKE_C_COMPILER_ARG1}") endif () + separate_arguments(_arg1 NATIVE_COMMAND "${_arg1}") execute_process(COMMAND ${_compilerExecutable} ${_arg1} ${_stdver} ${_stdlib} -v -E -x ${_lang} -dD dummy WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles ERROR_VARIABLE _gccOutput @@ -66,10 +67,10 @@ macro(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang _resultIncludeDirs _resultDefines #message(STATUS "m1: -${CMAKE_MATCH_1}- m2: -${CMAKE_MATCH_2}- m3: -${CMAKE_MATCH_3}-") list(APPEND ${_resultDefines} "${_name}") - if(_value) - list(APPEND ${_resultDefines} "${_value}") - else() + if ("${_value}" STREQUAL "") list(APPEND ${_resultDefines} " ") + else() + list(APPEND ${_resultDefines} "${_value}") endif() endforeach() diff --git a/Modules/CMakeFindBinUtils.cmake b/Modules/CMakeFindBinUtils.cmake index 1b6823c..830639d 100644 --- a/Modules/CMakeFindBinUtils.cmake +++ b/Modules/CMakeFindBinUtils.cmake @@ -38,6 +38,8 @@ if(CMAKE_LINKER) endif() endif() +set(_CMAKE_TOOL_VARS "") + # if it's the MS C/CXX compiler, search for link if("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_SIMULATE_ID}" STREQUAL "xMSVC" OR "x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xMSVC" @@ -47,7 +49,7 @@ if("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_SIMULATE_ID}" STREQUAL "xMSVC" find_program(CMAKE_LINKER NAMES link HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) - mark_as_advanced(CMAKE_LINKER) + list(APPEND _CMAKE_TOOL_VARS CMAKE_LINKER) # in all other cases search for ar, ranlib, etc. else() @@ -70,7 +72,7 @@ else() find_program(CMAKE_OBJDUMP NAMES ${_CMAKE_TOOLCHAIN_PREFIX}objdump HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) find_program(CMAKE_OBJCOPY NAMES ${_CMAKE_TOOLCHAIN_PREFIX}objcopy HINTS ${_CMAKE_TOOLCHAIN_LOCATION}) - mark_as_advanced(CMAKE_AR CMAKE_RANLIB CMAKE_STRIP CMAKE_LINKER CMAKE_NM CMAKE_OBJDUMP CMAKE_OBJCOPY) + list(APPEND _CMAKE_TOOL_VARS CMAKE_AR CMAKE_RANLIB CMAKE_STRIP CMAKE_LINKER CMAKE_NM CMAKE_OBJDUMP CMAKE_OBJCOPY) endif() @@ -81,5 +83,15 @@ if(CMAKE_PLATFORM_HAS_INSTALLNAME) message(FATAL_ERROR "Could not find install_name_tool, please check your installation.") endif() - mark_as_advanced(CMAKE_INSTALL_NAME_TOOL) + list(APPEND _CMAKE_TOOL_VARS CMAKE_INSTALL_NAME_TOOL) endif() + +# Mark any tool cache entries as advanced. +foreach(var IN LISTS _CMAKE_TOOL_VARS) + get_property(_CMAKE_TOOL_CACHED CACHE ${var} PROPERTY TYPE) + if(_CMAKE_TOOL_CACHED) + mark_as_advanced(${var}) + endif() +endforeach() +unset(_CMAKE_TOOL_VARS) +unset(_CMAKE_TOOL_CACHED) diff --git a/Modules/CMakeFindDependencyMacro.cmake b/Modules/CMakeFindDependencyMacro.cmake index 6a89fff..de1a332 100644 --- a/Modules/CMakeFindDependencyMacro.cmake +++ b/Modules/CMakeFindDependencyMacro.cmake @@ -14,7 +14,7 @@ CMakeFindDependencyMacro It is designed to be used in a :ref:`Package Configuration File <Config File Packages>` - (``<package>Config.cmake``). ``find_dependency`` forwards the correct + (``<PackageName>Config.cmake``). ``find_dependency`` forwards the correct parameters for ``QUIET`` and ``REQUIRED`` which were passed to the original :command:`find_package` call. Any additional arguments specified are forwarded to :command:`find_package`. diff --git a/Modules/CMakeFindFrameworks.cmake b/Modules/CMakeFindFrameworks.cmake index 6c4c527..06c05fb 100644 --- a/Modules/CMakeFindFrameworks.cmake +++ b/Modules/CMakeFindFrameworks.cmake @@ -1,15 +1,16 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakeFindFrameworks -# ------------------- -# -# helper module to find OSX frameworks -# -# This module reads hints about search locations from variables:: -# -# CMAKE_FIND_FRAMEWORK_EXTRA_LOCATIONS - Extra directories +#[=======================================================================[.rst: +CMakeFindFrameworks +------------------- + +helper module to find OSX frameworks + +This module reads hints about search locations from variables:: + + CMAKE_FIND_FRAMEWORK_EXTRA_LOCATIONS - Extra directories +#]=======================================================================] if(NOT CMAKE_FIND_FRAMEWORKS_INCLUDED) set(CMAKE_FIND_FRAMEWORKS_INCLUDED 1) diff --git a/Modules/CMakeFindPackageMode.cmake b/Modules/CMakeFindPackageMode.cmake index ec3652c..815dfc9 100644 --- a/Modules/CMakeFindPackageMode.cmake +++ b/Modules/CMakeFindPackageMode.cmake @@ -1,33 +1,34 @@ # 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 +#[=======================================================================[.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 .") diff --git a/Modules/CMakeForceCompiler.cmake b/Modules/CMakeForceCompiler.cmake index 1bc80fd..7ac09dc 100644 --- a/Modules/CMakeForceCompiler.cmake +++ b/Modules/CMakeForceCompiler.cmake @@ -1,69 +1,72 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakeForceCompiler -# ------------------ -# -# Deprecated. Do not use. -# -# The macros provided by this module were once intended for use by -# cross-compiling toolchain files when CMake was not able to automatically -# detect the compiler identification. Since the introduction of this module, -# CMake's compiler identification capabilities have improved and can now be -# taught to recognize any compiler. Furthermore, the suite of information -# CMake detects from a compiler is now too extensive to be provided by -# toolchain files using these macros. -# -# One common use case for this module was to skip CMake's checks for a -# working compiler when using a cross-compiler that cannot link binaries -# without special flags or custom linker scripts. This case is now supported -# by setting the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable in the -# toolchain file instead. -# -# ------------------------------------------------------------------------- -# -# Macro CMAKE_FORCE_C_COMPILER has the following signature: -# -# :: -# -# CMAKE_FORCE_C_COMPILER(<compiler> <compiler-id>) -# -# It sets CMAKE_C_COMPILER to the given compiler and the cmake internal -# variable CMAKE_C_COMPILER_ID to the given compiler-id. It also -# bypasses the check for working compiler and basic compiler information -# tests. -# -# Macro CMAKE_FORCE_CXX_COMPILER has the following signature: -# -# :: -# -# CMAKE_FORCE_CXX_COMPILER(<compiler> <compiler-id>) -# -# It sets CMAKE_CXX_COMPILER to the given compiler and the cmake -# internal variable CMAKE_CXX_COMPILER_ID to the given compiler-id. It -# also bypasses the check for working compiler and basic compiler -# information tests. -# -# Macro CMAKE_FORCE_Fortran_COMPILER has the following signature: -# -# :: -# -# CMAKE_FORCE_Fortran_COMPILER(<compiler> <compiler-id>) -# -# It sets CMAKE_Fortran_COMPILER to the given compiler and the cmake -# internal variable CMAKE_Fortran_COMPILER_ID to the given compiler-id. -# It also bypasses the check for working compiler and basic compiler -# information tests. -# -# So a simple toolchain file could look like this: -# -# :: -# -# include (CMakeForceCompiler) -# set(CMAKE_SYSTEM_NAME Generic) -# CMAKE_FORCE_C_COMPILER (chc12 MetrowerksHicross) -# CMAKE_FORCE_CXX_COMPILER (chc12 MetrowerksHicross) +#[=======================================================================[.rst: +CMakeForceCompiler +------------------ + +.. deprecated:: 3.6 + + Do not use. + +The macros provided by this module were once intended for use by +cross-compiling toolchain files when CMake was not able to automatically +detect the compiler identification. Since the introduction of this module, +CMake's compiler identification capabilities have improved and can now be +taught to recognize any compiler. Furthermore, the suite of information +CMake detects from a compiler is now too extensive to be provided by +toolchain files using these macros. + +One common use case for this module was to skip CMake's checks for a +working compiler when using a cross-compiler that cannot link binaries +without special flags or custom linker scripts. This case is now supported +by setting the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable in the +toolchain file instead. + +------------------------------------------------------------------------- + +Macro CMAKE_FORCE_C_COMPILER has the following signature: + +:: + + CMAKE_FORCE_C_COMPILER(<compiler> <compiler-id>) + +It sets CMAKE_C_COMPILER to the given compiler and the cmake internal +variable CMAKE_C_COMPILER_ID to the given compiler-id. It also +bypasses the check for working compiler and basic compiler information +tests. + +Macro CMAKE_FORCE_CXX_COMPILER has the following signature: + +:: + + CMAKE_FORCE_CXX_COMPILER(<compiler> <compiler-id>) + +It sets CMAKE_CXX_COMPILER to the given compiler and the cmake +internal variable CMAKE_CXX_COMPILER_ID to the given compiler-id. It +also bypasses the check for working compiler and basic compiler +information tests. + +Macro CMAKE_FORCE_Fortran_COMPILER has the following signature: + +:: + + CMAKE_FORCE_Fortran_COMPILER(<compiler> <compiler-id>) + +It sets CMAKE_Fortran_COMPILER to the given compiler and the cmake +internal variable CMAKE_Fortran_COMPILER_ID to the given compiler-id. +It also bypasses the check for working compiler and basic compiler +information tests. + +So a simple toolchain file could look like this: + +:: + + include (CMakeForceCompiler) + set(CMAKE_SYSTEM_NAME Generic) + CMAKE_FORCE_C_COMPILER (chc12 MetrowerksHicross) + CMAKE_FORCE_CXX_COMPILER (chc12 MetrowerksHicross) +#]=======================================================================] macro(CMAKE_FORCE_C_COMPILER compiler id) message(DEPRECATION "The CMAKE_FORCE_C_COMPILER macro is deprecated. " diff --git a/Modules/CMakeGraphVizOptions.cmake b/Modules/CMakeGraphVizOptions.cmake index 0d7f1d9..1911e73 100644 --- a/Modules/CMakeGraphVizOptions.cmake +++ b/Modules/CMakeGraphVizOptions.cmake @@ -1,122 +1,123 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakeGraphVizOptions -# -------------------- -# -# The builtin graphviz support of CMake. -# -# Variables specific to the graphviz support -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# CMake -# can generate `graphviz <http://www.graphviz.org/>`_ files, showing the dependencies between the -# targets in a project and also external libraries which are linked -# against. When CMake is run with the ``--graphviz=foo.dot`` option, it will -# produce: -# -# * a ``foo.dot`` file showing all dependencies in the project -# * a ``foo.dot.<target>`` file for each target, file showing on which other targets the respective target depends -# * a ``foo.dot.<target>.dependers`` file, showing which other targets depend on the respective target -# -# The different dependency types ``PUBLIC``, ``PRIVATE`` and ``INTERFACE`` -# are represented as solid, dashed and dotted edges. -# -# This can result in huge graphs. Using the file -# ``CMakeGraphVizOptions.cmake`` the look and content of the generated -# graphs can be influenced. This file is searched first in -# :variable:`CMAKE_BINARY_DIR` and then in :variable:`CMAKE_SOURCE_DIR`. If found, it is -# read and the variables set in it are used to adjust options for the -# generated graphviz files. -# -# .. variable:: GRAPHVIZ_GRAPH_TYPE -# -# The graph type. -# -# * Mandatory : NO -# * Default : "digraph" -# -# Valid graph types are: -# -# * "graph" : Nodes are joined with lines -# * "digraph" : Nodes are joined with arrows showing direction -# * "strict graph" : Like "graph" but max one line between each node -# * "strict digraph" : Like "graph" but max one line between each node in each direction -# -# .. variable:: GRAPHVIZ_GRAPH_NAME -# -# The graph name. -# -# * Mandatory : NO -# * Default : "GG" -# -# .. variable:: GRAPHVIZ_GRAPH_HEADER -# -# The header written at the top of the graphviz file. -# -# * Mandatory : NO -# * Default : "node [n fontsize = "12"];" -# -# .. variable:: GRAPHVIZ_NODE_PREFIX -# -# The prefix for each node in the graphviz file. -# -# * Mandatory : NO -# * Default : "node" -# -# .. variable:: GRAPHVIZ_EXECUTABLES -# -# Set this to FALSE to exclude executables from the generated graphs. -# -# * Mandatory : NO -# * Default : TRUE -# -# .. variable:: GRAPHVIZ_STATIC_LIBS -# -# Set this to FALSE to exclude static libraries from the generated graphs. -# -# * Mandatory : NO -# * Default : TRUE -# -# .. variable:: GRAPHVIZ_SHARED_LIBS -# -# Set this to FALSE to exclude shared libraries from the generated graphs. -# -# * Mandatory : NO -# * Default : TRUE -# -# .. variable:: GRAPHVIZ_MODULE_LIBS -# -# Set this to FALSE to exclude module libraries from the generated graphs. -# -# * Mandatory : NO -# * Default : TRUE -# -# .. variable:: GRAPHVIZ_EXTERNAL_LIBS -# -# Set this to FALSE to exclude external libraries from the generated graphs. -# -# * Mandatory : NO -# * Default : TRUE -# -# .. variable:: GRAPHVIZ_IGNORE_TARGETS -# -# A list of regular expressions for ignoring targets. -# -# * Mandatory : NO -# * Default : empty -# -# .. variable:: GRAPHVIZ_GENERATE_PER_TARGET -# -# Set this to FALSE to exclude per target graphs ``foo.dot.<target>``. -# -# * Mandatory : NO -# * Default : TRUE -# -# .. variable:: GRAPHVIZ_GENERATE_DEPENDERS -# -# Set this to FALSE to exclude depender graphs ``foo.dot.<target>.dependers``. -# -# * Mandatory : NO -# * Default : TRUE +#[=======================================================================[.rst: +CMakeGraphVizOptions +-------------------- + +The builtin graphviz support of CMake. + +Variables specific to the graphviz support +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +CMake +can generate `graphviz <http://www.graphviz.org/>`_ files, showing the dependencies between the +targets in a project and also external libraries which are linked +against. When CMake is run with the ``--graphviz=foo.dot`` option, it will +produce: + +* a ``foo.dot`` file showing all dependencies in the project +* a ``foo.dot.<target>`` file for each target, file showing on which other targets the respective target depends +* a ``foo.dot.<target>.dependers`` file, showing which other targets depend on the respective target + +The different dependency types ``PUBLIC``, ``PRIVATE`` and ``INTERFACE`` +are represented as solid, dashed and dotted edges. + +This can result in huge graphs. Using the file +``CMakeGraphVizOptions.cmake`` the look and content of the generated +graphs can be influenced. This file is searched first in +:variable:`CMAKE_BINARY_DIR` and then in :variable:`CMAKE_SOURCE_DIR`. If found, it is +read and the variables set in it are used to adjust options for the +generated graphviz files. + +.. variable:: GRAPHVIZ_GRAPH_TYPE + + The graph type. + + * Mandatory : NO + * Default : "digraph" + + Valid graph types are: + + * "graph" : Nodes are joined with lines + * "digraph" : Nodes are joined with arrows showing direction + * "strict graph" : Like "graph" but max one line between each node + * "strict digraph" : Like "graph" but max one line between each node in each direction + +.. variable:: GRAPHVIZ_GRAPH_NAME + + The graph name. + + * Mandatory : NO + * Default : "GG" + +.. variable:: GRAPHVIZ_GRAPH_HEADER + + The header written at the top of the graphviz file. + + * Mandatory : NO + * Default : "node [n fontsize = "12"];" + +.. variable:: GRAPHVIZ_NODE_PREFIX + + The prefix for each node in the graphviz file. + + * Mandatory : NO + * Default : "node" + +.. variable:: GRAPHVIZ_EXECUTABLES + + Set this to FALSE to exclude executables from the generated graphs. + + * Mandatory : NO + * Default : TRUE + +.. variable:: GRAPHVIZ_STATIC_LIBS + + Set this to FALSE to exclude static libraries from the generated graphs. + + * Mandatory : NO + * Default : TRUE + +.. variable:: GRAPHVIZ_SHARED_LIBS + + Set this to FALSE to exclude shared libraries from the generated graphs. + + * Mandatory : NO + * Default : TRUE + +.. variable:: GRAPHVIZ_MODULE_LIBS + + Set this to FALSE to exclude module libraries from the generated graphs. + + * Mandatory : NO + * Default : TRUE + +.. variable:: GRAPHVIZ_EXTERNAL_LIBS + + Set this to FALSE to exclude external libraries from the generated graphs. + + * Mandatory : NO + * Default : TRUE + +.. variable:: GRAPHVIZ_IGNORE_TARGETS + + A list of regular expressions for ignoring targets. + + * Mandatory : NO + * Default : empty + +.. variable:: GRAPHVIZ_GENERATE_PER_TARGET + + Set this to FALSE to exclude per target graphs ``foo.dot.<target>``. + + * Mandatory : NO + * Default : TRUE + +.. variable:: GRAPHVIZ_GENERATE_DEPENDERS + + Set this to FALSE to exclude depender graphs ``foo.dot.<target>.dependers``. + + * Mandatory : NO + * Default : TRUE +#]=======================================================================] diff --git a/Modules/CMakeIOSInstallCombined.cmake b/Modules/CMakeIOSInstallCombined.cmake index fad2e8f..418bafd 100644 --- a/Modules/CMakeIOSInstallCombined.cmake +++ b/Modules/CMakeIOSInstallCombined.cmake @@ -1,6 +1,8 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. +cmake_policy(PUSH) +cmake_policy(SET CMP0057 NEW) # if IN_LIST # Function to print messages of this module function(_ios_install_combined_message) @@ -57,6 +59,7 @@ endfunction() # Get architectures of given SDK (iphonesimulator/iphoneos) function(_ios_install_combined_get_valid_archs sdk resultvar) + cmake_policy(PUSH) cmake_policy(SET CMP0007 NEW) if("${resultvar}" STREQUAL "") @@ -73,6 +76,8 @@ function(_ios_install_combined_get_valid_archs sdk resultvar) _ios_install_combined_message("Architectures (${sdk}): ${printable}") set("${resultvar}" "${valid_archs}" PARENT_SCOPE) + + cmake_policy(POP) endfunction() # Final target can contain more architectures that specified by SDK. This @@ -161,8 +166,6 @@ function(_ios_install_combined_keep_archs lib archs) endfunction() function(_ios_install_combined_detect_sdks this_sdk_var corr_sdk_var) - cmake_policy(SET CMP0057 NEW) - set(this_sdk "$ENV{PLATFORM_NAME}") if("${this_sdk}" STREQUAL "") message(FATAL_ERROR "Environment variable PLATFORM_NAME is empty") @@ -305,3 +308,5 @@ function(ios_install_combined target destination) _ios_install_combined_message("Install done: ${destination}") endfunction() + +cmake_policy(POP) diff --git a/Modules/CMakePackageConfigHelpers.cmake b/Modules/CMakePackageConfigHelpers.cmake index 790d408..bcc9bf8 100644 --- a/Modules/CMakePackageConfigHelpers.cmake +++ b/Modules/CMakePackageConfigHelpers.cmake @@ -1,209 +1,210 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakePackageConfigHelpers -# ------------------------- -# -# Helpers functions for creating config files that can be included by other -# projects to find and use a package. -# -# Adds the :command:`configure_package_config_file()` and -# :command:`write_basic_package_version_file()` commands. -# -# Generating a Package Configuration File -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# .. command:: configure_package_config_file -# -# Create a config file for a project:: -# -# configure_package_config_file(<input> <output> -# INSTALL_DESTINATION <path> -# [PATH_VARS <var1> <var2> ... <varN>] -# [NO_SET_AND_CHECK_MACRO] -# [NO_CHECK_REQUIRED_COMPONENTS_MACRO] -# [INSTALL_PREFIX <path>] -# ) -# -# ``configure_package_config_file()`` should be used instead of the plain -# :command:`configure_file()` command when creating the ``<Name>Config.cmake`` -# or ``<Name>-config.cmake`` file for installing a project or library. It helps -# making the resulting package relocatable by avoiding hardcoded paths in the -# installed ``Config.cmake`` file. -# -# In a ``FooConfig.cmake`` file there may be code like this to make the install -# destinations know to the using project: -# -# .. code-block:: cmake -# -# set(FOO_INCLUDE_DIR "@CMAKE_INSTALL_FULL_INCLUDEDIR@" ) -# set(FOO_DATA_DIR "@CMAKE_INSTALL_PREFIX@/@RELATIVE_DATA_INSTALL_DIR@" ) -# set(FOO_ICONS_DIR "@CMAKE_INSTALL_PREFIX@/share/icons" ) -# #...logic to determine installedPrefix from the own location... -# set(FOO_CONFIG_DIR "${installedPrefix}/@CONFIG_INSTALL_DIR@" ) -# -# All 4 options shown above are not sufficient, since the first 3 hardcode the -# absolute directory locations, and the 4th case works only if the logic to -# determine the ``installedPrefix`` is correct, and if ``CONFIG_INSTALL_DIR`` -# contains a relative path, which in general cannot be guaranteed. This has the -# effect that the resulting ``FooConfig.cmake`` file would work poorly under -# Windows and OSX, where users are used to choose the install location of a -# binary package at install time, independent from how -# :variable:`CMAKE_INSTALL_PREFIX` was set at build/cmake time. -# -# Using ``configure_package_config_file`` helps. If used correctly, it makes -# the resulting ``FooConfig.cmake`` file relocatable. Usage: -# -# 1. write a ``FooConfig.cmake.in`` file as you are used to -# 2. insert a line containing only the string ``@PACKAGE_INIT@`` -# 3. instead of ``set(FOO_DIR "@SOME_INSTALL_DIR@")``, use -# ``set(FOO_DIR "@PACKAGE_SOME_INSTALL_DIR@")`` (this must be after the -# ``@PACKAGE_INIT@`` line) -# 4. instead of using the normal :command:`configure_file()`, use -# ``configure_package_config_file()`` -# -# -# -# The ``<input>`` and ``<output>`` arguments are the input and output file, the -# same way as in :command:`configure_file()`. -# -# The ``<path>`` given to ``INSTALL_DESTINATION`` must be the destination where -# the ``FooConfig.cmake`` file will be installed to. This path can either be -# absolute, or relative to the ``INSTALL_PREFIX`` path. -# -# The variables ``<var1>`` to ``<varN>`` given as ``PATH_VARS`` are the -# variables which contain install destinations. For each of them the macro will -# create a helper variable ``PACKAGE_<var...>``. These helper variables must be -# used in the ``FooConfig.cmake.in`` file for setting the installed location. -# They are calculated by ``configure_package_config_file`` so that they are -# always relative to the installed location of the package. This works both for -# relative and also for absolute locations. For absolute locations it works -# only if the absolute location is a subdirectory of ``INSTALL_PREFIX``. -# -# If the ``INSTALL_PREFIX`` argument is passed, this is used as base path to -# calculate all the relative paths. The ``<path>`` argument must be an absolute -# path. If this argument is not passed, the :variable:`CMAKE_INSTALL_PREFIX` -# variable will be used instead. The default value is good when generating a -# FooConfig.cmake file to use your package from the install tree. When -# generating a FooConfig.cmake file to use your package from the build tree this -# option should be used. -# -# By default ``configure_package_config_file`` also generates two helper macros, -# ``set_and_check()`` and ``check_required_components()`` into the -# ``FooConfig.cmake`` file. -# -# ``set_and_check()`` should be used instead of the normal ``set()`` command for -# setting directories and file locations. Additionally to setting the variable -# it also checks that the referenced file or directory actually exists and fails -# with a ``FATAL_ERROR`` otherwise. This makes sure that the created -# ``FooConfig.cmake`` file does not contain wrong references. -# When using the ``NO_SET_AND_CHECK_MACRO``, this macro is not generated -# into the ``FooConfig.cmake`` file. -# -# ``check_required_components(<package_name>)`` should be called at the end of -# the ``FooConfig.cmake`` file. This macro checks whether all requested, -# non-optional components have been found, and if this is not the case, sets -# the ``Foo_FOUND`` variable to ``FALSE``, so that the package is considered to -# be not found. It does that by testing the ``Foo_<Component>_FOUND`` -# variables for all requested required components. This macro should be -# called even if the package doesn't provide any components to make sure -# users are not specifying components erroneously. When using the -# ``NO_CHECK_REQUIRED_COMPONENTS_MACRO`` option, this macro is not generated -# into the ``FooConfig.cmake`` file. -# -# For an example see below the documentation for -# :command:`write_basic_package_version_file()`. -# -# Generating a Package Version File -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# .. command:: write_basic_package_version_file -# -# Create a version file for a project:: -# -# write_basic_package_version_file(<filename> -# [VERSION <major.minor.patch>] -# COMPATIBILITY <AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion> ) -# -# -# Writes a file for use as ``<package>ConfigVersion.cmake`` file to -# ``<filename>``. See the documentation of :command:`find_package()` for -# details on this. -# -# ``<filename>`` is the output filename, it should be in the build tree. -# ``<major.minor.patch>`` is the version number of the project to be installed. -# -# If no ``VERSION`` is given, the :variable:`PROJECT_VERSION` variable is used. -# If this hasn't been set, it errors out. -# -# The ``COMPATIBILITY`` mode ``AnyNewerVersion`` means that the installed -# package version will be considered compatible if it is newer or exactly the -# same as the requested version. This mode should be used for packages which -# are fully backward compatible, also across major versions. -# If ``SameMajorVersion`` is used instead, then the behaviour differs from -# ``AnyNewerVersion`` in that the major version number must be the same as -# requested, e.g. version 2.0 will not be considered compatible if 1.0 is -# requested. This mode should be used for packages which guarantee backward -# compatibility within the same major version. -# If ``SameMinorVersion`` is used, the behaviour is the same as -# ``SameMajorVersion``, but both major and minor version must be the same as -# requested, e.g version 0.2 will not be compatible if 0.1 is requested. -# If ``ExactVersion`` is used, then the package is only considered compatible if -# the requested version matches exactly its own version number (not considering -# the tweak version). For example, version 1.2.3 of a package is only -# considered compatible to requested version 1.2.3. This mode is for packages -# without compatibility guarantees. -# If your project has more elaborated version matching rules, you will need to -# write your own custom ``ConfigVersion.cmake`` file instead of using this -# macro. -# -# Internally, this macro executes :command:`configure_file()` to create the -# resulting version file. Depending on the ``COMPATIBILITY``, the corresponding -# ``BasicConfigVersion-<COMPATIBILITY>.cmake.in`` file is used. -# Please note that these files are internal to CMake and you should not call -# :command:`configure_file()` on them yourself, but they can be used as starting -# point to create more sophisticted custom ``ConfigVersion.cmake`` files. -# -# Example Generating Package Files -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# Example using both :command:`configure_package_config_file` and -# ``write_basic_package_version_file()``: -# -# ``CMakeLists.txt``: -# -# .. code-block:: cmake -# -# set(INCLUDE_INSTALL_DIR include/ ... CACHE ) -# set(LIB_INSTALL_DIR lib/ ... CACHE ) -# set(SYSCONFIG_INSTALL_DIR etc/foo/ ... CACHE ) -# #... -# include(CMakePackageConfigHelpers) -# configure_package_config_file(FooConfig.cmake.in -# ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake -# INSTALL_DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake -# PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR) -# write_basic_package_version_file( -# ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake -# VERSION 1.2.3 -# COMPATIBILITY SameMajorVersion ) -# install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake -# ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake -# DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake ) -# -# ``FooConfig.cmake.in``: -# -# :: -# -# set(FOO_VERSION x.y.z) -# ... -# @PACKAGE_INIT@ -# ... -# set_and_check(FOO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") -# set_and_check(FOO_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@") -# -# check_required_components(Foo) +#[=======================================================================[.rst: +CMakePackageConfigHelpers +------------------------- + +Helpers functions for creating config files that can be included by other +projects to find and use a package. + +Adds the :command:`configure_package_config_file()` and +:command:`write_basic_package_version_file()` commands. + +Generating a Package Configuration File +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. command:: configure_package_config_file + + Create a config file for a project:: + + configure_package_config_file(<input> <output> + INSTALL_DESTINATION <path> + [PATH_VARS <var1> <var2> ... <varN>] + [NO_SET_AND_CHECK_MACRO] + [NO_CHECK_REQUIRED_COMPONENTS_MACRO] + [INSTALL_PREFIX <path>] + ) + +``configure_package_config_file()`` should be used instead of the plain +:command:`configure_file()` command when creating the ``<PackageName>Config.cmake`` +or ``<PackageName>-config.cmake`` file for installing a project or library. +It helps making the resulting package relocatable by avoiding hardcoded paths +in the installed ``Config.cmake`` file. + +In a ``FooConfig.cmake`` file there may be code like this to make the install +destinations know to the using project: + +.. code-block:: cmake + + set(FOO_INCLUDE_DIR "@CMAKE_INSTALL_FULL_INCLUDEDIR@" ) + set(FOO_DATA_DIR "@CMAKE_INSTALL_PREFIX@/@RELATIVE_DATA_INSTALL_DIR@" ) + set(FOO_ICONS_DIR "@CMAKE_INSTALL_PREFIX@/share/icons" ) + #...logic to determine installedPrefix from the own location... + set(FOO_CONFIG_DIR "${installedPrefix}/@CONFIG_INSTALL_DIR@" ) + +All 4 options shown above are not sufficient, since the first 3 hardcode the +absolute directory locations, and the 4th case works only if the logic to +determine the ``installedPrefix`` is correct, and if ``CONFIG_INSTALL_DIR`` +contains a relative path, which in general cannot be guaranteed. This has the +effect that the resulting ``FooConfig.cmake`` file would work poorly under +Windows and OSX, where users are used to choose the install location of a +binary package at install time, independent from how +:variable:`CMAKE_INSTALL_PREFIX` was set at build/cmake time. + +Using ``configure_package_config_file`` helps. If used correctly, it makes +the resulting ``FooConfig.cmake`` file relocatable. Usage: + +1. write a ``FooConfig.cmake.in`` file as you are used to +2. insert a line containing only the string ``@PACKAGE_INIT@`` +3. instead of ``set(FOO_DIR "@SOME_INSTALL_DIR@")``, use + ``set(FOO_DIR "@PACKAGE_SOME_INSTALL_DIR@")`` (this must be after the + ``@PACKAGE_INIT@`` line) +4. instead of using the normal :command:`configure_file()`, use + ``configure_package_config_file()`` + + + +The ``<input>`` and ``<output>`` arguments are the input and output file, the +same way as in :command:`configure_file()`. + +The ``<path>`` given to ``INSTALL_DESTINATION`` must be the destination where +the ``FooConfig.cmake`` file will be installed to. This path can either be +absolute, or relative to the ``INSTALL_PREFIX`` path. + +The variables ``<var1>`` to ``<varN>`` given as ``PATH_VARS`` are the +variables which contain install destinations. For each of them the macro will +create a helper variable ``PACKAGE_<var...>``. These helper variables must be +used in the ``FooConfig.cmake.in`` file for setting the installed location. +They are calculated by ``configure_package_config_file`` so that they are +always relative to the installed location of the package. This works both for +relative and also for absolute locations. For absolute locations it works +only if the absolute location is a subdirectory of ``INSTALL_PREFIX``. + +If the ``INSTALL_PREFIX`` argument is passed, this is used as base path to +calculate all the relative paths. The ``<path>`` argument must be an absolute +path. If this argument is not passed, the :variable:`CMAKE_INSTALL_PREFIX` +variable will be used instead. The default value is good when generating a +FooConfig.cmake file to use your package from the install tree. When +generating a FooConfig.cmake file to use your package from the build tree this +option should be used. + +By default ``configure_package_config_file`` also generates two helper macros, +``set_and_check()`` and ``check_required_components()`` into the +``FooConfig.cmake`` file. + +``set_and_check()`` should be used instead of the normal ``set()`` command for +setting directories and file locations. Additionally to setting the variable +it also checks that the referenced file or directory actually exists and fails +with a ``FATAL_ERROR`` otherwise. This makes sure that the created +``FooConfig.cmake`` file does not contain wrong references. +When using the ``NO_SET_AND_CHECK_MACRO``, this macro is not generated +into the ``FooConfig.cmake`` file. + +``check_required_components(<PackageName>)`` should be called at the end of +the ``FooConfig.cmake`` file. This macro checks whether all requested, +non-optional components have been found, and if this is not the case, sets +the ``Foo_FOUND`` variable to ``FALSE``, so that the package is considered to +be not found. It does that by testing the ``Foo_<Component>_FOUND`` +variables for all requested required components. This macro should be +called even if the package doesn't provide any components to make sure +users are not specifying components erroneously. When using the +``NO_CHECK_REQUIRED_COMPONENTS_MACRO`` option, this macro is not generated +into the ``FooConfig.cmake`` file. + +For an example see below the documentation for +:command:`write_basic_package_version_file()`. + +Generating a Package Version File +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. command:: write_basic_package_version_file + + Create a version file for a project:: + + write_basic_package_version_file(<filename> + [VERSION <major.minor.patch>] + COMPATIBILITY <AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion> ) + + +Writes a file for use as ``<PackageName>ConfigVersion.cmake`` file to +``<filename>``. See the documentation of :command:`find_package()` for +details on this. + +``<filename>`` is the output filename, it should be in the build tree. +``<major.minor.patch>`` is the version number of the project to be installed. + +If no ``VERSION`` is given, the :variable:`PROJECT_VERSION` variable is used. +If this hasn't been set, it errors out. + +The ``COMPATIBILITY`` mode ``AnyNewerVersion`` means that the installed +package version will be considered compatible if it is newer or exactly the +same as the requested version. This mode should be used for packages which +are fully backward compatible, also across major versions. +If ``SameMajorVersion`` is used instead, then the behaviour differs from +``AnyNewerVersion`` in that the major version number must be the same as +requested, e.g. version 2.0 will not be considered compatible if 1.0 is +requested. This mode should be used for packages which guarantee backward +compatibility within the same major version. +If ``SameMinorVersion`` is used, the behaviour is the same as +``SameMajorVersion``, but both major and minor version must be the same as +requested, e.g version 0.2 will not be compatible if 0.1 is requested. +If ``ExactVersion`` is used, then the package is only considered compatible if +the requested version matches exactly its own version number (not considering +the tweak version). For example, version 1.2.3 of a package is only +considered compatible to requested version 1.2.3. This mode is for packages +without compatibility guarantees. +If your project has more elaborated version matching rules, you will need to +write your own custom ``ConfigVersion.cmake`` file instead of using this +macro. + +Internally, this macro executes :command:`configure_file()` to create the +resulting version file. Depending on the ``COMPATIBILITY``, the corresponding +``BasicConfigVersion-<COMPATIBILITY>.cmake.in`` file is used. +Please note that these files are internal to CMake and you should not call +:command:`configure_file()` on them yourself, but they can be used as starting +point to create more sophisticted custom ``ConfigVersion.cmake`` files. + +Example Generating Package Files +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Example using both :command:`configure_package_config_file` and +``write_basic_package_version_file()``: + +``CMakeLists.txt``: + +.. code-block:: cmake + + set(INCLUDE_INSTALL_DIR include/ ... CACHE ) + set(LIB_INSTALL_DIR lib/ ... CACHE ) + set(SYSCONFIG_INSTALL_DIR etc/foo/ ... CACHE ) + #... + include(CMakePackageConfigHelpers) + configure_package_config_file(FooConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake + INSTALL_DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake + PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR) + write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake + VERSION 1.2.3 + COMPATIBILITY SameMajorVersion ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake + DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake ) + +``FooConfig.cmake.in``: + +:: + + set(FOO_VERSION x.y.z) + ... + @PACKAGE_INIT@ + ... + set_and_check(FOO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") + set_and_check(FOO_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@") + + check_required_components(Foo) +#]=======================================================================] include(WriteBasicConfigVersionFile) diff --git a/Modules/CMakeParseArguments.cmake b/Modules/CMakeParseArguments.cmake index 7ee2bba..c753b7f 100644 --- a/Modules/CMakeParseArguments.cmake +++ b/Modules/CMakeParseArguments.cmake @@ -1,11 +1,12 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakeParseArguments -# ------------------- -# -# This module once implemented the :command:`cmake_parse_arguments` command -# that is now implemented natively by CMake. It is now an empty placeholder -# for compatibility with projects that include it to get the command from -# CMake 3.4 and lower. +#[=======================================================================[.rst: +CMakeParseArguments +------------------- + +This module once implemented the :command:`cmake_parse_arguments` command +that is now implemented natively by CMake. It is now an empty placeholder +for compatibility with projects that include it to get the command from +CMake 3.4 and lower. +#]=======================================================================] diff --git a/Modules/CMakeParseImplicitLinkInfo.cmake b/Modules/CMakeParseImplicitLinkInfo.cmake index 935f92d..30659eb 100644 --- a/Modules/CMakeParseImplicitLinkInfo.cmake +++ b/Modules/CMakeParseImplicitLinkInfo.cmake @@ -1,6 +1,9 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. +cmake_policy(PUSH) +cmake_policy(SET CMP0053 NEW) +cmake_policy(SET CMP0054 NEW) # Function parse implicit linker options. # This is used internally by CMake and should not be included by user @@ -185,3 +188,5 @@ function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var fwk_var log_var obj set(${fwk_var} "${implicit_fwks}" PARENT_SCOPE) set(${log_var} "${log}" PARENT_SCOPE) endfunction() + +cmake_policy(POP) diff --git a/Modules/CMakePrintHelpers.cmake b/Modules/CMakePrintHelpers.cmake index 21c333e..d5bbb4f 100644 --- a/Modules/CMakePrintHelpers.cmake +++ b/Modules/CMakePrintHelpers.cmake @@ -1,43 +1,44 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakePrintHelpers -# ----------------- -# -# Convenience macros for printing properties and variables, useful e.g. for debugging. -# -# :: -# -# CMAKE_PRINT_PROPERTIES([TARGETS target1 .. targetN] -# [SOURCES source1 .. sourceN] -# [DIRECTORIES dir1 .. dirN] -# [TESTS test1 .. testN] -# [CACHE_ENTRIES entry1 .. entryN] -# PROPERTIES prop1 .. propN ) -# -# This macro prints the values of the properties of the given targets, -# source files, directories, tests or cache entries. Exactly one of the -# scope keywords must be used. Example:: -# -# cmake_print_properties(TARGETS foo bar PROPERTIES -# LOCATION INTERFACE_INCLUDE_DIRS) -# -# This will print the LOCATION and INTERFACE_INCLUDE_DIRS properties for -# both targets foo and bar. -# -# -# -# CMAKE_PRINT_VARIABLES(var1 var2 .. varN) -# -# This macro will print the name of each variable followed by its value. -# Example:: -# -# cmake_print_variables(CMAKE_C_COMPILER CMAKE_MAJOR_VERSION DOES_NOT_EXIST) -# -# Gives:: -# -# -- CMAKE_C_COMPILER="/usr/bin/gcc" ; CMAKE_MAJOR_VERSION="2" ; DOES_NOT_EXIST="" +#[=======================================================================[.rst: +CMakePrintHelpers +----------------- + +Convenience macros for printing properties and variables, useful e.g. for debugging. + +:: + + CMAKE_PRINT_PROPERTIES([TARGETS target1 .. targetN] + [SOURCES source1 .. sourceN] + [DIRECTORIES dir1 .. dirN] + [TESTS test1 .. testN] + [CACHE_ENTRIES entry1 .. entryN] + PROPERTIES prop1 .. propN ) + +This macro prints the values of the properties of the given targets, +source files, directories, tests or cache entries. Exactly one of the +scope keywords must be used. Example:: + + cmake_print_properties(TARGETS foo bar PROPERTIES + LOCATION INTERFACE_INCLUDE_DIRS) + +This will print the LOCATION and INTERFACE_INCLUDE_DIRS properties for +both targets foo and bar. + + + +CMAKE_PRINT_VARIABLES(var1 var2 .. varN) + +This macro will print the name of each variable followed by its value. +Example:: + + cmake_print_variables(CMAKE_C_COMPILER CMAKE_MAJOR_VERSION DOES_NOT_EXIST) + +Gives:: + + -- CMAKE_C_COMPILER="/usr/bin/gcc" ; CMAKE_MAJOR_VERSION="2" ; DOES_NOT_EXIST="" +#]=======================================================================] function(CMAKE_PRINT_VARIABLES) set(msg "") diff --git a/Modules/CMakePrintSystemInformation.cmake b/Modules/CMakePrintSystemInformation.cmake index e74c801..f873a4d 100644 --- a/Modules/CMakePrintSystemInformation.cmake +++ b/Modules/CMakePrintSystemInformation.cmake @@ -1,14 +1,15 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakePrintSystemInformation -# --------------------------- -# -# print system information -# -# This file can be used for diagnostic purposes just include it in a -# project to see various internal CMake variables. +#[=======================================================================[.rst: +CMakePrintSystemInformation +--------------------------- + +print system information + +This file can be used for diagnostic purposes just include it in a +project to see various internal CMake variables. +#]=======================================================================] message("CMAKE_SYSTEM is ${CMAKE_SYSTEM} ${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION}") message("CMAKE_SYSTEM file is ${CMAKE_SYSTEM_INFO_FILE}") diff --git a/Modules/CMakePushCheckState.cmake b/Modules/CMakePushCheckState.cmake index 98eea05..7628d1a 100644 --- a/Modules/CMakePushCheckState.cmake +++ b/Modules/CMakePushCheckState.cmake @@ -1,40 +1,41 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakePushCheckState -# ------------------- -# -# -# -# This module defines three macros: CMAKE_PUSH_CHECK_STATE() -# CMAKE_POP_CHECK_STATE() and CMAKE_RESET_CHECK_STATE() These macros can -# be used to save, restore and reset (i.e., clear contents) the state of -# the variables CMAKE_REQUIRED_FLAGS, CMAKE_REQUIRED_DEFINITIONS, -# CMAKE_REQUIRED_LIBRARIES, CMAKE_REQUIRED_INCLUDES and CMAKE_EXTRA_INCLUDE_FILES -# used by the various Check-files coming with CMake, like e.g. -# check_function_exists() etc. The variable contents are pushed on a -# stack, pushing multiple times is supported. This is useful e.g. when -# executing such tests in a Find-module, where they have to be set, but -# after the Find-module has been executed they should have the same -# value as they had before. -# -# CMAKE_PUSH_CHECK_STATE() macro receives optional argument RESET. -# Whether it's specified, CMAKE_PUSH_CHECK_STATE() will set all -# CMAKE_REQUIRED_* variables to empty values, same as -# CMAKE_RESET_CHECK_STATE() call will do. -# -# Usage: -# -# :: -# -# cmake_push_check_state(RESET) -# set(CMAKE_REQUIRED_DEFINITIONS -DSOME_MORE_DEF) -# check_function_exists(...) -# cmake_reset_check_state() -# set(CMAKE_REQUIRED_DEFINITIONS -DANOTHER_DEF) -# check_function_exists(...) -# cmake_pop_check_state() +#[=======================================================================[.rst: +CMakePushCheckState +------------------- + + + +This module defines three macros: CMAKE_PUSH_CHECK_STATE() +CMAKE_POP_CHECK_STATE() and CMAKE_RESET_CHECK_STATE() These macros can +be used to save, restore and reset (i.e., clear contents) the state of +the variables CMAKE_REQUIRED_FLAGS, CMAKE_REQUIRED_DEFINITIONS, +CMAKE_REQUIRED_LIBRARIES, CMAKE_REQUIRED_INCLUDES and CMAKE_EXTRA_INCLUDE_FILES +used by the various Check-files coming with CMake, like e.g. +check_function_exists() etc. The variable contents are pushed on a +stack, pushing multiple times is supported. This is useful e.g. when +executing such tests in a Find-module, where they have to be set, but +after the Find-module has been executed they should have the same +value as they had before. + +CMAKE_PUSH_CHECK_STATE() macro receives optional argument RESET. +Whether it's specified, CMAKE_PUSH_CHECK_STATE() will set all +CMAKE_REQUIRED_* variables to empty values, same as +CMAKE_RESET_CHECK_STATE() call will do. + +Usage: + +:: + + cmake_push_check_state(RESET) + set(CMAKE_REQUIRED_DEFINITIONS -DSOME_MORE_DEF) + check_function_exists(...) + cmake_reset_check_state() + set(CMAKE_REQUIRED_DEFINITIONS -DANOTHER_DEF) + check_function_exists(...) + cmake_pop_check_state() +#]=======================================================================] macro(CMAKE_RESET_CHECK_STATE) diff --git a/Modules/CMakeVerifyManifest.cmake b/Modules/CMakeVerifyManifest.cmake index c477ab1..705ef8a 100644 --- a/Modules/CMakeVerifyManifest.cmake +++ b/Modules/CMakeVerifyManifest.cmake @@ -1,22 +1,23 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CMakeVerifyManifest -# ------------------- -# -# -# -# CMakeVerifyManifest.cmake -# -# This script is used to verify that embedded manifests and side by side -# manifests for a project match. To run this script, cd to a directory -# and run the script with cmake -P. On the command line you can pass in -# versions that are OK even if not found in the .manifest files. For -# example, cmake -Dallow_versions=8.0.50608.0 -# -PCmakeVerifyManifest.cmake could be used to allow an embedded manifest -# of 8.0.50608.0 to be used in a project even if that version was not -# found in the .manifest file. +#[=======================================================================[.rst: +CMakeVerifyManifest +------------------- + + + +CMakeVerifyManifest.cmake + +This script is used to verify that embedded manifests and side by side +manifests for a project match. To run this script, cd to a directory +and run the script with cmake -P. On the command line you can pass in +versions that are OK even if not found in the .manifest files. For +example, cmake -Dallow_versions=8.0.50608.0 +-PCmakeVerifyManifest.cmake could be used to allow an embedded manifest +of 8.0.50608.0 to be used in a project even if that version was not +found in the .manifest file. +#]=======================================================================] # This script first recursively globs *.manifest files from # the current directory. Then globs *.exe and *.dll. Each diff --git a/Modules/CPack.cmake b/Modules/CPack.cmake index cdc38a6..f3e3423 100644 --- a/Modules/CPack.cmake +++ b/Modules/CPack.cmake @@ -19,7 +19,7 @@ command (and the deprecated :command:`install_files`, :command:`install_programs` and :command:`install_targets` commands). For certain kinds of binary installers (including the graphical -installers on Mac OS X and Windows), CPack generates installers that +installers on macOS and Windows), CPack generates installers that allow users to select individual application components to install. See :module:`CPackComponent` module for further details. diff --git a/Modules/CPackArchive.cmake b/Modules/CPackArchive.cmake deleted file mode 100644 index 741fb1f..0000000 --- a/Modules/CPackArchive.cmake +++ /dev/null @@ -1,39 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# CPackArchive -# ------------ -# -# Archive CPack generator that supports packaging of sources and binaries in -# different formats: -# -# - 7Z - 7zip - (.7z) -# - TBZ2 (.tar.bz2) -# - TGZ (.tar.gz) -# - TXZ (.tar.xz) -# - TZ (.tar.Z) -# - ZIP (.zip) -# -# Variables specific to CPack Archive generator -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# .. variable:: CPACK_ARCHIVE_FILE_NAME -# CPACK_ARCHIVE_<component>_FILE_NAME -# -# Package file name without extension which is added automatically depending -# on the archive format. -# -# * Mandatory : YES -# * Default : ``<CPACK_PACKAGE_FILE_NAME>[-<component>].<extension>`` with -# spaces replaced by '-' -# -# .. variable:: CPACK_ARCHIVE_COMPONENT_INSTALL -# -# Enable component packaging for CPackArchive -# -# * Mandatory : NO -# * Default : OFF -# -# If enabled (ON) multiple packages are generated. By default a single package -# containing files of all components is generated. diff --git a/Modules/CPackBundle.cmake b/Modules/CPackBundle.cmake deleted file mode 100644 index 8f37ef8..0000000 --- a/Modules/CPackBundle.cmake +++ /dev/null @@ -1,70 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# CPackBundle -# ----------- -# -# CPack Bundle generator (Mac OS X) specific options -# -# Variables specific to CPack Bundle generator -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# Installers built on Mac OS X using the Bundle generator use the -# aforementioned DragNDrop (CPACK_DMG_xxx) variables, plus the following -# Bundle-specific parameters (CPACK_BUNDLE_xxx). -# -# .. variable:: CPACK_BUNDLE_NAME -# -# The name of the generated bundle. This appears in the OSX finder as the -# bundle name. Required. -# -# .. variable:: CPACK_BUNDLE_PLIST -# -# Path to an OSX plist file that will be used for the generated bundle. This -# assumes that the caller has generated or specified their own Info.plist -# file. Required. -# -# .. variable:: CPACK_BUNDLE_ICON -# -# Path to an OSX icon file that will be used as the icon for the generated -# bundle. This is the icon that appears in the OSX finder for the bundle, and -# in the OSX dock when the bundle is opened. Required. -# -# .. variable:: CPACK_BUNDLE_STARTUP_COMMAND -# -# Path to a startup script. This is a path to an executable or script that -# will be run whenever an end-user double-clicks the generated bundle in the -# OSX Finder. Optional. -# -# .. variable:: CPACK_BUNDLE_APPLE_CERT_APP -# -# The name of your Apple supplied code signing certificate for the application. -# The name usually takes the form "Developer ID Application: [Name]" or -# "3rd Party Mac Developer Application: [Name]". If this variable is not set -# the application will not be signed. -# -# .. variable:: CPACK_BUNDLE_APPLE_ENTITLEMENTS -# -# The name of the plist file that contains your apple entitlements for sandboxing -# your application. This file is required for submission to the Mac App Store. -# -# .. variable:: CPACK_BUNDLE_APPLE_CODESIGN_FILES -# -# A list of additional files that you wish to be signed. You do not need to -# list the main application folder, or the main executable. You should -# list any frameworks and plugins that are included in your app bundle. -# -# .. variable:: CPACK_BUNDLE_APPLE_CODESIGN_PARAMETER -# -# Additional parameter that will passed to codesign. -# Default value: "--deep -f" -# -# .. variable:: CPACK_COMMAND_CODESIGN -# -# Path to the codesign(1) command used to sign applications with an -# Apple cert. This variable can be used to override the automatically -# detected command (or specify its location if the auto-detection fails -# to find it.) - -#Bundle Generator specific code should be put here diff --git a/Modules/CPackComponent.cmake b/Modules/CPackComponent.cmake index 6c122e5..211d767 100644 --- a/Modules/CPackComponent.cmake +++ b/Modules/CPackComponent.cmake @@ -1,313 +1,314 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CPackComponent -# -------------- -# -# Build binary and source package installers -# -# Variables concerning CPack Components -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# The CPackComponent module is the module which handles the component -# part of CPack. See CPack module for general information about CPack. -# -# For certain kinds of binary installers (including the graphical -# installers on Mac OS X and Windows), CPack generates installers that -# allow users to select individual application components to install. -# The contents of each of the components are identified by the COMPONENT -# argument of CMake's INSTALL command. These components can be -# annotated with user-friendly names and descriptions, inter-component -# dependencies, etc., and grouped in various ways to customize the -# resulting installer. See the cpack_add_* commands, described below, -# for more information about component-specific installations. -# -# Component-specific installation allows users to select specific sets -# of components to install during the install process. Installation -# components are identified by the COMPONENT argument of CMake's INSTALL -# commands, and should be further described by the following CPack -# commands: -# -# .. variable:: CPACK_COMPONENTS_ALL -# -# The list of component to install. -# -# The default value of this variable is computed by CPack and contains all -# components defined by the project. The user may set it to only include the -# specified components. -# -# Instead of specifying all the desired components, it is possible to obtain a -# list of all defined components and then remove the unwanted ones from the -# list. The :command:`get_cmake_property` command can be used to obtain the -# ``COMPONENTS`` property, then the :command:`list(REMOVE_ITEM)` command can be -# used to remove the unwanted ones. For example, to use all defined components -# except ``foo`` and ``bar``:: -# -# get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS) -# list(REMOVE_ITEM CPACK_COMPONENTS_ALL "foo" "bar") -# -# .. variable:: CPACK_<GENNAME>_COMPONENT_INSTALL -# -# Enable/Disable component install for CPack generator <GENNAME>. -# -# Each CPack Generator (RPM, DEB, ARCHIVE, NSIS, DMG, etc...) has a legacy -# default behavior. e.g. RPM builds monolithic whereas NSIS builds -# component. One can change the default behavior by setting this variable to -# 0/1 or OFF/ON. -# -# .. variable:: CPACK_COMPONENTS_GROUPING -# -# Specify how components are grouped for multi-package component-aware CPack -# generators. -# -# Some generators like RPM or ARCHIVE family (TGZ, ZIP, ...) generates -# several packages files when asked for component packaging. They group -# the component differently depending on the value of this variable: -# -# * ONE_PER_GROUP (default): creates one package file per component group -# * ALL_COMPONENTS_IN_ONE : creates a single package with all (requested) components -# * IGNORE : creates one package per component, i.e. IGNORE component group -# -# One can specify different grouping for different CPack generator by -# using a CPACK_PROJECT_CONFIG_FILE. -# -# .. variable:: CPACK_COMPONENT_<compName>_DISPLAY_NAME -# -# The name to be displayed for a component. -# -# .. variable:: CPACK_COMPONENT_<compName>_DESCRIPTION -# -# The description of a component. -# -# .. variable:: CPACK_COMPONENT_<compName>_GROUP -# -# The group of a component. -# -# .. variable:: CPACK_COMPONENT_<compName>_DEPENDS -# -# The dependencies (list of components) on which this component depends. -# -# .. variable:: CPACK_COMPONENT_<compName>_HIDDEN -# -# True if this component is hidden from the user. -# -# .. variable:: CPACK_COMPONENT_<compName>_REQUIRED -# -# True if this component is required. -# -# .. variable:: CPACK_COMPONENT_<compName>_DISABLED -# -# True if this component is not selected to be installed by default. -# -# .. command:: cpack_add_component -# -# Describes a CPack installation -# component named by the COMPONENT argument to a CMake INSTALL command. -# -# :: -# -# cpack_add_component(compname -# [DISPLAY_NAME name] -# [DESCRIPTION description] -# [HIDDEN | REQUIRED | DISABLED ] -# [GROUP group] -# [DEPENDS comp1 comp2 ... ] -# [INSTALL_TYPES type1 type2 ... ] -# [DOWNLOADED] -# [ARCHIVE_FILE filename] -# [PLIST filename]) -# -# -# -# The cmake_add_component command describes an installation component, -# which the user can opt to install or remove as part of the graphical -# installation process. compname is the name of the component, as -# provided to the COMPONENT argument of one or more CMake INSTALL -# commands. -# -# DISPLAY_NAME is the displayed name of the component, used in graphical -# installers to display the component name. This value can be any -# string. -# -# DESCRIPTION is an extended description of the component, used in -# graphical installers to give the user additional information about the -# component. Descriptions can span multiple lines using ``\n`` as the -# line separator. Typically, these descriptions should be no more than -# a few lines long. -# -# HIDDEN indicates that this component will be hidden in the graphical -# installer, so that the user cannot directly change whether it is -# installed or not. -# -# REQUIRED indicates that this component is required, and therefore will -# always be installed. It will be visible in the graphical installer, -# but it cannot be unselected. (Typically, required components are -# shown greyed out). -# -# DISABLED indicates that this component should be disabled (unselected) -# by default. The user is free to select this component for -# installation, unless it is also HIDDEN. -# -# DEPENDS lists the components on which this component depends. If this -# component is selected, then each of the components listed must also be -# selected. The dependency information is encoded within the installer -# itself, so that users cannot install inconsistent sets of components. -# -# GROUP names the component group of which this component is a part. If -# not provided, the component will be a standalone component, not part -# of any component group. Component groups are described with the -# cpack_add_component_group command, detailed below. -# -# INSTALL_TYPES lists the installation types of which this component is -# a part. When one of these installations types is selected, this -# component will automatically be selected. Installation types are -# described with the cpack_add_install_type command, detailed below. -# -# DOWNLOADED indicates that this component should be downloaded -# on-the-fly by the installer, rather than packaged in with the -# installer itself. For more information, see the -# cpack_configure_downloads command. -# -# ARCHIVE_FILE provides a name for the archive file created by CPack to -# be used for downloaded components. If not supplied, CPack will create -# a file with some name based on CPACK_PACKAGE_FILE_NAME and the name of -# the component. See cpack_configure_downloads for more information. -# -# PLIST gives a filename that is passed to pkgbuild with the -# ``--component-plist`` argument when using the productbuild generator. -# -# .. command:: cpack_add_component_group -# -# Describes a group of related CPack installation components. -# -# :: -# -# cpack_add_component_group(groupname -# [DISPLAY_NAME name] -# [DESCRIPTION description] -# [PARENT_GROUP parent] -# [EXPANDED] -# [BOLD_TITLE]) -# -# -# -# The cpack_add_component_group describes a group of installation -# components, which will be placed together within the listing of -# options. Typically, component groups allow the user to -# select/deselect all of the components within a single group via a -# single group-level option. Use component groups to reduce the -# complexity of installers with many options. groupname is an arbitrary -# name used to identify the group in the GROUP argument of the -# cpack_add_component command, which is used to place a component in a -# group. The name of the group must not conflict with the name of any -# component. -# -# DISPLAY_NAME is the displayed name of the component group, used in -# graphical installers to display the component group name. This value -# can be any string. -# -# DESCRIPTION is an extended description of the component group, used in -# graphical installers to give the user additional information about the -# components within that group. Descriptions can span multiple lines -# using ``\n`` as the line separator. Typically, these descriptions -# should be no more than a few lines long. -# -# PARENT_GROUP, if supplied, names the parent group of this group. -# Parent groups are used to establish a hierarchy of groups, providing -# an arbitrary hierarchy of groups. -# -# EXPANDED indicates that, by default, the group should show up as -# "expanded", so that the user immediately sees all of the components -# within the group. Otherwise, the group will initially show up as a -# single entry. -# -# BOLD_TITLE indicates that the group title should appear in bold, to -# call the user's attention to the group. -# -# .. command:: cpack_add_install_type -# -# Add a new installation type containing -# a set of predefined component selections to the graphical installer. -# -# :: -# -# cpack_add_install_type(typename -# [DISPLAY_NAME name]) -# -# -# -# The cpack_add_install_type command identifies a set of preselected -# components that represents a common use case for an application. For -# example, a "Developer" install type might include an application along -# with its header and library files, while an "End user" install type -# might just include the application's executable. Each component -# identifies itself with one or more install types via the INSTALL_TYPES -# argument to cpack_add_component. -# -# DISPLAY_NAME is the displayed name of the install type, which will -# typically show up in a drop-down box within a graphical installer. -# This value can be any string. -# -# .. command:: cpack_configure_downloads -# -# Configure CPack to download -# selected components on-the-fly as part of the installation process. -# -# :: -# -# cpack_configure_downloads(site -# [UPLOAD_DIRECTORY dirname] -# [ALL] -# [ADD_REMOVE|NO_ADD_REMOVE]) -# -# -# -# The cpack_configure_downloads command configures installation-time -# downloads of selected components. For each downloadable component, -# CPack will create an archive containing the contents of that -# component, which should be uploaded to the given site. When the user -# selects that component for installation, the installer will download -# and extract the component in place. This feature is useful for -# creating small installers that only download the requested components, -# saving bandwidth. Additionally, the installers are small enough that -# they will be installed as part of the normal installation process, and -# the "Change" button in Windows Add/Remove Programs control panel will -# allow one to add or remove parts of the application after the original -# installation. On Windows, the downloaded-components functionality -# requires the ZipDLL plug-in for NSIS, available at: -# -# :: -# -# http://nsis.sourceforge.net/ZipDLL_plug-in -# -# -# -# On Mac OS X, installers that download components on-the-fly can only -# be built and installed on system using Mac OS X 10.5 or later. -# -# The site argument is a URL where the archives for downloadable -# components will reside, e.g., -# https://cmake.org/files/2.6.1/installer/ All of the archives -# produced by CPack should be uploaded to that location. -# -# UPLOAD_DIRECTORY is the local directory where CPack will create the -# various archives for each of the components. The contents of this -# directory should be uploaded to a location accessible by the URL given -# in the site argument. If omitted, CPack will use the directory -# CPackUploads inside the CMake binary directory to store the generated -# archives. -# -# The ALL flag indicates that all components be downloaded. Otherwise, -# only those components explicitly marked as DOWNLOADED or that have a -# specified ARCHIVE_FILE will be downloaded. Additionally, the ALL -# option implies ADD_REMOVE (unless NO_ADD_REMOVE is specified). -# -# ADD_REMOVE indicates that CPack should install a copy of the installer -# that can be called from Windows' Add/Remove Programs dialog (via the -# "Modify" button) to change the set of installed components. -# NO_ADD_REMOVE turns off this behavior. This option is ignored on Mac -# OS X. +#[=======================================================================[.rst: +CPackComponent +-------------- + +Build binary and source package installers + +Variables concerning CPack Components +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The CPackComponent module is the module which handles the component +part of CPack. See CPack module for general information about CPack. + +For certain kinds of binary installers (including the graphical +installers on macOS and Windows), CPack generates installers that +allow users to select individual application components to install. +The contents of each of the components are identified by the COMPONENT +argument of CMake's INSTALL command. These components can be +annotated with user-friendly names and descriptions, inter-component +dependencies, etc., and grouped in various ways to customize the +resulting installer. See the cpack_add_* commands, described below, +for more information about component-specific installations. + +Component-specific installation allows users to select specific sets +of components to install during the install process. Installation +components are identified by the COMPONENT argument of CMake's INSTALL +commands, and should be further described by the following CPack +commands: + +.. variable:: CPACK_COMPONENTS_ALL + + The list of component to install. + + The default value of this variable is computed by CPack and contains all + components defined by the project. The user may set it to only include the + specified components. + + Instead of specifying all the desired components, it is possible to obtain a + list of all defined components and then remove the unwanted ones from the + list. The :command:`get_cmake_property` command can be used to obtain the + ``COMPONENTS`` property, then the :command:`list(REMOVE_ITEM)` command can be + used to remove the unwanted ones. For example, to use all defined components + except ``foo`` and ``bar``:: + + get_cmake_property(CPACK_COMPONENTS_ALL COMPONENTS) + list(REMOVE_ITEM CPACK_COMPONENTS_ALL "foo" "bar") + +.. variable:: CPACK_<GENNAME>_COMPONENT_INSTALL + + Enable/Disable component install for CPack generator <GENNAME>. + + Each CPack Generator (RPM, DEB, ARCHIVE, NSIS, DMG, etc...) has a legacy + default behavior. e.g. RPM builds monolithic whereas NSIS builds + component. One can change the default behavior by setting this variable to + 0/1 or OFF/ON. + +.. variable:: CPACK_COMPONENTS_GROUPING + + Specify how components are grouped for multi-package component-aware CPack + generators. + + Some generators like RPM or ARCHIVE family (TGZ, ZIP, ...) generates + several packages files when asked for component packaging. They group + the component differently depending on the value of this variable: + + * ONE_PER_GROUP (default): creates one package file per component group + * ALL_COMPONENTS_IN_ONE : creates a single package with all (requested) components + * IGNORE : creates one package per component, i.e. IGNORE component group + + One can specify different grouping for different CPack generator by + using a CPACK_PROJECT_CONFIG_FILE. + +.. variable:: CPACK_COMPONENT_<compName>_DISPLAY_NAME + + The name to be displayed for a component. + +.. variable:: CPACK_COMPONENT_<compName>_DESCRIPTION + + The description of a component. + +.. variable:: CPACK_COMPONENT_<compName>_GROUP + + The group of a component. + +.. variable:: CPACK_COMPONENT_<compName>_DEPENDS + + The dependencies (list of components) on which this component depends. + +.. variable:: CPACK_COMPONENT_<compName>_HIDDEN + + True if this component is hidden from the user. + +.. variable:: CPACK_COMPONENT_<compName>_REQUIRED + + True if this component is required. + +.. variable:: CPACK_COMPONENT_<compName>_DISABLED + + True if this component is not selected to be installed by default. + +.. command:: cpack_add_component + +Describes a CPack installation +component named by the COMPONENT argument to a CMake INSTALL command. + +:: + + cpack_add_component(compname + [DISPLAY_NAME name] + [DESCRIPTION description] + [HIDDEN | REQUIRED | DISABLED ] + [GROUP group] + [DEPENDS comp1 comp2 ... ] + [INSTALL_TYPES type1 type2 ... ] + [DOWNLOADED] + [ARCHIVE_FILE filename] + [PLIST filename]) + + + +The cmake_add_component command describes an installation component, +which the user can opt to install or remove as part of the graphical +installation process. compname is the name of the component, as +provided to the COMPONENT argument of one or more CMake INSTALL +commands. + +DISPLAY_NAME is the displayed name of the component, used in graphical +installers to display the component name. This value can be any +string. + +DESCRIPTION is an extended description of the component, used in +graphical installers to give the user additional information about the +component. Descriptions can span multiple lines using ``\n`` as the +line separator. Typically, these descriptions should be no more than +a few lines long. + +HIDDEN indicates that this component will be hidden in the graphical +installer, so that the user cannot directly change whether it is +installed or not. + +REQUIRED indicates that this component is required, and therefore will +always be installed. It will be visible in the graphical installer, +but it cannot be unselected. (Typically, required components are +shown greyed out). + +DISABLED indicates that this component should be disabled (unselected) +by default. The user is free to select this component for +installation, unless it is also HIDDEN. + +DEPENDS lists the components on which this component depends. If this +component is selected, then each of the components listed must also be +selected. The dependency information is encoded within the installer +itself, so that users cannot install inconsistent sets of components. + +GROUP names the component group of which this component is a part. If +not provided, the component will be a standalone component, not part +of any component group. Component groups are described with the +cpack_add_component_group command, detailed below. + +INSTALL_TYPES lists the installation types of which this component is +a part. When one of these installations types is selected, this +component will automatically be selected. Installation types are +described with the cpack_add_install_type command, detailed below. + +DOWNLOADED indicates that this component should be downloaded +on-the-fly by the installer, rather than packaged in with the +installer itself. For more information, see the +cpack_configure_downloads command. + +ARCHIVE_FILE provides a name for the archive file created by CPack to +be used for downloaded components. If not supplied, CPack will create +a file with some name based on CPACK_PACKAGE_FILE_NAME and the name of +the component. See cpack_configure_downloads for more information. + +PLIST gives a filename that is passed to pkgbuild with the +``--component-plist`` argument when using the productbuild generator. + +.. command:: cpack_add_component_group + +Describes a group of related CPack installation components. + +:: + + cpack_add_component_group(groupname + [DISPLAY_NAME name] + [DESCRIPTION description] + [PARENT_GROUP parent] + [EXPANDED] + [BOLD_TITLE]) + + + +The cpack_add_component_group describes a group of installation +components, which will be placed together within the listing of +options. Typically, component groups allow the user to +select/deselect all of the components within a single group via a +single group-level option. Use component groups to reduce the +complexity of installers with many options. groupname is an arbitrary +name used to identify the group in the GROUP argument of the +cpack_add_component command, which is used to place a component in a +group. The name of the group must not conflict with the name of any +component. + +DISPLAY_NAME is the displayed name of the component group, used in +graphical installers to display the component group name. This value +can be any string. + +DESCRIPTION is an extended description of the component group, used in +graphical installers to give the user additional information about the +components within that group. Descriptions can span multiple lines +using ``\n`` as the line separator. Typically, these descriptions +should be no more than a few lines long. + +PARENT_GROUP, if supplied, names the parent group of this group. +Parent groups are used to establish a hierarchy of groups, providing +an arbitrary hierarchy of groups. + +EXPANDED indicates that, by default, the group should show up as +"expanded", so that the user immediately sees all of the components +within the group. Otherwise, the group will initially show up as a +single entry. + +BOLD_TITLE indicates that the group title should appear in bold, to +call the user's attention to the group. + +.. command:: cpack_add_install_type + +Add a new installation type containing +a set of predefined component selections to the graphical installer. + +:: + + cpack_add_install_type(typename + [DISPLAY_NAME name]) + + + +The cpack_add_install_type command identifies a set of preselected +components that represents a common use case for an application. For +example, a "Developer" install type might include an application along +with its header and library files, while an "End user" install type +might just include the application's executable. Each component +identifies itself with one or more install types via the INSTALL_TYPES +argument to cpack_add_component. + +DISPLAY_NAME is the displayed name of the install type, which will +typically show up in a drop-down box within a graphical installer. +This value can be any string. + +.. command:: cpack_configure_downloads + +Configure CPack to download +selected components on-the-fly as part of the installation process. + +:: + + cpack_configure_downloads(site + [UPLOAD_DIRECTORY dirname] + [ALL] + [ADD_REMOVE|NO_ADD_REMOVE]) + + + +The cpack_configure_downloads command configures installation-time +downloads of selected components. For each downloadable component, +CPack will create an archive containing the contents of that +component, which should be uploaded to the given site. When the user +selects that component for installation, the installer will download +and extract the component in place. This feature is useful for +creating small installers that only download the requested components, +saving bandwidth. Additionally, the installers are small enough that +they will be installed as part of the normal installation process, and +the "Change" button in Windows Add/Remove Programs control panel will +allow one to add or remove parts of the application after the original +installation. On Windows, the downloaded-components functionality +requires the ZipDLL plug-in for NSIS, available at: + +:: + + http://nsis.sourceforge.net/ZipDLL_plug-in + + + +On macOS, installers that download components on-the-fly can only +be built and installed on system using macOS 10.5 or later. + +The site argument is a URL where the archives for downloadable +components will reside, e.g., +https://cmake.org/files/2.6.1/installer/ All of the archives +produced by CPack should be uploaded to that location. + +UPLOAD_DIRECTORY is the local directory where CPack will create the +various archives for each of the components. The contents of this +directory should be uploaded to a location accessible by the URL given +in the site argument. If omitted, CPack will use the directory +CPackUploads inside the CMake binary directory to store the generated +archives. + +The ALL flag indicates that all components be downloaded. Otherwise, +only those components explicitly marked as DOWNLOADED or that have a +specified ARCHIVE_FILE will be downloaded. Additionally, the ALL +option implies ADD_REMOVE (unless NO_ADD_REMOVE is specified). + +ADD_REMOVE indicates that CPack should install a copy of the installer +that can be called from Windows' Add/Remove Programs dialog (via the +"Modify" button) to change the set of installed components. +NO_ADD_REMOVE turns off this behavior. This option is ignored on Mac +OS X. +#]=======================================================================] # Define var in order to avoid multiple inclusion if(NOT CPackComponent_CMake_INCLUDED) diff --git a/Modules/CPackCygwin.cmake b/Modules/CPackCygwin.cmake deleted file mode 100644 index 6d203c3..0000000 --- a/Modules/CPackCygwin.cmake +++ /dev/null @@ -1,27 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# CPackCygwin -# ----------- -# -# Cygwin CPack generator (Cygwin). -# -# Variables specific to CPack Cygwin generator -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# The -# following variable is specific to installers build on and/or for -# Cygwin: -# -# .. variable:: CPACK_CYGWIN_PATCH_NUMBER -# -# The Cygwin patch number. FIXME: This documentation is incomplete. -# -# .. variable:: CPACK_CYGWIN_PATCH_FILE -# -# The Cygwin patch file. FIXME: This documentation is incomplete. -# -# .. variable:: CPACK_CYGWIN_BUILD_SCRIPT -# -# The Cygwin build script. FIXME: This documentation is incomplete. diff --git a/Modules/CPackDMG.cmake b/Modules/CPackDMG.cmake deleted file mode 100644 index bda600f..0000000 --- a/Modules/CPackDMG.cmake +++ /dev/null @@ -1,105 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# CPackDMG -# -------- -# -# DragNDrop CPack generator (Mac OS X). -# -# Variables specific to CPack DragNDrop generator -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# The following variables are specific to the DragNDrop installers built -# on Mac OS X: -# -# .. variable:: CPACK_DMG_VOLUME_NAME -# -# The volume name of the generated disk image. Defaults to -# CPACK_PACKAGE_FILE_NAME. -# -# .. variable:: CPACK_DMG_FORMAT -# -# The disk image format. Common values are UDRO (UDIF read-only), UDZO (UDIF -# zlib-compressed) or UDBZ (UDIF bzip2-compressed). Refer to hdiutil(1) for -# more information on other available formats. Defaults to UDZO. -# -# .. variable:: CPACK_DMG_DS_STORE -# -# Path to a custom DS_Store file. This .DS_Store file e.g. can be used to -# specify the Finder window position/geometry and layout (such as hidden -# toolbars, placement of the icons etc.). This file has to be generated by -# the Finder (either manually or through AppleScript) using a normal folder -# from which the .DS_Store file can then be extracted. -# -# .. variable:: CPACK_DMG_DS_STORE_SETUP_SCRIPT -# -# Path to a custom AppleScript file. This AppleScript is used to generate -# a .DS_Store file which specifies the Finder window position/geometry and -# layout (such as hidden toolbars, placement of the icons etc.). -# By specifying a custom AppleScript there is no need to use -# CPACK_DMG_DS_STORE, as the .DS_Store that is generated by the AppleScript -# will be packaged. -# -# .. variable:: CPACK_DMG_BACKGROUND_IMAGE -# -# Path to an image file to be used as the background. This file will be -# copied to .background/background.<ext>, where ext is the original image file -# extension. The background image is installed into the image before -# CPACK_DMG_DS_STORE_SETUP_SCRIPT is executed or CPACK_DMG_DS_STORE is -# installed. By default no background image is set. -# -# .. variable:: CPACK_DMG_DISABLE_APPLICATIONS_SYMLINK -# -# Default behaviour is to include a symlink to ``/Applications`` in the DMG. -# Set this option to ``ON`` to avoid adding the symlink. -# -# .. variable:: CPACK_DMG_SLA_DIR -# -# Directory where license and menu files for different languages are stored. -# Setting this causes CPack to look for a ``<language>.menu.txt`` and -# ``<language>.license.txt`` file for every language defined in -# ``CPACK_DMG_SLA_LANGUAGES``. If both this variable and -# ``CPACK_RESOURCE_FILE_LICENSE`` are set, CPack will only look for the menu -# files and use the same license file for all languages. -# -# .. variable:: CPACK_DMG_SLA_LANGUAGES -# -# Languages for which a license agreement is provided when mounting the -# generated DMG. A menu file consists of 9 lines of text. The first line is -# is the name of the language itself, uppercase, in English (e.g. German). -# The other lines are translations of the following strings: -# -# - Agree -# - Disagree -# - Print -# - Save... -# - You agree to the terms of the License Agreement when you click the -# "Agree" button. -# - Software License Agreement -# - This text cannot be saved. The disk may be full or locked, or the file -# may be locked. -# - Unable to print. Make sure you have selected a printer. -# -# For every language in this list, CPack will try to find files -# ``<language>.menu.txt`` and ``<language>.license.txt`` in the directory -# specified by the :variable:`CPACK_DMG_SLA_DIR` variable. -# -# .. variable:: CPACK_COMMAND_HDIUTIL -# -# Path to the hdiutil(1) command used to operate on disk image files on Mac -# OS X. This variable can be used to override the automatically detected -# command (or specify its location if the auto-detection fails to find it.) -# -# .. variable:: CPACK_COMMAND_SETFILE -# -# Path to the SetFile(1) command used to set extended attributes on files and -# directories on Mac OS X. This variable can be used to override the -# automatically detected command (or specify its location if the -# auto-detection fails to find it.) -# -# .. variable:: CPACK_COMMAND_REZ -# -# Path to the Rez(1) command used to compile resources on Mac OS X. This -# variable can be used to override the automatically detected command (or -# specify its location if the auto-detection fails to find it.) diff --git a/Modules/CPackFreeBSD.cmake b/Modules/CPackFreeBSD.cmake deleted file mode 100644 index b681d4f..0000000 --- a/Modules/CPackFreeBSD.cmake +++ /dev/null @@ -1,248 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#[=======================================================================[.rst: -CPackFreeBSD ------------- - -The built in (binary) CPack FreeBSD (pkg) generator (Unix only) - -Variables specific to CPack FreeBSD (pkg) generator -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -CPackFreeBSD may be used to create pkg(8) packages -- these may be used -on FreeBSD, DragonflyBSD, NetBSD, OpenBSD, but also on Linux or OSX, -depending on the installed package-management tools -- using :module:`CPack`. - -CPackFreeBSD is a :module:`CPack` generator and uses the ``CPACK_XXX`` -variables used by :module:`CPack`. It tries to re-use packaging information -that may already be specified for Debian packages for the :module:`CPackDeb` -generator. it also tries to re-use RPM packaging information when Debian -does not specify. - -CPackFreeBSD generator should work on any host with libpkg installed. The -packages it produces are specific to the host architecture and ABI. - -CPackFreeBSD sets package-metadata through :code:`CPACK_FREEBSD_XXX` variables. -CPackFreeBSD, unlike CPackDeb, does not specially support componentized -packages; a single package is created from all the software artifacts -created through CMake. - -All of the variables can be set specifically for FreeBSD packaging in -the CPackConfig file or in CMakeLists.txt, but most of them have defaults -that use general settings (e.g. CMAKE_PROJECT_NAME) or Debian-specific -variables when those make sense (e.g. the homepage of an upstream project -is usually unchanged by the flavor of packaging). When there is no Debian -information to fall back on, but the RPM packaging has it, fall back to -the RPM information (e.g. package license). - -.. variable:: CPACK_FREEBSD_PACKAGE_NAME - - Sets the package name (in the package manifest, but also affects the - output filename). - - * Mandatory: YES - * Default: - - - :variable:`CPACK_PACKAGE_NAME` (this is always set by CPack itself, - based on CMAKE_PROJECT_NAME). - -.. variable:: CPACK_FREEBSD_PACKAGE_COMMENT - - Sets the package comment. This is the short description displayed by - pkg(8) in standard "pkg info" output. - - * Mandatory: YES - * Default: - - - :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY` (this is always set - by CPack itself, if nothing else sets it explicitly). - - :variable:`PROJECT_DESCRIPTION` (this can be set with the DESCRIPTION - parameter for :command:`project`). - -.. variable:: CPACK_FREEBSD_PACKAGE_DESCRIPTION - - Sets the package description. This is the long description of the package, - given by "pkg info" with a specific package as argument. - - * Mandatory: YES - * Default: - - - :variable:`CPACK_DEBIAN_PACKAGE_DESCRIPTION` (this may be set already - for Debian packaging, so we may as well re-use it). - -.. variable:: CPACK_FREEBSD_PACKAGE_WWW - - The URL of the web site for this package, preferably (when applicable) the - site from which the original source can be obtained and any additional - upstream documentation or information may be found. - - * Mandatory: YES - * Default: - - - :variable:`CMAKE_PROJECT_HOMEPAGE_URL`, or if that is not set, - :variable:`CPACK_DEBIAN_PACKAGE_HOMEPAGE` (this may be set already - for Debian packaging, so we may as well re-use it). - -.. variable:: CPACK_FREEBSD_PACKAGE_LICENSE - - The license, or licenses, which apply to this software package. This must - be one or more license-identifiers that pkg recognizes as acceptable license - identifiers (e.g. "GPLv2"). - - * Mandatory: YES - * Default: - - - :variable:`CPACK_RPM_PACKAGE_LICENSE` - -.. variable:: CPACK_FREEBSD_PACKAGE_LICENSE_LOGIC - - This variable is only of importance if there is more than one license. - The default is "single", which is only applicable to a single license. - Other acceptable values are determined by pkg -- those are "dual" or "multi" -- - meaning choice (OR) or simultaneous (AND) application of the licenses. - - * Mandatory: NO - * Default: single - -.. variable:: CPACK_FREEBSD_PACKAGE_MAINTAINER - - The FreeBSD maintainer (e.g. kde@freebsd.org) of this package. - - * Mandatory: YES - * Default: none - -.. variable:: CPACK_FREEBSD_PACKAGE_ORIGIN - - The origin (ports label) of this package; for packages built by CPack - outside of the ports system this is of less importance. The default - puts the package somewhere under misc/, as a stopgap. - - * Mandatory: YES - * Default: misc/<package name> - -.. variable:: CPACK_FREEBSD_PACKAGE_CATEGORIES - - The ports categories where this package lives (if it were to be built - from ports). If none is set a single category is determined based on - the package origin. - - * Mandatory: YES - * Default: derived from ORIGIN - -.. variable:: CPACK_FREEBSD_PACKAGE_DEPS - - A list of package origins that should be added as package dependencies. - These are in the form <category>/<packagename>, e.g. x11/libkonq. - No version information needs to be provided (this is not included - in the manifest). - - * Mandatory: NO - * Default: empty -#]=======================================================================] - - - -if(CMAKE_BINARY_DIR) - message(FATAL_ERROR "CPackFreeBSD.cmake may only be used by CPack internally.") -endif() - -if(NOT UNIX) - message(FATAL_ERROR "CPackFreeBSD.cmake may only be used under UNIX.") -endif() - - -### -# -# These bits are copied from the Debian packaging file; slightly modified. -# They are used for filling in FreeBSD-packaging variables that can take -# on values from elsewhere -- e.g. the package description may as well be -# copied from Debian. -# -function(_cpack_freebsd_fallback_var OUTPUT_VAR_NAME) - set(FALLBACK_VAR_NAMES ${ARGN}) - - set(VALUE "${${OUTPUT_VAR_NAME}}") - if(VALUE) - return() - endif() - - foreach(variable_name IN LISTS FALLBACK_VAR_NAMES) - if(${variable_name}) - set(${OUTPUT_VAR_NAME} "${${variable_name}}" PARENT_SCOPE) - set(VALUE "${${variable_name}}") - break() - endif() - endforeach() - if(NOT VALUE) - message(WARNING "Variable ${OUTPUT_VAR_NAME} could not be given a fallback value from any variable ${FALLBACK_VAR_NAMES}.") - endif() -endfunction() - -function(check_required_var VAR_NAME) - if(NOT ${VAR_NAME}) - message(FATAL_ERROR "Variable ${VAR_NAME} is not set.") - endif() -endfunction() - -set(_cpack_freebsd_fallback_origin "misc/bogus") - -_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_NAME" - "CPACK_PACKAGE_NAME" - "CMAKE_PROJECT_NAME" - ) - -set(_cpack_freebsd_fallback_www "http://example.com/?pkg=${CPACK_FREEBSD_PACKAGE_NAME}") - -_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_COMMENT" - "CPACK_PACKAGE_DESCRIPTION_SUMMARY" - ) - -# TODO: maybe read the PACKAGE_DESCRIPTION file for the longer -# FreeBSD pkg-descr? -_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_DESCRIPTION" - "CPACK_DEBIAN_PACKAGE_DESCRIPTION" - "CPACK_PACKAGE_DESCRIPTION_SUMMARY" - "PACKAGE_DESCRIPTION" - ) - -# There's really only one homepage for a project, so -# re-use the Debian setting if it's there. -_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_WWW" - "CMAKE_PROJECT_HOMEPAGE_URL" - "CPACK_DEBIAN_PACKAGE_HOMEPAGE" - "_cpack_freebsd_fallback_www" - ) - -_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_VERSION" - "CMAKE_PROJECT_VERSION" - "${CMAKE_PROJECT_NAME}_VERSION" - "PROJECT_VERSION" - "CPACK_PACKAGE_VERSION" - "CPACK_PACKAGE_VERSION" - ) - -_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_MAINTAINER" - "CPACK_PACKAGE_CONTACT" - ) - -_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_LICENSE" - "CPACK_RPM_PACKAGE_LICENSE" - ) - -_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_ORIGIN" - "_cpack_freebsd_fallback_origin" - ) - -if(NOT CPACK_FREEBSD_PACKAGE_CATEGORIES) - string(REGEX REPLACE "/.*" "" CPACK_FREEBSD_PACKAGE_CATEGORIES ${CPACK_FREEBSD_PACKAGE_ORIGIN}) -endif() - -check_required_var("CPACK_FREEBSD_PACKAGE_NAME") -check_required_var("CPACK_FREEBSD_PACKAGE_ORIGIN") -check_required_var("CPACK_FREEBSD_PACKAGE_VERSION") -check_required_var("CPACK_FREEBSD_PACKAGE_MAINTAINER") -check_required_var("CPACK_FREEBSD_PACKAGE_COMMENT") -check_required_var("CPACK_FREEBSD_PACKAGE_DESCRIPTION") -check_required_var("CPACK_FREEBSD_PACKAGE_WWW") -check_required_var("CPACK_FREEBSD_PACKAGE_LICENSE") diff --git a/Modules/CPackIFW.cmake b/Modules/CPackIFW.cmake index 9d733dc..141e842 100644 --- a/Modules/CPackIFW.cmake +++ b/Modules/CPackIFW.cmake @@ -1,677 +1,331 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CPackIFW -# -------- -# -# .. _QtIFW: http://doc.qt.io/qtinstallerframework/index.html -# -# This module looks for the location of the command line utilities supplied -# with the Qt Installer Framework (QtIFW_). -# -# The module also defines several commands to control the behavior of the -# CPack ``IFW`` generator. -# -# -# Overview -# ^^^^^^^^ -# -# CPack ``IFW`` generator helps you to create online and offline -# binary cross-platform installers with a graphical user interface. -# -# CPack IFW generator prepares project installation and generates configuration -# and meta information for QtIFW_ tools. -# -# The QtIFW_ provides a set of tools and utilities to create -# installers for the supported desktop Qt platforms: Linux, Microsoft Windows, -# and Mac OS X. -# -# You should also install QtIFW_ to use CPack ``IFW`` generator. -# -# Hints -# ^^^^^ -# -# Generally, the CPack ``IFW`` generator automatically finds QtIFW_ tools, -# but if you don't use a default path for installation of the QtIFW_ tools, -# the path may be specified in either a CMake or an environment variable: -# -# .. variable:: CPACK_IFW_ROOT -# -# An CMake variable which specifies the location of the QtIFW_ tool suite. -# -# The variable will be cached in the ``CPackConfig.cmake`` file and used at -# CPack runtime. -# -# .. variable:: QTIFWDIR -# -# An environment variable which specifies the location of the QtIFW_ tool -# suite. -# -# .. note:: -# The specified path should not contain "bin" at the end -# (for example: "D:\\DevTools\\QtIFW2.0.5"). -# -# The :variable:`CPACK_IFW_ROOT` variable has a higher priority and overrides -# the value of the :variable:`QTIFWDIR` variable. -# -# Internationalization -# ^^^^^^^^^^^^^^^^^^^^ -# -# Some variables and command arguments support internationalization via -# CMake script. This is an optional feature. -# -# Installers created by QtIFW_ tools have built-in support for -# internationalization and many phrases are localized to many languages, -# but this does not apply to the description of the your components and groups -# that will be distributed. -# -# Localization of the description of your components and groups is useful for -# users of your installers. -# -# A localized variable or argument can contain a single default value, and a -# set of pairs the name of the locale and the localized value. -# -# For example: -# -# .. code-block:: cmake -# -# set(LOCALIZABLE_VARIABLE "Default value" -# en "English value" -# en_US "American value" -# en_GB "Great Britain value" -# ) -# -# Variables -# ^^^^^^^^^ -# -# You can use the following variables to change behavior of CPack ``IFW`` -# generator. -# -# Debug -# """""" -# -# .. variable:: CPACK_IFW_VERBOSE -# -# Set to ``ON`` to enable addition debug output. -# By default is ``OFF``. -# -# Package -# """"""" -# -# .. variable:: CPACK_IFW_PACKAGE_TITLE -# -# Name of the installer as displayed on the title bar. -# By default used :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY`. -# -# .. variable:: CPACK_IFW_PACKAGE_PUBLISHER -# -# Publisher of the software (as shown in the Windows Control Panel). -# By default used :variable:`CPACK_PACKAGE_VENDOR`. -# -# .. variable:: CPACK_IFW_PRODUCT_URL -# -# URL to a page that contains product information on your web site. -# -# .. variable:: CPACK_IFW_PACKAGE_ICON -# -# Filename for a custom installer icon. The actual file is '.icns' (Mac OS X), -# '.ico' (Windows). No functionality on Unix. -# -# .. variable:: CPACK_IFW_PACKAGE_WINDOW_ICON -# -# Filename for a custom window icon in PNG format for the Installer -# application. -# -# .. variable:: CPACK_IFW_PACKAGE_LOGO -# -# Filename for a logo is used as QWizard::LogoPixmap. -# -# .. variable:: CPACK_IFW_PACKAGE_WATERMARK -# -# Filename for a watermark is used as QWizard::WatermarkPixmap. -# -# .. variable:: CPACK_IFW_PACKAGE_BANNER -# -# Filename for a banner is used as QWizard::BannerPixmap. -# -# .. variable:: CPACK_IFW_PACKAGE_BACKGROUND -# -# Filename for an image used as QWizard::BackgroundPixmap (only used by MacStyle). -# -# .. variable:: CPACK_IFW_PACKAGE_WIZARD_STYLE -# -# Wizard style to be used ("Modern", "Mac", "Aero" or "Classic"). -# -# .. variable:: CPACK_IFW_PACKAGE_WIZARD_DEFAULT_WIDTH -# -# Default width of the wizard in pixels. Setting a banner image will override this. -# -# .. variable:: CPACK_IFW_PACKAGE_WIZARD_DEFAULT_HEIGHT -# -# Default height of the wizard in pixels. Setting a watermark image will override this. -# -# .. variable:: CPACK_IFW_PACKAGE_TITLE_COLOR -# -# Color of the titles and subtitles (takes an HTML color code, such as "#88FF33"). -# -# .. variable:: CPACK_IFW_PACKAGE_START_MENU_DIRECTORY -# -# Name of the default program group for the product in the Windows Start menu. -# -# By default used :variable:`CPACK_IFW_PACKAGE_NAME`. -# -# .. variable:: CPACK_IFW_TARGET_DIRECTORY -# -# Default target directory for installation. -# By default used -# "@ApplicationsDir@/:variable:`CPACK_PACKAGE_INSTALL_DIRECTORY`" -# -# You can use predefined variables. -# -# .. variable:: CPACK_IFW_ADMIN_TARGET_DIRECTORY -# -# Default target directory for installation with administrator rights. -# -# You can use predefined variables. -# -# .. variable:: CPACK_IFW_PACKAGE_GROUP -# -# The group, which will be used to configure the root package -# -# .. variable:: CPACK_IFW_PACKAGE_NAME -# -# The root package name, which will be used if configuration group is not -# specified -# -# .. variable:: CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_NAME -# -# Filename of the generated maintenance tool. -# The platform-specific executable file extension is appended. -# -# By default used QtIFW_ defaults (``maintenancetool``). -# -# .. variable:: CPACK_IFW_PACKAGE_REMOVE_TARGET_DIR -# -# Set to ``OFF`` if the target directory should not be deleted when uninstalling. -# -# Is ``ON`` by default -# -# .. variable:: CPACK_IFW_PACKAGE_MAINTENANCE_TOOL_INI_FILE -# -# Filename for the configuration of the generated maintenance tool. -# -# By default used QtIFW_ defaults (``maintenancetool.ini``). -# -# .. variable:: CPACK_IFW_PACKAGE_ALLOW_NON_ASCII_CHARACTERS -# -# Set to ``ON`` if the installation path can contain non-ASCII characters. -# -# Is ``ON`` for QtIFW_ less 2.0 tools. -# -# .. variable:: CPACK_IFW_PACKAGE_ALLOW_SPACE_IN_PATH -# -# Set to ``OFF`` if the installation path cannot contain space characters. -# -# Is ``ON`` for QtIFW_ less 2.0 tools. -# -# .. variable:: CPACK_IFW_PACKAGE_CONTROL_SCRIPT -# -# Filename for a custom installer control script. -# -# .. variable:: CPACK_IFW_PACKAGE_RESOURCES -# -# List of additional resources ('.qrc' files) to include in the installer -# binary. -# -# You can use :command:`cpack_ifw_add_package_resources` command to resolve -# relative paths. -# -# .. variable:: CPACK_IFW_PACKAGE_FILE_EXTENSION -# -# The target binary extension. -# -# On Linux, the name of the target binary is automatically extended with -# '.run', if you do not specify the extension. -# -# On Windows, the target is created as an application with the extension -# '.exe', which is automatically added, if not supplied. -# -# On Mac, the target is created as an DMG disk image with the extension -# '.dmg', which is automatically added, if not supplied. -# -# .. variable:: CPACK_IFW_REPOSITORIES_ALL -# -# The list of remote repositories. -# -# The default value of this variable is computed by CPack and contains -# all repositories added with command :command:`cpack_ifw_add_repository` -# or updated with command :command:`cpack_ifw_update_repository`. -# -# .. variable:: CPACK_IFW_DOWNLOAD_ALL -# -# If this is ``ON`` all components will be downloaded. -# By default is ``OFF`` or used value -# from ``CPACK_DOWNLOAD_ALL`` if set -# -# Components -# """""""""" -# -# .. variable:: CPACK_IFW_RESOLVE_DUPLICATE_NAMES -# -# Resolve duplicate names when installing components with groups. -# -# .. variable:: CPACK_IFW_PACKAGES_DIRECTORIES -# -# Additional prepared packages dirs that will be used to resolve -# dependent components. -# -# .. variable:: CPACK_IFW_REPOSITORIES_DIRECTORIES -# -# Additional prepared repository dirs that will be used to resolve and -# repack dependent components. This feature available only -# since QtIFW_ 3.1. -# -# Tools -# """"" -# -# .. variable:: CPACK_IFW_FRAMEWORK_VERSION -# -# The version of used QtIFW_ tools. -# -# .. variable:: CPACK_IFW_BINARYCREATOR_EXECUTABLE -# -# The path to "binarycreator" command line client. -# -# This variable is cached and may be configured if needed. -# -# .. variable:: CPACK_IFW_REPOGEN_EXECUTABLE -# -# The path to "repogen" command line client. -# -# This variable is cached and may be configured if needed. -# -# .. variable:: CPACK_IFW_INSTALLERBASE_EXECUTABLE -# -# The path to "installerbase" installer executable base. -# -# This variable is cached and may be configured if needed. -# -# .. variable:: CPACK_IFW_DEVTOOL_EXECUTABLE -# -# The path to "devtool" command line client. -# -# This variable is cached and may be configured if needed. -# -# Commands -# ^^^^^^^^^ -# -# The module defines the following commands: -# -# .. command:: cpack_ifw_configure_component -# -# Sets the arguments specific to the CPack IFW generator. -# -# :: -# -# cpack_ifw_configure_component(<compname> [COMMON] [ESSENTIAL] [VIRTUAL] -# [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS] -# [NAME <name>] -# [DISPLAY_NAME <display_name>] # Note: Internationalization supported -# [DESCRIPTION <description>] # Note: Internationalization supported -# [UPDATE_TEXT <update_text>] -# [VERSION <version>] -# [RELEASE_DATE <release_date>] -# [SCRIPT <script>] -# [PRIORITY|SORTING_PRIORITY <sorting_priority>] # Note: PRIORITY is deprecated -# [DEPENDS|DEPENDENCIES <com_id> ...] -# [AUTO_DEPEND_ON <comp_id> ...] -# [LICENSES <display_name> <file_path> ...] -# [DEFAULT <value>] -# [USER_INTERFACES <file_path> <file_path> ...] -# [TRANSLATIONS <file_path> <file_path> ...] -# [REPLACES <comp_id> ...] -# [CHECKABLE <value>]) -# -# This command should be called after :command:`cpack_add_component` command. -# -# ``COMMON`` -# if set, then the component will be packaged and installed as part -# of a group to which it belongs. -# -# ``ESSENTIAL`` -# if set, then the package manager stays disabled until that -# component is updated. -# -# ``VIRTUAL`` -# if set, then the component will be hidden from the installer. -# It is a equivalent of the ``HIDDEN`` option from the -# :command:`cpack_add_component` command. -# -# ``FORCED_INSTALLATION`` -# if set, then the component must always be installed. -# It is a equivalent of the ``REQUARED`` option from the -# :command:`cpack_add_component` command. -# -# ``REQUIRES_ADMIN_RIGHTS`` -# set it if the component needs to be installed with elevated permissions. -# -# ``NAME`` -# is used to create domain-like identification for this component. -# By default used origin component name. -# -# ``DISPLAY_NAME`` -# set to rewrite original name configured by -# :command:`cpack_add_component` command. -# -# ``DESCRIPTION`` -# set to rewrite original description configured by -# :command:`cpack_add_component` command. -# -# ``UPDATE_TEXT`` -# will be added to the component description if this is an update to -# the component. -# -# ``VERSION`` -# is version of component. -# By default used :variable:`CPACK_PACKAGE_VERSION`. -# -# ``RELEASE_DATE`` -# keep empty to auto generate. -# -# ``SCRIPT`` -# is a relative or absolute path to operations script -# for this component. -# -# ``PRIORITY`` | ``SORTING_PRIORITY`` -# is priority of the component in the tree. -# The ``PRIORITY`` option is deprecated and will be removed in a future -# version of CMake. Please use ``SORTING_PRIORITY`` option instead. -# -# ``DEPENDS`` | ``DEPENDENCIES`` -# list of dependency component or component group identifiers in -# QtIFW_ style. -# -# ``AUTO_DEPEND_ON`` -# list of identifiers of component or component group in QtIFW_ style -# that this component has an automatic dependency on. -# -# ``LICENSES`` -# pair of <display_name> and <file_path> of license text for this -# component. You can specify more then one license. -# -# ``DEFAULT`` -# Possible values are: TRUE, FALSE, and SCRIPT. -# Set to FALSE to disable the component in the installer or to SCRIPT -# to resolved during runtime (don't forget add the file of the script -# as a value of the ``SCRIPT`` option). -# -# ``USER_INTERFACES`` -# is a list of <file_path> ('.ui' files) representing pages to load. -# -# ``TRANSLATIONS`` -# is a list of <file_path> ('.qm' files) representing translations to load. -# -# ``REPLACES`` -# list of identifiers of component or component group to replace. -# -# ``CHECKABLE`` -# Possible values are: TRUE, FALSE. -# Set to FALSE if you want to hide the checkbox for an item. -# This is useful when only a few subcomponents should be selected -# instead of all. -# -# -# .. command:: cpack_ifw_configure_component_group -# -# Sets the arguments specific to the CPack IFW generator. -# -# :: -# -# cpack_ifw_configure_component_group(<groupname> [VIRTUAL] -# [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS] -# [NAME <name>] -# [DISPLAY_NAME <display_name>] # Note: Internationalization supported -# [DESCRIPTION <description>] # Note: Internationalization supported -# [UPDATE_TEXT <update_text>] -# [VERSION <version>] -# [RELEASE_DATE <release_date>] -# [SCRIPT <script>] -# [PRIORITY|SORTING_PRIORITY <sorting_priority>] # Note: PRIORITY is deprecated -# [DEPENDS|DEPENDENCIES <com_id> ...] -# [AUTO_DEPEND_ON <comp_id> ...] -# [LICENSES <display_name> <file_path> ...] -# [DEFAULT <value>] -# [USER_INTERFACES <file_path> <file_path> ...] -# [TRANSLATIONS <file_path> <file_path> ...] -# [REPLACES <comp_id> ...] -# [CHECKABLE <value>]) -# -# This command should be called after :command:`cpack_add_component_group` -# command. -# -# ``VIRTUAL`` -# if set, then the group will be hidden from the installer. -# Note that setting this on a root component does not work. -# -# ``FORCED_INSTALLATION`` -# if set, then the group must always be installed. -# -# ``REQUIRES_ADMIN_RIGHTS`` -# set it if the component group needs to be installed with elevated -# permissions. -# -# ``NAME`` -# is used to create domain-like identification for this component group. -# By default used origin component group name. -# -# ``DISPLAY_NAME`` -# set to rewrite original name configured by -# :command:`cpack_add_component_group` command. -# -# ``DESCRIPTION`` -# set to rewrite original description configured by -# :command:`cpack_add_component_group` command. -# -# ``UPDATE_TEXT`` -# will be added to the component group description if this is an update to -# the component group. -# -# ``VERSION`` -# is version of component group. -# By default used :variable:`CPACK_PACKAGE_VERSION`. -# -# ``RELEASE_DATE`` -# keep empty to auto generate. -# -# ``SCRIPT`` -# is a relative or absolute path to operations script -# for this component group. -# -# ``PRIORITY`` | ``SORTING_PRIORITY`` -# is priority of the component group in the tree. -# The ``PRIORITY`` option is deprecated and will be removed in a future -# version of CMake. Please use ``SORTING_PRIORITY`` option instead. -# -# ``DEPENDS`` | ``DEPENDENCIES`` -# list of dependency component or component group identifiers in -# QtIFW_ style. -# -# ``AUTO_DEPEND_ON`` -# list of identifiers of component or component group in QtIFW_ style -# that this component group has an automatic dependency on. -# -# ``LICENSES`` -# pair of <display_name> and <file_path> of license text for this -# component group. You can specify more then one license. -# -# ``DEFAULT`` -# Possible values are: TRUE, FALSE, and SCRIPT. -# Set to TRUE to preselect the group in the installer -# (this takes effect only on groups that have no visible child components) -# or to SCRIPT to resolved during runtime (don't forget add the file of -# the script as a value of the ``SCRIPT`` option). -# -# ``USER_INTERFACES`` -# is a list of <file_path> ('.ui' files) representing pages to load. -# -# ``TRANSLATIONS`` -# is a list of <file_path> ('.qm' files) representing translations to load. -# -# ``REPLACES`` -# list of identifiers of component or component group to replace. -# -# ``CHECKABLE`` -# Possible values are: TRUE, FALSE. -# Set to FALSE if you want to hide the checkbox for an item. -# This is useful when only a few subcomponents should be selected -# instead of all. -# -# -# .. command:: cpack_ifw_add_repository -# -# Add QtIFW_ specific remote repository to binary installer. -# -# :: -# -# cpack_ifw_add_repository(<reponame> [DISABLED] -# URL <url> -# [USERNAME <username>] -# [PASSWORD <password>] -# [DISPLAY_NAME <display_name>]) -# -# This command will also add the <reponame> repository -# to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`. -# -# ``DISABLED`` -# if set, then the repository will be disabled by default. -# -# ``URL`` -# is points to a list of available components. -# -# ``USERNAME`` -# is used as user on a protected repository. -# -# ``PASSWORD`` -# is password to use on a protected repository. -# -# ``DISPLAY_NAME`` -# is string to display instead of the URL. -# -# -# .. command:: cpack_ifw_update_repository -# -# Update QtIFW_ specific repository from remote repository. -# -# :: -# -# cpack_ifw_update_repository(<reponame> -# [[ADD|REMOVE] URL <url>]| -# [REPLACE OLD_URL <old_url> NEW_URL <new_url>]] -# [USERNAME <username>] -# [PASSWORD <password>] -# [DISPLAY_NAME <display_name>]) -# -# This command will also add the <reponame> repository -# to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`. -# -# ``URL`` -# is points to a list of available components. -# -# ``OLD_URL`` -# is points to a list that will replaced. -# -# ``NEW_URL`` -# is points to a list that will replace to. -# -# ``USERNAME`` -# is used as user on a protected repository. -# -# ``PASSWORD`` -# is password to use on a protected repository. -# -# ``DISPLAY_NAME`` -# is string to display instead of the URL. -# -# -# .. command:: cpack_ifw_add_package_resources -# -# Add additional resources in the installer binary. -# -# :: -# -# cpack_ifw_add_package_resources(<file_path> <file_path> ...) -# -# This command will also add the specified files -# to a variable :variable:`CPACK_IFW_PACKAGE_RESOURCES`. -# -# -# Example usage -# ^^^^^^^^^^^^^ -# -# .. code-block:: cmake -# -# set(CPACK_PACKAGE_NAME "MyPackage") -# set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MyPackage Installation Example") -# set(CPACK_PACKAGE_VERSION "1.0.0") # Version of installer -# -# include(CPack) -# include(CPackIFW) -# -# cpack_add_component(myapp -# DISPLAY_NAME "MyApp" -# DESCRIPTION "My Application") # Default description -# cpack_ifw_configure_component(myapp -# DESCRIPTION ru_RU "Мое Приложение" # Localized description -# VERSION "1.2.3" # Version of component -# SCRIPT "operations.qs") -# cpack_add_component(mybigplugin -# DISPLAY_NAME "MyBigPlugin" -# DESCRIPTION "My Big Downloadable Plugin" -# DOWNLOADED) -# cpack_ifw_add_repository(myrepo -# URL "http://example.com/ifw/repo/myapp" -# DISPLAY_NAME "My Application Repository") -# -# -# Online installer -# ^^^^^^^^^^^^^^^^ -# -# By default CPack IFW generator makes offline installer. This means that all -# components will be packaged into a binary file. -# -# To make a component downloaded, you must set the ``DOWNLOADED`` option in -# :command:`cpack_add_component`. -# -# Then you would use the command :command:`cpack_configure_downloads`. -# If you set ``ALL`` option all components will be downloaded. -# -# You also can use command :command:`cpack_ifw_add_repository` and -# variable :variable:`CPACK_IFW_DOWNLOAD_ALL` for more specific configuration. -# -# CPack IFW generator creates "repository" dir in current binary dir. You -# would copy content of this dir to specified ``site`` (``url``). -# -# See Also -# ^^^^^^^^ -# -# Qt Installer Framework Manual: -# -# * Index page: -# http://doc.qt.io/qtinstallerframework/index.html -# -# * Component Scripting: -# http://doc.qt.io/qtinstallerframework/scripting.html -# -# * Predefined Variables: -# http://doc.qt.io/qtinstallerframework/scripting.html#predefined-variables -# -# * Promoting Updates: -# http://doc.qt.io/qtinstallerframework/ifw-updates.html -# -# Download Qt Installer Framework for you platform from Qt site: -# http://download.qt.io/official_releases/qt-installer-framework -# +#[=======================================================================[.rst: +CPackIFW +-------- + +The documentation for the CPack IFW generator has moved here: :cpack_gen:`CPack IFW Generator` + +.. _QtIFW: http://doc.qt.io/qtinstallerframework/index.html + +This module looks for the location of the command line utilities supplied +with the Qt Installer Framework (QtIFW_). + +The module also defines several commands to control the behavior of the +CPack ``IFW`` generator. + +Commands +^^^^^^^^ + +The module defines the following commands: + +.. command:: cpack_ifw_configure_component + + Sets the arguments specific to the CPack IFW generator. + + :: + + cpack_ifw_configure_component(<compname> [COMMON] [ESSENTIAL] [VIRTUAL] + [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS] + [NAME <name>] + [DISPLAY_NAME <display_name>] # Note: Internationalization supported + [DESCRIPTION <description>] # Note: Internationalization supported + [UPDATE_TEXT <update_text>] + [VERSION <version>] + [RELEASE_DATE <release_date>] + [SCRIPT <script>] + [PRIORITY|SORTING_PRIORITY <sorting_priority>] # Note: PRIORITY is deprecated + [DEPENDS|DEPENDENCIES <com_id> ...] + [AUTO_DEPEND_ON <comp_id> ...] + [LICENSES <display_name> <file_path> ...] + [DEFAULT <value>] + [USER_INTERFACES <file_path> <file_path> ...] + [TRANSLATIONS <file_path> <file_path> ...] + [REPLACES <comp_id> ...] + [CHECKABLE <value>]) + + This command should be called after :command:`cpack_add_component` command. + + ``COMMON`` + if set, then the component will be packaged and installed as part + of a group to which it belongs. + + ``ESSENTIAL`` + if set, then the package manager stays disabled until that + component is updated. + + ``VIRTUAL`` + if set, then the component will be hidden from the installer. + It is a equivalent of the ``HIDDEN`` option from the + :command:`cpack_add_component` command. + + ``FORCED_INSTALLATION`` + if set, then the component must always be installed. + It is a equivalent of the ``REQUARED`` option from the + :command:`cpack_add_component` command. + + ``REQUIRES_ADMIN_RIGHTS`` + set it if the component needs to be installed with elevated permissions. + + ``NAME`` + is used to create domain-like identification for this component. + By default used origin component name. + + ``DISPLAY_NAME`` + set to rewrite original name configured by + :command:`cpack_add_component` command. + + ``DESCRIPTION`` + set to rewrite original description configured by + :command:`cpack_add_component` command. + + ``UPDATE_TEXT`` + will be added to the component description if this is an update to + the component. + + ``VERSION`` + is version of component. + By default used :variable:`CPACK_PACKAGE_VERSION`. + + ``RELEASE_DATE`` + keep empty to auto generate. + + ``SCRIPT`` + is a relative or absolute path to operations script + for this component. + + ``PRIORITY`` | ``SORTING_PRIORITY`` + is priority of the component in the tree. + The ``PRIORITY`` option is deprecated and will be removed in a future + version of CMake. Please use ``SORTING_PRIORITY`` option instead. + + ``DEPENDS`` | ``DEPENDENCIES`` + list of dependency component or component group identifiers in + QtIFW_ style. + + ``AUTO_DEPEND_ON`` + list of identifiers of component or component group in QtIFW_ style + that this component has an automatic dependency on. + + ``LICENSES`` + pair of <display_name> and <file_path> of license text for this + component. You can specify more then one license. + + ``DEFAULT`` + Possible values are: TRUE, FALSE, and SCRIPT. + Set to FALSE to disable the component in the installer or to SCRIPT + to resolved during runtime (don't forget add the file of the script + as a value of the ``SCRIPT`` option). + + ``USER_INTERFACES`` + is a list of <file_path> ('.ui' files) representing pages to load. + + ``TRANSLATIONS`` + is a list of <file_path> ('.qm' files) representing translations to load. + + ``REPLACES`` + list of identifiers of component or component group to replace. + + ``CHECKABLE`` + Possible values are: TRUE, FALSE. + Set to FALSE if you want to hide the checkbox for an item. + This is useful when only a few subcomponents should be selected + instead of all. + + +.. command:: cpack_ifw_configure_component_group + + Sets the arguments specific to the CPack IFW generator. + + :: + + cpack_ifw_configure_component_group(<groupname> [VIRTUAL] + [FORCED_INSTALLATION] [REQUIRES_ADMIN_RIGHTS] + [NAME <name>] + [DISPLAY_NAME <display_name>] # Note: Internationalization supported + [DESCRIPTION <description>] # Note: Internationalization supported + [UPDATE_TEXT <update_text>] + [VERSION <version>] + [RELEASE_DATE <release_date>] + [SCRIPT <script>] + [PRIORITY|SORTING_PRIORITY <sorting_priority>] # Note: PRIORITY is deprecated + [DEPENDS|DEPENDENCIES <com_id> ...] + [AUTO_DEPEND_ON <comp_id> ...] + [LICENSES <display_name> <file_path> ...] + [DEFAULT <value>] + [USER_INTERFACES <file_path> <file_path> ...] + [TRANSLATIONS <file_path> <file_path> ...] + [REPLACES <comp_id> ...] + [CHECKABLE <value>]) + + This command should be called after :command:`cpack_add_component_group` + command. + + ``VIRTUAL`` + if set, then the group will be hidden from the installer. + Note that setting this on a root component does not work. + + ``FORCED_INSTALLATION`` + if set, then the group must always be installed. + + ``REQUIRES_ADMIN_RIGHTS`` + set it if the component group needs to be installed with elevated + permissions. + + ``NAME`` + is used to create domain-like identification for this component group. + By default used origin component group name. + + ``DISPLAY_NAME`` + set to rewrite original name configured by + :command:`cpack_add_component_group` command. + + ``DESCRIPTION`` + set to rewrite original description configured by + :command:`cpack_add_component_group` command. + + ``UPDATE_TEXT`` + will be added to the component group description if this is an update to + the component group. + + ``VERSION`` + is version of component group. + By default used :variable:`CPACK_PACKAGE_VERSION`. + + ``RELEASE_DATE`` + keep empty to auto generate. + + ``SCRIPT`` + is a relative or absolute path to operations script + for this component group. + + ``PRIORITY`` | ``SORTING_PRIORITY`` + is priority of the component group in the tree. + The ``PRIORITY`` option is deprecated and will be removed in a future + version of CMake. Please use ``SORTING_PRIORITY`` option instead. + + ``DEPENDS`` | ``DEPENDENCIES`` + list of dependency component or component group identifiers in + QtIFW_ style. + + ``AUTO_DEPEND_ON`` + list of identifiers of component or component group in QtIFW_ style + that this component group has an automatic dependency on. + + ``LICENSES`` + pair of <display_name> and <file_path> of license text for this + component group. You can specify more then one license. + + ``DEFAULT`` + Possible values are: TRUE, FALSE, and SCRIPT. + Set to TRUE to preselect the group in the installer + (this takes effect only on groups that have no visible child components) + or to SCRIPT to resolved during runtime (don't forget add the file of + the script as a value of the ``SCRIPT`` option). + + ``USER_INTERFACES`` + is a list of <file_path> ('.ui' files) representing pages to load. + + ``TRANSLATIONS`` + is a list of <file_path> ('.qm' files) representing translations to load. + + ``REPLACES`` + list of identifiers of component or component group to replace. + + ``CHECKABLE`` + Possible values are: TRUE, FALSE. + Set to FALSE if you want to hide the checkbox for an item. + This is useful when only a few subcomponents should be selected + instead of all. + + +.. command:: cpack_ifw_add_repository + + Add QtIFW_ specific remote repository to binary installer. + + :: + + cpack_ifw_add_repository(<reponame> [DISABLED] + URL <url> + [USERNAME <username>] + [PASSWORD <password>] + [DISPLAY_NAME <display_name>]) + + This command will also add the <reponame> repository + to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`. + + ``DISABLED`` + if set, then the repository will be disabled by default. + + ``URL`` + is points to a list of available components. + + ``USERNAME`` + is used as user on a protected repository. + + ``PASSWORD`` + is password to use on a protected repository. + + ``DISPLAY_NAME`` + is string to display instead of the URL. + + +.. command:: cpack_ifw_update_repository + + Update QtIFW_ specific repository from remote repository. + + :: + + cpack_ifw_update_repository(<reponame> + [[ADD|REMOVE] URL <url>]| + [REPLACE OLD_URL <old_url> NEW_URL <new_url>]] + [USERNAME <username>] + [PASSWORD <password>] + [DISPLAY_NAME <display_name>]) + + This command will also add the <reponame> repository + to a variable :variable:`CPACK_IFW_REPOSITORIES_ALL`. + + ``URL`` + is points to a list of available components. + + ``OLD_URL`` + is points to a list that will replaced. + + ``NEW_URL`` + is points to a list that will replace to. + + ``USERNAME`` + is used as user on a protected repository. + + ``PASSWORD`` + is password to use on a protected repository. + + ``DISPLAY_NAME`` + is string to display instead of the URL. + + +.. command:: cpack_ifw_add_package_resources + + Add additional resources in the installer binary. + + :: + + cpack_ifw_add_package_resources(<file_path> <file_path> ...) + + This command will also add the specified files + to a variable :variable:`CPACK_IFW_PACKAGE_RESOURCES`. + +#]=======================================================================] + +# TODO: +# All of the internal implementation CMake modules for other CPack generators +# have been moved into the Internal/CPack directory. This one has not, because +# it contains user-facing macros which would be lost if it were moved. At some +# point, this module should be split into user-facing macros (which would live +# in this module) and internal implementation details (which would live in +# Internal/CPack/CPackIFW.cmake). #============================================================================= # Search Qt Installer Framework tools diff --git a/Modules/CPackIFWConfigureFile.cmake b/Modules/CPackIFWConfigureFile.cmake index 790574a..0abe0da 100644 --- a/Modules/CPackIFWConfigureFile.cmake +++ b/Modules/CPackIFWConfigureFile.cmake @@ -1,32 +1,33 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CPackIFWConfigureFile -# --------------------- -# -# The module defines :command:`configure_file` similar command to -# configure file templates prepared in QtIFW/SDK/Creator style. -# -# -# Commands -# ^^^^^^^^ -# -# The module defines the following commands: -# -# .. command:: cpack_ifw_configure_file -# -# Copy a file to another location and modify its contents. -# -# :: -# -# cpack_ifw_configure_file(<input> <output>) -# -# Copies an ``<input>`` file to an ``<output>`` file and substitutes variable -# values referenced as ``%{VAR}`` or ``%VAR%`` in the input file content. -# Each variable reference will be replaced with the current value of the -# variable, or the empty string if the variable is not defined. -# +#[=======================================================================[.rst: +CPackIFWConfigureFile +--------------------- + +The module defines :command:`configure_file` similar command to +configure file templates prepared in QtIFW/SDK/Creator style. + + +Commands +^^^^^^^^ + +The module defines the following commands: + +.. command:: cpack_ifw_configure_file + + Copy a file to another location and modify its contents. + + :: + + cpack_ifw_configure_file(<input> <output>) + + Copies an ``<input>`` file to an ``<output>`` file and substitutes variable + values referenced as ``%{VAR}`` or ``%VAR%`` in the input file content. + Each variable reference will be replaced with the current value of the + variable, or the empty string if the variable is not defined. + +#]=======================================================================] # NOTE: This file used to himself packaging via CPack IFW generator and # should be compatible with minimal CMake version defined in diff --git a/Modules/CPackNSIS.cmake b/Modules/CPackNSIS.cmake deleted file mode 100644 index 5bc4395..0000000 --- a/Modules/CPackNSIS.cmake +++ /dev/null @@ -1,138 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# CPackNSIS -# --------- -# -# CPack NSIS generator specific options -# -# Variables specific to CPack NSIS generator -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# The following variables are specific to the graphical installers built -# on Windows using the Nullsoft Installation System. -# -# .. variable:: CPACK_NSIS_INSTALL_ROOT -# -# The default installation directory presented to the end user by the NSIS -# installer is under this root dir. The full directory presented to the end -# user is: ${CPACK_NSIS_INSTALL_ROOT}/${CPACK_PACKAGE_INSTALL_DIRECTORY} -# -# .. variable:: CPACK_NSIS_MUI_ICON -# -# An icon filename. The name of a ``*.ico`` file used as the main icon for the -# generated install program. -# -# .. variable:: CPACK_NSIS_MUI_UNIICON -# -# An icon filename. The name of a ``*.ico`` file used as the main icon for the -# generated uninstall program. -# -# .. variable:: CPACK_NSIS_INSTALLER_MUI_ICON_CODE -# -# undocumented. -# -# .. variable:: CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP -# -# The filename of a bitmap to use as the NSIS MUI_WELCOMEFINISHPAGE_BITMAP. -# -# .. variable:: CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP -# -# The filename of a bitmap to use as the NSIS MUI_UNWELCOMEFINISHPAGE_BITMAP. -# -# .. variable:: CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS -# -# Extra NSIS commands that will be added to the beginning of the install -# Section, before your install tree is available on the target system. -# -# .. variable:: CPACK_NSIS_EXTRA_INSTALL_COMMANDS -# -# Extra NSIS commands that will be added to the end of the install Section, -# after your install tree is available on the target system. -# -# .. variable:: CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS -# -# Extra NSIS commands that will be added to the uninstall Section, before -# your install tree is removed from the target system. -# -# .. variable:: CPACK_NSIS_COMPRESSOR -# -# The arguments that will be passed to the NSIS SetCompressor command. -# -# .. variable:: CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL -# -# Ask about uninstalling previous versions first. If this is set to "ON", -# then an installer will look for previous installed versions and if one is -# found, ask the user whether to uninstall it before proceeding with the -# install. -# -# .. variable:: CPACK_NSIS_MODIFY_PATH -# -# Modify PATH toggle. If this is set to "ON", then an extra page will appear -# in the installer that will allow the user to choose whether the program -# directory should be added to the system PATH variable. -# -# .. variable:: CPACK_NSIS_DISPLAY_NAME -# -# The display name string that appears in the Windows Add/Remove Program -# control panel -# -# .. variable:: CPACK_NSIS_PACKAGE_NAME -# -# The title displayed at the top of the installer. -# -# .. variable:: CPACK_NSIS_INSTALLED_ICON_NAME -# -# A path to the executable that contains the installer icon. -# -# .. variable:: CPACK_NSIS_HELP_LINK -# -# URL to a web site providing assistance in installing your application. -# -# .. variable:: CPACK_NSIS_URL_INFO_ABOUT -# -# URL to a web site providing more information about your application. -# -# .. variable:: CPACK_NSIS_CONTACT -# -# Contact information for questions and comments about the installation -# process. -# -# .. variable:: CPACK_NSIS_<compName>_INSTALL_DIRECTORY -# -# Custom install directory for the specified component <compName> instead -# of $INSTDIR. -# -# .. variable:: CPACK_NSIS_CREATE_ICONS_EXTRA -# -# Additional NSIS commands for creating start menu shortcuts. -# -# .. variable:: CPACK_NSIS_DELETE_ICONS_EXTRA -# -# Additional NSIS commands to uninstall start menu shortcuts. -# -# .. variable:: CPACK_NSIS_EXECUTABLES_DIRECTORY -# -# Creating NSIS start menu links assumes that they are in 'bin' unless this -# variable is set. For example, you would set this to 'exec' if your -# executables are in an exec directory. -# -# .. variable:: CPACK_NSIS_MUI_FINISHPAGE_RUN -# -# Specify an executable to add an option to run on the finish page of the -# NSIS installer. -# -# .. variable:: CPACK_NSIS_MENU_LINKS -# -# Specify links in [application] menu. This should contain a list of pair -# "link" "link name". The link may be a URL or a path relative to -# installation prefix. Like:: -# -# set(CPACK_NSIS_MENU_LINKS -# "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake.html" -# "CMake Help" "https://cmake.org" "CMake Web Site") -# - -#FIXME we should put NSIS specific code here -#FIXME but I'm not doing it because I'm not able to test it... diff --git a/Modules/CPackPackageMaker.cmake b/Modules/CPackPackageMaker.cmake deleted file mode 100644 index c2ca4c6..0000000 --- a/Modules/CPackPackageMaker.cmake +++ /dev/null @@ -1,27 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# CPackPackageMaker -# ----------------- -# -# PackageMaker CPack generator (Mac OS X). -# -# Variables specific to CPack PackageMaker generator -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# The following variable is specific to installers built on Mac -# OS X using PackageMaker: -# -# .. variable:: CPACK_OSX_PACKAGE_VERSION -# -# The version of Mac OS X that the resulting PackageMaker archive should be -# compatible with. Different versions of Mac OS X support different -# features. For example, CPack can only build component-based installers for -# Mac OS X 10.4 or newer, and can only build installers that download -# component son-the-fly for Mac OS X 10.5 or newer. If left blank, this value -# will be set to the minimum version of Mac OS X that supports the requested -# features. Set this variable to some value (e.g., 10.4) only if you want to -# guarantee that your installer will work on that version of Mac OS X, and -# don't mind missing extra features available in the installer shipping with -# later versions of Mac OS X. diff --git a/Modules/CPackProductBuild.cmake b/Modules/CPackProductBuild.cmake deleted file mode 100644 index ee78d8d..0000000 --- a/Modules/CPackProductBuild.cmake +++ /dev/null @@ -1,72 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# CPackProductBuild -# ----------------- -# -# productbuild CPack generator (Mac OS X). -# -# Variables specific to CPack productbuild generator -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# The following variable is specific to installers built on Mac -# OS X using productbuild: -# -# .. variable:: CPACK_COMMAND_PRODUCTBUILD -# -# Path to the productbuild(1) command used to generate a product archive for -# the OS X Installer or Mac App Store. This variable can be used to override -# the automatically detected command (or specify its location if the -# auto-detection fails to find it.) -# -# .. variable:: CPACK_PRODUCTBUILD_IDENTITY_NAME -# -# Adds a digital signature to the resulting package. -# -# -# .. variable:: CPACK_PRODUCTBUILD_KEYCHAIN_PATH -# -# Specify a specific keychain to search for the signing identity. -# -# -# .. variable:: CPACK_COMMAND_PKGBUILD -# -# Path to the pkgbuild(1) command used to generate an OS X component package -# on OS X. This variable can be used to override the automatically detected -# command (or specify its location if the auto-detection fails to find it.) -# -# -# .. variable:: CPACK_PKGBUILD_IDENTITY_NAME -# -# Adds a digital signature to the resulting package. -# -# -# .. variable:: CPACK_PKGBUILD_KEYCHAIN_PATH -# -# Specify a specific keychain to search for the signing identity. -# -# -# .. variable:: CPACK_PREFLIGHT_<COMP>_SCRIPT -# -# Full path to a file that will be used as the ``preinstall`` script for the -# named ``<COMP>`` component's package, where ``<COMP>`` is the uppercased -# component name. No ``preinstall`` script is added if this variable is not -# defined for a given component. -# -# -# .. variable:: CPACK_POSTFLIGHT_<COMP>_SCRIPT -# -# Full path to a file that will be used as the ``postinstall`` script for the -# named ``<COMP>`` component's package, where ``<COMP>`` is the uppercased -# component name. No ``postinstall`` script is added if this variable is not -# defined for a given component. -# -# -# .. variable:: CPACK_PRODUCTBUILD_RESOURCES_DIR -# -# If specified the productbuild generator copies files from this directory -# (including subdirectories) to the ``Resources`` directory. This is done -# before the :variable:`CPACK_RESOURCE_FILE_WELCOME`, -# :variable:`CPACK_RESOURCE_FILE_README`, and -# :variable:`CPACK_RESOURCE_FILE_LICENSE` files are copied. diff --git a/Modules/CPackWIX.cmake b/Modules/CPackWIX.cmake deleted file mode 100644 index 27737e5..0000000 --- a/Modules/CPackWIX.cmake +++ /dev/null @@ -1,307 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#.rst: -# CPackWIX -# -------- -# -# CPack WiX generator specific options -# -# Variables specific to CPack WiX generator -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# The following variables are specific to the installers built on -# Windows using WiX. -# -# .. variable:: CPACK_WIX_UPGRADE_GUID -# -# Upgrade GUID (``Product/@UpgradeCode``) -# -# Will be automatically generated unless explicitly provided. -# -# It should be explicitly set to a constant generated globally unique -# identifier (GUID) to allow your installers to replace existing -# installations that use the same GUID. -# -# You may for example explicitly set this variable in your -# CMakeLists.txt to the value that has been generated per default. You -# should not use GUIDs that you did not generate yourself or which may -# belong to other projects. -# -# A GUID shall have the following fixed length syntax:: -# -# XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -# -# (each X represents an uppercase hexadecimal digit) -# -# .. variable:: CPACK_WIX_PRODUCT_GUID -# -# Product GUID (``Product/@Id``) -# -# Will be automatically generated unless explicitly provided. -# -# If explicitly provided this will set the Product Id of your installer. -# -# The installer will abort if it detects a pre-existing installation that -# uses the same GUID. -# -# The GUID shall use the syntax described for CPACK_WIX_UPGRADE_GUID. -# -# .. variable:: CPACK_WIX_LICENSE_RTF -# -# RTF License File -# -# If CPACK_RESOURCE_FILE_LICENSE has an .rtf extension it is used as-is. -# -# If CPACK_RESOURCE_FILE_LICENSE has an .txt extension it is implicitly -# converted to RTF by the WiX Generator. -# The expected encoding of the .txt file is UTF-8. -# -# With CPACK_WIX_LICENSE_RTF you can override the license file used by the -# WiX Generator in case CPACK_RESOURCE_FILE_LICENSE is in an unsupported -# format or the .txt -> .rtf conversion does not work as expected. -# -# .. variable:: CPACK_WIX_PRODUCT_ICON -# -# The Icon shown next to the program name in Add/Remove programs. -# -# If set, this icon is used in place of the default icon. -# -# .. variable:: CPACK_WIX_UI_REF -# -# This variable allows you to override the Id of the ``<UIRef>`` element -# in the WiX template. -# -# The default is ``WixUI_InstallDir`` in case no CPack components have -# been defined and ``WixUI_FeatureTree`` otherwise. -# -# .. variable:: CPACK_WIX_UI_BANNER -# -# The bitmap will appear at the top of all installer pages other than the -# welcome and completion dialogs. -# -# If set, this image will replace the default banner image. -# -# This image must be 493 by 58 pixels. -# -# .. variable:: CPACK_WIX_UI_DIALOG -# -# Background bitmap used on the welcome and completion dialogs. -# -# If this variable is set, the installer will replace the default dialog -# image. -# -# This image must be 493 by 312 pixels. -# -# .. variable:: CPACK_WIX_PROGRAM_MENU_FOLDER -# -# Start menu folder name for launcher. -# -# If this variable is not set, it will be initialized with CPACK_PACKAGE_NAME -# -# .. variable:: CPACK_WIX_CULTURES -# -# Language(s) of the installer -# -# Languages are compiled into the WixUI extension library. To use them, -# simply provide the name of the culture. If you specify more than one -# culture identifier in a comma or semicolon delimited list, the first one -# that is found will be used. You can find a list of supported languages at: -# http://wix.sourceforge.net/manual-wix3/WixUI_localization.htm -# -# .. variable:: CPACK_WIX_TEMPLATE -# -# Template file for WiX generation -# -# If this variable is set, the specified template will be used to generate -# the WiX wxs file. This should be used if further customization of the -# output is required. -# -# If this variable is not set, the default MSI template included with CMake -# will be used. -# -# .. variable:: CPACK_WIX_PATCH_FILE -# -# Optional list of XML files with fragments to be inserted into -# generated WiX sources -# -# This optional variable can be used to specify an XML file that the -# WiX generator will use to inject fragments into its generated -# source files. -# -# Patch files understood by the CPack WiX generator -# roughly follow this RELAX NG compact schema: -# -# .. code-block:: none -# -# start = CPackWiXPatch -# -# CPackWiXPatch = element CPackWiXPatch { CPackWiXFragment* } -# -# CPackWiXFragment = element CPackWiXFragment -# { -# attribute Id { string }, -# fragmentContent* -# } -# -# fragmentContent = element * - CPackWiXFragment -# { -# (attribute * { text } | text | fragmentContent)* -# } -# -# Currently fragments can be injected into most -# Component, File, Directory and Feature elements. -# -# The following additional special Ids can be used: -# -# * ``#PRODUCT`` for the ``<Product>`` element. -# * ``#PRODUCTFEATURE`` for the root ``<Feature>`` element. -# -# The following example illustrates how this works. -# -# Given that the WiX generator creates the following XML element: -# -# .. code-block:: xml -# -# <Component Id="CM_CP_applications.bin.my_libapp.exe" Guid="*"/> -# -# The following XML patch file may be used to inject an Environment element -# into it: -# -# .. code-block:: xml -# -# <CPackWiXPatch> -# <CPackWiXFragment Id="CM_CP_applications.bin.my_libapp.exe"> -# <Environment Id="MyEnvironment" Action="set" -# Name="MyVariableName" Value="MyVariableValue"/> -# </CPackWiXFragment> -# </CPackWiXPatch> -# -# .. variable:: CPACK_WIX_EXTRA_SOURCES -# -# Extra WiX source files -# -# This variable provides an optional list of extra WiX source files (.wxs) -# that should be compiled and linked. The full path to source files is -# required. -# -# .. variable:: CPACK_WIX_EXTRA_OBJECTS -# -# Extra WiX object files or libraries -# -# This variable provides an optional list of extra WiX object (.wixobj) -# and/or WiX library (.wixlib) files. The full path to objects and libraries -# is required. -# -# .. variable:: CPACK_WIX_EXTENSIONS -# -# This variable provides a list of additional extensions for the WiX -# tools light and candle. -# -# .. variable:: CPACK_WIX_<TOOL>_EXTENSIONS -# -# This is the tool specific version of CPACK_WIX_EXTENSIONS. -# ``<TOOL>`` can be either LIGHT or CANDLE. -# -# .. variable:: CPACK_WIX_<TOOL>_EXTRA_FLAGS -# -# This list variable allows you to pass additional -# flags to the WiX tool ``<TOOL>``. -# -# Use it at your own risk. -# Future versions of CPack may generate flags which may be in conflict -# with your own flags. -# -# ``<TOOL>`` can be either LIGHT or CANDLE. -# -# .. variable:: CPACK_WIX_CMAKE_PACKAGE_REGISTRY -# -# If this variable is set the generated installer will create -# an entry in the windows registry key -# ``HKEY_LOCAL_MACHINE\Software\Kitware\CMake\Packages\<package>`` -# The value for ``<package>`` is provided by this variable. -# -# Assuming you also install a CMake configuration file this will -# allow other CMake projects to find your package with -# the :command:`find_package` command. -# -# .. variable:: CPACK_WIX_PROPERTY_<PROPERTY> -# -# This variable can be used to provide a value for -# the Windows Installer property ``<PROPERTY>`` -# -# The following list contains some example properties that can be used to -# customize information under -# "Programs and Features" (also known as "Add or Remove Programs") -# -# * ARPCOMMENTS - Comments -# * ARPHELPLINK - Help and support information URL -# * ARPURLINFOABOUT - General information URL -# * ARPURLUPDATEINFO - Update information URL -# * ARPHELPTELEPHONE - Help and support telephone number -# * ARPSIZE - Size (in kilobytes) of the application -# -# .. variable:: CPACK_WIX_ROOT_FEATURE_TITLE -# -# Sets the name of the root install feature in the WIX installer. Same as -# CPACK_COMPONENT_<compName>_DISPLAY_NAME for components. -# -# .. variable:: CPACK_WIX_ROOT_FEATURE_DESCRIPTION -# -# Sets the description of the root install feature in the WIX installer. Same as -# CPACK_COMPONENT_<compName>_DESCRIPTION for components. -# -# .. variable:: CPACK_WIX_SKIP_PROGRAM_FOLDER -# -# If this variable is set to true, the default install location -# of the generated package will be CPACK_PACKAGE_INSTALL_DIRECTORY directly. -# The install location will not be located relatively below -# ProgramFiles or ProgramFiles64. -# -# .. note:: -# Installers created with this feature do not take differences -# between the system on which the installer is created -# and the system on which the installer might be used into account. -# -# It is therefore possible that the installer e.g. might try to install -# onto a drive that is unavailable or unintended or a path that does not -# follow the localization or convention of the system on which the -# installation is performed. -# -# .. variable:: CPACK_WIX_ROOT_FOLDER_ID -# -# This variable allows specification of a custom root folder ID. -# The generator specific ``<64>`` token can be used for -# folder IDs that come in 32-bit and 64-bit variants. -# In 32-bit builds the token will expand empty while in 64-bit builds -# it will expand to ``64``. -# -# When unset generated installers will default installing to -# ``ProgramFiles<64>Folder``. -# -# .. variable:: CPACK_WIX_ROOT -# -# This variable can optionally be set to the root directory -# of a custom WiX Toolset installation. -# -# When unspecified CPack will try to locate a WiX Toolset -# installation via the ``WIX`` environment variable instead. -# - -if(NOT CPACK_WIX_ROOT) - string(REPLACE "\\" "/" CPACK_WIX_ROOT "$ENV{WIX}") -endif() - -find_program(CPACK_WIX_CANDLE_EXECUTABLE candle - PATHS "${CPACK_WIX_ROOT}" PATH_SUFFIXES "bin") - -if(NOT CPACK_WIX_CANDLE_EXECUTABLE) - message(FATAL_ERROR "Could not find the WiX candle executable.") -endif() - -find_program(CPACK_WIX_LIGHT_EXECUTABLE light - PATHS "${CPACK_WIX_ROOT}" PATH_SUFFIXES "bin") - -if(NOT CPACK_WIX_LIGHT_EXECUTABLE) - message(FATAL_ERROR "Could not find the WiX light executable.") -endif() diff --git a/Modules/CSharpUtilities.cmake b/Modules/CSharpUtilities.cmake index e9e1510..6a4b5c7 100644 --- a/Modules/CSharpUtilities.cmake +++ b/Modules/CSharpUtilities.cmake @@ -184,6 +184,9 @@ Helper functions which are used by the above ones #]=======================================================================] +cmake_policy(PUSH) +cmake_policy(SET CMP0057 NEW) # if IN_LIST + function(csharp_get_filename_keys OUT) set(${OUT} "") foreach(f ${ARGN}) @@ -304,3 +307,5 @@ function(csharp_set_xaml_cs_properties) endif() endforeach() endfunction() + +cmake_policy(POP) diff --git a/Modules/CTestCoverageCollectGCOV.cmake b/Modules/CTestCoverageCollectGCOV.cmake index 1203be4..2258271 100644 --- a/Modules/CTestCoverageCollectGCOV.cmake +++ b/Modules/CTestCoverageCollectGCOV.cmake @@ -1,69 +1,70 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CTestCoverageCollectGCOV -# ------------------------ -# -# This module provides the ``ctest_coverage_collect_gcov`` function. -# -# This function runs gcov on all .gcda files found in the binary tree -# and packages the resulting .gcov files into a tar file. -# This tarball also contains the following: -# -# * *data.json* defines the source and build directories for use by CDash. -# * *Labels.json* indicates any :prop_sf:`LABELS` that have been set on the -# source files. -# * The *uncovered* directory holds any uncovered files found by -# :variable:`CTEST_EXTRA_COVERAGE_GLOB`. -# -# After generating this tar file, it can be sent to CDash for display with the -# :command:`ctest_submit(CDASH_UPLOAD)` command. -# -# .. command:: cdash_coverage_collect_gcov -# -# :: -# -# ctest_coverage_collect_gcov(TARBALL <tarfile> -# [SOURCE <source_dir>][BUILD <build_dir>] -# [GCOV_COMMAND <gcov_command>] -# [GCOV_OPTIONS <options>...] -# ) -# -# Run gcov and package a tar file for CDash. The options are: -# -# ``TARBALL <tarfile>`` -# Specify the location of the ``.tar`` file to be created for later -# upload to CDash. Relative paths will be interpreted with respect -# to the top-level build directory. -# -# ``SOURCE <source_dir>`` -# Specify the top-level source directory for the build. -# Default is the value of :variable:`CTEST_SOURCE_DIRECTORY`. -# -# ``BUILD <build_dir>`` -# Specify the top-level build directory for the build. -# Default is the value of :variable:`CTEST_BINARY_DIRECTORY`. -# -# ``GCOV_COMMAND <gcov_command>`` -# Specify the full path to the ``gcov`` command on the machine. -# Default is the value of :variable:`CTEST_COVERAGE_COMMAND`. -# -# ``GCOV_OPTIONS <options>...`` -# Specify options to be passed to gcov. The ``gcov`` command -# is run as ``gcov <options>... -o <gcov-dir> <file>.gcda``. -# If not specified, the default option is just ``-b``. -# -# ``GLOB`` -# Recursively search for .gcda files in build_dir rather than -# determining search locations by reading TargetDirectories.txt. -# -# ``DELETE`` -# Delete coverage files after they've been packaged into the .tar. -# -# ``QUIET`` -# Suppress non-error messages that otherwise would have been -# printed out by this function. +#[=======================================================================[.rst: +CTestCoverageCollectGCOV +------------------------ + +This module provides the ``ctest_coverage_collect_gcov`` function. + +This function runs gcov on all .gcda files found in the binary tree +and packages the resulting .gcov files into a tar file. +This tarball also contains the following: + +* *data.json* defines the source and build directories for use by CDash. +* *Labels.json* indicates any :prop_sf:`LABELS` that have been set on the + source files. +* The *uncovered* directory holds any uncovered files found by + :variable:`CTEST_EXTRA_COVERAGE_GLOB`. + +After generating this tar file, it can be sent to CDash for display with the +:command:`ctest_submit(CDASH_UPLOAD)` command. + +.. command:: cdash_coverage_collect_gcov + + :: + + ctest_coverage_collect_gcov(TARBALL <tarfile> + [SOURCE <source_dir>][BUILD <build_dir>] + [GCOV_COMMAND <gcov_command>] + [GCOV_OPTIONS <options>...] + ) + + Run gcov and package a tar file for CDash. The options are: + + ``TARBALL <tarfile>`` + Specify the location of the ``.tar`` file to be created for later + upload to CDash. Relative paths will be interpreted with respect + to the top-level build directory. + + ``SOURCE <source_dir>`` + Specify the top-level source directory for the build. + Default is the value of :variable:`CTEST_SOURCE_DIRECTORY`. + + ``BUILD <build_dir>`` + Specify the top-level build directory for the build. + Default is the value of :variable:`CTEST_BINARY_DIRECTORY`. + + ``GCOV_COMMAND <gcov_command>`` + Specify the full path to the ``gcov`` command on the machine. + Default is the value of :variable:`CTEST_COVERAGE_COMMAND`. + + ``GCOV_OPTIONS <options>...`` + Specify options to be passed to gcov. The ``gcov`` command + is run as ``gcov <options>... -o <gcov-dir> <file>.gcda``. + If not specified, the default option is just ``-b``. + + ``GLOB`` + Recursively search for .gcda files in build_dir rather than + determining search locations by reading TargetDirectories.txt. + + ``DELETE`` + Delete coverage files after they've been packaged into the .tar. + + ``QUIET`` + Suppress non-error messages that otherwise would have been + printed out by this function. +#]=======================================================================] function(ctest_coverage_collect_gcov) set(options QUIET GLOB DELETE) diff --git a/Modules/CTestScriptMode.cmake b/Modules/CTestScriptMode.cmake index 5be78d5..7af3577 100644 --- a/Modules/CTestScriptMode.cmake +++ b/Modules/CTestScriptMode.cmake @@ -1,13 +1,14 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CTestScriptMode -# --------------- -# -# -# -# This file is read by ctest in script mode (-S) +#[=======================================================================[.rst: +CTestScriptMode +--------------- + + + +This file is read by ctest in script mode (-S) +#]=======================================================================] # Determine the current system, so this information can be used # in ctest scripts diff --git a/Modules/CTestUseLaunchers.cmake b/Modules/CTestUseLaunchers.cmake index dc90513..3dff926 100644 --- a/Modules/CTestUseLaunchers.cmake +++ b/Modules/CTestUseLaunchers.cmake @@ -1,32 +1,33 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CTestUseLaunchers -# ----------------- -# -# Set the RULE_LAUNCH_* global properties when CTEST_USE_LAUNCHERS is on. -# -# CTestUseLaunchers is automatically included when you include(CTest). -# However, it is split out into its own module file so projects can use -# the CTEST_USE_LAUNCHERS functionality independently. -# -# To use launchers, set CTEST_USE_LAUNCHERS to ON in a ctest -S -# dashboard script, and then also set it in the cache of the configured -# project. Both cmake and ctest need to know the value of it for the -# launchers to work properly. CMake needs to know in order to generate -# proper build rules, and ctest, in order to produce the proper error -# and warning analysis. -# -# For convenience, you may set the ENV variable -# CTEST_USE_LAUNCHERS_DEFAULT in your ctest -S script, too. Then, as -# long as your CMakeLists uses include(CTest) or -# include(CTestUseLaunchers), it will use the value of the ENV variable -# to initialize a CTEST_USE_LAUNCHERS cache variable. This cache -# variable initialization only occurs if CTEST_USE_LAUNCHERS is not -# already defined. If CTEST_USE_LAUNCHERS is on in a ctest -S script -# the ctest_configure command will add -DCTEST_USE_LAUNCHERS:BOOL=TRUE -# to the cmake command used to configure the project. +#[=======================================================================[.rst: +CTestUseLaunchers +----------------- + +Set the RULE_LAUNCH_* global properties when CTEST_USE_LAUNCHERS is on. + +CTestUseLaunchers is automatically included when you include(CTest). +However, it is split out into its own module file so projects can use +the CTEST_USE_LAUNCHERS functionality independently. + +To use launchers, set CTEST_USE_LAUNCHERS to ON in a ctest -S +dashboard script, and then also set it in the cache of the configured +project. Both cmake and ctest need to know the value of it for the +launchers to work properly. CMake needs to know in order to generate +proper build rules, and ctest, in order to produce the proper error +and warning analysis. + +For convenience, you may set the ENV variable +CTEST_USE_LAUNCHERS_DEFAULT in your ctest -S script, too. Then, as +long as your CMakeLists uses include(CTest) or +include(CTestUseLaunchers), it will use the value of the ENV variable +to initialize a CTEST_USE_LAUNCHERS cache variable. This cache +variable initialization only occurs if CTEST_USE_LAUNCHERS is not +already defined. If CTEST_USE_LAUNCHERS is on in a ctest -S script +the ctest_configure command will add -DCTEST_USE_LAUNCHERS:BOOL=TRUE +to the cmake command used to configure the project. +#]=======================================================================] if(NOT DEFINED CTEST_USE_LAUNCHERS AND DEFINED ENV{CTEST_USE_LAUNCHERS_DEFAULT}) set(CTEST_USE_LAUNCHERS "$ENV{CTEST_USE_LAUNCHERS_DEFAULT}" diff --git a/Modules/CheckCCompilerFlag.cmake b/Modules/CheckCCompilerFlag.cmake index 9d2c74d..f5c1127 100644 --- a/Modules/CheckCCompilerFlag.cmake +++ b/Modules/CheckCCompilerFlag.cmake @@ -9,7 +9,7 @@ Check whether the C compiler supports a given flag. .. command:: check_c_compiler_flag - :: + .. code-block:: cmake check_c_compiler_flag(<flag> <var>) diff --git a/Modules/CheckCSourceCompiles.cmake b/Modules/CheckCSourceCompiles.cmake index 114213a..5b0b70e 100644 --- a/Modules/CheckCSourceCompiles.cmake +++ b/Modules/CheckCSourceCompiles.cmake @@ -9,15 +9,16 @@ Check if given C source compiles and links into an executable. .. command:: check_c_source_compiles - :: + .. code-block:: cmake - check_c_source_compiles(code resultVar [FAIL_REGEX regex1 [regex2...]]) + check_c_source_compiles(<code> <resultVar> + [FAIL_REGEX <regex1> [<regex2>...]]) - Check that the source supplied in ``code`` can be compiled as a C source + Check that the source supplied in ``<code>`` can be compiled as a C source file and linked as an executable (so it must contain at least a ``main()`` function). The result will be stored in the internal cache variable specified - by ``resultVar``, with a boolean true value for success and boolean false for - failure. If ``FAIL_REGEX`` is provided, then failure is determined by + by ``<resultVar>``, with a boolean true value for success and boolean false + for failure. If ``FAIL_REGEX`` is provided, then failure is determined by checking if anything in the output matches any of the specified regular expressions. @@ -34,7 +35,7 @@ Check if given C source compiles and links into an executable. ``CMAKE_REQUIRED_DEFINITIONS`` A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by - ``resultVar`` will also be added automatically. + ``<resultVar>`` will also be added automatically. ``CMAKE_REQUIRED_INCLUDES`` A :ref:`;-list <CMake Language Lists>` of header search paths to pass to @@ -53,10 +54,10 @@ Check if given C source compiles and links into an executable. associated with the check will be suppressed. The check is only performed once, with the result cached in the variable - named by ``resultVar``. Every subsequent CMake run will re-use this cached - value rather than performing the check again, even if the ``code`` changes. + named by ``<resultVar>``. Every subsequent CMake run will re-use this cached + value rather than performing the check again, even if the ``<code>`` changes. In order to force the check to be re-evaluated, the variable named by - ``resultVar`` must be manually removed from the cache. + ``<resultVar>`` must be manually removed from the cache. #]=======================================================================] @@ -131,4 +132,3 @@ macro(CHECK_C_SOURCE_COMPILES SOURCE VAR) endif() endif() endmacro() - diff --git a/Modules/CheckCSourceRuns.cmake b/Modules/CheckCSourceRuns.cmake index 7eb050c..e682b29 100644 --- a/Modules/CheckCSourceRuns.cmake +++ b/Modules/CheckCSourceRuns.cmake @@ -10,16 +10,16 @@ subsequently be run. .. command:: check_c_source_runs - :: + .. code-block:: cmake - check_c_source_runs(code resultVar) + check_c_source_runs(<code> <resultVar>) - Check that the source supplied in ``code`` can be compiled as a C source - file, linked as an executable and then run. The ``code`` must contain at - least a ``main()`` function. If the code could be built and run successfully, - the internal cache variable specified by ``resultVar`` will be set to 1, - otherwise it will be set to an value that evaluates to boolean false (e.g. - an empty string or an error message). + Check that the source supplied in ``<code>`` can be compiled as a C source + file, linked as an executable and then run. The ``<code>`` must contain at + least a ``main()`` function. If the ``<code>`` could be built and run + successfully, the internal cache variable specified by ``<resultVar>`` will + be set to 1, otherwise it will be set to an value that evaluates to boolean + false (e.g. an empty string or an error message). The underlying check is performed by the :command:`try_run` command. The compile and link commands can be influenced by setting any of the following @@ -34,7 +34,7 @@ subsequently be run. ``CMAKE_REQUIRED_DEFINITIONS`` A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by - ``resultVar`` will also be added automatically. + ``<resultVar>`` will also be added automatically. ``CMAKE_REQUIRED_INCLUDES`` A :ref:`;-list <CMake Language Lists>` of header search paths to pass to @@ -53,10 +53,10 @@ subsequently be run. associated with the check will be suppressed. The check is only performed once, with the result cached in the variable - named by ``resultVar``. Every subsequent CMake run will re-use this cached - value rather than performing the check again, even if the ``code`` changes. + named by ``<resultVar>``. Every subsequent CMake run will re-use this cached + value rather than performing the check again, even if the ``<code>`` changes. In order to force the check to be re-evaluated, the variable named by - ``resultVar`` must be manually removed from the cache. + ``<resultVar>`` must be manually removed from the cache. #]=======================================================================] @@ -132,4 +132,3 @@ macro(CHECK_C_SOURCE_RUNS SOURCE VAR) endif() endif() endmacro() - diff --git a/Modules/CheckCXXCompilerFlag.cmake b/Modules/CheckCXXCompilerFlag.cmake index dd60835..a01e142 100644 --- a/Modules/CheckCXXCompilerFlag.cmake +++ b/Modules/CheckCXXCompilerFlag.cmake @@ -9,7 +9,7 @@ Check whether the CXX compiler supports a given flag. .. command:: check_cxx_compiler_flag - :: + .. code-block:: cmake check_cxx_compiler_flag(<flag> <var>) @@ -61,4 +61,3 @@ macro (CHECK_CXX_COMPILER_FLAG _FLAG _RESULT) set (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}") endmacro () - diff --git a/Modules/CheckCXXSourceCompiles.cmake b/Modules/CheckCXXSourceCompiles.cmake index ed8661b..f7ec8eb 100644 --- a/Modules/CheckCXXSourceCompiles.cmake +++ b/Modules/CheckCXXSourceCompiles.cmake @@ -9,15 +9,16 @@ Check if given C++ source compiles and links into an executable. .. command:: check_cxx_source_compiles - :: + .. code-block:: cmake - check_cxx_source_compiles(code resultVar [FAIL_REGEX regex1 [regex2...]]) + check_cxx_source_compiles(<code> <resultVar> + [FAIL_REGEX <regex1> [<regex2>...]]) - Check that the source supplied in ``code`` can be compiled as a C++ source + Check that the source supplied in ``<code>`` can be compiled as a C++ source file and linked as an executable (so it must contain at least a ``main()`` function). The result will be stored in the internal cache variable specified - by ``resultVar``, with a boolean true value for success and boolean false for - failure. If ``FAIL_REGEX`` is provided, then failure is determined by + by ``<resultVar>``, with a boolean true value for success and boolean false + for failure. If ``FAIL_REGEX`` is provided, then failure is determined by checking if anything in the output matches any of the specified regular expressions. @@ -34,7 +35,7 @@ Check if given C++ source compiles and links into an executable. ``CMAKE_REQUIRED_DEFINITIONS`` A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by - ``resultVar`` will also be added automatically. + ``<resultVar>`` will also be added automatically. ``CMAKE_REQUIRED_INCLUDES`` A :ref:`;-list <CMake Language Lists>` of header search paths to pass to @@ -53,10 +54,10 @@ Check if given C++ source compiles and links into an executable. associated with the check will be suppressed. The check is only performed once, with the result cached in the variable - named by ``resultVar``. Every subsequent CMake run will re-use this cached - value rather than performing the check again, even if the ``code`` changes. + named by ``<resultVar>``. Every subsequent CMake run will re-use this cached + value rather than performing the check again, even if the ``<code>`` changes. In order to force the check to be re-evaluated, the variable named by - ``resultVar`` must be manually removed from the cache. + ``<resultVar>`` must be manually removed from the cache. #]=======================================================================] @@ -132,4 +133,3 @@ macro(CHECK_CXX_SOURCE_COMPILES SOURCE VAR) endif() endif() endmacro() - diff --git a/Modules/CheckCXXSourceRuns.cmake b/Modules/CheckCXXSourceRuns.cmake index 83bf2f2..bdc2291 100644 --- a/Modules/CheckCXXSourceRuns.cmake +++ b/Modules/CheckCXXSourceRuns.cmake @@ -10,16 +10,16 @@ subsequently be run. .. command:: check_cxx_source_runs - :: + .. code-block:: cmake - check_cxx_source_runs(code resultVar) + check_cxx_source_runs(<code> <resultVar>) - Check that the source supplied in ``code`` can be compiled as a C++ source - file, linked as an executable and then run. The ``code`` must contain at - least a ``main()`` function. If the code could be built and run successfully, - the internal cache variable specified by ``resultVar`` will be set to 1, - otherwise it will be set to an value that evaluates to boolean false (e.g. - an empty string or an error message). + Check that the source supplied in ``<code>`` can be compiled as a C++ source + file, linked as an executable and then run. The ``<code>`` must contain at + least a ``main()`` function. If the ``<code>`` could be built and run + successfully, the internal cache variable specified by ``<resultVar>`` will + be set to 1, otherwise it will be set to an value that evaluates to boolean + false (e.g. an empty string or an error message). The underlying check is performed by the :command:`try_run` command. The compile and link commands can be influenced by setting any of the following @@ -34,7 +34,7 @@ subsequently be run. ``CMAKE_REQUIRED_DEFINITIONS`` A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by - ``resultVar`` will also be added automatically. + ``<resultVar>`` will also be added automatically. ``CMAKE_REQUIRED_INCLUDES`` A :ref:`;-list <CMake Language Lists>` of header search paths to pass to @@ -53,10 +53,10 @@ subsequently be run. associated with the check will be suppressed. The check is only performed once, with the result cached in the variable - named by ``resultVar``. Every subsequent CMake run will re-use this cached - value rather than performing the check again, even if the ``code`` changes. + named by ``<resultVar>``. Every subsequent CMake run will re-use this cached + value rather than performing the check again, even if the ``<code>`` changes. In order to force the check to be re-evaluated, the variable named by - ``resultVar`` must be manually removed from the cache. + ``<resultVar>`` must be manually removed from the cache. #]=======================================================================] @@ -127,4 +127,3 @@ macro(CHECK_CXX_SOURCE_RUNS SOURCE VAR) endif() endif() endmacro() - diff --git a/Modules/CheckCXXSymbolExists.cmake b/Modules/CheckCXXSymbolExists.cmake index 117a458..d067001 100644 --- a/Modules/CheckCXXSymbolExists.cmake +++ b/Modules/CheckCXXSymbolExists.cmake @@ -1,36 +1,42 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckCXXSymbolExists -# -------------------- -# -# Check if a symbol exists as a function, variable, or macro in C++ -# -# CHECK_CXX_SYMBOL_EXISTS(<symbol> <files> <variable>) -# -# Check that the <symbol> is available after including given header -# <files> and store the result in a <variable>. Specify the list of -# files in one argument as a semicolon-separated list. -# CHECK_CXX_SYMBOL_EXISTS() can be used to check in C++ files, as -# opposed to CHECK_SYMBOL_EXISTS(), which works only for C. -# -# If the header files define the symbol as a macro it is considered -# available and assumed to work. If the header files declare the symbol -# as a function or variable then the symbol must also be available for -# linking. If the symbol is a type or enum value it will not be -# recognized (consider using CheckTypeSize or CheckCSourceCompiles). -# -# The following variables may be set before calling this macro to modify -# the way the check is run: -# -# :: -# -# CMAKE_REQUIRED_FLAGS = string of compile command line flags -# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) -# CMAKE_REQUIRED_INCLUDES = list of include directories -# CMAKE_REQUIRED_LIBRARIES = list of libraries to link -# CMAKE_REQUIRED_QUIET = execute quietly without messages +#[=======================================================================[.rst: +CheckCXXSymbolExists +-------------------- + +Check if a symbol exists as a function, variable, or macro in C++ + +.. code-block:: cmake + + CHECK_CXX_SYMBOL_EXISTS(<symbol> <files> <variable>) + +Check that the ``<symbol>`` is available after including given header +``<files>`` and store the result in a ``<variable>``. Specify the list of +files in one argument as a semicolon-separated list. +CHECK_CXX_SYMBOL_EXISTS() can be used to check in C++ files, as +opposed to CHECK_SYMBOL_EXISTS(), which works only for C. + +If the header files define the symbol as a macro it is considered +available and assumed to work. If the header files declare the symbol +as a function or variable then the symbol must also be available for +linking. If the symbol is a type or enum value it will not be +recognized (consider using CheckTypeSize or CheckCSourceCompiles). + +The following variables may be set before calling this macro to modify +the way the check is run: + +``CMAKE_REQUIRED_FLAGS`` + string of compile command line flags +``CMAKE_REQUIRED_DEFINITIONS`` + list of macros to define (-DFOO=bar) +``CMAKE_REQUIRED_INCLUDES`` + list of include directories +``CMAKE_REQUIRED_LIBRARIES`` + list of libraries to link +``CMAKE_REQUIRED_QUIET`` + execute quietly without messages +#]=======================================================================] include_guard(GLOBAL) include(CheckSymbolExists) diff --git a/Modules/CheckFortranCompilerFlag.cmake b/Modules/CheckFortranCompilerFlag.cmake index 2cb2532..299cd8c 100644 --- a/Modules/CheckFortranCompilerFlag.cmake +++ b/Modules/CheckFortranCompilerFlag.cmake @@ -9,7 +9,7 @@ Check whether the Fortran compiler supports a given flag. .. command:: check_fortran_compiler_flag - :: + .. code-block:: cmake check_fortran_compiler_flag(<flag> <var>) diff --git a/Modules/CheckFortranFunctionExists.cmake b/Modules/CheckFortranFunctionExists.cmake index f3ced93..dc371aa 100644 --- a/Modules/CheckFortranFunctionExists.cmake +++ b/Modules/CheckFortranFunctionExists.cmake @@ -1,28 +1,29 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckFortranFunctionExists -# -------------------------- -# -# macro which checks if the Fortran function exists -# -# CHECK_FORTRAN_FUNCTION_EXISTS(FUNCTION VARIABLE) -# -# :: -# -# FUNCTION - the name of the Fortran function -# VARIABLE - variable to store the result -# Will be created as an internal cache variable. -# -# -# -# The following variables may be set before calling this macro to modify -# the way the check is run: -# -# :: -# -# CMAKE_REQUIRED_LIBRARIES = list of libraries to link +#[=======================================================================[.rst: +CheckFortranFunctionExists +-------------------------- + +:command:`Macro <macro>` which checks if a Fortran function exists. + +.. code-block:: cmake + + CHECK_FORTRAN_FUNCTION_EXISTS(<function> <result>) + +where + +``<function>`` + the name of the Fortran function +``<result>`` + variable to store the result; will be created as an internal cache variable. + +The following variables may be set before calling this macro to modify +the way the check is run: + +``CMAKE_REQUIRED_LIBRARIES`` + list of libraries to link +#]=======================================================================] include_guard(GLOBAL) diff --git a/Modules/CheckFortranSourceCompiles.cmake b/Modules/CheckFortranSourceCompiles.cmake index d2b0cca..977b7b4 100644 --- a/Modules/CheckFortranSourceCompiles.cmake +++ b/Modules/CheckFortranSourceCompiles.cmake @@ -9,23 +9,24 @@ Check if given Fortran source compiles and links into an executable. .. command:: check_fortran_source_compiles - :: + .. code-block:: cmake - check_fortran_source_compiles(code resultVar - [FAIL_REGEX regex1 [regex2...]] - [SRC_EXT ext] + check_fortran_source_compiles(<code> <resultVar> + [FAIL_REGEX <regex>...] + [SRC_EXT <extension>] ) - Check that the source supplied in ``code`` can be compiled as a Fortran + Checks that the source supplied in ``<code>`` can be compiled as a Fortran source file and linked as an executable (so it must contain at least a ``PROGRAM`` entry point). The result will be stored in the internal cache - variable specified by ``resultVar``, with a boolean true value for success - and boolean false for failure. If ``FAIL_REGEX`` is provided, then failure is - determined by checking if anything in the output matches any of the specified - regular expressions. + variable ``<resultVar>``, with a boolean true value for success and boolean + false for failure. + + If ``FAIL_REGEX`` is provided, then failure is determined by checking + if anything in the output matches any of the specified regular expressions. By default, the test source file will be given a ``.F`` file extension. The - ``SRC_EXT`` option can be used to override this with ``.ext`` instead. + ``SRC_EXT`` option can be used to override this with ``.<extension>`` instead. The underlying check is performed by the :command:`try_compile` command. The compile and link commands can be influenced by setting any of the following @@ -40,7 +41,7 @@ Check if given Fortran source compiles and links into an executable. ``CMAKE_REQUIRED_DEFINITIONS`` A :ref:`;-list <CMake Language Lists>` of compiler definitions of the form ``-DFOO`` or ``-DFOO=bar``. A definition for the name specified by - ``resultVar`` will also be added automatically. + ``<resultVar>`` will also be added automatically. ``CMAKE_REQUIRED_INCLUDES`` A :ref:`;-list <CMake Language Lists>` of header search paths to pass to @@ -59,10 +60,10 @@ Check if given Fortran source compiles and links into an executable. associated with the check will be suppressed. The check is only performed once, with the result cached in the variable - named by ``resultVar``. Every subsequent CMake run will re-use this cached - value rather than performing the check again, even if the ``code`` changes. + named by ``<resultVar>``. Every subsequent CMake run will re-use this cached + value rather than performing the check again, even if the ``<code>`` changes. In order to force the check to be re-evaluated, the variable named by - ``resultVar`` must be manually removed from the cache. + ``<resultVar>`` must be manually removed from the cache. #]=======================================================================] diff --git a/Modules/CheckFunctionExists.cmake b/Modules/CheckFunctionExists.cmake index d00aa8a..cbec739 100644 --- a/Modules/CheckFunctionExists.cmake +++ b/Modules/CheckFunctionExists.cmake @@ -1,42 +1,48 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckFunctionExists -# ------------------- -# -# Check if a C function can be linked:: -# -# check_function_exists(<function> <variable>) -# -# Check that the ``<function>`` is provided by libraries on the system and store -# the result in a ``<variable>``. ``<variable>`` will be created as an internal -# cache variable. -# -# The following variables may be set before calling this macro to modify the -# way the check is run: -# -# :: -# -# CMAKE_REQUIRED_FLAGS = string of compile command line flags -# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) -# CMAKE_REQUIRED_INCLUDES = list of include directories -# CMAKE_REQUIRED_LIBRARIES = list of libraries to link -# CMAKE_REQUIRED_QUIET = execute quietly without messages -# -# .. note:: -# -# Prefer using :Module:`CheckSymbolExists` instead of this module, -# for the following reasons: -# -# * ``check_function_exists()`` can't detect functions that are inlined -# in headers or specified as a macro. -# -# * ``check_function_exists()`` can't detect anything in the 32-bit -# versions of the Win32 API, because of a mismatch in calling conventions. -# -# * ``check_function_exists()`` only verifies linking, it does not verify -# that the function is declared in system headers. +#[=======================================================================[.rst: +CheckFunctionExists +------------------- + +Check if a C function can be linked + +.. code-block:: cmake + + check_function_exists(<function> <variable>) + +Checks that the ``<function>`` is provided by libraries on the system and store +the result in a ``<variable>``, which will be created as an internal +cache variable. + +The following variables may be set before calling this macro to modify the +way the check is run: + +``CMAKE_REQUIRED_FLAGS`` + string of compile command line flags +``CMAKE_REQUIRED_DEFINITIONS`` + list of macros to define (-DFOO=bar) +``CMAKE_REQUIRED_INCLUDES`` + list of include directories +``CMAKE_REQUIRED_LIBRARIES`` + list of libraries to link +``CMAKE_REQUIRED_QUIET`` + execute quietly without messages + +.. note:: + + Prefer using :Module:`CheckSymbolExists` instead of this module, + for the following reasons: + + * ``check_function_exists()`` can't detect functions that are inlined + in headers or specified as a macro. + + * ``check_function_exists()`` can't detect anything in the 32-bit + versions of the Win32 API, because of a mismatch in calling conventions. + + * ``check_function_exists()`` only verifies linking, it does not verify + that the function is declared in system headers. +#]=======================================================================] include_guard(GLOBAL) diff --git a/Modules/CheckIPOSupported.cmake b/Modules/CheckIPOSupported.cmake index 3344834..ad8852c 100644 --- a/Modules/CheckIPOSupported.cmake +++ b/Modules/CheckIPOSupported.cmake @@ -226,7 +226,7 @@ function(check_ipo_supported) endif() endforeach() - if(CMAKE_GENERATOR MATCHES "^Visual Studio ") + if(CMAKE_GENERATOR MATCHES "^Visual Studio 9 ") _ipo_not_supported("CMake doesn't support IPO for current generator") return() endif() diff --git a/Modules/CheckIncludeFile.cmake b/Modules/CheckIncludeFile.cmake index 24bc349..87dac4f 100644 --- a/Modules/CheckIncludeFile.cmake +++ b/Modules/CheckIncludeFile.cmake @@ -1,40 +1,41 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckIncludeFile -# ---------------- -# -# Provides a macro to check if a header file can be included in ``C``. -# -# .. command:: CHECK_INCLUDE_FILE -# -# :: -# -# CHECK_INCLUDE_FILE(<include> <variable> [<flags>]) -# -# Check if the given ``<include>`` file may be included in a ``C`` -# source file and store the result in an internal cache entry named -# ``<variable>``. The optional third argument may be used to add -# compilation flags to the check (or use ``CMAKE_REQUIRED_FLAGS`` below). -# -# The following variables may be set before calling this macro to modify -# the way the check is run: -# -# ``CMAKE_REQUIRED_FLAGS`` -# string of compile command line flags -# ``CMAKE_REQUIRED_DEFINITIONS`` -# list of macros to define (-DFOO=bar) -# ``CMAKE_REQUIRED_INCLUDES`` -# list of include directories -# ``CMAKE_REQUIRED_LIBRARIES`` -# A list of libraries to link. See policy :policy:`CMP0075`. -# ``CMAKE_REQUIRED_QUIET`` -# execute quietly without messages -# -# See the :module:`CheckIncludeFiles` module to check for multiple headers -# at once. See the :module:`CheckIncludeFileCXX` module to check for headers -# using the ``CXX`` language. +#[=======================================================================[.rst: +CheckIncludeFile +---------------- + +Provides a macro to check if a header file can be included in ``C``. + +.. command:: CHECK_INCLUDE_FILE + + :: + + CHECK_INCLUDE_FILE(<include> <variable> [<flags>]) + + Check if the given ``<include>`` file may be included in a ``C`` + source file and store the result in an internal cache entry named + ``<variable>``. The optional third argument may be used to add + compilation flags to the check (or use ``CMAKE_REQUIRED_FLAGS`` below). + +The following variables may be set before calling this macro to modify +the way the check is run: + +``CMAKE_REQUIRED_FLAGS`` + string of compile command line flags +``CMAKE_REQUIRED_DEFINITIONS`` + list of macros to define (-DFOO=bar) +``CMAKE_REQUIRED_INCLUDES`` + list of include directories +``CMAKE_REQUIRED_LIBRARIES`` + A list of libraries to link. See policy :policy:`CMP0075`. +``CMAKE_REQUIRED_QUIET`` + execute quietly without messages + +See the :module:`CheckIncludeFiles` module to check for multiple headers +at once. See the :module:`CheckIncludeFileCXX` module to check for headers +using the ``CXX`` language. +#]=======================================================================] include_guard(GLOBAL) diff --git a/Modules/CheckIncludeFileCXX.cmake b/Modules/CheckIncludeFileCXX.cmake index f13d983..42b5eaf 100644 --- a/Modules/CheckIncludeFileCXX.cmake +++ b/Modules/CheckIncludeFileCXX.cmake @@ -1,39 +1,40 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckIncludeFileCXX -# ------------------- -# -# Provides a macro to check if a header file can be included in ``CXX``. -# -# .. command:: CHECK_INCLUDE_FILE_CXX -# -# :: -# -# CHECK_INCLUDE_FILE_CXX(<include> <variable> [<flags>]) -# -# Check if the given ``<include>`` file may be included in a ``CXX`` -# source file and store the result in an internal cache entry named -# ``<variable>``. The optional third argument may be used to add -# compilation flags to the check (or use ``CMAKE_REQUIRED_FLAGS`` below). -# -# The following variables may be set before calling this macro to modify -# the way the check is run: -# -# ``CMAKE_REQUIRED_FLAGS`` -# string of compile command line flags -# ``CMAKE_REQUIRED_DEFINITIONS`` -# list of macros to define (-DFOO=bar) -# ``CMAKE_REQUIRED_INCLUDES`` -# list of include directories -# ``CMAKE_REQUIRED_LIBRARIES`` -# A list of libraries to link. See policy :policy:`CMP0075`. -# ``CMAKE_REQUIRED_QUIET`` -# execute quietly without messages -# -# See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFiles` -# to check for one or more ``C`` headers. +#[=======================================================================[.rst: +CheckIncludeFileCXX +------------------- + +Provides a macro to check if a header file can be included in ``CXX``. + +.. command:: CHECK_INCLUDE_FILE_CXX + + :: + + CHECK_INCLUDE_FILE_CXX(<include> <variable> [<flags>]) + + Check if the given ``<include>`` file may be included in a ``CXX`` + source file and store the result in an internal cache entry named + ``<variable>``. The optional third argument may be used to add + compilation flags to the check (or use ``CMAKE_REQUIRED_FLAGS`` below). + +The following variables may be set before calling this macro to modify +the way the check is run: + +``CMAKE_REQUIRED_FLAGS`` + string of compile command line flags +``CMAKE_REQUIRED_DEFINITIONS`` + list of macros to define (-DFOO=bar) +``CMAKE_REQUIRED_INCLUDES`` + list of include directories +``CMAKE_REQUIRED_LIBRARIES`` + A list of libraries to link. See policy :policy:`CMP0075`. +``CMAKE_REQUIRED_QUIET`` + execute quietly without messages + +See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFiles` +to check for one or more ``C`` headers. +#]=======================================================================] include_guard(GLOBAL) diff --git a/Modules/CheckIncludeFiles.cmake b/Modules/CheckIncludeFiles.cmake index c689f05..b303260 100644 --- a/Modules/CheckIncludeFiles.cmake +++ b/Modules/CheckIncludeFiles.cmake @@ -1,45 +1,46 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckIncludeFiles -# ----------------- -# -# Provides a macro to check if a list of one or more header files can -# be included together. -# -# .. command:: CHECK_INCLUDE_FILES -# -# :: -# -# CHECK_INCLUDE_FILES("<includes>" <variable> [LANGUAGE <language>]) -# -# Check if the given ``<includes>`` list may be included together -# in a source file and store the result in an internal cache -# entry named ``<variable>``. Specify the ``<includes>`` argument -# as a :ref:`;-list <CMake Language Lists>` of header file names. -# -# If LANGUAGE is set, the specified compiler will be used to perform the -# check. Acceptable values are ``C`` and ``CXX``. If not set, the C compiler -# will be used if enabled. If the C compiler is not enabled, the C++ -# compiler will be used if enabled. -# -# The following variables may be set before calling this macro to modify -# the way the check is run: -# -# ``CMAKE_REQUIRED_FLAGS`` -# string of compile command line flags -# ``CMAKE_REQUIRED_DEFINITIONS`` -# list of macros to define (-DFOO=bar) -# ``CMAKE_REQUIRED_INCLUDES`` -# list of include directories -# ``CMAKE_REQUIRED_LIBRARIES`` -# A list of libraries to link. See policy :policy:`CMP0075`. -# ``CMAKE_REQUIRED_QUIET`` -# execute quietly without messages -# -# See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFileCXX` -# to check for a single header file in ``C`` or ``CXX`` languages. +#[=======================================================================[.rst: +CheckIncludeFiles +----------------- + +Provides a macro to check if a list of one or more header files can +be included together. + +.. command:: CHECK_INCLUDE_FILES + + :: + + CHECK_INCLUDE_FILES("<includes>" <variable> [LANGUAGE <language>]) + + Check if the given ``<includes>`` list may be included together + in a source file and store the result in an internal cache + entry named ``<variable>``. Specify the ``<includes>`` argument + as a :ref:`;-list <CMake Language Lists>` of header file names. + +If LANGUAGE is set, the specified compiler will be used to perform the +check. Acceptable values are ``C`` and ``CXX``. If not set, the C compiler +will be used if enabled. If the C compiler is not enabled, the C++ +compiler will be used if enabled. + +The following variables may be set before calling this macro to modify +the way the check is run: + +``CMAKE_REQUIRED_FLAGS`` + string of compile command line flags +``CMAKE_REQUIRED_DEFINITIONS`` + list of macros to define (-DFOO=bar) +``CMAKE_REQUIRED_INCLUDES`` + list of include directories +``CMAKE_REQUIRED_LIBRARIES`` + A list of libraries to link. See policy :policy:`CMP0075`. +``CMAKE_REQUIRED_QUIET`` + execute quietly without messages + +See modules :module:`CheckIncludeFile` and :module:`CheckIncludeFileCXX` +to check for a single header file in ``C`` or ``CXX`` languages. +#]=======================================================================] include_guard(GLOBAL) diff --git a/Modules/CheckLanguage.cmake b/Modules/CheckLanguage.cmake index ce92bfe..efa88bd 100644 --- a/Modules/CheckLanguage.cmake +++ b/Modules/CheckLanguage.cmake @@ -1,35 +1,36 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckLanguage -# ------------- -# -# Check if a language can be enabled -# -# Usage: -# -# :: -# -# check_language(<lang>) -# -# where <lang> is a language that may be passed to enable_language() -# such as "Fortran". If CMAKE_<lang>_COMPILER is already defined the -# check does nothing. Otherwise it tries enabling the language in a -# test project. The result is cached in CMAKE_<lang>_COMPILER as the -# compiler that was found, or NOTFOUND if the language cannot be -# enabled. -# -# Example: -# -# :: -# -# check_language(Fortran) -# if(CMAKE_Fortran_COMPILER) -# enable_language(Fortran) -# else() -# message(STATUS "No Fortran support") -# endif() +#[=======================================================================[.rst: +CheckLanguage +------------- + +Check if a language can be enabled + +Usage: + +:: + + check_language(<lang>) + +where <lang> is a language that may be passed to enable_language() +such as "Fortran". If CMAKE_<lang>_COMPILER is already defined the +check does nothing. Otherwise it tries enabling the language in a +test project. The result is cached in CMAKE_<lang>_COMPILER as the +compiler that was found, or NOTFOUND if the language cannot be +enabled. + +Example: + +:: + + check_language(Fortran) + if(CMAKE_Fortran_COMPILER) + enable_language(Fortran) + else() + message(STATUS "No Fortran support") + endif() +#]=======================================================================] include_guard(GLOBAL) diff --git a/Modules/CheckLibraryExists.cmake b/Modules/CheckLibraryExists.cmake index 487cc59..428a6b0 100644 --- a/Modules/CheckLibraryExists.cmake +++ b/Modules/CheckLibraryExists.cmake @@ -1,33 +1,34 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckLibraryExists -# ------------------ -# -# Check if the function exists. -# -# CHECK_LIBRARY_EXISTS (LIBRARY FUNCTION LOCATION VARIABLE) -# -# :: -# -# LIBRARY - the name of the library you are looking for -# FUNCTION - the name of the function -# LOCATION - location where the library should be found -# VARIABLE - variable to store the result -# Will be created as an internal cache variable. -# -# -# -# The following variables may be set before calling this macro to modify -# the way the check is run: -# -# :: -# -# CMAKE_REQUIRED_FLAGS = string of compile command line flags -# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) -# CMAKE_REQUIRED_LIBRARIES = list of libraries to link -# CMAKE_REQUIRED_QUIET = execute quietly without messages +#[=======================================================================[.rst: +CheckLibraryExists +------------------ + +Check if the function exists. + +CHECK_LIBRARY_EXISTS (LIBRARY FUNCTION LOCATION VARIABLE) + +:: + + LIBRARY - the name of the library you are looking for + FUNCTION - the name of the function + LOCATION - location where the library should be found + VARIABLE - variable to store the result + Will be created as an internal cache variable. + + + +The following variables may be set before calling this macro to modify +the way the check is run: + +:: + + CMAKE_REQUIRED_FLAGS = string of compile command line flags + CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) + CMAKE_REQUIRED_LIBRARIES = list of libraries to link + CMAKE_REQUIRED_QUIET = execute quietly without messages +#]=======================================================================] include_guard(GLOBAL) diff --git a/Modules/CheckPrototypeDefinition.cmake b/Modules/CheckPrototypeDefinition.cmake index dde0775..b379ec4 100644 --- a/Modules/CheckPrototypeDefinition.cmake +++ b/Modules/CheckPrototypeDefinition.cmake @@ -1,43 +1,44 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckPrototypeDefinition -# ------------------------ -# -# Check if the prototype we expect is correct. -# -# check_prototype_definition(FUNCTION PROTOTYPE RETURN HEADER VARIABLE) -# -# :: -# -# FUNCTION - The name of the function (used to check if prototype exists) -# PROTOTYPE- The prototype to check. -# RETURN - The return value of the function. -# HEADER - The header files required. -# VARIABLE - The variable to store the result. -# Will be created as an internal cache variable. -# -# Example: -# -# :: -# -# check_prototype_definition(getpwent_r -# "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)" -# "NULL" -# "unistd.h;pwd.h" -# SOLARIS_GETPWENT_R) -# -# The following variables may be set before calling this macro to modify -# the way the check is run: -# -# :: -# -# CMAKE_REQUIRED_FLAGS = string of compile command line flags -# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) -# CMAKE_REQUIRED_INCLUDES = list of include directories -# CMAKE_REQUIRED_LIBRARIES = list of libraries to link -# CMAKE_REQUIRED_QUIET = execute quietly without messages +#[=======================================================================[.rst: +CheckPrototypeDefinition +------------------------ + +Check if the prototype we expect is correct. + +check_prototype_definition(FUNCTION PROTOTYPE RETURN HEADER VARIABLE) + +:: + + FUNCTION - The name of the function (used to check if prototype exists) + PROTOTYPE- The prototype to check. + RETURN - The return value of the function. + HEADER - The header files required. + VARIABLE - The variable to store the result. + Will be created as an internal cache variable. + +Example: + +:: + + check_prototype_definition(getpwent_r + "struct passwd *getpwent_r(struct passwd *src, char *buf, int buflen)" + "NULL" + "unistd.h;pwd.h" + SOLARIS_GETPWENT_R) + +The following variables may be set before calling this macro to modify +the way the check is run: + +:: + + CMAKE_REQUIRED_FLAGS = string of compile command line flags + CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) + CMAKE_REQUIRED_INCLUDES = list of include directories + CMAKE_REQUIRED_LIBRARIES = list of libraries to link + CMAKE_REQUIRED_QUIET = execute quietly without messages +#]=======================================================================] # diff --git a/Modules/CheckStructHasMember.cmake b/Modules/CheckStructHasMember.cmake index 8689a5c..e7c337c 100644 --- a/Modules/CheckStructHasMember.cmake +++ b/Modules/CheckStructHasMember.cmake @@ -1,42 +1,43 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckStructHasMember -# -------------------- -# -# Check if the given struct or class has the specified member variable -# -# :: -# -# CHECK_STRUCT_HAS_MEMBER(<struct> <member> <header> <variable> -# [LANGUAGE <language>]) -# -# :: -# -# <struct> - the name of the struct or class you are interested in -# <member> - the member which existence you want to check -# <header> - the header(s) where the prototype should be declared -# <variable> - variable to store the result -# <language> - the compiler to use (C or CXX) -# -# -# -# The following variables may be set before calling this macro to modify -# the way the check is run: -# -# :: -# -# CMAKE_REQUIRED_FLAGS = string of compile command line flags -# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) -# CMAKE_REQUIRED_INCLUDES = list of include directories -# CMAKE_REQUIRED_LIBRARIES = list of libraries to link -# CMAKE_REQUIRED_QUIET = execute quietly without messages -# -# -# -# Example: CHECK_STRUCT_HAS_MEMBER("struct timeval" tv_sec sys/select.h -# HAVE_TIMEVAL_TV_SEC LANGUAGE C) +#[=======================================================================[.rst: +CheckStructHasMember +-------------------- + +Check if the given struct or class has the specified member variable + +:: + + CHECK_STRUCT_HAS_MEMBER(<struct> <member> <header> <variable> + [LANGUAGE <language>]) + +:: + + <struct> - the name of the struct or class you are interested in + <member> - the member which existence you want to check + <header> - the header(s) where the prototype should be declared + <variable> - variable to store the result + <language> - the compiler to use (C or CXX) + + + +The following variables may be set before calling this macro to modify +the way the check is run: + +:: + + CMAKE_REQUIRED_FLAGS = string of compile command line flags + CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) + CMAKE_REQUIRED_INCLUDES = list of include directories + CMAKE_REQUIRED_LIBRARIES = list of libraries to link + CMAKE_REQUIRED_QUIET = execute quietly without messages + + + +Example: CHECK_STRUCT_HAS_MEMBER("struct timeval" tv_sec sys/select.h +HAVE_TIMEVAL_TV_SEC LANGUAGE C) +#]=======================================================================] include_guard(GLOBAL) include(CheckCSourceCompiles) diff --git a/Modules/CheckTypeSize.cmake b/Modules/CheckTypeSize.cmake index 2b5deec..2c53df9 100644 --- a/Modules/CheckTypeSize.cmake +++ b/Modules/CheckTypeSize.cmake @@ -1,72 +1,73 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckTypeSize -# ------------- -# -# Check sizeof a type -# -# :: -# -# CHECK_TYPE_SIZE(TYPE VARIABLE [BUILTIN_TYPES_ONLY] -# [LANGUAGE <language>]) -# -# Check if the type exists and determine its size. On return, -# "HAVE_${VARIABLE}" holds the existence of the type, and "${VARIABLE}" -# holds one of the following: -# -# :: -# -# <size> = type has non-zero size <size> -# "0" = type has arch-dependent size (see below) -# "" = type does not exist -# -# Both ``HAVE_${VARIABLE}`` and ``${VARIABLE}`` will be created as internal -# cache variables. -# -# Furthermore, the variable "${VARIABLE}_CODE" holds C preprocessor code -# to define the macro "${VARIABLE}" to the size of the type, or leave -# the macro undefined if the type does not exist. -# -# The variable "${VARIABLE}" may be "0" when CMAKE_OSX_ARCHITECTURES has -# multiple architectures for building OS X universal binaries. This -# indicates that the type size varies across architectures. In this -# case "${VARIABLE}_CODE" contains C preprocessor tests mapping from -# each architecture macro to the corresponding type size. The list of -# architecture macros is stored in "${VARIABLE}_KEYS", and the value for -# each key is stored in "${VARIABLE}-${KEY}". -# -# If the BUILTIN_TYPES_ONLY option is not given, the macro checks for -# headers <sys/types.h>, <stdint.h>, and <stddef.h>, and saves results -# in HAVE_SYS_TYPES_H, HAVE_STDINT_H, and HAVE_STDDEF_H. The type size -# check automatically includes the available headers, thus supporting -# checks of types defined in the headers. -# -# If LANGUAGE is set, the specified compiler will be used to perform the -# check. Acceptable values are C and CXX -# -# Despite the name of the macro you may use it to check the size of more -# complex expressions, too. To check e.g. for the size of a struct -# member you can do something like this: -# -# :: -# -# check_type_size("((struct something*)0)->member" SIZEOF_MEMBER) -# -# -# -# The following variables may be set before calling this macro to modify -# the way the check is run: -# -# :: -# -# CMAKE_REQUIRED_FLAGS = string of compile command line flags -# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) -# CMAKE_REQUIRED_INCLUDES = list of include directories -# CMAKE_REQUIRED_LIBRARIES = list of libraries to link -# CMAKE_REQUIRED_QUIET = execute quietly without messages -# CMAKE_EXTRA_INCLUDE_FILES = list of extra headers to include +#[=======================================================================[.rst: +CheckTypeSize +------------- + +Check sizeof a type + +:: + + CHECK_TYPE_SIZE(TYPE VARIABLE [BUILTIN_TYPES_ONLY] + [LANGUAGE <language>]) + +Check if the type exists and determine its size. On return, +"HAVE_${VARIABLE}" holds the existence of the type, and "${VARIABLE}" +holds one of the following: + +:: + + <size> = type has non-zero size <size> + "0" = type has arch-dependent size (see below) + "" = type does not exist + +Both ``HAVE_${VARIABLE}`` and ``${VARIABLE}`` will be created as internal +cache variables. + +Furthermore, the variable "${VARIABLE}_CODE" holds C preprocessor code +to define the macro "${VARIABLE}" to the size of the type, or leave +the macro undefined if the type does not exist. + +The variable "${VARIABLE}" may be "0" when CMAKE_OSX_ARCHITECTURES has +multiple architectures for building OS X universal binaries. This +indicates that the type size varies across architectures. In this +case "${VARIABLE}_CODE" contains C preprocessor tests mapping from +each architecture macro to the corresponding type size. The list of +architecture macros is stored in "${VARIABLE}_KEYS", and the value for +each key is stored in "${VARIABLE}-${KEY}". + +If the BUILTIN_TYPES_ONLY option is not given, the macro checks for +headers <sys/types.h>, <stdint.h>, and <stddef.h>, and saves results +in HAVE_SYS_TYPES_H, HAVE_STDINT_H, and HAVE_STDDEF_H. The type size +check automatically includes the available headers, thus supporting +checks of types defined in the headers. + +If LANGUAGE is set, the specified compiler will be used to perform the +check. Acceptable values are C and CXX + +Despite the name of the macro you may use it to check the size of more +complex expressions, too. To check e.g. for the size of a struct +member you can do something like this: + +:: + + check_type_size("((struct something*)0)->member" SIZEOF_MEMBER) + + + +The following variables may be set before calling this macro to modify +the way the check is run: + +:: + + CMAKE_REQUIRED_FLAGS = string of compile command line flags + CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) + CMAKE_REQUIRED_INCLUDES = list of include directories + CMAKE_REQUIRED_LIBRARIES = list of libraries to link + CMAKE_REQUIRED_QUIET = execute quietly without messages + CMAKE_EXTRA_INCLUDE_FILES = list of extra headers to include +#]=======================================================================] include(CheckIncludeFile) include(CheckIncludeFileCXX) diff --git a/Modules/CheckVariableExists.cmake b/Modules/CheckVariableExists.cmake index ab456d1..f30165e 100644 --- a/Modules/CheckVariableExists.cmake +++ b/Modules/CheckVariableExists.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CheckVariableExists -# ------------------- -# -# Check if the variable exists. -# -# :: -# -# CHECK_VARIABLE_EXISTS(VAR VARIABLE) -# -# -# -# :: -# -# VAR - the name of the variable -# VARIABLE - variable to store the result -# Will be created as an internal cache variable. -# -# -# This macro is only for C variables. -# -# The following variables may be set before calling this macro to modify -# the way the check is run: -# -# :: -# -# CMAKE_REQUIRED_FLAGS = string of compile command line flags -# CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) -# CMAKE_REQUIRED_LIBRARIES = list of libraries to link -# CMAKE_REQUIRED_QUIET = execute quietly without messages +#[=======================================================================[.rst: +CheckVariableExists +------------------- + +Check if the variable exists. + +:: + + CHECK_VARIABLE_EXISTS(VAR VARIABLE) + + + +:: + + VAR - the name of the variable + VARIABLE - variable to store the result + Will be created as an internal cache variable. + + +This macro is only for C variables. + +The following variables may be set before calling this macro to modify +the way the check is run: + +:: + + CMAKE_REQUIRED_FLAGS = string of compile command line flags + CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar) + CMAKE_REQUIRED_LIBRARIES = list of libraries to link + CMAKE_REQUIRED_QUIET = execute quietly without messages +#]=======================================================================] include_guard(GLOBAL) diff --git a/Modules/Compiler/ARMCC.cmake b/Modules/Compiler/ARMCC.cmake index 250a8f4..f949568 100644 --- a/Modules/Compiler/ARMCC.cmake +++ b/Modules/Compiler/ARMCC.cmake @@ -34,4 +34,6 @@ macro(__compiler_armcc lang) set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "<CMAKE_AR> --create -cr <TARGET> <LINK_FLAGS> <OBJECTS>") set(CMAKE_DEPFILE_FLAGS_${lang} "--depend=<DEPFILE> --depend_single_line --no_depend_system_headers") + + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ") endmacro() diff --git a/Modules/Compiler/Absoft-Fortran.cmake b/Modules/Compiler/Absoft-Fortran.cmake index da1fc80..76502dc 100644 --- a/Modules/Compiler/Absoft-Fortran.cmake +++ b/Modules/Compiler/Absoft-Fortran.cmake @@ -8,3 +8,4 @@ set(CMAKE_Fortran_MODPATH_FLAG "-p") set(CMAKE_Fortran_VERBOSE_FLAG "-v") set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-ffixed") set(CMAKE_Fortran_FORMAT_FREE_FLAG "-ffree") +set(CMAKE_Fortran_LINKER_WRAPPER_FLAG "-X") diff --git a/Modules/Compiler/Bruce-C.cmake b/Modules/Compiler/Bruce-C.cmake index cfabe65..6b64e58 100644 --- a/Modules/Compiler/Bruce-C.cmake +++ b/Modules/Compiler/Bruce-C.cmake @@ -5,3 +5,5 @@ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " -g") string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -DNDEBUG") string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -DNDEBUG") string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -g -DNDEBUG") + +set(CMAKE_C_LINKER_WRAPPER_FLAG "-X") diff --git a/Modules/Compiler/Clang.cmake b/Modules/Compiler/Clang.cmake index 7ce1adb..e23470b 100644 --- a/Modules/Compiler/Clang.cmake +++ b/Modules/Compiler/Clang.cmake @@ -30,6 +30,16 @@ else() set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "--target=") set(CMAKE_${lang}_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN "--gcc-toolchain=") endif() + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Xlinker" " ") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP) + + if(CMAKE_${lang}_COMPILER_TARGET) + if(CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 3.4.0) + list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-target" "${CMAKE_${lang}_COMPILER_TARGET}") + else() + list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}") + endif() + endif() set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES) set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES) diff --git a/Modules/Compiler/Cray-CXX.cmake b/Modules/Compiler/Cray-CXX.cmake index a1899e6..ff97e92 100644 --- a/Modules/Compiler/Cray-CXX.cmake +++ b/Modules/Compiler/Cray-CXX.cmake @@ -13,6 +13,10 @@ if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1) if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.4) set(CMAKE_CXX11_STANDARD_COMPILE_OPTION -h std=c++11) set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION -h std=c++11,gnu) + endif() + if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.6) + set(CMAKE_CXX14_STANDARD_COMPILE_OPTION -h std=c++14) + set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION -h std=c++14,gnu) endif () endif () diff --git a/Modules/Compiler/Flang-Fortran.cmake b/Modules/Compiler/Flang-Fortran.cmake index a1051f4..d522739 100644 --- a/Modules/Compiler/Flang-Fortran.cmake +++ b/Modules/Compiler/Flang-Fortran.cmake @@ -2,7 +2,7 @@ include(Compiler/Clang) __compiler_clang(Fortran) set(CMAKE_Fortran_PREPROCESS_SOURCE - "<CMAKE_Fortran_COMPILER> -cpp <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> -o <PREPROCESSED_SOURCE>") + "<CMAKE_Fortran_COMPILER> -cpp <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>") set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-ffixed-form") set(CMAKE_Fortran_FORMAT_FREE_FLAG "-ffree-form") diff --git a/Modules/Compiler/G95-Fortran.cmake b/Modules/Compiler/G95-Fortran.cmake index 2c83fb8..03b7e08 100644 --- a/Modules/Compiler/G95-Fortran.cmake +++ b/Modules/Compiler/G95-Fortran.cmake @@ -7,3 +7,5 @@ set(CMAKE_Fortran_MODDIR_FLAG "-fmod=") set(CMAKE_Fortran_VERBOSE_FLAG "-v") set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-ffixed-form") set(CMAKE_Fortran_FORMAT_FREE_FLAG "-ffree-form") +set(CMAKE_Fortran_LINKER_WRAPPER_FLAG "-Wl,") +set(CMAKE_Fortran_LINKER_WRAPPER_FLAG_SEP ",") diff --git a/Modules/Compiler/GNU.cmake b/Modules/Compiler/GNU.cmake index a3ef2bc..4491d4b 100644 --- a/Modules/Compiler/GNU.cmake +++ b/Modules/Compiler/GNU.cmake @@ -24,6 +24,9 @@ macro(__compiler_gnu lang) set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-shared") set(CMAKE_${lang}_COMPILE_OPTIONS_SYSROOT "--sysroot=") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",") + # Older versions of gcc (< 4.5) contain a bug causing them to report a missing # header file as a warning if depfiles are enabled, causing check_header_file # tests to always succeed. Work around this by disabling dependency tracking @@ -87,5 +90,11 @@ macro(__compiler_gnu lang) ) endif() - set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}" "-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp") + set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}") + if(CMAKE_${lang}_COMPILER_ARG1) + separate_arguments(_COMPILER_ARGS NATIVE_COMMAND "${CMAKE_${lang}_COMPILER_ARG1}") + list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND ${_COMPILER_ARGS}) + unset(_COMPILER_ARGS) + endif() + list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp") endmacro() diff --git a/Modules/Compiler/HP-C.cmake b/Modules/Compiler/HP-C.cmake index b42ba2b..8fa4c08 100644 --- a/Modules/Compiler/HP-C.cmake +++ b/Modules/Compiler/HP-C.cmake @@ -2,3 +2,6 @@ set(CMAKE_C_VERBOSE_FLAG "-v") set(CMAKE_C_CREATE_ASSEMBLY_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>") set(CMAKE_C_CREATE_PREPROCESSED_SOURCE "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>") + +set(CMAKE_C_LINKER_WRAPPER_FLAG "-Wl,") +set(CMAKE_C_LINKER_WRAPPER_FLAG_SEP ",") diff --git a/Modules/Compiler/HP-CXX.cmake b/Modules/Compiler/HP-CXX.cmake index 7548754..5726b64 100644 --- a/Modules/Compiler/HP-CXX.cmake +++ b/Modules/Compiler/HP-CXX.cmake @@ -3,6 +3,9 @@ set(CMAKE_CXX_VERBOSE_FLAG "-v") set(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>") set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>") +set(CMAKE_CXX_LINKER_WRAPPER_FLAG "-Wl,") +set(CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP ",") + # HP aCC since version 3.80 supports the flag +hpxstd98 to get ANSI C++98 # template support. It is known that version 6.25 doesn't need that flag. # Current assumption: the flag is needed for every version from 3.80 to 4 diff --git a/Modules/Compiler/HP-Fortran.cmake b/Modules/Compiler/HP-Fortran.cmake index a6ca2c2..63a0331 100644 --- a/Modules/Compiler/HP-Fortran.cmake +++ b/Modules/Compiler/HP-Fortran.cmake @@ -4,3 +4,6 @@ set(CMAKE_Fortran_FORMAT_FREE_FLAG "+source=free") set(CMAKE_Fortran_CREATE_ASSEMBLY_SOURCE "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>") set(CMAKE_Fortran_CREATE_PREPROCESSED_SOURCE "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>") + +set(CMAKE_Fortran_LINKER_WRAPPER_FLAG "-Wl,") +set(CMAKE_Fortran_LINKER_WRAPPER_FLAG ",") diff --git a/Modules/Compiler/IAR-ASM.cmake b/Modules/Compiler/IAR-ASM.cmake index 651bc3a..e12bfd1 100644 --- a/Modules/Compiler/IAR-ASM.cmake +++ b/Modules/Compiler/IAR-ASM.cmake @@ -18,4 +18,6 @@ elseif("${CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR") __compiler_iar_AVR(ASM) set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s90;asm;msa) +else() + message(FATAL_ERROR "CMAKE_ASM${ASM_DIALECT}_COMPILER_ARCHITECTURE_ID not detected as \"AVR\" or \"ARM\". This should be automatic.") endif() diff --git a/Modules/Compiler/IAR-C.cmake b/Modules/Compiler/IAR-C.cmake index 55e019e..2ed8818 100644 --- a/Modules/Compiler/IAR-C.cmake +++ b/Modules/Compiler/IAR-C.cmake @@ -5,6 +5,9 @@ include(Compiler/CMakeCommonCompilerMacros) # The toolchains for ARM and AVR are quite different: if("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM") + if(NOT CMAKE_C_COMPILER_VERSION) + message(FATAL_ERROR "CMAKE_C_COMPILER_VERSION not detected. This should be automatic.") + endif() set(CMAKE_C_EXTENSION_COMPILE_OPTION -e) @@ -40,4 +43,7 @@ elseif("${CMAKE_C_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR") get_filename_component(_compilerDir "${CMAKE_C_COMPILER}" PATH) get_filename_component(_compilerDir "${_compilerDir}" PATH) include_directories("${_compilerDir}/inc" ) + +else() + message(FATAL_ERROR "CMAKE_C_COMPILER_ARCHITECTURE_ID not detected as \"AVR\" or \"ARM\". This should be automatic.") endif() diff --git a/Modules/Compiler/IAR-CXX.cmake b/Modules/Compiler/IAR-CXX.cmake index 8d86100..5b783b2 100644 --- a/Modules/Compiler/IAR-CXX.cmake +++ b/Modules/Compiler/IAR-CXX.cmake @@ -10,6 +10,9 @@ if("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "ARM") # # --c++ is full C++ and supported since 6.10 if(NOT CMAKE_IAR_CXX_FLAG) + if(NOT CMAKE_CXX_COMPILER_VERSION) + message(FATAL_ERROR "CMAKE_CXX_COMPILER_VERSION not detected. This should be automatic.") + endif() if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 6.10) set(CMAKE_IAR_CXX_FLAG --c++) else() @@ -48,4 +51,7 @@ elseif("${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "AVR") get_filename_component(_compilerDir "${CMAKE_C_COMPILER}" PATH) get_filename_component(_compilerDir "${_compilerDir}" PATH) include_directories("${_compilerDir}/inc") + +else() + message(FATAL_ERROR "CMAKE_CXX_COMPILER_ARCHITECTURE_ID not detected as \"AVR\" or \"ARM\". This should be automatic." ) endif() diff --git a/Modules/Compiler/Intel.cmake b/Modules/Compiler/Intel.cmake index 635ac4d..f2f16e0 100644 --- a/Modules/Compiler/Intel.cmake +++ b/Modules/Compiler/Intel.cmake @@ -25,6 +25,12 @@ else() string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3") string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g") - set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}" "-QdM" "-P" "-Za" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp") + set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}") + if(CMAKE_${lang}_COMPILER_ARG1) + separate_arguments(_COMPILER_ARGS NATIVE_COMMAND "${CMAKE_${lang}_COMPILER_ARG1}") + list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND ${_COMPILER_ARGS}) + unset(_COMPILER_ARGS) + endif() + list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-QdM" "-P" "-Za" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp") endmacro() endif() diff --git a/Modules/Compiler/NAG-Fortran.cmake b/Modules/Compiler/NAG-Fortran.cmake index 39aae18..9973feb 100644 --- a/Modules/Compiler/NAG-Fortran.cmake +++ b/Modules/Compiler/NAG-Fortran.cmake @@ -34,3 +34,4 @@ set(CMAKE_Fortran_FORMAT_FIXED_FLAG "-fixed") set(CMAKE_Fortran_FORMAT_FREE_FLAG "-free") set(CMAKE_Fortran_COMPILE_OPTIONS_PIC "-PIC") set(CMAKE_Fortran_COMPILE_OPTIONS_PIE "-PIC") +set(CMAKE_Fortran_RESPONSE_FILE_LINK_FLAG "-Wl,@") diff --git a/Modules/Compiler/PGI.cmake b/Modules/Compiler/PGI.cmake index d5a57ee..4f8b90b 100644 --- a/Modules/Compiler/PGI.cmake +++ b/Modules/Compiler/PGI.cmake @@ -25,6 +25,9 @@ macro(__compiler_pgi lang) string(APPEND CMAKE_${lang}_FLAGS_INIT " -Bdynamic") endif() + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG ",") + set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES) if(NOT CMAKE_SYSTEM_PROCESSOR STREQUAL ppc64le AND (NOT CMAKE_HOST_WIN32 OR CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 16.3)) set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES) diff --git a/Modules/Compiler/QCC.cmake b/Modules/Compiler/QCC.cmake index a5e2b0b..9df8269 100644 --- a/Modules/Compiler/QCC.cmake +++ b/Modules/Compiler/QCC.cmake @@ -11,12 +11,21 @@ macro(__compiler_qcc lang) set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "-V") set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-Wp,-isystem,") - set(CMAKE_DEPFILE_FLAGS_${lang} "-Wc,-MD,<DEPFILE>,-MT,<OBJECT>,-MF,<DEPFILE>") + set(CMAKE_DEPFILE_FLAGS_${lang} "-Wp,-MD,<DEPFILE> -Wp,-MT,<OBJECT> -Wp,-MF,<DEPFILE>") + + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",") set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE NO) set(_CMAKE_${lang}_IPO_MAY_BE_SUPPORTED_BY_COMPILER NO) - set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}" "-Wp,-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp") + set(CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "${CMAKE_${lang}_COMPILER}") + if(CMAKE_${lang}_COMPILER_ARG1) + separate_arguments(_COMPILER_ARGS NATIVE_COMMAND "${CMAKE_${lang}_COMPILER_ARG1}") + list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND ${_COMPILER_ARGS}) + unset(_COMPILER_ARGS) + endif() + list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "-Wp,-dM" "-E" "-c" "${CMAKE_ROOT}/Modules/CMakeCXXCompilerABI.cpp") unset(CMAKE_${lang}_COMPILE_OPTIONS_IPO) unset(CMAKE_${lang}_ARCHIVE_CREATE_IPO) diff --git a/Modules/Compiler/SCO.cmake b/Modules/Compiler/SCO.cmake index c55a048..7f643d9 100644 --- a/Modules/Compiler/SCO.cmake +++ b/Modules/Compiler/SCO.cmake @@ -15,4 +15,7 @@ macro(__compiler_sco lang) set(CMAKE_${lang}_COMPILE_OPTIONS_DLL -belf) set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-Kpic -belf") set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-belf -Wl,-Bexport") + + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",") endmacro() diff --git a/Modules/Compiler/SunPro-C.cmake b/Modules/Compiler/SunPro-C.cmake index 8d0e6d6..047de43 100644 --- a/Modules/Compiler/SunPro-C.cmake +++ b/Modules/Compiler/SunPro-C.cmake @@ -29,6 +29,9 @@ foreach(type SHARED_LIBRARY SHARED_MODULE EXE) set(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Bdynamic") endforeach() +set(CMAKE_C_LINKER_WRAPPER_FLAG "-Qoption" "ld" " ") +set(CMAKE_C_LINKER_WRAPPER_FLAG_SEP ",") + if (CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 5.13) set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c89") set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=c89") diff --git a/Modules/Compiler/SunPro-CXX.cmake b/Modules/Compiler/SunPro-CXX.cmake index 14196b7..4c1ac5b 100644 --- a/Modules/Compiler/SunPro-CXX.cmake +++ b/Modules/Compiler/SunPro-CXX.cmake @@ -29,6 +29,9 @@ foreach(type SHARED_LIBRARY SHARED_MODULE EXE) set(CMAKE_${type}_LINK_DYNAMIC_CXX_FLAGS "-Bdynamic") endforeach() +set(CMAKE_CXX_LINKER_WRAPPER_FLAG "-Qoption" "ld" " ") +set(CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP ",") + set(CMAKE_CXX_CREATE_PREPROCESSED_SOURCE "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -E <SOURCE> > <PREPROCESSED_SOURCE>") set(CMAKE_CXX_CREATE_ASSEMBLY_SOURCE "<CMAKE_CXX_COMPILER> <INCLUDES> <FLAGS> -S <SOURCE> -o <ASSEMBLY_SOURCE>") diff --git a/Modules/Compiler/SunPro-Fortran.cmake b/Modules/Compiler/SunPro-Fortran.cmake index 9b25c0b..2247dd0 100644 --- a/Modules/Compiler/SunPro-Fortran.cmake +++ b/Modules/Compiler/SunPro-Fortran.cmake @@ -18,6 +18,9 @@ string(APPEND CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT " -g -xO2 -DNDEBUG") set(CMAKE_Fortran_MODDIR_FLAG "-moddir=") set(CMAKE_Fortran_MODPATH_FLAG "-M") +set(CMAKE_Fortran_LINKER_WRAPPER_FLAG "-Qoption" "ld" " ") +set(CMAKE_Fortran_LINKER_WRAPPER_FLAG_SEP ",") + set(CMAKE_Fortran_PREPROCESS_SOURCE "<CMAKE_Fortran_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -F -fpp <SOURCE> -o <PREPROCESSED_SOURCE>") diff --git a/Modules/Compiler/TinyCC-C.cmake b/Modules/Compiler/TinyCC-C.cmake index fbd2841..6367695 100644 --- a/Modules/Compiler/TinyCC-C.cmake +++ b/Modules/Compiler/TinyCC-C.cmake @@ -6,3 +6,6 @@ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " -g") string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -DNDEBUG") string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -DNDEBUG") string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -g -DNDEBUG") + +set(CMAKE_C_LINKER_WRAPPER_FLAG "-Wl,") +set(CMAKE_C_LINKER_WRAPPER_FLAG_SEP ",") diff --git a/Modules/Compiler/XL.cmake b/Modules/Compiler/XL.cmake index 3361f8f..21fe5e8 100644 --- a/Modules/Compiler/XL.cmake +++ b/Modules/Compiler/XL.cmake @@ -20,9 +20,13 @@ macro(__compiler_xl lang) # Feature flags. set(CMAKE_${lang}_VERBOSE_FLAG "-V") set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "-qpic") + set(CMAKE_${lang}_COMPILE_OPTIONS_PIE "-qpic") set(CMAKE_${lang}_RESPONSE_FILE_FLAG "-qoptfile=") set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "-qoptfile=") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",") + string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g") string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O") string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -O") diff --git a/Modules/CompilerId/Xcode-3.pbxproj.in b/Modules/CompilerId/Xcode-3.pbxproj.in index 94bcbf8..4686b64 100644 --- a/Modules/CompilerId/Xcode-3.pbxproj.in +++ b/Modules/CompilerId/Xcode-3.pbxproj.in @@ -73,6 +73,7 @@ isa = XCBuildConfiguration; buildSettings = { @id_development_team@ + @id_code_sign_identity@ PRODUCT_NAME = CompilerId@id_lang@; }; name = Debug; diff --git a/Modules/Dart.cmake b/Modules/Dart.cmake index e003cd5..154fe9d 100644 --- a/Modules/Dart.cmake +++ b/Modules/Dart.cmake @@ -1,27 +1,28 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# Dart -# ---- -# -# Configure a project for testing with CTest or old Dart Tcl Client -# -# This file is the backwards-compatibility version of the CTest module. -# It supports using the old Dart 1 Tcl client for driving dashboard -# submissions as well as testing with CTest. This module should be -# included in the CMakeLists.txt file at the top of a project. Typical -# usage: -# -# :: -# -# include(Dart) -# if(BUILD_TESTING) -# # ... testing related CMake code ... -# endif() -# -# The BUILD_TESTING option is created by the Dart module to determine -# whether testing support should be enabled. The default is ON. +#[=======================================================================[.rst: +Dart +---- + +Configure a project for testing with CTest or old Dart Tcl Client + +This file is the backwards-compatibility version of the CTest module. +It supports using the old Dart 1 Tcl client for driving dashboard +submissions as well as testing with CTest. This module should be +included in the CMakeLists.txt file at the top of a project. Typical +usage: + +:: + + include(Dart) + if(BUILD_TESTING) + # ... testing related CMake code ... + endif() + +The BUILD_TESTING option is created by the Dart module to determine +whether testing support should be enabled. The default is ON. +#]=======================================================================] # This file configures a project to use the Dart testing/dashboard process. # It is broken into 3 sections. diff --git a/Modules/DeployQt4.cmake b/Modules/DeployQt4.cmake index e758f3a..c69cd38 100644 --- a/Modules/DeployQt4.cmake +++ b/Modules/DeployQt4.cmake @@ -1,388 +1,400 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# DeployQt4 -# --------- -# -# Functions to help assemble a standalone Qt4 executable. -# -# A collection of CMake utility functions useful for deploying Qt4 -# executables. -# -# The following functions are provided by this module: -# -# :: -# -# write_qt4_conf -# resolve_qt4_paths -# fixup_qt4_executable -# install_qt4_plugin_path -# install_qt4_plugin -# install_qt4_executable -# -# Requires CMake 2.6 or greater because it uses function and -# PARENT_SCOPE. Also depends on BundleUtilities.cmake. -# -# :: -# -# WRITE_QT4_CONF(<qt_conf_dir> <qt_conf_contents>) -# -# Writes a qt.conf file with the <qt_conf_contents> into <qt_conf_dir>. -# -# :: -# -# RESOLVE_QT4_PATHS(<paths_var> [<executable_path>]) -# -# Loop through <paths_var> list and if any don't exist resolve them -# relative to the <executable_path> (if supplied) or the -# CMAKE_INSTALL_PREFIX. -# -# :: -# -# FIXUP_QT4_EXECUTABLE(<executable> -# [<qtplugins> <libs> <dirs> <plugins_dir> <request_qt_conf>]) -# -# Copies Qt plugins, writes a Qt configuration file (if needed) and -# fixes up a Qt4 executable using BundleUtilities so it is standalone -# and can be drag-and-drop copied to another machine as long as all of -# the system libraries are compatible. -# -# <executable> should point to the executable to be fixed-up. -# -# <qtplugins> should contain a list of the names or paths of any Qt -# plugins to be installed. -# -# <libs> will be passed to BundleUtilities and should be a list of any -# already installed plugins, libraries or executables to also be -# fixed-up. -# -# <dirs> will be passed to BundleUtilities and should contain and -# directories to be searched to find library dependencies. -# -# <plugins_dir> allows an custom plugins directory to be used. -# -# <request_qt_conf> will force a qt.conf file to be written even if not -# needed. -# -# :: -# -# INSTALL_QT4_PLUGIN_PATH(plugin executable copy installed_plugin_path_var -# <plugins_dir> <component> <configurations>) -# -# Install (or copy) a resolved <plugin> to the default plugins directory -# (or <plugins_dir>) relative to <executable> and store the result in -# <installed_plugin_path_var>. -# -# If <copy> is set to TRUE then the plugins will be copied rather than -# installed. This is to allow this module to be used at CMake time -# rather than install time. -# -# If <component> is set then anything installed will use this COMPONENT. -# -# :: -# -# INSTALL_QT4_PLUGIN(plugin executable copy installed_plugin_path_var -# <plugins_dir> <component>) -# -# Install (or copy) an unresolved <plugin> to the default plugins -# directory (or <plugins_dir>) relative to <executable> and store the -# result in <installed_plugin_path_var>. See documentation of -# INSTALL_QT4_PLUGIN_PATH. -# -# :: -# -# INSTALL_QT4_EXECUTABLE(<executable> -# [<qtplugins> <libs> <dirs> <plugins_dir> <request_qt_conf> <component>]) -# -# Installs Qt plugins, writes a Qt configuration file (if needed) and -# fixes up a Qt4 executable using BundleUtilities so it is standalone -# and can be drag-and-drop copied to another machine as long as all of -# the system libraries are compatible. The executable will be fixed-up -# at install time. <component> is the COMPONENT used for bundle fixup -# and plugin installation. See documentation of FIXUP_QT4_BUNDLE. +#[=======================================================================[.rst: +DeployQt4 +--------- + +Functions to help assemble a standalone Qt4 executable. + +A collection of CMake utility functions useful for deploying Qt4 +executables. + +The following functions are provided by this module: + +:: + + write_qt4_conf + resolve_qt4_paths + fixup_qt4_executable + install_qt4_plugin_path + install_qt4_plugin + install_qt4_executable + +Requires CMake 2.6 or greater because it uses function and +PARENT_SCOPE. Also depends on BundleUtilities.cmake. + +:: + + WRITE_QT4_CONF(<qt_conf_dir> <qt_conf_contents>) + +Writes a qt.conf file with the <qt_conf_contents> into <qt_conf_dir>. + +:: + + RESOLVE_QT4_PATHS(<paths_var> [<executable_path>]) + +Loop through <paths_var> list and if any don't exist resolve them +relative to the <executable_path> (if supplied) or the +CMAKE_INSTALL_PREFIX. + +:: + + FIXUP_QT4_EXECUTABLE(<executable> + [<qtplugins> <libs> <dirs> <plugins_dir> <request_qt_conf>]) + +Copies Qt plugins, writes a Qt configuration file (if needed) and +fixes up a Qt4 executable using BundleUtilities so it is standalone +and can be drag-and-drop copied to another machine as long as all of +the system libraries are compatible. + +<executable> should point to the executable to be fixed-up. + +<qtplugins> should contain a list of the names or paths of any Qt +plugins to be installed. + +<libs> will be passed to BundleUtilities and should be a list of any +already installed plugins, libraries or executables to also be +fixed-up. + +<dirs> will be passed to BundleUtilities and should contain and +directories to be searched to find library dependencies. + +<plugins_dir> allows an custom plugins directory to be used. + +<request_qt_conf> will force a qt.conf file to be written even if not +needed. + +:: + + INSTALL_QT4_PLUGIN_PATH(plugin executable copy installed_plugin_path_var + <plugins_dir> <component> <configurations>) + +Install (or copy) a resolved <plugin> to the default plugins directory +(or <plugins_dir>) relative to <executable> and store the result in +<installed_plugin_path_var>. + +If <copy> is set to TRUE then the plugins will be copied rather than +installed. This is to allow this module to be used at CMake time +rather than install time. + +If <component> is set then anything installed will use this COMPONENT. + +:: + + INSTALL_QT4_PLUGIN(plugin executable copy installed_plugin_path_var + <plugins_dir> <component>) + +Install (or copy) an unresolved <plugin> to the default plugins +directory (or <plugins_dir>) relative to <executable> and store the +result in <installed_plugin_path_var>. See documentation of +INSTALL_QT4_PLUGIN_PATH. + +:: + + INSTALL_QT4_EXECUTABLE(<executable> + [<qtplugins> <libs> <dirs> <plugins_dir> <request_qt_conf> <component>]) + +Installs Qt plugins, writes a Qt configuration file (if needed) and +fixes up a Qt4 executable using BundleUtilities so it is standalone +and can be drag-and-drop copied to another machine as long as all of +the system libraries are compatible. The executable will be fixed-up +at install time. <component> is the COMPONENT used for bundle fixup +and plugin installation. See documentation of FIXUP_QT4_BUNDLE. +#]=======================================================================] # The functions defined in this file depend on the fixup_bundle function # (and others) found in BundleUtilities.cmake -include("${CMAKE_CURRENT_LIST_DIR}/BundleUtilities.cmake") set(DeployQt4_cmake_dir "${CMAKE_CURRENT_LIST_DIR}") set(DeployQt4_apple_plugins_dir "PlugIns") function(write_qt4_conf qt_conf_dir qt_conf_contents) - set(qt_conf_path "${qt_conf_dir}/qt.conf") - message(STATUS "Writing ${qt_conf_path}") - file(WRITE "${qt_conf_path}" "${qt_conf_contents}") + set(qt_conf_path "${qt_conf_dir}/qt.conf") + message(STATUS "Writing ${qt_conf_path}") + file(WRITE "${qt_conf_path}" "${qt_conf_contents}") endfunction() function(resolve_qt4_paths paths_var) - unset(executable_path) - if(ARGC GREATER 1) - set(executable_path ${ARGV1}) - endif() - - set(paths_resolved) - foreach(path ${${paths_var}}) - if(EXISTS "${path}") - list(APPEND paths_resolved "${path}") - else() - if(${executable_path}) - list(APPEND paths_resolved "${executable_path}/${path}") - else() - list(APPEND paths_resolved "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${path}") - endif() - endif() - endforeach() - set(${paths_var} ${paths_resolved} PARENT_SCOPE) -endfunction() + unset(executable_path) + if(ARGC GREATER 1) + set(executable_path ${ARGV1}) + endif() -function(fixup_qt4_executable executable) - unset(qtplugins) - if(ARGC GREATER 1) - set(qtplugins ${ARGV1}) - endif() - unset(libs) - if(ARGC GREATER 2) - set(libs ${ARGV2}) - endif() - unset(dirs) - if(ARGC GREATER 3) - set(dirs ${ARGV3}) - endif() - unset(plugins_dir) - if(ARGC GREATER 4) - set(plugins_dir ${ARGV4}) - endif() - unset(request_qt_conf) - if(ARGC GREATER 5) - set(request_qt_conf ${ARGV5}) - endif() - - message(STATUS "fixup_qt4_executable") - message(STATUS " executable='${executable}'") - message(STATUS " qtplugins='${qtplugins}'") - message(STATUS " libs='${libs}'") - message(STATUS " dirs='${dirs}'") - message(STATUS " plugins_dir='${plugins_dir}'") - message(STATUS " request_qt_conf='${request_qt_conf}'") - - if(QT_LIBRARY_DIR) - list(APPEND dirs "${QT_LIBRARY_DIR}") - endif() - if(QT_BINARY_DIR) - list(APPEND dirs "${QT_BINARY_DIR}") - endif() - - if(APPLE) - set(qt_conf_dir "${executable}/Contents/Resources") - set(executable_path "${executable}") - set(write_qt_conf TRUE) - if(NOT DEFINED plugins_dir) - set(plugins_dir "${DeployQt4_apple_plugins_dir}") - endif() - else() - get_filename_component(executable_path "${executable}" PATH) - if(NOT executable_path) - set(executable_path ".") - endif() - set(qt_conf_dir "${executable_path}") - set(write_qt_conf ${request_qt_conf}) - endif() - - foreach(plugin ${qtplugins}) - set(installed_plugin_path "") - install_qt4_plugin("${plugin}" "${executable}" 1 installed_plugin_path) - list(APPEND libs ${installed_plugin_path}) - endforeach() - - foreach(lib ${libs}) - if(NOT EXISTS "${lib}") - message(FATAL_ERROR "Library does not exist: ${lib}") - endif() - endforeach() - - resolve_qt4_paths(libs "${executable_path}") - - if(write_qt_conf) - set(qt_conf_contents "[Paths]\nPlugins = ${plugins_dir}") - write_qt4_conf("${qt_conf_dir}" "${qt_conf_contents}") - endif() - - fixup_bundle("${executable}" "${libs}" "${dirs}") + set(paths_resolved) + foreach(path ${${paths_var}}) + if(EXISTS "${path}") + list(APPEND paths_resolved "${path}") + else() + if(${executable_path}) + list(APPEND paths_resolved "${executable_path}/${path}") + else() + list(APPEND paths_resolved "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${path}") + endif() + endif() + endforeach() + set(${paths_var} ${paths_resolved} PARENT_SCOPE) endfunction() +cmake_policy(GET CMP0080 _cmp0080_value) +if(NOT DEFINED CMAKE_GENERATOR OR NOT _cmp0080_value STREQUAL "NEW") + set(_CMP0080_SUPPRESS_WARNING TRUE) + include("${CMAKE_CURRENT_LIST_DIR}/BundleUtilities.cmake") + unset(_CMP0080_SUPPRESS_WARNING) + + function(fixup_qt4_executable executable) + cmake_policy(GET CMP0080 _cmp0080_value) + if(_cmp0080_value STREQUAL "" AND DEFINED CMAKE_GENERATOR) + _warn_cmp0080() + endif() + + unset(qtplugins) + if(ARGC GREATER 1) + set(qtplugins ${ARGV1}) + endif() + unset(libs) + if(ARGC GREATER 2) + set(libs ${ARGV2}) + endif() + unset(dirs) + if(ARGC GREATER 3) + set(dirs ${ARGV3}) + endif() + unset(plugins_dir) + if(ARGC GREATER 4) + set(plugins_dir ${ARGV4}) + endif() + unset(request_qt_conf) + if(ARGC GREATER 5) + set(request_qt_conf ${ARGV5}) + endif() + + message(STATUS "fixup_qt4_executable") + message(STATUS " executable='${executable}'") + message(STATUS " qtplugins='${qtplugins}'") + message(STATUS " libs='${libs}'") + message(STATUS " dirs='${dirs}'") + message(STATUS " plugins_dir='${plugins_dir}'") + message(STATUS " request_qt_conf='${request_qt_conf}'") + + if(QT_LIBRARY_DIR) + list(APPEND dirs "${QT_LIBRARY_DIR}") + endif() + if(QT_BINARY_DIR) + list(APPEND dirs "${QT_BINARY_DIR}") + endif() + + if(APPLE) + set(qt_conf_dir "${executable}/Contents/Resources") + set(executable_path "${executable}") + set(write_qt_conf TRUE) + if(NOT DEFINED plugins_dir) + set(plugins_dir "${DeployQt4_apple_plugins_dir}") + endif() + else() + get_filename_component(executable_path "${executable}" PATH) + if(NOT executable_path) + set(executable_path ".") + endif() + set(qt_conf_dir "${executable_path}") + set(write_qt_conf ${request_qt_conf}) + endif() + + foreach(plugin ${qtplugins}) + set(installed_plugin_path "") + install_qt4_plugin("${plugin}" "${executable}" 1 installed_plugin_path) + list(APPEND libs ${installed_plugin_path}) + endforeach() + + foreach(lib ${libs}) + if(NOT EXISTS "${lib}") + message(FATAL_ERROR "Library does not exist: ${lib}") + endif() + endforeach() + + resolve_qt4_paths(libs "${executable_path}") + + if(write_qt_conf) + set(qt_conf_contents "[Paths]\nPlugins = ${plugins_dir}") + write_qt4_conf("${qt_conf_dir}" "${qt_conf_contents}") + endif() + + fixup_bundle("${executable}" "${libs}" "${dirs}") + endfunction() +endif() + function(install_qt4_plugin_path plugin executable copy installed_plugin_path_var) - unset(plugins_dir) - if(ARGC GREATER 4) - set(plugins_dir ${ARGV4}) - endif() - unset(component) - if(ARGC GREATER 5) - set(component ${ARGV5}) - endif() + unset(plugins_dir) + if(ARGC GREATER 4) + set(plugins_dir ${ARGV4}) + endif() + unset(component) + if(ARGC GREATER 5) + set(component ${ARGV5}) + endif() + unset(configurations) + if(ARGC GREATER 6) + set(configurations ${ARGV6}) + endif() + + if(EXISTS "${plugin}") + if(APPLE) + if(NOT plugins_dir) + set(plugins_dir "${DeployQt4_apple_plugins_dir}") + endif() + set(plugins_path "${executable}/Contents/${plugins_dir}") + else() + get_filename_component(plugins_path "${executable}" PATH) + if(NOT plugins_path) + set(plugins_path ".") + endif() + if(plugins_dir) + string(APPEND plugins_path "/${plugins_dir}") + endif() + endif() + + set(plugin_group "") + + get_filename_component(plugin_path "${plugin}" PATH) + get_filename_component(plugin_parent_path "${plugin_path}" PATH) + get_filename_component(plugin_parent_dir_name "${plugin_parent_path}" NAME) + get_filename_component(plugin_name "${plugin}" NAME) + string(TOLOWER "${plugin_parent_dir_name}" plugin_parent_dir_name) + + if("${plugin_parent_dir_name}" STREQUAL "plugins") + get_filename_component(plugin_group "${plugin_path}" NAME) + set(${plugin_group_var} "${plugin_group}") + endif() + string(APPEND plugins_path "/${plugin_group}") + + if(${copy}) + file(MAKE_DIRECTORY "${plugins_path}") + file(COPY "${plugin}" DESTINATION "${plugins_path}") + else() + get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(configurations AND (_isMultiConfig OR CMAKE_BUILD_TYPE)) + set(configurations CONFIGURATIONS ${configurations}) + else() unset(configurations) - if(ARGC GREATER 6) - set(configurations ${ARGV6}) - endif() - - if(EXISTS "${plugin}") - if(APPLE) - if(NOT plugins_dir) - set(plugins_dir "${DeployQt4_apple_plugins_dir}") - endif() - set(plugins_path "${executable}/Contents/${plugins_dir}") - else() - get_filename_component(plugins_path "${executable}" PATH) - if(NOT plugins_path) - set(plugins_path ".") - endif() - if(plugins_dir) - string(APPEND plugins_path "/${plugins_dir}") - endif() - endif() - - set(plugin_group "") - - get_filename_component(plugin_path "${plugin}" PATH) - get_filename_component(plugin_parent_path "${plugin_path}" PATH) - get_filename_component(plugin_parent_dir_name "${plugin_parent_path}" NAME) - get_filename_component(plugin_name "${plugin}" NAME) - string(TOLOWER "${plugin_parent_dir_name}" plugin_parent_dir_name) - - if("${plugin_parent_dir_name}" STREQUAL "plugins") - get_filename_component(plugin_group "${plugin_path}" NAME) - set(${plugin_group_var} "${plugin_group}") - endif() - string(APPEND plugins_path "/${plugin_group}") - - if(${copy}) - file(MAKE_DIRECTORY "${plugins_path}") - file(COPY "${plugin}" DESTINATION "${plugins_path}") - else() - get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) - if(configurations AND (_isMultiConfig OR CMAKE_BUILD_TYPE)) - set(configurations CONFIGURATIONS ${configurations}) - else() - unset(configurations) - endif() - install(FILES "${plugin}" DESTINATION "${plugins_path}" ${configurations} ${component}) - endif() - set(${installed_plugin_path_var} "${plugins_path}/${plugin_name}" PARENT_SCOPE) - endif() + endif() + install(FILES "${plugin}" DESTINATION "${plugins_path}" ${configurations} ${component}) + endif() + set(${installed_plugin_path_var} "${plugins_path}/${plugin_name}" PARENT_SCOPE) + endif() endfunction() function(install_qt4_plugin plugin executable copy installed_plugin_path_var) - unset(plugins_dir) - if(ARGC GREATER 4) - set(plugins_dir ${ARGV4}) - endif() - unset(component) - if(ARGC GREATER 5) - set(component ${ARGV5}) - endif() - - if(EXISTS "${plugin}") - install_qt4_plugin_path("${plugin}" "${executable}" "${copy}" "${installed_plugin_path_var}" "${plugins_dir}" "${component}") - else() - string(TOUPPER "QT_${plugin}_PLUGIN" plugin_var) - set(plugin_release_var "${plugin_var}_RELEASE") - set(plugin_debug_var "${plugin_var}_DEBUG") - set(plugin_release "${${plugin_release_var}}") - set(plugin_debug "${${plugin_debug_var}}") - if(DEFINED "${plugin_release_var}" AND DEFINED "${plugin_debug_var}" AND NOT EXISTS "${plugin_release}" AND NOT EXISTS "${plugin_debug}") - message(WARNING "Qt plugin \"${plugin}\" not recognized or found.") - endif() - if(NOT EXISTS "${${plugin_debug_var}}") - set(plugin_debug "${plugin_release}") - endif() - - get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) - if(_isMultiConfig OR CMAKE_BUILD_TYPE) - set(_RELEASE_CONFIGS ${CMAKE_CONFIGURATION_TYPES} "${CMAKE_BUILD_TYPE}") - if (_RELEASE_CONFIGS) - list(FILTER _RELEASE_CONFIGS EXCLUDE REGEX "[Dd][Ee][Bb][Uu][Gg]") - endif() - string(REPLACE ";" "|" _RELEASE_CONFIGS "${_RELEASE_CONFIGS}") - install_qt4_plugin_path("${plugin_release}" "${executable}" "${copy}" "${installed_plugin_path_var}_release" "${plugins_dir}" "${component}" "${_RELEASE_CONFIGS}") - install_qt4_plugin_path("${plugin_debug}" "${executable}" "${copy}" "${installed_plugin_path_var}_debug" "${plugins_dir}" "${component}" "Debug") - unset(_RELEASE_CONFIGS) - - if(CMAKE_BUILD_TYPE MATCHES "^Debug$") - set(${installed_plugin_path_var} ${${installed_plugin_path_var}_debug}) - else() - set(${installed_plugin_path_var} ${${installed_plugin_path_var}_release}) - endif() - else() - install_qt4_plugin_path("${plugin_release}" "${executable}" "${copy}" "${installed_plugin_path_var}" "${plugins_dir}" "${component}") - endif() - endif() - set(${installed_plugin_path_var} ${${installed_plugin_path_var}} PARENT_SCOPE) + unset(plugins_dir) + if(ARGC GREATER 4) + set(plugins_dir ${ARGV4}) + endif() + unset(component) + if(ARGC GREATER 5) + set(component ${ARGV5}) + endif() + + if(EXISTS "${plugin}") + install_qt4_plugin_path("${plugin}" "${executable}" "${copy}" "${installed_plugin_path_var}" "${plugins_dir}" "${component}") + else() + string(TOUPPER "QT_${plugin}_PLUGIN" plugin_var) + set(plugin_release_var "${plugin_var}_RELEASE") + set(plugin_debug_var "${plugin_var}_DEBUG") + set(plugin_release "${${plugin_release_var}}") + set(plugin_debug "${${plugin_debug_var}}") + if(DEFINED "${plugin_release_var}" AND DEFINED "${plugin_debug_var}" AND NOT EXISTS "${plugin_release}" AND NOT EXISTS "${plugin_debug}") + message(WARNING "Qt plugin \"${plugin}\" not recognized or found.") + endif() + if(NOT EXISTS "${${plugin_debug_var}}") + set(plugin_debug "${plugin_release}") + endif() + + get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if(_isMultiConfig OR CMAKE_BUILD_TYPE) + set(_RELEASE_CONFIGS ${CMAKE_CONFIGURATION_TYPES} "${CMAKE_BUILD_TYPE}") + if (_RELEASE_CONFIGS) + list(FILTER _RELEASE_CONFIGS EXCLUDE REGEX "[Dd][Ee][Bb][Uu][Gg]") + endif() + string(REPLACE ";" "|" _RELEASE_CONFIGS "${_RELEASE_CONFIGS}") + install_qt4_plugin_path("${plugin_release}" "${executable}" "${copy}" "${installed_plugin_path_var}_release" "${plugins_dir}" "${component}" "${_RELEASE_CONFIGS}") + install_qt4_plugin_path("${plugin_debug}" "${executable}" "${copy}" "${installed_plugin_path_var}_debug" "${plugins_dir}" "${component}" "Debug") + unset(_RELEASE_CONFIGS) + + if(CMAKE_BUILD_TYPE MATCHES "^Debug$") + set(${installed_plugin_path_var} ${${installed_plugin_path_var}_debug}) + else() + set(${installed_plugin_path_var} ${${installed_plugin_path_var}_release}) + endif() + else() + install_qt4_plugin_path("${plugin_release}" "${executable}" "${copy}" "${installed_plugin_path_var}" "${plugins_dir}" "${component}") + endif() + endif() + set(${installed_plugin_path_var} ${${installed_plugin_path_var}} PARENT_SCOPE) endfunction() function(install_qt4_executable executable) - unset(qtplugins) - if(ARGC GREATER 1) - set(qtplugins ${ARGV1}) - endif() - unset(libs) - if(ARGC GREATER 2) - set(libs ${ARGV2}) - endif() - unset(dirs) - if(ARGC GREATER 3) - set(dirs ${ARGV3}) - endif() - unset(plugins_dir) - if(ARGC GREATER 4) - set(plugins_dir ${ARGV4}) - endif() - unset(request_qt_conf) - if(ARGC GREATER 5) - set(request_qt_conf ${ARGV5}) - endif() - unset(component) - if(ARGC GREATER 6) - set(component ${ARGV6}) - endif() - - if(QT_LIBRARY_DIR) - list(APPEND dirs "${QT_LIBRARY_DIR}") - endif() - if(QT_BINARY_DIR) - list(APPEND dirs "${QT_BINARY_DIR}") - endif() - if(component) - set(component COMPONENT ${component}) - else() - unset(component) - endif() - - get_filename_component(executable_absolute "${executable}" ABSOLUTE) - if(EXISTS "${QT_QTCORE_LIBRARY_RELEASE}") - gp_file_type("${executable_absolute}" "${QT_QTCORE_LIBRARY_RELEASE}" qtcore_type) - elseif(EXISTS "${QT_QTCORE_LIBRARY_DEBUG}") - gp_file_type("${executable_absolute}" "${QT_QTCORE_LIBRARY_DEBUG}" qtcore_type) - endif() - if(qtcore_type STREQUAL "system") - set(qt_plugins_dir "") - endif() - - if(QT_IS_STATIC) - message(WARNING "Qt built statically: not installing plugins.") - else() - foreach(plugin ${qtplugins}) - set(installed_plugin_paths "") - install_qt4_plugin("${plugin}" "${executable}" 0 installed_plugin_paths "${plugins_dir}" "${component}") - list(APPEND libs ${installed_plugin_paths}) - endforeach() - endif() - - resolve_qt4_paths(libs "") - - install(CODE - "include(\"${DeployQt4_cmake_dir}/DeployQt4.cmake\") - set(BU_CHMOD_BUNDLE_ITEMS TRUE) - FIXUP_QT4_EXECUTABLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${executable}\" \"\" \"${libs}\" \"${dirs}\" \"${plugins_dir}\" \"${request_qt_conf}\")" - ${component} - ) + unset(qtplugins) + if(ARGC GREATER 1) + set(qtplugins ${ARGV1}) + endif() + unset(libs) + if(ARGC GREATER 2) + set(libs ${ARGV2}) + endif() + unset(dirs) + if(ARGC GREATER 3) + set(dirs ${ARGV3}) + endif() + unset(plugins_dir) + if(ARGC GREATER 4) + set(plugins_dir ${ARGV4}) + endif() + unset(request_qt_conf) + if(ARGC GREATER 5) + set(request_qt_conf ${ARGV5}) + endif() + unset(component) + if(ARGC GREATER 6) + set(component ${ARGV6}) + endif() + + if(QT_LIBRARY_DIR) + list(APPEND dirs "${QT_LIBRARY_DIR}") + endif() + if(QT_BINARY_DIR) + list(APPEND dirs "${QT_BINARY_DIR}") + endif() + if(component) + set(component COMPONENT ${component}) + else() + unset(component) + endif() + + get_filename_component(executable_absolute "${executable}" ABSOLUTE) + if(EXISTS "${QT_QTCORE_LIBRARY_RELEASE}") + gp_file_type("${executable_absolute}" "${QT_QTCORE_LIBRARY_RELEASE}" qtcore_type) + elseif(EXISTS "${QT_QTCORE_LIBRARY_DEBUG}") + gp_file_type("${executable_absolute}" "${QT_QTCORE_LIBRARY_DEBUG}" qtcore_type) + endif() + if(qtcore_type STREQUAL "system") + set(qt_plugins_dir "") + endif() + + if(QT_IS_STATIC) + message(WARNING "Qt built statically: not installing plugins.") + else() + foreach(plugin ${qtplugins}) + set(installed_plugin_paths "") + install_qt4_plugin("${plugin}" "${executable}" 0 installed_plugin_paths "${plugins_dir}" "${component}") + list(APPEND libs ${installed_plugin_paths}) + endforeach() + endif() + + resolve_qt4_paths(libs "") + + install(CODE +"include(\"${DeployQt4_cmake_dir}/DeployQt4.cmake\") +set(BU_CHMOD_BUNDLE_ITEMS TRUE) +FIXUP_QT4_EXECUTABLE(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${executable}\" \"\" \"${libs}\" \"${dirs}\" \"${plugins_dir}\" \"${request_qt_conf}\")" + ${component} + ) endfunction() diff --git a/Modules/Documentation.cmake b/Modules/Documentation.cmake index 6e21249..229b8ab 100644 --- a/Modules/Documentation.cmake +++ b/Modules/Documentation.cmake @@ -1,14 +1,15 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# Documentation -# ------------- -# -# DocumentationVTK.cmake -# -# This file provides support for the VTK documentation framework. It -# relies on several tools (Doxygen, Perl, etc). +#[=======================================================================[.rst: +Documentation +------------- + +DocumentationVTK.cmake + +This file provides support for the VTK documentation framework. It +relies on several tools (Doxygen, Perl, etc). +#]=======================================================================] # # Build the documentation ? diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index 0c5b33f..93cd74a 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -16,7 +16,9 @@ External Project Definition The ``ExternalProject_Add()`` function creates a custom target to drive download, update/patch, configure, build, install and test steps of an - external project:: + external project: + + .. code-block:: cmake ExternalProject_Add(<name> [<option>...]) @@ -47,7 +49,11 @@ External Project Definition ``STAMP_DIR <dir>`` Directory in which to store the timestamps of each step. Log files from - individual steps are also created in here (see *Logging Options* below). + individual steps are also created in here unless overriden by LOG_DIR + (see *Logging Options* below). + + ``LOG_DIR <dir>`` + Directory in which to store the logs of each step. ``DOWNLOAD_DIR <dir>`` Directory in which to store downloaded files before unpacking them. This @@ -90,6 +96,7 @@ External Project Definition SOURCE_DIR = <prefix>/src/<name> BINARY_DIR = <prefix>/src/<name>-build INSTALL_DIR = <prefix> + LOG_DIR = <STAMP_DIR> Otherwise, if the ``EP_BASE`` directory property is set then components of an external project are stored under the specified base:: @@ -100,6 +107,7 @@ External Project Definition SOURCE_DIR = <base>/Source/<name> BINARY_DIR = <base>/Build/<name> INSTALL_DIR = <base>/Install/<name> + LOG_DIR = <STAMP_DIR> If no ``PREFIX``, ``EP_PREFIX``, or ``EP_BASE`` is specified, then the default is to set ``PREFIX`` to ``<name>-prefix``. Relative paths are @@ -515,7 +523,8 @@ External Project Definition **Output Logging Options:** Each of the following ``LOG_...`` options can be used to wrap the relevant step in a script to capture its output to files. The log files will be - created in the ``STAMP_DIR`` directory with step-specific file names. + created in ``LOG_DIR`` if supplied or otherwise the ``STAMP_DIR`` + directory with step-specific file names. ``LOG_DOWNLOAD <bool>`` When enabled, the output of the download step is logged to files. @@ -523,6 +532,9 @@ External Project Definition ``LOG_UPDATE <bool>`` When enabled, the output of the update step is logged to files. + ``LOG_PATCH <bool>`` + When enabled, the output of the patch step is logged to files. + ``LOG_CONFIGURE <bool>`` When enabled, the output of the configure step is logged to files. @@ -535,6 +547,9 @@ External Project Definition ``LOG_TEST <bool>`` When enabled, the output of the test step is logged to files. + ``LOG_MERGED_STDOUTERR <bool>`` + When enabled, the output the step is not split by stdout and stderr. + **Terminal Access Options:** Steps can be given direct access to the terminal in some cases. Giving a step access to the terminal may allow it to receive terminal input if @@ -608,7 +623,9 @@ External Project Definition appended to them by following them with as many ``COMMAND ...`` options as needed (:manual:`generator expressions <cmake-generator-expressions(7)>` are - supported). For example:: + supported). For example: + + .. code-block:: cmake ExternalProject_Add(example ... # Download options, etc. @@ -627,7 +644,9 @@ Obtaining Project Properties .. command:: ExternalProject_Get_Property The ``ExternalProject_Get_Property()`` function retrieves external project - target properties:: + target properties: + + .. code-block:: cmake ExternalProject_Get_Property(<name> <prop1> [<prop2>...]) @@ -655,7 +674,9 @@ control needed to implement such step-level capabilities. The ``ExternalProject_Add_Step()`` function specifies an additional custom step for an external project defined by an earlier call to - :command:`ExternalProject_Add`:: + :command:`ExternalProject_Add`: + + .. code-block:: cmake ExternalProject_Add_Step(<name> <step> [<option>...]) @@ -705,7 +726,7 @@ control needed to implement such step-level capabilities. ``LOG <bool>`` If set, this causes the output from the custom step to be captured to files - in the external project's ``STAMP_DIR``. + in the external project's ``LOG_DIR`` if supplied or ``STAMP_DIR``. ``USES_TERMINAL <bool>`` If enabled, this gives the custom step direct access to the terminal if @@ -722,7 +743,9 @@ control needed to implement such step-level capabilities. The ``ExternalProject_Add_StepTargets()`` function generates targets for the steps listed. The name of each created target will be of the form - ``<name>-<step>``:: + ``<name>-<step>``: + + .. code-block:: cmake ExternalProject_Add_StepTargets(<name> [NO_DEPENDS] <step1> [<step2>...]) @@ -773,7 +796,9 @@ control needed to implement such step-level capabilities. The ``ExternalProject_Add_StepDependencies()`` function can be used to add dependencies to a step. The dependencies added must be targets CMake already knows about (these can be ordinary executable or library targets, custom - targets or even step targets of another external project):: + targets or even step targets of another external project): + + .. code-block:: cmake ExternalProject_Add_StepDependencies(<name> <step> <target1> [<target2>...]) @@ -934,6 +959,11 @@ function(_ep_parse_arguments f name ns args) # We loop through ARGN and consider the namespace starting with an # upper-case letter followed by at least two more upper-case letters, # numbers or underscores to be keywords. + + if(NOT DEFINED _ExternalProject_SELF) + message(FATAL_ERROR "error: ExternalProject module must be explicitly included before using ${f} function") + endif() + set(key) foreach(arg IN LISTS args) @@ -1603,6 +1633,7 @@ function(_ep_set_directories name) set(stamp_default "${base}/Stamp/${name}") set(install_default "${base}/Install/${name}") endif() + set(log_default "${stamp_default}") get_property(build_in_source TARGET ${name} PROPERTY _EP_BUILD_IN_SOURCE) if(build_in_source) get_property(have_binary_dir TARGET ${name} PROPERTY _EP_BINARY_DIR SET) @@ -1612,7 +1643,7 @@ function(_ep_set_directories name) endif() endif() set(top "${CMAKE_CURRENT_BINARY_DIR}") - set(places stamp download source binary install tmp) + set(places stamp download source binary install tmp log) foreach(var ${places}) string(TOUPPER "${var}" VAR) get_property(${var}_dir TARGET ${name} PROPERTY _EP_${VAR}_DIR) @@ -1666,7 +1697,7 @@ macro(_ep_replace_location_tags target_name) set(vars ${ARGN}) foreach(var ${vars}) if(${var}) - foreach(dir SOURCE_DIR SOURCE_SUBDIR BINARY_DIR INSTALL_DIR TMP_DIR DOWNLOAD_DIR DOWNLOADED_FILE) + foreach(dir SOURCE_DIR SOURCE_SUBDIR BINARY_DIR INSTALL_DIR TMP_DIR DOWNLOAD_DIR DOWNLOADED_FILE LOG_DIR) get_property(val TARGET ${target_name} PROPERTY _EP_${dir}) string(REPLACE "<${dir}>" "${val}" ${var} "${${var}}") endforeach() @@ -1848,6 +1879,7 @@ function(_ep_get_build_command name step cmd_var) endfunction() function(_ep_write_log_script name step cmd_var) + ExternalProject_Get_Property(${name} log_dir) ExternalProject_Get_Property(${name} stamp_dir) set(command "${${cmd_var}}") @@ -1919,22 +1951,30 @@ endif() # Wrap the command in a script to log output to files. set(script ${stamp_dir}/${name}-${step}-$<CONFIG>.cmake) - set(logbase ${stamp_dir}/${name}-${step}) + set(logbase ${log_dir}/${name}-${step}) + get_property(log_merged TARGET ${name} PROPERTY _EP_LOG_MERGED_STDOUTERR) + if (log_merged) + set(stdout_log "${logbase}.log") + set(stderr_log "${logbase}.log") + else() + set(stdout_log "${logbase}-out.log") + set(stderr_log "${logbase}-err.log") + endif() set(code " ${code_cygpath_make} set(command \"${command}\") execute_process( COMMAND \${command} RESULT_VARIABLE result - OUTPUT_FILE \"${logbase}-out.log\" - ERROR_FILE \"${logbase}-err.log\" + OUTPUT_FILE \"${stdout_log}\" + ERROR_FILE \"${stderr_log}\" ) if(result) set(msg \"Command failed: \${result}\\n\") foreach(arg IN LISTS command) set(msg \"\${msg} '\${arg}'\") endforeach() - set(msg \"\${msg}\\nSee also\\n ${logbase}-*.log\") + set(msg \"\${msg}\\nSee also\\n ${stderr_log}\") message(FATAL_ERROR \"\${msg}\") else() set(msg \"${name} ${step} command succeeded. See also ${logbase}-*.log\") @@ -2207,7 +2247,7 @@ endfunction() function(_ep_add_mkdir_command name) ExternalProject_Get_Property(${name} - source_dir binary_dir install_dir stamp_dir download_dir tmp_dir) + source_dir binary_dir install_dir stamp_dir download_dir tmp_dir log_dir) _ep_get_configuration_subdir_suffix(cfgdir) @@ -2219,6 +2259,7 @@ function(_ep_add_mkdir_command name) COMMAND ${CMAKE_COMMAND} -E make_directory ${tmp_dir} COMMAND ${CMAKE_COMMAND} -E make_directory ${stamp_dir}${cfgdir} COMMAND ${CMAKE_COMMAND} -E make_directory ${download_dir} + COMMAND ${CMAKE_COMMAND} -E make_directory ${log_dir} ) endfunction() @@ -2722,10 +2763,18 @@ function(_ep_add_patch_command name) set(work_dir ${source_dir}) endif() + get_property(log TARGET ${name} PROPERTY _EP_LOG_PATCH) + if(log) + set(log LOG 1) + else() + set(log "") + endif() + ExternalProject_Add_Step(${name} patch COMMAND ${cmd} WORKING_DIRECTORY ${work_dir} DEPENDEES download + ${log} ) endfunction() diff --git a/Modules/FindALSA.cmake b/Modules/FindALSA.cmake index c9cfd60..f27d7fe 100644 --- a/Modules/FindALSA.cmake +++ b/Modules/FindALSA.cmake @@ -1,44 +1,45 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindALSA -# -------- -# -# Find alsa -# -# Find the alsa libraries (asound) -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines :prop_tgt:`IMPORTED` target ``ALSA::ALSA``, if -# ALSA has been found. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following variables: -# -# ``ALSA_FOUND`` -# True if ALSA_INCLUDE_DIR & ALSA_LIBRARY are found -# -# ``ALSA_LIBRARIES`` -# List of libraries when using ALSA. -# -# ``ALSA_INCLUDE_DIRS`` -# Where to find the ALSA headers. -# -# Cache variables -# ^^^^^^^^^^^^^^^ -# -# The following cache variables may also be set: -# -# ``ALSA_INCLUDE_DIR`` -# the ALSA include directory -# -# ``ALSA_LIBRARY`` -# the absolute path of the asound library +#[=======================================================================[.rst: +FindALSA +-------- + +Find alsa + +Find the alsa libraries (asound) + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``ALSA::ALSA``, if +ALSA has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +``ALSA_FOUND`` + True if ALSA_INCLUDE_DIR & ALSA_LIBRARY are found + +``ALSA_LIBRARIES`` + List of libraries when using ALSA. + +``ALSA_INCLUDE_DIRS`` + Where to find the ALSA headers. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``ALSA_INCLUDE_DIR`` + the ALSA include directory + +``ALSA_LIBRARY`` + the absolute path of the asound library +#]=======================================================================] find_path(ALSA_INCLUDE_DIR NAMES alsa/asoundlib.h DOC "The ALSA (asound) include directory" diff --git a/Modules/FindASPELL.cmake b/Modules/FindASPELL.cmake index 6944ac1..c2d29e2 100644 --- a/Modules/FindASPELL.cmake +++ b/Modules/FindASPELL.cmake @@ -1,21 +1,22 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindASPELL -# ---------- -# -# Try to find ASPELL -# -# Once done this will define -# -# :: -# -# ASPELL_FOUND - system has ASPELL -# ASPELL_EXECUTABLE - the ASPELL executable -# ASPELL_INCLUDE_DIR - the ASPELL include directory -# ASPELL_LIBRARIES - The libraries needed to use ASPELL -# ASPELL_DEFINITIONS - Compiler switches required for using ASPELL +#[=======================================================================[.rst: +FindASPELL +---------- + +Try to find ASPELL + +Once done this will define + +:: + + ASPELL_FOUND - system has ASPELL + ASPELL_EXECUTABLE - the ASPELL executable + ASPELL_INCLUDE_DIR - the ASPELL include directory + ASPELL_LIBRARIES - The libraries needed to use ASPELL + ASPELL_DEFINITIONS - Compiler switches required for using ASPELL +#]=======================================================================] find_path(ASPELL_INCLUDE_DIR aspell.h ) diff --git a/Modules/FindAVIFile.cmake b/Modules/FindAVIFile.cmake index 2df29ca..c12512f 100644 --- a/Modules/FindAVIFile.cmake +++ b/Modules/FindAVIFile.cmake @@ -1,23 +1,24 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindAVIFile -# ----------- -# -# Locate AVIFILE library and include paths -# -# AVIFILE (http://avifile.sourceforge.net/)is a set of libraries for -# i386 machines to use various AVI codecs. Support is limited beyond -# Linux. Windows provides native AVI support, and so doesn't need this -# library. This module defines -# -# :: -# -# AVIFILE_INCLUDE_DIR, where to find avifile.h , etc. -# AVIFILE_LIBRARIES, the libraries to link against -# AVIFILE_DEFINITIONS, definitions to use when compiling -# AVIFILE_FOUND, If false, don't try to use AVIFILE +#[=======================================================================[.rst: +FindAVIFile +----------- + +Locate AVIFILE library and include paths + +AVIFILE (http://avifile.sourceforge.net/)is a set of libraries for +i386 machines to use various AVI codecs. Support is limited beyond +Linux. Windows provides native AVI support, and so doesn't need this +library. This module defines + +:: + + AVIFILE_INCLUDE_DIR, where to find avifile.h , etc. + AVIFILE_LIBRARIES, the libraries to link against + AVIFILE_DEFINITIONS, definitions to use when compiling + AVIFILE_FOUND, If false, don't try to use AVIFILE +#]=======================================================================] if (UNIX) diff --git a/Modules/FindArmadillo.cmake b/Modules/FindArmadillo.cmake index 95f0c56..ce76c99 100644 --- a/Modules/FindArmadillo.cmake +++ b/Modules/FindArmadillo.cmake @@ -1,35 +1,36 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindArmadillo -# ------------- -# -# Find Armadillo -# -# Find the Armadillo C++ library -# -# Using Armadillo: -# -# :: -# -# find_package(Armadillo REQUIRED) -# include_directories(${ARMADILLO_INCLUDE_DIRS}) -# add_executable(foo foo.cc) -# target_link_libraries(foo ${ARMADILLO_LIBRARIES}) -# -# This module sets the following variables: -# -# :: -# -# ARMADILLO_FOUND - set to true if the library is found -# ARMADILLO_INCLUDE_DIRS - list of required include directories -# ARMADILLO_LIBRARIES - list of libraries to be linked -# ARMADILLO_VERSION_MAJOR - major version number -# ARMADILLO_VERSION_MINOR - minor version number -# ARMADILLO_VERSION_PATCH - patch version number -# ARMADILLO_VERSION_STRING - version number as a string (ex: "1.0.4") -# ARMADILLO_VERSION_NAME - name of the version (ex: "Antipodean Antileech") +#[=======================================================================[.rst: +FindArmadillo +------------- + +Find Armadillo + +Find the Armadillo C++ library + +Using Armadillo: + +:: + + find_package(Armadillo REQUIRED) + include_directories(${ARMADILLO_INCLUDE_DIRS}) + add_executable(foo foo.cc) + target_link_libraries(foo ${ARMADILLO_LIBRARIES}) + +This module sets the following variables: + +:: + + ARMADILLO_FOUND - set to true if the library is found + ARMADILLO_INCLUDE_DIRS - list of required include directories + ARMADILLO_LIBRARIES - list of libraries to be linked + ARMADILLO_VERSION_MAJOR - major version number + ARMADILLO_VERSION_MINOR - minor version number + ARMADILLO_VERSION_PATCH - patch version number + ARMADILLO_VERSION_STRING - version number as a string (ex: "1.0.4") + ARMADILLO_VERSION_NAME - name of the version (ex: "Antipodean Antileech") +#]=======================================================================] # UNIX paths are standard, no need to write. find_library(ARMADILLO_LIBRARY diff --git a/Modules/FindBISON.cmake b/Modules/FindBISON.cmake index d684ccd..d59dc27 100644 --- a/Modules/FindBISON.cmake +++ b/Modules/FindBISON.cmake @@ -1,85 +1,86 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindBISON -# --------- -# -# Find ``bison`` executable and provide a macro to generate custom build rules. -# -# The module defines the following variables: -# -# ``BISON_EXECUTABLE`` -# path to the ``bison`` program -# -# ``BISON_VERSION`` -# version of ``bison`` -# -# ``BISON_FOUND`` -# true if the program was found -# -# The minimum required version of ``bison`` can be specified using the -# standard CMake syntax, e.g. ``find_package(BISON 2.1.3)``. -# -# If ``bison`` is found, the module defines the macro:: -# -# BISON_TARGET(<Name> <YaccInput> <CodeOutput> -# [COMPILE_FLAGS <flags>] -# [DEFINES_FILE <file>] -# [VERBOSE [<file>]] -# [REPORT_FILE <file>] -# ) -# -# which will create a custom rule to generate a parser. ``<YaccInput>`` is -# the path to a yacc file. ``<CodeOutput>`` is the name of the source file -# generated by bison. A header file is also be generated, and contains -# the token list. -# -# The options are: -# -# ``COMPILE_FLAGS <flags>`` -# Specify flags to be added to the ``bison`` command line. -# -# ``DEFINES_FILE <file>`` -# Specify a non-default header ``<file>`` to be generated by ``bison``. -# -# ``VERBOSE [<file>]`` -# Tell ``bison`` to write a report file of the grammar and parser. -# If ``<file>`` is given, it specifies path the report file is copied to. -# ``[<file>]`` is left for backward compatibility of this module. -# Use ``VERBOSE REPORT_FILE <file>``. -# -# ``REPORT_FILE <file>`` -# Specify a non-default report ``<file>``, if generated. -# -# The macro defines the following variables: -# -# ``BISON_<Name>_DEFINED`` -# true is the macro ran successfully -# -# ``BISON_<Name>_INPUT`` -# The input source file, an alias for <YaccInput> -# -# ``BISON_<Name>_OUTPUT_SOURCE`` -# The source file generated by bison -# -# ``BISON_<Name>_OUTPUT_HEADER`` -# The header file generated by bison -# -# ``BISON_<Name>_OUTPUTS`` -# All files generated by bison including the source, the header and the report -# -# ``BISON_<Name>_COMPILE_FLAGS`` -# Options used in the ``bison`` command line -# -# Example usage: -# -# .. code-block:: cmake -# -# find_package(BISON) -# BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp -# DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.h) -# add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS}) +#[=======================================================================[.rst: +FindBISON +--------- + +Find ``bison`` executable and provide a macro to generate custom build rules. + +The module defines the following variables: + +``BISON_EXECUTABLE`` + path to the ``bison`` program + +``BISON_VERSION`` + version of ``bison`` + +``BISON_FOUND`` + true if the program was found + +The minimum required version of ``bison`` can be specified using the +standard CMake syntax, e.g. ``find_package(BISON 2.1.3)``. + +If ``bison`` is found, the module defines the macro:: + + BISON_TARGET(<Name> <YaccInput> <CodeOutput> + [COMPILE_FLAGS <flags>] + [DEFINES_FILE <file>] + [VERBOSE [<file>]] + [REPORT_FILE <file>] + ) + +which will create a custom rule to generate a parser. ``<YaccInput>`` is +the path to a yacc file. ``<CodeOutput>`` is the name of the source file +generated by bison. A header file is also be generated, and contains +the token list. + +The options are: + +``COMPILE_FLAGS <flags>`` + Specify flags to be added to the ``bison`` command line. + +``DEFINES_FILE <file>`` + Specify a non-default header ``<file>`` to be generated by ``bison``. + +``VERBOSE [<file>]`` + Tell ``bison`` to write a report file of the grammar and parser. + If ``<file>`` is given, it specifies path the report file is copied to. + ``[<file>]`` is left for backward compatibility of this module. + Use ``VERBOSE REPORT_FILE <file>``. + +``REPORT_FILE <file>`` + Specify a non-default report ``<file>``, if generated. + +The macro defines the following variables: + +``BISON_<Name>_DEFINED`` + true is the macro ran successfully + +``BISON_<Name>_INPUT`` + The input source file, an alias for <YaccInput> + +``BISON_<Name>_OUTPUT_SOURCE`` + The source file generated by bison + +``BISON_<Name>_OUTPUT_HEADER`` + The header file generated by bison + +``BISON_<Name>_OUTPUTS`` + All files generated by bison including the source, the header and the report + +``BISON_<Name>_COMPILE_FLAGS`` + Options used in the ``bison`` command line + +Example usage: + +.. code-block:: cmake + + find_package(BISON) + BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp + DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.h) + add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS}) +#]=======================================================================] find_program(BISON_EXECUTABLE NAMES bison win_bison DOC "path to the bison executable") mark_as_advanced(BISON_EXECUTABLE) @@ -149,17 +150,25 @@ if(BISON_EXECUTABLE) set(BISON_TARGET_verbose_file "${ReportFile}") list(APPEND BISON_TARGET_cmdopt "--report-file=${BISON_TARGET_verbose_file}") endif() + if(NOT IS_ABSOLUTE "${BISON_TARGET_verbose_file}") + set(BISON_TARGET_verbose_file "${CMAKE_CURRENT_SOURCE_DIR}/${BISON_TARGET_verbose_file}") + endif() endmacro() # internal macro # adds a custom command and sets - # BISON_TARGET_cmdopt, BISON_TARGET_verbose_file, BISON_TARGET_extraoutputs + # BISON_TARGET_cmdopt, BISON_TARGET_extraoutputs macro(BISON_TARGET_option_verbose Name BisonOutput filename) list(APPEND BISON_TARGET_cmdopt "--verbose") - list(APPEND BISON_TARGET_extraoutputs + list(APPEND BISON_TARGET_outputs "${BISON_TARGET_verbose_file}") if (NOT "${filename}" STREQUAL "") - add_custom_command(OUTPUT ${filename} + if(IS_ABSOLUTE "${filename}") + set(BISON_TARGET_verbose_extra_file "${filename}") + else() + set(BISON_TARGET_verbose_extra_file "${CMAKE_CURRENT_SOURCE_DIR}/${filename}") + endif() + add_custom_command(OUTPUT ${BISON_TARGET_verbose_extra_file} COMMAND ${CMAKE_COMMAND} -E copy "${BISON_TARGET_verbose_file}" "${filename}" @@ -167,10 +176,10 @@ if(BISON_EXECUTABLE) DEPENDS "${BISON_TARGET_verbose_file}" COMMENT "[BISON][${Name}] Copying bison verbose table to ${filename}" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) - set(BISON_${Name}_VERBOSE_FILE ${filename}) + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) list(APPEND BISON_TARGET_extraoutputs - "${filename}") + "${BISON_TARGET_verbose_extra_file}") + unset(BISON_TARGET_verbose_extra_file) endif() endmacro() @@ -226,7 +235,6 @@ if(BISON_EXECUTABLE) list(APPEND BISON_TARGET_outputs "${BISON_TARGET_output_header}") add_custom_command(OUTPUT ${BISON_TARGET_outputs} - ${BISON_TARGET_extraoutputs} COMMAND ${BISON_EXECUTABLE} ${BISON_TARGET_cmdopt} -o ${BisonOutput} ${BisonInput} VERBATIM DEPENDS ${BisonInput} diff --git a/Modules/FindBLAS.cmake b/Modules/FindBLAS.cmake index 5ee703a..48cd207 100644 --- a/Modules/FindBLAS.cmake +++ b/Modules/FindBLAS.cmake @@ -1,71 +1,75 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindBLAS -# -------- -# -# Find BLAS library -# -# This module finds an installed fortran library that implements the -# BLAS linear-algebra interface (see http://www.netlib.org/blas/). The -# list of libraries searched for is taken from the autoconf macro file, -# acx_blas.m4 (distributed at -# http://ac-archive.sourceforge.net/ac-archive/acx_blas.html). -# -# This module sets the following variables: -# -# :: -# -# BLAS_FOUND - set to true if a library implementing the BLAS interface -# is found -# BLAS_LINKER_FLAGS - uncached list of required linker flags (excluding -l -# and -L). -# BLAS_LIBRARIES - uncached list of libraries (using full path name) to -# link against to use BLAS -# BLAS95_LIBRARIES - uncached list of libraries (using full path name) -# to link against to use BLAS95 interface -# BLAS95_FOUND - set to true if a library implementing the BLAS f95 interface -# is found -# -# The following variables can be used to control this module: -# -# :: -# -# BLA_STATIC if set on this determines what kind of linkage we do (static) -# BLA_VENDOR if set checks only the specified vendor, if not set checks -# all the possibilities -# BLA_F95 if set on tries to find the f95 interfaces for BLAS/LAPACK -# BLA_PREFER_PKGCONFIG if set pkg-config will be used to search for a BLAS -# library first and if one is found that is preferred -# -# List of vendors (BLA_VENDOR) valid in this module: -# -# * Goto -# * OpenBLAS -# * FLAME -# * ATLAS PhiPACK -# * CXML -# * DXML -# * SunPerf -# * SCSL -# * SGIMATH -# * IBMESSL -# * Intel10_32 (intel mkl v10 32 bit) -# * Intel10_64lp (intel mkl v10 64 bit, lp thread model, lp64 model) -# * Intel10_64lp_seq (intel mkl v10 64 bit, sequential code, lp64 model) -# * Intel (older versions of mkl 32 and 64 bit) -# * ACML -# * ACML_MP -# * ACML_GPU -# * Apple -# * NAS -# * Generic -# -# .. note:: -# -# C/CXX should be enabled to use Intel mkl -# +#[=======================================================================[.rst: +FindBLAS +-------- + +Find BLAS library + +This module finds an installed fortran library that implements the +BLAS linear-algebra interface (see http://www.netlib.org/blas/). The +list of libraries searched for is taken from the autoconf macro file, +acx_blas.m4 (distributed at +http://ac-archive.sourceforge.net/ac-archive/acx_blas.html). + +This module sets the following variables: + +:: + + BLAS_FOUND - set to true if a library implementing the BLAS interface + is found + BLAS_LINKER_FLAGS - uncached list of required linker flags (excluding -l + and -L). + BLAS_LIBRARIES - uncached list of libraries (using full path name) to + link against to use BLAS (may be empty if compiler implicitly links + BLAS) + BLAS95_LIBRARIES - uncached list of libraries (using full path name) + to link against to use BLAS95 interface + BLAS95_FOUND - set to true if a library implementing the BLAS f95 interface + is found + +The following variables can be used to control this module: + +:: + + BLA_STATIC if set on this determines what kind of linkage we do (static) + BLA_VENDOR if set checks only the specified vendor, if not set checks + all the possibilities + BLA_F95 if set on tries to find the f95 interfaces for BLAS/LAPACK + BLA_PREFER_PKGCONFIG if set pkg-config will be used to search for a BLAS + library first and if one is found that is preferred + +List of vendors (BLA_VENDOR) valid in this module: + +* Goto +* OpenBLAS +* FLAME +* ATLAS PhiPACK +* CXML +* DXML +* SunPerf +* SCSL +* SGIMATH +* IBMESSL +* Intel10_32 (intel mkl v10 32 bit) +* Intel10_64lp (intel mkl v10+ 64 bit, threaded code, lp64 model) +* Intel10_64lp_seq (intel mkl v10+ 64 bit, sequential code, lp64 model) +* Intel10_64ilp (intel mkl v10+ 64 bit, threaded code, ilp64 model) +* Intel10_64ilp_seq (intel mkl v10+ 64 bit, sequential code, ilp64 model) +* Intel (older versions of mkl 32 and 64 bit) +* ACML +* ACML_MP +* ACML_GPU +* Apple +* NAS +* Generic + +.. note:: + + C/CXX should be enabled to use Intel mkl + +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/CheckFunctionExists.cmake) include(${CMAKE_CURRENT_LIST_DIR}/CheckFortranFunctionExists.cmake) @@ -96,77 +100,81 @@ if(BLA_PREFER_PKGCONFIG) endif() macro(Check_Fortran_Libraries LIBRARIES _prefix _name _flags _list _thread) -# This macro checks for the existence of the combination of fortran libraries -# given by _list. If the combination is found, this macro checks (using the -# Check_Fortran_Function_Exists macro) whether can link against that library -# combination using the name of a routine given by _name using the linker -# flags given by _flags. If the combination of libraries is found and passes -# the link test, LIBRARIES is set to the list of complete library paths that -# have been found. Otherwise, LIBRARIES is set to FALSE. - -# N.B. _prefix is the prefix applied to the names of all cached variables that -# are generated internally and marked advanced by this macro. - -set(_libdir ${ARGN}) - -set(_libraries_work TRUE) -set(${LIBRARIES}) -set(_combined_name) -if (NOT _libdir) - if (WIN32) - set(_libdir ENV LIB) - elseif (APPLE) - set(_libdir ENV DYLD_LIBRARY_PATH) - else () - set(_libdir ENV LD_LIBRARY_PATH) + # This macro checks for the existence of the combination of fortran libraries + # given by _list. If the combination is found, this macro checks (using the + # Check_Fortran_Function_Exists macro) whether can link against that library + # combination using the name of a routine given by _name using the linker + # flags given by _flags. If the combination of libraries is found and passes + # the link test, LIBRARIES is set to the list of complete library paths that + # have been found. Otherwise, LIBRARIES is set to FALSE. + + # N.B. _prefix is the prefix applied to the names of all cached variables that + # are generated internally and marked advanced by this macro. + + set(_libdir ${ARGN}) + + set(_libraries_work TRUE) + set(${LIBRARIES}) + set(_combined_name) + if (NOT _libdir) + if (WIN32) + set(_libdir ENV LIB) + elseif (APPLE) + set(_libdir ENV DYLD_LIBRARY_PATH) + else () + set(_libdir ENV LD_LIBRARY_PATH) + endif () endif () -endif () -foreach(_library ${_list}) - set(_combined_name ${_combined_name}_${_library}) + foreach(_library ${_list}) + set(_combined_name ${_combined_name}_${_library}) - if(_libraries_work) - if (BLA_STATIC) - if (WIN32) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif () - if (APPLE) - set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) + if(_libraries_work) + if (BLA_STATIC) + if (WIN32) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) + endif () + if (APPLE) + set(CMAKE_FIND_LIBRARY_SUFFIXES .lib ${CMAKE_FIND_LIBRARY_SUFFIXES}) + else () + set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) + endif () else () - set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES}) - endif () - else () - if (CMAKE_SYSTEM_NAME STREQUAL "Linux") - # for ubuntu's libblas3gf and liblapack3gf packages - set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf) + if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + # for ubuntu's libblas3gf and liblapack3gf packages + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .so.3gf) + endif () endif () - endif () - find_library(${_prefix}_${_library}_LIBRARY - NAMES ${_library} - PATHS ${_libdir} - ) - mark_as_advanced(${_prefix}_${_library}_LIBRARY) - set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY}) - set(_libraries_work ${${_prefix}_${_library}_LIBRARY}) + find_library(${_prefix}_${_library}_LIBRARY + NAMES ${_library} + PATHS ${_libdir} + ) + mark_as_advanced(${_prefix}_${_library}_LIBRARY) + set(${LIBRARIES} ${${LIBRARIES}} ${${_prefix}_${_library}_LIBRARY}) + set(_libraries_work ${${_prefix}_${_library}_LIBRARY}) + endif() + endforeach() + if(_libraries_work) + # Test this combination of libraries. + set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_thread}) + # message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}") + if (CMAKE_Fortran_COMPILER_LOADED) + check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS) + else() + check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS) + endif() + set(CMAKE_REQUIRED_LIBRARIES) + mark_as_advanced(${_prefix}${_combined_name}_WORKS) + set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) endif() -endforeach() -if(_libraries_work) - # Test this combination of libraries. - set(CMAKE_REQUIRED_LIBRARIES ${_flags} ${${LIBRARIES}} ${_thread}) -# message("DEBUG: CMAKE_REQUIRED_LIBRARIES = ${CMAKE_REQUIRED_LIBRARIES}") - if (CMAKE_Fortran_COMPILER_LOADED) - check_fortran_function_exists("${_name}" ${_prefix}${_combined_name}_WORKS) + if(_libraries_work) + if("${_list}" STREQUAL "") + set(${LIBRARIES} "${LIBRARIES}-PLACEHOLDER-FOR-EMPTY-LIBRARIES") + endif() else() - check_function_exists("${_name}_" ${_prefix}${_combined_name}_WORKS) + set(${LIBRARIES} FALSE) endif() - set(CMAKE_REQUIRED_LIBRARIES) - mark_as_advanced(${_prefix}${_combined_name}_WORKS) - set(_libraries_work ${${_prefix}${_combined_name}_WORKS}) -endif() -if(NOT _libraries_work) - set(${LIBRARIES} FALSE) -endif() -#message("DEBUG: ${LIBRARIES} = ${${LIBRARIES}}") + #message("DEBUG: ${LIBRARIES} = ${${LIBRARIES}}") endmacro() set(BLAS_LINKER_FLAGS) @@ -180,516 +188,539 @@ else () endif() endif () +if (BLA_VENDOR STREQUAL "All") + if(NOT BLAS_LIBRARIES) + # Implicitly linked BLAS libraries + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "" + "" + ) + endif() +endif () + +#BLAS in intel mkl 10+ library? (em64t 64bit) +if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All") + if (NOT BLAS_LIBRARIES) + if (BLA_VENDOR MATCHES "_64ilp") + set(BLAS_mkl_ILP_MODE "ilp64") + else () + set(BLAS_mkl_ILP_MODE "lp64") + endif () + if (NOT WIN32) + set(LM "-lm") + endif () + if (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED) + if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED) + find_package(Threads) + else() + find_package(Threads REQUIRED) + endif() + + set(BLAS_SEARCH_LIBS "") + + if(BLA_F95) + set(BLAS_mkl_SEARCH_SYMBOL SGEMM) + set(_LIBRARIES BLAS95_LIBRARIES) + if (WIN32) + if (BLA_STATIC) + set(BLAS_mkl_DLL_SUFFIX "") + else() + set(BLAS_mkl_DLL_SUFFIX "_dll") + endif() + + # Find the main file (32-bit or 64-bit) + set(BLAS_SEARCH_LIBS_WIN_MAIN "") + if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN + "mkl_blas95${BLAS_mkl_DLL_SUFFIX} mkl_intel_c${BLAS_mkl_DLL_SUFFIX}") + endif() + if (BLA_VENDOR MATCHES "^Intel10_64i?lp" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN + "mkl_blas95_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX} mkl_intel_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX}") + endif () + + # Add threading/sequential libs + set(BLAS_SEARCH_LIBS_WIN_THREAD "") + if (BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "mkl_sequential${BLAS_mkl_DLL_SUFFIX}") + endif() + if (NOT BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All") + # old version + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") + # mkl >= 10.3 + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") + endif() + + # Cartesian product of the above + foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN}) + foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD}) + list(APPEND BLAS_SEARCH_LIBS + "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}") + endforeach() + endforeach() + else () + if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95 mkl_intel mkl_intel_thread mkl_core guide") + endif () + if (BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All") + # old version + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95 mkl_intel_${BLAS_mkl_ILP_MODE} mkl_intel_thread mkl_core guide") + + # mkl >= 10.3 + if (CMAKE_C_COMPILER MATCHES ".+gcc") + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_intel_${BLAS_mkl_ILP_MODE} mkl_gnu_thread mkl_core gomp") + else () + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_intel_${BLAS_mkl_ILP_MODE} mkl_intel_thread mkl_core iomp5") + endif () + endif () + if (BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "mkl_blas95_${BLAS_mkl_ILP_MODE} mkl_intel_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core") + endif () + endif () + else () + set(BLAS_mkl_SEARCH_SYMBOL sgemm) + set(_LIBRARIES BLAS_LIBRARIES) + if (WIN32) + if (BLA_STATIC) + set(BLAS_mkl_DLL_SUFFIX "") + else() + set(BLAS_mkl_DLL_SUFFIX "_dll") + endif() + + # Find the main file (32-bit or 64-bit) + set(BLAS_SEARCH_LIBS_WIN_MAIN "") + if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN + "mkl_intel_c${BLAS_mkl_DLL_SUFFIX}") + endif() + if (BLA_VENDOR MATCHES "^Intel10_64i?lp" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN + "mkl_intel_${BLAS_mkl_ILP_MODE}${BLAS_mkl_DLL_SUFFIX}") + endif () + + # Add threading/sequential libs + set(BLAS_SEARCH_LIBS_WIN_THREAD "") + if (NOT BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All") + # old version + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") + # mkl >= 10.3 + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") + endif() + if (BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD + "mkl_sequential${BLAS_mkl_DLL_SUFFIX}") + endif() + + # Cartesian product of the above + foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN}) + foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD}) + list(APPEND BLAS_SEARCH_LIBS + "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}") + endforeach() + endforeach() + else () + if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "mkl_intel mkl_intel_thread mkl_core guide") + endif () + if (BLA_VENDOR MATCHES "^Intel10_64i?lp$" OR BLA_VENDOR STREQUAL "All") + + # old version + list(APPEND BLAS_SEARCH_LIBS + "mkl_intel_${BLAS_mkl_ILP_MODE} mkl_intel_thread mkl_core guide") + + # mkl >= 10.3 + if (CMAKE_C_COMPILER MATCHES ".+gcc") + list(APPEND BLAS_SEARCH_LIBS + "mkl_intel_${BLAS_mkl_ILP_MODE} mkl_gnu_thread mkl_core gomp") + else () + list(APPEND BLAS_SEARCH_LIBS + "mkl_intel_${BLAS_mkl_ILP_MODE} mkl_intel_thread mkl_core iomp5") + endif () + endif () + if (BLA_VENDOR MATCHES "^Intel10_64i?lp_seq$" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "mkl_intel_${BLAS_mkl_ILP_MODE} mkl_sequential mkl_core") + endif () + + #older vesions of intel mkl libs + if (BLA_VENDOR STREQUAL "Intel" OR BLA_VENDOR STREQUAL "All") + list(APPEND BLAS_SEARCH_LIBS + "mkl") + list(APPEND BLAS_SEARCH_LIBS + "mkl_ia32") + list(APPEND BLAS_SEARCH_LIBS + "mkl_em64t") + endif () + endif () + endif () + + foreach (IT ${BLAS_SEARCH_LIBS}) + string(REPLACE " " ";" SEARCH_LIBS ${IT}) + if (NOT ${_LIBRARIES}) + check_fortran_libraries( + ${_LIBRARIES} + BLAS + ${BLAS_mkl_SEARCH_SYMBOL} + "" + "${SEARCH_LIBS}" + "${CMAKE_THREAD_LIBS_INIT};${LM}" + ) + endif () + endforeach () + + endif () + unset(BLAS_mkl_ILP_MODE) + endif () +endif () + if (BLA_VENDOR STREQUAL "Goto" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - # gotoblas (http://www.tacc.utexas.edu/tacc-projects/gotoblas2) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "goto2" - "" - ) - endif() + if(NOT BLAS_LIBRARIES) + # gotoblas (http://www.tacc.utexas.edu/tacc-projects/gotoblas2) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "goto2" + "" + ) + endif() endif () if (BLA_VENDOR STREQUAL "OpenBLAS" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - # OpenBLAS (http://www.openblas.net) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "openblas" - "" - ) - endif() + if(NOT BLAS_LIBRARIES) + # OpenBLAS (http://www.openblas.net) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "openblas" + "" + ) + endif() endif () if (BLA_VENDOR STREQUAL "FLAME" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - # FLAME's blis library (https://github.com/flame/blis) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "blis" - "" - ) - endif() + if(NOT BLAS_LIBRARIES) + # FLAME's blis library (https://github.com/flame/blis) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "blis" + "" + ) + endif() endif () if (BLA_VENDOR STREQUAL "ATLAS" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - dgemm - "" - "f77blas;atlas" - "" - ) - endif() + if(NOT BLAS_LIBRARIES) + # BLAS in ATLAS library? (http://math-atlas.sourceforge.net/) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + dgemm + "" + "f77blas;atlas" + "" + ) + endif() endif () # BLAS in PhiPACK libraries? (requires generic BLAS lib, too) if (BLA_VENDOR STREQUAL "PhiPACK" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "sgemm;dgemm;blas" - "" - ) - endif() + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "sgemm;dgemm;blas" + "" + ) + endif() endif () # BLAS in Alpha CXML library? if (BLA_VENDOR STREQUAL "CXML" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "cxml" - "" - ) - endif() + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "cxml" + "" + ) + endif() endif () # BLAS in Alpha DXML library? (now called CXML, see above) if (BLA_VENDOR STREQUAL "DXML" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "dxml" - "" - ) - endif() + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "dxml" + "" + ) + endif() endif () # BLAS in Sun Performance library? if (BLA_VENDOR STREQUAL "SunPerf" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "-xlic_lib=sunperf" - "sunperf;sunmath" - "" - ) - if(BLAS_LIBRARIES) - set(BLAS_LINKER_FLAGS "-xlic_lib=sunperf") + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "-xlic_lib=sunperf" + "sunperf;sunmath" + "" + ) + if(BLAS_LIBRARIES) + set(BLAS_LINKER_FLAGS "-xlic_lib=sunperf") + endif() endif() - endif() endif () # BLAS in SCSL library? (SGI/Cray Scientific Library) if (BLA_VENDOR STREQUAL "SCSL" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "scsl" - "" - ) - endif() + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "scsl" + "" + ) + endif() endif () # BLAS in SGIMATH library? if (BLA_VENDOR STREQUAL "SGIMATH" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "complib.sgimath" - "" - ) - endif() + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "complib.sgimath" + "" + ) + endif() endif () # BLAS in IBM ESSL library? (requires generic BLAS lib, too) if (BLA_VENDOR STREQUAL "IBMESSL" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "essl;blas" - "" - ) - endif() + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "essl;blas" + "" + ) + endif() endif () #BLAS in acml library? if (BLA_VENDOR MATCHES "ACML" OR BLA_VENDOR STREQUAL "All") - if( ((BLA_VENDOR STREQUAL "ACML") AND (NOT BLAS_ACML_LIB_DIRS)) OR - ((BLA_VENDOR STREQUAL "ACML_MP") AND (NOT BLAS_ACML_MP_LIB_DIRS)) OR - ((BLA_VENDOR STREQUAL "ACML_GPU") AND (NOT BLAS_ACML_GPU_LIB_DIRS)) - ) - # try to find acml in "standard" paths - if( WIN32 ) + if( ((BLA_VENDOR STREQUAL "ACML") AND (NOT BLAS_ACML_LIB_DIRS)) OR + ((BLA_VENDOR STREQUAL "ACML_MP") AND (NOT BLAS_ACML_MP_LIB_DIRS)) OR + ((BLA_VENDOR STREQUAL "ACML_GPU") AND (NOT BLAS_ACML_GPU_LIB_DIRS)) + ) + # try to find acml in "standard" paths + if( WIN32 ) file( GLOB _ACML_ROOT "C:/AMD/acml*/ACML-EULA.txt" ) - else() + else() file( GLOB _ACML_ROOT "/opt/acml*/ACML-EULA.txt" ) - endif() - if( WIN32 ) + endif() + if( WIN32 ) file( GLOB _ACML_GPU_ROOT "C:/AMD/acml*/GPGPUexamples" ) - else() + else() file( GLOB _ACML_GPU_ROOT "/opt/acml*/GPGPUexamples" ) - endif() - list(GET _ACML_ROOT 0 _ACML_ROOT) - list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT) - if( _ACML_ROOT ) + endif() + list(GET _ACML_ROOT 0 _ACML_ROOT) + list(GET _ACML_GPU_ROOT 0 _ACML_GPU_ROOT) + if( _ACML_ROOT ) get_filename_component( _ACML_ROOT ${_ACML_ROOT} PATH ) if( SIZEOF_INTEGER EQUAL 8 ) - set( _ACML_PATH_SUFFIX "_int64" ) + set( _ACML_PATH_SUFFIX "_int64" ) + else() + set( _ACML_PATH_SUFFIX "" ) + endif() + if( CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" ) + set( _ACML_COMPILER32 "ifort32" ) + set( _ACML_COMPILER64 "ifort64" ) + elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro" ) + set( _ACML_COMPILER32 "sun32" ) + set( _ACML_COMPILER64 "sun64" ) + elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "PGI" ) + set( _ACML_COMPILER32 "pgi32" ) + if( WIN32 ) + set( _ACML_COMPILER64 "win64" ) + else() + set( _ACML_COMPILER64 "pgi64" ) + endif() + elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "Open64" ) + # 32 bit builds not supported on Open64 but for code simplicity + # We'll just use the same directory twice + set( _ACML_COMPILER32 "open64_64" ) + set( _ACML_COMPILER64 "open64_64" ) + elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "NAG" ) + set( _ACML_COMPILER32 "nag32" ) + set( _ACML_COMPILER64 "nag64" ) else() - set( _ACML_PATH_SUFFIX "" ) - endif() - if( CMAKE_Fortran_COMPILER_ID STREQUAL "Intel" ) - set( _ACML_COMPILER32 "ifort32" ) - set( _ACML_COMPILER64 "ifort64" ) - elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "SunPro" ) - set( _ACML_COMPILER32 "sun32" ) - set( _ACML_COMPILER64 "sun64" ) - elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "PGI" ) - set( _ACML_COMPILER32 "pgi32" ) - if( WIN32 ) - set( _ACML_COMPILER64 "win64" ) + set( _ACML_COMPILER32 "gfortran32" ) + set( _ACML_COMPILER64 "gfortran64" ) + endif() + + if( BLA_VENDOR STREQUAL "ACML_MP" ) + set(_ACML_MP_LIB_DIRS + "${_ACML_ROOT}/${_ACML_COMPILER32}_mp${_ACML_PATH_SUFFIX}/lib" + "${_ACML_ROOT}/${_ACML_COMPILER64}_mp${_ACML_PATH_SUFFIX}/lib" ) else() - set( _ACML_COMPILER64 "pgi64" ) + set(_ACML_LIB_DIRS + "${_ACML_ROOT}/${_ACML_COMPILER32}${_ACML_PATH_SUFFIX}/lib" + "${_ACML_ROOT}/${_ACML_COMPILER64}${_ACML_PATH_SUFFIX}/lib" ) endif() - elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "Open64" ) - # 32 bit builds not supported on Open64 but for code simplicity - # We'll just use the same directory twice - set( _ACML_COMPILER32 "open64_64" ) - set( _ACML_COMPILER64 "open64_64" ) - elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "NAG" ) - set( _ACML_COMPILER32 "nag32" ) - set( _ACML_COMPILER64 "nag64" ) - else() - set( _ACML_COMPILER32 "gfortran32" ) - set( _ACML_COMPILER64 "gfortran64" ) - endif() - - if( BLA_VENDOR STREQUAL "ACML_MP" ) - set(_ACML_MP_LIB_DIRS - "${_ACML_ROOT}/${_ACML_COMPILER32}_mp${_ACML_PATH_SUFFIX}/lib" - "${_ACML_ROOT}/${_ACML_COMPILER64}_mp${_ACML_PATH_SUFFIX}/lib" ) - else() - set(_ACML_LIB_DIRS - "${_ACML_ROOT}/${_ACML_COMPILER32}${_ACML_PATH_SUFFIX}/lib" - "${_ACML_ROOT}/${_ACML_COMPILER64}${_ACML_PATH_SUFFIX}/lib" ) - endif() endif() - elseif(BLAS_${BLA_VENDOR}_LIB_DIRS) - set(_${BLA_VENDOR}_LIB_DIRS ${BLAS_${BLA_VENDOR}_LIB_DIRS}) - endif() +elseif(BLAS_${BLA_VENDOR}_LIB_DIRS) + set(_${BLA_VENDOR}_LIB_DIRS ${BLAS_${BLA_VENDOR}_LIB_DIRS}) +endif() - if( BLA_VENDOR STREQUAL "ACML_MP" ) +if( BLA_VENDOR STREQUAL "ACML_MP" ) foreach( BLAS_ACML_MP_LIB_DIRS ${_ACML_MP_LIB_DIRS}) - check_fortran_libraries ( - BLAS_LIBRARIES - BLAS - sgemm - "" "acml_mp;acml_mv" "" ${BLAS_ACML_MP_LIB_DIRS} - ) - if( BLAS_LIBRARIES ) - break() - endif() + check_fortran_libraries ( + BLAS_LIBRARIES + BLAS + sgemm + "" "acml_mp;acml_mv" "" ${BLAS_ACML_MP_LIB_DIRS} + ) + if( BLAS_LIBRARIES ) + break() + endif() endforeach() - elseif( BLA_VENDOR STREQUAL "ACML_GPU" ) +elseif( BLA_VENDOR STREQUAL "ACML_GPU" ) foreach( BLAS_ACML_GPU_LIB_DIRS ${_ACML_GPU_LIB_DIRS}) - check_fortran_libraries ( - BLAS_LIBRARIES - BLAS - sgemm - "" "acml;acml_mv;CALBLAS" "" ${BLAS_ACML_GPU_LIB_DIRS} - ) - if( BLAS_LIBRARIES ) - break() - endif() + check_fortran_libraries ( + BLAS_LIBRARIES + BLAS + sgemm + "" "acml;acml_mv;CALBLAS" "" ${BLAS_ACML_GPU_LIB_DIRS} + ) + if( BLAS_LIBRARIES ) + break() + endif() endforeach() - else() +else() foreach( BLAS_ACML_LIB_DIRS ${_ACML_LIB_DIRS} ) - check_fortran_libraries ( - BLAS_LIBRARIES - BLAS - sgemm - "" "acml;acml_mv" "" ${BLAS_ACML_LIB_DIRS} - ) - if( BLAS_LIBRARIES ) - break() - endif() + check_fortran_libraries ( + BLAS_LIBRARIES + BLAS + sgemm + "" "acml;acml_mv" "" ${BLAS_ACML_LIB_DIRS} + ) + if( BLAS_LIBRARIES ) + break() + endif() endforeach() - endif() +endif() - # Either acml or acml_mp should be in LD_LIBRARY_PATH but not both - if(NOT BLAS_LIBRARIES) +# Either acml or acml_mp should be in LD_LIBRARY_PATH but not both +if(NOT BLAS_LIBRARIES) check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "acml;acml_mv" - "" - ) - endif() - if(NOT BLAS_LIBRARIES) + BLAS_LIBRARIES + BLAS + sgemm + "" + "acml;acml_mv" + "" + ) +endif() +if(NOT BLAS_LIBRARIES) check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "acml_mp;acml_mv" - "" - ) - endif() - if(NOT BLAS_LIBRARIES) + BLAS_LIBRARIES + BLAS + sgemm + "" + "acml_mp;acml_mv" + "" + ) +endif() +if(NOT BLAS_LIBRARIES) check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "acml;acml_mv;CALBLAS" - "" - ) - endif() + BLAS_LIBRARIES + BLAS + sgemm + "" + "acml;acml_mv;CALBLAS" + "" + ) +endif() endif () # ACML # Apple BLAS library? if (BLA_VENDOR STREQUAL "Apple" OR BLA_VENDOR STREQUAL "All") -if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - dgemm - "" - "Accelerate" - "" - ) - endif() + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + dgemm + "" + "Accelerate" + "" + ) + endif() endif () if (BLA_VENDOR STREQUAL "NAS" OR BLA_VENDOR STREQUAL "All") - if ( NOT BLAS_LIBRARIES ) + if ( NOT BLAS_LIBRARIES ) check_fortran_libraries( - BLAS_LIBRARIES - BLAS - dgemm - "" - "vecLib" - "" - ) - endif () + BLAS_LIBRARIES + BLAS + dgemm + "" + "vecLib" + "" + ) + endif () endif () + # Generic BLAS library? if (BLA_VENDOR STREQUAL "Generic" OR BLA_VENDOR STREQUAL "All") - if(NOT BLAS_LIBRARIES) - check_fortran_libraries( - BLAS_LIBRARIES - BLAS - sgemm - "" - "blas" - "" - ) - endif() -endif () - -#BLAS in intel mkl 10 library? (em64t 64bit) -if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All") - if (NOT WIN32) - set(LM "-lm") - endif () - if (CMAKE_C_COMPILER_LOADED OR CMAKE_CXX_COMPILER_LOADED) - if(BLAS_FIND_QUIETLY OR NOT BLAS_FIND_REQUIRED) - find_package(Threads) - else() - find_package(Threads REQUIRED) + if(NOT BLAS_LIBRARIES) + check_fortran_libraries( + BLAS_LIBRARIES + BLAS + sgemm + "" + "blas" + "" + ) endif() - - set(BLAS_SEARCH_LIBS "") - - if(BLA_F95) - set(BLAS_mkl_SEARCH_SYMBOL SGEMM) - set(_LIBRARIES BLAS95_LIBRARIES) - if (WIN32) - if (BLA_STATIC) - set(BLAS_mkl_DLL_SUFFIX "") - else() - set(BLAS_mkl_DLL_SUFFIX "_dll") - endif() - - # Find the main file (32-bit or 64-bit) - set(BLAS_SEARCH_LIBS_WIN_MAIN "") - if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") - list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN - "mkl_blas95${BLAS_mkl_DLL_SUFFIX} mkl_intel_c${BLAS_mkl_DLL_SUFFIX}") - endif() - if (BLA_VENDOR MATCHES "^Intel10_64lp" OR BLA_VENDOR STREQUAL "All") - list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN - "mkl_blas95_lp64${BLAS_mkl_DLL_SUFFIX} mkl_intel_lp64${BLAS_mkl_DLL_SUFFIX}") - endif () - - # Add threading/sequential libs - set(BLAS_SEARCH_LIBS_WIN_THREAD "") - if (BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All") - list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD - "mkl_sequential${BLAS_mkl_DLL_SUFFIX}") - endif() - if (NOT BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All") - # old version - list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD - "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") - # mkl >= 10.3 - list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD - "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") - endif() - - # Cartesian product of the above - foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN}) - foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD}) - list(APPEND BLAS_SEARCH_LIBS - "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}") - endforeach() - endforeach() - else () - if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") - list(APPEND BLAS_SEARCH_LIBS - "mkl_blas95 mkl_intel mkl_intel_thread mkl_core guide") - endif () - if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All") - # old version - list(APPEND BLAS_SEARCH_LIBS - "mkl_blas95 mkl_intel_lp64 mkl_intel_thread mkl_core guide") - - # mkl >= 10.3 - if (CMAKE_C_COMPILER MATCHES ".+gcc") - list(APPEND BLAS_SEARCH_LIBS - "mkl_blas95_lp64 mkl_intel_lp64 mkl_gnu_thread mkl_core gomp") - else () - list(APPEND BLAS_SEARCH_LIBS - "mkl_blas95_lp64 mkl_intel_lp64 mkl_intel_thread mkl_core iomp5") - endif () - endif () - if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All") - list(APPEND BLAS_SEARCH_LIBS - "mkl_intel_lp64 mkl_sequential mkl_core") - endif () - endif () - else () - set(BLAS_mkl_SEARCH_SYMBOL sgemm) - set(_LIBRARIES BLAS_LIBRARIES) - if (WIN32) - if (BLA_STATIC) - set(BLAS_mkl_DLL_SUFFIX "") - else() - set(BLAS_mkl_DLL_SUFFIX "_dll") - endif() - - # Find the main file (32-bit or 64-bit) - set(BLAS_SEARCH_LIBS_WIN_MAIN "") - if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") - list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN - "mkl_intel_c${BLAS_mkl_DLL_SUFFIX}") - endif() - if (BLA_VENDOR MATCHES "^Intel10_64lp" OR BLA_VENDOR STREQUAL "All") - list(APPEND BLAS_SEARCH_LIBS_WIN_MAIN - "mkl_intel_lp64${BLAS_mkl_DLL_SUFFIX}") - endif () - - # Add threading/sequential libs - set(BLAS_SEARCH_LIBS_WIN_THREAD "") - if (NOT BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All") - # old version - list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD - "libguide40 mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") - # mkl >= 10.3 - list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD - "libiomp5md mkl_intel_thread${BLAS_mkl_DLL_SUFFIX}") - endif() - if (BLA_VENDOR MATCHES "_seq$" OR BLA_VENDOR STREQUAL "All") - list(APPEND BLAS_SEARCH_LIBS_WIN_THREAD - "mkl_sequential${BLAS_mkl_DLL_SUFFIX}") - endif() - - # Cartesian product of the above - foreach (MAIN ${BLAS_SEARCH_LIBS_WIN_MAIN}) - foreach (THREAD ${BLAS_SEARCH_LIBS_WIN_THREAD}) - list(APPEND BLAS_SEARCH_LIBS - "${MAIN} ${THREAD} mkl_core${BLAS_mkl_DLL_SUFFIX}") - endforeach() - endforeach() - else () - if (BLA_VENDOR STREQUAL "Intel10_32" OR BLA_VENDOR STREQUAL "All") - list(APPEND BLAS_SEARCH_LIBS - "mkl_intel mkl_intel_thread mkl_core guide") - endif () - if (BLA_VENDOR STREQUAL "Intel10_64lp" OR BLA_VENDOR STREQUAL "All") - - # old version - list(APPEND BLAS_SEARCH_LIBS - "mkl_intel_lp64 mkl_intel_thread mkl_core guide") - - # mkl >= 10.3 - if (CMAKE_C_COMPILER MATCHES ".+gcc") - list(APPEND BLAS_SEARCH_LIBS - "mkl_intel_lp64 mkl_gnu_thread mkl_core gomp") - else () - list(APPEND BLAS_SEARCH_LIBS - "mkl_intel_lp64 mkl_intel_thread mkl_core iomp5") - endif () - endif () - if (BLA_VENDOR STREQUAL "Intel10_64lp_seq" OR BLA_VENDOR STREQUAL "All") - list(APPEND BLAS_SEARCH_LIBS - "mkl_intel_lp64 mkl_sequential mkl_core") - endif () - - #older vesions of intel mkl libs - if (BLA_VENDOR STREQUAL "Intel" OR BLA_VENDOR STREQUAL "All") - list(APPEND BLAS_SEARCH_LIBS - "mkl") - list(APPEND BLAS_SEARCH_LIBS - "mkl_ia32") - list(APPEND BLAS_SEARCH_LIBS - "mkl_em64t") - endif () - endif () - endif () - - foreach (IT ${BLAS_SEARCH_LIBS}) - string(REPLACE " " ";" SEARCH_LIBS ${IT}) - if (NOT ${_LIBRARIES}) - check_fortran_libraries( - ${_LIBRARIES} - BLAS - ${BLAS_mkl_SEARCH_SYMBOL} - "" - "${SEARCH_LIBS}" - "${CMAKE_THREAD_LIBS_INIT};${LM}" - ) - endif () - endforeach () - - endif () endif () if(BLA_F95) @@ -702,5 +733,11 @@ else() find_package_handle_standard_args(BLAS REQUIRED_VARS BLAS_LIBRARIES) endif() +# On compilers that implicitly link BLAS (such as ftn, cc, and CC on Cray HPC machines) +# we used a placeholder for empty BLAS_LIBRARIES to get through our logic above. +if (BLAS_LIBRARIES STREQUAL "BLAS_LIBRARIES-PLACEHOLDER-FOR-EMPTY-LIBRARIES") + set(BLAS_LIBRARIES "") +endif() + cmake_pop_check_state() set(CMAKE_FIND_LIBRARY_SUFFIXES ${_blas_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) diff --git a/Modules/FindBZip2.cmake b/Modules/FindBZip2.cmake index 4d7123d..2495148 100644 --- a/Modules/FindBZip2.cmake +++ b/Modules/FindBZip2.cmake @@ -1,41 +1,42 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindBZip2 -# --------- -# -# Try to find BZip2 -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines :prop_tgt:`IMPORTED` target ``BZip2::BZip2``, if -# BZip2 has been found. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following variables: -# -# ``BZIP2_FOUND`` -# system has BZip2 -# ``BZIP2_INCLUDE_DIRS`` -# the BZip2 include directories -# ``BZIP2_LIBRARIES`` -# Link these to use BZip2 -# ``BZIP2_NEED_PREFIX`` -# this is set if the functions are prefixed with ``BZ2_`` -# ``BZIP2_VERSION_STRING`` -# the version of BZip2 found -# -# Cache variables -# ^^^^^^^^^^^^^^^ -# -# The following cache variables may also be set: -# -# ``BZIP2_INCLUDE_DIR`` -# the BZip2 include directory +#[=======================================================================[.rst: +FindBZip2 +--------- + +Try to find BZip2 + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``BZip2::BZip2``, if +BZip2 has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +``BZIP2_FOUND`` + system has BZip2 +``BZIP2_INCLUDE_DIRS`` + the BZip2 include directories +``BZIP2_LIBRARIES`` + Link these to use BZip2 +``BZIP2_NEED_PREFIX`` + this is set if the functions are prefixed with ``BZ2_`` +``BZIP2_VERSION_STRING`` + the version of BZip2 found + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``BZIP2_INCLUDE_DIR`` + the BZip2 include directory +#]=======================================================================] set(_BZIP2_PATHS PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Bzip2;InstallPath]" diff --git a/Modules/FindBacktrace.cmake b/Modules/FindBacktrace.cmake index 59ebdc2..e1f45f7 100644 --- a/Modules/FindBacktrace.cmake +++ b/Modules/FindBacktrace.cmake @@ -1,41 +1,42 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindBacktrace -# ------------- -# -# Find provider for backtrace(3). -# -# Checks if OS supports backtrace(3) via either libc or custom library. -# This module defines the following variables: -# -# ``Backtrace_HEADER`` -# The header file needed for backtrace(3). Cached. -# Could be forcibly set by user. -# ``Backtrace_INCLUDE_DIRS`` -# The include directories needed to use backtrace(3) header. -# ``Backtrace_LIBRARIES`` -# The libraries (linker flags) needed to use backtrace(3), if any. -# ``Backtrace_FOUND`` -# Is set if and only if backtrace(3) support detected. -# -# The following cache variables are also available to set or use: -# -# ``Backtrace_LIBRARY`` -# The external library providing backtrace, if any. -# ``Backtrace_INCLUDE_DIR`` -# The directory holding the backtrace(3) header. -# -# Typical usage is to generate of header file using configure_file() with the -# contents like the following:: -# -# #cmakedefine01 Backtrace_FOUND -# #if Backtrace_FOUND -# # include <${Backtrace_HEADER}> -# #endif -# -# And then reference that generated header file in actual source. +#[=======================================================================[.rst: +FindBacktrace +------------- + +Find provider for backtrace(3). + +Checks if OS supports backtrace(3) via either libc or custom library. +This module defines the following variables: + +``Backtrace_HEADER`` + The header file needed for backtrace(3). Cached. + Could be forcibly set by user. +``Backtrace_INCLUDE_DIRS`` + The include directories needed to use backtrace(3) header. +``Backtrace_LIBRARIES`` + The libraries (linker flags) needed to use backtrace(3), if any. +``Backtrace_FOUND`` + Is set if and only if backtrace(3) support detected. + +The following cache variables are also available to set or use: + +``Backtrace_LIBRARY`` + The external library providing backtrace, if any. +``Backtrace_INCLUDE_DIR`` + The directory holding the backtrace(3) header. + +Typical usage is to generate of header file using configure_file() with the +contents like the following:: + + #cmakedefine01 Backtrace_FOUND + #if Backtrace_FOUND + # include <${Backtrace_HEADER}> + #endif + +And then reference that generated header file in actual source. +#]=======================================================================] include(CMakePushCheckState) include(CheckSymbolExists) diff --git a/Modules/FindBoost.cmake b/Modules/FindBoost.cmake index d5e7011..4cae8cb 100644 --- a/Modules/FindBoost.cmake +++ b/Modules/FindBoost.cmake @@ -1,237 +1,238 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindBoost -# --------- -# -# Find Boost include dirs and libraries -# -# Use this module by invoking find_package with the form:: -# -# find_package(Boost -# [version] [EXACT] # Minimum or EXACT version e.g. 1.67.0 -# [REQUIRED] # Fail with error if Boost is not found -# [COMPONENTS <libs>...] # Boost libraries by their canonical name -# # e.g. "date_time" for "libboost_date_time" -# [OPTIONAL_COMPONENTS <libs>...] -# # Optional Boost libraries by their canonical name) -# ) # e.g. "date_time" for "libboost_date_time" -# -# This module finds headers and requested component libraries OR a CMake -# package configuration file provided by a "Boost CMake" build. For the -# latter case skip to the "Boost CMake" section below. For the former -# case results are reported in variables:: -# -# Boost_FOUND - True if headers and requested libraries were found -# Boost_INCLUDE_DIRS - Boost include directories -# Boost_LIBRARY_DIRS - Link directories for Boost libraries -# Boost_LIBRARIES - Boost component libraries to be linked -# Boost_<C>_FOUND - True if component <C> was found (<C> is upper-case) -# Boost_<C>_LIBRARY - Libraries to link for component <C> (may include -# target_link_libraries debug/optimized keywords) -# Boost_VERSION - BOOST_VERSION value from boost/version.hpp -# Boost_LIB_VERSION - Version string appended to library filenames -# Boost_MAJOR_VERSION - Boost major version number (X in X.y.z) -# Boost_MINOR_VERSION - Boost minor version number (Y in x.Y.z) -# Boost_SUBMINOR_VERSION - Boost subminor version number (Z in x.y.Z) -# Boost_LIB_DIAGNOSTIC_DEFINITIONS (Windows) -# - Pass to add_definitions() to have diagnostic -# information about Boost's automatic linking -# displayed during compilation -# -# Note that Boost Python components require a Python version suffix -# (Boost 1.67 and later), e.g. ``python36`` or ``python27`` for the -# versions built against Python 3.6 and 2.7, respectively. This also -# applies to additional components using Python including -# ``mpi_python`` and ``numpy``. Earlier Boost releases may use -# distribution-specific suffixes such as ``2``, ``3`` or ``2.7``. -# These may also be used as suffixes, but note that they are not -# portable. -# -# This module reads hints about search locations from variables:: -# -# BOOST_ROOT - Preferred installation prefix -# (or BOOSTROOT) -# BOOST_INCLUDEDIR - Preferred include directory e.g. <prefix>/include -# BOOST_LIBRARYDIR - Preferred library directory e.g. <prefix>/lib -# Boost_NO_SYSTEM_PATHS - Set to ON to disable searching in locations not -# specified by these hint variables. Default is OFF. -# Boost_ADDITIONAL_VERSIONS -# - List of Boost versions not known to this module -# (Boost install locations may contain the version) -# -# and saves search results persistently in CMake cache entries:: -# -# Boost_INCLUDE_DIR - Directory containing Boost headers -# Boost_LIBRARY_DIR_RELEASE - Directory containing release Boost libraries -# Boost_LIBRARY_DIR_DEBUG - Directory containing debug Boost libraries -# Boost_<C>_LIBRARY_DEBUG - Component <C> library debug variant -# Boost_<C>_LIBRARY_RELEASE - Component <C> library release variant -# -# The following :prop_tgt:`IMPORTED` targets are also defined:: -# -# Boost::boost - Target for header-only dependencies -# (Boost include directory) -# Boost::<C> - Target for specific component dependency -# (shared or static library); <C> is lower- -# case -# Boost::diagnostic_definitions - interface target to enable diagnostic -# information about Boost's automatic linking -# during compilation (adds BOOST_LIB_DIAGNOSTIC) -# Boost::disable_autolinking - interface target to disable automatic -# linking with MSVC (adds BOOST_ALL_NO_LIB) -# Boost::dynamic_linking - interface target to enable dynamic linking -# linking with MSVC (adds BOOST_ALL_DYN_LINK) -# -# Implicit dependencies such as Boost::filesystem requiring -# Boost::system will be automatically detected and satisfied, even -# if system is not specified when using find_package and if -# Boost::system is not added to target_link_libraries. If using -# Boost::thread, then Threads::Threads will also be added automatically. -# -# It is important to note that the imported targets behave differently -# than variables created by this module: multiple calls to -# find_package(Boost) in the same directory or sub-directories with -# different options (e.g. static or shared) will not override the -# values of the targets created by the first call. -# -# Users may set these hints or results as cache entries. Projects -# should not read these entries directly but instead use the above -# result variables. Note that some hint names start in upper-case -# "BOOST". One may specify these as environment variables if they are -# not specified as CMake variables or cache entries. -# -# This module first searches for the Boost header files using the above -# hint variables (excluding BOOST_LIBRARYDIR) and saves the result in -# Boost_INCLUDE_DIR. Then it searches for requested component libraries -# using the above hints (excluding BOOST_INCLUDEDIR and -# Boost_ADDITIONAL_VERSIONS), "lib" directories near Boost_INCLUDE_DIR, -# and the library name configuration settings below. It saves the -# library directories in Boost_LIBRARY_DIR_DEBUG and -# Boost_LIBRARY_DIR_RELEASE and individual library -# locations in Boost_<C>_LIBRARY_DEBUG and Boost_<C>_LIBRARY_RELEASE. -# When one changes settings used by previous searches in the same build -# tree (excluding environment variables) this module discards previous -# search results affected by the changes and searches again. -# -# Boost libraries come in many variants encoded in their file name. -# Users or projects may tell this module which variant to find by -# setting variables:: -# -# Boost_USE_DEBUG_LIBS - Set to ON or OFF to specify whether to search -# and use the debug libraries. Default is ON. -# Boost_USE_RELEASE_LIBS - Set to ON or OFF to specify whether to search -# and use the release libraries. Default is ON. -# Boost_USE_MULTITHREADED - Set to OFF to use the non-multithreaded -# libraries ('mt' tag). Default is ON. -# Boost_USE_STATIC_LIBS - Set to ON to force the use of the static -# libraries. Default is OFF. -# Boost_USE_STATIC_RUNTIME - Set to ON or OFF to specify whether to use -# libraries linked statically to the C++ runtime -# ('s' tag). Default is platform dependent. -# Boost_USE_DEBUG_RUNTIME - Set to ON or OFF to specify whether to use -# libraries linked to the MS debug C++ runtime -# ('g' tag). Default is ON. -# Boost_USE_DEBUG_PYTHON - Set to ON to use libraries compiled with a -# debug Python build ('y' tag). Default is OFF. -# Boost_USE_STLPORT - Set to ON to use libraries compiled with -# STLPort ('p' tag). Default is OFF. -# Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS -# - Set to ON to use libraries compiled with -# STLPort deprecated "native iostreams" -# ('n' tag). Default is OFF. -# Boost_COMPILER - Set to the compiler-specific library suffix -# (e.g. "-gcc43"). Default is auto-computed -# for the C++ compiler in use. A list may be -# used if multiple compatible suffixes should -# be tested for, in decreasing order of -# preference. -# Boost_THREADAPI - Suffix for "thread" component library name, -# such as "pthread" or "win32". Names with -# and without this suffix will both be tried. -# Boost_NAMESPACE - Alternate namespace used to build boost with -# e.g. if set to "myboost", will search for -# myboost_thread instead of boost_thread. -# -# Other variables one may set to control this module are:: -# -# Boost_DEBUG - Set to ON to enable debug output from FindBoost. -# Please enable this before filing any bug report. -# Boost_DETAILED_FAILURE_MSG -# - Set to ON to add detailed information to the -# failure message even when the REQUIRED option -# is not given to the find_package call. -# Boost_REALPATH - Set to ON to resolve symlinks for discovered -# libraries to assist with packaging. For example, -# the "system" component library may be resolved to -# "/usr/lib/libboost_system.so.1.67.0" instead of -# "/usr/lib/libboost_system.so". This does not -# affect linking and should not be enabled unless -# the user needs this information. -# Boost_LIBRARY_DIR - Default value for Boost_LIBRARY_DIR_RELEASE and -# Boost_LIBRARY_DIR_DEBUG. -# -# On Visual Studio and Borland compilers Boost headers request automatic -# linking to corresponding libraries. This requires matching libraries -# to be linked explicitly or available in the link library search path. -# In this case setting Boost_USE_STATIC_LIBS to OFF may not achieve -# dynamic linking. Boost automatic linking typically requests static -# libraries with a few exceptions (such as Boost.Python). Use:: -# -# add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS}) -# -# to ask Boost to report information about automatic linking requests. -# -# Example to find Boost headers only:: -# -# find_package(Boost 1.36.0) -# if(Boost_FOUND) -# include_directories(${Boost_INCLUDE_DIRS}) -# add_executable(foo foo.cc) -# endif() -# -# Example to find Boost libraries and use imported targets:: -# -# find_package(Boost 1.56 REQUIRED COMPONENTS -# date_time filesystem iostreams) -# add_executable(foo foo.cc) -# target_link_libraries(foo Boost::date_time Boost::filesystem -# Boost::iostreams) -# -# Example to find Boost Python 3.6 libraries and use imported targets:: -# -# find_package(Boost 1.67 REQUIRED COMPONENTS -# python36 numpy36) -# add_executable(foo foo.cc) -# target_link_libraries(foo Boost::python36 Boost::numpy36) -# -# Example to find Boost headers and some *static* (release only) libraries:: -# -# set(Boost_USE_STATIC_LIBS ON) # only find static libs -# set(Boost_USE_DEBUG_LIBS OFF) # ignore debug libs and -# set(Boost_USE_RELEASE_LIBS ON) # only find release libs -# set(Boost_USE_MULTITHREADED ON) -# set(Boost_USE_STATIC_RUNTIME OFF) -# find_package(Boost 1.66.0 COMPONENTS date_time filesystem system ...) -# if(Boost_FOUND) -# include_directories(${Boost_INCLUDE_DIRS}) -# add_executable(foo foo.cc) -# target_link_libraries(foo ${Boost_LIBRARIES}) -# endif() -# -# Boost CMake -# ^^^^^^^^^^^ -# -# If Boost was built using the boost-cmake project it provides a package -# configuration file for use with find_package's Config mode. This -# module looks for the package configuration file called -# BoostConfig.cmake or boost-config.cmake and stores the result in cache -# entry "Boost_DIR". If found, the package configuration file is loaded -# and this module returns with no further action. See documentation of -# the Boost CMake package configuration for details on what it provides. -# -# Set Boost_NO_BOOST_CMAKE to ON to disable the search for boost-cmake. +#[=======================================================================[.rst: +FindBoost +--------- + +Find Boost include dirs and libraries + +Use this module by invoking find_package with the form:: + + find_package(Boost + [version] [EXACT] # Minimum or EXACT version e.g. 1.67.0 + [REQUIRED] # Fail with error if Boost is not found + [COMPONENTS <libs>...] # Boost libraries by their canonical name + # e.g. "date_time" for "libboost_date_time" + [OPTIONAL_COMPONENTS <libs>...] + # Optional Boost libraries by their canonical name) + ) # e.g. "date_time" for "libboost_date_time" + +This module finds headers and requested component libraries OR a CMake +package configuration file provided by a "Boost CMake" build. For the +latter case skip to the "Boost CMake" section below. For the former +case results are reported in variables:: + + Boost_FOUND - True if headers and requested libraries were found + Boost_INCLUDE_DIRS - Boost include directories + Boost_LIBRARY_DIRS - Link directories for Boost libraries + Boost_LIBRARIES - Boost component libraries to be linked + Boost_<C>_FOUND - True if component <C> was found (<C> is upper-case) + Boost_<C>_LIBRARY - Libraries to link for component <C> (may include + target_link_libraries debug/optimized keywords) + Boost_VERSION - BOOST_VERSION value from boost/version.hpp + Boost_LIB_VERSION - Version string appended to library filenames + Boost_MAJOR_VERSION - Boost major version number (X in X.y.z) + Boost_MINOR_VERSION - Boost minor version number (Y in x.Y.z) + Boost_SUBMINOR_VERSION - Boost subminor version number (Z in x.y.Z) + Boost_LIB_DIAGNOSTIC_DEFINITIONS (Windows) + - Pass to add_definitions() to have diagnostic + information about Boost's automatic linking + displayed during compilation + +Note that Boost Python components require a Python version suffix +(Boost 1.67 and later), e.g. ``python36`` or ``python27`` for the +versions built against Python 3.6 and 2.7, respectively. This also +applies to additional components using Python including +``mpi_python`` and ``numpy``. Earlier Boost releases may use +distribution-specific suffixes such as ``2``, ``3`` or ``2.7``. +These may also be used as suffixes, but note that they are not +portable. + +This module reads hints about search locations from variables:: + + BOOST_ROOT - Preferred installation prefix + (or BOOSTROOT) + BOOST_INCLUDEDIR - Preferred include directory e.g. <prefix>/include + BOOST_LIBRARYDIR - Preferred library directory e.g. <prefix>/lib + Boost_NO_SYSTEM_PATHS - Set to ON to disable searching in locations not + specified by these hint variables. Default is OFF. + Boost_ADDITIONAL_VERSIONS + - List of Boost versions not known to this module + (Boost install locations may contain the version) + +and saves search results persistently in CMake cache entries:: + + Boost_INCLUDE_DIR - Directory containing Boost headers + Boost_LIBRARY_DIR_RELEASE - Directory containing release Boost libraries + Boost_LIBRARY_DIR_DEBUG - Directory containing debug Boost libraries + Boost_<C>_LIBRARY_DEBUG - Component <C> library debug variant + Boost_<C>_LIBRARY_RELEASE - Component <C> library release variant + +The following :prop_tgt:`IMPORTED` targets are also defined:: + + Boost::boost - Target for header-only dependencies + (Boost include directory) + Boost::<C> - Target for specific component dependency + (shared or static library); <C> is lower- + case + Boost::diagnostic_definitions - interface target to enable diagnostic + information about Boost's automatic linking + during compilation (adds BOOST_LIB_DIAGNOSTIC) + Boost::disable_autolinking - interface target to disable automatic + linking with MSVC (adds BOOST_ALL_NO_LIB) + Boost::dynamic_linking - interface target to enable dynamic linking + linking with MSVC (adds BOOST_ALL_DYN_LINK) + +Implicit dependencies such as Boost::filesystem requiring +Boost::system will be automatically detected and satisfied, even +if system is not specified when using find_package and if +Boost::system is not added to target_link_libraries. If using +Boost::thread, then Threads::Threads will also be added automatically. + +It is important to note that the imported targets behave differently +than variables created by this module: multiple calls to +find_package(Boost) in the same directory or sub-directories with +different options (e.g. static or shared) will not override the +values of the targets created by the first call. + +Users may set these hints or results as cache entries. Projects +should not read these entries directly but instead use the above +result variables. Note that some hint names start in upper-case +"BOOST". One may specify these as environment variables if they are +not specified as CMake variables or cache entries. + +This module first searches for the Boost header files using the above +hint variables (excluding BOOST_LIBRARYDIR) and saves the result in +Boost_INCLUDE_DIR. Then it searches for requested component libraries +using the above hints (excluding BOOST_INCLUDEDIR and +Boost_ADDITIONAL_VERSIONS), "lib" directories near Boost_INCLUDE_DIR, +and the library name configuration settings below. It saves the +library directories in Boost_LIBRARY_DIR_DEBUG and +Boost_LIBRARY_DIR_RELEASE and individual library +locations in Boost_<C>_LIBRARY_DEBUG and Boost_<C>_LIBRARY_RELEASE. +When one changes settings used by previous searches in the same build +tree (excluding environment variables) this module discards previous +search results affected by the changes and searches again. + +Boost libraries come in many variants encoded in their file name. +Users or projects may tell this module which variant to find by +setting variables:: + + Boost_USE_DEBUG_LIBS - Set to ON or OFF to specify whether to search + and use the debug libraries. Default is ON. + Boost_USE_RELEASE_LIBS - Set to ON or OFF to specify whether to search + and use the release libraries. Default is ON. + Boost_USE_MULTITHREADED - Set to OFF to use the non-multithreaded + libraries ('mt' tag). Default is ON. + Boost_USE_STATIC_LIBS - Set to ON to force the use of the static + libraries. Default is OFF. + Boost_USE_STATIC_RUNTIME - Set to ON or OFF to specify whether to use + libraries linked statically to the C++ runtime + ('s' tag). Default is platform dependent. + Boost_USE_DEBUG_RUNTIME - Set to ON or OFF to specify whether to use + libraries linked to the MS debug C++ runtime + ('g' tag). Default is ON. + Boost_USE_DEBUG_PYTHON - Set to ON to use libraries compiled with a + debug Python build ('y' tag). Default is OFF. + Boost_USE_STLPORT - Set to ON to use libraries compiled with + STLPort ('p' tag). Default is OFF. + Boost_USE_STLPORT_DEPRECATED_NATIVE_IOSTREAMS + - Set to ON to use libraries compiled with + STLPort deprecated "native iostreams" + ('n' tag). Default is OFF. + Boost_COMPILER - Set to the compiler-specific library suffix + (e.g. "-gcc43"). Default is auto-computed + for the C++ compiler in use. A list may be + used if multiple compatible suffixes should + be tested for, in decreasing order of + preference. + Boost_THREADAPI - Suffix for "thread" component library name, + such as "pthread" or "win32". Names with + and without this suffix will both be tried. + Boost_NAMESPACE - Alternate namespace used to build boost with + e.g. if set to "myboost", will search for + myboost_thread instead of boost_thread. + +Other variables one may set to control this module are:: + + Boost_DEBUG - Set to ON to enable debug output from FindBoost. + Please enable this before filing any bug report. + Boost_DETAILED_FAILURE_MSG + - Set to ON to add detailed information to the + failure message even when the REQUIRED option + is not given to the find_package call. + Boost_REALPATH - Set to ON to resolve symlinks for discovered + libraries to assist with packaging. For example, + the "system" component library may be resolved to + "/usr/lib/libboost_system.so.1.67.0" instead of + "/usr/lib/libboost_system.so". This does not + affect linking and should not be enabled unless + the user needs this information. + Boost_LIBRARY_DIR - Default value for Boost_LIBRARY_DIR_RELEASE and + Boost_LIBRARY_DIR_DEBUG. + +On Visual Studio and Borland compilers Boost headers request automatic +linking to corresponding libraries. This requires matching libraries +to be linked explicitly or available in the link library search path. +In this case setting Boost_USE_STATIC_LIBS to OFF may not achieve +dynamic linking. Boost automatic linking typically requests static +libraries with a few exceptions (such as Boost.Python). Use:: + + add_definitions(${Boost_LIB_DIAGNOSTIC_DEFINITIONS}) + +to ask Boost to report information about automatic linking requests. + +Example to find Boost headers only:: + + find_package(Boost 1.36.0) + if(Boost_FOUND) + include_directories(${Boost_INCLUDE_DIRS}) + add_executable(foo foo.cc) + endif() + +Example to find Boost libraries and use imported targets:: + + find_package(Boost 1.56 REQUIRED COMPONENTS + date_time filesystem iostreams) + add_executable(foo foo.cc) + target_link_libraries(foo Boost::date_time Boost::filesystem + Boost::iostreams) + +Example to find Boost Python 3.6 libraries and use imported targets:: + + find_package(Boost 1.67 REQUIRED COMPONENTS + python36 numpy36) + add_executable(foo foo.cc) + target_link_libraries(foo Boost::python36 Boost::numpy36) + +Example to find Boost headers and some *static* (release only) libraries:: + + set(Boost_USE_STATIC_LIBS ON) # only find static libs + set(Boost_USE_DEBUG_LIBS OFF) # ignore debug libs and + set(Boost_USE_RELEASE_LIBS ON) # only find release libs + set(Boost_USE_MULTITHREADED ON) + set(Boost_USE_STATIC_RUNTIME OFF) + find_package(Boost 1.66.0 COMPONENTS date_time filesystem system ...) + if(Boost_FOUND) + include_directories(${Boost_INCLUDE_DIRS}) + add_executable(foo foo.cc) + target_link_libraries(foo ${Boost_LIBRARIES}) + endif() + +Boost CMake +^^^^^^^^^^^ + +If Boost was built using the boost-cmake project it provides a package +configuration file for use with find_package's Config mode. This +module looks for the package configuration file called +BoostConfig.cmake or boost-config.cmake and stores the result in cache +entry "Boost_DIR". If found, the package configuration file is loaded +and this module returns with no further action. See documentation of +the Boost CMake package configuration for details on what it provides. + +Set Boost_NO_BOOST_CMAKE to ON to disable the search for boost-cmake. +#]=======================================================================] # Save project's policies cmake_policy(PUSH) @@ -493,11 +494,11 @@ function(_Boost_GUESS_COMPILER_PREFIX _ret) if(Boost_MINOR_VERSION) if(${Boost_MINOR_VERSION} GREATER 35) # In Boost 1.36.0 and newer, the mangled compiler name used - # on Mac OS X/Darwin is "xgcc". + # on macOS/Darwin is "xgcc". set(_boost_COMPILER "-xgcc${_boost_COMPILER_VERSION}") else() # In Boost <= 1.35.0, there is no mangled compiler name for - # the Mac OS X/Darwin version of GCC. + # the macOS/Darwin version of GCC. set(_boost_COMPILER "") endif() else() @@ -573,7 +574,7 @@ function(_Boost_COMPONENT_DEPENDENCIES component _ret) endif() set(_Boost_IMPORTED_TARGETS TRUE) - if(Boost_VERSION VERSION_LESS 103300) + if(Boost_VERSION AND Boost_VERSION VERSION_LESS 103300) message(WARNING "Imported targets and dependency information not available for Boost version ${Boost_VERSION} (all versions older than 1.33)") set(_Boost_IMPORTED_TARGETS FALSE) elseif(NOT Boost_VERSION VERSION_LESS 103300 AND Boost_VERSION VERSION_LESS 103500) @@ -823,27 +824,42 @@ function(_Boost_COMPONENT_DEPENDENCIES component _ret) set(_Boost_TIMER_DEPENDENCIES chrono system) set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic) set(_Boost_WSERIALIZATION_DEPENDENCIES serialization) + elseif(NOT Boost_VERSION VERSION_LESS 106800 AND Boost_VERSION VERSION_LESS 106900) + set(_Boost_CHRONO_DEPENDENCIES system) + set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time) + set(_Boost_CONTRACT_DEPENDENCIES thread chrono system date_time) + set(_Boost_COROUTINE_DEPENDENCIES context system) + set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time) + set(_Boost_FILESYSTEM_DEPENDENCIES system) + set(_Boost_IOSTREAMS_DEPENDENCIES regex) + set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic) + set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic) + set(_Boost_MPI_DEPENDENCIES serialization) + set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization) + set(_Boost_NUMPY_DEPENDENCIES python${component_python_version}) + set(_Boost_RANDOM_DEPENDENCIES system) + set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic) + set(_Boost_TIMER_DEPENDENCIES chrono system) + set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic) + set(_Boost_WSERIALIZATION_DEPENDENCIES serialization) else() - if(NOT Boost_VERSION VERSION_LESS 106800) - set(_Boost_CHRONO_DEPENDENCIES system) - set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time) - set(_Boost_CONTRACT_DEPENDENCIES thread chrono system date_time) - set(_Boost_COROUTINE_DEPENDENCIES context system) - set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time) - set(_Boost_FILESYSTEM_DEPENDENCIES system) + if(NOT Boost_VERSION VERSION_LESS 106900) + set(_Boost_CONTRACT_DEPENDENCIES thread chrono date_time) + set(_Boost_COROUTINE_DEPENDENCIES context) + set(_Boost_FIBER_DEPENDENCIES context) set(_Boost_IOSTREAMS_DEPENDENCIES regex) - set(_Boost_LOG_DEPENDENCIES date_time log_setup system filesystem thread regex chrono atomic) + set(_Boost_LOG_DEPENDENCIES date_time log_setup filesystem thread regex chrono atomic) set(_Boost_MATH_DEPENDENCIES math_c99 math_c99f math_c99l math_tr1 math_tr1f math_tr1l atomic) set(_Boost_MPI_DEPENDENCIES serialization) - set(_Boost_MPI_PYTHON_DEPENDENCIES python${component_python_version} mpi serialization) - set(_Boost_NUMPY_DEPENDENCIES python${component_python_version}) - set(_Boost_RANDOM_DEPENDENCIES system) - set(_Boost_THREAD_DEPENDENCIES chrono system date_time atomic) + set(_Boost_MPI_PYTHON_DEPENDENCIES python mpi serialization) + set(_Boost_NUMPY_DEPENDENCIES python) + set(_Boost_SYNC_DEPENDENCIES chrono atomic) + set(_Boost_THREAD_DEPENDENCIES chrono date_time atomic) set(_Boost_TIMER_DEPENDENCIES chrono system) - set(_Boost_WAVE_DEPENDENCIES filesystem system serialization thread chrono date_time atomic) + set(_Boost_WAVE_DEPENDENCIES filesystem serialization thread chrono date_time atomic) set(_Boost_WSERIALIZATION_DEPENDENCIES serialization) endif() - if(NOT Boost_VERSION VERSION_LESS 106900) + if(NOT Boost_VERSION VERSION_LESS 107000) message(WARNING "New Boost version may have incorrect or missing dependencies and imported targets") endif() endif() @@ -914,6 +930,12 @@ function(_Boost_COMPONENT_HEADERS component _hdrs) set(_Boost_REGEX_HEADERS "boost/regex.hpp") set(_Boost_SERIALIZATION_HEADERS "boost/serialization/serialization.hpp") set(_Boost_SIGNALS_HEADERS "boost/signals.hpp") + set(_Boost_STACKTRACE_ADDR2LINE_HEADERS "boost/stacktrace.hpp") + set(_Boost_STACKTRACE_BACKTRACE_HEADERS "boost/stacktrace.hpp") + set(_Boost_STACKTRACE_BASIC_HEADERS "boost/stacktrace.hpp") + set(_Boost_STACKTRACE_NOOP_HEADERS "boost/stacktrace.hpp") + set(_Boost_STACKTRACE_WINDBG_CACHED_HEADERS "boost/stacktrace.hpp") + set(_Boost_STACKTRACE_WINDBG_HEADERS "boost/stacktrace.hpp") set(_Boost_SYSTEM_HEADERS "boost/system/config.hpp") set(_Boost_TEST_EXEC_MONITOR_HEADERS "boost/test/test_exec_monitor.hpp") set(_Boost_THREAD_HEADERS "boost/thread.hpp") @@ -1386,6 +1408,13 @@ if ( NOT Boost_NAMESPACE ) set(Boost_NAMESPACE "boost") endif() +if(Boost_DEBUG) + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Boost_LIB_PREFIX = ${Boost_LIB_PREFIX}") + message(STATUS "[ ${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} ] " + "Boost_NAMESPACE = ${Boost_NAMESPACE}") +endif() + # ------------------------------------------------------------------------ # Suffix initialization and compiler suffix detection. # ------------------------------------------------------------------------ @@ -1484,14 +1513,14 @@ if(NOT "x${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}" STREQUAL "x" AND NOT Boost_VERSI string(APPEND _boost_ARCHITECTURE_TAG "-") # This needs to be kept in-sync with the section of CMakePlatformId.h.in # inside 'defined(_WIN32) && defined(_MSC_VER)' - if(${CMAKE_CXX_COMPILER_ARCHITECTURE_ID} STREQUAL "IA64") + if(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "IA64") string(APPEND _boost_ARCHITECTURE_TAG "i") - elseif(${CMAKE_CXX_COMPILER_ARCHITECTURE_ID} STREQUAL "X86" - OR ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID} STREQUAL "x64") + elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "X86" + OR CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "x64") string(APPEND _boost_ARCHITECTURE_TAG "x") - elseif(${CMAKE_CXX_COMPILER_ARCHITECTURE_ID} MATCHES "^ARM") + elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID MATCHES "^ARM") string(APPEND _boost_ARCHITECTURE_TAG "a") - elseif(${CMAKE_CXX_COMPILER_ARCHITECTURE_ID} STREQUAL "MIPS") + elseif(CMAKE_CXX_COMPILER_ARCHITECTURE_ID STREQUAL "MIPS") string(APPEND _boost_ARCHITECTURE_TAG "m") endif() @@ -1740,6 +1769,7 @@ foreach(COMPONENT ${Boost_FIND_COMPONENTS}) list(APPEND _boost_RELEASE_NAMES ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION} ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG} + ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${_boost_MULTITHREADED} ${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component} ) if(_boost_STATIC_RUNTIME_WORKAROUND) set(_boost_RELEASE_STATIC_ABI_TAG "-s${_boost_RELEASE_ABI_TAG}") diff --git a/Modules/FindBullet.cmake b/Modules/FindBullet.cmake index fc6695c..a3c9fc6 100644 --- a/Modules/FindBullet.cmake +++ b/Modules/FindBullet.cmake @@ -1,39 +1,40 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindBullet -# ---------- -# -# Try to find the Bullet physics engine -# -# -# -# :: -# -# This module defines the following variables -# -# -# -# :: -# -# BULLET_FOUND - Was bullet found -# BULLET_INCLUDE_DIRS - the Bullet include directories -# BULLET_LIBRARIES - Link to this, by default it includes -# all bullet components (Dynamics, -# Collision, LinearMath, & SoftBody) -# -# -# -# :: -# -# This module accepts the following variables -# -# -# -# :: -# -# BULLET_ROOT - Can be set to bullet install path or Windows build path +#[=======================================================================[.rst: +FindBullet +---------- + +Try to find the Bullet physics engine + + + +:: + + This module defines the following variables + + + +:: + + BULLET_FOUND - Was bullet found + BULLET_INCLUDE_DIRS - the Bullet include directories + BULLET_LIBRARIES - Link to this, by default it includes + all bullet components (Dynamics, + Collision, LinearMath, & SoftBody) + + + +:: + + This module accepts the following variables + + + +:: + + BULLET_ROOT - Can be set to bullet install path or Windows build path +#]=======================================================================] macro(_FIND_BULLET_LIBRARY _var) find_library(${_var} diff --git a/Modules/FindCABLE.cmake b/Modules/FindCABLE.cmake index 450e322..1f4ae76 100644 --- a/Modules/FindCABLE.cmake +++ b/Modules/FindCABLE.cmake @@ -1,27 +1,28 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindCABLE -# --------- -# -# Find CABLE -# -# This module finds if CABLE is installed and determines where the -# include files and libraries are. This code sets the following -# variables: -# -# :: -# -# CABLE the path to the cable executable -# CABLE_TCL_LIBRARY the path to the Tcl wrapper library -# CABLE_INCLUDE_DIR the path to the include directory -# -# -# -# To build Tcl wrappers, you should add shared library and link it to -# ${CABLE_TCL_LIBRARY}. You should also add ${CABLE_INCLUDE_DIR} as an -# include directory. +#[=======================================================================[.rst: +FindCABLE +--------- + +Find CABLE + +This module finds if CABLE is installed and determines where the +include files and libraries are. This code sets the following +variables: + +:: + + CABLE the path to the cable executable + CABLE_TCL_LIBRARY the path to the Tcl wrapper library + CABLE_INCLUDE_DIR the path to the include directory + + + +To build Tcl wrappers, you should add shared library and link it to +${CABLE_TCL_LIBRARY}. You should also add ${CABLE_INCLUDE_DIR} as an +include directory. +#]=======================================================================] if(NOT CABLE) find_path(CABLE_BUILD_DIR cableVersion.h) diff --git a/Modules/FindCUDA.cmake b/Modules/FindCUDA.cmake index 1650e55..0f5cab4 100644 --- a/Modules/FindCUDA.cmake +++ b/Modules/FindCUDA.cmake @@ -1,376 +1,382 @@ -#.rst: -# FindCUDA -# -------- -# -# .. note:: -# -# The FindCUDA module has been superseded by first-class support -# for the CUDA language in CMake. It is no longer necessary to -# use this module or call ``find_package(CUDA)``. This module -# now exists only for compatibility with projects that have not -# been ported. -# -# Instead, list ``CUDA`` among the languages named in the top-level -# call to the :command:`project` command, or call the -# :command:`enable_language` command with ``CUDA``. -# Then one can add CUDA (``.cu``) sources to programs directly -# in calls to :command:`add_library` and :command:`add_executable`. -# -# Tools for building CUDA C files: libraries and build dependencies. -# -# This script locates the NVIDIA CUDA C tools. It should work on Linux, -# Windows, and macOS and should be reasonably up to date with CUDA C -# releases. -# -# This script makes use of the standard :command:`find_package` arguments of -# ``<VERSION>``, ``REQUIRED`` and ``QUIET``. ``CUDA_FOUND`` will report if an -# acceptable version of CUDA was found. -# -# The script will prompt the user to specify ``CUDA_TOOLKIT_ROOT_DIR`` if -# the prefix cannot be determined by the location of nvcc in the system -# path and ``REQUIRED`` is specified to :command:`find_package`. To use -# a different installed version of the toolkit set the environment variable -# ``CUDA_BIN_PATH`` before running cmake (e.g. -# ``CUDA_BIN_PATH=/usr/local/cuda1.0`` instead of the default -# ``/usr/local/cuda``) or set ``CUDA_TOOLKIT_ROOT_DIR`` after configuring. If -# you change the value of ``CUDA_TOOLKIT_ROOT_DIR``, various components that -# depend on the path will be relocated. -# -# It might be necessary to set ``CUDA_TOOLKIT_ROOT_DIR`` manually on certain -# platforms, or to use a CUDA runtime not installed in the default -# location. In newer versions of the toolkit the CUDA library is -# included with the graphics driver -- be sure that the driver version -# matches what is needed by the CUDA runtime version. -# -# The following variables affect the behavior of the macros in the -# script (in alphebetical order). Note that any of these flags can be -# changed multiple times in the same directory before calling -# ``CUDA_ADD_EXECUTABLE``, ``CUDA_ADD_LIBRARY``, ``CUDA_COMPILE``, -# ``CUDA_COMPILE_PTX``, ``CUDA_COMPILE_FATBIN``, ``CUDA_COMPILE_CUBIN`` -# or ``CUDA_WRAP_SRCS``:: -# -# CUDA_64_BIT_DEVICE_CODE (Default matches host bit size) -# -- Set to ON to compile for 64 bit device code, OFF for 32 bit device code. -# Note that making this different from the host code when generating object -# or C files from CUDA code just won't work, because size_t gets defined by -# nvcc in the generated source. If you compile to PTX and then load the -# file yourself, you can mix bit sizes between device and host. -# -# CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE (Default ON) -# -- Set to ON if you want the custom build rule to be attached to the source -# file in Visual Studio. Turn OFF if you add the same cuda file to multiple -# targets. -# -# This allows the user to build the target from the CUDA file; however, bad -# things can happen if the CUDA source file is added to multiple targets. -# When performing parallel builds it is possible for the custom build -# command to be run more than once and in parallel causing cryptic build -# errors. VS runs the rules for every source file in the target, and a -# source can have only one rule no matter how many projects it is added to. -# When the rule is run from multiple targets race conditions can occur on -# the generated file. Eventually everything will get built, but if the user -# is unaware of this behavior, there may be confusion. It would be nice if -# this script could detect the reuse of source files across multiple targets -# and turn the option off for the user, but no good solution could be found. -# -# CUDA_BUILD_CUBIN (Default OFF) -# -- Set to ON to enable and extra compilation pass with the -cubin option in -# Device mode. The output is parsed and register, shared memory usage is -# printed during build. -# -# CUDA_BUILD_EMULATION (Default OFF for device mode) -# -- Set to ON for Emulation mode. -D_DEVICEEMU is defined for CUDA C files -# when CUDA_BUILD_EMULATION is TRUE. -# -# CUDA_LINK_LIBRARIES_KEYWORD (Default "") -# -- The <PRIVATE|PUBLIC|INTERFACE> keyword to use for internal -# target_link_libraries calls. The default is to use no keyword which -# uses the old "plain" form of target_link_libraries. Note that is matters -# because whatever is used inside the FindCUDA module must also be used -# outside - the two forms of target_link_libraries cannot be mixed. -# -# CUDA_GENERATED_OUTPUT_DIR (Default CMAKE_CURRENT_BINARY_DIR) -# -- Set to the path you wish to have the generated files placed. If it is -# blank output files will be placed in CMAKE_CURRENT_BINARY_DIR. -# Intermediate files will always be placed in -# CMAKE_CURRENT_BINARY_DIR/CMakeFiles. -# -# CUDA_HOST_COMPILATION_CPP (Default ON) -# -- Set to OFF for C compilation of host code. -# -# CUDA_HOST_COMPILER (Default CMAKE_C_COMPILER) -# -- Set the host compiler to be used by nvcc. Ignored if -ccbin or -# --compiler-bindir is already present in the CUDA_NVCC_FLAGS or -# CUDA_NVCC_FLAGS_<CONFIG> variables. For Visual Studio targets, -# the host compiler is constructed with one or more visual studio macros -# such as $(VCInstallDir), that expands out to the path when -# the command is run from within VS. -# -# CUDA_NVCC_FLAGS -# CUDA_NVCC_FLAGS_<CONFIG> -# -- Additional NVCC command line arguments. NOTE: multiple arguments must be -# semi-colon delimited (e.g. --compiler-options;-Wall) -# -# CUDA_PROPAGATE_HOST_FLAGS (Default ON) -# -- Set to ON to propagate CMAKE_{C,CXX}_FLAGS and their configuration -# dependent counterparts (e.g. CMAKE_C_FLAGS_DEBUG) automatically to the -# host compiler through nvcc's -Xcompiler flag. This helps make the -# generated host code match the rest of the system better. Sometimes -# certain flags give nvcc problems, and this will help you turn the flag -# propagation off. This does not affect the flags supplied directly to nvcc -# via CUDA_NVCC_FLAGS or through the OPTION flags specified through -# CUDA_ADD_LIBRARY, CUDA_ADD_EXECUTABLE, or CUDA_WRAP_SRCS. Flags used for -# shared library compilation are not affected by this flag. -# -# CUDA_SEPARABLE_COMPILATION (Default OFF) -# -- If set this will enable separable compilation for all CUDA runtime object -# files. If used outside of CUDA_ADD_EXECUTABLE and CUDA_ADD_LIBRARY -# (e.g. calling CUDA_WRAP_SRCS directly), -# CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME and -# CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS should be called. -# -# CUDA_SOURCE_PROPERTY_FORMAT -# -- If this source file property is set, it can override the format specified -# to CUDA_WRAP_SRCS (OBJ, PTX, CUBIN, or FATBIN). If an input source file -# is not a .cu file, setting this file will cause it to be treated as a .cu -# file. See documentation for set_source_files_properties on how to set -# this property. -# -# CUDA_USE_STATIC_CUDA_RUNTIME (Default ON) -# -- When enabled the static version of the CUDA runtime library will be used -# in CUDA_LIBRARIES. If the version of CUDA configured doesn't support -# this option, then it will be silently disabled. -# -# CUDA_VERBOSE_BUILD (Default OFF) -# -- Set to ON to see all the commands used when building the CUDA file. When -# using a Makefile generator the value defaults to VERBOSE (run make -# VERBOSE=1 to see output), although setting CUDA_VERBOSE_BUILD to ON will -# always print the output. -# -# The script creates the following macros (in alphebetical order):: -# -# CUDA_ADD_CUFFT_TO_TARGET( cuda_target ) -# -- Adds the cufft library to the target (can be any target). Handles whether -# you are in emulation mode or not. -# -# CUDA_ADD_CUBLAS_TO_TARGET( cuda_target ) -# -- Adds the cublas library to the target (can be any target). Handles -# whether you are in emulation mode or not. -# -# CUDA_ADD_EXECUTABLE( cuda_target file0 file1 ... -# [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [OPTIONS ...] ) -# -- Creates an executable "cuda_target" which is made up of the files -# specified. All of the non CUDA C files are compiled using the standard -# build rules specified by CMAKE and the cuda files are compiled to object -# files using nvcc and the host compiler. In addition CUDA_INCLUDE_DIRS is -# added automatically to include_directories(). Some standard CMake target -# calls can be used on the target after calling this macro -# (e.g. set_target_properties and target_link_libraries), but setting -# properties that adjust compilation flags will not affect code compiled by -# nvcc. Such flags should be modified before calling CUDA_ADD_EXECUTABLE, -# CUDA_ADD_LIBRARY or CUDA_WRAP_SRCS. -# -# CUDA_ADD_LIBRARY( cuda_target file0 file1 ... -# [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [OPTIONS ...] ) -# -- Same as CUDA_ADD_EXECUTABLE except that a library is created. -# -# CUDA_BUILD_CLEAN_TARGET() -# -- Creates a convenience target that deletes all the dependency files -# generated. You should make clean after running this target to ensure the -# dependency files get regenerated. -# -# CUDA_COMPILE( generated_files file0 file1 ... [STATIC | SHARED | MODULE] -# [OPTIONS ...] ) -# -- Returns a list of generated files from the input source files to be used -# with ADD_LIBRARY or ADD_EXECUTABLE. -# -# CUDA_COMPILE_PTX( generated_files file0 file1 ... [OPTIONS ...] ) -# -- Returns a list of PTX files generated from the input source files. -# -# CUDA_COMPILE_FATBIN( generated_files file0 file1 ... [OPTIONS ...] ) -# -- Returns a list of FATBIN files generated from the input source files. -# -# CUDA_COMPILE_CUBIN( generated_files file0 file1 ... [OPTIONS ...] ) -# -- Returns a list of CUBIN files generated from the input source files. -# -# CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME( output_file_var -# cuda_target -# object_files ) -# -- Compute the name of the intermediate link file used for separable -# compilation. This file name is typically passed into -# CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS. output_file_var is produced -# based on cuda_target the list of objects files that need separable -# compilation as specified by object_files. If the object_files list is -# empty, then output_file_var will be empty. This function is called -# automatically for CUDA_ADD_LIBRARY and CUDA_ADD_EXECUTABLE. Note that -# this is a function and not a macro. -# -# CUDA_INCLUDE_DIRECTORIES( path0 path1 ... ) -# -- Sets the directories that should be passed to nvcc -# (e.g. nvcc -Ipath0 -Ipath1 ... ). These paths usually contain other .cu -# files. -# -# -# CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS( output_file_var cuda_target -# nvcc_flags object_files) -# -- Generates the link object required by separable compilation from the given -# object files. This is called automatically for CUDA_ADD_EXECUTABLE and -# CUDA_ADD_LIBRARY, but can be called manually when using CUDA_WRAP_SRCS -# directly. When called from CUDA_ADD_LIBRARY or CUDA_ADD_EXECUTABLE the -# nvcc_flags passed in are the same as the flags passed in via the OPTIONS -# argument. The only nvcc flag added automatically is the bitness flag as -# specified by CUDA_64_BIT_DEVICE_CODE. Note that this is a function -# instead of a macro. -# -# CUDA_SELECT_NVCC_ARCH_FLAGS(out_variable [target_CUDA_architectures]) -# -- Selects GPU arch flags for nvcc based on target_CUDA_architectures -# target_CUDA_architectures : Auto | Common | All | LIST(ARCH_AND_PTX ...) -# - "Auto" detects local machine GPU compute arch at runtime. -# - "Common" and "All" cover common and entire subsets of architectures -# ARCH_AND_PTX : NAME | NUM.NUM | NUM.NUM(NUM.NUM) | NUM.NUM+PTX -# NAME: Fermi Kepler Maxwell Kepler+Tegra Kepler+Tesla Maxwell+Tegra Pascal -# NUM: Any number. Only those pairs are currently accepted by NVCC though: -# 2.0 2.1 3.0 3.2 3.5 3.7 5.0 5.2 5.3 6.0 6.2 -# Returns LIST of flags to be added to CUDA_NVCC_FLAGS in ${out_variable} -# Additionally, sets ${out_variable}_readable to the resulting numeric list -# Example: -# CUDA_SELECT_NVCC_ARCH_FLAGS(ARCH_FLAGS 3.0 3.5+PTX 5.2(5.0) Maxwell) -# LIST(APPEND CUDA_NVCC_FLAGS ${ARCH_FLAGS}) -# -# More info on CUDA architectures: https://en.wikipedia.org/wiki/CUDA -# Note that this is a function instead of a macro. -# -# CUDA_WRAP_SRCS ( cuda_target format generated_files file0 file1 ... -# [STATIC | SHARED | MODULE] [OPTIONS ...] ) -# -- This is where all the magic happens. CUDA_ADD_EXECUTABLE, -# CUDA_ADD_LIBRARY, CUDA_COMPILE, and CUDA_COMPILE_PTX all call this -# function under the hood. -# -# Given the list of files (file0 file1 ... fileN) this macro generates -# custom commands that generate either PTX or linkable objects (use "PTX" or -# "OBJ" for the format argument to switch). Files that don't end with .cu -# or have the HEADER_FILE_ONLY property are ignored. -# -# The arguments passed in after OPTIONS are extra command line options to -# give to nvcc. You can also specify per configuration options by -# specifying the name of the configuration followed by the options. General -# options must precede configuration specific options. Not all -# configurations need to be specified, only the ones provided will be used. -# -# OPTIONS -DFLAG=2 "-DFLAG_OTHER=space in flag" -# DEBUG -g -# RELEASE --use_fast_math -# RELWITHDEBINFO --use_fast_math;-g -# MINSIZEREL --use_fast_math -# -# For certain configurations (namely VS generating object files with -# CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE set to ON), no generated file will -# be produced for the given cuda file. This is because when you add the -# cuda file to Visual Studio it knows that this file produces an object file -# and will link in the resulting object file automatically. -# -# This script will also generate a separate cmake script that is used at -# build time to invoke nvcc. This is for several reasons. -# -# 1. nvcc can return negative numbers as return values which confuses -# Visual Studio into thinking that the command succeeded. The script now -# checks the error codes and produces errors when there was a problem. -# -# 2. nvcc has been known to not delete incomplete results when it -# encounters problems. This confuses build systems into thinking the -# target was generated when in fact an unusable file exists. The script -# now deletes the output files if there was an error. -# -# 3. By putting all the options that affect the build into a file and then -# make the build rule dependent on the file, the output files will be -# regenerated when the options change. -# -# This script also looks at optional arguments STATIC, SHARED, or MODULE to -# determine when to target the object compilation for a shared library. -# BUILD_SHARED_LIBS is ignored in CUDA_WRAP_SRCS, but it is respected in -# CUDA_ADD_LIBRARY. On some systems special flags are added for building -# objects intended for shared libraries. A preprocessor macro, -# <target_name>_EXPORTS is defined when a shared library compilation is -# detected. -# -# Flags passed into add_definitions with -D or /D are passed along to nvcc. -# -# -# -# The script defines the following variables:: -# -# CUDA_VERSION_MAJOR -- The major version of cuda as reported by nvcc. -# CUDA_VERSION_MINOR -- The minor version. -# CUDA_VERSION -# CUDA_VERSION_STRING -- CUDA_VERSION_MAJOR.CUDA_VERSION_MINOR -# CUDA_HAS_FP16 -- Whether a short float (float16,fp16) is supported. -# -# CUDA_TOOLKIT_ROOT_DIR -- Path to the CUDA Toolkit (defined if not set). -# CUDA_SDK_ROOT_DIR -- Path to the CUDA SDK. Use this to find files in the -# SDK. This script will not directly support finding -# specific libraries or headers, as that isn't -# supported by NVIDIA. If you want to change -# libraries when the path changes see the -# FindCUDA.cmake script for an example of how to clear -# these variables. There are also examples of how to -# use the CUDA_SDK_ROOT_DIR to locate headers or -# libraries, if you so choose (at your own risk). -# CUDA_INCLUDE_DIRS -- Include directory for cuda headers. Added automatically -# for CUDA_ADD_EXECUTABLE and CUDA_ADD_LIBRARY. -# CUDA_LIBRARIES -- Cuda RT library. -# CUDA_CUFFT_LIBRARIES -- Device or emulation library for the Cuda FFT -# implementation (alternative to: -# CUDA_ADD_CUFFT_TO_TARGET macro) -# CUDA_CUBLAS_LIBRARIES -- Device or emulation library for the Cuda BLAS -# implementation (alternative to: -# CUDA_ADD_CUBLAS_TO_TARGET macro). -# CUDA_cudart_static_LIBRARY -- Statically linkable cuda runtime library. -# Only available for CUDA version 5.5+ -# CUDA_cudadevrt_LIBRARY -- Device runtime library. -# Required for separable compilation. -# CUDA_cupti_LIBRARY -- CUDA Profiling Tools Interface library. -# Only available for CUDA version 4.0+. -# CUDA_curand_LIBRARY -- CUDA Random Number Generation library. -# Only available for CUDA version 3.2+. -# CUDA_cusolver_LIBRARY -- CUDA Direct Solver library. -# Only available for CUDA version 7.0+. -# CUDA_cusparse_LIBRARY -- CUDA Sparse Matrix library. -# Only available for CUDA version 3.2+. -# CUDA_npp_LIBRARY -- NVIDIA Performance Primitives lib. -# Only available for CUDA version 4.0+. -# CUDA_nppc_LIBRARY -- NVIDIA Performance Primitives lib (core). -# Only available for CUDA version 5.5+. -# CUDA_nppi_LIBRARY -- NVIDIA Performance Primitives lib (image processing). -# Only available for CUDA version 5.5 - 8.0. -# CUDA_nppial_LIBRARY -- NVIDIA Performance Primitives lib (image processing). -# Only available for CUDA version 9.0. -# CUDA_nppicc_LIBRARY -- NVIDIA Performance Primitives lib (image processing). -# Only available for CUDA version 9.0. -# CUDA_nppicom_LIBRARY -- NVIDIA Performance Primitives lib (image processing). -# Only available for CUDA version 9.0. -# CUDA_nppidei_LIBRARY -- NVIDIA Performance Primitives lib (image processing). -# Only available for CUDA version 9.0. -# CUDA_nppif_LIBRARY -- NVIDIA Performance Primitives lib (image processing). -# Only available for CUDA version 9.0. -# CUDA_nppig_LIBRARY -- NVIDIA Performance Primitives lib (image processing). -# Only available for CUDA version 9.0. -# CUDA_nppim_LIBRARY -- NVIDIA Performance Primitives lib (image processing). -# Only available for CUDA version 9.0. -# CUDA_nppist_LIBRARY -- NVIDIA Performance Primitives lib (image processing). -# Only available for CUDA version 9.0. -# CUDA_nppisu_LIBRARY -- NVIDIA Performance Primitives lib (image processing). -# Only available for CUDA version 9.0. -# CUDA_nppitc_LIBRARY -- NVIDIA Performance Primitives lib (image processing). -# Only available for CUDA version 9.0. -# CUDA_npps_LIBRARY -- NVIDIA Performance Primitives lib (signal processing). -# Only available for CUDA version 5.5+. -# CUDA_nvcuvenc_LIBRARY -- CUDA Video Encoder library. -# Only available for CUDA version 3.2+. -# Windows only. -# CUDA_nvcuvid_LIBRARY -- CUDA Video Decoder library. -# Only available for CUDA version 3.2+. -# Windows only. -# +#[=======================================================================[.rst: +FindCUDA +-------- + +.. deprecated:: 3.10 + + Superseded by first-class support for the CUDA language in CMake. + +Replacement +^^^^^^^^^^^ + +It is no longer necessary to use this module or call ``find_package(CUDA)``. +Instead, list ``CUDA`` among the languages named in the top-level +call to the :command:`project` command, or call the +:command:`enable_language` command with ``CUDA``. +Then one can add CUDA (``.cu``) sources to programs directly +in calls to :command:`add_library` and :command:`add_executable`. + +Documentation of Deprecated Usage +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Tools for building CUDA C files: libraries and build dependencies. + +This script locates the NVIDIA CUDA C tools. It should work on Linux, +Windows, and macOS and should be reasonably up to date with CUDA C +releases. + +This script makes use of the standard :command:`find_package` arguments of +``<VERSION>``, ``REQUIRED`` and ``QUIET``. ``CUDA_FOUND`` will report if an +acceptable version of CUDA was found. + +The script will prompt the user to specify ``CUDA_TOOLKIT_ROOT_DIR`` if +the prefix cannot be determined by the location of nvcc in the system +path and ``REQUIRED`` is specified to :command:`find_package`. To use +a different installed version of the toolkit set the environment variable +``CUDA_BIN_PATH`` before running cmake (e.g. +``CUDA_BIN_PATH=/usr/local/cuda1.0`` instead of the default +``/usr/local/cuda``) or set ``CUDA_TOOLKIT_ROOT_DIR`` after configuring. If +you change the value of ``CUDA_TOOLKIT_ROOT_DIR``, various components that +depend on the path will be relocated. + +It might be necessary to set ``CUDA_TOOLKIT_ROOT_DIR`` manually on certain +platforms, or to use a CUDA runtime not installed in the default +location. In newer versions of the toolkit the CUDA library is +included with the graphics driver -- be sure that the driver version +matches what is needed by the CUDA runtime version. + +The following variables affect the behavior of the macros in the +script (in alphabetical order). Note that any of these flags can be +changed multiple times in the same directory before calling +``CUDA_ADD_EXECUTABLE``, ``CUDA_ADD_LIBRARY``, ``CUDA_COMPILE``, +``CUDA_COMPILE_PTX``, ``CUDA_COMPILE_FATBIN``, ``CUDA_COMPILE_CUBIN`` +or ``CUDA_WRAP_SRCS``:: + + CUDA_64_BIT_DEVICE_CODE (Default matches host bit size) + -- Set to ON to compile for 64 bit device code, OFF for 32 bit device code. + Note that making this different from the host code when generating object + or C files from CUDA code just won't work, because size_t gets defined by + nvcc in the generated source. If you compile to PTX and then load the + file yourself, you can mix bit sizes between device and host. + + CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE (Default ON) + -- Set to ON if you want the custom build rule to be attached to the source + file in Visual Studio. Turn OFF if you add the same cuda file to multiple + targets. + + This allows the user to build the target from the CUDA file; however, bad + things can happen if the CUDA source file is added to multiple targets. + When performing parallel builds it is possible for the custom build + command to be run more than once and in parallel causing cryptic build + errors. VS runs the rules for every source file in the target, and a + source can have only one rule no matter how many projects it is added to. + When the rule is run from multiple targets race conditions can occur on + the generated file. Eventually everything will get built, but if the user + is unaware of this behavior, there may be confusion. It would be nice if + this script could detect the reuse of source files across multiple targets + and turn the option off for the user, but no good solution could be found. + + CUDA_BUILD_CUBIN (Default OFF) + -- Set to ON to enable and extra compilation pass with the -cubin option in + Device mode. The output is parsed and register, shared memory usage is + printed during build. + + CUDA_BUILD_EMULATION (Default OFF for device mode) + -- Set to ON for Emulation mode. -D_DEVICEEMU is defined for CUDA C files + when CUDA_BUILD_EMULATION is TRUE. + + CUDA_LINK_LIBRARIES_KEYWORD (Default "") + -- The <PRIVATE|PUBLIC|INTERFACE> keyword to use for internal + target_link_libraries calls. The default is to use no keyword which + uses the old "plain" form of target_link_libraries. Note that is matters + because whatever is used inside the FindCUDA module must also be used + outside - the two forms of target_link_libraries cannot be mixed. + + CUDA_GENERATED_OUTPUT_DIR (Default CMAKE_CURRENT_BINARY_DIR) + -- Set to the path you wish to have the generated files placed. If it is + blank output files will be placed in CMAKE_CURRENT_BINARY_DIR. + Intermediate files will always be placed in + CMAKE_CURRENT_BINARY_DIR/CMakeFiles. + + CUDA_HOST_COMPILATION_CPP (Default ON) + -- Set to OFF for C compilation of host code. + + CUDA_HOST_COMPILER (Default CMAKE_C_COMPILER) + -- Set the host compiler to be used by nvcc. Ignored if -ccbin or + --compiler-bindir is already present in the CUDA_NVCC_FLAGS or + CUDA_NVCC_FLAGS_<CONFIG> variables. For Visual Studio targets, + the host compiler is constructed with one or more visual studio macros + such as $(VCInstallDir), that expands out to the path when + the command is run from within VS. + If the CUDAHOSTCXX environment variable is set it will + be used as the default. + + CUDA_NVCC_FLAGS + CUDA_NVCC_FLAGS_<CONFIG> + -- Additional NVCC command line arguments. NOTE: multiple arguments must be + semi-colon delimited (e.g. --compiler-options;-Wall) + + CUDA_PROPAGATE_HOST_FLAGS (Default ON) + -- Set to ON to propagate CMAKE_{C,CXX}_FLAGS and their configuration + dependent counterparts (e.g. CMAKE_C_FLAGS_DEBUG) automatically to the + host compiler through nvcc's -Xcompiler flag. This helps make the + generated host code match the rest of the system better. Sometimes + certain flags give nvcc problems, and this will help you turn the flag + propagation off. This does not affect the flags supplied directly to nvcc + via CUDA_NVCC_FLAGS or through the OPTION flags specified through + CUDA_ADD_LIBRARY, CUDA_ADD_EXECUTABLE, or CUDA_WRAP_SRCS. Flags used for + shared library compilation are not affected by this flag. + + CUDA_SEPARABLE_COMPILATION (Default OFF) + -- If set this will enable separable compilation for all CUDA runtime object + files. If used outside of CUDA_ADD_EXECUTABLE and CUDA_ADD_LIBRARY + (e.g. calling CUDA_WRAP_SRCS directly), + CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME and + CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS should be called. + + CUDA_SOURCE_PROPERTY_FORMAT + -- If this source file property is set, it can override the format specified + to CUDA_WRAP_SRCS (OBJ, PTX, CUBIN, or FATBIN). If an input source file + is not a .cu file, setting this file will cause it to be treated as a .cu + file. See documentation for set_source_files_properties on how to set + this property. + + CUDA_USE_STATIC_CUDA_RUNTIME (Default ON) + -- When enabled the static version of the CUDA runtime library will be used + in CUDA_LIBRARIES. If the version of CUDA configured doesn't support + this option, then it will be silently disabled. + + CUDA_VERBOSE_BUILD (Default OFF) + -- Set to ON to see all the commands used when building the CUDA file. When + using a Makefile generator the value defaults to VERBOSE (run make + VERBOSE=1 to see output), although setting CUDA_VERBOSE_BUILD to ON will + always print the output. + +The script creates the following macros (in alphabetical order):: + + CUDA_ADD_CUFFT_TO_TARGET( cuda_target ) + -- Adds the cufft library to the target (can be any target). Handles whether + you are in emulation mode or not. + + CUDA_ADD_CUBLAS_TO_TARGET( cuda_target ) + -- Adds the cublas library to the target (can be any target). Handles + whether you are in emulation mode or not. + + CUDA_ADD_EXECUTABLE( cuda_target file0 file1 ... + [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [OPTIONS ...] ) + -- Creates an executable "cuda_target" which is made up of the files + specified. All of the non CUDA C files are compiled using the standard + build rules specified by CMAKE and the cuda files are compiled to object + files using nvcc and the host compiler. In addition CUDA_INCLUDE_DIRS is + added automatically to include_directories(). Some standard CMake target + calls can be used on the target after calling this macro + (e.g. set_target_properties and target_link_libraries), but setting + properties that adjust compilation flags will not affect code compiled by + nvcc. Such flags should be modified before calling CUDA_ADD_EXECUTABLE, + CUDA_ADD_LIBRARY or CUDA_WRAP_SRCS. + + CUDA_ADD_LIBRARY( cuda_target file0 file1 ... + [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [OPTIONS ...] ) + -- Same as CUDA_ADD_EXECUTABLE except that a library is created. + + CUDA_BUILD_CLEAN_TARGET() + -- Creates a convenience target that deletes all the dependency files + generated. You should make clean after running this target to ensure the + dependency files get regenerated. + + CUDA_COMPILE( generated_files file0 file1 ... [STATIC | SHARED | MODULE] + [OPTIONS ...] ) + -- Returns a list of generated files from the input source files to be used + with ADD_LIBRARY or ADD_EXECUTABLE. + + CUDA_COMPILE_PTX( generated_files file0 file1 ... [OPTIONS ...] ) + -- Returns a list of PTX files generated from the input source files. + + CUDA_COMPILE_FATBIN( generated_files file0 file1 ... [OPTIONS ...] ) + -- Returns a list of FATBIN files generated from the input source files. + + CUDA_COMPILE_CUBIN( generated_files file0 file1 ... [OPTIONS ...] ) + -- Returns a list of CUBIN files generated from the input source files. + + CUDA_COMPUTE_SEPARABLE_COMPILATION_OBJECT_FILE_NAME( output_file_var + cuda_target + object_files ) + -- Compute the name of the intermediate link file used for separable + compilation. This file name is typically passed into + CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS. output_file_var is produced + based on cuda_target the list of objects files that need separable + compilation as specified by object_files. If the object_files list is + empty, then output_file_var will be empty. This function is called + automatically for CUDA_ADD_LIBRARY and CUDA_ADD_EXECUTABLE. Note that + this is a function and not a macro. + + CUDA_INCLUDE_DIRECTORIES( path0 path1 ... ) + -- Sets the directories that should be passed to nvcc + (e.g. nvcc -Ipath0 -Ipath1 ... ). These paths usually contain other .cu + files. + + + CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS( output_file_var cuda_target + nvcc_flags object_files) + -- Generates the link object required by separable compilation from the given + object files. This is called automatically for CUDA_ADD_EXECUTABLE and + CUDA_ADD_LIBRARY, but can be called manually when using CUDA_WRAP_SRCS + directly. When called from CUDA_ADD_LIBRARY or CUDA_ADD_EXECUTABLE the + nvcc_flags passed in are the same as the flags passed in via the OPTIONS + argument. The only nvcc flag added automatically is the bitness flag as + specified by CUDA_64_BIT_DEVICE_CODE. Note that this is a function + instead of a macro. + + CUDA_SELECT_NVCC_ARCH_FLAGS(out_variable [target_CUDA_architectures]) + -- Selects GPU arch flags for nvcc based on target_CUDA_architectures + target_CUDA_architectures : Auto | Common | All | LIST(ARCH_AND_PTX ...) + - "Auto" detects local machine GPU compute arch at runtime. + - "Common" and "All" cover common and entire subsets of architectures + ARCH_AND_PTX : NAME | NUM.NUM | NUM.NUM(NUM.NUM) | NUM.NUM+PTX + NAME: Fermi Kepler Maxwell Kepler+Tegra Kepler+Tesla Maxwell+Tegra Pascal + NUM: Any number. Only those pairs are currently accepted by NVCC though: + 2.0 2.1 3.0 3.2 3.5 3.7 5.0 5.2 5.3 6.0 6.2 + Returns LIST of flags to be added to CUDA_NVCC_FLAGS in ${out_variable} + Additionally, sets ${out_variable}_readable to the resulting numeric list + Example: + CUDA_SELECT_NVCC_ARCH_FLAGS(ARCH_FLAGS 3.0 3.5+PTX 5.2(5.0) Maxwell) + LIST(APPEND CUDA_NVCC_FLAGS ${ARCH_FLAGS}) + + More info on CUDA architectures: https://en.wikipedia.org/wiki/CUDA + Note that this is a function instead of a macro. + + CUDA_WRAP_SRCS ( cuda_target format generated_files file0 file1 ... + [STATIC | SHARED | MODULE] [OPTIONS ...] ) + -- This is where all the magic happens. CUDA_ADD_EXECUTABLE, + CUDA_ADD_LIBRARY, CUDA_COMPILE, and CUDA_COMPILE_PTX all call this + function under the hood. + + Given the list of files (file0 file1 ... fileN) this macro generates + custom commands that generate either PTX or linkable objects (use "PTX" or + "OBJ" for the format argument to switch). Files that don't end with .cu + or have the HEADER_FILE_ONLY property are ignored. + + The arguments passed in after OPTIONS are extra command line options to + give to nvcc. You can also specify per configuration options by + specifying the name of the configuration followed by the options. General + options must precede configuration specific options. Not all + configurations need to be specified, only the ones provided will be used. + + OPTIONS -DFLAG=2 "-DFLAG_OTHER=space in flag" + DEBUG -g + RELEASE --use_fast_math + RELWITHDEBINFO --use_fast_math;-g + MINSIZEREL --use_fast_math + + For certain configurations (namely VS generating object files with + CUDA_ATTACH_VS_BUILD_RULE_TO_CUDA_FILE set to ON), no generated file will + be produced for the given cuda file. This is because when you add the + cuda file to Visual Studio it knows that this file produces an object file + and will link in the resulting object file automatically. + + This script will also generate a separate cmake script that is used at + build time to invoke nvcc. This is for several reasons. + + 1. nvcc can return negative numbers as return values which confuses + Visual Studio into thinking that the command succeeded. The script now + checks the error codes and produces errors when there was a problem. + + 2. nvcc has been known to not delete incomplete results when it + encounters problems. This confuses build systems into thinking the + target was generated when in fact an unusable file exists. The script + now deletes the output files if there was an error. + + 3. By putting all the options that affect the build into a file and then + make the build rule dependent on the file, the output files will be + regenerated when the options change. + + This script also looks at optional arguments STATIC, SHARED, or MODULE to + determine when to target the object compilation for a shared library. + BUILD_SHARED_LIBS is ignored in CUDA_WRAP_SRCS, but it is respected in + CUDA_ADD_LIBRARY. On some systems special flags are added for building + objects intended for shared libraries. A preprocessor macro, + <target_name>_EXPORTS is defined when a shared library compilation is + detected. + + Flags passed into add_definitions with -D or /D are passed along to nvcc. + + + +The script defines the following variables:: + + CUDA_VERSION_MAJOR -- The major version of cuda as reported by nvcc. + CUDA_VERSION_MINOR -- The minor version. + CUDA_VERSION + CUDA_VERSION_STRING -- CUDA_VERSION_MAJOR.CUDA_VERSION_MINOR + CUDA_HAS_FP16 -- Whether a short float (float16,fp16) is supported. + + CUDA_TOOLKIT_ROOT_DIR -- Path to the CUDA Toolkit (defined if not set). + CUDA_SDK_ROOT_DIR -- Path to the CUDA SDK. Use this to find files in the + SDK. This script will not directly support finding + specific libraries or headers, as that isn't + supported by NVIDIA. If you want to change + libraries when the path changes see the + FindCUDA.cmake script for an example of how to clear + these variables. There are also examples of how to + use the CUDA_SDK_ROOT_DIR to locate headers or + libraries, if you so choose (at your own risk). + CUDA_INCLUDE_DIRS -- Include directory for cuda headers. Added automatically + for CUDA_ADD_EXECUTABLE and CUDA_ADD_LIBRARY. + CUDA_LIBRARIES -- Cuda RT library. + CUDA_CUFFT_LIBRARIES -- Device or emulation library for the Cuda FFT + implementation (alternative to: + CUDA_ADD_CUFFT_TO_TARGET macro) + CUDA_CUBLAS_LIBRARIES -- Device or emulation library for the Cuda BLAS + implementation (alternative to: + CUDA_ADD_CUBLAS_TO_TARGET macro). + CUDA_cudart_static_LIBRARY -- Statically linkable cuda runtime library. + Only available for CUDA version 5.5+ + CUDA_cudadevrt_LIBRARY -- Device runtime library. + Required for separable compilation. + CUDA_cupti_LIBRARY -- CUDA Profiling Tools Interface library. + Only available for CUDA version 4.0+. + CUDA_curand_LIBRARY -- CUDA Random Number Generation library. + Only available for CUDA version 3.2+. + CUDA_cusolver_LIBRARY -- CUDA Direct Solver library. + Only available for CUDA version 7.0+. + CUDA_cusparse_LIBRARY -- CUDA Sparse Matrix library. + Only available for CUDA version 3.2+. + CUDA_npp_LIBRARY -- NVIDIA Performance Primitives lib. + Only available for CUDA version 4.0+. + CUDA_nppc_LIBRARY -- NVIDIA Performance Primitives lib (core). + Only available for CUDA version 5.5+. + CUDA_nppi_LIBRARY -- NVIDIA Performance Primitives lib (image processing). + Only available for CUDA version 5.5 - 8.0. + CUDA_nppial_LIBRARY -- NVIDIA Performance Primitives lib (image processing). + Only available for CUDA version 9.0. + CUDA_nppicc_LIBRARY -- NVIDIA Performance Primitives lib (image processing). + Only available for CUDA version 9.0. + CUDA_nppicom_LIBRARY -- NVIDIA Performance Primitives lib (image processing). + Only available for CUDA version 9.0. + CUDA_nppidei_LIBRARY -- NVIDIA Performance Primitives lib (image processing). + Only available for CUDA version 9.0. + CUDA_nppif_LIBRARY -- NVIDIA Performance Primitives lib (image processing). + Only available for CUDA version 9.0. + CUDA_nppig_LIBRARY -- NVIDIA Performance Primitives lib (image processing). + Only available for CUDA version 9.0. + CUDA_nppim_LIBRARY -- NVIDIA Performance Primitives lib (image processing). + Only available for CUDA version 9.0. + CUDA_nppist_LIBRARY -- NVIDIA Performance Primitives lib (image processing). + Only available for CUDA version 9.0. + CUDA_nppisu_LIBRARY -- NVIDIA Performance Primitives lib (image processing). + Only available for CUDA version 9.0. + CUDA_nppitc_LIBRARY -- NVIDIA Performance Primitives lib (image processing). + Only available for CUDA version 9.0. + CUDA_npps_LIBRARY -- NVIDIA Performance Primitives lib (signal processing). + Only available for CUDA version 5.5+. + CUDA_nvcuvenc_LIBRARY -- CUDA Video Encoder library. + Only available for CUDA version 3.2+. + Windows only. + CUDA_nvcuvid_LIBRARY -- CUDA Video Decoder library. + Only available for CUDA version 3.2+. + Windows only. + +#]=======================================================================] # James Bigler, NVIDIA Corp (nvidia.com - jbigler) # Abe Stephens, SCI Institute -- http://www.sci.utah.edu/~abe/FindCuda.html @@ -527,7 +533,9 @@ option(CUDA_HOST_COMPILATION_CPP "Generated file extension" ON) # Extra user settable flags cmake_initialize_per_config_variable(CUDA_NVCC_FLAGS "Semi-colon delimit multiple arguments.") -if(CMAKE_GENERATOR MATCHES "Visual Studio") +if(DEFINED ENV{CUDAHOSTCXX}) + set(CUDA_HOST_COMPILER "$ENV{CUDAHOSTCXX}" CACHE FILEPATH "Host side compiler used by NVCC") +elseif(CMAKE_GENERATOR MATCHES "Visual Studio") set(_CUDA_MSVC_HOST_COMPILER "$(VCInstallDir)Tools/MSVC/$(VCToolsVersion)/bin/Host$(Platform)/$(PlatformTarget)") if(MSVC_VERSION LESS 1910) set(_CUDA_MSVC_HOST_COMPILER "$(VCInstallDir)bin") diff --git a/Modules/FindCUDA/select_compute_arch.cmake b/Modules/FindCUDA/select_compute_arch.cmake index cf4fc39..1baf051 100644 --- a/Modules/FindCUDA/select_compute_arch.cmake +++ b/Modules/FindCUDA/select_compute_arch.cmake @@ -109,6 +109,9 @@ function(CUDA_DETECT_INSTALLED_GPUS OUT_VARIABLE) RUN_OUTPUT_VARIABLE compute_capabilities) endif() + # Filter unrelated content out of the output. + string(REGEX MATCHALL "[0-9]+\\.[0-9]+" compute_capabilities "${compute_capabilities}") + if(run_result EQUAL 0) string(REPLACE "2.1" "2.1(2.0)" compute_capabilities "${compute_capabilities}") set(CUDA_GPU_DETECT_OUTPUT ${compute_capabilities} diff --git a/Modules/FindCURL.cmake b/Modules/FindCURL.cmake index a549765..a4b238d 100644 --- a/Modules/FindCURL.cmake +++ b/Modules/FindCURL.cmake @@ -1,50 +1,63 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindCURL -# -------- -# -# Find the native CURL headers and libraries. -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines :prop_tgt:`IMPORTED` target ``CURL::libcurl``, if -# curl has been found. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following variables: -# -# ``CURL_FOUND`` -# True if curl found. -# -# ``CURL_INCLUDE_DIRS`` -# where to find curl/curl.h, etc. -# -# ``CURL_LIBRARIES`` -# List of libraries when using curl. -# -# ``CURL_VERSION_STRING`` -# The version of curl found. +#[=======================================================================[.rst: +FindCURL +-------- + +Find the native CURL headers and libraries. + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``CURL::libcurl``, if +curl has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +``CURL_FOUND`` + True if curl found. + +``CURL_INCLUDE_DIRS`` + where to find curl/curl.h, etc. + +``CURL_LIBRARIES`` + List of libraries when using curl. + +``CURL_VERSION_STRING`` + The version of curl found. +#]=======================================================================] # Look for the header file. find_path(CURL_INCLUDE_DIR NAMES curl/curl.h) mark_as_advanced(CURL_INCLUDE_DIR) -# Look for the library (sorted from most current/relevant entry to least). -find_library(CURL_LIBRARY NAMES - curl - # Windows MSVC prebuilts: - curllib - libcurl_imp - curllib_static - # Windows older "Win32 - MSVC" prebuilts (libcurl.lib, e.g. libcurl-7.15.5-win32-msvc.zip): - libcurl -) -mark_as_advanced(CURL_LIBRARY) +if(NOT CURL_LIBRARY) + # Look for the library (sorted from most current/relevant entry to least). + find_library(CURL_LIBRARY_RELEASE NAMES + curl + # Windows MSVC prebuilts: + curllib + libcurl_imp + curllib_static + # Windows older "Win32 - MSVC" prebuilts (libcurl.lib, e.g. libcurl-7.15.5-win32-msvc.zip): + libcurl + ) + mark_as_advanced(CURL_LIBRARY_RELEASE) + + find_library(CURL_LIBRARY_DEBUG NAMES + # Windows MSVC CMake builds in debug configuration on vcpkg: + libcurl-d_imp + libcurl-d + ) + mark_as_advanced(CURL_LIBRARY_DEBUG) + + include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) + select_library_configurations(CURL) +endif() if(CURL_INCLUDE_DIR) foreach(_curl_version_header curlver.h curl.h) @@ -69,7 +82,27 @@ if(CURL_FOUND) if(NOT TARGET CURL::libcurl) add_library(CURL::libcurl UNKNOWN IMPORTED) - set_target_properties(CURL::libcurl PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIRS}") - set_property(TARGET CURL::libcurl APPEND PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}") + set_target_properties(CURL::libcurl PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIRS}") + + if(EXISTS "${CURL_LIBRARY}") + set_target_properties(CURL::libcurl PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${CURL_LIBRARY}") + endif() + if(CURL_LIBRARY_RELEASE) + set_property(TARGET CURL::libcurl APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(CURL::libcurl PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION_RELEASE "${CURL_LIBRARY_RELEASE}") + endif() + if(CURL_LIBRARY_DEBUG) + set_property(TARGET CURL::libcurl APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(CURL::libcurl PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION_DEBUG "${CURL_LIBRARY_DEBUG}") + endif() endif() endif() diff --git a/Modules/FindCVS.cmake b/Modules/FindCVS.cmake index d59dfb0..89dbc0e 100644 --- a/Modules/FindCVS.cmake +++ b/Modules/FindCVS.cmake @@ -1,27 +1,28 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindCVS -# ------- -# -# -# -# The module defines the following variables: -# -# :: -# -# CVS_EXECUTABLE - path to cvs command line client -# CVS_FOUND - true if the command line client was found -# -# Example usage: -# -# :: -# -# find_package(CVS) -# if(CVS_FOUND) -# message("CVS found: ${CVS_EXECUTABLE}") -# endif() +#[=======================================================================[.rst: +FindCVS +------- + + + +The module defines the following variables: + +:: + + CVS_EXECUTABLE - path to cvs command line client + CVS_FOUND - true if the command line client was found + +Example usage: + +:: + + find_package(CVS) + if(CVS_FOUND) + message("CVS found: ${CVS_EXECUTABLE}") + endif() +#]=======================================================================] # CVSNT diff --git a/Modules/FindCoin3D.cmake b/Modules/FindCoin3D.cmake index f11903d..301e70b 100644 --- a/Modules/FindCoin3D.cmake +++ b/Modules/FindCoin3D.cmake @@ -1,22 +1,23 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindCoin3D -# ---------- -# -# Find Coin3D (Open Inventor) -# -# Coin3D is an implementation of the Open Inventor API. It provides -# data structures and algorithms for 3D visualization. -# -# This module defines the following variables -# -# :: -# -# COIN3D_FOUND - system has Coin3D - Open Inventor -# COIN3D_INCLUDE_DIRS - where the Inventor include directory can be found -# COIN3D_LIBRARIES - Link to this to use Coin3D +#[=======================================================================[.rst: +FindCoin3D +---------- + +Find Coin3D (Open Inventor) + +Coin3D is an implementation of the Open Inventor API. It provides +data structures and algorithms for 3D visualization. + +This module defines the following variables + +:: + + COIN3D_FOUND - system has Coin3D - Open Inventor + COIN3D_INCLUDE_DIRS - where the Inventor include directory can be found + COIN3D_LIBRARIES - Link to this to use Coin3D +#]=======================================================================] if (WIN32) if (CYGWIN) diff --git a/Modules/FindCups.cmake b/Modules/FindCups.cmake index 13d3b98..10ce229 100644 --- a/Modules/FindCups.cmake +++ b/Modules/FindCups.cmake @@ -1,22 +1,23 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindCups -# -------- -# -# Try to find the Cups printing system -# -# Once done this will define -# -# :: -# -# CUPS_FOUND - system has Cups -# CUPS_INCLUDE_DIR - the Cups include directory -# CUPS_LIBRARIES - Libraries needed to use Cups -# CUPS_VERSION_STRING - version of Cups found (since CMake 2.8.8) -# Set CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE to TRUE if you need a version which -# features this function (i.e. at least 1.1.19) +#[=======================================================================[.rst: +FindCups +-------- + +Try to find the Cups printing system + +Once done this will define + +:: + + CUPS_FOUND - system has Cups + CUPS_INCLUDE_DIR - the Cups include directory + CUPS_LIBRARIES - Libraries needed to use Cups + CUPS_VERSION_STRING - version of Cups found (since CMake 2.8.8) + Set CUPS_REQUIRE_IPP_DELETE_ATTRIBUTE to TRUE if you need a version which + features this function (i.e. at least 1.1.19) +#]=======================================================================] find_path(CUPS_INCLUDE_DIR cups/cups.h ) diff --git a/Modules/FindCurses.cmake b/Modules/FindCurses.cmake index 4f59d2c..c225847 100644 --- a/Modules/FindCurses.cmake +++ b/Modules/FindCurses.cmake @@ -1,46 +1,47 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindCurses -# ---------- -# -# Find the curses or ncurses include file and library. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following variables: -# -# ``CURSES_FOUND`` -# True if Curses is found. -# ``CURSES_INCLUDE_DIRS`` -# The include directories needed to use Curses. -# ``CURSES_LIBRARIES`` -# The libraries needed to use Curses. -# ``CURSES_HAVE_CURSES_H`` -# True if curses.h is available. -# ``CURSES_HAVE_NCURSES_H`` -# True if ncurses.h is available. -# ``CURSES_HAVE_NCURSES_NCURSES_H`` -# True if ``ncurses/ncurses.h`` is available. -# ``CURSES_HAVE_NCURSES_CURSES_H`` -# True if ``ncurses/curses.h`` is available. -# -# Set ``CURSES_NEED_NCURSES`` to ``TRUE`` before the -# ``find_package(Curses)`` call if NCurses functionality is required. -# Set ``CURSES_NEED_WIDE`` to ``TRUE`` before the -# ``find_package(Curses)`` call if unicode functionality is required. -# -# Backward Compatibility -# ^^^^^^^^^^^^^^^^^^^^^^ -# -# The following variable are provided for backward compatibility: -# -# ``CURSES_INCLUDE_DIR`` -# Path to Curses include. Use ``CURSES_INCLUDE_DIRS`` instead. -# ``CURSES_LIBRARY`` -# Path to Curses library. Use ``CURSES_LIBRARIES`` instead. +#[=======================================================================[.rst: +FindCurses +---------- + +Find the curses or ncurses include file and library. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +``CURSES_FOUND`` + True if Curses is found. +``CURSES_INCLUDE_DIRS`` + The include directories needed to use Curses. +``CURSES_LIBRARIES`` + The libraries needed to use Curses. +``CURSES_HAVE_CURSES_H`` + True if curses.h is available. +``CURSES_HAVE_NCURSES_H`` + True if ncurses.h is available. +``CURSES_HAVE_NCURSES_NCURSES_H`` + True if ``ncurses/ncurses.h`` is available. +``CURSES_HAVE_NCURSES_CURSES_H`` + True if ``ncurses/curses.h`` is available. + +Set ``CURSES_NEED_NCURSES`` to ``TRUE`` before the +``find_package(Curses)`` call if NCurses functionality is required. +Set ``CURSES_NEED_WIDE`` to ``TRUE`` before the +``find_package(Curses)`` call if unicode functionality is required. + +Backward Compatibility +^^^^^^^^^^^^^^^^^^^^^^ + +The following variable are provided for backward compatibility: + +``CURSES_INCLUDE_DIR`` + Path to Curses include. Use ``CURSES_INCLUDE_DIRS`` instead. +``CURSES_LIBRARY`` + Path to Curses library. Use ``CURSES_LIBRARIES`` instead. +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake) diff --git a/Modules/FindCxxTest.cmake b/Modules/FindCxxTest.cmake index 25454fd..4eec5fc 100644 --- a/Modules/FindCxxTest.cmake +++ b/Modules/FindCxxTest.cmake @@ -1,142 +1,143 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindCxxTest -# ----------- -# -# Find CxxTest -# -# Find the CxxTest suite and declare a helper macro for creating unit -# tests and integrating them with CTest. For more details on CxxTest -# see http://cxxtest.tigris.org -# -# INPUT Variables -# -# :: -# -# CXXTEST_USE_PYTHON [deprecated since 1.3] -# Only used in the case both Python & Perl -# are detected on the system to control -# which CxxTest code generator is used. -# Valid only for CxxTest version 3. -# -# -# -# :: -# -# NOTE: In older versions of this Find Module, -# this variable controlled if the Python test -# generator was used instead of the Perl one, -# regardless of which scripting language the -# user had installed. -# -# -# -# :: -# -# CXXTEST_TESTGEN_ARGS (since CMake 2.8.3) -# Specify a list of options to pass to the CxxTest code -# generator. If not defined, --error-printer is -# passed. -# -# -# -# OUTPUT Variables -# -# :: -# -# CXXTEST_FOUND -# True if the CxxTest framework was found -# CXXTEST_INCLUDE_DIRS -# Where to find the CxxTest include directory -# CXXTEST_PERL_TESTGEN_EXECUTABLE -# The perl-based test generator -# CXXTEST_PYTHON_TESTGEN_EXECUTABLE -# The python-based test generator -# CXXTEST_TESTGEN_EXECUTABLE (since CMake 2.8.3) -# The test generator that is actually used (chosen using user preferences -# and interpreters found in the system) -# CXXTEST_TESTGEN_INTERPRETER (since CMake 2.8.3) -# The full path to the Perl or Python executable on the system, on -# platforms where the script cannot be executed using its shebang line. -# -# -# -# MACROS for optional use by CMake users: -# -# :: -# -# CXXTEST_ADD_TEST(<test_name> <gen_source_file> <input_files_to_testgen...>) -# Creates a CxxTest runner and adds it to the CTest testing suite -# Parameters: -# test_name The name of the test -# gen_source_file The generated source filename to be -# generated by CxxTest -# input_files_to_testgen The list of header files containing the -# CxxTest::TestSuite's to be included in -# this runner -# -# -# -# :: -# -# #============== -# Example Usage: -# -# -# -# :: -# -# find_package(CxxTest) -# if(CXXTEST_FOUND) -# include_directories(${CXXTEST_INCLUDE_DIR}) -# enable_testing() -# -# -# -# :: -# -# CXXTEST_ADD_TEST(unittest_foo foo_test.cc -# ${CMAKE_CURRENT_SOURCE_DIR}/foo_test.h) -# target_link_libraries(unittest_foo foo) # as needed -# endif() -# -# -# -# :: -# -# This will (if CxxTest is found): -# 1. Invoke the testgen executable to autogenerate foo_test.cc in the -# binary tree from "foo_test.h" in the current source directory. -# 2. Create an executable and test called unittest_foo. -# -# -# -# :: -# -# #============= -# Example foo_test.h: -# -# -# -# :: -# -# #include <cxxtest/TestSuite.h> -# -# -# -# :: -# -# class MyTestSuite : public CxxTest::TestSuite -# { -# public: -# void testAddition( void ) -# { -# TS_ASSERT( 1 + 1 > 1 ); -# TS_ASSERT_EQUALS( 1 + 1, 2 ); -# } -# }; +#[=======================================================================[.rst: +FindCxxTest +----------- + +Find CxxTest + +Find the CxxTest suite and declare a helper macro for creating unit +tests and integrating them with CTest. For more details on CxxTest +see http://cxxtest.tigris.org + +INPUT Variables + +:: + + CXXTEST_USE_PYTHON [deprecated since 1.3] + Only used in the case both Python & Perl + are detected on the system to control + which CxxTest code generator is used. + Valid only for CxxTest version 3. + + + +:: + + NOTE: In older versions of this Find Module, + this variable controlled if the Python test + generator was used instead of the Perl one, + regardless of which scripting language the + user had installed. + + + +:: + + CXXTEST_TESTGEN_ARGS (since CMake 2.8.3) + Specify a list of options to pass to the CxxTest code + generator. If not defined, --error-printer is + passed. + + + +OUTPUT Variables + +:: + + CXXTEST_FOUND + True if the CxxTest framework was found + CXXTEST_INCLUDE_DIRS + Where to find the CxxTest include directory + CXXTEST_PERL_TESTGEN_EXECUTABLE + The perl-based test generator + CXXTEST_PYTHON_TESTGEN_EXECUTABLE + The python-based test generator + CXXTEST_TESTGEN_EXECUTABLE (since CMake 2.8.3) + The test generator that is actually used (chosen using user preferences + and interpreters found in the system) + CXXTEST_TESTGEN_INTERPRETER (since CMake 2.8.3) + The full path to the Perl or Python executable on the system, on + platforms where the script cannot be executed using its shebang line. + + + +MACROS for optional use by CMake users: + +:: + + CXXTEST_ADD_TEST(<test_name> <gen_source_file> <input_files_to_testgen...>) + Creates a CxxTest runner and adds it to the CTest testing suite + Parameters: + test_name The name of the test + gen_source_file The generated source filename to be + generated by CxxTest + input_files_to_testgen The list of header files containing the + CxxTest::TestSuite's to be included in + this runner + + + +:: + + #============== + Example Usage: + + + +:: + + find_package(CxxTest) + if(CXXTEST_FOUND) + include_directories(${CXXTEST_INCLUDE_DIR}) + enable_testing() + + + +:: + + CXXTEST_ADD_TEST(unittest_foo foo_test.cc + ${CMAKE_CURRENT_SOURCE_DIR}/foo_test.h) + target_link_libraries(unittest_foo foo) # as needed + endif() + + + +:: + + This will (if CxxTest is found): + 1. Invoke the testgen executable to autogenerate foo_test.cc in the + binary tree from "foo_test.h" in the current source directory. + 2. Create an executable and test called unittest_foo. + + + +:: + + #============= + Example foo_test.h: + + + +:: + + #include <cxxtest/TestSuite.h> + + + +:: + + class MyTestSuite : public CxxTest::TestSuite + { + public: + void testAddition( void ) + { + TS_ASSERT( 1 + 1 > 1 ); + TS_ASSERT_EQUALS( 1 + 1, 2 ); + } + }; +#]=======================================================================] # Version 1.4 (11/18/10) (CMake 2.8.4) # Issue 11384: Added support to the CXX_ADD_TEST macro so header diff --git a/Modules/FindCygwin.cmake b/Modules/FindCygwin.cmake index 092a3bd..8811623 100644 --- a/Modules/FindCygwin.cmake +++ b/Modules/FindCygwin.cmake @@ -1,11 +1,12 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindCygwin -# ---------- -# -# this module looks for Cygwin +#[=======================================================================[.rst: +FindCygwin +---------- + +this module looks for Cygwin +#]=======================================================================] if (WIN32) if(CYGWIN_INSTALL_PATH) diff --git a/Modules/FindDCMTK.cmake b/Modules/FindDCMTK.cmake index 39c1a5b..302c089 100644 --- a/Modules/FindDCMTK.cmake +++ b/Modules/FindDCMTK.cmake @@ -1,82 +1,83 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindDCMTK -# --------- -# -# Find DCMTK libraries and applications -# -# The module defines the following variables:: -# -# DCMTK_INCLUDE_DIRS - Directories to include to use DCMTK -# DCMTK_LIBRARIES - Files to link against to use DCMTK -# DCMTK_FOUND - If false, don't try to use DCMTK -# DCMTK_DIR - (optional) Source directory for DCMTK -# -# Compatibility -# ^^^^^^^^^^^^^ -# -# This module is able to find a version of DCMTK that does or does not export -# a *DCMTKConfig.cmake* file. It applies a two step process: -# -# * Step 1: Attempt to find DCMTK version providing a *DCMTKConfig.cmake* file. -# * Step 2: If step 1 failed, rely on *FindDCMTK.cmake* to set `DCMTK_*` variables details below. -# -# -# `Recent DCMTK -# <http://git.dcmtk.org/web?p=dcmtk.git;a=commit;h=662ae187c493c6b9a73dd5e3875372cebd0c11fe>`_ -# provides a *DCMTKConfig.cmake* :manual:`package configuration file -# <cmake-packages(7)>`. To exclusively use the package configuration file -# (recommended when possible), pass the `NO_MODULE` option to -# :command:`find_package`. For example, `find_package(DCMTK NO_MODULE)`. -# This requires official DCMTK snapshot *3.6.1_20140617* or newer. -# -# -# Until all clients update to the more recent DCMTK, build systems will need -# to support different versions of DCMTK. -# -# On any given system, the following combinations of DCMTK versions could be -# considered: -# -# +--------+---------------------+-----------------------+-------------------+ -# | | SYSTEM DCMTK | LOCAL DCMTK | Supported ? | -# +--------+---------------------+-----------------------+-------------------+ -# | Case A | NA | [ ] DCMTKConfig | YES | -# +--------+---------------------+-----------------------+-------------------+ -# | Case B | NA | [X] DCMTKConfig | YES | -# +--------+---------------------+-----------------------+-------------------+ -# | Case C | [ ] DCMTKConfig | NA | YES | -# +--------+---------------------+-----------------------+-------------------+ -# | Case D | [X] DCMTKConfig | NA | YES | -# +--------+---------------------+-----------------------+-------------------+ -# | Case E | [ ] DCMTKConfig | [ ] DCMTKConfig | YES (*) | -# +--------+---------------------+-----------------------+-------------------+ -# | Case F | [X] DCMTKConfig | [ ] DCMTKConfig | NO | -# +--------+---------------------+-----------------------+-------------------+ -# | Case G | [ ] DCMTKConfig | [X] DCMTKConfig | YES | -# +--------+---------------------+-----------------------+-------------------+ -# | Case H | [X] DCMTKConfig | [X] DCMTKConfig | YES | -# +--------+---------------------+-----------------------+-------------------+ -# -# (*) See Troubleshooting section. -# -# Legend: -# -# NA ...............: Means that no System or Local DCMTK is available -# -# [ ] DCMTKConfig ..: Means that the version of DCMTK does NOT export a DCMTKConfig.cmake file. -# -# [X] DCMTKConfig ..: Means that the version of DCMTK exports a DCMTKConfig.cmake file. -# -# -# Troubleshooting -# ^^^^^^^^^^^^^^^ -# -# What to do if my project finds a different version of DCMTK? -# -# Remove DCMTK entry from the CMake cache per :command:`find_package` -# documentation. +#[=======================================================================[.rst: +FindDCMTK +--------- + +Find DCMTK libraries and applications + +The module defines the following variables:: + + DCMTK_INCLUDE_DIRS - Directories to include to use DCMTK + DCMTK_LIBRARIES - Files to link against to use DCMTK + DCMTK_FOUND - If false, don't try to use DCMTK + DCMTK_DIR - (optional) Source directory for DCMTK + +Compatibility +^^^^^^^^^^^^^ + +This module is able to find a version of DCMTK that does or does not export +a *DCMTKConfig.cmake* file. It applies a two step process: + +* Step 1: Attempt to find DCMTK version providing a *DCMTKConfig.cmake* file. +* Step 2: If step 1 failed, rely on *FindDCMTK.cmake* to set `DCMTK_*` variables details below. + + +`Recent DCMTK +<http://git.dcmtk.org/web?p=dcmtk.git;a=commit;h=662ae187c493c6b9a73dd5e3875372cebd0c11fe>`_ +provides a *DCMTKConfig.cmake* :manual:`package configuration file +<cmake-packages(7)>`. To exclusively use the package configuration file +(recommended when possible), pass the `NO_MODULE` option to +:command:`find_package`. For example, `find_package(DCMTK NO_MODULE)`. +This requires official DCMTK snapshot *3.6.1_20140617* or newer. + + +Until all clients update to the more recent DCMTK, build systems will need +to support different versions of DCMTK. + +On any given system, the following combinations of DCMTK versions could be +considered: + ++--------+---------------------+-----------------------+-------------------+ +| | SYSTEM DCMTK | LOCAL DCMTK | Supported ? | ++--------+---------------------+-----------------------+-------------------+ +| Case A | NA | [ ] DCMTKConfig | YES | ++--------+---------------------+-----------------------+-------------------+ +| Case B | NA | [X] DCMTKConfig | YES | ++--------+---------------------+-----------------------+-------------------+ +| Case C | [ ] DCMTKConfig | NA | YES | ++--------+---------------------+-----------------------+-------------------+ +| Case D | [X] DCMTKConfig | NA | YES | ++--------+---------------------+-----------------------+-------------------+ +| Case E | [ ] DCMTKConfig | [ ] DCMTKConfig | YES (*) | ++--------+---------------------+-----------------------+-------------------+ +| Case F | [X] DCMTKConfig | [ ] DCMTKConfig | NO | ++--------+---------------------+-----------------------+-------------------+ +| Case G | [ ] DCMTKConfig | [X] DCMTKConfig | YES | ++--------+---------------------+-----------------------+-------------------+ +| Case H | [X] DCMTKConfig | [X] DCMTKConfig | YES | ++--------+---------------------+-----------------------+-------------------+ + + (*) See Troubleshooting section. + +Legend: + + NA ...............: Means that no System or Local DCMTK is available + + [ ] DCMTKConfig ..: Means that the version of DCMTK does NOT export a DCMTKConfig.cmake file. + + [X] DCMTKConfig ..: Means that the version of DCMTK exports a DCMTKConfig.cmake file. + + +Troubleshooting +^^^^^^^^^^^^^^^ + +What to do if my project finds a different version of DCMTK? + +Remove DCMTK entry from the CMake cache per :command:`find_package` +documentation. +#]=======================================================================] # # Written for VXL by Amitha Perera. diff --git a/Modules/FindDart.cmake b/Modules/FindDart.cmake index acd4ef6..0492578 100644 --- a/Modules/FindDart.cmake +++ b/Modules/FindDart.cmake @@ -1,14 +1,15 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindDart -# -------- -# -# Find DART -# -# This module looks for the dart testing software and sets DART_ROOT to -# point to where it found it. +#[=======================================================================[.rst: +FindDart +-------- + +Find DART + +This module looks for the dart testing software and sets DART_ROOT to +point to where it found it. +#]=======================================================================] find_path(DART_ROOT README.INSTALL HINTS diff --git a/Modules/FindDevIL.cmake b/Modules/FindDevIL.cmake index e904a30..9984943 100644 --- a/Modules/FindDevIL.cmake +++ b/Modules/FindDevIL.cmake @@ -1,35 +1,36 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindDevIL -# --------- -# -# -# -# This module locates the developer's image library. -# http://openil.sourceforge.net/ -# -# This module sets: -# -# :: -# -# IL_LIBRARIES - the name of the IL library. These include the full path to -# the core DevIL library. This one has to be linked into the -# application. -# ILU_LIBRARIES - the name of the ILU library. Again, the full path. This -# library is for filters and effects, not actual loading. It -# doesn't have to be linked if the functionality it provides -# is not used. -# ILUT_LIBRARIES - the name of the ILUT library. Full path. This part of the -# library interfaces with OpenGL. It is not strictly needed -# in applications. -# IL_INCLUDE_DIR - where to find the il.h, ilu.h and ilut.h files. -# DevIL_FOUND - this is set to TRUE if all the above variables were set. -# This will be set to false if ILU or ILUT are not found, -# even if they are not needed. In most systems, if one -# library is found all the others are as well. That's the -# way the DevIL developers release it. +#[=======================================================================[.rst: +FindDevIL +--------- + + + +This module locates the developer's image library. +http://openil.sourceforge.net/ + +This module sets: + +:: + + IL_LIBRARIES - the name of the IL library. These include the full path to + the core DevIL library. This one has to be linked into the + application. + ILU_LIBRARIES - the name of the ILU library. Again, the full path. This + library is for filters and effects, not actual loading. It + doesn't have to be linked if the functionality it provides + is not used. + ILUT_LIBRARIES - the name of the ILUT library. Full path. This part of the + library interfaces with OpenGL. It is not strictly needed + in applications. + IL_INCLUDE_DIR - where to find the il.h, ilu.h and ilut.h files. + DevIL_FOUND - this is set to TRUE if all the above variables were set. + This will be set to false if ILU or ILUT are not found, + even if they are not needed. In most systems, if one + library is found all the others are as well. That's the + way the DevIL developers release it. +#]=======================================================================] # TODO: Add version support. # Tested under Linux and Windows (MSVC) diff --git a/Modules/FindEXPAT.cmake b/Modules/FindEXPAT.cmake index 39086e4..58e0841 100644 --- a/Modules/FindEXPAT.cmake +++ b/Modules/FindEXPAT.cmake @@ -1,32 +1,33 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindEXPAT -# --------- -# -# Find the native Expat headers and library. -# -# Imported Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following :prop_tgt:`IMPORTED` targets: -# -# ``EXPAT::EXPAT`` -# The Expat ``expat`` library, if found. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module will set the following variables in your project: -# -# ``EXPAT_INCLUDE_DIRS`` -# where to find expat.h, etc. -# ``EXPAT_LIBRARIES`` -# the libraries to link against to use Expat. -# ``EXPAT_FOUND`` -# true if the Expat headers and libraries were found. -# +#[=======================================================================[.rst: +FindEXPAT +--------- + +Find the native Expat headers and library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``EXPAT::EXPAT`` + The Expat ``expat`` library, if found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``EXPAT_INCLUDE_DIRS`` + where to find expat.h, etc. +``EXPAT_LIBRARIES`` + the libraries to link against to use Expat. +``EXPAT_FOUND`` + true if the Expat headers and libraries were found. + +#]=======================================================================] find_package(PkgConfig QUIET) diff --git a/Modules/FindFLEX.cmake b/Modules/FindFLEX.cmake index 3945b78..edebe75 100644 --- a/Modules/FindFLEX.cmake +++ b/Modules/FindFLEX.cmake @@ -1,100 +1,101 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindFLEX -# -------- -# -# Find flex executable and provides a macro to generate custom build rules -# -# -# -# The module defines the following variables: -# -# :: -# -# FLEX_FOUND - true is flex executable is found -# FLEX_EXECUTABLE - the path to the flex executable -# FLEX_VERSION - the version of flex -# FLEX_LIBRARIES - The flex libraries -# FLEX_INCLUDE_DIRS - The path to the flex headers -# -# -# -# The minimum required version of flex can be specified using the -# standard syntax, e.g. find_package(FLEX 2.5.13) -# -# -# -# If flex is found on the system, the module provides the macro: -# -# :: -# -# FLEX_TARGET(Name FlexInput FlexOutput -# [COMPILE_FLAGS <string>] -# [DEFINES_FILE <string>] -# ) -# -# which creates a custom command to generate the <FlexOutput> file from -# the <FlexInput> file. If COMPILE_FLAGS option is specified, the next -# parameter is added to the flex command line. If flex is configured to -# output a header file, the DEFINES_FILE option may be used to specify its -# name. Name is an alias used to get details of this custom command. -# Indeed the macro defines the following variables: -# -# :: -# -# FLEX_${Name}_DEFINED - true is the macro ran successfully -# FLEX_${Name}_OUTPUTS - the source file generated by the custom rule, an -# alias for FlexOutput -# FLEX_${Name}_INPUT - the flex source file, an alias for ${FlexInput} -# FLEX_${Name}_OUTPUT_HEADER - the header flex output, if any. -# -# -# -# Flex scanners often use tokens defined by Bison: the code generated -# by Flex depends of the header generated by Bison. This module also -# defines a macro: -# -# :: -# -# ADD_FLEX_BISON_DEPENDENCY(FlexTarget BisonTarget) -# -# which adds the required dependency between a scanner and a parser -# where <FlexTarget> and <BisonTarget> are the first parameters of -# respectively FLEX_TARGET and BISON_TARGET macros. -# -# :: -# -# ==================================================================== -# Example: -# -# -# -# :: -# -# find_package(BISON) -# find_package(FLEX) -# -# -# -# :: -# -# BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp) -# FLEX_TARGET(MyScanner lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp) -# ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser) -# -# -# -# :: -# -# include_directories(${CMAKE_CURRENT_BINARY_DIR}) -# add_executable(Foo -# Foo.cc -# ${BISON_MyParser_OUTPUTS} -# ${FLEX_MyScanner_OUTPUTS} -# ) -# ==================================================================== +#[=======================================================================[.rst: +FindFLEX +-------- + +Find flex executable and provides a macro to generate custom build rules + + + +The module defines the following variables: + +:: + + FLEX_FOUND - true is flex executable is found + FLEX_EXECUTABLE - the path to the flex executable + FLEX_VERSION - the version of flex + FLEX_LIBRARIES - The flex libraries + FLEX_INCLUDE_DIRS - The path to the flex headers + + + +The minimum required version of flex can be specified using the +standard syntax, e.g. find_package(FLEX 2.5.13) + + + +If flex is found on the system, the module provides the macro: + +:: + + FLEX_TARGET(Name FlexInput FlexOutput + [COMPILE_FLAGS <string>] + [DEFINES_FILE <string>] + ) + +which creates a custom command to generate the <FlexOutput> file from +the <FlexInput> file. If COMPILE_FLAGS option is specified, the next +parameter is added to the flex command line. If flex is configured to +output a header file, the DEFINES_FILE option may be used to specify its +name. Name is an alias used to get details of this custom command. +Indeed the macro defines the following variables: + +:: + + FLEX_${Name}_DEFINED - true is the macro ran successfully + FLEX_${Name}_OUTPUTS - the source file generated by the custom rule, an + alias for FlexOutput + FLEX_${Name}_INPUT - the flex source file, an alias for ${FlexInput} + FLEX_${Name}_OUTPUT_HEADER - the header flex output, if any. + + + +Flex scanners often use tokens defined by Bison: the code generated +by Flex depends of the header generated by Bison. This module also +defines a macro: + +:: + + ADD_FLEX_BISON_DEPENDENCY(FlexTarget BisonTarget) + +which adds the required dependency between a scanner and a parser +where <FlexTarget> and <BisonTarget> are the first parameters of +respectively FLEX_TARGET and BISON_TARGET macros. + +:: + + ==================================================================== + Example: + + + +:: + + find_package(BISON) + find_package(FLEX) + + + +:: + + BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp) + FLEX_TARGET(MyScanner lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp) + ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser) + + + +:: + + include_directories(${CMAKE_CURRENT_BINARY_DIR}) + add_executable(Foo + Foo.cc + ${BISON_MyParser_OUTPUTS} + ${FLEX_MyScanner_OUTPUTS} + ) + ==================================================================== +#]=======================================================================] find_program(FLEX_EXECUTABLE NAMES flex win_flex DOC "path to the flex executable") mark_as_advanced(FLEX_EXECUTABLE) diff --git a/Modules/FindFLTK.cmake b/Modules/FindFLTK.cmake index 82c63ef..89122c0 100644 --- a/Modules/FindFLTK.cmake +++ b/Modules/FindFLTK.cmake @@ -1,82 +1,83 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindFLTK -# -------- -# -# Find the FLTK library -# -# Input Variables -# ^^^^^^^^^^^^^^^ -# -# By default this module will search for all of the FLTK components and -# add them to the FLTK_LIBRARIES variable. You can limit the components -# which get placed in FLTK_LIBRARIES by defining one or more of the -# following three options: -# -# ``FLTK_SKIP_OPENGL`` -# Set to true to disable searching for the FLTK GL library -# -# ``FLTK_SKIP_FORMS`` -# Set to true to disable searching for the FLTK Forms library -# -# ``FLTK_SKIP_IMAGES`` -# Set to true to disable searching for the FLTK Images library -# -# FLTK is composed also by a binary tool. You can set the following option: -# -# ``FLTK_SKIP_FLUID`` -# Set to true to not look for the FLUID binary -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# The following variables will be defined: -# -# ``FLTK_FOUND`` -# True if all components not skipped were found -# -# ``FLTK_INCLUDE_DIR`` -# Path to the include directory for FLTK header files -# -# ``FLTK_LIBRARIES`` -# List of the FLTK libraries found -# -# ``FLTK_FLUID_EXECUTABLE`` -# Path to the FLUID binary tool -# -# ``FLTK_WRAP_UI`` -# True if FLUID is found, used to enable the FLTK_WRAP_UI command -# -# Cache Variables -# ^^^^^^^^^^^^^^^ -# -# The following cache variables are also available to set or use: -# -# ``FLTK_BASE_LIBRARY_RELEASE`` -# The FLTK base library (optimized) -# -# ``FLTK_BASE_LIBRARY_DEBUG`` -# The FLTK base library (debug) -# -# ``FLTK_GL_LIBRARY_RELEASE`` -# The FLTK GL library (optimized) -# -# ``FLTK_GL_LIBRARY_DEBUG`` -# The FLTK GL library (debug) -# -# ``FLTK_FORMS_LIBRARY_RELEASE`` -# The FLTK Forms library (optimized) -# -# ``FLTK_FORMS_LIBRARY_DEBUG`` -# The FLTK Forms library (debug) -# -# ``FLTK_IMAGES_LIBRARY_RELEASE`` -# The FLTK Images protobuf library (optimized) -# -# ``FLTK_IMAGES_LIBRARY_DEBUG`` -# The FLTK Images library (debug) +#[=======================================================================[.rst: +FindFLTK +-------- + +Find the FLTK library + +Input Variables +^^^^^^^^^^^^^^^ + +By default this module will search for all of the FLTK components and +add them to the FLTK_LIBRARIES variable. You can limit the components +which get placed in FLTK_LIBRARIES by defining one or more of the +following three options: + +``FLTK_SKIP_OPENGL`` + Set to true to disable searching for the FLTK GL library + +``FLTK_SKIP_FORMS`` + Set to true to disable searching for the FLTK Forms library + +``FLTK_SKIP_IMAGES`` + Set to true to disable searching for the FLTK Images library + +FLTK is composed also by a binary tool. You can set the following option: + +``FLTK_SKIP_FLUID`` + Set to true to not look for the FLUID binary + +Result Variables +^^^^^^^^^^^^^^^^ + +The following variables will be defined: + +``FLTK_FOUND`` + True if all components not skipped were found + +``FLTK_INCLUDE_DIR`` + Path to the include directory for FLTK header files + +``FLTK_LIBRARIES`` + List of the FLTK libraries found + +``FLTK_FLUID_EXECUTABLE`` + Path to the FLUID binary tool + +``FLTK_WRAP_UI`` + True if FLUID is found, used to enable the FLTK_WRAP_UI command + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables are also available to set or use: + +``FLTK_BASE_LIBRARY_RELEASE`` + The FLTK base library (optimized) + +``FLTK_BASE_LIBRARY_DEBUG`` + The FLTK base library (debug) + +``FLTK_GL_LIBRARY_RELEASE`` + The FLTK GL library (optimized) + +``FLTK_GL_LIBRARY_DEBUG`` + The FLTK GL library (debug) + +``FLTK_FORMS_LIBRARY_RELEASE`` + The FLTK Forms library (optimized) + +``FLTK_FORMS_LIBRARY_DEBUG`` + The FLTK Forms library (debug) + +``FLTK_IMAGES_LIBRARY_RELEASE`` + The FLTK Images protobuf library (optimized) + +``FLTK_IMAGES_LIBRARY_DEBUG`` + The FLTK Images library (debug) +#]=======================================================================] if(NOT FLTK_SKIP_OPENGL) find_package(OpenGL) diff --git a/Modules/FindFLTK2.cmake b/Modules/FindFLTK2.cmake index 365a82a..161d15c 100644 --- a/Modules/FindFLTK2.cmake +++ b/Modules/FindFLTK2.cmake @@ -1,29 +1,30 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindFLTK2 -# --------- -# -# Find the native FLTK2 includes and library -# -# The following settings are defined -# -# :: -# -# FLTK2_FLUID_EXECUTABLE, where to find the Fluid tool -# FLTK2_WRAP_UI, This enables the FLTK2_WRAP_UI command -# FLTK2_INCLUDE_DIR, where to find include files -# FLTK2_LIBRARIES, list of fltk2 libraries -# FLTK2_FOUND, Don't use FLTK2 if false. -# -# The following settings should not be used in general. -# -# :: -# -# FLTK2_BASE_LIBRARY = the full path to fltk2.lib -# FLTK2_GL_LIBRARY = the full path to fltk2_gl.lib -# FLTK2_IMAGES_LIBRARY = the full path to fltk2_images.lib +#[=======================================================================[.rst: +FindFLTK2 +--------- + +Find the native FLTK2 includes and library + +The following settings are defined + +:: + + FLTK2_FLUID_EXECUTABLE, where to find the Fluid tool + FLTK2_WRAP_UI, This enables the FLTK2_WRAP_UI command + FLTK2_INCLUDE_DIR, where to find include files + FLTK2_LIBRARIES, list of fltk2 libraries + FLTK2_FOUND, Don't use FLTK2 if false. + +The following settings should not be used in general. + +:: + + FLTK2_BASE_LIBRARY = the full path to fltk2.lib + FLTK2_GL_LIBRARY = the full path to fltk2_gl.lib + FLTK2_IMAGES_LIBRARY = the full path to fltk2_images.lib +#]=======================================================================] set (FLTK2_DIR $ENV{FLTK2_DIR} ) diff --git a/Modules/FindFontconfig.cmake b/Modules/FindFontconfig.cmake new file mode 100644 index 0000000..96e1e76 --- /dev/null +++ b/Modules/FindFontconfig.cmake @@ -0,0 +1,101 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindFontconfig +-------------- + +Find Fontconfig headers and library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +``Fontconfig::Fontconfig`` + The Fontconfig library, if found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables in your project: + +``FONTCONFIG_FOUND`` + true if (the requested version of) Fontconfig is available. +``FONTCONFIG_VERSION`` + the version of Fontconfig. +``FONTCONFIG_LIBRARIES`` + the libraries to link against to use Fontconfig. +``FONTCONFIG_INCLUDE_DIRS`` + where to find the Fontconfig headers. +``FONTCONFIG_COMPILE_OPTIONS`` + this should be passed to target_compile_options(), if the + target is not used for linking + +#]=======================================================================] + + +# use pkg-config to get the directories and then use these values +# in the FIND_PATH() and FIND_LIBRARY() calls +find_package(PkgConfig QUIET) +pkg_check_modules(PKG_FONTCONFIG QUIET fontconfig) +set(FONTCONFIG_COMPILE_OPTIONS ${PKG_FONTCONFIG_CFLAGS_OTHER}) +set(FONTCONFIG_VERSION ${PKG_FONTCONFIG_VERSION}) + +find_path( FONTCONFIG_INCLUDE_DIR + NAMES + fontconfig/fontconfig.h + HINTS + ${PKG_FONTCONFIG_INCLUDE_DIRS} + /usr/X11/include +) + +find_library( FONTCONFIG_LIBRARY + NAMES + fontconfig + PATHS + ${PKG_FONTCONFIG_LIBRARY_DIRS} +) + +if (FONTCONFIG_INCLUDE_DIR AND NOT FONTCONFIG_VERSION) + file(STRINGS ${FONTCONFIG_INCLUDE_DIR}/fontconfig/fontconfig.h _contents REGEX "^#define[ \t]+FC_[A-Z]+[ \t]+[0-9]+$") + unset(FONTCONFIG_VERSION) + foreach(VPART MAJOR MINOR REVISION) + foreach(VLINE ${_contents}) + if(VLINE MATCHES "^#define[\t ]+FC_${VPART}[\t ]+([0-9]+)$") + set(FONTCONFIG_VERSION_PART "${CMAKE_MATCH_1}") + if(FONTCONFIG_VERSION) + string(APPEND FONTCONFIG_VERSION ".${FONTCONFIG_VERSION_PART}") + else() + set(FONTCONFIG_VERSION "${FONTCONFIG_VERSION_PART}") + endif() + endif() + endforeach() + endforeach() +endif () + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Fontconfig + FOUND_VAR + FONTCONFIG_FOUND + REQUIRED_VARS + FONTCONFIG_LIBRARY + FONTCONFIG_INCLUDE_DIR + VERSION_VAR + FONTCONFIG_VERSION +) + + +if(FONTCONFIG_FOUND AND NOT TARGET Fontconfig::Fontconfig) + add_library(Fontconfig::Fontconfig UNKNOWN IMPORTED) + set_target_properties(Fontconfig::Fontconfig PROPERTIES + IMPORTED_LOCATION "${FONTCONFIG_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${FONTCONFIG_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${FONTCONFIG_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(FONTCONFIG_LIBRARY FONTCONFIG_INCLUDE_DIR) + +if(FONTCONFIG_FOUND) + set(FONTCONFIG_LIBRARIES ${FONTCONFIG_LIBRARY}) + set(FONTCONFIG_INCLUDE_DIRS ${FONTCONFIG_INCLUDE_DIR}) +endif() diff --git a/Modules/FindFreetype.cmake b/Modules/FindFreetype.cmake index 61643be..3e6a177 100644 --- a/Modules/FindFreetype.cmake +++ b/Modules/FindFreetype.cmake @@ -1,45 +1,46 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindFreetype -# ------------ -# -# Find the FreeType font renderer includes and library. -# -# Imported Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following :prop_tgt:`IMPORTED` target: -# -# ``Freetype::Freetype`` -# The Freetype ``freetype`` library, if found -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module will set the following variables in your project: -# -# ``FREETYPE_FOUND`` -# true if the Freetype headers and libraries were found -# ``FREETYPE_INCLUDE_DIRS`` -# directories containing the Freetype headers. This is the -# concatenation of the variables: -# -# ``FREETYPE_INCLUDE_DIR_ft2build`` -# directory holding the main Freetype API configuration header -# ``FREETYPE_INCLUDE_DIR_freetype2`` -# directory holding Freetype public headers -# ``FREETYPE_LIBRARIES`` -# the library to link against -# ``FREETYPE_VERSION_STRING`` -# the version of freetype found (since CMake 2.8.8) -# -# Hints -# ^^^^^ -# -# The user may set the environment variable ``FREETYPE_DIR`` to the root -# directory of a Freetype installation. +#[=======================================================================[.rst: +FindFreetype +------------ + +Find the FreeType font renderer includes and library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` target: + +``Freetype::Freetype`` + The Freetype ``freetype`` library, if found + +Result Variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``FREETYPE_FOUND`` + true if the Freetype headers and libraries were found +``FREETYPE_INCLUDE_DIRS`` + directories containing the Freetype headers. This is the + concatenation of the variables: + + ``FREETYPE_INCLUDE_DIR_ft2build`` + directory holding the main Freetype API configuration header + ``FREETYPE_INCLUDE_DIR_freetype2`` + directory holding Freetype public headers +``FREETYPE_LIBRARIES`` + the library to link against +``FREETYPE_VERSION_STRING`` + the version of freetype found (since CMake 2.8.8) + +Hints +^^^^^ + +The user may set the environment variable ``FREETYPE_DIR`` to the root +directory of a Freetype installation. +#]=======================================================================] # Created by Eric Wing. # Modifications by Alexander Neundorf. diff --git a/Modules/FindGCCXML.cmake b/Modules/FindGCCXML.cmake index 1f8d738..e6c7f24 100644 --- a/Modules/FindGCCXML.cmake +++ b/Modules/FindGCCXML.cmake @@ -1,19 +1,20 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGCCXML -# ---------- -# -# Find the GCC-XML front-end executable. -# -# -# -# This module will define the following variables: -# -# :: -# -# GCCXML - the GCC-XML front-end executable. +#[=======================================================================[.rst: +FindGCCXML +---------- + +Find the GCC-XML front-end executable. + + + +This module will define the following variables: + +:: + + GCCXML - the GCC-XML front-end executable. +#]=======================================================================] find_program(GCCXML NAMES gccxml diff --git a/Modules/FindGDAL.cmake b/Modules/FindGDAL.cmake index ff2976e..030553f 100644 --- a/Modules/FindGDAL.cmake +++ b/Modules/FindGDAL.cmake @@ -1,29 +1,30 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGDAL -# -------- -# -# -# -# Locate gdal -# -# This module accepts the following environment variables: -# -# :: -# -# GDAL_DIR or GDAL_ROOT - Specify the location of GDAL -# -# -# -# This module defines the following CMake variables: -# -# :: -# -# GDAL_FOUND - True if libgdal is found -# GDAL_LIBRARY - A variable pointing to the GDAL library -# GDAL_INCLUDE_DIR - Where to find the headers +#[=======================================================================[.rst: +FindGDAL +-------- + + + +Locate gdal + +This module accepts the following environment variables: + +:: + + GDAL_DIR or GDAL_ROOT - Specify the location of GDAL + + + +This module defines the following CMake variables: + +:: + + GDAL_FOUND - True if libgdal is found + GDAL_LIBRARY - A variable pointing to the GDAL library + GDAL_INCLUDE_DIR - Where to find the headers +#]=======================================================================] # # $GDALDIR is an environment variable that would diff --git a/Modules/FindGIF.cmake b/Modules/FindGIF.cmake index efc3973..9a995af 100644 --- a/Modules/FindGIF.cmake +++ b/Modules/FindGIF.cmake @@ -1,28 +1,29 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGIF -# ------- -# -# This finds the GIF library (giflib) -# -# The module defines the following variables: -# -# ``GIF_FOUND`` -# True if giflib was found -# ``GIF_LIBRARIES`` -# Libraries to link to in order to use giflib -# ``GIF_INCLUDE_DIR`` -# where to find the headers -# ``GIF_VERSION`` -# 3, 4 or a full version string (eg 5.1.4) for versions >= 4.1.6 -# -# The minimum required version of giflib can be specified using the -# standard syntax, e.g. find_package(GIF 4) -# -# $GIF_DIR is an environment variable that would correspond to the -# ./configure --prefix=$GIF_DIR +#[=======================================================================[.rst: +FindGIF +------- + +This finds the GIF library (giflib) + +The module defines the following variables: + +``GIF_FOUND`` + True if giflib was found +``GIF_LIBRARIES`` + Libraries to link to in order to use giflib +``GIF_INCLUDE_DIR`` + where to find the headers +``GIF_VERSION`` + 3, 4 or a full version string (eg 5.1.4) for versions >= 4.1.6 + +The minimum required version of giflib can be specified using the +standard syntax, e.g. find_package(GIF 4) + +$GIF_DIR is an environment variable that would correspond to the +./configure --prefix=$GIF_DIR +#]=======================================================================] # Created by Eric Wing. # Modifications by Alexander Neundorf, Ben Campbell diff --git a/Modules/FindGLEW.cmake b/Modules/FindGLEW.cmake index 11e8724..ad8a810 100644 --- a/Modules/FindGLEW.cmake +++ b/Modules/FindGLEW.cmake @@ -1,28 +1,29 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGLEW -# -------- -# -# Find the OpenGL Extension Wrangler Library (GLEW) -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the :prop_tgt:`IMPORTED` target ``GLEW::GLEW``, -# if GLEW has been found. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following variables: -# -# :: -# -# GLEW_INCLUDE_DIRS - include directories for GLEW -# GLEW_LIBRARIES - libraries to link against GLEW -# GLEW_FOUND - true if GLEW has been found and can be used +#[=======================================================================[.rst: +FindGLEW +-------- + +Find the OpenGL Extension Wrangler Library (GLEW) + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines the :prop_tgt:`IMPORTED` target ``GLEW::GLEW``, +if GLEW has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +:: + + GLEW_INCLUDE_DIRS - include directories for GLEW + GLEW_LIBRARIES - libraries to link against GLEW + GLEW_FOUND - true if GLEW has been found and can be used +#]=======================================================================] find_path(GLEW_INCLUDE_DIR GL/glew.h) diff --git a/Modules/FindGLUT.cmake b/Modules/FindGLUT.cmake index 88d4b29..d42db53 100644 --- a/Modules/FindGLUT.cmake +++ b/Modules/FindGLUT.cmake @@ -1,53 +1,64 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGLUT -# -------- -# -# try to find glut library and include files. -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the :prop_tgt:`IMPORTED` targets: -# -# ``GLUT::GLUT`` -# Defined if the system has GLUT. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module sets the following variables: -# -# :: -# -# GLUT_INCLUDE_DIR, where to find GL/glut.h, etc. -# GLUT_LIBRARIES, the libraries to link against -# GLUT_FOUND, If false, do not try to use GLUT. -# -# Also defined, but not for general use are: -# -# :: -# -# GLUT_glut_LIBRARY = the full path to the glut library. -# GLUT_Xmu_LIBRARY = the full path to the Xmu library. -# GLUT_Xi_LIBRARY = the full path to the Xi Library. +#[=======================================================================[.rst: +FindGLUT +-------- + +try to find glut library and include files. + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines the :prop_tgt:`IMPORTED` targets: + +``GLUT::GLUT`` + Defined if the system has GLUT. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +:: + + GLUT_INCLUDE_DIR, where to find GL/glut.h, etc. + GLUT_LIBRARIES, the libraries to link against + GLUT_FOUND, If false, do not try to use GLUT. + +Also defined, but not for general use are: + +:: + + GLUT_glut_LIBRARY = the full path to the glut library. + GLUT_Xmu_LIBRARY = the full path to the Xmu library. + GLUT_Xi_LIBRARY = the full path to the Xi Library. +#]=======================================================================] + +include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) if (WIN32) find_path( GLUT_INCLUDE_DIR NAMES GL/glut.h PATHS ${GLUT_ROOT_PATH}/include ) - find_library( GLUT_glut_LIBRARY NAMES glut glut32 freeglut + find_library( GLUT_glut_LIBRARY_RELEASE NAMES glut glut32 freeglut PATHS ${OPENGL_LIBRARY_DIR} ${GLUT_ROOT_PATH}/Release ) + find_library( GLUT_glut_LIBRARY_DEBUG NAMES freeglutd + PATHS + ${OPENGL_LIBRARY_DIR} + ${GLUT_ROOT_PATH}/Debug + ) + mark_as_advanced(GLUT_glut_LIBRARY_RELEASE GLUT_glut_LIBRARY_DEBUG) + select_library_configurations(GLUT_glut) else () if (APPLE) find_path(GLUT_INCLUDE_DIR glut.h ${OPENGL_LIBRARY_DIR}) find_library(GLUT_glut_LIBRARY GLUT DOC "GLUT library for OSX") find_library(GLUT_cocoa_LIBRARY Cocoa DOC "Cocoa framework for OSX") + mark_as_advanced(GLUT_glut_LIBRARY GLUT_cocoa_LIBRARY) if(GLUT_cocoa_LIBRARY AND NOT TARGET GLUT::Cocoa) add_library(GLUT::Cocoa UNKNOWN IMPORTED) @@ -72,10 +83,12 @@ else () find_library( GLUT_Xi_LIBRARY Xi /usr/openwin/lib ) + mark_as_advanced(GLUT_Xi_LIBRARY) find_library( GLUT_Xmu_LIBRARY Xmu /usr/openwin/lib ) + mark_as_advanced(GLUT_Xmu_LIBRARY) if(GLUT_Xi_LIBRARY AND NOT TARGET GLUT::Xi) add_library(GLUT::Xi UNKNOWN IMPORTED) @@ -104,6 +117,7 @@ else () /usr/openwin/lib ${_GLUT_glut_LIB_DIR} ) + mark_as_advanced(GLUT_glut_LIBRARY) unset(_GLUT_INC_DIR) unset(_GLUT_glut_LIB_DIR) @@ -135,8 +149,24 @@ if (GLUT_FOUND) set_target_properties(GLUT::GLUT PROPERTIES IMPORTED_LOCATION "${GLUT_glut_LIBRARY}/${CMAKE_MATCH_1}") else() - set_target_properties(GLUT::GLUT PROPERTIES - IMPORTED_LOCATION "${GLUT_glut_LIBRARY}") + if(GLUT_glut_LIBRARY_RELEASE) + set_property(TARGET GLUT::GLUT APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(GLUT::GLUT PROPERTIES + IMPORTED_LOCATION_RELEASE "${GLUT_glut_LIBRARY_RELEASE}") + endif() + + if(GLUT_glut_LIBRARY_DEBUG) + set_property(TARGET GLUT::GLUT APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(GLUT::GLUT PROPERTIES + IMPORTED_LOCATION_DEBUG "${GLUT_glut_LIBRARY_DEBUG}") + endif() + + if(NOT GLUT_glut_LIBRARY_RELEASE AND NOT GLUT_glut_LIBRARY_DEBUG) + set_property(TARGET GLUT::GLUT APPEND PROPERTY + IMPORTED_LOCATION "${GLUT_glut_LIBRARY}") + endif() endif() if(TARGET GLUT::Xmu) @@ -160,9 +190,4 @@ if (GLUT_FOUND) set (GLUT_INCLUDE_PATH ${GLUT_INCLUDE_DIR}) endif() -mark_as_advanced( - GLUT_INCLUDE_DIR - GLUT_glut_LIBRARY - GLUT_Xmu_LIBRARY - GLUT_Xi_LIBRARY - ) +mark_as_advanced(GLUT_INCLUDE_DIR) diff --git a/Modules/FindGSL.cmake b/Modules/FindGSL.cmake index 8d10b6c..db05121 100644 --- a/Modules/FindGSL.cmake +++ b/Modules/FindGSL.cmake @@ -1,60 +1,61 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGSL -# -------- -# -# Find the native GSL includes and libraries. -# -# The GNU Scientific Library (GSL) is a numerical library for C and C++ -# programmers. It is free software under the GNU General Public -# License. -# -# Imported Targets -# ^^^^^^^^^^^^^^^^ -# -# If GSL is found, this module defines the following :prop_tgt:`IMPORTED` -# targets:: -# -# GSL::gsl - The main GSL library. -# GSL::gslcblas - The CBLAS support library used by GSL. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module will set the following variables in your project:: -# -# GSL_FOUND - True if GSL found on the local system -# GSL_INCLUDE_DIRS - Location of GSL header files. -# GSL_LIBRARIES - The GSL libraries. -# GSL_VERSION - The version of the discovered GSL install. -# -# Hints -# ^^^^^ -# -# Set ``GSL_ROOT_DIR`` to a directory that contains a GSL installation. -# -# This script expects to find libraries at ``$GSL_ROOT_DIR/lib`` and the GSL -# headers at ``$GSL_ROOT_DIR/include/gsl``. The library directory may -# optionally provide Release and Debug folders. If available, the libraries -# named ``gsld``, ``gslblasd`` or ``cblasd`` are recognized as debug libraries. -# For Unix-like systems, this script will use ``$GSL_ROOT_DIR/bin/gsl-config`` -# (if found) to aid in the discovery of GSL. -# -# Cache Variables -# ^^^^^^^^^^^^^^^ -# -# This module may set the following variables depending on platform and type -# of GSL installation discovered. These variables may optionally be set to -# help this module find the correct files:: -# -# GSL_CBLAS_LIBRARY - Location of the GSL CBLAS library. -# GSL_CBLAS_LIBRARY_DEBUG - Location of the debug GSL CBLAS library (if any). -# GSL_CONFIG_EXECUTABLE - Location of the ``gsl-config`` script (if any). -# GSL_LIBRARY - Location of the GSL library. -# GSL_LIBRARY_DEBUG - Location of the debug GSL library (if any). -# +#[=======================================================================[.rst: +FindGSL +-------- + +Find the native GSL includes and libraries. + +The GNU Scientific Library (GSL) is a numerical library for C and C++ +programmers. It is free software under the GNU General Public +License. + +Imported Targets +^^^^^^^^^^^^^^^^ + +If GSL is found, this module defines the following :prop_tgt:`IMPORTED` +targets:: + + GSL::gsl - The main GSL library. + GSL::gslcblas - The CBLAS support library used by GSL. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project:: + + GSL_FOUND - True if GSL found on the local system + GSL_INCLUDE_DIRS - Location of GSL header files. + GSL_LIBRARIES - The GSL libraries. + GSL_VERSION - The version of the discovered GSL install. + +Hints +^^^^^ + +Set ``GSL_ROOT_DIR`` to a directory that contains a GSL installation. + +This script expects to find libraries at ``$GSL_ROOT_DIR/lib`` and the GSL +headers at ``$GSL_ROOT_DIR/include/gsl``. The library directory may +optionally provide Release and Debug folders. If available, the libraries +named ``gsld``, ``gslblasd`` or ``cblasd`` are recognized as debug libraries. +For Unix-like systems, this script will use ``$GSL_ROOT_DIR/bin/gsl-config`` +(if found) to aid in the discovery of GSL. + +Cache Variables +^^^^^^^^^^^^^^^ + +This module may set the following variables depending on platform and type +of GSL installation discovered. These variables may optionally be set to +help this module find the correct files:: + + GSL_CBLAS_LIBRARY - Location of the GSL CBLAS library. + GSL_CBLAS_LIBRARY_DEBUG - Location of the debug GSL CBLAS library (if any). + GSL_CONFIG_EXECUTABLE - Location of the ``gsl-config`` script (if any). + GSL_LIBRARY - Location of the GSL library. + GSL_LIBRARY_DEBUG - Location of the debug GSL library (if any). + +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) diff --git a/Modules/FindGTK.cmake b/Modules/FindGTK.cmake index 89fb54b..8cc6c97 100644 --- a/Modules/FindGTK.cmake +++ b/Modules/FindGTK.cmake @@ -1,18 +1,19 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGTK -# ------- -# -# try to find GTK (and glib) and GTKGLArea -# -# :: -# -# GTK_INCLUDE_DIR - Directories to include to use GTK -# GTK_LIBRARIES - Files to link against to use GTK -# GTK_FOUND - GTK was found -# GTK_GL_FOUND - GTK's GL features were found +#[=======================================================================[.rst: +FindGTK +------- + +try to find GTK (and glib) and GTKGLArea + +:: + + GTK_INCLUDE_DIR - Directories to include to use GTK + GTK_LIBRARIES - Files to link against to use GTK + GTK_FOUND - GTK was found + GTK_GL_FOUND - GTK's GL features were found +#]=======================================================================] # don't even bother under WIN32 if(UNIX) diff --git a/Modules/FindGTK2.cmake b/Modules/FindGTK2.cmake index 15d1230..6c1897c 100644 --- a/Modules/FindGTK2.cmake +++ b/Modules/FindGTK2.cmake @@ -1,102 +1,103 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGTK2 -# -------- -# -# FindGTK2.cmake -# -# This module can find the GTK2 widget libraries and several of its -# other optional components like gtkmm, glade, and glademm. -# -# NOTE: If you intend to use version checking, CMake 2.6.2 or later is -# -# :: -# -# required. -# -# -# -# Specify one or more of the following components as you call this find -# module. See example below. -# -# :: -# -# gtk -# gtkmm -# glade -# glademm -# -# -# -# The following variables will be defined for your use -# -# :: -# -# GTK2_FOUND - Were all of your specified components found? -# GTK2_INCLUDE_DIRS - All include directories -# GTK2_LIBRARIES - All libraries -# GTK2_TARGETS - All imported targets -# GTK2_DEFINITIONS - Additional compiler flags -# -# -# -# :: -# -# GTK2_VERSION - The version of GTK2 found (x.y.z) -# GTK2_MAJOR_VERSION - The major version of GTK2 -# GTK2_MINOR_VERSION - The minor version of GTK2 -# GTK2_PATCH_VERSION - The patch version of GTK2 -# -# -# -# Optional variables you can define prior to calling this module: -# -# :: -# -# GTK2_DEBUG - Enables verbose debugging of the module -# GTK2_ADDITIONAL_SUFFIXES - Allows defining additional directories to -# search for include files -# -# -# -# ================= Example Usage: -# -# :: -# -# Call find_package() once, here are some examples to pick from: -# -# -# -# :: -# -# Require GTK 2.6 or later -# find_package(GTK2 2.6 REQUIRED gtk) -# -# -# -# :: -# -# Require GTK 2.10 or later and Glade -# find_package(GTK2 2.10 REQUIRED gtk glade) -# -# -# -# :: -# -# Search for GTK/GTKMM 2.8 or later -# find_package(GTK2 2.8 COMPONENTS gtk gtkmm) -# -# -# -# :: -# -# if(GTK2_FOUND) -# include_directories(${GTK2_INCLUDE_DIRS}) -# add_executable(mygui mygui.cc) -# target_link_libraries(mygui ${GTK2_LIBRARIES}) -# endif() +#[=======================================================================[.rst: +FindGTK2 +-------- + +FindGTK2.cmake + +This module can find the GTK2 widget libraries and several of its +other optional components like gtkmm, glade, and glademm. + +NOTE: If you intend to use version checking, CMake 2.6.2 or later is + +:: + + required. + + + +Specify one or more of the following components as you call this find +module. See example below. + +:: + + gtk + gtkmm + glade + glademm + + + +The following variables will be defined for your use + +:: + + GTK2_FOUND - Were all of your specified components found? + GTK2_INCLUDE_DIRS - All include directories + GTK2_LIBRARIES - All libraries + GTK2_TARGETS - All imported targets + GTK2_DEFINITIONS - Additional compiler flags + + + +:: + + GTK2_VERSION - The version of GTK2 found (x.y.z) + GTK2_MAJOR_VERSION - The major version of GTK2 + GTK2_MINOR_VERSION - The minor version of GTK2 + GTK2_PATCH_VERSION - The patch version of GTK2 + + + +Optional variables you can define prior to calling this module: + +:: + + GTK2_DEBUG - Enables verbose debugging of the module + GTK2_ADDITIONAL_SUFFIXES - Allows defining additional directories to + search for include files + + + +================= Example Usage: + +:: + + Call find_package() once, here are some examples to pick from: + + + +:: + + Require GTK 2.6 or later + find_package(GTK2 2.6 REQUIRED gtk) + + + +:: + + Require GTK 2.10 or later and Glade + find_package(GTK2 2.10 REQUIRED gtk glade) + + + +:: + + Search for GTK/GTKMM 2.8 or later + find_package(GTK2 2.8 COMPONENTS gtk gtkmm) + + + +:: + + if(GTK2_FOUND) + include_directories(${GTK2_INCLUDE_DIRS}) + add_executable(mygui mygui.cc) + target_link_libraries(mygui ${GTK2_LIBRARIES}) + endif() +#]=======================================================================] # Version 1.6 (CMake 3.0) # * Create targets for each library diff --git a/Modules/FindGTest.cmake b/Modules/FindGTest.cmake index b0579d9..b0175fe 100644 --- a/Modules/FindGTest.cmake +++ b/Modules/FindGTest.cmake @@ -1,77 +1,78 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGTest -# --------- -# -# Locate the Google C++ Testing Framework. -# -# Imported targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following :prop_tgt:`IMPORTED` targets: -# -# ``GTest::GTest`` -# The Google Test ``gtest`` library, if found; adds Thread::Thread -# automatically -# ``GTest::Main`` -# The Google Test ``gtest_main`` library, if found -# -# -# Result variables -# ^^^^^^^^^^^^^^^^ -# -# This module will set the following variables in your project: -# -# ``GTEST_FOUND`` -# Found the Google Testing framework -# ``GTEST_INCLUDE_DIRS`` -# the directory containing the Google Test headers -# -# The library variables below are set as normal variables. These -# contain debug/optimized keywords when a debugging library is found. -# -# ``GTEST_LIBRARIES`` -# The Google Test ``gtest`` library; note it also requires linking -# with an appropriate thread library -# ``GTEST_MAIN_LIBRARIES`` -# The Google Test ``gtest_main`` library -# ``GTEST_BOTH_LIBRARIES`` -# Both ``gtest`` and ``gtest_main`` -# -# Cache variables -# ^^^^^^^^^^^^^^^ -# -# The following cache variables may also be set: -# -# ``GTEST_ROOT`` -# The root directory of the Google Test installation (may also be -# set as an environment variable) -# ``GTEST_MSVC_SEARCH`` -# If compiling with MSVC, this variable can be set to ``MT`` or -# ``MD`` (the default) to enable searching a GTest build tree -# -# -# Example usage -# ^^^^^^^^^^^^^ -# -# :: -# -# enable_testing() -# find_package(GTest REQUIRED) -# -# add_executable(foo foo.cc) -# target_link_libraries(foo GTest::GTest GTest::Main) -# -# add_test(AllTestsInFoo foo) -# -# -# Deeper integration with CTest -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# See :module:`GoogleTest` for information on the :command:`gtest_add_tests` -# and :command:`gtest_discover_tests` commands. +#[=======================================================================[.rst: +FindGTest +--------- + +Locate the Google C++ Testing Framework. + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``GTest::GTest`` + The Google Test ``gtest`` library, if found; adds Thread::Thread + automatically +``GTest::Main`` + The Google Test ``gtest_main`` library, if found + + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``GTEST_FOUND`` + Found the Google Testing framework +``GTEST_INCLUDE_DIRS`` + the directory containing the Google Test headers + +The library variables below are set as normal variables. These +contain debug/optimized keywords when a debugging library is found. + +``GTEST_LIBRARIES`` + The Google Test ``gtest`` library; note it also requires linking + with an appropriate thread library +``GTEST_MAIN_LIBRARIES`` + The Google Test ``gtest_main`` library +``GTEST_BOTH_LIBRARIES`` + Both ``gtest`` and ``gtest_main`` + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``GTEST_ROOT`` + The root directory of the Google Test installation (may also be + set as an environment variable) +``GTEST_MSVC_SEARCH`` + If compiling with MSVC, this variable can be set to ``MT`` or + ``MD`` (the default) to enable searching a GTest build tree + + +Example usage +^^^^^^^^^^^^^ + +:: + + enable_testing() + find_package(GTest REQUIRED) + + add_executable(foo foo.cc) + target_link_libraries(foo GTest::GTest GTest::Main) + + add_test(AllTestsInFoo foo) + + +Deeper integration with CTest +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +See :module:`GoogleTest` for information on the :command:`gtest_add_tests` +and :command:`gtest_discover_tests` commands. +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/GoogleTest.cmake) diff --git a/Modules/FindGettext.cmake b/Modules/FindGettext.cmake index 9623b85..9e29e8d 100644 --- a/Modules/FindGettext.cmake +++ b/Modules/FindGettext.cmake @@ -1,61 +1,62 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGettext -# ----------- -# -# Find GNU gettext tools -# -# This module looks for the GNU gettext tools. This module defines the -# following values: -# -# :: -# -# GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool. -# GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool. -# GETTEXT_FOUND: True if gettext has been found. -# GETTEXT_VERSION_STRING: the version of gettext found (since CMake 2.8.8) -# -# -# -# Additionally it provides the following macros: -# -# GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN ) -# -# :: -# -# This will create a target "translations" which will convert the -# given input po files into the binary output mo file. If the -# ALL option is used, the translations will also be created when -# building the default target. -# -# GETTEXT_PROCESS_POT_FILE( <potfile> [ALL] [INSTALL_DESTINATION <destdir>] -# LANGUAGES <lang1> <lang2> ... ) -# -# :: -# -# Process the given pot file to mo files. -# If INSTALL_DESTINATION is given then automatically install rules will -# be created, the language subdirectory will be taken into account -# (by default use share/locale/). -# If ALL is specified, the pot file is processed when building the all traget. -# It creates a custom target "potfile". -# -# GETTEXT_PROCESS_PO_FILES( <lang> [ALL] [INSTALL_DESTINATION <dir>] -# PO_FILES <po1> <po2> ... ) -# -# :: -# -# Process the given po files to mo files for the given language. -# If INSTALL_DESTINATION is given then automatically install rules will -# be created, the language subdirectory will be taken into account -# (by default use share/locale/). -# If ALL is specified, the po files are processed when building the all traget. -# It creates a custom target "pofiles". -# -# .. note:: -# If you wish to use the Gettext library (libintl), use :module:`FindIntl`. +#[=======================================================================[.rst: +FindGettext +----------- + +Find GNU gettext tools + +This module looks for the GNU gettext tools. This module defines the +following values: + +:: + + GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool. + GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool. + GETTEXT_FOUND: True if gettext has been found. + GETTEXT_VERSION_STRING: the version of gettext found (since CMake 2.8.8) + + + +Additionally it provides the following macros: + +GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN ) + +:: + + This will create a target "translations" which will convert the + given input po files into the binary output mo file. If the + ALL option is used, the translations will also be created when + building the default target. + +GETTEXT_PROCESS_POT_FILE( <potfile> [ALL] [INSTALL_DESTINATION <destdir>] +LANGUAGES <lang1> <lang2> ... ) + +:: + + Process the given pot file to mo files. + If INSTALL_DESTINATION is given then automatically install rules will + be created, the language subdirectory will be taken into account + (by default use share/locale/). + If ALL is specified, the pot file is processed when building the all traget. + It creates a custom target "potfile". + +GETTEXT_PROCESS_PO_FILES( <lang> [ALL] [INSTALL_DESTINATION <dir>] +PO_FILES <po1> <po2> ... ) + +:: + + Process the given po files to mo files for the given language. + If INSTALL_DESTINATION is given then automatically install rules will + be created, the language subdirectory will be taken into account + (by default use share/locale/). + If ALL is specified, the po files are processed when building the all traget. + It creates a custom target "pofiles". + +.. note:: + If you wish to use the Gettext library (libintl), use :module:`FindIntl`. +#]=======================================================================] find_program(GETTEXT_MSGMERGE_EXECUTABLE msgmerge) diff --git a/Modules/FindGit.cmake b/Modules/FindGit.cmake index fae31eb..c447a1a 100644 --- a/Modules/FindGit.cmake +++ b/Modules/FindGit.cmake @@ -1,27 +1,28 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGit -# ------- -# -# The module defines the following variables: -# -# ``GIT_EXECUTABLE`` -# Path to Git command-line client. -# ``Git_FOUND``, ``GIT_FOUND`` -# True if the Git command-line client was found. -# ``GIT_VERSION_STRING`` -# The version of Git found. -# -# Example usage: -# -# .. code-block:: cmake -# -# find_package(Git) -# if(Git_FOUND) -# message("Git found: ${GIT_EXECUTABLE}") -# endif() +#[=======================================================================[.rst: +FindGit +------- + +The module defines the following variables: + +``GIT_EXECUTABLE`` + Path to Git command-line client. +``Git_FOUND``, ``GIT_FOUND`` + True if the Git command-line client was found. +``GIT_VERSION_STRING`` + The version of Git found. + +Example usage: + +.. code-block:: cmake + + find_package(Git) + if(Git_FOUND) + message("Git found: ${GIT_EXECUTABLE}") + endif() +#]=======================================================================] # Look for 'git' or 'eg' (easy git) # diff --git a/Modules/FindGnuTLS.cmake b/Modules/FindGnuTLS.cmake index 1a97d99..9c07444 100644 --- a/Modules/FindGnuTLS.cmake +++ b/Modules/FindGnuTLS.cmake @@ -1,22 +1,23 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGnuTLS -# ---------- -# -# Try to find the GNU Transport Layer Security library (gnutls) -# -# -# -# Once done this will define -# -# :: -# -# GNUTLS_FOUND - System has gnutls -# GNUTLS_INCLUDE_DIR - The gnutls include directory -# GNUTLS_LIBRARIES - The libraries needed to use gnutls -# GNUTLS_DEFINITIONS - Compiler switches required for using gnutls +#[=======================================================================[.rst: +FindGnuTLS +---------- + +Try to find the GNU Transport Layer Security library (gnutls) + + + +Once done this will define + +:: + + GNUTLS_FOUND - System has gnutls + GNUTLS_INCLUDE_DIR - The gnutls include directory + GNUTLS_LIBRARIES - The libraries needed to use gnutls + GNUTLS_DEFINITIONS - Compiler switches required for using gnutls +#]=======================================================================] # Note that this doesn't try to find the gnutls-extra package. diff --git a/Modules/FindGnuplot.cmake b/Modules/FindGnuplot.cmake index aa4cd6c..ca2467d 100644 --- a/Modules/FindGnuplot.cmake +++ b/Modules/FindGnuplot.cmake @@ -1,25 +1,26 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindGnuplot -# ----------- -# -# this module looks for gnuplot -# -# -# -# Once done this will define -# -# :: -# -# GNUPLOT_FOUND - system has Gnuplot -# GNUPLOT_EXECUTABLE - the Gnuplot executable -# GNUPLOT_VERSION_STRING - the version of Gnuplot found (since CMake 2.8.8) -# -# -# -# GNUPLOT_VERSION_STRING will not work for old versions like 3.7.1. +#[=======================================================================[.rst: +FindGnuplot +----------- + +this module looks for gnuplot + + + +Once done this will define + +:: + + GNUPLOT_FOUND - system has Gnuplot + GNUPLOT_EXECUTABLE - the Gnuplot executable + GNUPLOT_VERSION_STRING - the version of Gnuplot found (since CMake 2.8.8) + + + +GNUPLOT_VERSION_STRING will not work for old versions like 3.7.1. +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake) diff --git a/Modules/FindHDF5.cmake b/Modules/FindHDF5.cmake index 41b1002..e36767a 100644 --- a/Modules/FindHDF5.cmake +++ b/Modules/FindHDF5.cmake @@ -1,109 +1,110 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindHDF5 -# -------- -# -# Find HDF5, a library for reading and writing self describing array data. -# -# -# -# This module invokes the HDF5 wrapper compiler that should be installed -# alongside HDF5. Depending upon the HDF5 Configuration, the wrapper -# compiler is called either h5cc or h5pcc. If this succeeds, the module -# will then call the compiler with the -show argument to see what flags -# are used when compiling an HDF5 client application. -# -# The module will optionally accept the COMPONENTS argument. If no -# COMPONENTS are specified, then the find module will default to finding -# only the HDF5 C library. If one or more COMPONENTS are specified, the -# module will attempt to find the language bindings for the specified -# components. The only valid components are C, CXX, Fortran, HL, and -# Fortran_HL. If the COMPONENTS argument is not given, the module will -# attempt to find only the C bindings. -# -# This module will read the variable -# HDF5_USE_STATIC_LIBRARIES to determine whether or not to prefer a -# static link to a dynamic link for HDF5 and all of it's dependencies. -# To use this feature, make sure that the HDF5_USE_STATIC_LIBRARIES -# variable is set before the call to find_package. -# -# To provide the module with a hint about where to find your HDF5 -# installation, you can set the environment variable HDF5_ROOT. The -# Find module will then look in this path when searching for HDF5 -# executables, paths, and libraries. -# -# Both the serial and parallel HDF5 wrappers are considered and the first -# directory to contain either one will be used. In the event that both appear -# in the same directory the serial version is preferentially selected. This -# behavior can be reversed by setting the variable HDF5_PREFER_PARALLEL to -# true. -# -# In addition to finding the includes and libraries required to compile -# an HDF5 client application, this module also makes an effort to find -# tools that come with the HDF5 distribution that may be useful for -# regression testing. -# -# This module will define the following variables: -# -# :: -# -# HDF5_FOUND - true if HDF5 was found on the system -# HDF5_VERSION - HDF5 version in format Major.Minor.Release -# HDF5_INCLUDE_DIRS - Location of the hdf5 includes -# HDF5_INCLUDE_DIR - Location of the hdf5 includes (deprecated) -# HDF5_DEFINITIONS - Required compiler definitions for HDF5 -# HDF5_LIBRARIES - Required libraries for all requested bindings -# HDF5_HL_LIBRARIES - Required libraries for the HDF5 high level API for all -# bindings, if the HL component is enabled -# -# Available components are: C CXX Fortran and HL. For each enabled language -# binding, a corresponding HDF5_${LANG}_LIBRARIES variable, and potentially -# HDF5_${LANG}_DEFINITIONS, will be defined. -# If the HL component is enabled, then an HDF5_${LANG}_HL_LIBRARIES will -# also be defined. With all components enabled, the following variables will be defined: -# -# :: -# -# HDF5_C_DEFINITIONS -- Required compiler definitions for HDF5 C bindings -# HDF5_CXX_DEFINITIONS -- Required compiler definitions for HDF5 C++ bindings -# HDF5_Fortran_DEFINITIONS -- Required compiler definitions for HDF5 Fortran bindings -# HDF5_C_INCLUDE_DIRS -- Required include directories for HDF5 C bindings -# HDF5_CXX_INCLUDE_DIRS -- Required include directories for HDF5 C++ bindings -# HDF5_Fortran_INCLUDE_DIRS -- Required include directories for HDF5 Fortran bindings -# HDF5_C_LIBRARIES - Required libraries for the HDF5 C bindings -# HDF5_CXX_LIBRARIES - Required libraries for the HDF5 C++ bindings -# HDF5_Fortran_LIBRARIES - Required libraries for the HDF5 Fortran bindings -# HDF5_C_HL_LIBRARIES - Required libraries for the high level C bindings -# HDF5_CXX_HL_LIBRARIES - Required libraries for the high level C++ bindings -# HDF5_Fortran_HL_LIBRARIES - Required libraries for the high level Fortran -# bindings. -# -# HDF5_IS_PARALLEL - Whether or not HDF5 was found with parallel IO support -# HDF5_C_COMPILER_EXECUTABLE - the path to the HDF5 C wrapper compiler -# HDF5_CXX_COMPILER_EXECUTABLE - the path to the HDF5 C++ wrapper compiler -# HDF5_Fortran_COMPILER_EXECUTABLE - the path to the HDF5 Fortran wrapper compiler -# HDF5_C_COMPILER_EXECUTABLE_NO_INTERROGATE - path to the primary C compiler -# which is also the HDF5 wrapper -# HDF5_CXX_COMPILER_EXECUTABLE_NO_INTERROGATE - path to the primary C++ -# compiler which is also -# the HDF5 wrapper -# HDF5_Fortran_COMPILER_EXECUTABLE_NO_INTERROGATE - path to the primary -# Fortran compiler which -# is also the HDF5 wrapper -# HDF5_DIFF_EXECUTABLE - the path to the HDF5 dataset comparison tool -# -# The following variable can be set to guide the search for HDF5 libraries and includes: -# -# ``HDF5_ROOT`` -# Specify the path to the HDF5 installation to use. -# -# ``HDF5_FIND_DEBUG`` -# Set to a true value to get some extra debugging output. -# -# ``HDF5_NO_FIND_PACKAGE_CONFIG_FILE`` -# Set to a true value to skip trying to find ``hdf5-config.cmake``. +#[=======================================================================[.rst: +FindHDF5 +-------- + +Find HDF5, a library for reading and writing self describing array data. + + + +This module invokes the HDF5 wrapper compiler that should be installed +alongside HDF5. Depending upon the HDF5 Configuration, the wrapper +compiler is called either h5cc or h5pcc. If this succeeds, the module +will then call the compiler with the -show argument to see what flags +are used when compiling an HDF5 client application. + +The module will optionally accept the COMPONENTS argument. If no +COMPONENTS are specified, then the find module will default to finding +only the HDF5 C library. If one or more COMPONENTS are specified, the +module will attempt to find the language bindings for the specified +components. The only valid components are C, CXX, Fortran, HL, and +Fortran_HL. If the COMPONENTS argument is not given, the module will +attempt to find only the C bindings. + +This module will read the variable +HDF5_USE_STATIC_LIBRARIES to determine whether or not to prefer a +static link to a dynamic link for HDF5 and all of it's dependencies. +To use this feature, make sure that the HDF5_USE_STATIC_LIBRARIES +variable is set before the call to find_package. + +To provide the module with a hint about where to find your HDF5 +installation, you can set the environment variable HDF5_ROOT. The +Find module will then look in this path when searching for HDF5 +executables, paths, and libraries. + +Both the serial and parallel HDF5 wrappers are considered and the first +directory to contain either one will be used. In the event that both appear +in the same directory the serial version is preferentially selected. This +behavior can be reversed by setting the variable HDF5_PREFER_PARALLEL to +true. + +In addition to finding the includes and libraries required to compile +an HDF5 client application, this module also makes an effort to find +tools that come with the HDF5 distribution that may be useful for +regression testing. + +This module will define the following variables: + +:: + + HDF5_FOUND - true if HDF5 was found on the system + HDF5_VERSION - HDF5 version in format Major.Minor.Release + HDF5_INCLUDE_DIRS - Location of the hdf5 includes + HDF5_INCLUDE_DIR - Location of the hdf5 includes (deprecated) + HDF5_DEFINITIONS - Required compiler definitions for HDF5 + HDF5_LIBRARIES - Required libraries for all requested bindings + HDF5_HL_LIBRARIES - Required libraries for the HDF5 high level API for all + bindings, if the HL component is enabled + +Available components are: C CXX Fortran and HL. For each enabled language +binding, a corresponding HDF5_${LANG}_LIBRARIES variable, and potentially +HDF5_${LANG}_DEFINITIONS, will be defined. +If the HL component is enabled, then an HDF5_${LANG}_HL_LIBRARIES will +also be defined. With all components enabled, the following variables will be defined: + +:: + + HDF5_C_DEFINITIONS -- Required compiler definitions for HDF5 C bindings + HDF5_CXX_DEFINITIONS -- Required compiler definitions for HDF5 C++ bindings + HDF5_Fortran_DEFINITIONS -- Required compiler definitions for HDF5 Fortran bindings + HDF5_C_INCLUDE_DIRS -- Required include directories for HDF5 C bindings + HDF5_CXX_INCLUDE_DIRS -- Required include directories for HDF5 C++ bindings + HDF5_Fortran_INCLUDE_DIRS -- Required include directories for HDF5 Fortran bindings + HDF5_C_LIBRARIES - Required libraries for the HDF5 C bindings + HDF5_CXX_LIBRARIES - Required libraries for the HDF5 C++ bindings + HDF5_Fortran_LIBRARIES - Required libraries for the HDF5 Fortran bindings + HDF5_C_HL_LIBRARIES - Required libraries for the high level C bindings + HDF5_CXX_HL_LIBRARIES - Required libraries for the high level C++ bindings + HDF5_Fortran_HL_LIBRARIES - Required libraries for the high level Fortran + bindings. + + HDF5_IS_PARALLEL - Whether or not HDF5 was found with parallel IO support + HDF5_C_COMPILER_EXECUTABLE - the path to the HDF5 C wrapper compiler + HDF5_CXX_COMPILER_EXECUTABLE - the path to the HDF5 C++ wrapper compiler + HDF5_Fortran_COMPILER_EXECUTABLE - the path to the HDF5 Fortran wrapper compiler + HDF5_C_COMPILER_EXECUTABLE_NO_INTERROGATE - path to the primary C compiler + which is also the HDF5 wrapper + HDF5_CXX_COMPILER_EXECUTABLE_NO_INTERROGATE - path to the primary C++ + compiler which is also + the HDF5 wrapper + HDF5_Fortran_COMPILER_EXECUTABLE_NO_INTERROGATE - path to the primary + Fortran compiler which + is also the HDF5 wrapper + HDF5_DIFF_EXECUTABLE - the path to the HDF5 dataset comparison tool + +The following variable can be set to guide the search for HDF5 libraries and includes: + +``HDF5_ROOT`` + Specify the path to the HDF5 installation to use. + +``HDF5_FIND_DEBUG`` + Set to a true value to get some extra debugging output. + +``HDF5_NO_FIND_PACKAGE_CONFIG_FILE`` + Set to a true value to skip trying to find ``hdf5-config.cmake``. +#]=======================================================================] # This module is maintained by Will Dicharry <wdicharry@stellarscience.com>. diff --git a/Modules/FindHSPELL.cmake b/Modules/FindHSPELL.cmake index bb0e2f0..ec077a5 100644 --- a/Modules/FindHSPELL.cmake +++ b/Modules/FindHSPELL.cmake @@ -1,28 +1,29 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindHSPELL -# ---------- -# -# Try to find Hspell -# -# Once done this will define -# -# :: -# -# HSPELL_FOUND - system has Hspell -# HSPELL_INCLUDE_DIR - the Hspell include directory -# HSPELL_LIBRARIES - The libraries needed to use Hspell -# HSPELL_DEFINITIONS - Compiler switches required for using Hspell -# -# -# -# :: -# -# HSPELL_VERSION_STRING - The version of Hspell found (x.y) -# HSPELL_MAJOR_VERSION - the major version of Hspell -# HSPELL_MINOR_VERSION - The minor version of Hspell +#[=======================================================================[.rst: +FindHSPELL +---------- + +Try to find Hspell + +Once done this will define + +:: + + HSPELL_FOUND - system has Hspell + HSPELL_INCLUDE_DIR - the Hspell include directory + HSPELL_LIBRARIES - The libraries needed to use Hspell + HSPELL_DEFINITIONS - Compiler switches required for using Hspell + + + +:: + + HSPELL_VERSION_STRING - The version of Hspell found (x.y) + HSPELL_MAJOR_VERSION - the major version of Hspell + HSPELL_MINOR_VERSION - The minor version of Hspell +#]=======================================================================] find_path(HSPELL_INCLUDE_DIR hspell.h) diff --git a/Modules/FindHTMLHelp.cmake b/Modules/FindHTMLHelp.cmake index 6aab8a7..a11ad4d 100644 --- a/Modules/FindHTMLHelp.cmake +++ b/Modules/FindHTMLHelp.cmake @@ -1,19 +1,20 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindHTMLHelp -# ------------ -# -# This module looks for Microsoft HTML Help Compiler -# -# It defines: -# -# :: -# -# HTML_HELP_COMPILER : full path to the Compiler (hhc.exe) -# HTML_HELP_INCLUDE_PATH : include path to the API (htmlhelp.h) -# HTML_HELP_LIBRARY : full path to the library (htmlhelp.lib) +#[=======================================================================[.rst: +FindHTMLHelp +------------ + +This module looks for Microsoft HTML Help Compiler + +It defines: + +:: + + HTML_HELP_COMPILER : full path to the Compiler (hhc.exe) + HTML_HELP_INCLUDE_PATH : include path to the API (htmlhelp.h) + HTML_HELP_LIBRARY : full path to the library (htmlhelp.lib) +#]=======================================================================] if(WIN32) diff --git a/Modules/FindHg.cmake b/Modules/FindHg.cmake index 8aa553e..1358363 100644 --- a/Modules/FindHg.cmake +++ b/Modules/FindHg.cmake @@ -1,45 +1,46 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindHg -# ------ -# -# Extract information from a mercurial working copy. -# -# The module defines the following variables: -# -# :: -# -# HG_EXECUTABLE - path to mercurial command line client (hg) -# HG_FOUND - true if the command line client was found -# HG_VERSION_STRING - the version of mercurial found -# -# If the command line client executable is found the following macro is defined: -# -# :: -# -# HG_WC_INFO(<dir> <var-prefix>) -# -# Hg_WC_INFO extracts information of a mercurial working copy -# at a given location. This macro defines the following variables: -# -# :: -# -# <var-prefix>_WC_CHANGESET - current changeset -# <var-prefix>_WC_REVISION - current revision -# -# Example usage: -# -# :: -# -# find_package(Hg) -# if(HG_FOUND) -# message("hg found: ${HG_EXECUTABLE}") -# HG_WC_INFO(${PROJECT_SOURCE_DIR} Project) -# message("Current revision is ${Project_WC_REVISION}") -# message("Current changeset is ${Project_WC_CHANGESET}") -# endif() +#[=======================================================================[.rst: +FindHg +------ + +Extract information from a mercurial working copy. + +The module defines the following variables: + +:: + + HG_EXECUTABLE - path to mercurial command line client (hg) + HG_FOUND - true if the command line client was found + HG_VERSION_STRING - the version of mercurial found + +If the command line client executable is found the following macro is defined: + +:: + + HG_WC_INFO(<dir> <var-prefix>) + +Hg_WC_INFO extracts information of a mercurial working copy +at a given location. This macro defines the following variables: + +:: + + <var-prefix>_WC_CHANGESET - current changeset + <var-prefix>_WC_REVISION - current revision + +Example usage: + +:: + + find_package(Hg) + if(HG_FOUND) + message("hg found: ${HG_EXECUTABLE}") + HG_WC_INFO(${PROJECT_SOURCE_DIR} Project) + message("Current revision is ${Project_WC_REVISION}") + message("Current changeset is ${Project_WC_CHANGESET}") + endif() +#]=======================================================================] find_program(HG_EXECUTABLE NAMES hg diff --git a/Modules/FindICU.cmake b/Modules/FindICU.cmake index aa531d5..685b10f 100644 --- a/Modules/FindICU.cmake +++ b/Modules/FindICU.cmake @@ -1,89 +1,90 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindICU -# ------- -# -# Find the International Components for Unicode (ICU) libraries and -# programs. -# -# This module supports multiple components. -# Components can include any of: ``data``, ``i18n``, ``io``, ``le``, -# ``lx``, ``test``, ``tu`` and ``uc``. -# -# Note that on Windows ``data`` is named ``dt`` and ``i18n`` is named -# ``in``; any of the names may be used, and the appropriate -# platform-specific library name will be automatically selected. -# -# This module reports information about the ICU installation in -# several variables. General variables:: -# -# ICU_VERSION - ICU release version -# ICU_FOUND - true if the main programs and libraries were found -# ICU_LIBRARIES - component libraries to be linked -# ICU_INCLUDE_DIRS - the directories containing the ICU headers -# -# Imported targets:: -# -# ICU::<C> -# -# Where ``<C>`` is the name of an ICU component, for example -# ``ICU::i18n``. -# -# ICU programs are reported in:: -# -# ICU_GENCNVAL_EXECUTABLE - path to gencnval executable -# ICU_ICUINFO_EXECUTABLE - path to icuinfo executable -# ICU_GENBRK_EXECUTABLE - path to genbrk executable -# ICU_ICU-CONFIG_EXECUTABLE - path to icu-config executable -# ICU_GENRB_EXECUTABLE - path to genrb executable -# ICU_GENDICT_EXECUTABLE - path to gendict executable -# ICU_DERB_EXECUTABLE - path to derb executable -# ICU_PKGDATA_EXECUTABLE - path to pkgdata executable -# ICU_UCONV_EXECUTABLE - path to uconv executable -# ICU_GENCFU_EXECUTABLE - path to gencfu executable -# ICU_MAKECONV_EXECUTABLE - path to makeconv executable -# ICU_GENNORM2_EXECUTABLE - path to gennorm2 executable -# ICU_GENCCODE_EXECUTABLE - path to genccode executable -# ICU_GENSPREP_EXECUTABLE - path to gensprep executable -# ICU_ICUPKG_EXECUTABLE - path to icupkg executable -# ICU_GENCMN_EXECUTABLE - path to gencmn executable -# -# ICU component libraries are reported in:: -# -# ICU_<C>_FOUND - ON if component was found -# ICU_<C>_LIBRARIES - libraries for component -# -# ICU datafiles are reported in:: -# -# ICU_MAKEFILE_INC - Makefile.inc -# ICU_PKGDATA_INC - pkgdata.inc -# -# Note that ``<C>`` is the uppercased name of the component. -# -# This module reads hints about search results from:: -# -# ICU_ROOT - the root of the ICU installation -# -# The environment variable ``ICU_ROOT`` may also be used; the -# ICU_ROOT variable takes precedence. -# -# The following cache variables may also be set:: -# -# ICU_<P>_EXECUTABLE - the path to executable <P> -# ICU_INCLUDE_DIR - the directory containing the ICU headers -# ICU_<C>_LIBRARY - the library for component <C> -# -# .. note:: -# -# In most cases none of the above variables will require setting, -# unless multiple ICU versions are available and a specific version -# is required. -# -# Other variables one may set to control this module are:: -# -# ICU_DEBUG - Set to ON to enable debug output from FindICU. +#[=======================================================================[.rst: +FindICU +------- + +Find the International Components for Unicode (ICU) libraries and +programs. + +This module supports multiple components. +Components can include any of: ``data``, ``i18n``, ``io``, ``le``, +``lx``, ``test``, ``tu`` and ``uc``. + +Note that on Windows ``data`` is named ``dt`` and ``i18n`` is named +``in``; any of the names may be used, and the appropriate +platform-specific library name will be automatically selected. + +This module reports information about the ICU installation in +several variables. General variables:: + + ICU_VERSION - ICU release version + ICU_FOUND - true if the main programs and libraries were found + ICU_LIBRARIES - component libraries to be linked + ICU_INCLUDE_DIRS - the directories containing the ICU headers + +Imported targets:: + + ICU::<C> + +Where ``<C>`` is the name of an ICU component, for example +``ICU::i18n``. + +ICU programs are reported in:: + + ICU_GENCNVAL_EXECUTABLE - path to gencnval executable + ICU_ICUINFO_EXECUTABLE - path to icuinfo executable + ICU_GENBRK_EXECUTABLE - path to genbrk executable + ICU_ICU-CONFIG_EXECUTABLE - path to icu-config executable + ICU_GENRB_EXECUTABLE - path to genrb executable + ICU_GENDICT_EXECUTABLE - path to gendict executable + ICU_DERB_EXECUTABLE - path to derb executable + ICU_PKGDATA_EXECUTABLE - path to pkgdata executable + ICU_UCONV_EXECUTABLE - path to uconv executable + ICU_GENCFU_EXECUTABLE - path to gencfu executable + ICU_MAKECONV_EXECUTABLE - path to makeconv executable + ICU_GENNORM2_EXECUTABLE - path to gennorm2 executable + ICU_GENCCODE_EXECUTABLE - path to genccode executable + ICU_GENSPREP_EXECUTABLE - path to gensprep executable + ICU_ICUPKG_EXECUTABLE - path to icupkg executable + ICU_GENCMN_EXECUTABLE - path to gencmn executable + +ICU component libraries are reported in:: + + ICU_<C>_FOUND - ON if component was found + ICU_<C>_LIBRARIES - libraries for component + +ICU datafiles are reported in:: + + ICU_MAKEFILE_INC - Makefile.inc + ICU_PKGDATA_INC - pkgdata.inc + +Note that ``<C>`` is the uppercased name of the component. + +This module reads hints about search results from:: + + ICU_ROOT - the root of the ICU installation + +The environment variable ``ICU_ROOT`` may also be used; the +ICU_ROOT variable takes precedence. + +The following cache variables may also be set:: + + ICU_<P>_EXECUTABLE - the path to executable <P> + ICU_INCLUDE_DIR - the directory containing the ICU headers + ICU_<C>_LIBRARY - the library for component <C> + +.. note:: + + In most cases none of the above variables will require setting, + unless multiple ICU versions are available and a specific version + is required. + +Other variables one may set to control this module are:: + + ICU_DEBUG - Set to ON to enable debug output from FindICU. +#]=======================================================================] # Written by Roger Leigh <rleigh@codelibre.net> diff --git a/Modules/FindIce.cmake b/Modules/FindIce.cmake index df76e5a..42d3d47 100644 --- a/Modules/FindIce.cmake +++ b/Modules/FindIce.cmake @@ -1,146 +1,147 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindIce -# ------- -# -# Find the ZeroC Internet Communication Engine (ICE) programs, -# libraries and datafiles. -# -# This module supports multiple components. -# Components can include any of: ``Freeze``, ``Glacier2``, ``Ice``, -# ``IceBox``, ``IceDB``, ``IceDiscovery``, ``IceGrid``, -# ``IceLocatorDiscovery``, ``IcePatch``, ``IceSSL``, ``IceStorm``, -# ``IceUtil``, ``IceXML``, or ``Slice``. -# -# Ice 3.7 and later also include C++11-specific components: -# ``Glacier2++11``, ``Ice++11``, ``IceBox++11``, ``IceDiscovery++11`` -# ``IceGrid``, ``IceLocatorDiscovery++11``, ``IceSSL++11``, -# ``IceStorm++11`` -# -# Note that the set of supported components is Ice version-specific. -# -# This module reports information about the Ice installation in -# several variables. General variables:: -# -# Ice_VERSION - Ice release version -# Ice_FOUND - true if the main programs and libraries were found -# Ice_LIBRARIES - component libraries to be linked -# Ice_INCLUDE_DIRS - the directories containing the Ice headers -# Ice_SLICE_DIRS - the directories containing the Ice slice interface -# definitions -# -# Imported targets:: -# -# Ice::<C> -# -# Where ``<C>`` is the name of an Ice component, for example -# ``Ice::Glacier2`` or ``Ice++11``. -# -# Ice slice programs are reported in:: -# -# Ice_SLICE2CPP_EXECUTABLE - path to slice2cpp executable -# Ice_SLICE2CS_EXECUTABLE - path to slice2cs executable -# Ice_SLICE2FREEZEJ_EXECUTABLE - path to slice2freezej executable -# Ice_SLICE2FREEZE_EXECUTABLE - path to slice2freeze executable -# Ice_SLICE2HTML_EXECUTABLE - path to slice2html executable -# Ice_SLICE2JAVA_EXECUTABLE - path to slice2java executable -# Ice_SLICE2JS_EXECUTABLE - path to slice2js executable -# Ice_SLICE2OBJC_EXECUTABLE - path to slice2objc executable -# Ice_SLICE2PHP_EXECUTABLE - path to slice2php executable -# Ice_SLICE2PY_EXECUTABLE - path to slice2py executable -# Ice_SLICE2RB_EXECUTABLE - path to slice2rb executable -# -# Ice programs are reported in:: -# -# Ice_GLACIER2ROUTER_EXECUTABLE - path to glacier2router executable -# Ice_ICEBOX_EXECUTABLE - path to icebox executable -# Ice_ICEBOXXX11_EXECUTABLE - path to icebox++11 executable -# Ice_ICEBOXADMIN_EXECUTABLE - path to iceboxadmin executable -# Ice_ICEBOXD_EXECUTABLE - path to iceboxd executable -# Ice_ICEBOXNET_EXECUTABLE - path to iceboxnet executable -# Ice_ICEBRIDGE_EXECUTABLE - path to icebridge executable -# Ice_ICEGRIDADMIN_EXECUTABLE - path to icegridadmin executable -# Ice_ICEGRIDDB_EXECUTABLE - path to icegriddb executable -# Ice_ICEGRIDNODE_EXECUTABLE - path to icegridnode executable -# Ice_ICEGRIDNODED_EXECUTABLE - path to icegridnoded executable -# Ice_ICEGRIDREGISTRY_EXECUTABLE - path to icegridregistry executable -# Ice_ICEGRIDREGISTRYD_EXECUTABLE - path to icegridregistryd executable -# Ice_ICEPATCH2CALC_EXECUTABLE - path to icepatch2calc executable -# Ice_ICEPATCH2CLIENT_EXECUTABLE - path to icepatch2client executable -# Ice_ICEPATCH2SERVER_EXECUTABLE - path to icepatch2server executable -# Ice_ICESERVICEINSTALL_EXECUTABLE - path to iceserviceinstall executable -# Ice_ICESTORMADMIN_EXECUTABLE - path to icestormadmin executable -# Ice_ICESTORMDB_EXECUTABLE - path to icestormdb executable -# Ice_ICESTORMMIGRATE_EXECUTABLE - path to icestormmigrate executable -# -# Ice db programs (Windows only; standard system versions on all other -# platforms) are reported in:: -# -# Ice_DB_ARCHIVE_EXECUTABLE - path to db_archive executable -# Ice_DB_CHECKPOINT_EXECUTABLE - path to db_checkpoint executable -# Ice_DB_DEADLOCK_EXECUTABLE - path to db_deadlock executable -# Ice_DB_DUMP_EXECUTABLE - path to db_dump executable -# Ice_DB_HOTBACKUP_EXECUTABLE - path to db_hotbackup executable -# Ice_DB_LOAD_EXECUTABLE - path to db_load executable -# Ice_DB_LOG_VERIFY_EXECUTABLE - path to db_log_verify executable -# Ice_DB_PRINTLOG_EXECUTABLE - path to db_printlog executable -# Ice_DB_RECOVER_EXECUTABLE - path to db_recover executable -# Ice_DB_STAT_EXECUTABLE - path to db_stat executable -# Ice_DB_TUNER_EXECUTABLE - path to db_tuner executable -# Ice_DB_UPGRADE_EXECUTABLE - path to db_upgrade executable -# Ice_DB_VERIFY_EXECUTABLE - path to db_verify executable -# Ice_DUMPDB_EXECUTABLE - path to dumpdb executable -# Ice_TRANSFORMDB_EXECUTABLE - path to transformdb executable -# -# Ice component libraries are reported in:: -# -# Ice_<C>_FOUND - ON if component was found -# Ice_<C>_LIBRARIES - libraries for component -# -# Note that ``<C>`` is the uppercased name of the component. -# -# This module reads hints about search results from:: -# -# Ice_HOME - the root of the Ice installation -# -# The environment variable ``ICE_HOME`` may also be used; the -# Ice_HOME variable takes precedence. -# -# .. note:: -# On Windows, Ice 3.7.0 and later provide libraries via the NuGet -# package manager. Appropriate NuGet packages will be searched for -# using ``CMAKE_PREFIX_PATH``, or alternatively ``Ice_HOME`` may be -# set to the location of a specific NuGet package to restrict the -# search. -# -# The following cache variables may also be set:: -# -# Ice_<P>_EXECUTABLE - the path to executable <P> -# Ice_INCLUDE_DIR - the directory containing the Ice headers -# Ice_SLICE_DIR - the directory containing the Ice slice interface -# definitions -# Ice_<C>_LIBRARY - the library for component <C> -# -# .. note:: -# -# In most cases none of the above variables will require setting, -# unless multiple Ice versions are available and a specific version -# is required. On Windows, the most recent version of Ice will be -# found through the registry. On Unix, the programs, headers and -# libraries will usually be in standard locations, but Ice_SLICE_DIRS -# might not be automatically detected (commonly known locations are -# searched). All the other variables are defaulted using Ice_HOME, -# if set. It's possible to set Ice_HOME and selectively specify -# alternative locations for the other components; this might be -# required for e.g. newer versions of Visual Studio if the -# heuristics are not sufficient to identify the correct programs and -# libraries for the specific Visual Studio version. -# -# Other variables one may set to control this module are:: -# -# Ice_DEBUG - Set to ON to enable debug output from FindIce. +#[=======================================================================[.rst: +FindIce +------- + +Find the ZeroC Internet Communication Engine (ICE) programs, +libraries and datafiles. + +This module supports multiple components. +Components can include any of: ``Freeze``, ``Glacier2``, ``Ice``, +``IceBox``, ``IceDB``, ``IceDiscovery``, ``IceGrid``, +``IceLocatorDiscovery``, ``IcePatch``, ``IceSSL``, ``IceStorm``, +``IceUtil``, ``IceXML``, or ``Slice``. + +Ice 3.7 and later also include C++11-specific components: +``Glacier2++11``, ``Ice++11``, ``IceBox++11``, ``IceDiscovery++11`` +``IceGrid``, ``IceLocatorDiscovery++11``, ``IceSSL++11``, +``IceStorm++11`` + +Note that the set of supported components is Ice version-specific. + +This module reports information about the Ice installation in +several variables. General variables:: + + Ice_VERSION - Ice release version + Ice_FOUND - true if the main programs and libraries were found + Ice_LIBRARIES - component libraries to be linked + Ice_INCLUDE_DIRS - the directories containing the Ice headers + Ice_SLICE_DIRS - the directories containing the Ice slice interface + definitions + +Imported targets:: + + Ice::<C> + +Where ``<C>`` is the name of an Ice component, for example +``Ice::Glacier2`` or ``Ice++11``. + +Ice slice programs are reported in:: + + Ice_SLICE2CPP_EXECUTABLE - path to slice2cpp executable + Ice_SLICE2CS_EXECUTABLE - path to slice2cs executable + Ice_SLICE2FREEZEJ_EXECUTABLE - path to slice2freezej executable + Ice_SLICE2FREEZE_EXECUTABLE - path to slice2freeze executable + Ice_SLICE2HTML_EXECUTABLE - path to slice2html executable + Ice_SLICE2JAVA_EXECUTABLE - path to slice2java executable + Ice_SLICE2JS_EXECUTABLE - path to slice2js executable + Ice_SLICE2OBJC_EXECUTABLE - path to slice2objc executable + Ice_SLICE2PHP_EXECUTABLE - path to slice2php executable + Ice_SLICE2PY_EXECUTABLE - path to slice2py executable + Ice_SLICE2RB_EXECUTABLE - path to slice2rb executable + +Ice programs are reported in:: + + Ice_GLACIER2ROUTER_EXECUTABLE - path to glacier2router executable + Ice_ICEBOX_EXECUTABLE - path to icebox executable + Ice_ICEBOXXX11_EXECUTABLE - path to icebox++11 executable + Ice_ICEBOXADMIN_EXECUTABLE - path to iceboxadmin executable + Ice_ICEBOXD_EXECUTABLE - path to iceboxd executable + Ice_ICEBOXNET_EXECUTABLE - path to iceboxnet executable + Ice_ICEBRIDGE_EXECUTABLE - path to icebridge executable + Ice_ICEGRIDADMIN_EXECUTABLE - path to icegridadmin executable + Ice_ICEGRIDDB_EXECUTABLE - path to icegriddb executable + Ice_ICEGRIDNODE_EXECUTABLE - path to icegridnode executable + Ice_ICEGRIDNODED_EXECUTABLE - path to icegridnoded executable + Ice_ICEGRIDREGISTRY_EXECUTABLE - path to icegridregistry executable + Ice_ICEGRIDREGISTRYD_EXECUTABLE - path to icegridregistryd executable + Ice_ICEPATCH2CALC_EXECUTABLE - path to icepatch2calc executable + Ice_ICEPATCH2CLIENT_EXECUTABLE - path to icepatch2client executable + Ice_ICEPATCH2SERVER_EXECUTABLE - path to icepatch2server executable + Ice_ICESERVICEINSTALL_EXECUTABLE - path to iceserviceinstall executable + Ice_ICESTORMADMIN_EXECUTABLE - path to icestormadmin executable + Ice_ICESTORMDB_EXECUTABLE - path to icestormdb executable + Ice_ICESTORMMIGRATE_EXECUTABLE - path to icestormmigrate executable + +Ice db programs (Windows only; standard system versions on all other +platforms) are reported in:: + + Ice_DB_ARCHIVE_EXECUTABLE - path to db_archive executable + Ice_DB_CHECKPOINT_EXECUTABLE - path to db_checkpoint executable + Ice_DB_DEADLOCK_EXECUTABLE - path to db_deadlock executable + Ice_DB_DUMP_EXECUTABLE - path to db_dump executable + Ice_DB_HOTBACKUP_EXECUTABLE - path to db_hotbackup executable + Ice_DB_LOAD_EXECUTABLE - path to db_load executable + Ice_DB_LOG_VERIFY_EXECUTABLE - path to db_log_verify executable + Ice_DB_PRINTLOG_EXECUTABLE - path to db_printlog executable + Ice_DB_RECOVER_EXECUTABLE - path to db_recover executable + Ice_DB_STAT_EXECUTABLE - path to db_stat executable + Ice_DB_TUNER_EXECUTABLE - path to db_tuner executable + Ice_DB_UPGRADE_EXECUTABLE - path to db_upgrade executable + Ice_DB_VERIFY_EXECUTABLE - path to db_verify executable + Ice_DUMPDB_EXECUTABLE - path to dumpdb executable + Ice_TRANSFORMDB_EXECUTABLE - path to transformdb executable + +Ice component libraries are reported in:: + + Ice_<C>_FOUND - ON if component was found + Ice_<C>_LIBRARIES - libraries for component + +Note that ``<C>`` is the uppercased name of the component. + +This module reads hints about search results from:: + + Ice_HOME - the root of the Ice installation + +The environment variable ``ICE_HOME`` may also be used; the +Ice_HOME variable takes precedence. + +.. note:: + On Windows, Ice 3.7.0 and later provide libraries via the NuGet + package manager. Appropriate NuGet packages will be searched for + using ``CMAKE_PREFIX_PATH``, or alternatively ``Ice_HOME`` may be + set to the location of a specific NuGet package to restrict the + search. + +The following cache variables may also be set:: + + Ice_<P>_EXECUTABLE - the path to executable <P> + Ice_INCLUDE_DIR - the directory containing the Ice headers + Ice_SLICE_DIR - the directory containing the Ice slice interface + definitions + Ice_<C>_LIBRARY - the library for component <C> + +.. note:: + + In most cases none of the above variables will require setting, + unless multiple Ice versions are available and a specific version + is required. On Windows, the most recent version of Ice will be + found through the registry. On Unix, the programs, headers and + libraries will usually be in standard locations, but Ice_SLICE_DIRS + might not be automatically detected (commonly known locations are + searched). All the other variables are defaulted using Ice_HOME, + if set. It's possible to set Ice_HOME and selectively specify + alternative locations for the other components; this might be + required for e.g. newer versions of Visual Studio if the + heuristics are not sufficient to identify the correct programs and + libraries for the specific Visual Studio version. + +Other variables one may set to control this module are:: + + Ice_DEBUG - Set to ON to enable debug output from FindIce. +#]=======================================================================] # Written by Roger Leigh <rleigh@codelibre.net> diff --git a/Modules/FindIcotool.cmake b/Modules/FindIcotool.cmake index 26e95a0..32fc4ae 100644 --- a/Modules/FindIcotool.cmake +++ b/Modules/FindIcotool.cmake @@ -1,20 +1,21 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindIcotool -# ----------- -# -# Find icotool -# -# This module looks for icotool. This module defines the following -# values: -# -# :: -# -# ICOTOOL_EXECUTABLE: the full path to the icotool tool. -# ICOTOOL_FOUND: True if icotool has been found. -# ICOTOOL_VERSION_STRING: the version of icotool found. +#[=======================================================================[.rst: +FindIcotool +----------- + +Find icotool + +This module looks for icotool. This module defines the following +values: + +:: + + ICOTOOL_EXECUTABLE: the full path to the icotool tool. + ICOTOOL_FOUND: True if icotool has been found. + ICOTOOL_VERSION_STRING: the version of icotool found. +#]=======================================================================] find_program(ICOTOOL_EXECUTABLE icotool diff --git a/Modules/FindImageMagick.cmake b/Modules/FindImageMagick.cmake index 6d94d3b..2ddd11c 100644 --- a/Modules/FindImageMagick.cmake +++ b/Modules/FindImageMagick.cmake @@ -1,87 +1,88 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindImageMagick -# --------------- -# -# Find the ImageMagick binary suite. -# -# This module will search for a set of ImageMagick tools specified as -# components in the FIND_PACKAGE call. Typical components include, but -# are not limited to (future versions of ImageMagick might have -# additional components not listed here): -# -# :: -# -# animate -# compare -# composite -# conjure -# convert -# display -# identify -# import -# mogrify -# montage -# stream -# -# -# -# If no component is specified in the FIND_PACKAGE call, then it only -# searches for the ImageMagick executable directory. This code defines -# the following variables: -# -# :: -# -# ImageMagick_FOUND - TRUE if all components are found. -# ImageMagick_EXECUTABLE_DIR - Full path to executables directory. -# ImageMagick_<component>_FOUND - TRUE if <component> is found. -# ImageMagick_<component>_EXECUTABLE - Full path to <component> executable. -# ImageMagick_VERSION_STRING - the version of ImageMagick found -# (since CMake 2.8.8) -# -# -# -# ImageMagick_VERSION_STRING will not work for old versions like 5.2.3. -# -# There are also components for the following ImageMagick APIs: -# -# :: -# -# Magick++ -# MagickWand -# MagickCore -# -# -# -# For these components the following variables are set: -# -# :: -# -# ImageMagick_FOUND - TRUE if all components are found. -# ImageMagick_INCLUDE_DIRS - Full paths to all include dirs. -# ImageMagick_LIBRARIES - Full paths to all libraries. -# ImageMagick_<component>_FOUND - TRUE if <component> is found. -# ImageMagick_<component>_INCLUDE_DIRS - Full path to <component> include dirs. -# ImageMagick_<component>_LIBRARIES - Full path to <component> libraries. -# -# -# -# Example Usages: -# -# :: -# -# find_package(ImageMagick) -# find_package(ImageMagick COMPONENTS convert) -# find_package(ImageMagick COMPONENTS convert mogrify display) -# find_package(ImageMagick COMPONENTS Magick++) -# find_package(ImageMagick COMPONENTS Magick++ convert) -# -# -# -# Note that the standard FIND_PACKAGE features are supported (i.e., -# QUIET, REQUIRED, etc.). +#[=======================================================================[.rst: +FindImageMagick +--------------- + +Find the ImageMagick binary suite. + +This module will search for a set of ImageMagick tools specified as +components in the FIND_PACKAGE call. Typical components include, but +are not limited to (future versions of ImageMagick might have +additional components not listed here): + +:: + + animate + compare + composite + conjure + convert + display + identify + import + mogrify + montage + stream + + + +If no component is specified in the FIND_PACKAGE call, then it only +searches for the ImageMagick executable directory. This code defines +the following variables: + +:: + + ImageMagick_FOUND - TRUE if all components are found. + ImageMagick_EXECUTABLE_DIR - Full path to executables directory. + ImageMagick_<component>_FOUND - TRUE if <component> is found. + ImageMagick_<component>_EXECUTABLE - Full path to <component> executable. + ImageMagick_VERSION_STRING - the version of ImageMagick found + (since CMake 2.8.8) + + + +ImageMagick_VERSION_STRING will not work for old versions like 5.2.3. + +There are also components for the following ImageMagick APIs: + +:: + + Magick++ + MagickWand + MagickCore + + + +For these components the following variables are set: + +:: + + ImageMagick_FOUND - TRUE if all components are found. + ImageMagick_INCLUDE_DIRS - Full paths to all include dirs. + ImageMagick_LIBRARIES - Full paths to all libraries. + ImageMagick_<component>_FOUND - TRUE if <component> is found. + ImageMagick_<component>_INCLUDE_DIRS - Full path to <component> include dirs. + ImageMagick_<component>_LIBRARIES - Full path to <component> libraries. + + + +Example Usages: + +:: + + find_package(ImageMagick) + find_package(ImageMagick COMPONENTS convert) + find_package(ImageMagick COMPONENTS convert mogrify display) + find_package(ImageMagick COMPONENTS Magick++) + find_package(ImageMagick COMPONENTS Magick++ convert) + + + +Note that the standard FIND_PACKAGE features are supported (i.e., +QUIET, REQUIRED, etc.). +#]=======================================================================] find_package(PkgConfig QUIET) diff --git a/Modules/FindIntl.cmake b/Modules/FindIntl.cmake index f887721..3818d45 100644 --- a/Modules/FindIntl.cmake +++ b/Modules/FindIntl.cmake @@ -1,33 +1,34 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindIntl -# -------- -# -# Find the Gettext libintl headers and libraries. -# -# This module reports information about the Gettext libintl -# installation in several variables. General variables:: -# -# Intl_FOUND - true if the libintl headers and libraries were found -# Intl_INCLUDE_DIRS - the directory containing the libintl headers -# Intl_LIBRARIES - libintl libraries to be linked -# -# The following cache variables may also be set:: -# -# Intl_INCLUDE_DIR - the directory containing the libintl headers -# Intl_LIBRARY - the libintl library (if any) -# -# .. note:: -# On some platforms, such as Linux with GNU libc, the gettext -# functions are present in the C standard library and libintl -# is not required. ``Intl_LIBRARIES`` will be empty in this -# case. -# -# .. note:: -# If you wish to use the Gettext tools (``msgmerge``, -# ``msgfmt``, etc.), use :module:`FindGettext`. +#[=======================================================================[.rst: +FindIntl +-------- + +Find the Gettext libintl headers and libraries. + +This module reports information about the Gettext libintl +installation in several variables. General variables:: + + Intl_FOUND - true if the libintl headers and libraries were found + Intl_INCLUDE_DIRS - the directory containing the libintl headers + Intl_LIBRARIES - libintl libraries to be linked + +The following cache variables may also be set:: + + Intl_INCLUDE_DIR - the directory containing the libintl headers + Intl_LIBRARY - the libintl library (if any) + +.. note:: + On some platforms, such as Linux with GNU libc, the gettext + functions are present in the C standard library and libintl + is not required. ``Intl_LIBRARIES`` will be empty in this + case. + +.. note:: + If you wish to use the Gettext tools (``msgmerge``, + ``msgfmt``, etc.), use :module:`FindGettext`. +#]=======================================================================] # Written by Roger Leigh <rleigh@codelibre.net> diff --git a/Modules/FindJNI.cmake b/Modules/FindJNI.cmake index 4913e05..fdddcc7 100644 --- a/Modules/FindJNI.cmake +++ b/Modules/FindJNI.cmake @@ -1,29 +1,49 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindJNI -# ------- -# -# Find JNI java libraries. -# -# This module finds if Java is installed and determines where the -# include files and libraries are. It also determines what the name of -# the library is. The caller may set variable JAVA_HOME to specify a -# Java installation prefix explicitly. -# -# This module sets the following result variables: -# -# :: -# -# JNI_INCLUDE_DIRS = the include dirs to use -# JNI_LIBRARIES = the libraries to use -# JNI_FOUND = TRUE if JNI headers and libraries were found. -# JAVA_AWT_LIBRARY = the path to the jawt library -# JAVA_JVM_LIBRARY = the path to the jvm library -# JAVA_INCLUDE_PATH = the include path to jni.h -# JAVA_INCLUDE_PATH2 = the include path to jni_md.h -# JAVA_AWT_INCLUDE_PATH = the include path to jawt.h +#[=======================================================================[.rst: +FindJNI +------- + +Find Java Native Interface (JNI) libraries. + +JNI enables Java code running in a Java Virtual Machine (JVM) to call +and be called by native applications and libraries written in other +languages such as C, C++. + +This module finds if Java is installed and determines where the +include files and libraries are. It also determines what the name of +the library is. The caller may set variable ``JAVA_HOME`` to specify a +Java installation prefix explicitly. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following result variables: + +``JNI_INCLUDE_DIRS`` + the include dirs to use +``JNI_LIBRARIES`` + the libraries to use (JAWT and JVM) +``JNI_FOUND`` + TRUE if JNI headers and libraries were found. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables are also available to set or use: + +``JAVA_AWT_LIBRARY`` + the path to the Java AWT Native Interface (JAWT) library +``JAVA_JVM_LIBRARY`` + the path to the Java Virtual Machine (JVM) library +``JAVA_INCLUDE_PATH`` + the include path to jni.h +``JAVA_INCLUDE_PATH2`` + the include path to jni_md.h and jniport.h +``JAVA_AWT_INCLUDE_PATH`` + the include path to jawt.h +#]=======================================================================] # Expand {libarch} occurrences to java_libarch subdirectory(-ies) and set ${_var} macro(java_append_library_directories _var) @@ -187,6 +207,7 @@ JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES /usr/lib/jvm/default/jre/lib/{libarch} /usr/lib/jvm/default/lib/{libarch} # Ubuntu specific paths for default JVM + /usr/lib/jvm/java-11-openjdk-{libarch}/jre/lib/{libarch} # Ubuntu 18.04 LTS /usr/lib/jvm/java-8-openjdk-{libarch}/jre/lib/{libarch} # Ubuntu 15.10 /usr/lib/jvm/java-7-openjdk-{libarch}/jre/lib/{libarch} # Ubuntu 15.10 /usr/lib/jvm/java-6-openjdk-{libarch}/jre/lib/{libarch} # Ubuntu 15.10 diff --git a/Modules/FindJPEG.cmake b/Modules/FindJPEG.cmake index 7290724..0aa387a 100644 --- a/Modules/FindJPEG.cmake +++ b/Modules/FindJPEG.cmake @@ -1,53 +1,54 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindJPEG -# -------- -# -# Find the JPEG library (libjpeg) -# -# Imported targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following :prop_tgt:`IMPORTED` targets: -# -# ``JPEG::JPEG`` -# The JPEG library, if found. -# -# Result variables -# ^^^^^^^^^^^^^^^^ -# -# This module will set the following variables in your project: -# -# ``JPEG_FOUND`` -# If false, do not try to use JPEG. -# ``JPEG_INCLUDE_DIRS`` -# where to find jpeglib.h, etc. -# ``JPEG_LIBRARIES`` -# the libraries needed to use JPEG. -# ``JPEG_VERSION`` -# the version of the JPEG library found -# -# Cache variables -# ^^^^^^^^^^^^^^^ -# -# The following cache variables may also be set: -# -# ``JPEG_INCLUDE_DIRS`` -# where to find jpeglib.h, etc. -# ``JPEG_LIBRARY_RELEASE`` -# where to find the JPEG library (optimized). -# ``JPEG_LIBRARY_DEBUG`` -# where to find the JPEG library (debug). -# -# Obsolete variables -# ^^^^^^^^^^^^^^^^^^ -# -# ``JPEG_INCLUDE_DIR`` -# where to find jpeglib.h, etc. (same as JPEG_INCLUDE_DIRS) -# ``JPEG_LIBRARY`` -# where to find the JPEG library. +#[=======================================================================[.rst: +FindJPEG +-------- + +Find the JPEG library (libjpeg) + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``JPEG::JPEG`` + The JPEG library, if found. + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``JPEG_FOUND`` + If false, do not try to use JPEG. +``JPEG_INCLUDE_DIRS`` + where to find jpeglib.h, etc. +``JPEG_LIBRARIES`` + the libraries needed to use JPEG. +``JPEG_VERSION`` + the version of the JPEG library found + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``JPEG_INCLUDE_DIRS`` + where to find jpeglib.h, etc. +``JPEG_LIBRARY_RELEASE`` + where to find the JPEG library (optimized). +``JPEG_LIBRARY_DEBUG`` + where to find the JPEG library (debug). + +Obsolete variables +^^^^^^^^^^^^^^^^^^ + +``JPEG_INCLUDE_DIR`` + where to find jpeglib.h, etc. (same as JPEG_INCLUDE_DIRS) +``JPEG_LIBRARY`` + where to find the JPEG library. +#]=======================================================================] find_path(JPEG_INCLUDE_DIR jpeglib.h) diff --git a/Modules/FindJasper.cmake b/Modules/FindJasper.cmake index db76657..dd0e984 100644 --- a/Modules/FindJasper.cmake +++ b/Modules/FindJasper.cmake @@ -1,20 +1,21 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindJasper -# ---------- -# -# Try to find the Jasper JPEG2000 library -# -# Once done this will define -# -# :: -# -# JASPER_FOUND - system has Jasper -# JASPER_INCLUDE_DIR - the Jasper include directory -# JASPER_LIBRARIES - the libraries needed to use Jasper -# JASPER_VERSION_STRING - the version of Jasper found (since CMake 2.8.8) +#[=======================================================================[.rst: +FindJasper +---------- + +Try to find the Jasper JPEG2000 library + +Once done this will define + +:: + + JASPER_FOUND - system has Jasper + JASPER_INCLUDE_DIR - the Jasper include directory + JASPER_LIBRARIES - the libraries needed to use Jasper + JASPER_VERSION_STRING - the version of Jasper found (since CMake 2.8.8) +#]=======================================================================] find_path(JASPER_INCLUDE_DIR jasper/jasper.h) diff --git a/Modules/FindJava.cmake b/Modules/FindJava.cmake index cddc5d2..0d62cd6 100644 --- a/Modules/FindJava.cmake +++ b/Modules/FindJava.cmake @@ -1,74 +1,80 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindJava -# -------- -# -# Find Java -# -# This module finds if Java is installed and determines where the -# include files and libraries are. The caller may set variable JAVA_HOME -# to specify a Java installation prefix explicitly. -# -# See also the :module:`FindJNI` module to find Java development tools. -# -# Specify one or more of the following components as you call this find module. See example below. -# -# :: -# -# Runtime = User just want to execute some Java byte-compiled -# Development = Development tools (java, javac, javah, jar and javadoc), includes Runtime component -# IdlJ = idl compiler for Java -# JarSigner = signer tool for jar -# -# -# This module sets the following result variables: -# -# :: -# -# Java_JAVA_EXECUTABLE = the full path to the Java runtime -# Java_JAVAC_EXECUTABLE = the full path to the Java compiler -# Java_JAVAH_EXECUTABLE = the full path to the Java header generator -# Java_JAVADOC_EXECUTABLE = the full path to the Java documentation generator -# Java_IDLJ_EXECUTABLE = the full path to the Java idl compiler -# Java_JAR_EXECUTABLE = the full path to the Java archiver -# Java_JARSIGNER_EXECUTABLE = the full path to the Java jar signer -# Java_VERSION_STRING = Version of java found, eg. 1.6.0_12 -# Java_VERSION_MAJOR = The major version of the package found. -# Java_VERSION_MINOR = The minor version of the package found. -# Java_VERSION_PATCH = The patch version of the package found. -# Java_VERSION_TWEAK = The tweak version of the package found (after '_') -# Java_VERSION = This is set to: $major[.$minor[.$patch[.$tweak]]] -# -# -# -# The minimum required version of Java can be specified using the -# standard CMake syntax, e.g. find_package(Java 1.5) -# -# NOTE: ${Java_VERSION} and ${Java_VERSION_STRING} are not guaranteed to -# be identical. For example some java version may return: -# Java_VERSION_STRING = 1.5.0_17 and Java_VERSION = 1.5.0.17 -# -# another example is the Java OEM, with: Java_VERSION_STRING = 1.6.0-oem -# and Java_VERSION = 1.6.0 -# -# For these components the following variables are set: -# -# :: -# -# Java_FOUND - TRUE if all components are found. -# Java_<component>_FOUND - TRUE if <component> is found. -# -# -# -# Example Usages: -# -# :: -# -# find_package(Java) -# find_package(Java COMPONENTS Runtime) -# find_package(Java COMPONENTS Development) +#[=======================================================================[.rst: +FindJava +-------- + +Find Java + +This module finds if Java is installed and determines where the +include files and libraries are. The caller may set variable ``JAVA_HOME`` +to specify a Java installation prefix explicitly. + +See also the :module:`FindJNI` module to find Java Native Interface (JNI). + +Specify one or more of the following components as you call this find module. See example below. + +:: + + Runtime = Java Runtime Environment used to execute Java byte-compiled applications + Development = Development tools (java, javac, javah, jar and javadoc), includes Runtime component + IdlJ = Interface Description Language (IDL) to Java compiler + JarSigner = Signer and verifier tool for Java Archive (JAR) files + + +This module sets the following result variables: + +:: + + Java_JAVA_EXECUTABLE = the full path to the Java runtime + Java_JAVAC_EXECUTABLE = the full path to the Java compiler + Java_JAVAH_EXECUTABLE = the full path to the Java header generator + Java_JAVADOC_EXECUTABLE = the full path to the Java documentation generator + Java_IDLJ_EXECUTABLE = the full path to the Java idl compiler + Java_JAR_EXECUTABLE = the full path to the Java archiver + Java_JARSIGNER_EXECUTABLE = the full path to the Java jar signer + Java_VERSION_STRING = Version of java found, eg. 1.6.0_12 + Java_VERSION_MAJOR = The major version of the package found. + Java_VERSION_MINOR = The minor version of the package found. + Java_VERSION_PATCH = The patch version of the package found. + Java_VERSION_TWEAK = The tweak version of the package found (after '_') + Java_VERSION = This is set to: $major[.$minor[.$patch[.$tweak]]] + + + +The minimum required version of Java can be specified using the +:command:`find_package` syntax, e.g. + +.. code-block:: cmake + + find_package(Java 1.8) + +NOTE: ``${Java_VERSION}`` and ``${Java_VERSION_STRING}`` are not guaranteed to +be identical. For example some java version may return: +``Java_VERSION_STRING = 1.8.0_17`` and ``Java_VERSION = 1.8.0.17`` + +another example is the Java OEM, with: ``Java_VERSION_STRING = 1.8.0-oem`` +and ``Java_VERSION = 1.8.0`` + +For these components the following variables are set: + +:: + + Java_FOUND - TRUE if all components are found. + Java_<component>_FOUND - TRUE if <component> is found. + + + +Example Usages: + +:: + + find_package(Java) + find_package(Java 1.8 REQUIRED) + find_package(Java COMPONENTS Runtime) + find_package(Java COMPONENTS Development) +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindJavaCommon.cmake) diff --git a/Modules/FindKDE3.cmake b/Modules/FindKDE3.cmake index daf6818..c7ad6e1 100644 --- a/Modules/FindKDE3.cmake +++ b/Modules/FindKDE3.cmake @@ -1,141 +1,142 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindKDE3 -# -------- -# -# Find the KDE3 include and library dirs, KDE preprocessors and define a some macros -# -# -# -# This module defines the following variables: -# -# ``KDE3_DEFINITIONS`` -# compiler definitions required for compiling KDE software -# ``KDE3_INCLUDE_DIR`` -# the KDE include directory -# ``KDE3_INCLUDE_DIRS`` -# the KDE and the Qt include directory, for use with include_directories() -# ``KDE3_LIB_DIR`` -# the directory where the KDE libraries are installed, for use with link_directories() -# ``QT_AND_KDECORE_LIBS`` -# this contains both the Qt and the kdecore library -# ``KDE3_DCOPIDL_EXECUTABLE`` -# the dcopidl executable -# ``KDE3_DCOPIDL2CPP_EXECUTABLE`` -# the dcopidl2cpp executable -# ``KDE3_KCFGC_EXECUTABLE`` -# the kconfig_compiler executable -# ``KDE3_FOUND`` -# set to TRUE if all of the above has been found -# -# The following user adjustable options are provided: -# -# ``KDE3_BUILD_TESTS`` -# enable this to build KDE testcases -# -# It also adds the following macros (from KDE3Macros.cmake) SRCS_VAR is -# always the variable which contains the list of source files for your -# application or library. -# -# KDE3_AUTOMOC(file1 ... fileN) -# -# :: -# -# Call this if you want to have automatic moc file handling. -# This means if you include "foo.moc" in the source file foo.cpp -# a moc file for the header foo.h will be created automatically. -# You can set the property SKIP_AUTOMAKE using set_source_files_properties() -# to exclude some files in the list from being processed. -# -# -# -# KDE3_ADD_MOC_FILES(SRCS_VAR file1 ... fileN ) -# -# :: -# -# If you don't use the KDE3_AUTOMOC() macro, for the files -# listed here moc files will be created (named "foo.moc.cpp") -# -# -# -# KDE3_ADD_DCOP_SKELS(SRCS_VAR header1.h ... headerN.h ) -# -# :: -# -# Use this to generate DCOP skeletions from the listed headers. -# -# -# -# KDE3_ADD_DCOP_STUBS(SRCS_VAR header1.h ... headerN.h ) -# -# :: -# -# Use this to generate DCOP stubs from the listed headers. -# -# -# -# KDE3_ADD_UI_FILES(SRCS_VAR file1.ui ... fileN.ui ) -# -# :: -# -# Use this to add the Qt designer ui files to your application/library. -# -# -# -# KDE3_ADD_KCFG_FILES(SRCS_VAR file1.kcfgc ... fileN.kcfgc ) -# -# :: -# -# Use this to add KDE kconfig compiler files to your application/library. -# -# -# -# KDE3_INSTALL_LIBTOOL_FILE(target) -# -# :: -# -# This will create and install a simple libtool file for the given target. -# -# -# -# KDE3_ADD_EXECUTABLE(name file1 ... fileN ) -# -# :: -# -# Currently identical to add_executable(), may provide some advanced -# features in the future. -# -# -# -# KDE3_ADD_KPART(name [WITH_PREFIX] file1 ... fileN ) -# -# :: -# -# Create a KDE plugin (KPart, kioslave, etc.) from the given source files. -# If WITH_PREFIX is given, the resulting plugin will have the prefix "lib", -# otherwise it won't. -# It creates and installs an appropriate libtool la-file. -# -# -# -# KDE3_ADD_KDEINIT_EXECUTABLE(name file1 ... fileN ) -# -# :: -# -# Create a KDE application in the form of a module loadable via kdeinit. -# A library named kdeinit_<name> will be created and a small executable -# which links to it. -# -# -# -# The option KDE3_ENABLE_FINAL to enable all-in-one compilation is no -# longer supported. -# -# -# -# Author: Alexander Neundorf <neundorf@kde.org> +#[=======================================================================[.rst: +FindKDE3 +-------- + +Find the KDE3 include and library dirs, KDE preprocessors and define a some macros + + + +This module defines the following variables: + +``KDE3_DEFINITIONS`` + compiler definitions required for compiling KDE software +``KDE3_INCLUDE_DIR`` + the KDE include directory +``KDE3_INCLUDE_DIRS`` + the KDE and the Qt include directory, for use with include_directories() +``KDE3_LIB_DIR`` + the directory where the KDE libraries are installed, for use with link_directories() +``QT_AND_KDECORE_LIBS`` + this contains both the Qt and the kdecore library +``KDE3_DCOPIDL_EXECUTABLE`` + the dcopidl executable +``KDE3_DCOPIDL2CPP_EXECUTABLE`` + the dcopidl2cpp executable +``KDE3_KCFGC_EXECUTABLE`` + the kconfig_compiler executable +``KDE3_FOUND`` + set to TRUE if all of the above has been found + +The following user adjustable options are provided: + +``KDE3_BUILD_TESTS`` + enable this to build KDE testcases + +It also adds the following macros (from KDE3Macros.cmake) SRCS_VAR is +always the variable which contains the list of source files for your +application or library. + +KDE3_AUTOMOC(file1 ... fileN) + +:: + + Call this if you want to have automatic moc file handling. + This means if you include "foo.moc" in the source file foo.cpp + a moc file for the header foo.h will be created automatically. + You can set the property SKIP_AUTOMAKE using set_source_files_properties() + to exclude some files in the list from being processed. + + + +KDE3_ADD_MOC_FILES(SRCS_VAR file1 ... fileN ) + +:: + + If you don't use the KDE3_AUTOMOC() macro, for the files + listed here moc files will be created (named "foo.moc.cpp") + + + +KDE3_ADD_DCOP_SKELS(SRCS_VAR header1.h ... headerN.h ) + +:: + + Use this to generate DCOP skeletions from the listed headers. + + + +KDE3_ADD_DCOP_STUBS(SRCS_VAR header1.h ... headerN.h ) + +:: + + Use this to generate DCOP stubs from the listed headers. + + + +KDE3_ADD_UI_FILES(SRCS_VAR file1.ui ... fileN.ui ) + +:: + + Use this to add the Qt designer ui files to your application/library. + + + +KDE3_ADD_KCFG_FILES(SRCS_VAR file1.kcfgc ... fileN.kcfgc ) + +:: + + Use this to add KDE kconfig compiler files to your application/library. + + + +KDE3_INSTALL_LIBTOOL_FILE(target) + +:: + + This will create and install a simple libtool file for the given target. + + + +KDE3_ADD_EXECUTABLE(name file1 ... fileN ) + +:: + + Currently identical to add_executable(), may provide some advanced + features in the future. + + + +KDE3_ADD_KPART(name [WITH_PREFIX] file1 ... fileN ) + +:: + + Create a KDE plugin (KPart, kioslave, etc.) from the given source files. + If WITH_PREFIX is given, the resulting plugin will have the prefix "lib", + otherwise it won't. + It creates and installs an appropriate libtool la-file. + + + +KDE3_ADD_KDEINIT_EXECUTABLE(name file1 ... fileN ) + +:: + + Create a KDE application in the form of a module loadable via kdeinit. + A library named kdeinit_<name> will be created and a small executable + which links to it. + + + +The option KDE3_ENABLE_FINAL to enable all-in-one compilation is no +longer supported. + + + +Author: Alexander Neundorf <neundorf@kde.org> +#]=======================================================================] if(NOT UNIX AND KDE3_FIND_REQUIRED) message(FATAL_ERROR "Compiling KDE3 applications and libraries under Windows is not supported") diff --git a/Modules/FindKDE4.cmake b/Modules/FindKDE4.cmake index bb98e53..c04804b 100644 --- a/Modules/FindKDE4.cmake +++ b/Modules/FindKDE4.cmake @@ -1,29 +1,30 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindKDE4 -# -------- -# -# -# -# Find KDE4 and provide all necessary variables and macros to compile -# software for it. It looks for KDE 4 in the following directories in -# the given order: -# -# :: -# -# CMAKE_INSTALL_PREFIX -# KDEDIRS -# /opt/kde4 -# -# -# -# Please look in FindKDE4Internal.cmake and KDE4Macros.cmake for more -# information. They are installed with the KDE 4 libraries in -# $KDEDIRS/share/apps/cmake/modules/. -# -# Author: Alexander Neundorf <neundorf@kde.org> +#[=======================================================================[.rst: +FindKDE4 +-------- + + + +Find KDE4 and provide all necessary variables and macros to compile +software for it. It looks for KDE 4 in the following directories in +the given order: + +:: + + CMAKE_INSTALL_PREFIX + KDEDIRS + /opt/kde4 + + + +Please look in FindKDE4Internal.cmake and KDE4Macros.cmake for more +information. They are installed with the KDE 4 libraries in +$KDEDIRS/share/apps/cmake/modules/. + +Author: Alexander Neundorf <neundorf@kde.org> +#]=======================================================================] # If Qt3 has already been found, fail. if(QT_QT_LIBRARY) diff --git a/Modules/FindLAPACK.cmake b/Modules/FindLAPACK.cmake index a3c87f8..31e5620b 100644 --- a/Modules/FindLAPACK.cmake +++ b/Modules/FindLAPACK.cmake @@ -1,48 +1,49 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindLAPACK -# ---------- -# -# Find LAPACK library -# -# This module finds an installed fortran library that implements the -# LAPACK linear-algebra interface (see http://www.netlib.org/lapack/). -# -# The approach follows that taken for the autoconf macro file, -# acx_lapack.m4 (distributed at -# http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html). -# -# This module sets the following variables: -# -# :: -# -# LAPACK_FOUND - set to true if a library implementing the LAPACK interface -# is found -# LAPACK_LINKER_FLAGS - uncached list of required linker flags (excluding -l -# and -L). -# LAPACK_LIBRARIES - uncached list of libraries (using full path name) to -# link against to use LAPACK -# LAPACK95_LIBRARIES - uncached list of libraries (using full path name) to -# link against to use LAPACK95 -# LAPACK95_FOUND - set to true if a library implementing the LAPACK f95 -# interface is found -# BLA_STATIC if set on this determines what kind of linkage we do (static) -# BLA_VENDOR if set checks only the specified vendor, if not set checks -# all the possibilities -# BLA_F95 if set on tries to find the f95 interfaces for BLAS/LAPACK -# -# List of vendors (BLA_VENDOR) valid in this module: -# -# * Intel(mkl) -# * OpenBLAS -# * FLAME -# * ACML -# * Apple -# * NAS -# * Generic -# +#[=======================================================================[.rst: +FindLAPACK +---------- + +Find LAPACK library + +This module finds an installed fortran library that implements the +LAPACK linear-algebra interface (see http://www.netlib.org/lapack/). + +The approach follows that taken for the autoconf macro file, +acx_lapack.m4 (distributed at +http://ac-archive.sourceforge.net/ac-archive/acx_lapack.html). + +This module sets the following variables: + +:: + + LAPACK_FOUND - set to true if a library implementing the LAPACK interface + is found + LAPACK_LINKER_FLAGS - uncached list of required linker flags (excluding -l + and -L). + LAPACK_LIBRARIES - uncached list of libraries (using full path name) to + link against to use LAPACK + LAPACK95_LIBRARIES - uncached list of libraries (using full path name) to + link against to use LAPACK95 + LAPACK95_FOUND - set to true if a library implementing the LAPACK f95 + interface is found + BLA_STATIC if set on this determines what kind of linkage we do (static) + BLA_VENDOR if set checks only the specified vendor, if not set checks + all the possibilities + BLA_F95 if set on tries to find the f95 interfaces for BLAS/LAPACK + +List of vendors (BLA_VENDOR) valid in this module: + +* Intel(mkl) +* OpenBLAS +* FLAME +* ACML +* Apple +* NAS +* Generic + +#]=======================================================================] set(_lapack_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) @@ -278,6 +279,12 @@ if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All") find_package(Threads REQUIRED) endif() + if (BLA_VENDOR MATCHES "_64ilp") + set(BLAS_mkl_ILP_MODE "ilp64") + else () + set(BLAS_mkl_ILP_MODE "lp64") + endif () + set(LAPACK_SEARCH_LIBS "") if (BLA_F95) @@ -292,7 +299,7 @@ if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All") list(APPEND LAPACK_SEARCH_LIBS "mkl_intel_c") list(APPEND LAPACK_SEARCH_LIBS - "mkl_intel_lp64") + "mkl_intel_${BLAS_mkl_ILP_MODE}") else() set(LAPACK_mkl_SEARCH_SYMBOL "cheev") set(_LIBRARIES LAPACK_LIBRARIES) @@ -303,7 +310,7 @@ if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All") "mkl_lapack") # new >= 10.3 list(APPEND LAPACK_SEARCH_LIBS - "mkl_gf_lp64") + "mkl_gf_${BLAS_mkl_ILP_MODE}") endif() # First try empty lapack libs @@ -332,6 +339,8 @@ if (BLA_VENDOR MATCHES "Intel" OR BLA_VENDOR STREQUAL "All") ) endif () endforeach () + + unset(BLAS_mkl_ILP_MODE) endif () endif() else() diff --git a/Modules/FindLATEX.cmake b/Modules/FindLATEX.cmake index d1f4fa4..01f4793 100644 --- a/Modules/FindLATEX.cmake +++ b/Modules/FindLATEX.cmake @@ -1,56 +1,57 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindLATEX -# --------- -# -# Find Latex -# -# This module finds an installed Latex and determines the location -# of the compiler. Additionally the module looks for Latex-related -# software like BibTeX. -# -# This module sets the following result variables:: -# -# LATEX_FOUND: whether found Latex and requested components -# LATEX_<component>_FOUND: whether found <component> -# LATEX_COMPILER: path to the LaTeX compiler -# PDFLATEX_COMPILER: path to the PdfLaTeX compiler -# XELATEX_COMPILER: path to the XeLaTeX compiler -# LUALATEX_COMPILER: path to the LuaLaTeX compiler -# BIBTEX_COMPILER: path to the BibTeX compiler -# BIBER_COMPILER: path to the Biber compiler -# MAKEINDEX_COMPILER: path to the MakeIndex compiler -# XINDY_COMPILER: path to the xindy compiler -# DVIPS_CONVERTER: path to the DVIPS converter -# DVIPDF_CONVERTER: path to the DVIPDF converter -# PS2PDF_CONVERTER: path to the PS2PDF converter -# PDFTOPS_CONVERTER: path to the pdftops converter -# LATEX2HTML_CONVERTER: path to the LaTeX2Html converter -# HTLATEX_COMPILER: path to the htlatex compiler -# -# Possible components are:: -# -# PDFLATEX -# XELATEX -# LUALATEX -# BIBTEX -# BIBER -# MAKEINDEX -# XINDY -# DVIPS -# DVIPDF -# PS2PDF -# PDFTOPS -# LATEX2HTML -# HTLATEX -# -# Example Usages:: -# -# find_package(LATEX) -# find_package(LATEX COMPONENTS PDFLATEX) -# find_package(LATEX COMPONENTS BIBTEX PS2PDF) +#[=======================================================================[.rst: +FindLATEX +--------- + +Find Latex + +This module finds an installed Latex and determines the location +of the compiler. Additionally the module looks for Latex-related +software like BibTeX. + +This module sets the following result variables:: + + LATEX_FOUND: whether found Latex and requested components + LATEX_<component>_FOUND: whether found <component> + LATEX_COMPILER: path to the LaTeX compiler + PDFLATEX_COMPILER: path to the PdfLaTeX compiler + XELATEX_COMPILER: path to the XeLaTeX compiler + LUALATEX_COMPILER: path to the LuaLaTeX compiler + BIBTEX_COMPILER: path to the BibTeX compiler + BIBER_COMPILER: path to the Biber compiler + MAKEINDEX_COMPILER: path to the MakeIndex compiler + XINDY_COMPILER: path to the xindy compiler + DVIPS_CONVERTER: path to the DVIPS converter + DVIPDF_CONVERTER: path to the DVIPDF converter + PS2PDF_CONVERTER: path to the PS2PDF converter + PDFTOPS_CONVERTER: path to the pdftops converter + LATEX2HTML_CONVERTER: path to the LaTeX2Html converter + HTLATEX_COMPILER: path to the htlatex compiler + +Possible components are:: + + PDFLATEX + XELATEX + LUALATEX + BIBTEX + BIBER + MAKEINDEX + XINDY + DVIPS + DVIPDF + PS2PDF + PDFTOPS + LATEX2HTML + HTLATEX + +Example Usages:: + + find_package(LATEX) + find_package(LATEX COMPONENTS PDFLATEX) + find_package(LATEX COMPONENTS BIBTEX PS2PDF) +#]=======================================================================] if (WIN32) # Try to find the MikTex binary path (look for its package manager). diff --git a/Modules/FindLTTngUST.cmake b/Modules/FindLTTngUST.cmake index 00d5e7a..a074187 100644 --- a/Modules/FindLTTngUST.cmake +++ b/Modules/FindLTTngUST.cmake @@ -1,37 +1,38 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindLTTngUST -# ------------ -# -# This module finds the `LTTng-UST <http://lttng.org/>`__ library. -# -# Imported target -# ^^^^^^^^^^^^^^^ -# -# This module defines the following :prop_tgt:`IMPORTED` target: -# -# ``LTTng::UST`` -# The LTTng-UST library, if found -# -# Result variables -# ^^^^^^^^^^^^^^^^ -# -# This module sets the following -# -# ``LTTNGUST_FOUND`` -# ``TRUE`` if system has LTTng-UST -# ``LTTNGUST_INCLUDE_DIRS`` -# The LTTng-UST include directories -# ``LTTNGUST_LIBRARIES`` -# The libraries needed to use LTTng-UST -# ``LTTNGUST_VERSION_STRING`` -# The LTTng-UST version -# ``LTTNGUST_HAS_TRACEF`` -# ``TRUE`` if the ``tracef()`` API is available in the system's LTTng-UST -# ``LTTNGUST_HAS_TRACELOG`` -# ``TRUE`` if the ``tracelog()`` API is available in the system's LTTng-UST +#[=======================================================================[.rst: +FindLTTngUST +------------ + +This module finds the `LTTng-UST <http://lttng.org/>`__ library. + +Imported target +^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` target: + +``LTTng::UST`` + The LTTng-UST library, if found + +Result variables +^^^^^^^^^^^^^^^^ + +This module sets the following + +``LTTNGUST_FOUND`` + ``TRUE`` if system has LTTng-UST +``LTTNGUST_INCLUDE_DIRS`` + The LTTng-UST include directories +``LTTNGUST_LIBRARIES`` + The libraries needed to use LTTng-UST +``LTTNGUST_VERSION_STRING`` + The LTTng-UST version +``LTTNGUST_HAS_TRACEF`` + ``TRUE`` if the ``tracef()`` API is available in the system's LTTng-UST +``LTTNGUST_HAS_TRACELOG`` + ``TRUE`` if the ``tracelog()`` API is available in the system's LTTng-UST +#]=======================================================================] find_path(LTTNGUST_INCLUDE_DIRS NAMES lttng/tracepoint.h) find_library(LTTNGUST_LIBRARIES NAMES lttng-ust) diff --git a/Modules/FindLibArchive.cmake b/Modules/FindLibArchive.cmake index 38e512f..34fc2e2 100644 --- a/Modules/FindLibArchive.cmake +++ b/Modules/FindLibArchive.cmake @@ -1,20 +1,21 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindLibArchive -# -------------- -# -# Find libarchive library and headers -# -# The module defines the following variables: -# -# :: -# -# LibArchive_FOUND - true if libarchive was found -# LibArchive_INCLUDE_DIRS - include search path -# LibArchive_LIBRARIES - libraries to link -# LibArchive_VERSION - libarchive 3-component version number +#[=======================================================================[.rst: +FindLibArchive +-------------- + +Find libarchive library and headers + +The module defines the following variables: + +:: + + LibArchive_FOUND - true if libarchive was found + LibArchive_INCLUDE_DIRS - include search path + LibArchive_LIBRARIES - libraries to link + LibArchive_VERSION - libarchive 3-component version number +#]=======================================================================] find_path(LibArchive_INCLUDE_DIR NAMES archive.h diff --git a/Modules/FindLibLZMA.cmake b/Modules/FindLibLZMA.cmake index d203eaf..6d30e57 100644 --- a/Modules/FindLibLZMA.cmake +++ b/Modules/FindLibLZMA.cmake @@ -1,26 +1,27 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindLibLZMA -# ----------- -# -# Find LibLZMA -# -# Find LibLZMA headers and library -# -# :: -# -# LIBLZMA_FOUND - True if liblzma is found. -# LIBLZMA_INCLUDE_DIRS - Directory where liblzma headers are located. -# LIBLZMA_LIBRARIES - Lzma libraries to link against. -# LIBLZMA_HAS_AUTO_DECODER - True if lzma_auto_decoder() is found (required). -# LIBLZMA_HAS_EASY_ENCODER - True if lzma_easy_encoder() is found (required). -# LIBLZMA_HAS_LZMA_PRESET - True if lzma_lzma_preset() is found (required). -# LIBLZMA_VERSION_MAJOR - The major version of lzma -# LIBLZMA_VERSION_MINOR - The minor version of lzma -# LIBLZMA_VERSION_PATCH - The patch version of lzma -# LIBLZMA_VERSION_STRING - version number as a string (ex: "5.0.3") +#[=======================================================================[.rst: +FindLibLZMA +----------- + +Find LibLZMA + +Find LibLZMA headers and library + +:: + + LIBLZMA_FOUND - True if liblzma is found. + LIBLZMA_INCLUDE_DIRS - Directory where liblzma headers are located. + LIBLZMA_LIBRARIES - Lzma libraries to link against. + LIBLZMA_HAS_AUTO_DECODER - True if lzma_auto_decoder() is found (required). + LIBLZMA_HAS_EASY_ENCODER - True if lzma_easy_encoder() is found (required). + LIBLZMA_HAS_LZMA_PRESET - True if lzma_lzma_preset() is found (required). + LIBLZMA_VERSION_MAJOR - The major version of lzma + LIBLZMA_VERSION_MINOR - The minor version of lzma + LIBLZMA_VERSION_PATCH - The patch version of lzma + LIBLZMA_VERSION_STRING - version number as a string (ex: "5.0.3") +#]=======================================================================] find_path(LIBLZMA_INCLUDE_DIR lzma.h ) find_library(LIBLZMA_LIBRARY NAMES lzma liblzma) diff --git a/Modules/FindLibXml2.cmake b/Modules/FindLibXml2.cmake index 615de49..1a2af16 100644 --- a/Modules/FindLibXml2.cmake +++ b/Modules/FindLibXml2.cmake @@ -1,47 +1,48 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindLibXml2 -# ----------- -# -# Find the XML processing library (libxml2). -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines :prop_tgt:`IMPORTED` target ``LibXml2::LibXml2``, if -# libxml2 has been found. -# -# Result variables -# ^^^^^^^^^^^^^^^^ -# -# This module will set the following variables in your project: -# -# ``LIBXML2_FOUND`` -# true if libxml2 headers and libraries were found -# ``LIBXML2_INCLUDE_DIR`` -# the directory containing LibXml2 headers -# ``LIBXML2_INCLUDE_DIRS`` -# list of the include directories needed to use LibXml2 -# ``LIBXML2_LIBRARIES`` -# LibXml2 libraries to be linked -# ``LIBXML2_DEFINITIONS`` -# the compiler switches required for using LibXml2 -# ``LIBXML2_XMLLINT_EXECUTABLE`` -# path to the XML checking tool xmllint coming with LibXml2 -# ``LIBXML2_VERSION_STRING`` -# the version of LibXml2 found (since CMake 2.8.8) -# -# Cache variables -# ^^^^^^^^^^^^^^^ -# -# The following cache variables may also be set: -# -# ``LIBXML2_INCLUDE_DIR`` -# the directory containing LibXml2 headers -# ``LIBXML2_LIBRARY`` -# path to the LibXml2 library +#[=======================================================================[.rst: +FindLibXml2 +----------- + +Find the XML processing library (libxml2). + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``LibXml2::LibXml2``, if +libxml2 has been found. + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``LIBXML2_FOUND`` + true if libxml2 headers and libraries were found +``LIBXML2_INCLUDE_DIR`` + the directory containing LibXml2 headers +``LIBXML2_INCLUDE_DIRS`` + list of the include directories needed to use LibXml2 +``LIBXML2_LIBRARIES`` + LibXml2 libraries to be linked +``LIBXML2_DEFINITIONS`` + the compiler switches required for using LibXml2 +``LIBXML2_XMLLINT_EXECUTABLE`` + path to the XML checking tool xmllint coming with LibXml2 +``LIBXML2_VERSION_STRING`` + the version of LibXml2 found (since CMake 2.8.8) + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``LIBXML2_INCLUDE_DIR`` + the directory containing LibXml2 headers +``LIBXML2_LIBRARY`` + path to the LibXml2 library +#]=======================================================================] # use pkg-config to get the directories and then use these values # in the find_path() and find_library() calls diff --git a/Modules/FindLibXslt.cmake b/Modules/FindLibXslt.cmake index abd1963..4cca64f 100644 --- a/Modules/FindLibXslt.cmake +++ b/Modules/FindLibXslt.cmake @@ -1,29 +1,30 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindLibXslt -# ----------- -# -# Try to find the LibXslt library -# -# Once done this will define -# -# :: -# -# LIBXSLT_FOUND - system has LibXslt -# LIBXSLT_INCLUDE_DIR - the LibXslt include directory -# LIBXSLT_LIBRARIES - Link these to LibXslt -# LIBXSLT_DEFINITIONS - Compiler switches required for using LibXslt -# LIBXSLT_VERSION_STRING - version of LibXslt found (since CMake 2.8.8) -# -# Additionally, the following two variables are set (but not required -# for using xslt): -# -# ``LIBXSLT_EXSLT_LIBRARIES`` -# Link to these if you need to link against the exslt library. -# ``LIBXSLT_XSLTPROC_EXECUTABLE`` -# Contains the full path to the xsltproc executable if found. +#[=======================================================================[.rst: +FindLibXslt +----------- + +Try to find the LibXslt library + +Once done this will define + +:: + + LIBXSLT_FOUND - system has LibXslt + LIBXSLT_INCLUDE_DIR - the LibXslt include directory + LIBXSLT_LIBRARIES - Link these to LibXslt + LIBXSLT_DEFINITIONS - Compiler switches required for using LibXslt + LIBXSLT_VERSION_STRING - version of LibXslt found (since CMake 2.8.8) + +Additionally, the following two variables are set (but not required +for using xslt): + +``LIBXSLT_EXSLT_LIBRARIES`` + Link to these if you need to link against the exslt library. +``LIBXSLT_XSLTPROC_EXECUTABLE`` + Contains the full path to the xsltproc executable if found. +#]=======================================================================] # use pkg-config to get the directories and then use these values # in the find_path() and find_library() calls diff --git a/Modules/FindLibinput.cmake b/Modules/FindLibinput.cmake new file mode 100644 index 0000000..c1fe455 --- /dev/null +++ b/Modules/FindLibinput.cmake @@ -0,0 +1,82 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindLibinput +------------ + +Find libinput headers and library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +``Libinput::Libinput`` + The libinput library, if found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables in your project: + +``Libinput_FOUND`` + true if (the requested version of) libinput is available. +``Libinput_VERSION`` + the version of libinput. +``Libinput_LIBRARIES`` + the libraries to link against to use libinput. +``Libinput_INCLUDE_DIRS`` + where to find the libinput headers. +``Libinput_COMPILE_OPTIONS`` + this should be passed to target_compile_options(), if the + target is not used for linking + +#]=======================================================================] + + +# Use pkg-config to get the directories and then use these values +# in the FIND_PATH() and FIND_LIBRARY() calls +find_package(PkgConfig QUIET) +pkg_check_modules(PKG_Libinput QUIET libinput) + +set(Libinput_COMPILE_OPTIONS ${PKG_Libinput_CFLAGS_OTHER}) +set(Libinput_VERSION ${PKG_Libinput_VERSION}) + +find_path(Libinput_INCLUDE_DIR + NAMES + libinput.h + HINTS + ${PKG_Libinput_INCLUDE_DIRS} +) +find_library(Libinput_LIBRARY + NAMES + input + HINTS + ${PKG_Libinput_LIBRARY_DIRS} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Libinput + FOUND_VAR + Libinput_FOUND + REQUIRED_VARS + Libinput_LIBRARY + Libinput_INCLUDE_DIR + VERSION_VAR + Libinput_VERSION +) + +if(Libinput_FOUND AND NOT TARGET Libinput::Libinput) + add_library(Libinput::Libinput UNKNOWN IMPORTED) + set_target_properties(Libinput::Libinput PROPERTIES + IMPORTED_LOCATION "${Libinput_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${Libinput_COMPILE_OPTIONS}" + INTERFACE_INCLUDE_DIRECTORIES "${Libinput_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced(Libinput_LIBRARY Libinput_INCLUDE_DIR) + +if(Libinput_FOUND) + set(Libinput_LIBRARIES ${Libinput_LIBRARY}) + set(Libinput_INCLUDE_DIRS ${Libinput_INCLUDE_DIR}) +endif() diff --git a/Modules/FindLua.cmake b/Modules/FindLua.cmake index b57a46e..eb3b5fb 100644 --- a/Modules/FindLua.cmake +++ b/Modules/FindLua.cmake @@ -1,40 +1,41 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindLua -# ------- -# -# -# -# Locate Lua library This module defines -# -# :: -# -# LUA_FOUND - if false, do not try to link to Lua -# LUA_LIBRARIES - both lua and lualib -# LUA_INCLUDE_DIR - where to find lua.h -# LUA_VERSION_STRING - the version of Lua found -# LUA_VERSION_MAJOR - the major version of Lua -# LUA_VERSION_MINOR - the minor version of Lua -# LUA_VERSION_PATCH - the patch version of Lua -# -# -# -# Note that the expected include convention is -# -# :: -# -# #include "lua.h" -# -# and not -# -# :: -# -# #include <lua/lua.h> -# -# This is because, the lua location is not standardized and may exist in -# locations other than lua/ +#[=======================================================================[.rst: +FindLua +------- + + + +Locate Lua library This module defines + +:: + + LUA_FOUND - if false, do not try to link to Lua + LUA_LIBRARIES - both lua and lualib + LUA_INCLUDE_DIR - where to find lua.h + LUA_VERSION_STRING - the version of Lua found + LUA_VERSION_MAJOR - the major version of Lua + LUA_VERSION_MINOR - the minor version of Lua + LUA_VERSION_PATCH - the patch version of Lua + + + +Note that the expected include convention is + +:: + + #include "lua.h" + +and not + +:: + + #include <lua/lua.h> + +This is because, the lua location is not standardized and may exist in +locations other than lua/ +#]=======================================================================] cmake_policy(PUSH) # Policies apply to functions at definition-time cmake_policy(SET CMP0012 NEW) # For while(TRUE) @@ -42,13 +43,6 @@ cmake_policy(SET CMP0012 NEW) # For while(TRUE) unset(_lua_include_subdirs) unset(_lua_library_names) unset(_lua_append_versions) -set(_lua_additional_paths - ~/Library/Frameworks - /Library/Frameworks - /sw # Fink - /opt/local # DarwinPorts - /opt/csw # Blastwave - /opt) # this is a function only to have all the variables inside go away automatically function(_lua_get_versions) @@ -161,7 +155,6 @@ function(_lua_find_header) HINTS ENV LUA_DIR PATH_SUFFIXES ${subdir} - PATHS ${_lua_additional_paths} ) if (LUA_INCLUDE_DIR) break() @@ -206,10 +199,10 @@ endif () find_library(LUA_LIBRARY NAMES ${_lua_library_names} lua + NAMES_PER_DIR HINTS ENV LUA_DIR PATH_SUFFIXES lib - PATHS ${_lua_additional_paths} ) unset(_lua_library_names) diff --git a/Modules/FindLua50.cmake b/Modules/FindLua50.cmake index 315f301..aafc056 100644 --- a/Modules/FindLua50.cmake +++ b/Modules/FindLua50.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindLua50 -# --------- -# -# -# -# Locate Lua library This module defines -# -# :: -# -# LUA50_FOUND, if false, do not try to link to Lua -# LUA_LIBRARIES, both lua and lualib -# LUA_INCLUDE_DIR, where to find lua.h and lualib.h (and probably lauxlib.h) -# -# -# -# Note that the expected include convention is -# -# :: -# -# #include "lua.h" -# -# and not -# -# :: -# -# #include <lua/lua.h> -# -# This is because, the lua location is not standardized and may exist in -# locations other than lua/ +#[=======================================================================[.rst: +FindLua50 +--------- + + + +Locate Lua library This module defines + +:: + + LUA50_FOUND, if false, do not try to link to Lua + LUA_LIBRARIES, both lua and lualib + LUA_INCLUDE_DIR, where to find lua.h and lualib.h (and probably lauxlib.h) + + + +Note that the expected include convention is + +:: + + #include "lua.h" + +and not + +:: + + #include <lua/lua.h> + +This is because, the lua location is not standardized and may exist in +locations other than lua/ +#]=======================================================================] find_path(LUA_INCLUDE_DIR lua.h HINTS diff --git a/Modules/FindLua51.cmake b/Modules/FindLua51.cmake index f2b2322..31eaf87 100644 --- a/Modules/FindLua51.cmake +++ b/Modules/FindLua51.cmake @@ -1,37 +1,38 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindLua51 -# --------- -# -# -# -# Locate Lua library This module defines -# -# :: -# -# LUA51_FOUND, if false, do not try to link to Lua -# LUA_LIBRARIES -# LUA_INCLUDE_DIR, where to find lua.h -# LUA_VERSION_STRING, the version of Lua found (since CMake 2.8.8) -# -# -# -# Note that the expected include convention is -# -# :: -# -# #include "lua.h" -# -# and not -# -# :: -# -# #include <lua/lua.h> -# -# This is because, the lua location is not standardized and may exist in -# locations other than lua/ +#[=======================================================================[.rst: +FindLua51 +--------- + + + +Locate Lua library This module defines + +:: + + LUA51_FOUND, if false, do not try to link to Lua + LUA_LIBRARIES + LUA_INCLUDE_DIR, where to find lua.h + LUA_VERSION_STRING, the version of Lua found (since CMake 2.8.8) + + + +Note that the expected include convention is + +:: + + #include "lua.h" + +and not + +:: + + #include <lua/lua.h> + +This is because, the lua location is not standardized and may exist in +locations other than lua/ +#]=======================================================================] find_path(LUA_INCLUDE_DIR lua.h HINTS diff --git a/Modules/FindMFC.cmake b/Modules/FindMFC.cmake index 3baaf32..9738ac5 100644 --- a/Modules/FindMFC.cmake +++ b/Modules/FindMFC.cmake @@ -1,20 +1,21 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindMFC -# ------- -# -# Find MFC on Windows -# -# Find the native MFC - i.e. decide if an application can link to the -# MFC libraries. -# -# :: -# -# MFC_FOUND - Was MFC support found -# -# You don't need to include anything or link anything to use it. +#[=======================================================================[.rst: +FindMFC +------- + +Find MFC on Windows + +Find the native MFC - i.e. decide if an application can link to the +MFC libraries. + +:: + + MFC_FOUND - Was MFC support found + +You don't need to include anything or link anything to use it. +#]=======================================================================] # Assume no MFC support set(MFC_FOUND "NO") diff --git a/Modules/FindMPEG.cmake b/Modules/FindMPEG.cmake index 850a57e..e5a80e3 100644 --- a/Modules/FindMPEG.cmake +++ b/Modules/FindMPEG.cmake @@ -1,26 +1,27 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindMPEG -# -------- -# -# Find the native MPEG includes and library -# -# This module defines -# -# :: -# -# MPEG_INCLUDE_DIR, where to find MPEG.h, etc. -# MPEG_LIBRARIES, the libraries required to use MPEG. -# MPEG_FOUND, If false, do not try to use MPEG. -# -# also defined, but not for general use are -# -# :: -# -# MPEG_mpeg2_LIBRARY, where to find the MPEG library. -# MPEG_vo_LIBRARY, where to find the vo library. +#[=======================================================================[.rst: +FindMPEG +-------- + +Find the native MPEG includes and library + +This module defines + +:: + + MPEG_INCLUDE_DIR, where to find MPEG.h, etc. + MPEG_LIBRARIES, the libraries required to use MPEG. + MPEG_FOUND, If false, do not try to use MPEG. + +also defined, but not for general use are + +:: + + MPEG_mpeg2_LIBRARY, where to find the MPEG library. + MPEG_vo_LIBRARY, where to find the vo library. +#]=======================================================================] find_path(MPEG_INCLUDE_DIR NAMES mpeg2.h mpeg2dec/mpeg2.h mpeg2dec/include/video_out.h) diff --git a/Modules/FindMPEG2.cmake b/Modules/FindMPEG2.cmake index f9ccd6a..763d86a 100644 --- a/Modules/FindMPEG2.cmake +++ b/Modules/FindMPEG2.cmake @@ -1,26 +1,27 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindMPEG2 -# --------- -# -# Find the native MPEG2 includes and library -# -# This module defines -# -# :: -# -# MPEG2_INCLUDE_DIR, path to mpeg2dec/mpeg2.h, etc. -# MPEG2_LIBRARIES, the libraries required to use MPEG2. -# MPEG2_FOUND, If false, do not try to use MPEG2. -# -# also defined, but not for general use are -# -# :: -# -# MPEG2_mpeg2_LIBRARY, where to find the MPEG2 library. -# MPEG2_vo_LIBRARY, where to find the vo library. +#[=======================================================================[.rst: +FindMPEG2 +--------- + +Find the native MPEG2 includes and library + +This module defines + +:: + + MPEG2_INCLUDE_DIR, path to mpeg2dec/mpeg2.h, etc. + MPEG2_LIBRARIES, the libraries required to use MPEG2. + MPEG2_FOUND, If false, do not try to use MPEG2. + +also defined, but not for general use are + +:: + + MPEG2_mpeg2_LIBRARY, where to find the MPEG2 library. + MPEG2_vo_LIBRARY, where to find the vo library. +#]=======================================================================] find_path(MPEG2_INCLUDE_DIR NAMES mpeg2.h mpeg2dec/mpeg2.h) diff --git a/Modules/FindMPI.cmake b/Modules/FindMPI.cmake index bfcd876..8c45a8c 100644 --- a/Modules/FindMPI.cmake +++ b/Modules/FindMPI.cmake @@ -1,247 +1,248 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindMPI -# ------- -# -# Find a Message Passing Interface (MPI) implementation. -# -# The Message Passing Interface (MPI) is a library used to write -# high-performance distributed-memory parallel applications, and is -# typically deployed on a cluster. MPI is a standard interface (defined -# by the MPI forum) for which many implementations are available. -# -# Variables for using MPI -# ^^^^^^^^^^^^^^^^^^^^^^^ -# -# The module exposes the components ``C``, ``CXX``, ``MPICXX`` and ``Fortran``. -# Each of these controls the various MPI languages to search for. -# The difference between ``CXX`` and ``MPICXX`` is that ``CXX`` refers to the -# MPI C API being usable from C++, whereas ``MPICXX`` refers to the MPI-2 C++ API -# that was removed again in MPI-3. -# -# Depending on the enabled components the following variables will be set: -# -# ``MPI_FOUND`` -# Variable indicating that MPI settings for all requested languages have been found. -# If no components are specified, this is true if MPI settings for all enabled languages -# were detected. Note that the ``MPICXX`` component does not affect this variable. -# ``MPI_VERSION`` -# Minimal version of MPI detected among the requested languages, or all enabled languages -# if no components were specified. -# -# This module will set the following variables per language in your -# project, where ``<lang>`` is one of C, CXX, or Fortran: -# -# ``MPI_<lang>_FOUND`` -# Variable indicating the MPI settings for ``<lang>`` were found and that -# simple MPI test programs compile with the provided settings. -# ``MPI_<lang>_COMPILER`` -# MPI compiler for ``<lang>`` if such a program exists. -# ``MPI_<lang>_COMPILE_OPTIONS`` -# Compilation options for MPI programs in ``<lang>``, given as a :ref:`;-list <CMake Language Lists>`. -# ``MPI_<lang>_COMPILE_DEFINITIONS`` -# Compilation definitions for MPI programs in ``<lang>``, given as a :ref:`;-list <CMake Language Lists>`. -# ``MPI_<lang>_INCLUDE_DIRS`` -# Include path(s) for MPI header. -# ``MPI_<lang>_LINK_FLAGS`` -# Linker flags for MPI programs. -# ``MPI_<lang>_LIBRARIES`` -# All libraries to link MPI programs against. -# -# Additionally, the following :prop_tgt:`IMPORTED` targets are defined: -# -# ``MPI::MPI_<lang>`` -# Target for using MPI from ``<lang>``. -# -# The following variables indicating which bindings are present will be defined: -# -# ``MPI_MPICXX_FOUND`` -# Variable indicating whether the MPI-2 C++ bindings are present (introduced in MPI-2, removed with MPI-3). -# ``MPI_Fortran_HAVE_F77_HEADER`` -# True if the Fortran 77 header ``mpif.h`` is available. -# ``MPI_Fortran_HAVE_F90_MODULE`` -# True if the Fortran 90 module ``mpi`` can be used for accessing MPI (MPI-2 and higher only). -# ``MPI_Fortran_HAVE_F08_MODULE`` -# True if the Fortran 2008 ``mpi_f08`` is available to MPI programs (MPI-3 and higher only). -# -# If possible, the MPI version will be determined by this module. The facilities to detect the MPI version -# were introduced with MPI-1.2, and therefore cannot be found for older MPI versions. -# -# ``MPI_<lang>_VERSION_MAJOR`` -# Major version of MPI implemented for ``<lang>`` by the MPI distribution. -# ``MPI_<lang>_VERSION_MINOR`` -# Minor version of MPI implemented for ``<lang>`` by the MPI distribution. -# ``MPI_<lang>_VERSION`` -# MPI version implemented for ``<lang>`` by the MPI distribution. -# -# Note that there's no variable for the C bindings being accessible through ``mpi.h``, since the MPI standards -# always have required this binding to work in both C and C++ code. -# -# For running MPI programs, the module sets the following variables -# -# ``MPIEXEC_EXECUTABLE`` -# Executable for running MPI programs, if such exists. -# ``MPIEXEC_NUMPROC_FLAG`` -# Flag to pass to ``mpiexec`` before giving it the number of processors to run on. -# ``MPIEXEC_MAX_NUMPROCS`` -# Number of MPI processors to utilize. Defaults to the number -# of processors detected on the host system. -# ``MPIEXEC_PREFLAGS`` -# Flags to pass to ``mpiexec`` directly before the executable to run. -# ``MPIEXEC_POSTFLAGS`` -# Flags to pass to ``mpiexec`` after other flags. -# -# Variables for locating MPI -# ^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# This module performs a three step search for an MPI implementation: -# -# 1. Check if the compiler has MPI support built-in. This is the case if the user passed a -# compiler wrapper as ``CMAKE_<LANG>_COMPILER`` or if they're on a Cray system. -# 2. Attempt to find an MPI compiler wrapper and determine the compiler information from it. -# 3. Try to find an MPI implementation that does not ship such a wrapper by guessing settings. -# Currently, only Microsoft MPI and MPICH2 on Windows are supported. -# -# For controlling the second step, the following variables may be set: -# -# ``MPI_<lang>_COMPILER`` -# Search for the specified compiler wrapper and use it. -# ``MPI_<lang>_COMPILER_FLAGS`` -# Flags to pass to the MPI compiler wrapper during interrogation. Some compiler wrappers -# support linking debug or tracing libraries if a specific flag is passed and this variable -# may be used to obtain them. -# ``MPI_COMPILER_FLAGS`` -# Used to initialize ``MPI_<lang>_COMPILER_FLAGS`` if no language specific flag has been given. -# Empty by default. -# ``MPI_EXECUTABLE_SUFFIX`` -# A suffix which is appended to all names that are being looked for. For instance you may set this -# to ``.mpich`` or ``.openmpi`` to prefer the one or the other on Debian and its derivatives. -# -# In order to control the guessing step, the following variable may be set: -# -# ``MPI_GUESS_LIBRARY_NAME`` -# Valid values are ``MSMPI`` and ``MPICH2``. If set, only the given library will be searched for. -# By default, ``MSMPI`` will be preferred over ``MPICH2`` if both are available. -# This also sets ``MPI_SKIP_COMPILER_WRAPPER`` to ``true``, which may be overridden. -# -# Each of the search steps may be skipped with the following control variables: -# -# ``MPI_ASSUME_NO_BUILTIN_MPI`` -# If true, the module assumes that the compiler itself does not provide an MPI implementation and -# skips to step 2. -# ``MPI_SKIP_COMPILER_WRAPPER`` -# If true, no compiler wrapper will be searched for. -# ``MPI_SKIP_GUESSING`` -# If true, the guessing step will be skipped. -# -# Additionally, the following control variable is available to change search behavior: -# -# ``MPI_CXX_SKIP_MPICXX`` -# Add some definitions that will disable the MPI-2 C++ bindings. -# Currently supported are MPICH, Open MPI, Platform MPI and derivatives thereof, -# for example MVAPICH or Intel MPI. -# -# If the find procedure fails for a variable ``MPI_<lang>_WORKS``, then the settings detected by or passed to -# the module did not work and even a simple MPI test program failed to compile. -# -# If all of these parameters were not sufficient to find the right MPI implementation, a user may -# disable the entire autodetection process by specifying both a list of libraries in ``MPI_<lang>_LIBRARIES`` -# and a list of include directories in ``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS``. -# Any other variable may be set in addition to these two. The module will then validate the MPI settings and store the -# settings in the cache. -# -# Cache variables for MPI -# ^^^^^^^^^^^^^^^^^^^^^^^ -# -# The variable ``MPI_<lang>_INCLUDE_DIRS`` will be assembled from the following variables. -# For C and CXX: -# -# ``MPI_<lang>_HEADER_DIR`` -# Location of the ``mpi.h`` header on disk. -# -# For Fortran: -# -# ``MPI_Fortran_F77_HEADER_DIR`` -# Location of the Fortran 77 header ``mpif.h``, if it exists. -# ``MPI_Fortran_MODULE_DIR`` -# Location of the ``mpi`` or ``mpi_f08`` modules, if available. -# -# For all languages the following variables are additionally considered: -# -# ``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS`` -# A :ref:`;-list <CMake Language Lists>` of paths needed in addition to the normal include directories. -# ``MPI_<include_name>_INCLUDE_DIR`` -# Path variables for include folders referred to by ``<include_name>``. -# ``MPI_<lang>_ADDITIONAL_INCLUDE_VARS`` -# A :ref:`;-list <CMake Language Lists>` of ``<include_name>`` that will be added to the include locations of ``<lang>``. -# -# The variable ``MPI_<lang>_LIBRARIES`` will be assembled from the following variables: -# -# ``MPI_<lib_name>_LIBRARY`` -# The location of a library called ``<lib_name>`` for use with MPI. -# ``MPI_<lang>_LIB_NAMES`` -# A :ref:`;-list <CMake Language Lists>` of ``<lib_name>`` that will be added to the include locations of ``<lang>``. -# -# Usage of mpiexec -# ^^^^^^^^^^^^^^^^ -# -# When using ``MPIEXEC_EXECUTABLE`` to execute MPI applications, you should typically -# use all of the ``MPIEXEC_EXECUTABLE`` flags as follows: -# -# :: -# -# ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} -# ${MPIEXEC_PREFLAGS} EXECUTABLE ${MPIEXEC_POSTFLAGS} ARGS -# -# where ``EXECUTABLE`` is the MPI program, and ``ARGS`` are the arguments to -# pass to the MPI program. -# -# Advanced variables for using MPI -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# The module can perform some advanced feature detections upon explicit request. -# -# **Important notice:** The following checks cannot be performed without *executing* an MPI test program. -# Consider the special considerations for the behavior of :command:`try_run` during cross compilation. -# Moreover, running an MPI program can cause additional issues, like a firewall notification on some systems. -# You should only enable these detections if you absolutely need the information. -# -# If the following variables are set to true, the respective search will be performed: -# -# ``MPI_DETERMINE_Fortran_CAPABILITIES`` -# Determine for all available Fortran bindings what the values of ``MPI_SUBARRAYS_SUPPORTED`` and -# ``MPI_ASYNC_PROTECTS_NONBLOCKING`` are and make their values available as ``MPI_Fortran_<binding>_SUBARRAYS`` -# and ``MPI_Fortran_<binding>_ASYNCPROT``, where ``<binding>`` is one of ``F77_HEADER``, ``F90_MODULE`` and -# ``F08_MODULE``. -# ``MPI_DETERMINE_LIBRARY_VERSION`` -# For each language, find the output of ``MPI_Get_library_version`` and make it available as ``MPI_<lang>_LIBRARY_VERSION``. -# This information is usually tied to the runtime component of an MPI implementation and might differ depending on ``<lang>``. -# Note that the return value is entirely implementation defined. This information might be used to identify -# the MPI vendor and for example pick the correct one of multiple third party binaries that matches the MPI vendor. -# -# Backward Compatibility -# ^^^^^^^^^^^^^^^^^^^^^^ -# -# For backward compatibility with older versions of FindMPI, these -# variables are set, but deprecated: -# -# :: -# -# MPI_COMPILER MPI_LIBRARY MPI_EXTRA_LIBRARY -# MPI_COMPILE_FLAGS MPI_INCLUDE_PATH MPI_LINK_FLAGS -# MPI_LIBRARIES -# -# In new projects, please use the ``MPI_<lang>_XXX`` equivalents. -# Additionally, the following variables are deprecated: -# -# ``MPI_<lang>_COMPILE_FLAGS`` -# Use ``MPI_<lang>_COMPILE_OPTIONS`` and ``MPI_<lang>_COMPILE_DEFINITIONS`` instead. -# ``MPI_<lang>_INCLUDE_PATH`` -# For consumption use ``MPI_<lang>_INCLUDE_DIRS`` and for specifying folders use ``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS`` instead. -# ``MPIEXEC`` -# Use ``MPIEXEC_EXECUTABLE`` instead. +#[=======================================================================[.rst: +FindMPI +------- + +Find a Message Passing Interface (MPI) implementation. + +The Message Passing Interface (MPI) is a library used to write +high-performance distributed-memory parallel applications, and is +typically deployed on a cluster. MPI is a standard interface (defined +by the MPI forum) for which many implementations are available. + +Variables for using MPI +^^^^^^^^^^^^^^^^^^^^^^^ + +The module exposes the components ``C``, ``CXX``, ``MPICXX`` and ``Fortran``. +Each of these controls the various MPI languages to search for. +The difference between ``CXX`` and ``MPICXX`` is that ``CXX`` refers to the +MPI C API being usable from C++, whereas ``MPICXX`` refers to the MPI-2 C++ API +that was removed again in MPI-3. + +Depending on the enabled components the following variables will be set: + +``MPI_FOUND`` + Variable indicating that MPI settings for all requested languages have been found. + If no components are specified, this is true if MPI settings for all enabled languages + were detected. Note that the ``MPICXX`` component does not affect this variable. +``MPI_VERSION`` + Minimal version of MPI detected among the requested languages, or all enabled languages + if no components were specified. + +This module will set the following variables per language in your +project, where ``<lang>`` is one of C, CXX, or Fortran: + +``MPI_<lang>_FOUND`` + Variable indicating the MPI settings for ``<lang>`` were found and that + simple MPI test programs compile with the provided settings. +``MPI_<lang>_COMPILER`` + MPI compiler for ``<lang>`` if such a program exists. +``MPI_<lang>_COMPILE_OPTIONS`` + Compilation options for MPI programs in ``<lang>``, given as a :ref:`;-list <CMake Language Lists>`. +``MPI_<lang>_COMPILE_DEFINITIONS`` + Compilation definitions for MPI programs in ``<lang>``, given as a :ref:`;-list <CMake Language Lists>`. +``MPI_<lang>_INCLUDE_DIRS`` + Include path(s) for MPI header. +``MPI_<lang>_LINK_FLAGS`` + Linker flags for MPI programs. +``MPI_<lang>_LIBRARIES`` + All libraries to link MPI programs against. + +Additionally, the following :prop_tgt:`IMPORTED` targets are defined: + +``MPI::MPI_<lang>`` + Target for using MPI from ``<lang>``. + +The following variables indicating which bindings are present will be defined: + +``MPI_MPICXX_FOUND`` + Variable indicating whether the MPI-2 C++ bindings are present (introduced in MPI-2, removed with MPI-3). +``MPI_Fortran_HAVE_F77_HEADER`` + True if the Fortran 77 header ``mpif.h`` is available. +``MPI_Fortran_HAVE_F90_MODULE`` + True if the Fortran 90 module ``mpi`` can be used for accessing MPI (MPI-2 and higher only). +``MPI_Fortran_HAVE_F08_MODULE`` + True if the Fortran 2008 ``mpi_f08`` is available to MPI programs (MPI-3 and higher only). + +If possible, the MPI version will be determined by this module. The facilities to detect the MPI version +were introduced with MPI-1.2, and therefore cannot be found for older MPI versions. + +``MPI_<lang>_VERSION_MAJOR`` + Major version of MPI implemented for ``<lang>`` by the MPI distribution. +``MPI_<lang>_VERSION_MINOR`` + Minor version of MPI implemented for ``<lang>`` by the MPI distribution. +``MPI_<lang>_VERSION`` + MPI version implemented for ``<lang>`` by the MPI distribution. + +Note that there's no variable for the C bindings being accessible through ``mpi.h``, since the MPI standards +always have required this binding to work in both C and C++ code. + +For running MPI programs, the module sets the following variables + +``MPIEXEC_EXECUTABLE`` + Executable for running MPI programs, if such exists. +``MPIEXEC_NUMPROC_FLAG`` + Flag to pass to ``mpiexec`` before giving it the number of processors to run on. +``MPIEXEC_MAX_NUMPROCS`` + Number of MPI processors to utilize. Defaults to the number + of processors detected on the host system. +``MPIEXEC_PREFLAGS`` + Flags to pass to ``mpiexec`` directly before the executable to run. +``MPIEXEC_POSTFLAGS`` + Flags to pass to ``mpiexec`` after other flags. + +Variables for locating MPI +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This module performs a three step search for an MPI implementation: + +1. Check if the compiler has MPI support built-in. This is the case if the user passed a + compiler wrapper as ``CMAKE_<LANG>_COMPILER`` or if they're on a Cray system. +2. Attempt to find an MPI compiler wrapper and determine the compiler information from it. +3. Try to find an MPI implementation that does not ship such a wrapper by guessing settings. + Currently, only Microsoft MPI and MPICH2 on Windows are supported. + +For controlling the second step, the following variables may be set: + +``MPI_<lang>_COMPILER`` + Search for the specified compiler wrapper and use it. +``MPI_<lang>_COMPILER_FLAGS`` + Flags to pass to the MPI compiler wrapper during interrogation. Some compiler wrappers + support linking debug or tracing libraries if a specific flag is passed and this variable + may be used to obtain them. +``MPI_COMPILER_FLAGS`` + Used to initialize ``MPI_<lang>_COMPILER_FLAGS`` if no language specific flag has been given. + Empty by default. +``MPI_EXECUTABLE_SUFFIX`` + A suffix which is appended to all names that are being looked for. For instance you may set this + to ``.mpich`` or ``.openmpi`` to prefer the one or the other on Debian and its derivatives. + +In order to control the guessing step, the following variable may be set: + +``MPI_GUESS_LIBRARY_NAME`` + Valid values are ``MSMPI`` and ``MPICH2``. If set, only the given library will be searched for. + By default, ``MSMPI`` will be preferred over ``MPICH2`` if both are available. + This also sets ``MPI_SKIP_COMPILER_WRAPPER`` to ``true``, which may be overridden. + +Each of the search steps may be skipped with the following control variables: + +``MPI_ASSUME_NO_BUILTIN_MPI`` + If true, the module assumes that the compiler itself does not provide an MPI implementation and + skips to step 2. +``MPI_SKIP_COMPILER_WRAPPER`` + If true, no compiler wrapper will be searched for. +``MPI_SKIP_GUESSING`` + If true, the guessing step will be skipped. + +Additionally, the following control variable is available to change search behavior: + +``MPI_CXX_SKIP_MPICXX`` + Add some definitions that will disable the MPI-2 C++ bindings. + Currently supported are MPICH, Open MPI, Platform MPI and derivatives thereof, + for example MVAPICH or Intel MPI. + +If the find procedure fails for a variable ``MPI_<lang>_WORKS``, then the settings detected by or passed to +the module did not work and even a simple MPI test program failed to compile. + +If all of these parameters were not sufficient to find the right MPI implementation, a user may +disable the entire autodetection process by specifying both a list of libraries in ``MPI_<lang>_LIBRARIES`` +and a list of include directories in ``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS``. +Any other variable may be set in addition to these two. The module will then validate the MPI settings and store the +settings in the cache. + +Cache variables for MPI +^^^^^^^^^^^^^^^^^^^^^^^ + +The variable ``MPI_<lang>_INCLUDE_DIRS`` will be assembled from the following variables. +For C and CXX: + +``MPI_<lang>_HEADER_DIR`` + Location of the ``mpi.h`` header on disk. + +For Fortran: + +``MPI_Fortran_F77_HEADER_DIR`` + Location of the Fortran 77 header ``mpif.h``, if it exists. +``MPI_Fortran_MODULE_DIR`` + Location of the ``mpi`` or ``mpi_f08`` modules, if available. + +For all languages the following variables are additionally considered: + +``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS`` + A :ref:`;-list <CMake Language Lists>` of paths needed in addition to the normal include directories. +``MPI_<include_name>_INCLUDE_DIR`` + Path variables for include folders referred to by ``<include_name>``. +``MPI_<lang>_ADDITIONAL_INCLUDE_VARS`` + A :ref:`;-list <CMake Language Lists>` of ``<include_name>`` that will be added to the include locations of ``<lang>``. + +The variable ``MPI_<lang>_LIBRARIES`` will be assembled from the following variables: + +``MPI_<lib_name>_LIBRARY`` + The location of a library called ``<lib_name>`` for use with MPI. +``MPI_<lang>_LIB_NAMES`` + A :ref:`;-list <CMake Language Lists>` of ``<lib_name>`` that will be added to the include locations of ``<lang>``. + +Usage of mpiexec +^^^^^^^^^^^^^^^^ + +When using ``MPIEXEC_EXECUTABLE`` to execute MPI applications, you should typically +use all of the ``MPIEXEC_EXECUTABLE`` flags as follows: + +:: + + ${MPIEXEC_EXECUTABLE} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} + ${MPIEXEC_PREFLAGS} EXECUTABLE ${MPIEXEC_POSTFLAGS} ARGS + +where ``EXECUTABLE`` is the MPI program, and ``ARGS`` are the arguments to +pass to the MPI program. + +Advanced variables for using MPI +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The module can perform some advanced feature detections upon explicit request. + +**Important notice:** The following checks cannot be performed without *executing* an MPI test program. +Consider the special considerations for the behavior of :command:`try_run` during cross compilation. +Moreover, running an MPI program can cause additional issues, like a firewall notification on some systems. +You should only enable these detections if you absolutely need the information. + +If the following variables are set to true, the respective search will be performed: + +``MPI_DETERMINE_Fortran_CAPABILITIES`` + Determine for all available Fortran bindings what the values of ``MPI_SUBARRAYS_SUPPORTED`` and + ``MPI_ASYNC_PROTECTS_NONBLOCKING`` are and make their values available as ``MPI_Fortran_<binding>_SUBARRAYS`` + and ``MPI_Fortran_<binding>_ASYNCPROT``, where ``<binding>`` is one of ``F77_HEADER``, ``F90_MODULE`` and + ``F08_MODULE``. +``MPI_DETERMINE_LIBRARY_VERSION`` + For each language, find the output of ``MPI_Get_library_version`` and make it available as ``MPI_<lang>_LIBRARY_VERSION``. + This information is usually tied to the runtime component of an MPI implementation and might differ depending on ``<lang>``. + Note that the return value is entirely implementation defined. This information might be used to identify + the MPI vendor and for example pick the correct one of multiple third party binaries that matches the MPI vendor. + +Backward Compatibility +^^^^^^^^^^^^^^^^^^^^^^ + +For backward compatibility with older versions of FindMPI, these +variables are set, but deprecated: + +:: + + MPI_COMPILER MPI_LIBRARY MPI_EXTRA_LIBRARY + MPI_COMPILE_FLAGS MPI_INCLUDE_PATH MPI_LINK_FLAGS + MPI_LIBRARIES + +In new projects, please use the ``MPI_<lang>_XXX`` equivalents. +Additionally, the following variables are deprecated: + +``MPI_<lang>_COMPILE_FLAGS`` + Use ``MPI_<lang>_COMPILE_OPTIONS`` and ``MPI_<lang>_COMPILE_DEFINITIONS`` instead. +``MPI_<lang>_INCLUDE_PATH`` + For consumption use ``MPI_<lang>_INCLUDE_DIRS`` and for specifying folders use ``MPI_<lang>_ADDITIONAL_INCLUDE_DIRS`` instead. +``MPIEXEC`` + Use ``MPIEXEC_EXECUTABLE`` instead. +#]=======================================================================] cmake_policy(PUSH) cmake_policy(SET CMP0057 NEW) # if IN_LIST @@ -1131,7 +1132,12 @@ macro(_MPI_create_imported_target LANG) add_library(MPI::MPI_${LANG} INTERFACE IMPORTED) endif() - set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_COMPILE_OPTIONS "${MPI_${LANG}_COMPILE_OPTIONS}") + # When this is consumed for compiling CUDA, use '-Xcompiler' to wrap '-pthread'. + string(REPLACE "-pthread" "$<$<COMPILE_LANGUAGE:CUDA>:SHELL:-Xcompiler >-pthread" + _MPI_${LANG}_COMPILE_OPTIONS "${MPI_${LANG}_COMPILE_OPTIONS}") + set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_COMPILE_OPTIONS "${_MPI_${LANG}_COMPILE_OPTIONS}") + unset(_MPI_${LANG}_COMPILE_OPTIONS) + set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_COMPILE_DEFINITIONS "${MPI_${LANG}_COMPILE_DEFINITIONS}") set_property(TARGET MPI::MPI_${LANG} PROPERTY INTERFACE_LINK_LIBRARIES "") diff --git a/Modules/FindMatlab.cmake b/Modules/FindMatlab.cmake index d765bdf..8544653 100644 --- a/Modules/FindMatlab.cmake +++ b/Modules/FindMatlab.cmake @@ -1,220 +1,228 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindMatlab -# ---------- -# -# Finds Matlab or Matlab Compiler Runtime (MCR) and provides Matlab tools, -# libraries and compilers to CMake. -# -# This package primary purpose is to find the libraries associated with Matlab -# or the MCR in order to be able to build Matlab extensions (mex files). It -# can also be used: -# -# * to run specific commands in Matlab in case Matlab is available -# * for declaring Matlab unit test -# * to retrieve various information from Matlab (mex extensions, versions and -# release queries, ...) -# -# The module supports the following components: -# -# * ``MX_LIBRARY``, ``ENG_LIBRARY`` and ``MAT_LIBRARY``: respectively the ``MX``, -# ``ENG`` and ``MAT`` libraries of Matlab -# * ``MAIN_PROGRAM`` the Matlab binary program. Note that this component is not -# available on the MCR version, and will yield an error if the MCR is found -# instead of the regular Matlab installation. -# * ``MEX_COMPILER`` the MEX compiler. -# * ``SIMULINK`` the Simulink environment. -# -# .. note:: -# -# The version given to the :command:`find_package` directive is the Matlab -# **version**, which should not be confused with the Matlab *release* name -# (eg. `R2014`). -# The :command:`matlab_get_version_from_release_name` and -# :command:`matlab_get_release_name_from_version` provide a mapping -# between the release name and the version. -# -# The variable :variable:`Matlab_ROOT_DIR` may be specified in order to give -# the path of the desired Matlab version. Otherwise, the behaviour is platform -# specific: -# -# * Windows: The installed versions of Matlab/MCR are retrieved from the -# Windows registry -# * OS X: The installed versions of Matlab/MCR are given by the MATLAB -# default installation paths in ``/Application``. If no such application is -# found, it falls back to the one that might be accessible from the ``PATH``. -# * Unix: The desired Matlab should be accessible from the ``PATH``. This does -# not work for MCR installation and :variable:`Matlab_ROOT_DIR` should be -# specified on this platform. -# -# Additional information is provided when :variable:`MATLAB_FIND_DEBUG` is set. -# When a Matlab/MCR installation is found automatically and the ``MATLAB_VERSION`` -# is not given, the version is queried from Matlab directly (on Windows this -# may pop up a Matlab window) or from the MCR installation. -# -# The mapping of the release names and the version of Matlab is performed by -# defining pairs (name, version). The variable -# :variable:`MATLAB_ADDITIONAL_VERSIONS` may be provided before the call to -# the :command:`find_package` in order to handle additional versions. -# -# A Matlab scripts can be added to the set of tests using the -# :command:`matlab_add_unit_test`. By default, the Matlab unit test framework -# will be used (>= 2013a) to run this script, but regular ``.m`` files -# returning an exit code can be used as well (0 indicating a success). -# -# Module Input Variables -# ^^^^^^^^^^^^^^^^^^^^^^ -# -# Users or projects may set the following variables to configure the module -# behaviour: -# -# :variable:`Matlab_ROOT_DIR` -# the root of the Matlab installation. -# :variable:`MATLAB_FIND_DEBUG` -# outputs debug information -# :variable:`MATLAB_ADDITIONAL_VERSIONS` -# additional versions of Matlab for the automatic retrieval of the installed -# versions. -# -# Variables defined by the module -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# Result variables -# """""""""""""""" -# -# ``Matlab_FOUND`` -# ``TRUE`` if the Matlab installation is found, ``FALSE`` -# otherwise. All variable below are defined if Matlab is found. -# ``Matlab_ROOT_DIR`` -# the final root of the Matlab installation determined by the FindMatlab -# module. -# ``Matlab_MAIN_PROGRAM`` -# the Matlab binary program. Available only if the component ``MAIN_PROGRAM`` -# is given in the :command:`find_package` directive. -# ``Matlab_INCLUDE_DIRS`` -# the path of the Matlab libraries headers -# ``Matlab_MEX_LIBRARY`` -# library for mex, always available. -# ``Matlab_MX_LIBRARY`` -# mx library of Matlab (arrays). Available only if the component -# ``MX_LIBRARY`` has been requested. -# ``Matlab_ENG_LIBRARY`` -# Matlab engine library. Available only if the component ``ENG_LIBRARY`` -# is requested. -# ``Matlab_MAT_LIBRARY`` -# Matlab matrix library. Available only if the component ``MAT_LIBRARY`` -# is requested. -# ``Matlab_LIBRARIES`` -# the whole set of libraries of Matlab -# ``Matlab_MEX_COMPILER`` -# the mex compiler of Matlab. Currently not used. -# Available only if the component ``MEX_COMPILER`` is asked -# -# Cached variables -# """""""""""""""" -# -# ``Matlab_MEX_EXTENSION`` -# the extension of the mex files for the current platform (given by Matlab). -# ``Matlab_ROOT_DIR`` -# the location of the root of the Matlab installation found. If this value -# is changed by the user, the result variables are recomputed. -# -# Provided macros -# ^^^^^^^^^^^^^^^ -# -# :command:`matlab_get_version_from_release_name` -# returns the version from the release name -# :command:`matlab_get_release_name_from_version` -# returns the release name from the Matlab version -# -# Provided functions -# ^^^^^^^^^^^^^^^^^^ -# -# :command:`matlab_add_mex` -# adds a target compiling a MEX file. -# :command:`matlab_add_unit_test` -# adds a Matlab unit test file as a test to the project. -# :command:`matlab_extract_all_installed_versions_from_registry` -# parses the registry for all Matlab versions. Available on Windows only. -# The part of the registry parsed is dependent on the host processor -# :command:`matlab_get_all_valid_matlab_roots_from_registry` -# returns all the possible Matlab or MCR paths, according to a previously -# given list. Only the existing/accessible paths are kept. This is mainly -# useful for the searching all possible Matlab installation. -# :command:`matlab_get_mex_suffix` -# returns the suffix to be used for the mex files -# (platform/architecture dependent) -# :command:`matlab_get_version_from_matlab_run` -# returns the version of Matlab/MCR, given the full directory of the Matlab/MCR -# installation path. -# -# -# Known issues -# ^^^^^^^^^^^^ -# -# **Symbol clash in a MEX target** -# By default, every symbols inside a MEX -# file defined with the command :command:`matlab_add_mex` have hidden -# visibility, except for the entry point. This is the default behaviour of -# the MEX compiler, which lowers the risk of symbol collision between the -# libraries shipped with Matlab, and the libraries to which the MEX file is -# linking to. This is also the default on Windows platforms. -# -# However, this is not sufficient in certain case, where for instance your -# MEX file is linking against libraries that are already loaded by Matlab, -# even if those libraries have different SONAMES. -# A possible solution is to hide the symbols of the libraries to which the -# MEX target is linking to. This can be achieved in GNU GCC compilers with -# the linker option ``-Wl,--exclude-libs,ALL``. -# -# **Tests using GPU resources** -# in case your MEX file is using the GPU and -# in order to be able to run unit tests on this MEX file, the GPU resources -# should be properly released by Matlab. A possible solution is to make -# Matlab aware of the use of the GPU resources in the session, which can be -# performed by a command such as ``D = gpuDevice()`` at the beginning of -# the test script (or via a fixture). -# -# -# Reference -# ^^^^^^^^^ -# -# .. variable:: Matlab_ROOT_DIR -# -# The root folder of the Matlab installation. If set before the call to -# :command:`find_package`, the module will look for the components in that -# path. If not set, then an automatic search of Matlab -# will be performed. If set, it should point to a valid version of Matlab. -# -# .. variable:: MATLAB_FIND_DEBUG -# -# If set, the lookup of Matlab and the intermediate configuration steps are -# outputted to the console. -# -# .. variable:: MATLAB_ADDITIONAL_VERSIONS -# -# If set, specifies additional versions of Matlab that may be looked for. -# The variable should be a list of strings, organised by pairs of release -# name and versions, such as follows:: -# -# set(MATLAB_ADDITIONAL_VERSIONS -# "release_name1=corresponding_version1" -# "release_name2=corresponding_version2" -# ... -# ) -# -# Example:: -# -# set(MATLAB_ADDITIONAL_VERSIONS -# "R2013b=8.2" -# "R2013a=8.1" -# "R2012b=8.0") -# -# The order of entries in this list matters when several versions of -# Matlab are installed. The priority is set according to the ordering in -# this list. +#[=======================================================================[.rst: +FindMatlab +---------- + +Finds Matlab or Matlab Compiler Runtime (MCR) and provides Matlab tools, +libraries and compilers to CMake. + +This package primary purpose is to find the libraries associated with Matlab +or the MCR in order to be able to build Matlab extensions (mex files). It +can also be used: + +* to run specific commands in Matlab in case Matlab is available +* for declaring Matlab unit test +* to retrieve various information from Matlab (mex extensions, versions and + release queries, ...) + +The module supports the following components: + +* ``ENG_LIBRARY`` and ``MAT_LIBRARY``: respectively the ``ENG`` and ``MAT`` + libraries of Matlab +* ``MAIN_PROGRAM`` the Matlab binary program. Note that this component is not + available on the MCR version, and will yield an error if the MCR is found + instead of the regular Matlab installation. +* ``MEX_COMPILER`` the MEX compiler. +* ``MCC_COMPILER`` the MCC compiler, included with the Matlab Compiler add-on. +* ``SIMULINK`` the Simulink environment. + +.. note:: + + The version given to the :command:`find_package` directive is the Matlab + **version**, which should not be confused with the Matlab *release* name + (eg. `R2014`). + The :command:`matlab_get_version_from_release_name` and + :command:`matlab_get_release_name_from_version` provide a mapping + between the release name and the version. + +The variable :variable:`Matlab_ROOT_DIR` may be specified in order to give +the path of the desired Matlab version. Otherwise, the behaviour is platform +specific: + +* Windows: The installed versions of Matlab/MCR are retrieved from the + Windows registry +* OS X: The installed versions of Matlab/MCR are given by the MATLAB + default installation paths in ``/Application``. If no such application is + found, it falls back to the one that might be accessible from the ``PATH``. +* Unix: The desired Matlab should be accessible from the ``PATH``. This does + not work for MCR installation and :variable:`Matlab_ROOT_DIR` should be + specified on this platform. + +Additional information is provided when :variable:`MATLAB_FIND_DEBUG` is set. +When a Matlab/MCR installation is found automatically and the ``MATLAB_VERSION`` +is not given, the version is queried from Matlab directly (on Windows this +may pop up a Matlab window) or from the MCR installation. + +The mapping of the release names and the version of Matlab is performed by +defining pairs (name, version). The variable +:variable:`MATLAB_ADDITIONAL_VERSIONS` may be provided before the call to +the :command:`find_package` in order to handle additional versions. + +A Matlab scripts can be added to the set of tests using the +:command:`matlab_add_unit_test`. By default, the Matlab unit test framework +will be used (>= 2013a) to run this script, but regular ``.m`` files +returning an exit code can be used as well (0 indicating a success). + +Module Input Variables +^^^^^^^^^^^^^^^^^^^^^^ + +Users or projects may set the following variables to configure the module +behaviour: + +:variable:`Matlab_ROOT_DIR` + the root of the Matlab installation. +:variable:`MATLAB_FIND_DEBUG` + outputs debug information +:variable:`MATLAB_ADDITIONAL_VERSIONS` + additional versions of Matlab for the automatic retrieval of the installed + versions. + +Variables defined by the module +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Result variables +"""""""""""""""" + +``Matlab_FOUND`` + ``TRUE`` if the Matlab installation is found, ``FALSE`` + otherwise. All variable below are defined if Matlab is found. +``Matlab_ROOT_DIR`` + the final root of the Matlab installation determined by the FindMatlab + module. +``Matlab_MAIN_PROGRAM`` + the Matlab binary program. Available only if the component ``MAIN_PROGRAM`` + is given in the :command:`find_package` directive. +``Matlab_INCLUDE_DIRS`` + the path of the Matlab libraries headers +``Matlab_MEX_LIBRARY`` + library for mex, always available. +``Matlab_MX_LIBRARY`` + mx library of Matlab (arrays), always available. +``Matlab_ENG_LIBRARY`` + Matlab engine library. Available only if the component ``ENG_LIBRARY`` + is requested. +``Matlab_MAT_LIBRARY`` + Matlab matrix library. Available only if the component ``MAT_LIBRARY`` + is requested. +``Matlab_ENGINE_LIBRARY`` + Matlab C++ engine library, always available for R2018a and newer. +``Matlab_DATAARRAY_LIBRARY`` + Matlab C++ data array library, always available for R2018a and newer. +``Matlab_LIBRARIES`` + the whole set of libraries of Matlab +``Matlab_MEX_COMPILER`` + the mex compiler of Matlab. Currently not used. + Available only if the component ``MEX_COMPILER`` is requested. +``Matlab_MCC_COMPILER`` + the mcc compiler of Matlab. Included with the Matlab Compiler add-on. + Available only if the component ``MCC_COMPILER`` is requested. + +Cached variables +"""""""""""""""" + +``Matlab_MEX_EXTENSION`` + the extension of the mex files for the current platform (given by Matlab). +``Matlab_ROOT_DIR`` + the location of the root of the Matlab installation found. If this value + is changed by the user, the result variables are recomputed. + +Provided macros +^^^^^^^^^^^^^^^ + +:command:`matlab_get_version_from_release_name` + returns the version from the release name +:command:`matlab_get_release_name_from_version` + returns the release name from the Matlab version + +Provided functions +^^^^^^^^^^^^^^^^^^ + +:command:`matlab_add_mex` + adds a target compiling a MEX file. +:command:`matlab_add_unit_test` + adds a Matlab unit test file as a test to the project. +:command:`matlab_extract_all_installed_versions_from_registry` + parses the registry for all Matlab versions. Available on Windows only. + The part of the registry parsed is dependent on the host processor +:command:`matlab_get_all_valid_matlab_roots_from_registry` + returns all the possible Matlab or MCR paths, according to a previously + given list. Only the existing/accessible paths are kept. This is mainly + useful for the searching all possible Matlab installation. +:command:`matlab_get_mex_suffix` + returns the suffix to be used for the mex files + (platform/architecture dependent) +:command:`matlab_get_version_from_matlab_run` + returns the version of Matlab/MCR, given the full directory of the Matlab/MCR + installation path. + + +Known issues +^^^^^^^^^^^^ + +**Symbol clash in a MEX target** + By default, every symbols inside a MEX + file defined with the command :command:`matlab_add_mex` have hidden + visibility, except for the entry point. This is the default behaviour of + the MEX compiler, which lowers the risk of symbol collision between the + libraries shipped with Matlab, and the libraries to which the MEX file is + linking to. This is also the default on Windows platforms. + + However, this is not sufficient in certain case, where for instance your + MEX file is linking against libraries that are already loaded by Matlab, + even if those libraries have different SONAMES. + A possible solution is to hide the symbols of the libraries to which the + MEX target is linking to. This can be achieved in GNU GCC compilers with + the linker option ``-Wl,--exclude-libs,ALL``. + +**Tests using GPU resources** + in case your MEX file is using the GPU and + in order to be able to run unit tests on this MEX file, the GPU resources + should be properly released by Matlab. A possible solution is to make + Matlab aware of the use of the GPU resources in the session, which can be + performed by a command such as ``D = gpuDevice()`` at the beginning of + the test script (or via a fixture). + + +Reference +^^^^^^^^^ + +.. variable:: Matlab_ROOT_DIR + + The root folder of the Matlab installation. If set before the call to + :command:`find_package`, the module will look for the components in that + path. If not set, then an automatic search of Matlab + will be performed. If set, it should point to a valid version of Matlab. + +.. variable:: MATLAB_FIND_DEBUG + + If set, the lookup of Matlab and the intermediate configuration steps are + outputted to the console. + +.. variable:: MATLAB_ADDITIONAL_VERSIONS + + If set, specifies additional versions of Matlab that may be looked for. + The variable should be a list of strings, organised by pairs of release + name and versions, such as follows:: + + set(MATLAB_ADDITIONAL_VERSIONS + "release_name1=corresponding_version1" + "release_name2=corresponding_version2" + ... + ) + + Example:: + + set(MATLAB_ADDITIONAL_VERSIONS + "R2013b=8.2" + "R2013a=8.1" + "R2012b=8.0") + + The order of entries in this list matters when several versions of + Matlab are installed. The priority is set according to the ordering in + this list. +#]=======================================================================] set(_FindMatlab_SELF_DIR "${CMAKE_CURRENT_LIST_DIR}") @@ -230,6 +238,8 @@ if(NOT MATLAB_ADDITIONAL_VERSIONS) endif() set(MATLAB_VERSIONS_MAPPING + "R2018b=9.5" + "R2018a=9.4" "R2017b=9.3" "R2017a=9.2" "R2016b=9.1" @@ -257,10 +267,11 @@ if(NOT EXISTS "${_matlab_temporary_folder}") file(MAKE_DIRECTORY "${_matlab_temporary_folder}") endif() -#.rst: -# .. command:: matlab_get_version_from_release_name -# -# Returns the version of Matlab (17.58) from a release name (R2017k) +#[=======================================================================[.rst: +.. command:: matlab_get_version_from_release_name + + Returns the version of Matlab (17.58) from a release name (R2017k) +#]=======================================================================] macro(matlab_get_version_from_release_name release_name version_name) string(REGEX MATCHALL "${release_name}=([0-9]+\\.?[0-9]*)" _matched ${MATLAB_VERSIONS_MAPPING}) @@ -279,10 +290,11 @@ endmacro() -#.rst: -# .. command:: matlab_get_release_name_from_version -# -# Returns the release name (R2017k) from the version of Matlab (17.58) +#[=======================================================================[.rst: +.. command:: matlab_get_release_name_from_version + + Returns the release name (R2017k) from the version of Matlab (17.58) +#]=======================================================================] macro(matlab_get_release_name_from_version version release_name) set(${release_name} "") @@ -339,22 +351,23 @@ macro(matlab_get_supported_versions list_versions) endmacro() -#.rst: -# .. command:: matlab_extract_all_installed_versions_from_registry -# -# This function parses the registry and founds the Matlab versions that are -# installed. The found versions are returned in `matlab_versions`. -# Set `win64` to `TRUE` if the 64 bit version of Matlab should be looked for -# The returned list contains all versions under -# ``HKLM\\SOFTWARE\\Mathworks\\MATLAB`` and -# ``HKLM\\SOFTWARE\\Mathworks\\MATLAB Runtime`` or an empty list in case an -# error occurred (or nothing found). -# -# .. note:: -# -# Only the versions are provided. No check is made over the existence of the -# installation referenced in the registry, -# +#[=======================================================================[.rst: +.. command:: matlab_extract_all_installed_versions_from_registry + + This function parses the registry and founds the Matlab versions that are + installed. The found versions are returned in `matlab_versions`. + Set `win64` to `TRUE` if the 64 bit version of Matlab should be looked for + The returned list contains all versions under + ``HKLM\\SOFTWARE\\Mathworks\\MATLAB`` and + ``HKLM\\SOFTWARE\\Mathworks\\MATLAB Runtime`` or an empty list in case an + error occurred (or nothing found). + + .. note:: + + Only the versions are provided. No check is made over the existence of the + installation referenced in the registry, + +#]=======================================================================] function(matlab_extract_all_installed_versions_from_registry win64 matlab_versions) if(NOT CMAKE_HOST_WIN32) @@ -463,25 +476,26 @@ endmacro() -#.rst: -# .. command:: matlab_get_all_valid_matlab_roots_from_registry -# -# Populates the Matlab root with valid versions of Matlab or -# Matlab Runtime (MCR). -# The returned matlab_roots is organized in triplets -# ``(type,version_number,matlab_root_path)``, where ``type`` -# indicates either ``MATLAB`` or ``MCR``. -# -# :: -# -# matlab_get_all_valid_matlab_roots_from_registry( -# matlab_versions -# matlab_roots) -# -# ``matlab_versions`` -# the versions of each of the Matlab or MCR installations -# ``matlab_roots`` -# the location of each of the Matlab or MCR installations +#[=======================================================================[.rst: +.. command:: matlab_get_all_valid_matlab_roots_from_registry + + Populates the Matlab root with valid versions of Matlab or + Matlab Runtime (MCR). + The returned matlab_roots is organized in triplets + ``(type,version_number,matlab_root_path)``, where ``type`` + indicates either ``MATLAB`` or ``MCR``. + + :: + + matlab_get_all_valid_matlab_roots_from_registry( + matlab_versions + matlab_roots) + + ``matlab_versions`` + the versions of each of the Matlab or MCR installations + ``matlab_roots`` + the location of each of the Matlab or MCR installations +#]=======================================================================] function(matlab_get_all_valid_matlab_roots_from_registry matlab_versions matlab_roots) # The matlab_versions comes either from @@ -520,23 +534,24 @@ function(matlab_get_all_valid_matlab_roots_from_registry matlab_versions matlab_ set(${matlab_roots} ${_matlab_roots_list} PARENT_SCOPE) endfunction() -#.rst: -# .. command:: matlab_get_mex_suffix -# -# Returns the extension of the mex files (the suffixes). -# This function should not be called before the appropriate Matlab root has -# been found. -# -# :: -# -# matlab_get_mex_suffix( -# matlab_root -# mex_suffix) -# -# ``matlab_root`` -# the root of the Matlab/MCR installation -# ``mex_suffix`` -# the variable name in which the suffix will be returned. +#[=======================================================================[.rst: +.. command:: matlab_get_mex_suffix + + Returns the extension of the mex files (the suffixes). + This function should not be called before the appropriate Matlab root has + been found. + + :: + + matlab_get_mex_suffix( + matlab_root + mex_suffix) + + ``matlab_root`` + the root of the Matlab/MCR installation + ``mex_suffix`` + the variable name in which the suffix will be returned. +#]=======================================================================] function(matlab_get_mex_suffix matlab_root mex_suffix) # todo setup the extension properly. Currently I do not know if this is @@ -622,23 +637,24 @@ endfunction() -#.rst: -# .. command:: matlab_get_version_from_matlab_run -# -# This function runs Matlab program specified on arguments and extracts its -# version. If the path provided for the Matlab installation points to an MCR -# installation, the version is extracted from the installed files. -# -# :: -# -# matlab_get_version_from_matlab_run( -# matlab_binary_path -# matlab_list_versions) -# -# ``matlab_binary_path`` -# the location of the `matlab` binary executable -# ``matlab_list_versions`` -# the version extracted from Matlab +#[=======================================================================[.rst: +.. command:: matlab_get_version_from_matlab_run + + This function runs Matlab program specified on arguments and extracts its + version. If the path provided for the Matlab installation points to an MCR + installation, the version is extracted from the installed files. + + :: + + matlab_get_version_from_matlab_run( + matlab_binary_path + matlab_list_versions) + + ``matlab_binary_path`` + the location of the `matlab` binary executable + ``matlab_list_versions`` + the version extracted from Matlab +#]=======================================================================] function(matlab_get_version_from_matlab_run matlab_binary_program matlab_list_versions) set(${matlab_list_versions} "" PARENT_SCOPE) @@ -740,76 +756,77 @@ function(matlab_get_version_from_matlab_run matlab_binary_program matlab_list_ve endfunction() -#.rst: -# .. command:: matlab_add_unit_test -# -# Adds a Matlab unit test to the test set of cmake/ctest. -# This command requires the component ``MAIN_PROGRAM`` and hence is not -# available for an MCR installation. -# -# The unit test uses the Matlab unittest framework (default, available -# starting Matlab 2013b+) except if the option ``NO_UNITTEST_FRAMEWORK`` -# is given. -# -# The function expects one Matlab test script file to be given. -# In the case ``NO_UNITTEST_FRAMEWORK`` is given, the unittest script file -# should contain the script to be run, plus an exit command with the exit -# value. This exit value will be passed to the ctest framework (0 success, -# non 0 failure). Additional arguments accepted by :command:`add_test` can be -# passed through ``TEST_ARGS`` (eg. ``CONFIGURATION <config> ...``). -# -# :: -# -# matlab_add_unit_test( -# NAME <name> -# UNITTEST_FILE matlab_file_containing_unittest.m -# [CUSTOM_TEST_COMMAND matlab_command_to_run_as_test] -# [UNITTEST_PRECOMMAND matlab_command_to_run] -# [TIMEOUT timeout] -# [ADDITIONAL_PATH path1 [path2 ...]] -# [MATLAB_ADDITIONAL_STARTUP_OPTIONS option1 [option2 ...]] -# [TEST_ARGS arg1 [arg2 ...]] -# [NO_UNITTEST_FRAMEWORK] -# ) -# -# The function arguments are: -# -# ``NAME`` -# name of the unittest in ctest. -# ``UNITTEST_FILE`` -# the matlab unittest file. Its path will be automatically -# added to the Matlab path. -# ``CUSTOM_TEST_COMMAND`` -# Matlab script command to run as the test. -# If this is not set, then the following is run: -# ``runtests('matlab_file_name'), exit(max([ans(1,:).Failed]))`` -# where ``matlab_file_name`` is the ``UNITTEST_FILE`` without the extension. -# ``UNITTEST_PRECOMMAND`` -# Matlab script command to be ran before the file -# containing the test (eg. GPU device initialisation based on CMake -# variables). -# ``TIMEOUT`` -# the test timeout in seconds. Defaults to 180 seconds as the -# Matlab unit test may hang. -# ``ADDITIONAL_PATH`` -# a list of paths to add to the Matlab path prior to -# running the unit test. -# ``MATLAB_ADDITIONAL_STARTUP_OPTIONS`` -# a list of additional option in order -# to run Matlab from the command line. -# ``-nosplash -nodesktop -nodisplay`` are always added. -# ``TEST_ARGS`` -# Additional options provided to the add_test command. These -# options are added to the default options (eg. "CONFIGURATIONS Release") -# ``NO_UNITTEST_FRAMEWORK`` -# when set, indicates that the test should not -# use the unittest framework of Matlab (available for versions >= R2013a). -# ``WORKING_DIRECTORY`` -# This will be the working directory for the test. If specified it will -# also be the output directory used for the log file of the test run. -# If not specified the temporary directory ``${CMAKE_BINARY_DIR}/Matlab`` will -# be used as the working directory and the log location. -# +#[=======================================================================[.rst: +.. command:: matlab_add_unit_test + + Adds a Matlab unit test to the test set of cmake/ctest. + This command requires the component ``MAIN_PROGRAM`` and hence is not + available for an MCR installation. + + The unit test uses the Matlab unittest framework (default, available + starting Matlab 2013b+) except if the option ``NO_UNITTEST_FRAMEWORK`` + is given. + + The function expects one Matlab test script file to be given. + In the case ``NO_UNITTEST_FRAMEWORK`` is given, the unittest script file + should contain the script to be run, plus an exit command with the exit + value. This exit value will be passed to the ctest framework (0 success, + non 0 failure). Additional arguments accepted by :command:`add_test` can be + passed through ``TEST_ARGS`` (eg. ``CONFIGURATION <config> ...``). + + :: + + matlab_add_unit_test( + NAME <name> + UNITTEST_FILE matlab_file_containing_unittest.m + [CUSTOM_TEST_COMMAND matlab_command_to_run_as_test] + [UNITTEST_PRECOMMAND matlab_command_to_run] + [TIMEOUT timeout] + [ADDITIONAL_PATH path1 [path2 ...]] + [MATLAB_ADDITIONAL_STARTUP_OPTIONS option1 [option2 ...]] + [TEST_ARGS arg1 [arg2 ...]] + [NO_UNITTEST_FRAMEWORK] + ) + + The function arguments are: + + ``NAME`` + name of the unittest in ctest. + ``UNITTEST_FILE`` + the matlab unittest file. Its path will be automatically + added to the Matlab path. + ``CUSTOM_TEST_COMMAND`` + Matlab script command to run as the test. + If this is not set, then the following is run: + ``runtests('matlab_file_name'), exit(max([ans(1,:).Failed]))`` + where ``matlab_file_name`` is the ``UNITTEST_FILE`` without the extension. + ``UNITTEST_PRECOMMAND`` + Matlab script command to be ran before the file + containing the test (eg. GPU device initialisation based on CMake + variables). + ``TIMEOUT`` + the test timeout in seconds. Defaults to 180 seconds as the + Matlab unit test may hang. + ``ADDITIONAL_PATH`` + a list of paths to add to the Matlab path prior to + running the unit test. + ``MATLAB_ADDITIONAL_STARTUP_OPTIONS`` + a list of additional option in order + to run Matlab from the command line. + ``-nosplash -nodesktop -nodisplay`` are always added. + ``TEST_ARGS`` + Additional options provided to the add_test command. These + options are added to the default options (eg. "CONFIGURATIONS Release") + ``NO_UNITTEST_FRAMEWORK`` + when set, indicates that the test should not + use the unittest framework of Matlab (available for versions >= R2013a). + ``WORKING_DIRECTORY`` + This will be the working directory for the test. If specified it will + also be the output directory used for the log file of the test run. + If not specified the temporary directory ``${CMAKE_BINARY_DIR}/Matlab`` will + be used as the working directory and the log location. + +#]=======================================================================] function(matlab_add_unit_test) if(NOT Matlab_MAIN_PROGRAM) @@ -848,58 +865,65 @@ function(matlab_add_unit_test) endfunction() -#.rst: -# .. command:: matlab_add_mex -# -# Adds a Matlab MEX target. -# This commands compiles the given sources with the current tool-chain in -# order to produce a MEX file. The final name of the produced output may be -# specified, as well as additional link libraries, and a documentation entry -# for the MEX file. Remaining arguments of the call are passed to the -# :command:`add_library` or :command:`add_executable` command. -# -# :: -# -# matlab_add_mex( -# NAME <name> -# [EXECUTABLE | MODULE | SHARED] -# SRC src1 [src2 ...] -# [OUTPUT_NAME output_name] -# [DOCUMENTATION file.txt] -# [LINK_TO target1 target2 ...] -# [...] -# ) -# -# ``NAME`` -# name of the target. -# ``SRC`` -# list of source files. -# ``LINK_TO`` -# a list of additional link dependencies. The target links to ``libmex`` -# by default. If ``Matlab_MX_LIBRARY`` is defined, it also -# links to ``libmx``. -# ``OUTPUT_NAME`` -# if given, overrides the default name. The default name is -# the name of the target without any prefix and -# with ``Matlab_MEX_EXTENSION`` suffix. -# ``DOCUMENTATION`` -# if given, the file ``file.txt`` will be considered as -# being the documentation file for the MEX file. This file is copied into -# the same folder without any processing, with the same name as the final -# mex file, and with extension `.m`. In that case, typing ``help <name>`` -# in Matlab prints the documentation contained in this file. -# ``MODULE`` or ``SHARED`` may be given to specify the type of library to be -# created. ``EXECUTABLE`` may be given to create an executable instead of -# a library. If no type is given explicitly, the type is ``SHARED``. -# -# The documentation file is not processed and should be in the following -# format: -# -# :: -# -# % This is the documentation -# function ret = mex_target_output_name(input1) -# +#[=======================================================================[.rst: +.. command:: matlab_add_mex + + Adds a Matlab MEX target. + This commands compiles the given sources with the current tool-chain in + order to produce a MEX file. The final name of the produced output may be + specified, as well as additional link libraries, and a documentation entry + for the MEX file. Remaining arguments of the call are passed to the + :command:`add_library` or :command:`add_executable` command. + + :: + + matlab_add_mex( + NAME <name> + [EXECUTABLE | MODULE | SHARED] + SRC src1 [src2 ...] + [OUTPUT_NAME output_name] + [DOCUMENTATION file.txt] + [LINK_TO target1 target2 ...] + [R2017b | R2018a] + [...] + ) + + ``NAME`` + name of the target. + ``SRC`` + list of source files. + ``LINK_TO`` + a list of additional link dependencies. The target links to ``libmex`` + and ``libmx`` by default. + ``OUTPUT_NAME`` + if given, overrides the default name. The default name is + the name of the target without any prefix and + with ``Matlab_MEX_EXTENSION`` suffix. + ``DOCUMENTATION`` + if given, the file ``file.txt`` will be considered as + being the documentation file for the MEX file. This file is copied into + the same folder without any processing, with the same name as the final + mex file, and with extension `.m`. In that case, typing ``help <name>`` + in Matlab prints the documentation contained in this file. + ``R2017b`` or ``R2018a`` may be given to specify the version of the C API + to use: ``R2017b`` specifies the traditional (separate complex) C API, + and corresponds to the ``-R2017b`` flag for the `mex` command. ``R2018a`` + specifies the new interleaved complex C API, and corresponds to the + ``-R2018a`` flag for the `mex` command. Ignored if MATLAB version prior + to R2018a. Defaults to ``R2017b``. + ``MODULE`` or ``SHARED`` may be given to specify the type of library to be + created. ``EXECUTABLE`` may be given to create an executable instead of + a library. If no type is given explicitly, the type is ``SHARED``. + + The documentation file is not processed and should be in the following + format: + + :: + + % This is the documentation + function ret = mex_target_output_name(input1) + +#]=======================================================================] function(matlab_add_mex) if(NOT WIN32) @@ -916,7 +940,7 @@ function(matlab_add_mex) endif() - set(options EXECUTABLE MODULE SHARED) + set(options EXECUTABLE MODULE SHARED R2017b R2018a) set(oneValueArgs NAME DOCUMENTATION OUTPUT_NAME) set(multiValueArgs LINK_TO SRC) @@ -931,9 +955,25 @@ function(matlab_add_mex) set(${prefix}_OUTPUT_NAME ${${prefix}_NAME}) endif() + if(NOT ${Matlab_VERSION_STRING} VERSION_LESS "9.1") # For 9.1 (R2016b) and newer, add version source file + # TODO: check the file extensions in ${${prefix}_SRC} to see if they're C or C++ files + # Currently, the C and C++ versions of the version files are identical, so this doesn't matter. + set(MEX_VERSION_FILE "${Matlab_ROOT_DIR}/extern/version/c_mexapi_version.c") + #set(MEX_VERSION_FILE "${Matlab_ROOT_DIR}/extern/version/cpp_mexapi_version.cpp") + endif() + + if(NOT ${Matlab_VERSION_STRING} VERSION_LESS "9.4") # For 9.4 (R2018a) and newer, add API macro + if(${${prefix}_R2018a}) + set(MEX_API_MACRO "MATLAB_DEFAULT_RELEASE=R2018a") + else() + set(MEX_API_MACRO "MATLAB_DEFAULT_RELEASE=R2017b") + endif() + endif() + if(${prefix}_EXECUTABLE) add_executable(${${prefix}_NAME} ${${prefix}_SRC} + ${MEX_VERSION_FILE} ${${prefix}_DOCUMENTATION} ${${prefix}_UNPARSED_ARGUMENTS}) else() @@ -946,23 +986,25 @@ function(matlab_add_mex) add_library(${${prefix}_NAME} ${type} ${${prefix}_SRC} + ${MEX_VERSION_FILE} ${${prefix}_DOCUMENTATION} ${${prefix}_UNPARSED_ARGUMENTS}) endif() target_include_directories(${${prefix}_NAME} PRIVATE ${Matlab_INCLUDE_DIRS}) - if(DEFINED Matlab_MX_LIBRARY) - target_link_libraries(${${prefix}_NAME} ${Matlab_MX_LIBRARY}) + if(Matlab_HAS_CPP_API) + target_link_libraries(${${prefix}_NAME} ${Matlab_ENGINE_LIBRARY} ${Matlab_DATAARRAY_LIBRARY}) endif() - target_link_libraries(${${prefix}_NAME} ${Matlab_MEX_LIBRARY} ${${prefix}_LINK_TO}) + target_link_libraries(${${prefix}_NAME} ${Matlab_MEX_LIBRARY} ${Matlab_MX_LIBRARY} ${${prefix}_LINK_TO}) set_target_properties(${${prefix}_NAME} PROPERTIES PREFIX "" OUTPUT_NAME ${${prefix}_OUTPUT_NAME} SUFFIX ".${Matlab_MEX_EXTENSION}") + target_compile_definitions(${${prefix}_NAME} PRIVATE ${MEX_API_MACRO} MATLAB_MEX_FILE) # documentation if(NOT ${${prefix}_DOCUMENTATION} STREQUAL "") @@ -977,67 +1019,81 @@ function(matlab_add_mex) # entry point in the mex file + taking care of visibility and symbol clashes. if(WIN32) + + if (MSVC) + + set(_link_flags "${_link_flags} /EXPORT:mexFunction") + if(NOT ${Matlab_VERSION_STRING} VERSION_LESS "9.1") # For 9.1 (R2016b) and newer, export version + set(_link_flags "${_link_flags} /EXPORT:mexfilerequiredapiversion") + endif() + + if(Matlab_HAS_CPP_API) + set(_link_flags "${_link_flags} /EXPORT:mexCreateMexFunction /EXPORT:mexDestroyMexFunction /EXPORT:mexFunctionAdapter") + #TODO: Is this necessary? + endif() + + set_property(TARGET ${${prefix}_NAME} APPEND PROPERTY LINK_FLAGS ${_link_flags}) + + endif() # TODO: what if there's a different compiler on Windows? + set_target_properties(${${prefix}_NAME} PROPERTIES DEFINE_SYMBOL "DLL_EXPORT_SYM=__declspec(dllexport)") + else() - if(HAS_MINUS_PTHREAD AND NOT APPLE) - # Apparently, compiling with -pthread generated the proper link flags - # and some defines at compilation - target_compile_options(${${prefix}_NAME} PRIVATE "-pthread") + if(${Matlab_VERSION_STRING} VERSION_LESS "9.1") # For versions prior to 9.1 (R2016b) + set(_ver_map_files ${Matlab_EXTERN_LIBRARY_DIR}/mexFunction.map) + else() # For 9.1 (R2016b) and newer + set(_ver_map_files ${Matlab_EXTERN_LIBRARY_DIR}/c_exportsmexfileversion.map) endif() + if(NOT ${Matlab_VERSION_STRING} VERSION_LESS "9.5") # For 9.5 (R2018b) (and newer?) + target_compile_options(${${prefix}_NAME} PRIVATE "-fvisibility=default") + # This one is weird, it might be a bug in <mex.h> for R2018b. When compiling with + # -fvisibility=hidden, the symbol `mexFunction` cannot be exported. Reading the + # source code for <mex.h>, it seems that the preprocessor macro `MW_NEEDS_VERSION_H` + # needs to be defined for `__attribute__ ((visibility("default")))` to be added + # in front of the declaration of `mexFunction`. In previous versions of MATLAB this + # was not the case, there `DLL_EXPORT_SYM` needed to be defined. + # Adding `-fvisibility=hidden` to the `mex` command causes the build to fail. + # TODO: Check that this is still necessary in R2019a when it comes out. + endif() - # if we do not do that, the symbols linked from eg. boost remain weak and - # then clash with the ones defined in the matlab process. So by default - # the symbols are hidden. - # This also means that for shared libraries (like MEX), the entry point - # should be explicitly declared with default visibility, otherwise Matlab - # cannot find the entry point. - # Note that this is particularly meaningful if the MEX wrapper itself - # contains symbols that are clashing with Matlab (that are compiled in the - # MEX file). In order to propagate the visibility options to the libraries - # to which the MEX file is linked against, the -Wl,--exclude-libs,ALL - # option should also be specified. + if(APPLE) - set_target_properties(${${prefix}_NAME} - PROPERTIES - CXX_VISIBILITY_PRESET "hidden" - C_VISIBILITY_PRESET "hidden" - VISIBILITY_INLINES_HIDDEN ON - ) + if(Matlab_HAS_CPP_API) + list(APPEND _ver_map_files ${Matlab_EXTERN_LIBRARY_DIR}/cppMexFunction.map) # This one doesn't exist on Linux + set(_link_flags "${_link_flags} -Wl,-U,_mexCreateMexFunction -Wl,-U,_mexDestroyMexFunction -Wl,-U,_mexFunctionAdapter") + # On MacOS, the MEX command adds the above, without it the link breaks + # because we indiscriminately use "cppMexFunction.map" even for C API MEX-files. + endif() + + set(_export_flag_name -exported_symbols_list) - # get_target_property( - # _previous_link_flags - # ${${prefix}_NAME} - # LINK_FLAGS) - # if(NOT _previous_link_flags) - # set(_previous_link_flags) - # endif() - - # if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - # set_target_properties(${${prefix}_NAME} - # PROPERTIES - # LINK_FLAGS "${_previous_link_flags} -Wl,--exclude-libs,ALL" - # # -Wl,--version-script=${_FindMatlab_SELF_DIR}/MatlabLinuxVisibility.map" - # ) - # elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - # # in this case, all other symbols become hidden. - # set_target_properties(${${prefix}_NAME} - # PROPERTIES - # LINK_FLAGS "${_previous_link_flags} -Wl,-exported_symbol,_mexFunction" - # #-Wl,-exported_symbols_list,${_FindMatlab_SELF_DIR}/MatlabOSXVisilibity.map" - # ) - # endif() + else() # Linux + + if(HAS_MINUS_PTHREAD) + # Apparently, compiling with -pthread generated the proper link flags + # and some defines at compilation + target_compile_options(${${prefix}_NAME} PRIVATE "-pthread") + endif() + set(_link_flags "${_link_flags} -Wl,--as-needed") + set(_export_flag_name --version-script) + + endif() + + foreach(_file ${_ver_map_files}) + set(_link_flags "${_link_flags} -Wl,${_export_flag_name},${_file}") + endforeach() set_target_properties(${${prefix}_NAME} PROPERTIES DEFINE_SYMBOL "DLL_EXPORT_SYM=__attribute__ ((visibility (\"default\")))" - ) - + LINK_FLAGS "${_link_flags}" + ) # The `mex` command doesn't add this define. Is it necessary? endif() @@ -1356,7 +1412,7 @@ else() # if the user does not specify the possible installation root, we look for # one installation using the appropriate heuristics. # There is apparently no standard way on Linux. - if(WIN32) + if(CMAKE_HOST_WIN32) _Matlab_find_instances_win32(_matlab_possible_roots_win32) list(APPEND _matlab_possible_roots ${_matlab_possible_roots_win32}) elseif(APPLE) @@ -1404,13 +1460,17 @@ if(DEFINED Matlab_ROOT_DIR_LAST_CACHED) if(NOT Matlab_ROOT_DIR_LAST_CACHED STREQUAL Matlab_ROOT_DIR) set(_Matlab_cached_vars + Matlab_VERSION_STRING Matlab_INCLUDE_DIRS Matlab_MEX_LIBRARY Matlab_MEX_COMPILER + Matlab_MCC_COMPILER Matlab_MAIN_PROGRAM Matlab_MX_LIBRARY Matlab_ENG_LIBRARY Matlab_MAT_LIBRARY + Matlab_ENGINE_LIBRARY + Matlab_DATAARRAY_LIBRARY Matlab_MEX_EXTENSION Matlab_SIMULINK_INCLUDE_DIR @@ -1418,7 +1478,7 @@ if(DEFINED Matlab_ROOT_DIR_LAST_CACHED) Matlab_MEXEXTENSIONS_PROG Matlab_ROOT_DIR_LAST_CACHED #Matlab_PROG_VERSION_STRING_AUTO_DETECT - Matlab_VERSION_STRING_INTERNAL + #Matlab_VERSION_STRING_INTERNAL ) foreach(_var IN LISTS _Matlab_cached_vars) if(DEFINED ${_var}) @@ -1443,7 +1503,9 @@ if(MATLAB_FIND_DEBUG) message(STATUS "[MATLAB] Current version is ${Matlab_VERSION_STRING} located ${Matlab_ROOT_DIR}") endif() - +if(NOT ${Matlab_VERSION_STRING} VERSION_LESS "9.4") # MATLAB 9.4 (R2018a) and newer have a new C++ API + set(Matlab_HAS_CPP_API 1) +endif() if(Matlab_ROOT_DIR) file(TO_CMAKE_PATH ${Matlab_ROOT_DIR} Matlab_ROOT_DIR) @@ -1482,6 +1544,8 @@ set(Matlab_BINARIES_DIR ${Matlab_ROOT_DIR}/bin/${_matlab_bin_prefix}${_matlab_current_suffix}) set(Matlab_EXTERN_LIBRARY_DIR ${Matlab_ROOT_DIR}/extern/lib/${_matlab_bin_prefix}${_matlab_current_suffix}) +set(Matlab_EXTERN_BINARIES_DIR + ${Matlab_ROOT_DIR}/extern/bin/${_matlab_bin_prefix}${_matlab_current_suffix}) if(WIN32) if(MINGW) @@ -1491,7 +1555,7 @@ if(WIN32) endif() set(_matlab_lib_prefix_for_search "lib") else() - set(_matlab_lib_dir_for_search ${Matlab_BINARIES_DIR}) + set(_matlab_lib_dir_for_search ${Matlab_BINARIES_DIR} ${Matlab_EXTERN_BINARIES_DIR}) set(_matlab_lib_prefix_for_search "lib") endif() @@ -1542,7 +1606,6 @@ _Matlab_find_library( PATHS ${_matlab_lib_dir_for_search} NO_DEFAULT_PATH ) - list(APPEND _matlab_required_variables Matlab_MEX_LIBRARY) # the MEX extension is required @@ -1583,21 +1646,18 @@ if(_matlab_find_matlab_program GREATER -1) endif() unset(_matlab_find_matlab_program) -# Component MX library -list(FIND Matlab_FIND_COMPONENTS MX_LIBRARY _matlab_find_mx) -if(_matlab_find_mx GREATER -1) - _Matlab_find_library( - ${_matlab_lib_prefix_for_search} - Matlab_MX_LIBRARY - mx - PATHS ${_matlab_lib_dir_for_search} - NO_DEFAULT_PATH - ) - if(Matlab_MX_LIBRARY) - set(Matlab_MX_LIBRARY_FOUND TRUE) - endif() +# The MX library is required +_Matlab_find_library( + ${_matlab_lib_prefix_for_search} + Matlab_MX_LIBRARY + mx + PATHS ${_matlab_lib_dir_for_search} + NO_DEFAULT_PATH +) +list(APPEND _matlab_required_variables Matlab_MX_LIBRARY) +if(Matlab_MX_LIBRARY) + set(Matlab_MX_LIBRARY_FOUND TRUE) endif() -unset(_matlab_find_mx) # Component ENG library list(FIND Matlab_FIND_COMPONENTS ENG_LIBRARY _matlab_find_eng) @@ -1647,9 +1707,60 @@ if(_matlab_find_simulink GREATER -1) endif() unset(_matlab_find_simulink) +# component MCC Compiler +list(FIND Matlab_FIND_COMPONENTS MCC_COMPILER _matlab_find_mcc_compiler) +if(_matlab_find_mcc_compiler GREATER -1) + find_program( + Matlab_MCC_COMPILER + "mcc" + PATHS ${Matlab_BINARIES_DIR} + DOC "Matlab MCC compiler" + NO_DEFAULT_PATH + ) + if(Matlab_MCC_COMPILER) + set(Matlab_MCC_COMPILER_FOUND TRUE) + endif() +endif() +unset(_matlab_find_mcc_compiler) + +if(Matlab_HAS_CPP_API) + + # The MatlabEngine library is required for R2018a+ + _Matlab_find_library( + ${_matlab_lib_prefix_for_search} + Matlab_ENGINE_LIBRARY + MatlabEngine + PATHS ${_matlab_lib_dir_for_search} + DOC "MatlabEngine Library" + NO_DEFAULT_PATH + ) + list(APPEND _matlab_required_variables Matlab_ENGINE_LIBRARY) + if(Matlab_ENGINE_LIBRARY) + set(Matlab_ENGINE_LIBRARY_FOUND TRUE) + endif() + + # The MatlabDataArray library is required for R2018a+ + _Matlab_find_library( + ${_matlab_lib_prefix_for_search} + Matlab_DATAARRAY_LIBRARY + MatlabDataArray + PATHS ${_matlab_lib_dir_for_search} + DOC "MatlabDataArray Library" + NO_DEFAULT_PATH + ) + list(APPEND _matlab_required_variables Matlab_DATAARRAY_LIBRARY) + if(Matlab_DATAARRAY_LIBRARY) + set(Matlab_DATAARRAY_LIBRARY_FOUND TRUE) + endif() + +endif() + unset(_matlab_lib_dir_for_search) -set(Matlab_LIBRARIES ${Matlab_MEX_LIBRARY} ${Matlab_MX_LIBRARY} ${Matlab_ENG_LIBRARY} ${Matlab_MAT_LIBRARY}) +set(Matlab_LIBRARIES + ${Matlab_MEX_LIBRARY} ${Matlab_MX_LIBRARY} + ${Matlab_ENG_LIBRARY} ${Matlab_MAT_LIBRARY} + ${Matlab_DATAARRAY_LIBRARY} ${Matlab_ENGINE_LIBRARY}) find_package_handle_standard_args( Matlab @@ -1671,6 +1782,8 @@ if(Matlab_INCLUDE_DIRS AND Matlab_LIBRARIES) Matlab_MEX_LIBRARY Matlab_MX_LIBRARY Matlab_ENG_LIBRARY + Matlab_ENGINE_LIBRARY + Matlab_DATAARRAY_LIBRARY Matlab_MAT_LIBRARY Matlab_INCLUDE_DIRS Matlab_FOUND diff --git a/Modules/FindMotif.cmake b/Modules/FindMotif.cmake index 7304d95..4f7080a 100644 --- a/Modules/FindMotif.cmake +++ b/Modules/FindMotif.cmake @@ -1,19 +1,20 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindMotif -# --------- -# -# Try to find Motif (or lesstif) -# -# Once done this will define: -# -# :: -# -# MOTIF_FOUND - system has MOTIF -# MOTIF_INCLUDE_DIR - include paths to use Motif -# MOTIF_LIBRARIES - Link these to use Motif +#[=======================================================================[.rst: +FindMotif +--------- + +Try to find Motif (or lesstif) + +Once done this will define: + +:: + + MOTIF_FOUND - system has MOTIF + MOTIF_INCLUDE_DIR - include paths to use Motif + MOTIF_LIBRARIES - Link these to use Motif +#]=======================================================================] set(MOTIF_FOUND 0) diff --git a/Modules/FindOpenAL.cmake b/Modules/FindOpenAL.cmake index 7521d51..dbd7961 100644 --- a/Modules/FindOpenAL.cmake +++ b/Modules/FindOpenAL.cmake @@ -1,21 +1,22 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindOpenAL -# ---------- -# -# -# -# Locate OpenAL This module defines OPENAL_LIBRARY OPENAL_FOUND, if -# false, do not try to link to OpenAL OPENAL_INCLUDE_DIR, where to find -# the headers -# -# $OPENALDIR is an environment variable that would correspond to the -# ./configure --prefix=$OPENALDIR used in building OpenAL. -# -# Created by Eric Wing. This was influenced by the FindSDL.cmake -# module. +#[=======================================================================[.rst: +FindOpenAL +---------- + + + +Locate OpenAL This module defines OPENAL_LIBRARY OPENAL_FOUND, if +false, do not try to link to OpenAL OPENAL_INCLUDE_DIR, where to find +the headers + +$OPENALDIR is an environment variable that would correspond to the +./configure --prefix=$OPENALDIR used in building OpenAL. + +Created by Eric Wing. This was influenced by the FindSDL.cmake +module. +#]=======================================================================] # This makes the presumption that you are include al.h like # #include "al.h" diff --git a/Modules/FindOpenCL.cmake b/Modules/FindOpenCL.cmake index 297a5fb..79c0382 100644 --- a/Modules/FindOpenCL.cmake +++ b/Modules/FindOpenCL.cmake @@ -1,35 +1,36 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindOpenCL -# ---------- -# -# Try to find OpenCL -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines :prop_tgt:`IMPORTED` target ``OpenCL::OpenCL``, if -# OpenCL has been found. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following variables:: -# -# OpenCL_FOUND - True if OpenCL was found -# OpenCL_INCLUDE_DIRS - include directories for OpenCL -# OpenCL_LIBRARIES - link against this library to use OpenCL -# OpenCL_VERSION_STRING - Highest supported OpenCL version (eg. 1.2) -# OpenCL_VERSION_MAJOR - The major version of the OpenCL implementation -# OpenCL_VERSION_MINOR - The minor version of the OpenCL implementation -# -# The module will also define two cache variables:: -# -# OpenCL_INCLUDE_DIR - the OpenCL include directory -# OpenCL_LIBRARY - the path to the OpenCL library -# +#[=======================================================================[.rst: +FindOpenCL +---------- + +Try to find OpenCL + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``OpenCL::OpenCL``, if +OpenCL has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables:: + + OpenCL_FOUND - True if OpenCL was found + OpenCL_INCLUDE_DIRS - include directories for OpenCL + OpenCL_LIBRARIES - link against this library to use OpenCL + OpenCL_VERSION_STRING - Highest supported OpenCL version (eg. 1.2) + OpenCL_VERSION_MAJOR - The major version of the OpenCL implementation + OpenCL_VERSION_MINOR - The minor version of the OpenCL implementation + +The module will also define two cache variables:: + + OpenCL_INCLUDE_DIR - the OpenCL include directory + OpenCL_LIBRARY - the path to the OpenCL library + +#]=======================================================================] function(_FIND_OPENCL_VERSION) include(CheckSymbolExists) @@ -119,16 +120,27 @@ if(WIN32) OpenCL/common/lib/x64) endif() else() - find_library(OpenCL_LIBRARY - NAMES OpenCL - PATHS - ENV AMDAPPSDKROOT - ENV CUDA_PATH - PATH_SUFFIXES - lib/x86_64 - lib/x64 - lib - lib64) + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + find_library(OpenCL_LIBRARY + NAMES OpenCL + PATHS + ENV AMDAPPSDKROOT + ENV CUDA_PATH + PATH_SUFFIXES + lib/x86 + lib) + elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + find_library(OpenCL_LIBRARY + NAMES OpenCL + PATHS + ENV AMDAPPSDKROOT + ENV CUDA_PATH + PATH_SUFFIXES + lib/x86_64 + lib/x64 + lib + lib64) + endif() endif() set(OpenCL_LIBRARIES ${OpenCL_LIBRARY}) diff --git a/Modules/FindOpenGL.cmake b/Modules/FindOpenGL.cmake index 4d0786c..832dca2 100644 --- a/Modules/FindOpenGL.cmake +++ b/Modules/FindOpenGL.cmake @@ -1,125 +1,126 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindOpenGL -# ---------- -# -# FindModule for OpenGL and GLU. -# -# Optional COMPONENTS -# ^^^^^^^^^^^^^^^^^^^ -# -# This module respects several optional COMPONENTS: ``EGL``, ``GLX``, and -# ``OpenGL``. There are corresponding import targets for each of these flags. -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the :prop_tgt:`IMPORTED` targets: -# -# ``OpenGL::GL`` -# Defined to the platform-specific OpenGL libraries if the system has OpenGL. -# ``OpenGL::OpenGL`` -# Defined to libOpenGL if the system is GLVND-based. -# ``OpenGL::GLU`` -# Defined if the system has GLU. -# ``OpenGL::GLX`` -# Defined if the system has GLX. -# ``OpenGL::EGL`` -# Defined if the system has EGL. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module sets the following variables: -# -# ``OPENGL_FOUND`` -# True, if the system has OpenGL and all components are found. -# ``OPENGL_XMESA_FOUND`` -# True, if the system has XMESA. -# ``OPENGL_GLU_FOUND`` -# True, if the system has GLU. -# ``OpenGL_OpenGL_FOUND`` -# True, if the system has an OpenGL library. -# ``OpenGL_GLX_FOUND`` -# True, if the system has GLX. -# ``OpenGL_EGL_FOUND`` -# True, if the system has EGL. -# ``OPENGL_INCLUDE_DIR`` -# Path to the OpenGL include directory. -# ``OPENGL_EGL_INCLUDE_DIRS`` -# Path to the EGL include directory. -# ``OPENGL_LIBRARIES`` -# Paths to the OpenGL library, windowing system libraries, and GLU libraries. -# On Linux, this assumes GLX and is never correct for EGL-based targets. -# Clients are encouraged to use the ``OpenGL::*`` import targets instead. -# -# Cache variables -# ^^^^^^^^^^^^^^^ -# -# The following cache variables may also be set: -# -# ``OPENGL_egl_LIBRARY`` -# Path to the EGL library. -# ``OPENGL_glu_LIBRARY`` -# Path to the GLU library. -# ``OPENGL_glx_LIBRARY`` -# Path to the GLVND 'GLX' library. -# ``OPENGL_opengl_LIBRARY`` -# Path to the GLVND 'OpenGL' library -# ``OPENGL_gl_LIBRARY`` -# Path to the OpenGL library. New code should prefer the ``OpenGL::*`` import -# targets. -# -# Linux-specific -# ^^^^^^^^^^^^^^ -# -# Some Linux systems utilize GLVND as a new ABI for OpenGL. GLVND separates -# context libraries from OpenGL itself; OpenGL lives in "libOpenGL", and -# contexts are defined in "libGLX" or "libEGL". GLVND is currently the only way -# to get OpenGL 3+ functionality via EGL in a manner portable across vendors. -# Projects may use GLVND explicitly with target ``OpenGL::OpenGL`` and either -# ``OpenGL::GLX`` or ``OpenGL::EGL``. -# -# Projects may use the ``OpenGL::GL`` target (or ``OPENGL_LIBRARIES`` variable) -# to use legacy GL interfaces. These will use the legacy GL library located -# by ``OPENGL_gl_LIBRARY``, if available. If ``OPENGL_gl_LIBRARY`` is empty or -# not found and GLVND is available, the ``OpenGL::GL`` target will use GLVND -# ``OpenGL::OpenGL`` and ``OpenGL::GLX`` (and the ``OPENGL_LIBRARIES`` -# variable will use the corresponding libraries). Thus, for non-EGL-based -# Linux targets, the ``OpenGL::GL`` target is most portable. -# -# A ``OpenGL_GL_PREFERENCE`` variable may be set to specify the preferred way -# to provide legacy GL interfaces in case multiple choices are available. -# The value may be one of: -# -# ``GLVND`` -# If the GLVND OpenGL and GLX libraries are available, prefer them. -# This forces ``OPENGL_gl_LIBRARY`` to be empty. -# This is the default if components were requested (since components -# correspond to GLVND libraries) or if policy :policy:`CMP0072` is -# set to ``NEW``. -# -# ``LEGACY`` -# Prefer to use the legacy libGL library, if available. -# This is the default if no components were requested and -# policy :policy:`CMP0072` is not set to ``NEW``. -# -# For EGL targets the client must rely on GLVND support on the user's system. -# Linking should use the ``OpenGL::OpenGL OpenGL::EGL`` targets. Using GLES* -# libraries is theoretically possible in place of ``OpenGL::OpenGL``, but this -# module does not currently support that; contributions welcome. -# -# ``OPENGL_egl_LIBRARY`` and ``OPENGL_EGL_INCLUDE_DIRS`` are defined in the case of -# GLVND. For non-GLVND Linux and other systems these are left undefined. -# -# macOS-Specific -# ^^^^^^^^^^^^^^ -# -# On OSX FindOpenGL defaults to using the framework version of OpenGL. People -# will have to change the cache values of OPENGL_glu_LIBRARY and -# OPENGL_gl_LIBRARY to use OpenGL with X11 on OSX. +#[=======================================================================[.rst: +FindOpenGL +---------- + +FindModule for OpenGL and GLU. + +Optional COMPONENTS +^^^^^^^^^^^^^^^^^^^ + +This module respects several optional COMPONENTS: ``EGL``, ``GLX``, and +``OpenGL``. There are corresponding import targets for each of these flags. + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines the :prop_tgt:`IMPORTED` targets: + +``OpenGL::GL`` + Defined to the platform-specific OpenGL libraries if the system has OpenGL. +``OpenGL::OpenGL`` + Defined to libOpenGL if the system is GLVND-based. +``OpenGL::GLU`` + Defined if the system has GLU. +``OpenGL::GLX`` + Defined if the system has GLX. +``OpenGL::EGL`` + Defined if the system has EGL. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module sets the following variables: + +``OPENGL_FOUND`` + True, if the system has OpenGL and all components are found. +``OPENGL_XMESA_FOUND`` + True, if the system has XMESA. +``OPENGL_GLU_FOUND`` + True, if the system has GLU. +``OpenGL_OpenGL_FOUND`` + True, if the system has an OpenGL library. +``OpenGL_GLX_FOUND`` + True, if the system has GLX. +``OpenGL_EGL_FOUND`` + True, if the system has EGL. +``OPENGL_INCLUDE_DIR`` + Path to the OpenGL include directory. +``OPENGL_EGL_INCLUDE_DIRS`` + Path to the EGL include directory. +``OPENGL_LIBRARIES`` + Paths to the OpenGL library, windowing system libraries, and GLU libraries. + On Linux, this assumes GLX and is never correct for EGL-based targets. + Clients are encouraged to use the ``OpenGL::*`` import targets instead. + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``OPENGL_egl_LIBRARY`` + Path to the EGL library. +``OPENGL_glu_LIBRARY`` + Path to the GLU library. +``OPENGL_glx_LIBRARY`` + Path to the GLVND 'GLX' library. +``OPENGL_opengl_LIBRARY`` + Path to the GLVND 'OpenGL' library +``OPENGL_gl_LIBRARY`` + Path to the OpenGL library. New code should prefer the ``OpenGL::*`` import + targets. + +Linux-specific +^^^^^^^^^^^^^^ + +Some Linux systems utilize GLVND as a new ABI for OpenGL. GLVND separates +context libraries from OpenGL itself; OpenGL lives in "libOpenGL", and +contexts are defined in "libGLX" or "libEGL". GLVND is currently the only way +to get OpenGL 3+ functionality via EGL in a manner portable across vendors. +Projects may use GLVND explicitly with target ``OpenGL::OpenGL`` and either +``OpenGL::GLX`` or ``OpenGL::EGL``. + +Projects may use the ``OpenGL::GL`` target (or ``OPENGL_LIBRARIES`` variable) +to use legacy GL interfaces. These will use the legacy GL library located +by ``OPENGL_gl_LIBRARY``, if available. If ``OPENGL_gl_LIBRARY`` is empty or +not found and GLVND is available, the ``OpenGL::GL`` target will use GLVND +``OpenGL::OpenGL`` and ``OpenGL::GLX`` (and the ``OPENGL_LIBRARIES`` +variable will use the corresponding libraries). Thus, for non-EGL-based +Linux targets, the ``OpenGL::GL`` target is most portable. + +A ``OpenGL_GL_PREFERENCE`` variable may be set to specify the preferred way +to provide legacy GL interfaces in case multiple choices are available. +The value may be one of: + +``GLVND`` + If the GLVND OpenGL and GLX libraries are available, prefer them. + This forces ``OPENGL_gl_LIBRARY`` to be empty. + This is the default if components were requested (since components + correspond to GLVND libraries) or if policy :policy:`CMP0072` is + set to ``NEW``. + +``LEGACY`` + Prefer to use the legacy libGL library, if available. + This is the default if no components were requested and + policy :policy:`CMP0072` is not set to ``NEW``. + +For EGL targets the client must rely on GLVND support on the user's system. +Linking should use the ``OpenGL::OpenGL OpenGL::EGL`` targets. Using GLES* +libraries is theoretically possible in place of ``OpenGL::OpenGL``, but this +module does not currently support that; contributions welcome. + +``OPENGL_egl_LIBRARY`` and ``OPENGL_EGL_INCLUDE_DIRS`` are defined in the case of +GLVND. For non-GLVND Linux and other systems these are left undefined. + +macOS-Specific +^^^^^^^^^^^^^^ + +On OSX FindOpenGL defaults to using the framework version of OpenGL. People +will have to change the cache values of OPENGL_glu_LIBRARY and +OPENGL_gl_LIBRARY to use OpenGL with X11 on OSX. +#]=======================================================================] set(_OpenGL_REQUIRED_VARS OPENGL_gl_LIBRARY) @@ -267,11 +268,9 @@ else() endif() if(_OpenGL_GL_POLICY_WARN AND OPENGL_gl_LIBRARY AND OPENGL_opengl_LIBRARY AND OPENGL_glx_LIBRARY) + cmake_policy(GET_WARNING CMP0072 _cmp0072_warning) message(AUTHOR_WARNING - "Policy CMP0072 is not set: FindOpenGL prefers GLVND by default when available. " - "Run \"cmake --help-policy CMP0072\" for policy details. " - "Use the cmake_policy command to set the policy and suppress this warning." - "\n" + "${_cmp0072_warning}\n" "FindOpenGL found both a legacy GL library:\n" " OPENGL_gl_LIBRARY: ${OPENGL_gl_LIBRARY}\n" "and GLVND libraries for OpenGL and GLX:\n" diff --git a/Modules/FindOpenMP.cmake b/Modules/FindOpenMP.cmake index df0bbc4..af45d8e 100644 --- a/Modules/FindOpenMP.cmake +++ b/Modules/FindOpenMP.cmake @@ -1,78 +1,79 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindOpenMP -# ---------- -# -# Finds OpenMP support -# -# This module can be used to detect OpenMP support in a compiler. If -# the compiler supports OpenMP, the flags required to compile with -# OpenMP support are returned in variables for the different languages. -# The variables may be empty if the compiler does not need a special -# flag to support OpenMP. -# -# Variables -# ^^^^^^^^^ -# -# The module exposes the components ``C``, ``CXX``, and ``Fortran``. -# Each of these controls the various languages to search OpenMP support for. -# -# Depending on the enabled components the following variables will be set: -# -# ``OpenMP_FOUND`` -# Variable indicating that OpenMP flags for all requested languages have been found. -# If no components are specified, this is true if OpenMP settings for all enabled languages -# were detected. -# ``OpenMP_VERSION`` -# Minimal version of the OpenMP standard detected among the requested languages, -# or all enabled languages if no components were specified. -# -# This module will set the following variables per language in your -# project, where ``<lang>`` is one of C, CXX, or Fortran: -# -# ``OpenMP_<lang>_FOUND`` -# Variable indicating if OpenMP support for ``<lang>`` was detected. -# ``OpenMP_<lang>_FLAGS`` -# OpenMP compiler flags for ``<lang>``, separated by spaces. -# -# For linking with OpenMP code written in ``<lang>``, the following -# variables are provided: -# -# ``OpenMP_<lang>_LIB_NAMES`` -# :ref:`;-list <CMake Language Lists>` of libraries for OpenMP programs for ``<lang>``. -# ``OpenMP_<libname>_LIBRARY`` -# Location of the individual libraries needed for OpenMP support in ``<lang>``. -# ``OpenMP_<lang>_LIBRARIES`` -# A list of libraries needed to link with OpenMP code written in ``<lang>``. -# -# Additionally, the module provides :prop_tgt:`IMPORTED` targets: -# -# ``OpenMP::OpenMP_<lang>`` -# Target for using OpenMP from ``<lang>``. -# -# Specifically for Fortran, the module sets the following variables: -# -# ``OpenMP_Fortran_HAVE_OMPLIB_HEADER`` -# Boolean indicating if OpenMP is accessible through ``omp_lib.h``. -# ``OpenMP_Fortran_HAVE_OMPLIB_MODULE`` -# Boolean indicating if OpenMP is accessible through the ``omp_lib`` Fortran module. -# -# The module will also try to provide the OpenMP version variables: -# -# ``OpenMP_<lang>_SPEC_DATE`` -# Date of the OpenMP specification implemented by the ``<lang>`` compiler. -# ``OpenMP_<lang>_VERSION_MAJOR`` -# Major version of OpenMP implemented by the ``<lang>`` compiler. -# ``OpenMP_<lang>_VERSION_MINOR`` -# Minor version of OpenMP implemented by the ``<lang>`` compiler. -# ``OpenMP_<lang>_VERSION`` -# OpenMP version implemented by the ``<lang>`` compiler. -# -# The specification date is formatted as given in the OpenMP standard: -# ``yyyymm`` where ``yyyy`` and ``mm`` represents the year and month of -# the OpenMP specification implemented by the ``<lang>`` compiler. +#[=======================================================================[.rst: +FindOpenMP +---------- + +Finds OpenMP support + +This module can be used to detect OpenMP support in a compiler. If +the compiler supports OpenMP, the flags required to compile with +OpenMP support are returned in variables for the different languages. +The variables may be empty if the compiler does not need a special +flag to support OpenMP. + +Variables +^^^^^^^^^ + +The module exposes the components ``C``, ``CXX``, and ``Fortran``. +Each of these controls the various languages to search OpenMP support for. + +Depending on the enabled components the following variables will be set: + +``OpenMP_FOUND`` + Variable indicating that OpenMP flags for all requested languages have been found. + If no components are specified, this is true if OpenMP settings for all enabled languages + were detected. +``OpenMP_VERSION`` + Minimal version of the OpenMP standard detected among the requested languages, + or all enabled languages if no components were specified. + +This module will set the following variables per language in your +project, where ``<lang>`` is one of C, CXX, or Fortran: + +``OpenMP_<lang>_FOUND`` + Variable indicating if OpenMP support for ``<lang>`` was detected. +``OpenMP_<lang>_FLAGS`` + OpenMP compiler flags for ``<lang>``, separated by spaces. + +For linking with OpenMP code written in ``<lang>``, the following +variables are provided: + +``OpenMP_<lang>_LIB_NAMES`` + :ref:`;-list <CMake Language Lists>` of libraries for OpenMP programs for ``<lang>``. +``OpenMP_<libname>_LIBRARY`` + Location of the individual libraries needed for OpenMP support in ``<lang>``. +``OpenMP_<lang>_LIBRARIES`` + A list of libraries needed to link with OpenMP code written in ``<lang>``. + +Additionally, the module provides :prop_tgt:`IMPORTED` targets: + +``OpenMP::OpenMP_<lang>`` + Target for using OpenMP from ``<lang>``. + +Specifically for Fortran, the module sets the following variables: + +``OpenMP_Fortran_HAVE_OMPLIB_HEADER`` + Boolean indicating if OpenMP is accessible through ``omp_lib.h``. +``OpenMP_Fortran_HAVE_OMPLIB_MODULE`` + Boolean indicating if OpenMP is accessible through the ``omp_lib`` Fortran module. + +The module will also try to provide the OpenMP version variables: + +``OpenMP_<lang>_SPEC_DATE`` + Date of the OpenMP specification implemented by the ``<lang>`` compiler. +``OpenMP_<lang>_VERSION_MAJOR`` + Major version of OpenMP implemented by the ``<lang>`` compiler. +``OpenMP_<lang>_VERSION_MINOR`` + Minor version of OpenMP implemented by the ``<lang>`` compiler. +``OpenMP_<lang>_VERSION`` + OpenMP version implemented by the ``<lang>`` compiler. + +The specification date is formatted as given in the OpenMP standard: +``yyyymm`` where ``yyyy`` and ``mm`` represents the year and month of +the OpenMP specification implemented by the ``<lang>`` compiler. +#]=======================================================================] cmake_policy(PUSH) cmake_policy(SET CMP0012 NEW) # if() recognizes numbers and booleans diff --git a/Modules/FindOpenSSL.cmake b/Modules/FindOpenSSL.cmake index d5cd8bc..5f947fe 100644 --- a/Modules/FindOpenSSL.cmake +++ b/Modules/FindOpenSSL.cmake @@ -1,53 +1,54 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindOpenSSL -# ----------- -# -# Find the OpenSSL encryption library. -# -# Optional COMPONENTS -# ^^^^^^^^^^^^^^^^^^^ -# -# This module supports two optional COMPONENTS: ``Crypto`` and ``SSL``. Both -# components have associated imported targets, as described below. -# -# Imported Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following :prop_tgt:`IMPORTED` targets: -# -# ``OpenSSL::SSL`` -# The OpenSSL ``ssl`` library, if found. -# ``OpenSSL::Crypto`` -# The OpenSSL ``crypto`` library, if found. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module will set the following variables in your project: -# -# ``OPENSSL_FOUND`` -# System has the OpenSSL library. If no components are requested it only -# requires the crypto library. -# ``OPENSSL_INCLUDE_DIR`` -# The OpenSSL include directory. -# ``OPENSSL_CRYPTO_LIBRARY`` -# The OpenSSL crypto library. -# ``OPENSSL_SSL_LIBRARY`` -# The OpenSSL SSL library. -# ``OPENSSL_LIBRARIES`` -# All OpenSSL libraries. -# ``OPENSSL_VERSION`` -# This is set to ``$major.$minor.$revision$patch`` (e.g. ``0.9.8s``). -# -# Hints -# ^^^^^ -# -# Set ``OPENSSL_ROOT_DIR`` to the root directory of an OpenSSL installation. -# Set ``OPENSSL_USE_STATIC_LIBS`` to ``TRUE`` to look for static libraries. -# Set ``OPENSSL_MSVC_STATIC_RT`` set ``TRUE`` to choose the MT version of the lib. +#[=======================================================================[.rst: +FindOpenSSL +----------- + +Find the OpenSSL encryption library. + +Optional COMPONENTS +^^^^^^^^^^^^^^^^^^^ + +This module supports two optional COMPONENTS: ``Crypto`` and ``SSL``. Both +components have associated imported targets, as described below. + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``OpenSSL::SSL`` + The OpenSSL ``ssl`` library, if found. +``OpenSSL::Crypto`` + The OpenSSL ``crypto`` library, if found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``OPENSSL_FOUND`` + System has the OpenSSL library. If no components are requested it only + requires the crypto library. +``OPENSSL_INCLUDE_DIR`` + The OpenSSL include directory. +``OPENSSL_CRYPTO_LIBRARY`` + The OpenSSL crypto library. +``OPENSSL_SSL_LIBRARY`` + The OpenSSL SSL library. +``OPENSSL_LIBRARIES`` + All OpenSSL libraries. +``OPENSSL_VERSION`` + This is set to ``$major.$minor.$revision$patch`` (e.g. ``0.9.8s``). + +Hints +^^^^^ + +Set ``OPENSSL_ROOT_DIR`` to the root directory of an OpenSSL installation. +Set ``OPENSSL_USE_STATIC_LIBS`` to ``TRUE`` to look for static libraries. +Set ``OPENSSL_MSVC_STATIC_RT`` set ``TRUE`` to choose the MT version of the lib. +#]=======================================================================] if (UNIX) find_package(PkgConfig QUIET) diff --git a/Modules/FindOpenSceneGraph.cmake b/Modules/FindOpenSceneGraph.cmake index 425aa45..6f7d3c8 100644 --- a/Modules/FindOpenSceneGraph.cmake +++ b/Modules/FindOpenSceneGraph.cmake @@ -1,102 +1,103 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindOpenSceneGraph -# ------------------ -# -# Find OpenSceneGraph -# -# This module searches for the OpenSceneGraph core "osg" library as well -# as OpenThreads, and whatever additional COMPONENTS (nodekits) that you -# specify. -# -# :: -# -# See http://www.openscenegraph.org -# -# -# -# NOTE: To use this module effectively you must either require CMake >= -# 2.6.3 with cmake_minimum_required(VERSION 2.6.3) or download and place -# FindOpenThreads.cmake, Findosg_functions.cmake, Findosg.cmake, and -# Find<etc>.cmake files into your CMAKE_MODULE_PATH. -# -# ================================== -# -# This module accepts the following variables (note mixed case) -# -# :: -# -# OpenSceneGraph_DEBUG - Enable debugging output -# -# -# -# :: -# -# OpenSceneGraph_MARK_AS_ADVANCED - Mark cache variables as advanced -# automatically -# -# -# -# The following environment variables are also respected for finding the -# OSG and it's various components. CMAKE_PREFIX_PATH can also be used -# for this (see find_library() CMake documentation). -# -# ``<MODULE>_DIR`` -# (where MODULE is of the form "OSGVOLUME" and there is a FindosgVolume.cmake file) -# ``OSG_DIR`` -# .. -# ``OSGDIR`` -# .. -# ``OSG_ROOT`` -# .. -# -# -# [CMake 2.8.10]: The CMake variable OSG_DIR can now be used as well to -# influence detection, instead of needing to specify an environment -# variable. -# -# This module defines the following output variables: -# -# :: -# -# OPENSCENEGRAPH_FOUND - Was the OSG and all of the specified components found? -# -# -# -# :: -# -# OPENSCENEGRAPH_VERSION - The version of the OSG which was found -# -# -# -# :: -# -# OPENSCENEGRAPH_INCLUDE_DIRS - Where to find the headers -# -# -# -# :: -# -# OPENSCENEGRAPH_LIBRARIES - The OSG libraries -# -# -# -# ================================== Example Usage: -# -# :: -# -# find_package(OpenSceneGraph 2.0.0 REQUIRED osgDB osgUtil) -# # libOpenThreads & libosg automatically searched -# include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS}) -# -# -# -# :: -# -# add_executable(foo foo.cc) -# target_link_libraries(foo ${OPENSCENEGRAPH_LIBRARIES}) +#[=======================================================================[.rst: +FindOpenSceneGraph +------------------ + +Find OpenSceneGraph + +This module searches for the OpenSceneGraph core "osg" library as well +as OpenThreads, and whatever additional COMPONENTS (nodekits) that you +specify. + +:: + + See http://www.openscenegraph.org + + + +NOTE: To use this module effectively you must either require CMake >= +2.6.3 with cmake_minimum_required(VERSION 2.6.3) or download and place +FindOpenThreads.cmake, Findosg_functions.cmake, Findosg.cmake, and +Find<etc>.cmake files into your CMAKE_MODULE_PATH. + +================================== + +This module accepts the following variables (note mixed case) + +:: + + OpenSceneGraph_DEBUG - Enable debugging output + + + +:: + + OpenSceneGraph_MARK_AS_ADVANCED - Mark cache variables as advanced + automatically + + + +The following environment variables are also respected for finding the +OSG and it's various components. CMAKE_PREFIX_PATH can also be used +for this (see find_library() CMake documentation). + +``<MODULE>_DIR`` + (where MODULE is of the form "OSGVOLUME" and there is a FindosgVolume.cmake file) +``OSG_DIR`` + .. +``OSGDIR`` + .. +``OSG_ROOT`` + .. + + +[CMake 2.8.10]: The CMake variable OSG_DIR can now be used as well to +influence detection, instead of needing to specify an environment +variable. + +This module defines the following output variables: + +:: + + OPENSCENEGRAPH_FOUND - Was the OSG and all of the specified components found? + + + +:: + + OPENSCENEGRAPH_VERSION - The version of the OSG which was found + + + +:: + + OPENSCENEGRAPH_INCLUDE_DIRS - Where to find the headers + + + +:: + + OPENSCENEGRAPH_LIBRARIES - The OSG libraries + + + +================================== Example Usage: + +:: + + find_package(OpenSceneGraph 2.0.0 REQUIRED osgDB osgUtil) + # libOpenThreads & libosg automatically searched + include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS}) + + + +:: + + add_executable(foo foo.cc) + target_link_libraries(foo ${OPENSCENEGRAPH_LIBRARIES}) +#]=======================================================================] # # Naming convention: diff --git a/Modules/FindOpenThreads.cmake b/Modules/FindOpenThreads.cmake index a197e4d..bc45eea 100644 --- a/Modules/FindOpenThreads.cmake +++ b/Modules/FindOpenThreads.cmake @@ -1,30 +1,31 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindOpenThreads -# --------------- -# -# -# -# OpenThreads is a C++ based threading library. Its largest userbase -# seems to OpenSceneGraph so you might notice I accept OSGDIR as an -# environment path. I consider this part of the Findosg* suite used to -# find OpenSceneGraph components. Each component is separate and you -# must opt in to each module. -# -# Locate OpenThreads This module defines OPENTHREADS_LIBRARY -# OPENTHREADS_FOUND, if false, do not try to link to OpenThreads -# OPENTHREADS_INCLUDE_DIR, where to find the headers -# -# $OPENTHREADS_DIR is an environment variable that would correspond to -# the ./configure --prefix=$OPENTHREADS_DIR used in building osg. -# -# [CMake 2.8.10]: The CMake variables OPENTHREADS_DIR or OSG_DIR can now -# be used as well to influence detection, instead of needing to specify -# an environment variable. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindOpenThreads +--------------- + + + +OpenThreads is a C++ based threading library. Its largest userbase +seems to OpenSceneGraph so you might notice I accept OSGDIR as an +environment path. I consider this part of the Findosg* suite used to +find OpenSceneGraph components. Each component is separate and you +must opt in to each module. + +Locate OpenThreads This module defines OPENTHREADS_LIBRARY +OPENTHREADS_FOUND, if false, do not try to link to OpenThreads +OPENTHREADS_INCLUDE_DIR, where to find the headers + +$OPENTHREADS_DIR is an environment variable that would correspond to +the ./configure --prefix=$OPENTHREADS_DIR used in building osg. + +[CMake 2.8.10]: The CMake variables OPENTHREADS_DIR or OSG_DIR can now +be used as well to influence detection, instead of needing to specify +an environment variable. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <OpenThreads/Thread> @@ -47,6 +48,8 @@ # standard install paths. # Explicit -DVAR=value arguments should still be able to override everything. +include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) + find_path(OPENTHREADS_INCLUDE_DIR OpenThreads/Thread HINTS ENV OPENTHREADS_INCLUDE_DIR @@ -62,7 +65,7 @@ find_path(OPENTHREADS_INCLUDE_DIR OpenThreads/Thread ) -find_library(OPENTHREADS_LIBRARY +find_library(OPENTHREADS_LIBRARY_RELEASE NAMES OpenThreads OpenThreadsWin32 HINTS ENV OPENTHREADS_LIBRARY_DIR @@ -93,13 +96,7 @@ find_library(OPENTHREADS_LIBRARY_DEBUG PATH_SUFFIXES lib ) -if(OPENTHREADS_LIBRARY_DEBUG) - set(OPENTHREADS_LIBRARIES - optimized ${OPENTHREADS_LIBRARY} - debug ${OPENTHREADS_LIBRARY_DEBUG}) -else() - set(OPENTHREADS_LIBRARIES ${OPENTHREADS_LIBRARY}) -endif() +select_library_configurations(OPENTHREADS) include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) FIND_PACKAGE_HANDLE_STANDARD_ARGS(OpenThreads DEFAULT_MSG diff --git a/Modules/FindPHP4.cmake b/Modules/FindPHP4.cmake index 426453b..34b4adb 100644 --- a/Modules/FindPHP4.cmake +++ b/Modules/FindPHP4.cmake @@ -1,20 +1,21 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindPHP4 -# -------- -# -# Find PHP4 -# -# This module finds if PHP4 is installed and determines where the -# include files and libraries are. It also determines what the name of -# the library is. This code sets the following variables: -# -# :: -# -# PHP4_INCLUDE_PATH = path to where php.h can be found -# PHP4_EXECUTABLE = full path to the php4 binary +#[=======================================================================[.rst: +FindPHP4 +-------- + +Find PHP4 + +This module finds if PHP4 is installed and determines where the +include files and libraries are. It also determines what the name of +the library is. This code sets the following variables: + +:: + + PHP4_INCLUDE_PATH = path to where php.h can be found + PHP4_EXECUTABLE = full path to the php4 binary +#]=======================================================================] set(PHP4_POSSIBLE_INCLUDE_PATHS /usr/include/php4 diff --git a/Modules/FindPNG.cmake b/Modules/FindPNG.cmake index 936f01f..2208b48 100644 --- a/Modules/FindPNG.cmake +++ b/Modules/FindPNG.cmake @@ -1,49 +1,50 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindPNG -# ------- -# -# Find libpng, the official reference library for the PNG image format. -# -# Imported targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following :prop_tgt:`IMPORTED` target: -# -# ``PNG::PNG`` -# The libpng library, if found. -# -# Result variables -# ^^^^^^^^^^^^^^^^ -# -# This module will set the following variables in your project: -# -# ``PNG_INCLUDE_DIRS`` -# where to find png.h, etc. -# ``PNG_LIBRARIES`` -# the libraries to link against to use PNG. -# ``PNG_DEFINITIONS`` -# You should add_definitions(${PNG_DEFINITIONS}) before compiling code -# that includes png library files. -# ``PNG_FOUND`` -# If false, do not try to use PNG. -# ``PNG_VERSION_STRING`` -# the version of the PNG library found (since CMake 2.8.8) -# -# Obsolete variables -# ^^^^^^^^^^^^^^^^^^ -# -# The following variables may also be set, for backwards compatibility: -# -# ``PNG_LIBRARY`` -# where to find the PNG library. -# ``PNG_INCLUDE_DIR`` -# where to find the PNG headers (same as PNG_INCLUDE_DIRS) -# -# Since PNG depends on the ZLib compression library, none of the above -# will be defined unless ZLib can be found. +#[=======================================================================[.rst: +FindPNG +------- + +Find libpng, the official reference library for the PNG image format. + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` target: + +``PNG::PNG`` + The libpng library, if found. + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``PNG_INCLUDE_DIRS`` + where to find png.h, etc. +``PNG_LIBRARIES`` + the libraries to link against to use PNG. +``PNG_DEFINITIONS`` + You should add_definitions(${PNG_DEFINITIONS}) before compiling code + that includes png library files. +``PNG_FOUND`` + If false, do not try to use PNG. +``PNG_VERSION_STRING`` + the version of the PNG library found (since CMake 2.8.8) + +Obsolete variables +^^^^^^^^^^^^^^^^^^ + +The following variables may also be set, for backwards compatibility: + +``PNG_LIBRARY`` + where to find the PNG library. +``PNG_INCLUDE_DIR`` + where to find the PNG headers (same as PNG_INCLUDE_DIRS) + +Since PNG depends on the ZLib compression library, none of the above +will be defined unless ZLib can be found. +#]=======================================================================] if(PNG_FIND_QUIETLY) set(_FIND_ZLIB_ARG QUIET) diff --git a/Modules/FindPackageHandleStandardArgs.cmake b/Modules/FindPackageHandleStandardArgs.cmake index 67f6bd6..1722d6a 100644 --- a/Modules/FindPackageHandleStandardArgs.cmake +++ b/Modules/FindPackageHandleStandardArgs.cmake @@ -145,7 +145,7 @@ endmacro() # internal helper macro to generate the failure message when used in CONFIG_MODE: macro(_FPHSA_HANDLE_FAILURE_CONFIG_MODE) - # <name>_CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found: + # <PackageName>_CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found: if(${_NAME}_CONFIG) _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing:${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})") else() @@ -199,7 +199,7 @@ function(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG) set(FPHSA_FAIL_MESSAGE "DEFAULT_MSG") endif() - # In config-mode, we rely on the variable <package>_CONFIG, which is set by find_package() + # In config-mode, we rely on the variable <PackageName>_CONFIG, which is set by find_package() # when it successfully found the config-file, including version checking: if(FPHSA_CONFIG_MODE) list(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG) diff --git a/Modules/FindPackageMessage.cmake b/Modules/FindPackageMessage.cmake index 6821cee..1cdfde8 100644 --- a/Modules/FindPackageMessage.cmake +++ b/Modules/FindPackageMessage.cmake @@ -1,33 +1,34 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindPackageMessage -# ------------------ -# -# -# -# FIND_PACKAGE_MESSAGE(<name> "message for user" "find result details") -# -# This macro is intended to be used in FindXXX.cmake modules files. It -# will print a message once for each unique find result. This is useful -# for telling the user where a package was found. The first argument -# specifies the name (XXX) of the package. The second argument -# specifies the message to display. The third argument lists details -# about the find result so that if they change the message will be -# displayed again. The macro also obeys the QUIET argument to the -# find_package command. -# -# Example: -# -# :: -# -# if(X11_FOUND) -# FIND_PACKAGE_MESSAGE(X11 "Found X11: ${X11_X11_LIB}" -# "[${X11_X11_LIB}][${X11_INCLUDE_DIR}]") -# else() -# ... -# endif() +#[=======================================================================[.rst: +FindPackageMessage +------------------ + + + +FIND_PACKAGE_MESSAGE(<name> "message for user" "find result details") + +This macro is intended to be used in FindXXX.cmake modules files. It +will print a message once for each unique find result. This is useful +for telling the user where a package was found. The first argument +specifies the name (XXX) of the package. The second argument +specifies the message to display. The third argument lists details +about the find result so that if they change the message will be +displayed again. The macro also obeys the QUIET argument to the +find_package command. + +Example: + +:: + + if(X11_FOUND) + FIND_PACKAGE_MESSAGE(X11 "Found X11: ${X11_X11_LIB}" + "[${X11_X11_LIB}][${X11_INCLUDE_DIR}]") + else() + ... + endif() +#]=======================================================================] function(FIND_PACKAGE_MESSAGE pkg msg details) # Avoid printing a message repeatedly for the same find result. diff --git a/Modules/FindPatch.cmake b/Modules/FindPatch.cmake index 3ebcae9..4998839 100644 --- a/Modules/FindPatch.cmake +++ b/Modules/FindPatch.cmake @@ -1,30 +1,31 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindPatch -# --------- -# -# The module defines the following variables: -# -# ``Patch_EXECUTABLE`` -# Path to patch command-line executable. -# ``Patch_FOUND`` -# True if the patch command-line executable was found. -# -# The following :prop_tgt:`IMPORTED` targets are also defined: -# -# ``Patch::patch`` -# The command-line executable. -# -# Example usage: -# -# .. code-block:: cmake -# -# find_package(Patch) -# if(Patch_FOUND) -# message("Patch found: ${Patch_EXECUTABLE}") -# endif() +#[=======================================================================[.rst: +FindPatch +--------- + +The module defines the following variables: + +``Patch_EXECUTABLE`` + Path to patch command-line executable. +``Patch_FOUND`` + True if the patch command-line executable was found. + +The following :prop_tgt:`IMPORTED` targets are also defined: + +``Patch::patch`` + The command-line executable. + +Example usage: + +.. code-block:: cmake + + find_package(Patch) + if(Patch_FOUND) + message("Patch found: ${Patch_EXECUTABLE}") + endif() +#]=======================================================================] set(_doc "Patch command line executable") set(_patch_path ) diff --git a/Modules/FindPerl.cmake b/Modules/FindPerl.cmake index c38527c..fd120bf 100644 --- a/Modules/FindPerl.cmake +++ b/Modules/FindPerl.cmake @@ -1,19 +1,20 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindPerl -# -------- -# -# Find perl -# -# this module looks for Perl -# -# :: -# -# PERL_EXECUTABLE - the full path to perl -# PERL_FOUND - If false, don't attempt to use perl. -# PERL_VERSION_STRING - version of perl found (since CMake 2.8.8) +#[=======================================================================[.rst: +FindPerl +-------- + +Find perl + +this module looks for Perl + +:: + + PERL_EXECUTABLE - the full path to perl + PERL_FOUND - If false, don't attempt to use perl. + PERL_VERSION_STRING - version of perl found (since CMake 2.8.8) +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake) diff --git a/Modules/FindPerlLibs.cmake b/Modules/FindPerlLibs.cmake index 0b902e7..7e27f31 100644 --- a/Modules/FindPerlLibs.cmake +++ b/Modules/FindPerlLibs.cmake @@ -1,47 +1,48 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindPerlLibs -# ------------ -# -# Find Perl libraries -# -# This module finds if PERL is installed and determines where the -# include files and libraries are. It also determines what the name of -# the library is. This code sets the following variables: -# -# :: -# -# PERLLIBS_FOUND = True if perl.h & libperl were found -# PERL_INCLUDE_PATH = path to where perl.h is found -# PERL_LIBRARY = path to libperl -# PERL_EXECUTABLE = full path to the perl binary -# -# -# -# The minimum required version of Perl can be specified using the -# standard syntax, e.g. find_package(PerlLibs 6.0) -# -# :: -# -# The following variables are also available if needed -# (introduced after CMake 2.6.4) -# -# -# -# :: -# -# PERL_SITESEARCH = path to the sitesearch install dir (-V:installsitesearch) -# PERL_SITEARCH = path to the sitelib install directory (-V:installsitearch) -# PERL_SITELIB = path to the sitelib install directory (-V:installsitelib) -# PERL_VENDORARCH = path to the vendor arch install directory (-V:installvendorarch) -# PERL_VENDORLIB = path to the vendor lib install directory (-V:installvendorlib) -# PERL_ARCHLIB = path to the core arch lib install directory (-V:archlib) -# PERL_PRIVLIB = path to the core priv lib install directory (-V:privlib) -# PERL_UPDATE_ARCHLIB = path to the update arch lib install directory (-V:installarchlib) -# PERL_UPDATE_PRIVLIB = path to the update priv lib install directory (-V:installprivlib) -# PERL_EXTRA_C_FLAGS = Compilation flags used to build perl +#[=======================================================================[.rst: +FindPerlLibs +------------ + +Find Perl libraries + +This module finds if PERL is installed and determines where the +include files and libraries are. It also determines what the name of +the library is. This code sets the following variables: + +:: + + PERLLIBS_FOUND = True if perl.h & libperl were found + PERL_INCLUDE_PATH = path to where perl.h is found + PERL_LIBRARY = path to libperl + PERL_EXECUTABLE = full path to the perl binary + + + +The minimum required version of Perl can be specified using the +standard syntax, e.g. find_package(PerlLibs 6.0) + +:: + + The following variables are also available if needed + (introduced after CMake 2.6.4) + + + +:: + + PERL_SITESEARCH = path to the sitesearch install dir (-V:installsitesearch) + PERL_SITEARCH = path to the sitelib install directory (-V:installsitearch) + PERL_SITELIB = path to the sitelib install directory (-V:installsitelib) + PERL_VENDORARCH = path to the vendor arch install directory (-V:installvendorarch) + PERL_VENDORLIB = path to the vendor lib install directory (-V:installvendorlib) + PERL_ARCHLIB = path to the core arch lib install directory (-V:archlib) + PERL_PRIVLIB = path to the core priv lib install directory (-V:privlib) + PERL_UPDATE_ARCHLIB = path to the update arch lib install directory (-V:installarchlib) + PERL_UPDATE_PRIVLIB = path to the update priv lib install directory (-V:installprivlib) + PERL_EXTRA_C_FLAGS = Compilation flags used to build perl +#]=======================================================================] # find the perl executable include(${CMAKE_CURRENT_LIST_DIR}/FindPerl.cmake) diff --git a/Modules/FindPhysFS.cmake b/Modules/FindPhysFS.cmake index cfe9b0f..0366f77 100644 --- a/Modules/FindPhysFS.cmake +++ b/Modules/FindPhysFS.cmake @@ -1,20 +1,21 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindPhysFS -# ---------- -# -# -# -# Locate PhysFS library This module defines PHYSFS_LIBRARY, the name of -# the library to link against PHYSFS_FOUND, if false, do not try to link -# to PHYSFS PHYSFS_INCLUDE_DIR, where to find physfs.h -# -# $PHYSFSDIR is an environment variable that would correspond to the -# ./configure --prefix=$PHYSFSDIR used in building PHYSFS. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindPhysFS +---------- + + + +Locate PhysFS library This module defines PHYSFS_LIBRARY, the name of +the library to link against PHYSFS_FOUND, if false, do not try to link +to PHYSFS PHYSFS_INCLUDE_DIR, where to find physfs.h + +$PHYSFSDIR is an environment variable that would correspond to the +./configure --prefix=$PHYSFSDIR used in building PHYSFS. + +Created by Eric Wing. +#]=======================================================================] find_path(PHYSFS_INCLUDE_DIR physfs.h HINTS diff --git a/Modules/FindPike.cmake b/Modules/FindPike.cmake index ec71c94..b78db2a 100644 --- a/Modules/FindPike.cmake +++ b/Modules/FindPike.cmake @@ -1,20 +1,21 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindPike -# -------- -# -# Find Pike -# -# This module finds if PIKE is installed and determines where the -# include files and libraries are. It also determines what the name of -# the library is. This code sets the following variables: -# -# :: -# -# PIKE_INCLUDE_PATH = path to where program.h is found -# PIKE_EXECUTABLE = full path to the pike binary +#[=======================================================================[.rst: +FindPike +-------- + +Find Pike + +This module finds if PIKE is installed and determines where the +include files and libraries are. It also determines what the name of +the library is. This code sets the following variables: + +:: + + PIKE_INCLUDE_PATH = path to where program.h is found + PIKE_EXECUTABLE = full path to the pike binary +#]=======================================================================] find_path(PIKE_INCLUDE_PATH program.h ${PIKE_POSSIBLE_INCLUDE_PATHS} diff --git a/Modules/FindPkgConfig.cmake b/Modules/FindPkgConfig.cmake index 775a9d7..a45aef2 100644 --- a/Modules/FindPkgConfig.cmake +++ b/Modules/FindPkgConfig.cmake @@ -9,12 +9,14 @@ A ``pkg-config`` module for CMake. Finds the ``pkg-config`` executable and adds the :command:`pkg_get_variable`, :command:`pkg_check_modules` and :command:`pkg_search_module` commands. The -following variables will also be set:: +following variables will also be set: - PKG_CONFIG_FOUND ... if pkg-config executable was found - PKG_CONFIG_EXECUTABLE ... pathname of the pkg-config program - PKG_CONFIG_VERSION_STRING ... the version of the pkg-config program found - (since CMake 2.8.8) +``PKG_CONFIG_FOUND`` + if pkg-config executable was found +``PKG_CONFIG_EXECUTABLE`` + pathname of the pkg-config program +``PKG_CONFIG_VERSION_STRING`` + version of pkg-config (since CMake 2.8.8) #]========================================] @@ -86,7 +88,9 @@ endmacro() .. command:: pkg_get_variable Retrieves the value of a pkg-config variable ``varName`` and stores it in the - result variable ``resultVar`` in the calling scope. :: + result variable ``resultVar`` in the calling scope. + + .. code-block:: cmake pkg_get_variable(<resultVar> <moduleName> <varName>) @@ -114,12 +118,13 @@ macro(_pkgconfig_invoke_dyn _pkglist _prefix _varname cleanup_regexp) endmacro() # Splits given arguments into options and a package list -macro(_pkgconfig_parse_options _result _is_req _is_silent _no_cmake_path _no_cmake_environment_path _imp_target) +macro(_pkgconfig_parse_options _result _is_req _is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global) set(${_is_req} 0) set(${_is_silent} 0) set(${_no_cmake_path} 0) set(${_no_cmake_environment_path} 0) set(${_imp_target} 0) + set(${_imp_target_global} 0) if(DEFINED PKG_CONFIG_USE_CMAKE_PREFIX_PATH) if(NOT PKG_CONFIG_USE_CMAKE_PREFIX_PATH) set(${_no_cmake_path} 1) @@ -146,14 +151,22 @@ macro(_pkgconfig_parse_options _result _is_req _is_silent _no_cmake_path _no_cma if (_pkg STREQUAL "IMPORTED_TARGET") set(${_imp_target} 1) endif() + if (_pkg STREQUAL "GLOBAL") + set(${_imp_target_global} 1) + endif() endforeach() + if (${_imp_target_global} AND NOT ${_imp_target}) + message(SEND_ERROR "the argument GLOBAL may only be used together with IMPORTED_TARGET") + endif() + set(${_result} ${ARGN}) list(REMOVE_ITEM ${_result} "REQUIRED") list(REMOVE_ITEM ${_result} "QUIET") list(REMOVE_ITEM ${_result} "NO_CMAKE_PATH") list(REMOVE_ITEM ${_result} "NO_CMAKE_ENVIRONMENT_PATH") list(REMOVE_ITEM ${_result} "IMPORTED_TARGET") + list(REMOVE_ITEM ${_result} "GLOBAL") endmacro() # Add the content of a variable or an environment variable to a list of @@ -225,11 +238,16 @@ function(_pkg_find_libs _prefix _no_cmake_path _no_cmake_environment_path) endfunction() # create an imported target from all the information returned by pkg-config -function(_pkg_create_imp_target _prefix) +function(_pkg_create_imp_target _prefix _imp_target_global) # only create the target if it is linkable, i.e. no executables if (NOT TARGET PkgConfig::${_prefix} AND ( ${_prefix}_INCLUDE_DIRS OR ${_prefix}_LINK_LIBRARIES OR ${_prefix}_CFLAGS_OTHER )) - add_library(PkgConfig::${_prefix} INTERFACE IMPORTED) + if(${_imp_target_global}) + set(_global_opt "GLOBAL") + else() + unset(_global_opt) + endif() + add_library(PkgConfig::${_prefix} INTERFACE IMPORTED ${_global_opt}) if(${_prefix}_INCLUDE_DIRS) set_property(TARGET PkgConfig::${_prefix} PROPERTY @@ -248,15 +266,15 @@ endfunction() # recalculate the dynamic output # this is a macro and not a function so the result of _pkg_find_libs is automatically propagated -macro(_pkg_recalculate _prefix _no_cmake_path _no_cmake_environment_path _imp_target) +macro(_pkg_recalculate _prefix _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global) _pkg_find_libs(${_prefix} ${_no_cmake_path} ${_no_cmake_environment_path}) if(${_imp_target}) - _pkg_create_imp_target(${_prefix}) + _pkg_create_imp_target(${_prefix} ${_imp_target_global}) endif() endmacro() ### -macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cmake_environment_path _imp_target _prefix) +macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global _prefix) _pkgconfig_unset(${_prefix}_FOUND) _pkgconfig_unset(${_prefix}_VERSION) _pkgconfig_unset(${_prefix}_PREFIX) @@ -383,7 +401,7 @@ macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cma set(_pkg_check_modules_exist_query) # check whether version is given - if (_pkg_check_modules_pkg MATCHES "(.*[^><])(>=|=|<=)(.*)") + if (_pkg_check_modules_pkg MATCHES "(.*[^><])(=|[><]=?)(.*)") set(_pkg_check_modules_pkg_name "${CMAKE_MATCH_1}") set(_pkg_check_modules_pkg_op "${CMAKE_MATCH_2}") set(_pkg_check_modules_pkg_ver "${CMAKE_MATCH_3}") @@ -401,9 +419,11 @@ macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cma list(APPEND _pkg_check_modules_packages "${_pkg_check_modules_pkg_name}") # create the final query which is of the format: + # * <pkg-name> > <version> # * <pkg-name> >= <version> # * <pkg-name> = <version> # * <pkg-name> <= <version> + # * <pkg-name> < <version> # * --exists <pkg-name> list(APPEND _pkg_check_modules_exist_query --print-errors --short-errors) if (_pkg_check_modules_pkg_op) @@ -474,7 +494,7 @@ macro(_pkg_check_modules_internal _is_required _is_silent _no_cmake_path _no_cma _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS "" --cflags ) _pkgconfig_invoke_dyn("${_pkg_check_modules_packages}" "${_prefix}" CFLAGS_OTHER "" --cflags-only-other ) - _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target}) + _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global}) endif() if(NOT "${_extra_paths}" STREQUAL "") @@ -496,13 +516,15 @@ endmacro() .. command:: pkg_check_modules Checks for all the given modules, setting a variety of result variables in - the calling scope. :: + the calling scope. + + .. code-block:: cmake pkg_check_modules(<prefix> [REQUIRED] [QUIET] [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH] - [IMPORTED_TARGET] + [IMPORTED_TARGET [GLOBAL]] <moduleSpec> [<moduleSpec>...]) When the ``REQUIRED`` argument is given, the command will fail with an error @@ -521,29 +543,42 @@ endmacro() The ``IMPORTED_TARGET`` argument will create an imported target named ``PkgConfig::<prefix>`` that can be passed directly as an argument to - :command:`target_link_libraries`. - - Each ``<moduleSpec>`` must be in one of the following formats:: - - {moduleName} ... matches any version - {moduleName}>={version} ... at least version <version> is required - {moduleName}={version} ... exactly version <version> is required - {moduleName}<={version} ... modules must not be newer than <version> - - The following variables may be set upon return. Two sets of values exist, - one for the common case (``<XXX> = <prefix>``) and another for the - information ``pkg-config`` provides when it is called with the ``--static`` - option (``<XXX> = <prefix>_STATIC``):: - - <XXX>_FOUND ... set to 1 if module(s) exist - <XXX>_LIBRARIES ... only the libraries (without the '-l') - <XXX>_LINK_LIBRARIES ... the libraries and their absolute paths - <XXX>_LIBRARY_DIRS ... the paths of the libraries (without the '-L') - <XXX>_LDFLAGS ... all required linker flags - <XXX>_LDFLAGS_OTHER ... all other linker flags - <XXX>_INCLUDE_DIRS ... the '-I' preprocessor flags (without the '-I') - <XXX>_CFLAGS ... all required cflags - <XXX>_CFLAGS_OTHER ... the other compiler flags + :command:`target_link_libraries`. The ``GLOBAL`` argument will make the + imported target available in global scope. + + Each ``<moduleSpec>`` can be either a bare module name or it can be a + module name with a version constraint (operators ``=``, ``<``, ``>``, + ``<=`` and ``>=`` are supported). The following are examples for a module + named ``foo`` with various constraints: + + - ``foo`` matches any version. + - ``foo<2`` only matches versions before 2. + - ``foo>=3.1`` matches any version from 3.1 or later. + - ``foo=1.2.3`` requires that foo must be exactly version 1.2.3. + + The following variables may be set upon return. Two sets of values exist: + One for the common case (``<XXX> = <prefix>``) and another for the + information ``pkg-config`` provides when called with the ``--static`` + option (``<XXX> = <prefix>_STATIC``). + + ``<XXX>_FOUND`` + set to 1 if module(s) exist + ``<XXX>_LIBRARIES`` + only the libraries (without the '-l') + ``<XXX>_LINK_LIBRARIES`` + the libraries and their absolute paths + ``<XXX>_LIBRARY_DIRS`` + the paths of the libraries (without the '-L') + ``<XXX>_LDFLAGS`` + all required linker flags + ``<XXX>_LDFLAGS_OTHER`` + all other linker flags + ``<XXX>_INCLUDE_DIRS`` + the '-I' preprocessor flags (without the '-I') + ``<XXX>_CFLAGS`` + all required cflags + ``<XXX>_CFLAGS_OTHER`` + the other compiler flags All but ``<XXX>_FOUND`` may be a :ref:`;-list <CMake Language Lists>` if the associated variable returned from ``pkg-config`` has multiple values. @@ -551,14 +586,18 @@ endmacro() There are some special variables whose prefix depends on the number of ``<moduleSpec>`` given. When there is only one ``<moduleSpec>``, ``<YYY>`` will simply be ``<prefix>``, but if two or more ``<moduleSpec>`` - items are given, ``<YYY>`` will be ``<prefix>_<moduleName>``:: + items are given, ``<YYY>`` will be ``<prefix>_<moduleName>``. - <YYY>_VERSION ... version of the module - <YYY>_PREFIX ... prefix directory of the module - <YYY>_INCLUDEDIR ... include directory of the module - <YYY>_LIBDIR ... lib directory of the module + ``<YYY>_VERSION`` + version of the module + ``<YYY>_PREFIX`` + prefix directory of the module + ``<YYY>_INCLUDEDIR`` + include directory of the module + ``<YYY>_LIBDIR`` + lib directory of the module - Examples + Examples: .. code-block:: cmake @@ -594,12 +633,12 @@ endmacro() XRENDER_STATIC_LIBRARIES=Xrender;X11;pthread;Xau;Xdmcp #]========================================] macro(pkg_check_modules _prefix _module0) - _pkgconfig_parse_options(_pkg_modules _pkg_is_required _pkg_is_silent _no_cmake_path _no_cmake_environment_path _imp_target "${_module0}" ${ARGN}) + _pkgconfig_parse_options(_pkg_modules _pkg_is_required _pkg_is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global "${_module0}" ${ARGN}) # check cached value if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND OR (NOT "${ARGN}" STREQUAL "" AND NOT "${__pkg_config_arguments_${_prefix}}" STREQUAL "${_module0};${ARGN}") OR ( "${ARGN}" STREQUAL "" AND NOT "${__pkg_config_arguments_${_prefix}}" STREQUAL "${_module0}")) - _pkg_check_modules_internal("${_pkg_is_required}" "${_pkg_is_silent}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} "${_prefix}" ${_pkg_modules}) + _pkg_check_modules_internal("${_pkg_is_required}" "${_pkg_is_silent}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global} "${_prefix}" ${_pkg_modules}) _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) if (${_prefix}_FOUND) @@ -607,7 +646,7 @@ macro(pkg_check_modules _prefix _module0) endif() else() if (${_prefix}_FOUND) - _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target}) + _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global}) endif() endif() endmacro() @@ -618,23 +657,25 @@ endmacro() The behavior of this command is the same as :command:`pkg_check_modules`, except that rather than checking for all the specified modules, it searches - for just the first successful match. :: + for just the first successful match. + + .. code-block:: cmake pkg_search_module(<prefix> [REQUIRED] [QUIET] [NO_CMAKE_PATH] [NO_CMAKE_ENVIRONMENT_PATH] - [IMPORTED_TARGET] + [IMPORTED_TARGET [GLOBAL]] <moduleSpec> [<moduleSpec>...]) - Examples + Example: .. code-block:: cmake pkg_search_module (BAR libxml-2.0 libxml2 libxml>=2) #]========================================] macro(pkg_search_module _prefix _module0) - _pkgconfig_parse_options(_pkg_modules_alt _pkg_is_required _pkg_is_silent _no_cmake_path _no_cmake_environment_path _imp_target "${_module0}" ${ARGN}) + _pkgconfig_parse_options(_pkg_modules_alt _pkg_is_required _pkg_is_silent _no_cmake_path _no_cmake_environment_path _imp_target _imp_target_global "${_module0}" ${ARGN}) # check cached value if (NOT DEFINED __pkg_config_checked_${_prefix} OR __pkg_config_checked_${_prefix} LESS ${PKG_CONFIG_VERSION} OR NOT ${_prefix}_FOUND) set(_pkg_modules_found 0) @@ -646,7 +687,7 @@ macro(pkg_search_module _prefix _module0) # iterate through all modules and stop at the first working one. foreach(_pkg_alt ${_pkg_modules_alt}) if(NOT _pkg_modules_found) - _pkg_check_modules_internal(0 1 ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} "${_prefix}" "${_pkg_alt}") + _pkg_check_modules_internal(0 1 ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global} "${_prefix}" "${_pkg_alt}") endif() if (${_prefix}_FOUND) @@ -662,7 +703,7 @@ macro(pkg_search_module _prefix _module0) _pkgconfig_set(__pkg_config_checked_${_prefix} ${PKG_CONFIG_VERSION}) elseif (${_prefix}_FOUND) - _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target}) + _pkg_recalculate("${_prefix}" ${_no_cmake_path} ${_no_cmake_environment_path} ${_imp_target} ${_imp_target_global}) endif() endmacro() diff --git a/Modules/FindPostgreSQL.cmake b/Modules/FindPostgreSQL.cmake index 3f6fa6c..77fa4ed 100644 --- a/Modules/FindPostgreSQL.cmake +++ b/Modules/FindPostgreSQL.cmake @@ -1,20 +1,21 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindPostgreSQL -# -------------- -# -# Find the PostgreSQL installation. -# -# This module defines -# -# :: -# -# PostgreSQL_LIBRARIES - the PostgreSQL libraries needed for linking -# PostgreSQL_INCLUDE_DIRS - the directories of the PostgreSQL headers -# PostgreSQL_LIBRARY_DIRS - the link directories for PostgreSQL libraries -# PostgreSQL_VERSION_STRING - the version of PostgreSQL found (since CMake 2.8.8) +#[=======================================================================[.rst: +FindPostgreSQL +-------------- + +Find the PostgreSQL installation. + +This module defines + +:: + + PostgreSQL_LIBRARIES - the PostgreSQL libraries needed for linking + PostgreSQL_INCLUDE_DIRS - the directories of the PostgreSQL headers + PostgreSQL_LIBRARY_DIRS - the link directories for PostgreSQL libraries + PostgreSQL_VERSION_STRING - the version of PostgreSQL found (since CMake 2.8.8) +#]=======================================================================] # ---------------------------------------------------------------------------- # History: @@ -27,7 +28,7 @@ # In Windows the default installation of PostgreSQL uses that as part of the path. # E.g C:\Program Files\PostgreSQL\8.4. # Currently, the following version numbers are known to this module: -# "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0" +# "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0" # # To use this variable just do something like this: # set(PostgreSQL_ADDITIONAL_VERSIONS "9.2" "8.4.4") @@ -71,7 +72,7 @@ set(PostgreSQL_ROOT_DIR_MESSAGE "Set the PostgreSQL_ROOT system variable to wher set(PostgreSQL_KNOWN_VERSIONS ${PostgreSQL_ADDITIONAL_VERSIONS} - "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0") + "11" "10" "9.6" "9.5" "9.4" "9.3" "9.2" "9.1" "9.0" "8.4" "8.3" "8.2" "8.1" "8.0") # Define additional search paths for root directories. set( PostgreSQL_ROOT_DIRECTORIES diff --git a/Modules/FindProducer.cmake b/Modules/FindProducer.cmake index 500c8ed..fba0494 100644 --- a/Modules/FindProducer.cmake +++ b/Modules/FindProducer.cmake @@ -1,35 +1,36 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindProducer -# ------------ -# -# -# -# Though Producer isn't directly part of OpenSceneGraph, its primary -# user is OSG so I consider this part of the Findosg* suite used to find -# OpenSceneGraph components. You'll notice that I accept OSGDIR as an -# environment path. -# -# Each component is separate and you must opt in to each module. You -# must also opt into OpenGL (and OpenThreads?) as these modules won't do -# it for you. This is to allow you control over your own system piece -# by piece in case you need to opt out of certain components or change -# the Find behavior for a particular module (perhaps because the default -# FindOpenGL.cmake module doesn't work with your system as an example). -# If you want to use a more convenient module that includes everything, -# use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake -# modules. -# -# Locate Producer This module defines PRODUCER_LIBRARY PRODUCER_FOUND, -# if false, do not try to link to Producer PRODUCER_INCLUDE_DIR, where -# to find the headers -# -# $PRODUCER_DIR is an environment variable that would correspond to the -# ./configure --prefix=$PRODUCER_DIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindProducer +------------ + + + +Though Producer isn't directly part of OpenSceneGraph, its primary +user is OSG so I consider this part of the Findosg* suite used to find +OpenSceneGraph components. You'll notice that I accept OSGDIR as an +environment path. + +Each component is separate and you must opt in to each module. You +must also opt into OpenGL (and OpenThreads?) as these modules won't do +it for you. This is to allow you control over your own system piece +by piece in case you need to opt out of certain components or change +the Find behavior for a particular module (perhaps because the default +FindOpenGL.cmake module doesn't work with your system as an example). +If you want to use a more convenient module that includes everything, +use the FindOpenSceneGraph.cmake instead of the Findosg*.cmake +modules. + +Locate Producer This module defines PRODUCER_LIBRARY PRODUCER_FOUND, +if false, do not try to link to Producer PRODUCER_INCLUDE_DIR, where +to find the headers + +$PRODUCER_DIR is an environment variable that would correspond to the +./configure --prefix=$PRODUCER_DIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <Producer/CameraGroup> diff --git a/Modules/FindProtobuf.cmake b/Modules/FindProtobuf.cmake index e1a715e..593fff6 100644 --- a/Modules/FindProtobuf.cmake +++ b/Modules/FindProtobuf.cmake @@ -1,233 +1,259 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindProtobuf -# ------------ -# -# Locate and configure the Google Protocol Buffers library. -# -# The following variables can be set and are optional: -# -# ``Protobuf_SRC_ROOT_FOLDER`` -# When compiling with MSVC, if this cache variable is set -# the protobuf-default VS project build locations -# (vsprojects/Debug and vsprojects/Release -# or vsprojects/x64/Debug and vsprojects/x64/Release) -# will be searched for libraries and binaries. -# ``Protobuf_IMPORT_DIRS`` -# List of additional directories to be searched for -# imported .proto files. -# ``Protobuf_DEBUG`` -# Show debug messages. -# ``Protobuf_USE_STATIC_LIBS`` -# Set to ON to force the use of the static libraries. -# Default is OFF. -# -# Defines the following variables: -# -# ``Protobuf_FOUND`` -# Found the Google Protocol Buffers library -# (libprotobuf & header files) -# ``Protobuf_VERSION`` -# Version of package found. -# ``Protobuf_INCLUDE_DIRS`` -# Include directories for Google Protocol Buffers -# ``Protobuf_LIBRARIES`` -# The protobuf libraries -# ``Protobuf_PROTOC_LIBRARIES`` -# The protoc libraries -# ``Protobuf_LITE_LIBRARIES`` -# The protobuf-lite libraries -# -# The following :prop_tgt:`IMPORTED` targets are also defined: -# -# ``protobuf::libprotobuf`` -# The protobuf library. -# ``protobuf::libprotobuf-lite`` -# The protobuf lite library. -# ``protobuf::libprotoc`` -# The protoc library. -# ``protobuf::protoc`` -# The protoc compiler. -# -# The following cache variables are also available to set or use: -# -# ``Protobuf_LIBRARY`` -# The protobuf library -# ``Protobuf_PROTOC_LIBRARY`` -# The protoc library -# ``Protobuf_INCLUDE_DIR`` -# The include directory for protocol buffers -# ``Protobuf_PROTOC_EXECUTABLE`` -# The protoc compiler -# ``Protobuf_LIBRARY_DEBUG`` -# The protobuf library (debug) -# ``Protobuf_PROTOC_LIBRARY_DEBUG`` -# The protoc library (debug) -# ``Protobuf_LITE_LIBRARY`` -# The protobuf lite library -# ``Protobuf_LITE_LIBRARY_DEBUG`` -# The protobuf lite library (debug) -# -# Example: -# -# .. code-block:: cmake -# -# find_package(Protobuf REQUIRED) -# include_directories(${Protobuf_INCLUDE_DIRS}) -# include_directories(${CMAKE_CURRENT_BINARY_DIR}) -# protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto) -# protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS EXPORT_MACRO DLL_EXPORT foo.proto) -# protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS DESCRIPTORS PROTO_DESCS foo.proto) -# protobuf_generate_python(PROTO_PY foo.proto) -# add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS}) -# target_link_libraries(bar ${Protobuf_LIBRARIES}) -# -# .. note:: -# The ``protobuf_generate_cpp`` and ``protobuf_generate_python`` -# functions and :command:`add_executable` or :command:`add_library` -# calls only work properly within the same directory. -# -# .. command:: protobuf_generate_cpp -# -# Add custom commands to process ``.proto`` files to C++:: -# -# protobuf_generate_cpp (<SRCS> <HDRS> -# [DESCRIPTORS <DESC>] [EXPORT_MACRO <MACRO>] [<ARGN>...]) -# -# ``SRCS`` -# Variable to define with autogenerated source files -# ``HDRS`` -# Variable to define with autogenerated header files -# ``DESCRIPTORS`` -# Variable to define with autogenerated descriptor files, if requested. -# ``EXPORT_MACRO`` -# is a macro which should expand to ``__declspec(dllexport)`` or -# ``__declspec(dllimport)`` depending on what is being compiled. -# ``ARGN`` -# ``.proto`` files -# -# .. command:: protobuf_generate_python -# -# Add custom commands to process ``.proto`` files to Python:: -# -# protobuf_generate_python (<PY> [<ARGN>...]) -# -# ``PY`` -# Variable to define with autogenerated Python files -# ``ARGN`` -# ``.proto`` filess +#[=======================================================================[.rst: +FindProtobuf +------------ + +Locate and configure the Google Protocol Buffers library. + +The following variables can be set and are optional: + +``Protobuf_SRC_ROOT_FOLDER`` + When compiling with MSVC, if this cache variable is set + the protobuf-default VS project build locations + (vsprojects/Debug and vsprojects/Release + or vsprojects/x64/Debug and vsprojects/x64/Release) + will be searched for libraries and binaries. +``Protobuf_IMPORT_DIRS`` + List of additional directories to be searched for + imported .proto files. +``Protobuf_DEBUG`` + Show debug messages. +``Protobuf_USE_STATIC_LIBS`` + Set to ON to force the use of the static libraries. + Default is OFF. + +Defines the following variables: + +``Protobuf_FOUND`` + Found the Google Protocol Buffers library + (libprotobuf & header files) +``Protobuf_VERSION`` + Version of package found. +``Protobuf_INCLUDE_DIRS`` + Include directories for Google Protocol Buffers +``Protobuf_LIBRARIES`` + The protobuf libraries +``Protobuf_PROTOC_LIBRARIES`` + The protoc libraries +``Protobuf_LITE_LIBRARIES`` + The protobuf-lite libraries + +The following :prop_tgt:`IMPORTED` targets are also defined: + +``protobuf::libprotobuf`` + The protobuf library. +``protobuf::libprotobuf-lite`` + The protobuf lite library. +``protobuf::libprotoc`` + The protoc library. +``protobuf::protoc`` + The protoc compiler. + +The following cache variables are also available to set or use: + +``Protobuf_LIBRARY`` + The protobuf library +``Protobuf_PROTOC_LIBRARY`` + The protoc library +``Protobuf_INCLUDE_DIR`` + The include directory for protocol buffers +``Protobuf_PROTOC_EXECUTABLE`` + The protoc compiler +``Protobuf_LIBRARY_DEBUG`` + The protobuf library (debug) +``Protobuf_PROTOC_LIBRARY_DEBUG`` + The protoc library (debug) +``Protobuf_LITE_LIBRARY`` + The protobuf lite library +``Protobuf_LITE_LIBRARY_DEBUG`` + The protobuf lite library (debug) + +Example: + +.. code-block:: cmake + + find_package(Protobuf REQUIRED) + include_directories(${Protobuf_INCLUDE_DIRS}) + include_directories(${CMAKE_CURRENT_BINARY_DIR}) + protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS foo.proto) + protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS EXPORT_MACRO DLL_EXPORT foo.proto) + protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS DESCRIPTORS PROTO_DESCS foo.proto) + protobuf_generate_python(PROTO_PY foo.proto) + add_executable(bar bar.cc ${PROTO_SRCS} ${PROTO_HDRS}) + target_link_libraries(bar ${Protobuf_LIBRARIES}) + +.. note:: + The ``protobuf_generate_cpp`` and ``protobuf_generate_python`` + functions and :command:`add_executable` or :command:`add_library` + calls only work properly within the same directory. + +.. command:: protobuf_generate_cpp + + Add custom commands to process ``.proto`` files to C++:: + + protobuf_generate_cpp (<SRCS> <HDRS> + [DESCRIPTORS <DESC>] [EXPORT_MACRO <MACRO>] [<ARGN>...]) + + ``SRCS`` + Variable to define with autogenerated source files + ``HDRS`` + Variable to define with autogenerated header files + ``DESCRIPTORS`` + Variable to define with autogenerated descriptor files, if requested. + ``EXPORT_MACRO`` + is a macro which should expand to ``__declspec(dllexport)`` or + ``__declspec(dllimport)`` depending on what is being compiled. + ``ARGN`` + ``.proto`` files + +.. command:: protobuf_generate_python + + Add custom commands to process ``.proto`` files to Python:: + + protobuf_generate_python (<PY> [<ARGN>...]) + + ``PY`` + Variable to define with autogenerated Python files + ``ARGN`` + ``.proto`` filess +#]=======================================================================] + +function(protobuf_generate) + include(CMakeParseArguments) + + set(_options APPEND_PATH DESCRIPTORS) + set(_singleargs LANGUAGE OUT_VAR EXPORT_MACRO PROTOC_OUT_DIR) + if(COMMAND target_sources) + list(APPEND _singleargs TARGET) + endif() + set(_multiargs PROTOS IMPORT_DIRS GENERATE_EXTENSIONS) -function(PROTOBUF_GENERATE_CPP SRCS HDRS) - cmake_parse_arguments(protobuf "" "EXPORT_MACRO;DESCRIPTORS" "" ${ARGN}) + cmake_parse_arguments(protobuf_generate "${_options}" "${_singleargs}" "${_multiargs}" "${ARGN}") - set(PROTO_FILES "${protobuf_UNPARSED_ARGUMENTS}") - if(NOT PROTO_FILES) - message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files") + if(NOT protobuf_generate_PROTOS AND NOT protobuf_generate_TARGET) + message(SEND_ERROR "Error: protobuf_generate called without any targets or source files") return() endif() - if(protobuf_EXPORT_MACRO) - set(DLL_EXPORT_DECL "dllexport_decl=${protobuf_EXPORT_MACRO}:") + if(NOT protobuf_generate_OUT_VAR AND NOT protobuf_generate_TARGET) + message(SEND_ERROR "Error: protobuf_generate called without a target or output variable") + return() endif() - if(PROTOBUF_GENERATE_CPP_APPEND_PATH) - # Create an include path for each file specified - foreach(FIL ${PROTO_FILES}) - get_filename_component(ABS_FIL ${FIL} ABSOLUTE) - get_filename_component(ABS_PATH ${ABS_FIL} PATH) - list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) - if(${_contains_already} EQUAL -1) - list(APPEND _protobuf_include_path -I ${ABS_PATH}) - endif() - endforeach() - else() - set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR}) + if(NOT protobuf_generate_LANGUAGE) + set(protobuf_generate_LANGUAGE cpp) endif() + string(TOLOWER ${protobuf_generate_LANGUAGE} protobuf_generate_LANGUAGE) - if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS) - set(Protobuf_IMPORT_DIRS "${PROTOBUF_IMPORT_DIRS}") + if(NOT protobuf_generate_PROTOC_OUT_DIR) + set(protobuf_generate_PROTOC_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) endif() - if(DEFINED Protobuf_IMPORT_DIRS) - foreach(DIR ${Protobuf_IMPORT_DIRS}) - get_filename_component(ABS_PATH ${DIR} ABSOLUTE) - list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) - if(${_contains_already} EQUAL -1) - list(APPEND _protobuf_include_path -I ${ABS_PATH}) + if(protobuf_generate_EXPORT_MACRO AND protobuf_generate_LANGUAGE STREQUAL cpp) + set(_dll_export_decl "dllexport_decl=${protobuf_generate_EXPORT_MACRO}:") + endif() + + if(NOT protobuf_generate_GENERATE_EXTENSIONS) + if(protobuf_generate_LANGUAGE STREQUAL cpp) + set(protobuf_generate_GENERATE_EXTENSIONS .pb.h .pb.cc) + elseif(protobuf_generate_LANGUAGE STREQUAL python) + set(protobuf_generate_GENERATE_EXTENSIONS _pb2.py) + else() + message(SEND_ERROR "Error: protobuf_generate given unknown Language ${LANGUAGE}, please provide a value for GENERATE_EXTENSIONS") + return() + endif() + endif() + + if(protobuf_generate_TARGET) + get_target_property(_source_list ${protobuf_generate_TARGET} SOURCES) + foreach(_file ${_source_list}) + if(_file MATCHES "proto$") + list(APPEND protobuf_generate_PROTOS ${_file}) endif() endforeach() endif() - set(${SRCS}) - set(${HDRS}) - if (protobuf_DESCRIPTORS) - set(${protobuf_DESCRIPTORS}) + if(NOT protobuf_generate_PROTOS) + message(SEND_ERROR "Error: protobuf_generate could not find any .proto files") + return() endif() - foreach(FIL ${PROTO_FILES}) - get_filename_component(ABS_FIL ${FIL} ABSOLUTE) - get_filename_component(FIL_WE ${FIL} NAME_WE) - if(NOT PROTOBUF_GENERATE_CPP_APPEND_PATH) - get_filename_component(FIL_DIR ${FIL} DIRECTORY) - if(FIL_DIR) - set(FIL_WE "${FIL_DIR}/${FIL_WE}") + if(protobuf_generate_APPEND_PATH) + # Create an include path for each file specified + foreach(_file ${protobuf_generate_PROTOS}) + get_filename_component(_abs_file ${_file} ABSOLUTE) + get_filename_component(_abs_path ${_abs_file} PATH) + list(FIND _protobuf_include_path ${_abs_path} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _protobuf_include_path -I ${_abs_path}) endif() + endforeach() + else() + set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR}) + endif() + + foreach(DIR ${protobuf_generate_IMPORT_DIRS}) + get_filename_component(ABS_PATH ${DIR} ABSOLUTE) + list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _protobuf_include_path -I ${ABS_PATH}) endif() + endforeach() - set(_protobuf_protoc_src "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.cc") - set(_protobuf_protoc_hdr "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.pb.h") - list(APPEND ${SRCS} "${_protobuf_protoc_src}") - list(APPEND ${HDRS} "${_protobuf_protoc_hdr}") + set(_generated_srcs_all) + foreach(_proto ${protobuf_generate_PROTOS}) + get_filename_component(_abs_file ${_proto} ABSOLUTE) + get_filename_component(_abs_dir ${_abs_file} DIRECTORY) + get_filename_component(_basename ${_proto} NAME_WE) + file(RELATIVE_PATH _rel_dir ${CMAKE_CURRENT_SOURCE_DIR} ${_abs_dir}) - if(protobuf_DESCRIPTORS) - set(_protobuf_protoc_desc "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.desc") - set(_protobuf_protoc_flags "--descriptor_set_out=${_protobuf_protoc_desc}") - list(APPEND ${protobuf_DESCRIPTORS} "${_protobuf_protoc_desc}") - else() - set(_protobuf_protoc_desc "") - set(_protobuf_protoc_flags "") + set(_generated_srcs) + foreach(_ext ${protobuf_generate_GENERATE_EXTENSIONS}) + list(APPEND _generated_srcs "${protobuf_generate_PROTOC_OUT_DIR}/${_basename}${_ext}") + endforeach() + + if(protobuf_generate_DESCRIPTORS AND protobuf_generate_LANGUAGE STREQUAL cpp) + set(_descriptor_file "${CMAKE_CURRENT_BINARY_DIR}/${_basename}.desc") + set(_dll_desc_out "--descriptor_set_out=${_descriptor_file}") + list(APPEND _generated_srcs ${_descriptor_file}) endif() + list(APPEND _generated_srcs_all ${_generated_srcs}) add_custom_command( - OUTPUT "${_protobuf_protoc_src}" - "${_protobuf_protoc_hdr}" - ${_protobuf_protoc_desc} + OUTPUT ${_generated_srcs} COMMAND protobuf::protoc - "--cpp_out=${DLL_EXPORT_DECL}${CMAKE_CURRENT_BINARY_DIR}" - ${_protobuf_protoc_flags} - ${_protobuf_include_path} ${ABS_FIL} - DEPENDS ${ABS_FIL} protobuf::protoc - COMMENT "Running C++ protocol buffer compiler on ${FIL}" + ARGS --${protobuf_generate_LANGUAGE}_out ${_dll_export_decl}${protobuf_generate_PROTOC_OUT_DIR} ${_dll_desc_out} ${_protobuf_include_path} ${_abs_file} + DEPENDS ${_abs_file} protobuf::protoc + COMMENT "Running ${protobuf_generate_LANGUAGE} protocol buffer compiler on ${_proto}" VERBATIM ) endforeach() - set(${SRCS} "${${SRCS}}" PARENT_SCOPE) - set(${HDRS} "${${HDRS}}" PARENT_SCOPE) - if(protobuf_DESCRIPTORS) - set(${protobuf_DESCRIPTORS} "${${protobuf_DESCRIPTORS}}" PARENT_SCOPE) + set_source_files_properties(${_generated_srcs_all} PROPERTIES GENERATED TRUE) + if(protobuf_generate_OUT_VAR) + set(${protobuf_generate_OUT_VAR} ${_generated_srcs_all} PARENT_SCOPE) + endif() + if(protobuf_generate_TARGET) + target_sources(${protobuf_generate_TARGET} PRIVATE ${_generated_srcs_all}) endif() endfunction() -function(PROTOBUF_GENERATE_PYTHON SRCS) - if(NOT ARGN) - message(SEND_ERROR "Error: PROTOBUF_GENERATE_PYTHON() called without any proto files") +function(PROTOBUF_GENERATE_CPP SRCS HDRS) + cmake_parse_arguments(protobuf_generate_cpp "" "EXPORT_MACRO;DESCRIPTORS" "" ${ARGN}) + + set(_proto_files "${protobuf_generate_cpp_UNPARSED_ARGUMENTS}") + if(NOT _proto_files) + message(SEND_ERROR "Error: PROTOBUF_GENERATE_CPP() called without any proto files") return() endif() if(PROTOBUF_GENERATE_CPP_APPEND_PATH) - # Create an include path for each file specified - foreach(FIL ${ARGN}) - get_filename_component(ABS_FIL ${FIL} ABSOLUTE) - get_filename_component(ABS_PATH ${ABS_FIL} PATH) - list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) - if(${_contains_already} EQUAL -1) - list(APPEND _protobuf_include_path -I ${ABS_PATH}) - endif() - endforeach() - else() - set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR}) + set(_append_arg APPEND_PATH) + endif() + + if(protobuf_generate_cpp_DESCRIPTORS) + set(_descriptors DESCRIPTORS) endif() if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS) @@ -235,36 +261,55 @@ function(PROTOBUF_GENERATE_PYTHON SRCS) endif() if(DEFINED Protobuf_IMPORT_DIRS) - foreach(DIR ${Protobuf_IMPORT_DIRS}) - get_filename_component(ABS_PATH ${DIR} ABSOLUTE) - list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) - if(${_contains_already} EQUAL -1) - list(APPEND _protobuf_include_path -I ${ABS_PATH}) - endif() - endforeach() + set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS}) endif() + set(_outvar) + protobuf_generate(${_append_arg} ${_descriptors} LANGUAGE cpp EXPORT_MACRO ${protobuf_generate_cpp_EXPORT_MACRO} OUT_VAR _outvar ${_import_arg} PROTOS ${_proto_files}) + set(${SRCS}) - foreach(FIL ${ARGN}) - get_filename_component(ABS_FIL ${FIL} ABSOLUTE) - get_filename_component(FIL_WE ${FIL} NAME_WE) - if(NOT PROTOBUF_GENERATE_CPP_APPEND_PATH) - get_filename_component(FIL_DIR ${FIL} DIRECTORY) - if(FIL_DIR) - set(FIL_WE "${FIL_DIR}/${FIL_WE}") - endif() - endif() + set(${HDRS}) + if(protobuf_generate_cpp_DESCRIPTORS) + set(${protobuf_generate_cpp_DESCRIPTORS}) + endif() - list(APPEND ${SRCS} "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}_pb2.py") - add_custom_command( - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}_pb2.py" - COMMAND protobuf::protoc --python_out ${CMAKE_CURRENT_BINARY_DIR} ${_protobuf_include_path} ${ABS_FIL} - DEPENDS ${ABS_FIL} protobuf::protoc - COMMENT "Running Python protocol buffer compiler on ${FIL}" - VERBATIM ) + foreach(_file ${_outvar}) + if(_file MATCHES "cc$") + list(APPEND ${SRCS} ${_file}) + elseif(_file MATCHES "desc$") + list(APPEND ${protobuf_generate_cpp_DESCRIPTORS} ${_file}) + else() + list(APPEND ${HDRS} ${_file}) + endif() endforeach() - set(${SRCS} ${${SRCS}} PARENT_SCOPE) + set(${HDRS} ${${HDRS}} PARENT_SCOPE) + if(protobuf_generate_cpp_DESCRIPTORS) + set(${protobuf_generate_cpp_DESCRIPTORS} "${${protobuf_generate_cpp_DESCRIPTORS}}" PARENT_SCOPE) + endif() +endfunction() + +function(PROTOBUF_GENERATE_PYTHON SRCS) + if(NOT ARGN) + message(SEND_ERROR "Error: PROTOBUF_GENERATE_PYTHON() called without any proto files") + return() + endif() + + if(PROTOBUF_GENERATE_CPP_APPEND_PATH) + set(_append_arg APPEND_PATH) + endif() + + if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS) + set(Protobuf_IMPORT_DIRS "${PROTOBUF_IMPORT_DIRS}") + endif() + + if(DEFINED Protobuf_IMPORT_DIRS) + set(_import_arg IMPORT_DIRS ${Protobuf_IMPORT_DIRS}) + endif() + + set(_outvar) + protobuf_generate(${_append_arg} LANGUAGE python OUT_VAR _outvar ${_import_arg} PROTOS ${ARGN}) + set(${SRCS} ${_outvar} PARENT_SCOPE) endfunction() @@ -337,21 +382,16 @@ function(_protobuf_find_libraries name filename) mark_as_advanced(${name}_LIBRARY_DEBUG) select_library_configurations(${name}) + + if(UNIX AND Threads_FOUND) + list(APPEND ${name}_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) + endif() + set(${name}_LIBRARY "${${name}_LIBRARY}" PARENT_SCOPE) set(${name}_LIBRARIES "${${name}_LIBRARIES}" PARENT_SCOPE) endif() endfunction() -# Internal function: find threads library -function(_protobuf_find_threads) - set(CMAKE_THREAD_PREFER_PTHREAD TRUE) - find_package(Threads) - if(Threads_FOUND) - list(APPEND Protobuf_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) - set(Protobuf_LIBRARIES "${Protobuf_LIBRARIES}" PARENT_SCOPE) - endif() -endfunction() - # # Main. # @@ -372,6 +412,11 @@ if(MSVC) find_path(Protobuf_SRC_ROOT_FOLDER protobuf.pc.in) endif() +if(UNIX) + # Protobuf headers may depend on threading. + find_package(Threads QUIET) +endif() + # The Protobuf library _protobuf_find_libraries(Protobuf protobuf) #DOC "The Google Protocol Buffers RELEASE Library" @@ -386,10 +431,6 @@ if(MSVC) set(CMAKE_FIND_LIBRARY_PREFIXES "${Protobuf_ORIG_FIND_LIBRARY_PREFIXES}") endif() -if(UNIX) - _protobuf_find_threads() -endif() - # Find the include directory find_path(Protobuf_INCLUDE_DIR google/protobuf/service.h @@ -477,6 +518,10 @@ if(Protobuf_INCLUDE_DIR) set_target_properties(protobuf::libprotobuf PROPERTIES IMPORTED_LOCATION_DEBUG "${Protobuf_LIBRARY_DEBUG}") endif() + if(UNIX AND TARGET Threads::Threads) + set_property(TARGET protobuf::libprotobuf APPEND PROPERTY + INTERFACE_LINK_LIBRARIES Threads::Threads) + endif() endif() endif() @@ -501,6 +546,10 @@ if(Protobuf_INCLUDE_DIR) set_target_properties(protobuf::libprotobuf-lite PROPERTIES IMPORTED_LOCATION_DEBUG "${Protobuf_LITE_LIBRARY_DEBUG}") endif() + if(UNIX AND TARGET Threads::Threads) + set_property(TARGET protobuf::libprotobuf-lite APPEND PROPERTY + INTERFACE_LINK_LIBRARIES Threads::Threads) + endif() endif() endif() @@ -525,6 +574,10 @@ if(Protobuf_INCLUDE_DIR) set_target_properties(protobuf::libprotoc PROPERTIES IMPORTED_LOCATION_DEBUG "${Protobuf_PROTOC_LIBRARY_DEBUG}") endif() + if(UNIX AND TARGET Threads::Threads) + set_property(TARGET protobuf::libprotoc APPEND PROPERTY + INTERFACE_LINK_LIBRARIES Threads::Threads) + endif() endif() endif() diff --git a/Modules/FindPython.cmake b/Modules/FindPython.cmake index 8139e53..8645a0d 100644 --- a/Modules/FindPython.cmake +++ b/Modules/FindPython.cmake @@ -116,6 +116,31 @@ Hints * If set to TRUE, search **only** for static libraries. * If set to FALSE, search **only** for shared libraries. +``Python_FIND_REGISTRY`` + On Windows the ``Python_FIND_REGISTRY`` variable determine the order + of preference between registry and environment variables. + the ``Python_FIND_REGISTRY`` variable can be set to empty or one of the + following: + + * ``FIRST``: Try to use registry before environment variables. + This is the default. + * ``LAST``: Try to use registry after environment variables. + * ``NEVER``: Never try to use registry. + +``CMAKE_FIND_FRAMEWORK`` + On OS X the :variable:`CMAKE_FIND_FRAMEWORK` variable determine the order of + preference between Apple-style and unix-style package components. + + .. note:: + + Value ``ONLY`` is not supported so ``FIRST`` will be used instead. + +.. note:: + + If a Python virtual environment is configured, set variable + ``Python_FIND_REGISTRY`` (Windows) or ``CMAKE_FIND_FRAMEWORK`` (macOS) with + value ``LAST`` or ``NEVER`` to select it preferably. + Commands ^^^^^^^^ diff --git a/Modules/FindPython/Support.cmake b/Modules/FindPython/Support.cmake index fe3df91..5b1ed4b 100644 --- a/Modules/FindPython/Support.cmake +++ b/Modules/FindPython/Support.cmake @@ -44,9 +44,28 @@ macro (_PYTHON_DISPLAY_FAILURE _PYTHON_MSG) endmacro() +macro (_PYTHON_FIND_FRAMEWORKS) + set (${_PYTHON_PREFIX}_FRAMEWORKS) + if (APPLE) + set (_pff_frameworks ${CMAKE_FRAMEWORK_PATH} + $ENV{CMAKE_FRAMEWORK_PATH} + ~/Library/Frameworks + /usr/local/Frameworks + ${CMAKE_SYSTEM_FRAMEWORK_PATH}) + list (REMOVE_DUPLICATES _pff_frameworks) + foreach (_pff_framework IN LISTS _pff_frameworks) + if (EXISTS ${_pff_framework}/Python.framework) + list (APPEND ${_PYTHON_PREFIX}_FRAMEWORKS ${_pff_framework}/Python.framework) + endif() + endforeach() + unset (_pff_frameworks) + unset (_pff_framework) + endif() +endmacro() + function (_PYTHON_GET_FRAMEWORKS _PYTHON_PGF_FRAMEWORK_PATHS _PYTHON_VERSION) set (_PYTHON_FRAMEWORK_PATHS) - foreach (_PYTHON_FRAMEWORK IN LISTS Python_FRAMEWORKS) + foreach (_PYTHON_FRAMEWORK IN LISTS ${_PYTHON_PREFIX}_FRAMEWORKS) list (APPEND _PYTHON_FRAMEWORK_PATHS "${_PYTHON_FRAMEWORK}/Versions/${_PYTHON_VERSION}") endforeach() @@ -59,20 +78,43 @@ function (_PYTHON_VALIDATE_INTERPRETER) return() endif() - if (${_PYTHON_PREFIX}_EXECUTABLE MATCHES "python${CMAKE_EXECUTABLE_SUFFIX}$") - # executable found do not have version in name - # ensure major version is OK + if (ARGC EQUAL 1) + set (expected_version ${ARGV0}) + else() + unset (expected_version) + endif() + + get_filename_component (python_name "${${_PYTHON_PREFIX}_EXECUTABLE}" NAME) + + if (expected_version AND NOT python_name STREQUAL "python${expected_version}${CMAKE_EXECUTABLE_SUFFIX}") + # executable found must have a specific version execute_process (COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c - "import sys; sys.stdout.write(str(sys.version_info[0]))" + "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:2]]))" RESULT_VARIABLE result OUTPUT_VARIABLE version ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - if (result OR NOT version EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR) + if (result OR NOT version EQUAL expected_version) # interpreter not usable or has wrong major version set (${_PYTHON_PREFIX}_EXECUTABLE ${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND CACHE INTERNAL "" FORCE) return() endif() + else() + if (NOT python_name STREQUAL "python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR}${CMAKE_EXECUTABLE_SUFFIX}") + # executable found do not have version in name + # ensure major version is OK + execute_process (COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c + "import sys; sys.stdout.write(str(sys.version_info[0]))" + RESULT_VARIABLE result + OUTPUT_VARIABLE version + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + if (result OR NOT version EQUAL _${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR) + # interpreter not usable or has wrong major version + set (${_PYTHON_PREFIX}_EXECUTABLE ${_PYTHON_PREFIX}_EXECUTABLE-NOTFOUND CACHE INTERNAL "" FORCE) + return() + endif() + endif() endif() if (CMAKE_SIZEOF_VOID_P AND "Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS @@ -93,6 +135,33 @@ function (_PYTHON_VALIDATE_INTERPRETER) endfunction() +function (_PYTHON_VALIDATE_COMPILER expected_version) + if (NOT ${_PYTHON_PREFIX}_COMPILER) + return() + endif() + + # retrieve python environment version from compiler + set (working_dir "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/PythonCompilerVersion.dir") + file (WRITE "${working_dir}/version.py" "import sys; sys.stdout.write('.'.join([str(x) for x in sys.version_info[:2]]))\n") + execute_process (COMMAND "${${_PYTHON_PREFIX}_COMPILER}" /target:exe /embed "${working_dir}/version.py" + WORKING_DIRECTORY "${working_dir}" + OUTPUT_QUIET + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process (COMMAND "${working_dir}/version" + WORKING_DIRECTORY "${working_dir}" + RESULT_VARIABLE result + OUTPUT_VARIABLE version + ERROR_QUIET) + file (REMOVE_RECURSE "${_${_PYTHON_PREFIX}_VERSION_DIR}") + + if (result OR NOT version EQUAL expected_version) + # Compiler not usable or has wrong major version + set (${_PYTHON_PREFIX}_COMPILER ${_PYTHON_PREFIX}_COMPILER-NOTFOUND CACHE INTERNAL "" FORCE) + endif() +endfunction() + + function (_PYTHON_FIND_RUNTIME_LIBRARY _PYTHON_LIB) string (REPLACE "_RUNTIME" "" _PYTHON_LIB "${_PYTHON_LIB}") # look at runtime part on systems supporting it @@ -161,7 +230,7 @@ if (${_PYTHON_PREFIX}_FIND_VERSION_COUNT GREATER 1) endif() endif() -# Anaconda distribution: define which architectures can be used +# Python and Anaconda distributions: define which architectures can be used if (CMAKE_SIZEOF_VOID_P) # In this case, search only for 64bit or 32bit math (EXPR _${_PYTHON_PREFIX}_ARCH "${CMAKE_SIZEOF_VOID_P} * 8") @@ -181,19 +250,47 @@ else() # architecture unknown, search for natural interpreter set (_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES ipy) endif() +set (_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES net45 net40) # Apple frameworks handling -include (${CMAKE_CURRENT_LIST_DIR}/../CMakeFindFrameworks.cmake) -cmake_find_frameworks (Python) +_python_find_frameworks () + +# Save CMAKE_FIND_APPBUNDLE +if (DEFINED CMAKE_FIND_APPBUNDLE) + set (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE ${CMAKE_FIND_APPBUNDLE}) +else() + unset (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE) +endif() +# To avoid app bundle lookup +set (CMAKE_FIND_APPBUNDLE "NEVER") # Save CMAKE_FIND_FRAMEWORK if (DEFINED CMAKE_FIND_FRAMEWORK) set (_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK}) + if (CMAKE_FIND_FRAMEWORK STREQUAL "ONLY") + message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: CMAKE_FIND_FRAMEWORK: 'ONLY' value is not supported. 'FIRST' will be used instead.") + set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK "FIRST") + else() + set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK}) + endif() else() unset (_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK) + set (_${_PYTHON_PREFIX}_FIND_FRAMEWORK "FIRST") +endif() +# To avoid framework lookup +set (CMAKE_FIND_FRAMEWORK "NEVER") + +# Windows Registry handling +if (DEFINED ${_PYTHON_PREFIX}_FIND_REGISTRY) + if (NOT ${_PYTHON_PREFIX}_FIND_REGISTRY MATCHES "^(FIRST|LAST|NEVER)$") + message (AUTHOR_WARNING "Find${_PYTHON_PREFIX}: ${${_PYTHON_PREFIX}_FIND_REGISTRY}: invalid value for '${_PYTHON_PREFIX}_FIND_REGISTRY'. 'FIRST', 'LAST' or 'NEVER' expected.") + set (_${_PYTHON_PREFIX}_FIND_REGISTRY "FIRST") + else() + set (_${_PYTHON_PREFIX}_FIND_REGISTRY ${${_PYTHON_PREFIX}_FIND_REGISTRY}) + endif() +else() + set (_${_PYTHON_PREFIX}_FIND_REGISTRY "FIRST") endif() -# To avoid picking up the system elements pre-maturely. -set (CMAKE_FIND_FRAMEWORK LAST) unset (_${_PYTHON_PREFIX}_REQUIRED_VARS) @@ -215,50 +312,133 @@ if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS) _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_VERSION}) + # Apple frameworks handling + if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST") + find_program (${_PYTHON_PREFIX}_EXECUTABLE + NAMES python${_${_PYTHON_PREFIX}_VERSION} + python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} + NAMES_PER_DIR + PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} + PATH_SUFFIXES bin + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH) + endif() + + # Windows registry + if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST") + find_program (${_PYTHON_PREFIX}_EXECUTABLE + NAMES python${_${_PYTHON_PREFIX}_VERSION} + python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} + python + ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} + NAMES_PER_DIR + HINTS ${_${_PYTHON_PREFIX}_HINTS} + PATHS [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] + PATH_SUFFIXES bin ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH) + endif() + # try using HINTS find_program (${_PYTHON_PREFIX}_EXECUTABLE NAMES python${_${_PYTHON_PREFIX}_VERSION} + python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} + python + ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} NAMES_PER_DIR HINTS ${_${_PYTHON_PREFIX}_HINTS} - PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} - PATH_SUFFIXES bin + PATH_SUFFIXES bin ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH) - # try using registry + # try using standard paths. if (WIN32) find_program (${_PYTHON_PREFIX}_EXECUTABLE - NAMES python${_${_PYTHON_PREFIX}_VERSION} python + NAMES python${_${_PYTHON_PREFIX}_VERSION} + python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} + python + ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} + NAMES_PER_DIR) + else() + find_program (${_PYTHON_PREFIX}_EXECUTABLE + NAMES python${_${_PYTHON_PREFIX}_VERSION} + python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} + NAMES_PER_DIR) + endif() + + # Apple frameworks handling + if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST") + find_program (${_PYTHON_PREFIX}_EXECUTABLE + NAMES python${_${_PYTHON_PREFIX}_VERSION} + python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} + NAMES_PER_DIR + PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} + PATH_SUFFIXES bin + NO_DEFAULT_PATH) + endif() + + # Windows registry + if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST") + find_program (${_PYTHON_PREFIX}_EXECUTABLE + NAMES python${_${_PYTHON_PREFIX}_VERSION} + python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} + python ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} NAMES_PER_DIR - HINTS ${_${_PYTHON_PREFIX}_HINTS} PATHS [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath] [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath] [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] - PATH_SUFFIXES bin - NO_SYSTEM_ENVIRONMENT_PATH - NO_CMAKE_SYSTEM_PATH) + PATH_SUFFIXES bin ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} + NO_DEFAULT_PATH) endif() - # try in standard paths - find_program (${_PYTHON_PREFIX}_EXECUTABLE - NAMES python${_${_PYTHON_PREFIX}_VERSION}) - _python_validate_interpreter () + _python_validate_interpreter (${_${_PYTHON_PREFIX}_VERSION}) if (${_PYTHON_PREFIX}_EXECUTABLE) break() endif() endforeach() - # try more generic names if (NOT ${_PYTHON_PREFIX}_EXECUTABLE) + # No specific version found. Retry with generic names + # try using HINTS find_program (${_PYTHON_PREFIX}_EXECUTABLE - NAMES python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} python + NAMES python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} + python ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES} + NAMES_PER_DIR HINTS ${_${_PYTHON_PREFIX}_HINTS} - PATH_SUFFIXES bin) + PATH_SUFFIXES bin ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH) + # try using standard paths. + # NAMES_PER_DIR is not defined on purpose to have a chance to find + # expected version. + # For example, typical systems have 'python' for version 2.* and 'python3' + # for version 3.*. So looking for names per dir will find, potentially, + # systematically 'python' (i.e. version 2) even if version 3 is searched. + find_program (${_PYTHON_PREFIX}_EXECUTABLE + NAMES python${_${_PYTHON_PREFIX}_REQUIRED_VERSION_MAJOR} + python + ${_${_PYTHON_PREFIX}_IRON_PYTHON_NAMES}) _python_validate_interpreter () endif() @@ -291,6 +471,23 @@ if ("Interpreter" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS) endif() if (${_PYTHON_PREFIX}_Interpreter_FOUND) + if (NOT CMAKE_SIZEOF_VOID_P) + # determine interpreter architecture + execute_process (COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c "import sys; print(sys.maxsize > 2**32)" + RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT + OUTPUT_VARIABLE ${_PYTHON_PREFIX}_IS64BIT + ERROR_VARIABLE ${_PYTHON_PREFIX}_IS64BIT) + if (NOT _${_PYTHON_PREFIX}_RESULT) + if (${_PYTHON_PREFIX}_IS64BIT) + set (_${_PYTHON_PREFIX}_ARCH 64) + set (_${_PYTHON_PREFIX}_ARCH2 64) + else() + set (_${_PYTHON_PREFIX}_ARCH 32) + set (_${_PYTHON_PREFIX}_ARCH2 32) + endif() + endif() + endif() + # retrieve interpreter identity execute_process (COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -V RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT @@ -359,19 +556,42 @@ if ("Compiler" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS) # try using root dir and registry foreach (_${_PYTHON_PREFIX}_VERSION IN LISTS _${_PYTHON_PREFIX}_FIND_VERSIONS) + if (_${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST") + find_program (${_PYTHON_PREFIX}_COMPILER + NAMES ipyc + HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS} + PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] + PATH_SUFFIXES ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH) + endif() + find_program (${_PYTHON_PREFIX}_COMPILER NAMES ipyc HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS} - PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] + PATH_SUFFIXES ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH) + + if (_${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST") + find_program (${_PYTHON_PREFIX}_COMPILER + NAMES ipyc + PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\IronPython\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] + PATH_SUFFIXES ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES} + NO_DEFAULT_PATH) + endif() + + _python_validate_compiler (${_${_PYTHON_PREFIX}_VERSION}) if (${_PYTHON_PREFIX}_COMPILER) break() endif() endforeach() - # try in standard paths + + # no specific version found, re-try in standard paths find_program (${_PYTHON_PREFIX}_COMPILER - NAMES ipyc) + NAMES ipyc + HINTS ${_${_PYTHON_PREFIX}_IRON_ROOT} ${_${_PYTHON_PREFIX}_HINTS} + PATH_SUFFIXES ${_${_PYTHON_PREFIX}_IRON_PYTHON_PATH_SUFFIXES}) if (${_PYTHON_PREFIX}_COMPILER) # retrieve python environment version from compiler @@ -483,6 +703,7 @@ if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS list (APPEND _${_PYTHON_PREFIX}_CONFIG_NAMES "python${_${_PYTHON_PREFIX}_VERSION}-config") find_program (_${_PYTHON_PREFIX}_CONFIG NAMES ${_${_PYTHON_PREFIX}_CONFIG_NAMES} + NAMES_PER_DIR HINTS ${_${_PYTHON_PREFIX}_HINTS} PATH_SUFFIXES bin) unset (_${_PYTHON_PREFIX}_CONFIG_NAMES) @@ -571,7 +792,60 @@ if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS _python_get_frameworks (_${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_VERSION}) - # search first in known locations + set (_${_PYTHON_PREFIX}_REGISTRY_PATHS + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH2}\\InstallPath]) + + if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST") + find_library (${_PYTHON_PREFIX}_LIBRARY_RELEASE + NAMES python${_${_PYTHON_PREFIX}_VERSION_NO_DOTS} + python${_${_PYTHON_PREFIX}_VERSION}mu + python${_${_PYTHON_PREFIX}_VERSION}m + python${_${_PYTHON_PREFIX}_VERSION}u + python${_${_PYTHON_PREFIX}_VERSION} + NAMES_PER_DIR + PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} + PATH_SUFFIXES lib/${CMAKE_LIBRARY_ARCHITECTURE} lib libs + lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION}mu + lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION}m + lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION}u + lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION} + lib/python${_${_PYTHON_PREFIX}_VERSION}/config + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH) + endif() + + if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST") + find_library (${_PYTHON_PREFIX}_LIBRARY_RELEASE + NAMES python${_${_PYTHON_PREFIX}_VERSION_NO_DOTS} + python${_${_PYTHON_PREFIX}_VERSION}mu + python${_${_PYTHON_PREFIX}_VERSION}m + python${_${_PYTHON_PREFIX}_VERSION}u + python${_${_PYTHON_PREFIX}_VERSION} + NAMES_PER_DIR + HINTS ${_${_PYTHON_PREFIX}_HINTS} + PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS} + PATH_SUFFIXES lib/${CMAKE_LIBRARY_ARCHITECTURE} lib libs + lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION}mu + lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION}m + lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION}u + lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION} + lib/python${_${_PYTHON_PREFIX}_VERSION}/config + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH) + endif() + + # search in HINTS locations find_library (${_PYTHON_PREFIX}_LIBRARY_RELEASE NAMES python${_${_PYTHON_PREFIX}_VERSION_NO_DOTS} python${_${_PYTHON_PREFIX}_VERSION}mu @@ -580,11 +854,6 @@ if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS python${_${_PYTHON_PREFIX}_VERSION} NAMES_PER_DIR HINTS ${_${_PYTHON_PREFIX}_HINTS} - PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] PATH_SUFFIXES lib/${CMAKE_LIBRARY_ARCHITECTURE} lib libs lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION}mu lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION}m @@ -593,6 +862,19 @@ if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS lib/python${_${_PYTHON_PREFIX}_VERSION}/config NO_SYSTEM_ENVIRONMENT_PATH NO_CMAKE_SYSTEM_PATH) + + if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "LAST") + set (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS}) + else() + unset (__${_PYTHON_PREFIX}_FRAMEWORK_PATHS) + endif() + + if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "LAST") + set (__${_PYTHON_PREFIX}_REGISTRY_PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS}) + else() + unset (__${_PYTHON_PREFIX}_REGISTRY_PATHS) + endif() + # search in all default paths find_library (${_PYTHON_PREFIX}_LIBRARY_RELEASE NAMES python${_${_PYTHON_PREFIX}_VERSION_NO_DOTS} @@ -601,6 +883,8 @@ if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS python${_${_PYTHON_PREFIX}_VERSION}u python${_${_PYTHON_PREFIX}_VERSION} NAMES_PER_DIR + PATHS ${__${_PYTHON_PREFIX}_FRAMEWORK_PATHS} + ${__${_PYTHON_PREFIX}_REGISTRY_PATHS} PATH_SUFFIXES lib/${CMAKE_LIBRARY_ARCHITECTURE} lib libs lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION}mu lib/python${_${_PYTHON_PREFIX}_VERSION}/config-${_${_PYTHON_PREFIX}_VERSION}m @@ -618,11 +902,6 @@ if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS python${_${_PYTHON_PREFIX}_VERSION} NAMES_PER_DIR HINTS "${_${_PYTHON_PREFIX}_PATH}" ${_${_PYTHON_PREFIX}_HINTS} - PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] PATH_SUFFIXES bin) endif() @@ -632,27 +911,28 @@ if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS # use library location as a hint get_filename_component (_${_PYTHON_PREFIX}_PATH "${${_PYTHON_PREFIX}_LIBRARY_RELEASE}" DIRECTORY) find_library (${_PYTHON_PREFIX}_LIBRARY_DEBUG - NAMES python${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}_d - NAMES_PER_DIR - HINTS "${_${_PYTHON_PREFIX}_PATH}" ${_${_PYTHON_PREFIX}_HINTS} - NO_DEFAULT_PATH) - else() - # search first in known locations - find_library (${_PYTHON_PREFIX}_LIBRARY_DEBUG NAMES python${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}_d NAMES_PER_DIR - HINTS ${_${_PYTHON_PREFIX}_HINTS} - PATHS [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] - PATH_SUFFIXES lib libs - NO_SYSTEM_ENVIRONMENT_PATH - NO_CMAKE_SYSTEM_PATH) + HINTS "${_${_PYTHON_PREFIX}_PATH}" ${_${_PYTHON_PREFIX}_HINTS} + NO_DEFAULT_PATH) + else() + # search first in known locations + if (_${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST") + find_library (${_PYTHON_PREFIX}_LIBRARY_DEBUG + NAMES python${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}_d + NAMES_PER_DIR + HINTS ${_${_PYTHON_PREFIX}_HINTS} + PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS} + PATH_SUFFIXES lib libs + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH) + endif() # search in all default paths find_library (${_PYTHON_PREFIX}_LIBRARY_DEBUG NAMES python${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}_d NAMES_PER_DIR + HINTS ${_${_PYTHON_PREFIX}_HINTS} + PATHS ${__${_PYTHON_PREFIX}_REGISTRY_PATHS} PATH_SUFFIXES lib libs) endif() if (${_PYTHON_PREFIX}_LIBRARY_DEBUG) @@ -661,10 +941,6 @@ if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS NAMES python${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}_d NAMES_PER_DIR HINTS "${_${_PYTHON_PREFIX}_PATH}" ${_${_PYTHON_PREFIX}_HINTS} - PATHS [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] PATH_SUFFIXES bin) endif() endif() @@ -672,6 +948,21 @@ if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS # Don't search for include dir until library location is known if (${_PYTHON_PREFIX}_LIBRARY_RELEASE OR ${_PYTHON_PREFIX}_LIBRARY_DEBUG) unset (_${_PYTHON_PREFIX}_INCLUDE_HINTS) + + if (${_PYTHON_PREFIX}_EXECUTABLE) + # pick up include directory from configuration + execute_process (COMMAND "${${_PYTHON_PREFIX}_EXECUTABLE}" -c + "import sys; import sysconfig; sys.stdout.write(sysconfig.get_path('include'))" + RESULT_VARIABLE _${_PYTHON_PREFIX}_RESULT + OUTPUT_VARIABLE _${_PYTHON_PREFIX}_PATH + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + if (NOT _${_PYTHON_PREFIX}_RESULT) + file (TO_CMAKE_PATH "${_${_PYTHON_PREFIX}_PATH}" _${_PYTHON_PREFIX}_PATH) + list (APPEND _${_PYTHON_PREFIX}_INCLUDE_HINTS "${_${_PYTHON_PREFIX}_PATH}") + endif() + endif() + foreach (_${_PYTHON_PREFIX}_LIB IN ITEMS ${_PYTHON_PREFIX}_LIBRARY_RELEASE ${_PYTHON_PREFIX}_LIBRARY_DEBUG) if (${_${_PYTHON_PREFIX}_LIB}) # Use the library's install prefix as a hint @@ -691,14 +982,41 @@ if ("Development" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS endforeach() list (REMOVE_DUPLICATES _${_PYTHON_PREFIX}_INCLUDE_HINTS) + if (APPLE AND _${_PYTHON_PREFIX}_FIND_FRAMEWORK STREQUAL "FIRST") + find_path (${_PYTHON_PREFIX}_INCLUDE_DIR + NAMES Python.h + HINTS ${_${_PYTHON_PREFIX}_HINTS} + PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} + PATH_SUFFIXES include/python${_${_PYTHON_PREFIX}_VERSION}mu + include/python${_${_PYTHON_PREFIX}_VERSION}m + include/python${_${_PYTHON_PREFIX}_VERSION}u + include/python${_${_PYTHON_PREFIX}_VERSION} + include + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH) + endif() + + if (WIN32 AND _${_PYTHON_PREFIX}_FIND_REGISTRY STREQUAL "FIRST") + find_path (${_PYTHON_PREFIX}_INCLUDE_DIR + NAMES Python.h + HINTS ${_${_PYTHON_PREFIX}_INCLUDE_HINTS} ${_${_PYTHON_PREFIX}_HINTS} + PATHS ${_${_PYTHON_PREFIX}_REGISTRY_PATHS} + PATH_SUFFIXES include/python${_${_PYTHON_PREFIX}_VERSION}mu + include/python${_${_PYTHON_PREFIX}_VERSION}m + include/python${_${_PYTHON_PREFIX}_VERSION}u + include/python${_${_PYTHON_PREFIX}_VERSION} + include + NO_SYSTEM_ENVIRONMENT_PATH + NO_CMAKE_SYSTEM_PATH) + endif() + find_path (${_PYTHON_PREFIX}_INCLUDE_DIR NAMES Python.h HINTS ${_${_PYTHON_PREFIX}_INCLUDE_HINTS} ${_${_PYTHON_PREFIX}_HINTS} - PATHS ${_${_PYTHON_PREFIX}_FRAMEWORK_PATHS} - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] - [HKEY_CURRENT_USER\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_${_PYTHON_PREFIX}_VERSION}\\InstallPath] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\ContinuumAnalytics\\Anaconda${_${_PYTHON_PREFIX}_VERSION_NO_DOTS}-${_${_PYTHON_PREFIX}_ARCH}\\InstallPath] + PATHS ${__${_PYTHON_PREFIX}_FRAMEWORK_PATHS} + ${__${_PYTHON_PREFIX}_REGISTRY_PATHS} PATH_SUFFIXES include/python${_${_PYTHON_PREFIX}_VERSION}mu include/python${_${_PYTHON_PREFIX}_VERSION}m include/python${_${_PYTHON_PREFIX}_VERSION}u @@ -914,6 +1232,13 @@ endif() # final clean-up +# Restore CMAKE_FIND_APPBUNDLE +if (DEFINED _${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE) + set (CMAKE_FIND_APPBUNDLE ${_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE}) + unset (_${_PYTHON_PREFIX}_CMAKE_FIND_APPBUNDLE) +else() + unset (CMAKE_FIND_APPBUNDLE) +endif() # Restore CMAKE_FIND_FRAMEWORK if (DEFINED _${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK) set (CMAKE_FIND_FRAMEWORK ${_${_PYTHON_PREFIX}_CMAKE_FIND_FRAMEWORK}) diff --git a/Modules/FindPython2.cmake b/Modules/FindPython2.cmake index 22e9a8f..998e992 100644 --- a/Modules/FindPython2.cmake +++ b/Modules/FindPython2.cmake @@ -117,6 +117,31 @@ Hints * If set to TRUE, search **only** for static libraries. * If set to FALSE, search **only** for shared libraries. +``Python2_FIND_REGISTRY`` + On Windows the ``Python2_FIND_REGISTRY`` variable determine the order + of preference between registry and environment variables. + the ``Python2_FIND_REGISTRY`` variable can be set to empty or one of the + following: + + * ``FIRST``: Try to use registry before environment variables. + This is the default. + * ``LAST``: Try to use registry after environment variables. + * ``NEVER``: Never try to use registry. + +``CMAKE_FIND_FRAMEWORK`` + On macOS the :variable:`CMAKE_FIND_FRAMEWORK` variable determine the order of + preference between Apple-style and unix-style package components. + + .. note:: + + Value ``ONLY`` is not supported so ``FIRST`` will be used instead. + +.. note:: + + If a Python virtual environment is configured, set variable + ``Python_FIND_REGISTRY`` (Windows) or ``CMAKE_FIND_FRAMEWORK`` (macOS) with + value ``LAST`` or ``NEVER`` to select it preferably. + Commands ^^^^^^^^ diff --git a/Modules/FindPython3.cmake b/Modules/FindPython3.cmake index 99c159b..2176f3f 100644 --- a/Modules/FindPython3.cmake +++ b/Modules/FindPython3.cmake @@ -117,6 +117,31 @@ Hints * If set to TRUE, search **only** for static libraries. * If set to FALSE, search **only** for shared libraries. +``Python3_FIND_REGISTRY`` + On Windows the ``Python3_FIND_REGISTRY`` variable determine the order + of preference between registry and environment variables. + the ``Python3_FIND_REGISTRY`` variable can be set to empty or one of the + following: + + * ``FIRST``: Try to use registry before environment variables. + This is the default. + * ``LAST``: Try to use registry after environment variables. + * ``NEVER``: Never try to use registry. + +``CMAKE_FIND_FRAMEWORK`` + On OS X the :variable:`CMAKE_FIND_FRAMEWORK` variable determine the order of + preference between Apple-style and unix-style package components. + + .. note:: + + Value ``ONLY`` is not supported so ``FIRST`` will be used instead. + +.. note:: + + If a Python virtual environment is configured, set variable + ``Python_FIND_REGISTRY`` (Windows) or ``CMAKE_FIND_FRAMEWORK`` (macOS) with + value ``LAST`` or ``NEVER`` to select it preferably. + Commands ^^^^^^^^ diff --git a/Modules/FindPythonInterp.cmake b/Modules/FindPythonInterp.cmake index 370e5e42..d1f7b31 100644 --- a/Modules/FindPythonInterp.cmake +++ b/Modules/FindPythonInterp.cmake @@ -1,44 +1,45 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindPythonInterp -# ---------------- -# -# Find python interpreter -# -# .. deprecated:: 3.12 -# -# Use :module:`FindPython3`, :module:`FindPython2` or :module:`FindPython` instead. -# -# This module finds if Python interpreter is installed and determines -# where the executables are. This code sets the following variables: -# -# :: -# -# PYTHONINTERP_FOUND - Was the Python executable found -# PYTHON_EXECUTABLE - path to the Python interpreter -# -# -# -# :: -# -# PYTHON_VERSION_STRING - Python version found e.g. 2.5.2 -# PYTHON_VERSION_MAJOR - Python major version found e.g. 2 -# PYTHON_VERSION_MINOR - Python minor version found e.g. 5 -# PYTHON_VERSION_PATCH - Python patch version found e.g. 2 -# -# -# -# The Python_ADDITIONAL_VERSIONS variable can be used to specify a list -# of version numbers that should be taken into account when searching -# for Python. You need to set this variable before calling -# find_package(PythonInterp). -# -# If calling both ``find_package(PythonInterp)`` and -# ``find_package(PythonLibs)``, call ``find_package(PythonInterp)`` first to -# get the currently active Python version by default with a consistent version -# of PYTHON_LIBRARIES. +#[=======================================================================[.rst: +FindPythonInterp +---------------- + +.. deprecated:: 3.12 + + Use :module:`FindPython3`, :module:`FindPython2` or :module:`FindPython` instead. + +Find python interpreter + +This module finds if Python interpreter is installed and determines +where the executables are. This code sets the following variables: + +:: + + PYTHONINTERP_FOUND - Was the Python executable found + PYTHON_EXECUTABLE - path to the Python interpreter + + + +:: + + PYTHON_VERSION_STRING - Python version found e.g. 2.5.2 + PYTHON_VERSION_MAJOR - Python major version found e.g. 2 + PYTHON_VERSION_MINOR - Python minor version found e.g. 5 + PYTHON_VERSION_PATCH - Python patch version found e.g. 2 + + + +The Python_ADDITIONAL_VERSIONS variable can be used to specify a list +of version numbers that should be taken into account when searching +for Python. You need to set this variable before calling +find_package(PythonInterp). + +If calling both ``find_package(PythonInterp)`` and +``find_package(PythonLibs)``, call ``find_package(PythonInterp)`` first to +get the currently active Python version by default with a consistent version +of PYTHON_LIBRARIES. +#]=======================================================================] unset(_Python_NAMES) diff --git a/Modules/FindPythonLibs.cmake b/Modules/FindPythonLibs.cmake index 3ac1ce2..1d62ac4 100644 --- a/Modules/FindPythonLibs.cmake +++ b/Modules/FindPythonLibs.cmake @@ -1,48 +1,49 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindPythonLibs -# -------------- -# -# Find python libraries -# -# .. deprecated:: 3.12 -# -# Use :module:`FindPython3`, :module:`FindPython2` or :module:`FindPython` instead. -# -# This module finds if Python is installed and determines where the -# include files and libraries are. It also determines what the name of -# the library is. This code sets the following variables: -# -# :: -# -# PYTHONLIBS_FOUND - have the Python libs been found -# PYTHON_LIBRARIES - path to the python library -# PYTHON_INCLUDE_PATH - path to where Python.h is found (deprecated) -# PYTHON_INCLUDE_DIRS - path to where Python.h is found -# PYTHON_DEBUG_LIBRARIES - path to the debug library (deprecated) -# PYTHONLIBS_VERSION_STRING - version of the Python libs found (since CMake 2.8.8) -# -# -# -# The Python_ADDITIONAL_VERSIONS variable can be used to specify a list -# of version numbers that should be taken into account when searching -# for Python. You need to set this variable before calling -# find_package(PythonLibs). -# -# If you'd like to specify the installation of Python to use, you should -# modify the following cache variables: -# -# :: -# -# PYTHON_LIBRARY - path to the python library -# PYTHON_INCLUDE_DIR - path to where Python.h is found -# -# If calling both ``find_package(PythonInterp)`` and -# ``find_package(PythonLibs)``, call ``find_package(PythonInterp)`` first to -# get the currently active Python version by default with a consistent version -# of PYTHON_LIBRARIES. +#[=======================================================================[.rst: +FindPythonLibs +-------------- + +.. deprecated:: 3.12 + + Use :module:`FindPython3`, :module:`FindPython2` or :module:`FindPython` instead. + +Find python libraries + +This module finds if Python is installed and determines where the +include files and libraries are. It also determines what the name of +the library is. This code sets the following variables: + +:: + + PYTHONLIBS_FOUND - have the Python libs been found + PYTHON_LIBRARIES - path to the python library + PYTHON_INCLUDE_PATH - path to where Python.h is found (deprecated) + PYTHON_INCLUDE_DIRS - path to where Python.h is found + PYTHON_DEBUG_LIBRARIES - path to the debug library (deprecated) + PYTHONLIBS_VERSION_STRING - version of the Python libs found (since CMake 2.8.8) + + + +The Python_ADDITIONAL_VERSIONS variable can be used to specify a list +of version numbers that should be taken into account when searching +for Python. You need to set this variable before calling +find_package(PythonLibs). + +If you'd like to specify the installation of Python to use, you should +modify the following cache variables: + +:: + + PYTHON_LIBRARY - path to the python library + PYTHON_INCLUDE_DIR - path to where Python.h is found + +If calling both ``find_package(PythonInterp)`` and +``find_package(PythonLibs)``, call ``find_package(PythonInterp)`` first to +get the currently active Python version by default with a consistent version +of PYTHON_LIBRARIES. +#]=======================================================================] # Use the executable's path as a hint set(_Python_LIBRARY_PATH_HINT) @@ -121,6 +122,34 @@ unset(_PYTHON1_VERSIONS) unset(_PYTHON2_VERSIONS) unset(_PYTHON3_VERSIONS) +# Python distribution: define which architectures can be used +if (CMAKE_SIZEOF_VOID_P) + # In this case, search only for 64bit or 32bit + math (EXPR _PYTHON_ARCH "${CMAKE_SIZEOF_VOID_P} * 8") + set (_PYTHON_ARCH2 _PYTHON_PREFIX_ARCH}) +else() + if (PYTHON_EXECUTABLE) + # determine interpreter architecture + execute_process (COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; print(sys.maxsize > 2**32)" + RESULT_VARIABLE _PYTHON_RESULT + OUTPUT_VARIABLE _PYTHON_IS64BIT + ERROR_VARIABLE _PYTHON_IS64BIT) + if (NOT _PYTHON_RESULT) + if (_PYTHON_IS64BIT) + set (_PYTHON_ARCH 64) + set (_PYTHON_ARCH2 64) + else() + set (_PYTHON_ARCH 32) + set (_PYTHON_ARCH2 32) + endif() + endif() + else() + # architecture unknown, search for both 64bit and 32bit + set (_PYTHON_ARCH 64) + set (_PYTHON_ARCH2 32) + endif() +endif() + foreach(_CURRENT_VERSION ${_Python_VERSIONS}) string(REPLACE "." "" _CURRENT_VERSION_NO_DOTS ${_CURRENT_VERSION}) if(WIN32) @@ -130,9 +159,17 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS}) HINTS ${_Python_LIBRARY_PATH_HINT} PATHS [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs/Debug + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs/Debug [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs/Debug + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs/Debug + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs/Debug [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs ) endif() @@ -156,7 +193,11 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS}) PATHS ${PYTHON_FRAMEWORK_LIBRARIES} [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/libs + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/libs + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/libs ) # Look for the static library in the Python config directory find_library(PYTHON_LIBRARY @@ -201,7 +242,11 @@ foreach(_CURRENT_VERSION ${_Python_VERSIONS}) PATHS ${PYTHON_FRAMEWORK_INCLUDES} [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/include + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/include [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}\\InstallPath]/include + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH}\\InstallPath]/include + [HKEY_CURRENT_USER\\SOFTWARE\\Python\\PythonCore\\${_CURRENT_VERSION}-${_PYTHON_ARCH2}\\InstallPath]/include PATH_SUFFIXES python${_CURRENT_VERSION}mu python${_CURRENT_VERSION}m diff --git a/Modules/FindQt.cmake b/Modules/FindQt.cmake index 68dfa7d..083d6a6 100644 --- a/Modules/FindQt.cmake +++ b/Modules/FindQt.cmake @@ -1,37 +1,38 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindQt -# ------ -# -# Searches for all installed versions of Qt. -# -# This should only be used if your project can work with multiple -# versions of Qt. If not, you should just directly use FindQt4 or -# FindQt3. If multiple versions of Qt are found on the machine, then -# The user must set the option DESIRED_QT_VERSION to the version they -# want to use. If only one version of qt is found on the machine, then -# the DESIRED_QT_VERSION is set to that version and the matching FindQt3 -# or FindQt4 module is included. Once the user sets DESIRED_QT_VERSION, -# then the FindQt3 or FindQt4 module is included. -# -# This module can only detect and switch between Qt versions 3 and 4. It -# cannot handle Qt5 or any later versions. -# -# :: -# -# QT_REQUIRED if this is set to TRUE then if CMake can -# not find Qt4 or Qt3 an error is raised -# and a message is sent to the user. -# -# -# -# :: -# -# DESIRED_QT_VERSION OPTION is created -# QT4_INSTALLED is set to TRUE if qt4 is found. -# QT3_INSTALLED is set to TRUE if qt3 is found. +#[=======================================================================[.rst: +FindQt +------ + +Searches for all installed versions of Qt3 or Qt4. + +This module cannot handle Qt5 or any later versions. +For those, see :manual:`cmake-qt(7)`. + +This module should only be used if your project can work with multiple +versions of Qt. If not, you should just directly use FindQt4 or +FindQt3. If multiple versions of Qt are found on the machine, then +The user must set the option DESIRED_QT_VERSION to the version they +want to use. If only one version of qt is found on the machine, then +the DESIRED_QT_VERSION is set to that version and the matching FindQt3 +or FindQt4 module is included. Once the user sets DESIRED_QT_VERSION, +then the FindQt3 or FindQt4 module is included. + +:: + + QT_REQUIRED if this is set to TRUE then if CMake can + not find Qt4 or Qt3 an error is raised + and a message is sent to the user. + + + +:: + + DESIRED_QT_VERSION OPTION is created + QT4_INSTALLED is set to TRUE if qt4 is found. + QT3_INSTALLED is set to TRUE if qt3 is found. +#]=======================================================================] # look for signs of qt3 installations file(GLOB GLOB_TEMP_VAR /usr/lib*/qt-3*/bin/qmake /usr/lib*/qt3*/bin/qmake) diff --git a/Modules/FindQt3.cmake b/Modules/FindQt3.cmake index a034210..4a8e28b 100644 --- a/Modules/FindQt3.cmake +++ b/Modules/FindQt3.cmake @@ -1,37 +1,38 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindQt3 -# ------- -# -# Locate Qt include paths and libraries -# -# This module defines: -# -# :: -# -# QT_INCLUDE_DIR - where to find qt.h, etc. -# QT_LIBRARIES - the libraries to link against to use Qt. -# QT_DEFINITIONS - definitions to use when -# compiling code that uses Qt. -# QT_FOUND - If false, don't try to use Qt. -# QT_VERSION_STRING - the version of Qt found -# -# -# -# If you need the multithreaded version of Qt, set QT_MT_REQUIRED to -# TRUE -# -# Also defined, but not for general use are: -# -# :: -# -# QT_MOC_EXECUTABLE, where to find the moc tool. -# QT_UIC_EXECUTABLE, where to find the uic tool. -# QT_QT_LIBRARY, where to find the Qt library. -# QT_QTMAIN_LIBRARY, where to find the qtmain -# library. This is only required by Qt3 on Windows. +#[=======================================================================[.rst: +FindQt3 +------- + +Locate Qt include paths and libraries + +This module defines: + +:: + + QT_INCLUDE_DIR - where to find qt.h, etc. + QT_LIBRARIES - the libraries to link against to use Qt. + QT_DEFINITIONS - definitions to use when + compiling code that uses Qt. + QT_FOUND - If false, don't try to use Qt. + QT_VERSION_STRING - the version of Qt found + + + +If you need the multithreaded version of Qt, set QT_MT_REQUIRED to +TRUE + +Also defined, but not for general use are: + +:: + + QT_MOC_EXECUTABLE, where to find the moc tool. + QT_UIC_EXECUTABLE, where to find the uic tool. + QT_QT_LIBRARY, where to find the Qt library. + QT_QTMAIN_LIBRARY, where to find the qtmain + library. This is only required by Qt3 on Windows. +#]=======================================================================] # These are around for backwards compatibility # they will be set diff --git a/Modules/FindQt4.cmake b/Modules/FindQt4.cmake index 847a798..a145b46 100644 --- a/Modules/FindQt4.cmake +++ b/Modules/FindQt4.cmake @@ -1,304 +1,305 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindQt4 -# ------- -# -# Finding and Using Qt4 -# ^^^^^^^^^^^^^^^^^^^^^ -# -# This module can be used to find Qt4. The most important issue is that -# the Qt4 qmake is available via the system path. This qmake is then -# used to detect basically everything else. This module defines a -# number of :prop_tgt:`IMPORTED` targets, macros and variables. -# -# Typical usage could be something like: -# -# .. code-block:: cmake -# -# set(CMAKE_AUTOMOC ON) -# set(CMAKE_INCLUDE_CURRENT_DIR ON) -# find_package(Qt4 4.4.3 REQUIRED QtGui QtXml) -# add_executable(myexe main.cpp) -# target_link_libraries(myexe Qt4::QtGui Qt4::QtXml) -# -# .. note:: -# -# When using :prop_tgt:`IMPORTED` targets, the qtmain.lib static library is -# automatically linked on Windows for :prop_tgt:`WIN32 <WIN32_EXECUTABLE>` -# executables. To disable that globally, set the -# ``QT4_NO_LINK_QTMAIN`` variable before finding Qt4. To disable that -# for a particular executable, set the ``QT4_NO_LINK_QTMAIN`` target -# property to ``TRUE`` on the executable. -# -# Qt Build Tools -# ^^^^^^^^^^^^^^ -# -# Qt relies on some bundled tools for code generation, such as ``moc`` for -# meta-object code generation,``uic`` for widget layout and population, -# and ``rcc`` for virtual filesystem content generation. These tools may be -# automatically invoked by :manual:`cmake(1)` if the appropriate conditions -# are met. See :manual:`cmake-qt(7)` for more. -# -# Qt Macros -# ^^^^^^^^^ -# -# In some cases it can be necessary or useful to invoke the Qt build tools in a -# more-manual way. Several macros are available to add targets for such uses. -# -# :: -# -# macro QT4_WRAP_CPP(outfiles inputfile ... [TARGET tgt] OPTIONS ...) -# create moc code from a list of files containing Qt class with -# the Q_OBJECT declaration. Per-directory preprocessor definitions -# are also added. If the <tgt> is specified, the -# INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS from -# the <tgt> are passed to moc. Options may be given to moc, such as -# those found when executing "moc -help". -# -# -# :: -# -# macro QT4_WRAP_UI(outfiles inputfile ... OPTIONS ...) -# create code from a list of Qt designer ui files. -# Options may be given to uic, such as those found -# when executing "uic -help" -# -# -# :: -# -# macro QT4_ADD_RESOURCES(outfiles inputfile ... OPTIONS ...) -# create code from a list of Qt resource files. -# Options may be given to rcc, such as those found -# when executing "rcc -help" -# -# -# :: -# -# macro QT4_GENERATE_MOC(inputfile outputfile [TARGET tgt]) -# creates a rule to run moc on infile and create outfile. -# Use this if for some reason QT4_WRAP_CPP() isn't appropriate, e.g. -# because you need a custom filename for the moc file or something -# similar. If the <tgt> is specified, the -# INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS from -# the <tgt> are passed to moc. -# -# -# :: -# -# macro QT4_ADD_DBUS_INTERFACE(outfiles interface basename) -# Create the interface header and implementation files with the -# given basename from the given interface xml file and add it to -# the list of sources. -# -# You can pass additional parameters to the qdbusxml2cpp call by setting -# properties on the input file: -# -# INCLUDE the given file will be included in the generate interface header -# -# CLASSNAME the generated class is named accordingly -# -# NO_NAMESPACE the generated class is not wrapped in a namespace -# -# -# :: -# -# macro QT4_ADD_DBUS_INTERFACES(outfiles inputfile ... ) -# Create the interface header and implementation files -# for all listed interface xml files. -# The basename will be automatically determined from the name -# of the xml file. -# -# The source file properties described for -# QT4_ADD_DBUS_INTERFACE also apply here. -# -# -# :: -# -# macro QT4_ADD_DBUS_ADAPTOR(outfiles xmlfile parentheader parentclassname -# [basename] [classname]) -# create a dbus adaptor (header and implementation file) from the xml file -# describing the interface, and add it to the list of sources. The adaptor -# forwards the calls to a parent class, defined in parentheader and named -# parentclassname. The name of the generated files will be -# <basename>adaptor.{cpp,h} where basename defaults to the basename of the -# xml file. -# If <classname> is provided, then it will be used as the classname of the -# adaptor itself. -# -# -# :: -# -# macro QT4_GENERATE_DBUS_INTERFACE( header [interfacename] OPTIONS ...) -# generate the xml interface file from the given header. -# If the optional argument interfacename is omitted, the name of the -# interface file is constructed from the basename of the header with -# the suffix .xml appended. -# Options may be given to qdbuscpp2xml, such as those found when -# executing "qdbuscpp2xml --help" -# -# -# :: -# -# macro QT4_CREATE_TRANSLATION( qm_files directories ... sources ... -# ts_files ... OPTIONS ...) -# out: qm_files -# in: directories sources ts_files -# options: flags to pass to lupdate, such as -extensions to specify -# extensions for a directory scan. -# generates commands to create .ts (vie lupdate) and .qm -# (via lrelease) - files from directories and/or sources. The ts files are -# created and/or updated in the source tree (unless given with full paths). -# The qm files are generated in the build tree. -# Updating the translations can be done by adding the qm_files -# to the source list of your library/executable, so they are -# always updated, or by adding a custom target to control when -# they get updated/generated. -# -# -# :: -# -# macro QT4_ADD_TRANSLATION( qm_files ts_files ... ) -# out: qm_files -# in: ts_files -# generates commands to create .qm from .ts - files. The generated -# filenames can be found in qm_files. The ts_files -# must exist and are not updated in any way. -# -# -# :: -# -# macro QT4_AUTOMOC(sourcefile1 sourcefile2 ... [TARGET tgt]) -# The qt4_automoc macro is obsolete. Use the CMAKE_AUTOMOC feature instead. -# This macro is still experimental. -# It can be used to have moc automatically handled. -# So if you have the files foo.h and foo.cpp, and in foo.h a -# a class uses the Q_OBJECT macro, moc has to run on it. If you don't -# want to use QT4_WRAP_CPP() (which is reliable and mature), you can insert -# #include "foo.moc" -# in foo.cpp and then give foo.cpp as argument to QT4_AUTOMOC(). This will -# scan all listed files at cmake-time for such included moc files and if it -# finds them cause a rule to be generated to run moc at build time on the -# accompanying header file foo.h. -# If a source file has the SKIP_AUTOMOC property set it will be ignored by -# this macro. -# If the <tgt> is specified, the INTERFACE_INCLUDE_DIRECTORIES and -# INTERFACE_COMPILE_DEFINITIONS from the <tgt> are passed to moc. -# -# -# :: -# -# function QT4_USE_MODULES( target [link_type] modules...) -# This function is obsolete. Use target_link_libraries with IMPORTED targets -# instead. -# Make <target> use the <modules> from Qt. Using a Qt module means -# to link to the library, add the relevant include directories for the -# module, and add the relevant compiler defines for using the module. -# Modules are roughly equivalent to components of Qt4, so usage would be -# something like: -# qt4_use_modules(myexe Core Gui Declarative) -# to use QtCore, QtGui and QtDeclarative. The optional <link_type> argument -# can be specified as either LINK_PUBLIC or LINK_PRIVATE to specify the -# same argument to the target_link_libraries call. -# -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# A particular Qt library may be used by using the corresponding -# :prop_tgt:`IMPORTED` target with the :command:`target_link_libraries` -# command: -# -# .. code-block:: cmake -# -# target_link_libraries(myexe Qt4::QtGui Qt4::QtXml) -# -# Using a target in this way causes :cmake(1)` to use the appropriate include -# directories and compile definitions for the target when compiling ``myexe``. -# -# Targets are aware of their dependencies, so for example it is not necessary -# to list ``Qt4::QtCore`` if another Qt library is listed, and it is not -# necessary to list ``Qt4::QtGui`` if ``Qt4::QtDeclarative`` is listed. -# Targets may be tested for existence in the usual way with the -# :command:`if(TARGET)` command. -# -# The Qt toolkit may contain both debug and release libraries. -# :manual:`cmake(1)` will choose the appropriate version based on the build -# configuration. -# -# ``Qt4::QtCore`` -# The QtCore target -# ``Qt4::QtGui`` -# The QtGui target -# ``Qt4::Qt3Support`` -# The Qt3Support target -# ``Qt4::QtAssistant`` -# The QtAssistant target -# ``Qt4::QtAssistantClient`` -# The QtAssistantClient target -# ``Qt4::QAxContainer`` -# The QAxContainer target (Windows only) -# ``Qt4::QAxServer`` -# The QAxServer target (Windows only) -# ``Qt4::QtDBus`` -# The QtDBus target -# ``Qt4::QtDeclarative`` -# The QtDeclarative target -# ``Qt4::QtDesigner`` -# The QtDesigner target -# ``Qt4::QtDesignerComponents`` -# The QtDesignerComponents target -# ``Qt4::QtHelp`` -# The QtHelp target -# ``Qt4::QtMotif`` -# The QtMotif target -# ``Qt4::QtMultimedia`` -# The QtMultimedia target -# ``Qt4::QtNetwork`` -# The QtNetwork target -# ``Qt4::QtNsPLugin`` -# The QtNsPLugin target -# ``Qt4::QtOpenGL`` -# The QtOpenGL target -# ``Qt4::QtScript`` -# The QtScript target -# ``Qt4::QtScriptTools`` -# The QtScriptTools target -# ``Qt4::QtSql`` -# The QtSql target -# ``Qt4::QtSvg`` -# The QtSvg target -# ``Qt4::QtTest`` -# The QtTest target -# ``Qt4::QtUiTools`` -# The QtUiTools target -# ``Qt4::QtWebKit`` -# The QtWebKit target -# ``Qt4::QtXml`` -# The QtXml target -# ``Qt4::QtXmlPatterns`` -# The QtXmlPatterns target -# ``Qt4::phonon`` -# The phonon target -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# Below is a detailed list of variables that FindQt4.cmake sets. -# -# ``Qt4_FOUND`` -# If false, don't try to use Qt 4. -# ``QT_FOUND`` -# If false, don't try to use Qt. This variable is for compatibility only. -# ``QT4_FOUND`` -# If false, don't try to use Qt 4. This variable is for compatibility only. -# ``QT_VERSION_MAJOR`` -# The major version of Qt found. -# ``QT_VERSION_MINOR`` -# The minor version of Qt found. -# ``QT_VERSION_PATCH`` -# The patch version of Qt found. +#[=======================================================================[.rst: +FindQt4 +------- + +Finding and Using Qt4 +^^^^^^^^^^^^^^^^^^^^^ + +This module can be used to find Qt4. The most important issue is that +the Qt4 qmake is available via the system path. This qmake is then +used to detect basically everything else. This module defines a +number of :prop_tgt:`IMPORTED` targets, macros and variables. + +Typical usage could be something like: + +.. code-block:: cmake + + set(CMAKE_AUTOMOC ON) + set(CMAKE_INCLUDE_CURRENT_DIR ON) + find_package(Qt4 4.4.3 REQUIRED QtGui QtXml) + add_executable(myexe main.cpp) + target_link_libraries(myexe Qt4::QtGui Qt4::QtXml) + +.. note:: + + When using :prop_tgt:`IMPORTED` targets, the qtmain.lib static library is + automatically linked on Windows for :prop_tgt:`WIN32 <WIN32_EXECUTABLE>` + executables. To disable that globally, set the + ``QT4_NO_LINK_QTMAIN`` variable before finding Qt4. To disable that + for a particular executable, set the ``QT4_NO_LINK_QTMAIN`` target + property to ``TRUE`` on the executable. + +Qt Build Tools +^^^^^^^^^^^^^^ + +Qt relies on some bundled tools for code generation, such as ``moc`` for +meta-object code generation,``uic`` for widget layout and population, +and ``rcc`` for virtual filesystem content generation. These tools may be +automatically invoked by :manual:`cmake(1)` if the appropriate conditions +are met. See :manual:`cmake-qt(7)` for more. + +Qt Macros +^^^^^^^^^ + +In some cases it can be necessary or useful to invoke the Qt build tools in a +more-manual way. Several macros are available to add targets for such uses. + +:: + + macro QT4_WRAP_CPP(outfiles inputfile ... [TARGET tgt] OPTIONS ...) + create moc code from a list of files containing Qt class with + the Q_OBJECT declaration. Per-directory preprocessor definitions + are also added. If the <tgt> is specified, the + INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS from + the <tgt> are passed to moc. Options may be given to moc, such as + those found when executing "moc -help". + + +:: + + macro QT4_WRAP_UI(outfiles inputfile ... OPTIONS ...) + create code from a list of Qt designer ui files. + Options may be given to uic, such as those found + when executing "uic -help" + + +:: + + macro QT4_ADD_RESOURCES(outfiles inputfile ... OPTIONS ...) + create code from a list of Qt resource files. + Options may be given to rcc, such as those found + when executing "rcc -help" + + +:: + + macro QT4_GENERATE_MOC(inputfile outputfile [TARGET tgt]) + creates a rule to run moc on infile and create outfile. + Use this if for some reason QT4_WRAP_CPP() isn't appropriate, e.g. + because you need a custom filename for the moc file or something + similar. If the <tgt> is specified, the + INTERFACE_INCLUDE_DIRECTORIES and INTERFACE_COMPILE_DEFINITIONS from + the <tgt> are passed to moc. + + +:: + + macro QT4_ADD_DBUS_INTERFACE(outfiles interface basename) + Create the interface header and implementation files with the + given basename from the given interface xml file and add it to + the list of sources. + + You can pass additional parameters to the qdbusxml2cpp call by setting + properties on the input file: + + INCLUDE the given file will be included in the generate interface header + + CLASSNAME the generated class is named accordingly + + NO_NAMESPACE the generated class is not wrapped in a namespace + + +:: + + macro QT4_ADD_DBUS_INTERFACES(outfiles inputfile ... ) + Create the interface header and implementation files + for all listed interface xml files. + The basename will be automatically determined from the name + of the xml file. + + The source file properties described for + QT4_ADD_DBUS_INTERFACE also apply here. + + +:: + + macro QT4_ADD_DBUS_ADAPTOR(outfiles xmlfile parentheader parentclassname + [basename] [classname]) + create a dbus adaptor (header and implementation file) from the xml file + describing the interface, and add it to the list of sources. The adaptor + forwards the calls to a parent class, defined in parentheader and named + parentclassname. The name of the generated files will be + <basename>adaptor.{cpp,h} where basename defaults to the basename of the + xml file. + If <classname> is provided, then it will be used as the classname of the + adaptor itself. + + +:: + + macro QT4_GENERATE_DBUS_INTERFACE( header [interfacename] OPTIONS ...) + generate the xml interface file from the given header. + If the optional argument interfacename is omitted, the name of the + interface file is constructed from the basename of the header with + the suffix .xml appended. + Options may be given to qdbuscpp2xml, such as those found when + executing "qdbuscpp2xml --help" + + +:: + + macro QT4_CREATE_TRANSLATION( qm_files directories ... sources ... + ts_files ... OPTIONS ...) + out: qm_files + in: directories sources ts_files + options: flags to pass to lupdate, such as -extensions to specify + extensions for a directory scan. + generates commands to create .ts (vie lupdate) and .qm + (via lrelease) - files from directories and/or sources. The ts files are + created and/or updated in the source tree (unless given with full paths). + The qm files are generated in the build tree. + Updating the translations can be done by adding the qm_files + to the source list of your library/executable, so they are + always updated, or by adding a custom target to control when + they get updated/generated. + + +:: + + macro QT4_ADD_TRANSLATION( qm_files ts_files ... ) + out: qm_files + in: ts_files + generates commands to create .qm from .ts - files. The generated + filenames can be found in qm_files. The ts_files + must exist and are not updated in any way. + + +:: + + macro QT4_AUTOMOC(sourcefile1 sourcefile2 ... [TARGET tgt]) + The qt4_automoc macro is obsolete. Use the CMAKE_AUTOMOC feature instead. + This macro is still experimental. + It can be used to have moc automatically handled. + So if you have the files foo.h and foo.cpp, and in foo.h a + a class uses the Q_OBJECT macro, moc has to run on it. If you don't + want to use QT4_WRAP_CPP() (which is reliable and mature), you can insert + #include "foo.moc" + in foo.cpp and then give foo.cpp as argument to QT4_AUTOMOC(). This will + scan all listed files at cmake-time for such included moc files and if it + finds them cause a rule to be generated to run moc at build time on the + accompanying header file foo.h. + If a source file has the SKIP_AUTOMOC property set it will be ignored by + this macro. + If the <tgt> is specified, the INTERFACE_INCLUDE_DIRECTORIES and + INTERFACE_COMPILE_DEFINITIONS from the <tgt> are passed to moc. + + +:: + + function QT4_USE_MODULES( target [link_type] modules...) + This function is obsolete. Use target_link_libraries with IMPORTED targets + instead. + Make <target> use the <modules> from Qt. Using a Qt module means + to link to the library, add the relevant include directories for the + module, and add the relevant compiler defines for using the module. + Modules are roughly equivalent to components of Qt4, so usage would be + something like: + qt4_use_modules(myexe Core Gui Declarative) + to use QtCore, QtGui and QtDeclarative. The optional <link_type> argument + can be specified as either LINK_PUBLIC or LINK_PRIVATE to specify the + same argument to the target_link_libraries call. + + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +A particular Qt library may be used by using the corresponding +:prop_tgt:`IMPORTED` target with the :command:`target_link_libraries` +command: + +.. code-block:: cmake + + target_link_libraries(myexe Qt4::QtGui Qt4::QtXml) + +Using a target in this way causes :cmake(1)` to use the appropriate include +directories and compile definitions for the target when compiling ``myexe``. + +Targets are aware of their dependencies, so for example it is not necessary +to list ``Qt4::QtCore`` if another Qt library is listed, and it is not +necessary to list ``Qt4::QtGui`` if ``Qt4::QtDeclarative`` is listed. +Targets may be tested for existence in the usual way with the +:command:`if(TARGET)` command. + +The Qt toolkit may contain both debug and release libraries. +:manual:`cmake(1)` will choose the appropriate version based on the build +configuration. + +``Qt4::QtCore`` + The QtCore target +``Qt4::QtGui`` + The QtGui target +``Qt4::Qt3Support`` + The Qt3Support target +``Qt4::QtAssistant`` + The QtAssistant target +``Qt4::QtAssistantClient`` + The QtAssistantClient target +``Qt4::QAxContainer`` + The QAxContainer target (Windows only) +``Qt4::QAxServer`` + The QAxServer target (Windows only) +``Qt4::QtDBus`` + The QtDBus target +``Qt4::QtDeclarative`` + The QtDeclarative target +``Qt4::QtDesigner`` + The QtDesigner target +``Qt4::QtDesignerComponents`` + The QtDesignerComponents target +``Qt4::QtHelp`` + The QtHelp target +``Qt4::QtMotif`` + The QtMotif target +``Qt4::QtMultimedia`` + The QtMultimedia target +``Qt4::QtNetwork`` + The QtNetwork target +``Qt4::QtNsPLugin`` + The QtNsPLugin target +``Qt4::QtOpenGL`` + The QtOpenGL target +``Qt4::QtScript`` + The QtScript target +``Qt4::QtScriptTools`` + The QtScriptTools target +``Qt4::QtSql`` + The QtSql target +``Qt4::QtSvg`` + The QtSvg target +``Qt4::QtTest`` + The QtTest target +``Qt4::QtUiTools`` + The QtUiTools target +``Qt4::QtWebKit`` + The QtWebKit target +``Qt4::QtXml`` + The QtXml target +``Qt4::QtXmlPatterns`` + The QtXmlPatterns target +``Qt4::phonon`` + The phonon target + +Result Variables +^^^^^^^^^^^^^^^^ + + Below is a detailed list of variables that FindQt4.cmake sets. + +``Qt4_FOUND`` + If false, don't try to use Qt 4. +``QT_FOUND`` + If false, don't try to use Qt. This variable is for compatibility only. +``QT4_FOUND`` + If false, don't try to use Qt 4. This variable is for compatibility only. +``QT_VERSION_MAJOR`` + The major version of Qt found. +``QT_VERSION_MINOR`` + The minor version of Qt found. +``QT_VERSION_PATCH`` + The patch version of Qt found. +#]=======================================================================] # Use find_package( Qt4 COMPONENTS ... ) to enable modules if( Qt4_FIND_COMPONENTS ) diff --git a/Modules/FindQuickTime.cmake b/Modules/FindQuickTime.cmake index 995d882..107486d 100644 --- a/Modules/FindQuickTime.cmake +++ b/Modules/FindQuickTime.cmake @@ -1,20 +1,21 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindQuickTime -# ------------- -# -# -# -# Locate QuickTime This module defines QUICKTIME_LIBRARY -# QUICKTIME_FOUND, if false, do not try to link to gdal -# QUICKTIME_INCLUDE_DIR, where to find the headers -# -# $QUICKTIME_DIR is an environment variable that would correspond to the -# ./configure --prefix=$QUICKTIME_DIR -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindQuickTime +------------- + + + +Locate QuickTime This module defines QUICKTIME_LIBRARY +QUICKTIME_FOUND, if false, do not try to link to gdal +QUICKTIME_INCLUDE_DIR, where to find the headers + +$QUICKTIME_DIR is an environment variable that would correspond to the +./configure --prefix=$QUICKTIME_DIR + +Created by Eric Wing. +#]=======================================================================] find_path(QUICKTIME_INCLUDE_DIR QuickTime/QuickTime.h QuickTime.h HINTS diff --git a/Modules/FindRTI.cmake b/Modules/FindRTI.cmake index b2ef076..54d2bec 100644 --- a/Modules/FindRTI.cmake +++ b/Modules/FindRTI.cmake @@ -1,37 +1,38 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindRTI -# ------- -# -# Try to find M&S HLA RTI libraries -# -# This module finds if any HLA RTI is installed and locates the standard -# RTI include files and libraries. -# -# RTI is a simulation infrastructure standardized by IEEE and SISO. It -# has a well defined C++ API that assures that simulation applications -# are independent on a particular RTI implementation. -# -# :: -# -# http://en.wikipedia.org/wiki/Run-Time_Infrastructure_(simulation) -# -# -# -# This code sets the following variables: -# -# :: -# -# RTI_INCLUDE_DIR = the directory where RTI includes file are found -# RTI_LIBRARIES = The libraries to link against to use RTI -# RTI_DEFINITIONS = -DRTI_USES_STD_FSTREAM -# RTI_FOUND = Set to FALSE if any HLA RTI was not found -# -# -# -# Report problems to <certi-devel@nongnu.org> +#[=======================================================================[.rst: +FindRTI +------- + +Try to find M&S HLA RTI libraries + +This module finds if any HLA RTI is installed and locates the standard +RTI include files and libraries. + +RTI is a simulation infrastructure standardized by IEEE and SISO. It +has a well defined C++ API that assures that simulation applications +are independent on a particular RTI implementation. + +:: + + http://en.wikipedia.org/wiki/Run-Time_Infrastructure_(simulation) + + + +This code sets the following variables: + +:: + + RTI_INCLUDE_DIR = the directory where RTI includes file are found + RTI_LIBRARIES = The libraries to link against to use RTI + RTI_DEFINITIONS = -DRTI_USES_STD_FSTREAM + RTI_FOUND = Set to FALSE if any HLA RTI was not found + + + +Report problems to <certi-devel@nongnu.org> +#]=======================================================================] macro(RTI_MESSAGE_QUIETLY QUIET TYPE MSG) if(NOT ${QUIET}) diff --git a/Modules/FindRuby.cmake b/Modules/FindRuby.cmake index bd9f835..58debdd 100644 --- a/Modules/FindRuby.cmake +++ b/Modules/FindRuby.cmake @@ -1,37 +1,38 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindRuby -# -------- -# -# Find Ruby -# -# This module finds if Ruby is installed and determines where the -# include files and libraries are. Ruby 1.8, 1.9, 2.0 and 2.1 are -# supported. -# -# The minimum required version of Ruby can be specified using the -# standard syntax, e.g. find_package(Ruby 1.8) -# -# It also determines what the name of the library is. This code sets -# the following variables: -# -# ``RUBY_EXECUTABLE`` -# full path to the ruby binary -# ``RUBY_INCLUDE_DIRS`` -# include dirs to be used when using the ruby library -# ``RUBY_LIBRARY`` -# full path to the ruby library -# ``RUBY_VERSION`` -# the version of ruby which was found, e.g. "1.8.7" -# ``RUBY_FOUND`` -# set to true if ruby ws found successfully -# -# Also: -# -# ``RUBY_INCLUDE_PATH`` -# same as RUBY_INCLUDE_DIRS, only provided for compatibility reasons, don't use it +#[=======================================================================[.rst: +FindRuby +-------- + +Find Ruby + +This module finds if Ruby is installed and determines where the +include files and libraries are. Ruby 1.8, 1.9, 2.0 and 2.1 are +supported. + +The minimum required version of Ruby can be specified using the +standard syntax, e.g. find_package(Ruby 1.8) + +It also determines what the name of the library is. This code sets +the following variables: + +``RUBY_EXECUTABLE`` + full path to the ruby binary +``RUBY_INCLUDE_DIRS`` + include dirs to be used when using the ruby library +``RUBY_LIBRARY`` + full path to the ruby library +``RUBY_VERSION`` + the version of ruby which was found, e.g. "1.8.7" +``RUBY_FOUND`` + set to true if ruby ws found successfully + +Also: + +``RUBY_INCLUDE_PATH`` + same as RUBY_INCLUDE_DIRS, only provided for compatibility reasons, don't use it +#]=======================================================================] # RUBY_ARCHDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"archdir"@:>@)'` # RUBY_SITEARCHDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"sitearchdir"@:>@)'` diff --git a/Modules/FindSDL.cmake b/Modules/FindSDL.cmake index 3410018..2813831 100644 --- a/Modules/FindSDL.cmake +++ b/Modules/FindSDL.cmake @@ -1,75 +1,76 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindSDL -# ------- -# -# Locate SDL library -# -# This module defines -# -# :: -# -# SDL_LIBRARY, the name of the library to link against -# SDL_FOUND, if false, do not try to link to SDL -# SDL_INCLUDE_DIR, where to find SDL.h -# SDL_VERSION_STRING, human-readable string containing the version of SDL -# -# -# -# This module responds to the flag: -# -# :: -# -# SDL_BUILDING_LIBRARY -# If this is defined, then no SDL_main will be linked in because -# only applications need main(). -# Otherwise, it is assumed you are building an application and this -# module will attempt to locate and set the proper link flags -# as part of the returned SDL_LIBRARY variable. -# -# -# -# Don't forget to include SDLmain.h and SDLmain.m your project for the -# OS X framework based version. (Other versions link to -lSDLmain which -# this module will try to find on your behalf.) Also for OS X, this -# module will automatically add the -framework Cocoa on your behalf. -# -# -# -# Additional Note: If you see an empty SDL_LIBRARY_TEMP in your -# configuration and no SDL_LIBRARY, it means CMake did not find your SDL -# library (SDL.dll, libsdl.so, SDL.framework, etc). Set -# SDL_LIBRARY_TEMP to point to your SDL library, and configure again. -# Similarly, if you see an empty SDLMAIN_LIBRARY, you should set this -# value as appropriate. These values are used to generate the final -# SDL_LIBRARY variable, but when these values are unset, SDL_LIBRARY -# does not get created. -# -# -# -# $SDLDIR is an environment variable that would correspond to the -# ./configure --prefix=$SDLDIR used in building SDL. l.e.galup 9-20-02 -# -# Modified by Eric Wing. Added code to assist with automated building -# by using environmental variables and providing a more -# controlled/consistent search behavior. Added new modifications to -# recognize OS X frameworks and additional Unix paths (FreeBSD, etc). -# Also corrected the header search path to follow "proper" SDL -# guidelines. Added a search for SDLmain which is needed by some -# platforms. Added a search for threads which is needed by some -# platforms. Added needed compile switches for MinGW. -# -# On OSX, this will prefer the Framework version (if found) over others. -# People will have to manually change the cache values of SDL_LIBRARY to -# override this selection or set the CMake environment -# CMAKE_INCLUDE_PATH to modify the search paths. -# -# Note that the header path has changed from SDL/SDL.h to just SDL.h -# This needed to change because "proper" SDL convention is #include -# "SDL.h", not <SDL/SDL.h>. This is done for portability reasons -# because not all systems place things in SDL/ (see FreeBSD). +#[=======================================================================[.rst: +FindSDL +------- + +Locate SDL library + +This module defines + +:: + + SDL_LIBRARY, the name of the library to link against + SDL_FOUND, if false, do not try to link to SDL + SDL_INCLUDE_DIR, where to find SDL.h + SDL_VERSION_STRING, human-readable string containing the version of SDL + + + +This module responds to the flag: + +:: + + SDL_BUILDING_LIBRARY + If this is defined, then no SDL_main will be linked in because + only applications need main(). + Otherwise, it is assumed you are building an application and this + module will attempt to locate and set the proper link flags + as part of the returned SDL_LIBRARY variable. + + + +Don't forget to include SDLmain.h and SDLmain.m your project for the +OS X framework based version. (Other versions link to -lSDLmain which +this module will try to find on your behalf.) Also for OS X, this +module will automatically add the -framework Cocoa on your behalf. + + + +Additional Note: If you see an empty SDL_LIBRARY_TEMP in your +configuration and no SDL_LIBRARY, it means CMake did not find your SDL +library (SDL.dll, libsdl.so, SDL.framework, etc). Set +SDL_LIBRARY_TEMP to point to your SDL library, and configure again. +Similarly, if you see an empty SDLMAIN_LIBRARY, you should set this +value as appropriate. These values are used to generate the final +SDL_LIBRARY variable, but when these values are unset, SDL_LIBRARY +does not get created. + + + +$SDLDIR is an environment variable that would correspond to the +./configure --prefix=$SDLDIR used in building SDL. l.e.galup 9-20-02 + +Modified by Eric Wing. Added code to assist with automated building +by using environmental variables and providing a more +controlled/consistent search behavior. Added new modifications to +recognize OS X frameworks and additional Unix paths (FreeBSD, etc). +Also corrected the header search path to follow "proper" SDL +guidelines. Added a search for SDLmain which is needed by some +platforms. Added a search for threads which is needed by some +platforms. Added needed compile switches for MinGW. + +On OSX, this will prefer the Framework version (if found) over others. +People will have to manually change the cache values of SDL_LIBRARY to +override this selection or set the CMake environment +CMAKE_INCLUDE_PATH to modify the search paths. + +Note that the header path has changed from SDL/SDL.h to just SDL.h +This needed to change because "proper" SDL convention is #include +"SDL.h", not <SDL/SDL.h>. This is done for portability reasons +because not all systems place things in SDL/ (see FreeBSD). +#]=======================================================================] find_path(SDL_INCLUDE_DIR SDL.h HINTS diff --git a/Modules/FindSDL_image.cmake b/Modules/FindSDL_image.cmake index 8cdaa7a..e687b49 100644 --- a/Modules/FindSDL_image.cmake +++ b/Modules/FindSDL_image.cmake @@ -1,40 +1,41 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindSDL_image -# ------------- -# -# Locate SDL_image library -# -# This module defines: -# -# :: -# -# SDL_IMAGE_LIBRARIES, the name of the library to link against -# SDL_IMAGE_INCLUDE_DIRS, where to find the headers -# SDL_IMAGE_FOUND, if false, do not try to link against -# SDL_IMAGE_VERSION_STRING - human-readable string containing the -# version of SDL_image -# -# -# -# For backward compatibility the following variables are also set: -# -# :: -# -# SDLIMAGE_LIBRARY (same value as SDL_IMAGE_LIBRARIES) -# SDLIMAGE_INCLUDE_DIR (same value as SDL_IMAGE_INCLUDE_DIRS) -# SDLIMAGE_FOUND (same value as SDL_IMAGE_FOUND) -# -# -# -# $SDLDIR is an environment variable that would correspond to the -# ./configure --prefix=$SDLDIR used in building SDL. -# -# Created by Eric Wing. This was influenced by the FindSDL.cmake -# module, but with modifications to recognize OS X frameworks and -# additional Unix paths (FreeBSD, etc). +#[=======================================================================[.rst: +FindSDL_image +------------- + +Locate SDL_image library + +This module defines: + +:: + + SDL_IMAGE_LIBRARIES, the name of the library to link against + SDL_IMAGE_INCLUDE_DIRS, where to find the headers + SDL_IMAGE_FOUND, if false, do not try to link against + SDL_IMAGE_VERSION_STRING - human-readable string containing the + version of SDL_image + + + +For backward compatibility the following variables are also set: + +:: + + SDLIMAGE_LIBRARY (same value as SDL_IMAGE_LIBRARIES) + SDLIMAGE_INCLUDE_DIR (same value as SDL_IMAGE_INCLUDE_DIRS) + SDLIMAGE_FOUND (same value as SDL_IMAGE_FOUND) + + + +$SDLDIR is an environment variable that would correspond to the +./configure --prefix=$SDLDIR used in building SDL. + +Created by Eric Wing. This was influenced by the FindSDL.cmake +module, but with modifications to recognize OS X frameworks and +additional Unix paths (FreeBSD, etc). +#]=======================================================================] if(NOT SDL_IMAGE_INCLUDE_DIR AND SDLIMAGE_INCLUDE_DIR) set(SDL_IMAGE_INCLUDE_DIR ${SDLIMAGE_INCLUDE_DIR} CACHE PATH "directory cache diff --git a/Modules/FindSDL_mixer.cmake b/Modules/FindSDL_mixer.cmake index 35233d1..315400a 100644 --- a/Modules/FindSDL_mixer.cmake +++ b/Modules/FindSDL_mixer.cmake @@ -1,40 +1,41 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindSDL_mixer -# ------------- -# -# Locate SDL_mixer library -# -# This module defines: -# -# :: -# -# SDL_MIXER_LIBRARIES, the name of the library to link against -# SDL_MIXER_INCLUDE_DIRS, where to find the headers -# SDL_MIXER_FOUND, if false, do not try to link against -# SDL_MIXER_VERSION_STRING - human-readable string containing the -# version of SDL_mixer -# -# -# -# For backward compatibility the following variables are also set: -# -# :: -# -# SDLMIXER_LIBRARY (same value as SDL_MIXER_LIBRARIES) -# SDLMIXER_INCLUDE_DIR (same value as SDL_MIXER_INCLUDE_DIRS) -# SDLMIXER_FOUND (same value as SDL_MIXER_FOUND) -# -# -# -# $SDLDIR is an environment variable that would correspond to the -# ./configure --prefix=$SDLDIR used in building SDL. -# -# Created by Eric Wing. This was influenced by the FindSDL.cmake -# module, but with modifications to recognize OS X frameworks and -# additional Unix paths (FreeBSD, etc). +#[=======================================================================[.rst: +FindSDL_mixer +------------- + +Locate SDL_mixer library + +This module defines: + +:: + + SDL_MIXER_LIBRARIES, the name of the library to link against + SDL_MIXER_INCLUDE_DIRS, where to find the headers + SDL_MIXER_FOUND, if false, do not try to link against + SDL_MIXER_VERSION_STRING - human-readable string containing the + version of SDL_mixer + + + +For backward compatibility the following variables are also set: + +:: + + SDLMIXER_LIBRARY (same value as SDL_MIXER_LIBRARIES) + SDLMIXER_INCLUDE_DIR (same value as SDL_MIXER_INCLUDE_DIRS) + SDLMIXER_FOUND (same value as SDL_MIXER_FOUND) + + + +$SDLDIR is an environment variable that would correspond to the +./configure --prefix=$SDLDIR used in building SDL. + +Created by Eric Wing. This was influenced by the FindSDL.cmake +module, but with modifications to recognize OS X frameworks and +additional Unix paths (FreeBSD, etc). +#]=======================================================================] if(NOT SDL_MIXER_INCLUDE_DIR AND SDLMIXER_INCLUDE_DIR) set(SDL_MIXER_INCLUDE_DIR ${SDLMIXER_INCLUDE_DIR} CACHE PATH "directory cache diff --git a/Modules/FindSDL_net.cmake b/Modules/FindSDL_net.cmake index b406946..28cb4d6 100644 --- a/Modules/FindSDL_net.cmake +++ b/Modules/FindSDL_net.cmake @@ -1,39 +1,40 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindSDL_net -# ----------- -# -# Locate SDL_net library -# -# This module defines: -# -# :: -# -# SDL_NET_LIBRARIES, the name of the library to link against -# SDL_NET_INCLUDE_DIRS, where to find the headers -# SDL_NET_FOUND, if false, do not try to link against -# SDL_NET_VERSION_STRING - human-readable string containing the version of SDL_net -# -# -# -# For backward compatibility the following variables are also set: -# -# :: -# -# SDLNET_LIBRARY (same value as SDL_NET_LIBRARIES) -# SDLNET_INCLUDE_DIR (same value as SDL_NET_INCLUDE_DIRS) -# SDLNET_FOUND (same value as SDL_NET_FOUND) -# -# -# -# $SDLDIR is an environment variable that would correspond to the -# ./configure --prefix=$SDLDIR used in building SDL. -# -# Created by Eric Wing. This was influenced by the FindSDL.cmake -# module, but with modifications to recognize OS X frameworks and -# additional Unix paths (FreeBSD, etc). +#[=======================================================================[.rst: +FindSDL_net +----------- + +Locate SDL_net library + +This module defines: + +:: + + SDL_NET_LIBRARIES, the name of the library to link against + SDL_NET_INCLUDE_DIRS, where to find the headers + SDL_NET_FOUND, if false, do not try to link against + SDL_NET_VERSION_STRING - human-readable string containing the version of SDL_net + + + +For backward compatibility the following variables are also set: + +:: + + SDLNET_LIBRARY (same value as SDL_NET_LIBRARIES) + SDLNET_INCLUDE_DIR (same value as SDL_NET_INCLUDE_DIRS) + SDLNET_FOUND (same value as SDL_NET_FOUND) + + + +$SDLDIR is an environment variable that would correspond to the +./configure --prefix=$SDLDIR used in building SDL. + +Created by Eric Wing. This was influenced by the FindSDL.cmake +module, but with modifications to recognize OS X frameworks and +additional Unix paths (FreeBSD, etc). +#]=======================================================================] if(NOT SDL_NET_INCLUDE_DIR AND SDLNET_INCLUDE_DIR) set(SDL_NET_INCLUDE_DIR ${SDLNET_INCLUDE_DIR} CACHE PATH "directory cache diff --git a/Modules/FindSDL_sound.cmake b/Modules/FindSDL_sound.cmake index cf33a4c..e217981 100644 --- a/Modules/FindSDL_sound.cmake +++ b/Modules/FindSDL_sound.cmake @@ -1,84 +1,85 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindSDL_sound -# ------------- -# -# Locates the SDL_sound library -# -# -# -# This module depends on SDL being found and must be called AFTER -# FindSDL.cmake is called. -# -# This module defines -# -# :: -# -# SDL_SOUND_INCLUDE_DIR, where to find SDL_sound.h -# SDL_SOUND_FOUND, if false, do not try to link to SDL_sound -# SDL_SOUND_LIBRARIES, this contains the list of libraries that you need -# to link against. -# SDL_SOUND_EXTRAS, this is an optional variable for you to add your own -# flags to SDL_SOUND_LIBRARIES. This is prepended to SDL_SOUND_LIBRARIES. -# This is available mostly for cases this module failed to anticipate for -# and you must add additional flags. This is marked as ADVANCED. -# SDL_SOUND_VERSION_STRING, human-readable string containing the -# version of SDL_sound -# -# -# -# This module also defines (but you shouldn't need to use directly) -# -# :: -# -# SDL_SOUND_LIBRARY, the name of just the SDL_sound library you would link -# against. Use SDL_SOUND_LIBRARIES for you link instructions and not this one. -# -# And might define the following as needed -# -# :: -# -# MIKMOD_LIBRARY -# MODPLUG_LIBRARY -# OGG_LIBRARY -# VORBIS_LIBRARY -# SMPEG_LIBRARY -# FLAC_LIBRARY -# SPEEX_LIBRARY -# -# -# -# Typically, you should not use these variables directly, and you should -# use SDL_SOUND_LIBRARIES which contains SDL_SOUND_LIBRARY and the other -# audio libraries (if needed) to successfully compile on your system. -# -# Created by Eric Wing. This module is a bit more complicated than the -# other FindSDL* family modules. The reason is that SDL_sound can be -# compiled in a large variety of different ways which are independent of -# platform. SDL_sound may dynamically link against other 3rd party -# libraries to get additional codec support, such as Ogg Vorbis, SMPEG, -# ModPlug, MikMod, FLAC, Speex, and potentially others. Under some -# circumstances which I don't fully understand, there seems to be a -# requirement that dependent libraries of libraries you use must also be -# explicitly linked against in order to successfully compile. SDL_sound -# does not currently have any system in place to know how it was -# compiled. So this CMake module does the hard work in trying to -# discover which 3rd party libraries are required for building (if any). -# This module uses a brute force approach to create a test program that -# uses SDL_sound, and then tries to build it. If the build fails, it -# parses the error output for known symbol names to figure out which -# libraries are needed. -# -# Responds to the $SDLDIR and $SDLSOUNDDIR environmental variable that -# would correspond to the ./configure --prefix=$SDLDIR used in building -# SDL. -# -# On OSX, this will prefer the Framework version (if found) over others. -# People will have to manually change the cache values of SDL_LIBRARY to -# override this selectionor set the CMake environment CMAKE_INCLUDE_PATH -# to modify the search paths. +#[=======================================================================[.rst: +FindSDL_sound +------------- + +Locates the SDL_sound library + + + +This module depends on SDL being found and must be called AFTER +FindSDL.cmake is called. + +This module defines + +:: + + SDL_SOUND_INCLUDE_DIR, where to find SDL_sound.h + SDL_SOUND_FOUND, if false, do not try to link to SDL_sound + SDL_SOUND_LIBRARIES, this contains the list of libraries that you need + to link against. + SDL_SOUND_EXTRAS, this is an optional variable for you to add your own + flags to SDL_SOUND_LIBRARIES. This is prepended to SDL_SOUND_LIBRARIES. + This is available mostly for cases this module failed to anticipate for + and you must add additional flags. This is marked as ADVANCED. + SDL_SOUND_VERSION_STRING, human-readable string containing the + version of SDL_sound + + + +This module also defines (but you shouldn't need to use directly) + +:: + + SDL_SOUND_LIBRARY, the name of just the SDL_sound library you would link + against. Use SDL_SOUND_LIBRARIES for you link instructions and not this one. + +And might define the following as needed + +:: + + MIKMOD_LIBRARY + MODPLUG_LIBRARY + OGG_LIBRARY + VORBIS_LIBRARY + SMPEG_LIBRARY + FLAC_LIBRARY + SPEEX_LIBRARY + + + +Typically, you should not use these variables directly, and you should +use SDL_SOUND_LIBRARIES which contains SDL_SOUND_LIBRARY and the other +audio libraries (if needed) to successfully compile on your system. + +Created by Eric Wing. This module is a bit more complicated than the +other FindSDL* family modules. The reason is that SDL_sound can be +compiled in a large variety of different ways which are independent of +platform. SDL_sound may dynamically link against other 3rd party +libraries to get additional codec support, such as Ogg Vorbis, SMPEG, +ModPlug, MikMod, FLAC, Speex, and potentially others. Under some +circumstances which I don't fully understand, there seems to be a +requirement that dependent libraries of libraries you use must also be +explicitly linked against in order to successfully compile. SDL_sound +does not currently have any system in place to know how it was +compiled. So this CMake module does the hard work in trying to +discover which 3rd party libraries are required for building (if any). +This module uses a brute force approach to create a test program that +uses SDL_sound, and then tries to build it. If the build fails, it +parses the error output for known symbol names to figure out which +libraries are needed. + +Responds to the $SDLDIR and $SDLSOUNDDIR environmental variable that +would correspond to the ./configure --prefix=$SDLDIR used in building +SDL. + +On OSX, this will prefer the Framework version (if found) over others. +People will have to manually change the cache values of SDL_LIBRARY to +override this selectionor set the CMake environment CMAKE_INCLUDE_PATH +to modify the search paths. +#]=======================================================================] set(SDL_SOUND_EXTRAS "" CACHE STRING "SDL_sound extra flags") mark_as_advanced(SDL_SOUND_EXTRAS) diff --git a/Modules/FindSDL_ttf.cmake b/Modules/FindSDL_ttf.cmake index aa705f2..d5721da 100644 --- a/Modules/FindSDL_ttf.cmake +++ b/Modules/FindSDL_ttf.cmake @@ -1,39 +1,40 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindSDL_ttf -# ----------- -# -# Locate SDL_ttf library -# -# This module defines: -# -# :: -# -# SDL_TTF_LIBRARIES, the name of the library to link against -# SDL_TTF_INCLUDE_DIRS, where to find the headers -# SDL_TTF_FOUND, if false, do not try to link against -# SDL_TTF_VERSION_STRING - human-readable string containing the version of SDL_ttf -# -# -# -# For backward compatibility the following variables are also set: -# -# :: -# -# SDLTTF_LIBRARY (same value as SDL_TTF_LIBRARIES) -# SDLTTF_INCLUDE_DIR (same value as SDL_TTF_INCLUDE_DIRS) -# SDLTTF_FOUND (same value as SDL_TTF_FOUND) -# -# -# -# $SDLDIR is an environment variable that would correspond to the -# ./configure --prefix=$SDLDIR used in building SDL. -# -# Created by Eric Wing. This was influenced by the FindSDL.cmake -# module, but with modifications to recognize OS X frameworks and -# additional Unix paths (FreeBSD, etc). +#[=======================================================================[.rst: +FindSDL_ttf +----------- + +Locate SDL_ttf library + +This module defines: + +:: + + SDL_TTF_LIBRARIES, the name of the library to link against + SDL_TTF_INCLUDE_DIRS, where to find the headers + SDL_TTF_FOUND, if false, do not try to link against + SDL_TTF_VERSION_STRING - human-readable string containing the version of SDL_ttf + + + +For backward compatibility the following variables are also set: + +:: + + SDLTTF_LIBRARY (same value as SDL_TTF_LIBRARIES) + SDLTTF_INCLUDE_DIR (same value as SDL_TTF_INCLUDE_DIRS) + SDLTTF_FOUND (same value as SDL_TTF_FOUND) + + + +$SDLDIR is an environment variable that would correspond to the +./configure --prefix=$SDLDIR used in building SDL. + +Created by Eric Wing. This was influenced by the FindSDL.cmake +module, but with modifications to recognize OS X frameworks and +additional Unix paths (FreeBSD, etc). +#]=======================================================================] if(NOT SDL_TTF_INCLUDE_DIR AND SDLTTF_INCLUDE_DIR) set(SDL_TTF_INCLUDE_DIR ${SDLTTF_INCLUDE_DIR} CACHE PATH "directory cache diff --git a/Modules/FindSWIG.cmake b/Modules/FindSWIG.cmake index 92c032f..fc0ed00 100644 --- a/Modules/FindSWIG.cmake +++ b/Modules/FindSWIG.cmake @@ -1,29 +1,30 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindSWIG -# -------- -# -# Find SWIG -# -# This module finds an installed SWIG. It sets the following variables: -# -# :: -# -# SWIG_FOUND - set to true if SWIG is found -# SWIG_DIR - the directory where swig is installed -# SWIG_EXECUTABLE - the path to the swig executable -# SWIG_VERSION - the version number of the swig executable -# -# -# -# The minimum required version of SWIG can be specified using the -# standard syntax, e.g. find_package(SWIG 1.1) -# -# All information is collected from the SWIG_EXECUTABLE so the version -# to be found can be changed from the command line by means of setting -# SWIG_EXECUTABLE +#[=======================================================================[.rst: +FindSWIG +-------- + +Find SWIG + +This module finds an installed SWIG. It sets the following variables: + +:: + + SWIG_FOUND - set to true if SWIG is found + SWIG_DIR - the directory where swig is installed + SWIG_EXECUTABLE - the path to the swig executable + SWIG_VERSION - the version number of the swig executable + + + +The minimum required version of SWIG can be specified using the +standard syntax, e.g. find_package(SWIG 1.1) + +All information is collected from the SWIG_EXECUTABLE so the version +to be found can be changed from the command line by means of setting +SWIG_EXECUTABLE +#]=======================================================================] find_program(SWIG_EXECUTABLE NAMES swig3.0 swig2.0 swig) diff --git a/Modules/FindSelfPackers.cmake b/Modules/FindSelfPackers.cmake index ac2c7cf..1abbcbd 100644 --- a/Modules/FindSelfPackers.cmake +++ b/Modules/FindSelfPackers.cmake @@ -1,19 +1,20 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindSelfPackers -# --------------- -# -# Find upx -# -# This module looks for some executable packers (i.e. software that -# compress executables or shared libs into on-the-fly self-extracting -# executables or shared libs. Examples: -# -# :: -# -# UPX: http://wildsau.idv.uni-linz.ac.at/mfx/upx.html +#[=======================================================================[.rst: +FindSelfPackers +--------------- + +Find upx + +This module looks for some executable packers (i.e. software that +compress executables or shared libs into on-the-fly self-extracting +executables or shared libs. Examples: + +:: + + UPX: http://wildsau.idv.uni-linz.ac.at/mfx/upx.html +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake) diff --git a/Modules/FindSquish.cmake b/Modules/FindSquish.cmake index d1ce200..7d49505 100644 --- a/Modules/FindSquish.cmake +++ b/Modules/FindSquish.cmake @@ -1,123 +1,124 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindSquish -# ---------- -# -# -- Typical Use -# -# -# -# This module can be used to find Squish. Currently Squish versions 3 -# and 4 are supported. -# -# :: -# -# SQUISH_FOUND If false, don't try to use Squish -# SQUISH_VERSION The full version of Squish found -# SQUISH_VERSION_MAJOR The major version of Squish found -# SQUISH_VERSION_MINOR The minor version of Squish found -# SQUISH_VERSION_PATCH The patch version of Squish found -# -# -# -# :: -# -# SQUISH_INSTALL_DIR The Squish installation directory -# (containing bin, lib, etc) -# SQUISH_SERVER_EXECUTABLE The squishserver executable -# SQUISH_CLIENT_EXECUTABLE The squishrunner executable -# -# -# -# :: -# -# SQUISH_INSTALL_DIR_FOUND Was the install directory found? -# SQUISH_SERVER_EXECUTABLE_FOUND Was the server executable found? -# SQUISH_CLIENT_EXECUTABLE_FOUND Was the client executable found? -# -# -# -# It provides the function squish_v4_add_test() for adding a squish test -# to cmake using Squish 4.x: -# -# :: -# -# squish_v4_add_test(cmakeTestName -# AUT targetName SUITE suiteName TEST squishTestName -# [SETTINGSGROUP group] [PRE_COMMAND command] [POST_COMMAND command] ) -# -# -# -# The arguments have the following meaning: -# -# ``cmakeTestName`` -# this will be used as the first argument for add_test() -# ``AUT targetName`` -# the name of the cmake target which will be used as AUT, i.e. the -# executable which will be tested. -# ``SUITE suiteName`` -# this is either the full path to the squish suite, or just the -# last directory of the suite, i.e. the suite name. In this case -# the CMakeLists.txt which calls squish_add_test() must be located -# in the parent directory of the suite directory. -# ``TEST squishTestName`` -# the name of the squish test, i.e. the name of the subdirectory -# of the test inside the suite directory. -# ``SETTINGSGROUP group`` -# if specified, the given settings group will be used for executing the test. -# If not specified, the groupname will be "CTest_<username>" -# ``PRE_COMMAND command`` -# if specified, the given command will be executed before starting the squish test. -# ``POST_COMMAND command`` -# same as PRE_COMMAND, but after the squish test has been executed. -# -# -# -# :: -# -# enable_testing() -# find_package(Squish 4.0) -# if (SQUISH_FOUND) -# squish_v4_add_test(myTestName -# AUT myApp -# SUITE ${CMAKE_SOURCE_DIR}/tests/mySuite -# TEST someSquishTest -# SETTINGSGROUP myGroup -# ) -# endif () -# -# -# -# -# -# For users of Squish version 3.x the macro squish_v3_add_test() is -# provided: -# -# :: -# -# squish_v3_add_test(testName applicationUnderTest testCase envVars testWrapper) -# Use this macro to add a test using Squish 3.x. -# -# -# -# :: -# -# enable_testing() -# find_package(Squish) -# if (SQUISH_FOUND) -# squish_v3_add_test(myTestName myApplication testCase envVars testWrapper) -# endif () -# -# -# -# macro SQUISH_ADD_TEST(testName applicationUnderTest testCase envVars -# testWrapper) -# -# :: -# -# This is deprecated. Use SQUISH_V3_ADD_TEST() if you are using Squish 3.x instead. +#[=======================================================================[.rst: +FindSquish +---------- + +-- Typical Use + + + +This module can be used to find Squish. Currently Squish versions 3 +and 4 are supported. + +:: + + SQUISH_FOUND If false, don't try to use Squish + SQUISH_VERSION The full version of Squish found + SQUISH_VERSION_MAJOR The major version of Squish found + SQUISH_VERSION_MINOR The minor version of Squish found + SQUISH_VERSION_PATCH The patch version of Squish found + + + +:: + + SQUISH_INSTALL_DIR The Squish installation directory + (containing bin, lib, etc) + SQUISH_SERVER_EXECUTABLE The squishserver executable + SQUISH_CLIENT_EXECUTABLE The squishrunner executable + + + +:: + + SQUISH_INSTALL_DIR_FOUND Was the install directory found? + SQUISH_SERVER_EXECUTABLE_FOUND Was the server executable found? + SQUISH_CLIENT_EXECUTABLE_FOUND Was the client executable found? + + + +It provides the function squish_v4_add_test() for adding a squish test +to cmake using Squish 4.x: + +:: + + squish_v4_add_test(cmakeTestName + AUT targetName SUITE suiteName TEST squishTestName + [SETTINGSGROUP group] [PRE_COMMAND command] [POST_COMMAND command] ) + + + +The arguments have the following meaning: + +``cmakeTestName`` + this will be used as the first argument for add_test() +``AUT targetName`` + the name of the cmake target which will be used as AUT, i.e. the + executable which will be tested. +``SUITE suiteName`` + this is either the full path to the squish suite, or just the + last directory of the suite, i.e. the suite name. In this case + the CMakeLists.txt which calls squish_add_test() must be located + in the parent directory of the suite directory. +``TEST squishTestName`` + the name of the squish test, i.e. the name of the subdirectory + of the test inside the suite directory. +``SETTINGSGROUP group`` + if specified, the given settings group will be used for executing the test. + If not specified, the groupname will be "CTest_<username>" +``PRE_COMMAND command`` + if specified, the given command will be executed before starting the squish test. +``POST_COMMAND command`` + same as PRE_COMMAND, but after the squish test has been executed. + + + +:: + + enable_testing() + find_package(Squish 4.0) + if (SQUISH_FOUND) + squish_v4_add_test(myTestName + AUT myApp + SUITE ${CMAKE_SOURCE_DIR}/tests/mySuite + TEST someSquishTest + SETTINGSGROUP myGroup + ) + endif () + + + + + +For users of Squish version 3.x the macro squish_v3_add_test() is +provided: + +:: + + squish_v3_add_test(testName applicationUnderTest testCase envVars testWrapper) + Use this macro to add a test using Squish 3.x. + + + +:: + + enable_testing() + find_package(Squish) + if (SQUISH_FOUND) + squish_v3_add_test(myTestName myApplication testCase envVars testWrapper) + endif () + + + +macro SQUISH_ADD_TEST(testName applicationUnderTest testCase envVars +testWrapper) + +:: + + This is deprecated. Use SQUISH_V3_ADD_TEST() if you are using Squish 3.x instead. +#]=======================================================================] set(SQUISH_INSTALL_DIR_STRING "Directory containing the bin, doc, and lib directories for Squish; this should be the root of the installation directory.") set(SQUISH_SERVER_EXECUTABLE_STRING "The squishserver executable program.") diff --git a/Modules/FindSubversion.cmake b/Modules/FindSubversion.cmake index 537d3b2..ce280e2 100644 --- a/Modules/FindSubversion.cmake +++ b/Modules/FindSubversion.cmake @@ -1,65 +1,69 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindSubversion -# -------------- -# -# Extract information from a subversion working copy -# -# The module defines the following variables: -# -# :: -# -# Subversion_SVN_EXECUTABLE - path to svn command line client -# Subversion_VERSION_SVN - version of svn command line client -# Subversion_FOUND - true if the command line client was found -# SUBVERSION_FOUND - same as Subversion_FOUND, set for compatibility reasons -# -# -# -# The minimum required version of Subversion can be specified using the -# standard syntax, e.g. find_package(Subversion 1.4) -# -# If the command line client executable is found two macros are defined: -# -# :: -# -# Subversion_WC_INFO(<dir> <var-prefix>) -# Subversion_WC_LOG(<dir> <var-prefix>) -# -# Subversion_WC_INFO extracts information of a subversion working copy -# at a given location. This macro defines the following variables: -# -# :: -# -# <var-prefix>_WC_URL - url of the repository (at <dir>) -# <var-prefix>_WC_ROOT - root url of the repository -# <var-prefix>_WC_REVISION - current revision -# <var-prefix>_WC_LAST_CHANGED_AUTHOR - author of last commit -# <var-prefix>_WC_LAST_CHANGED_DATE - date of last commit -# <var-prefix>_WC_LAST_CHANGED_REV - revision of last commit -# <var-prefix>_WC_INFO - output of command `svn info <dir>' -# -# Subversion_WC_LOG retrieves the log message of the base revision of a -# subversion working copy at a given location. This macro defines the -# variable: -# -# :: -# -# <var-prefix>_LAST_CHANGED_LOG - last log of base revision -# -# Example usage: -# -# :: -# -# find_package(Subversion) -# if(SUBVERSION_FOUND) -# Subversion_WC_INFO(${PROJECT_SOURCE_DIR} Project) -# message("Current revision is ${Project_WC_REVISION}") -# Subversion_WC_LOG(${PROJECT_SOURCE_DIR} Project) -# message("Last changed log is ${Project_LAST_CHANGED_LOG}") -# endif() +#[=======================================================================[.rst: +FindSubversion +-------------- + +Extract information from a subversion working copy + +The module defines the following variables: + +:: + + Subversion_SVN_EXECUTABLE - path to svn command line client + Subversion_VERSION_SVN - version of svn command line client + Subversion_FOUND - true if the command line client was found + SUBVERSION_FOUND - same as Subversion_FOUND, set for compatibility reasons + + + +The minimum required version of Subversion can be specified using the +standard syntax, e.g. ``find_package(Subversion 1.4)``. + +If the command line client executable is found two macros are defined: + +:: + + Subversion_WC_INFO(<dir> <var-prefix> [IGNORE_SVN_FAILURE]) + Subversion_WC_LOG(<dir> <var-prefix>) + +``Subversion_WC_INFO`` extracts information of a subversion working copy at a +given location. This macro defines the following variables if running +Subversion's ``info`` command on ``<dir>`` succeeds; otherwise a +``SEND_ERROR`` message is generated. The error can be ignored by providing the +``IGNORE_SVN_FAILURE`` option, which causes these variables to remain +undefined. + +:: + + <var-prefix>_WC_URL - url of the repository (at <dir>) + <var-prefix>_WC_ROOT - root url of the repository + <var-prefix>_WC_REVISION - current revision + <var-prefix>_WC_LAST_CHANGED_AUTHOR - author of last commit + <var-prefix>_WC_LAST_CHANGED_DATE - date of last commit + <var-prefix>_WC_LAST_CHANGED_REV - revision of last commit + <var-prefix>_WC_INFO - output of command `svn info <dir>' + +``Subversion_WC_LOG`` retrieves the log message of the base revision of a +subversion working copy at a given location. This macro defines the variable: + +:: + + <var-prefix>_LAST_CHANGED_LOG - last log of base revision + +Example usage: + +:: + + find_package(Subversion) + if(SUBVERSION_FOUND) + Subversion_WC_INFO(${PROJECT_SOURCE_DIR} Project) + message("Current revision is ${Project_WC_REVISION}") + Subversion_WC_LOG(${PROJECT_SOURCE_DIR} Project) + message("Last changed log is ${Project_LAST_CHANGED_LOG}") + endif() +#]=======================================================================] find_program(Subversion_SVN_EXECUTABLE svn PATHS @@ -84,6 +88,14 @@ if(Subversion_SVN_EXECUTABLE) "\\2" Subversion_VERSION_SVN "${Subversion_VERSION_SVN}") macro(Subversion_WC_INFO dir prefix) + + cmake_parse_arguments( + "Subversion_WC_INFO" + "IGNORE_SVN_FAILURE" + "" "" + ${ARGN} + ) + # the subversion commands should be executed with the C locale, otherwise # the message (which are parsed) may be translated, Alex set(_Subversion_SAVED_LC_ALL "$ENV{LC_ALL}") @@ -95,10 +107,7 @@ if(Subversion_SVN_EXECUTABLE) RESULT_VARIABLE Subversion_svn_info_result OUTPUT_STRIP_TRAILING_WHITESPACE) - if(NOT ${Subversion_svn_info_result} EQUAL 0) - message(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}") - else() - + if(${Subversion_svn_info_result} EQUAL 0) string(REGEX REPLACE "^(.*\n)?URL: ([^\n]+).*" "\\2" ${prefix}_WC_URL "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Repository Root: ([^\n]+).*" @@ -111,7 +120,8 @@ if(Subversion_SVN_EXECUTABLE) "\\2" ${prefix}_WC_LAST_CHANGED_REV "${${prefix}_WC_INFO}") string(REGEX REPLACE "^(.*\n)?Last Changed Date: ([^\n]+).*" "\\2" ${prefix}_WC_LAST_CHANGED_DATE "${${prefix}_WC_INFO}") - + elseif(NOT Subversion_WC_INFO_IGNORE_SVN_FAILURE) + message(SEND_ERROR "Command \"${Subversion_SVN_EXECUTABLE} info ${dir}\" failed with output:\n${Subversion_svn_info_error}") endif() # restore the previous LC_ALL diff --git a/Modules/FindTCL.cmake b/Modules/FindTCL.cmake index ad16e0d..be47c39 100644 --- a/Modules/FindTCL.cmake +++ b/Modules/FindTCL.cmake @@ -1,48 +1,49 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindTCL -# ------- -# -# TK_INTERNAL_PATH was removed. -# -# This module finds if Tcl is installed and determines where the include -# files and libraries are. It also determines what the name of the -# library is. This code sets the following variables: -# -# :: -# -# TCL_FOUND = Tcl was found -# TK_FOUND = Tk was found -# TCLTK_FOUND = Tcl and Tk were found -# TCL_LIBRARY = path to Tcl library (tcl tcl80) -# TCL_INCLUDE_PATH = path to where tcl.h can be found -# TCL_TCLSH = path to tclsh binary (tcl tcl80) -# TK_LIBRARY = path to Tk library (tk tk80 etc) -# TK_INCLUDE_PATH = path to where tk.h can be found -# TK_WISH = full path to the wish executable -# -# -# -# In an effort to remove some clutter and clear up some issues for -# people who are not necessarily Tcl/Tk gurus/developers, some -# variables were moved or removed. Changes compared to CMake 2.4 are: -# -# :: -# -# => they were only useful for people writing Tcl/Tk extensions. -# => these libs are not packaged by default with Tcl/Tk distributions. -# Even when Tcl/Tk is built from source, several flavors of debug libs -# are created and there is no real reason to pick a single one -# specifically (say, amongst tcl84g, tcl84gs, or tcl84sgx). -# Let's leave that choice to the user by allowing him to assign -# TCL_LIBRARY to any Tcl library, debug or not. -# => this ended up being only a Win32 variable, and there is a lot of -# confusion regarding the location of this file in an installed Tcl/Tk -# tree anyway (see 8.5 for example). If you need the internal path at -# this point it is safer you ask directly where the *source* tree is -# and dig from there. +#[=======================================================================[.rst: +FindTCL +------- + +TK_INTERNAL_PATH was removed. + +This module finds if Tcl is installed and determines where the include +files and libraries are. It also determines what the name of the +library is. This code sets the following variables: + +:: + + TCL_FOUND = Tcl was found + TK_FOUND = Tk was found + TCLTK_FOUND = Tcl and Tk were found + TCL_LIBRARY = path to Tcl library (tcl tcl80) + TCL_INCLUDE_PATH = path to where tcl.h can be found + TCL_TCLSH = path to tclsh binary (tcl tcl80) + TK_LIBRARY = path to Tk library (tk tk80 etc) + TK_INCLUDE_PATH = path to where tk.h can be found + TK_WISH = full path to the wish executable + + + +In an effort to remove some clutter and clear up some issues for +people who are not necessarily Tcl/Tk gurus/developers, some +variables were moved or removed. Changes compared to CMake 2.4 are: + +:: + + => they were only useful for people writing Tcl/Tk extensions. + => these libs are not packaged by default with Tcl/Tk distributions. + Even when Tcl/Tk is built from source, several flavors of debug libs + are created and there is no real reason to pick a single one + specifically (say, amongst tcl84g, tcl84gs, or tcl84sgx). + Let's leave that choice to the user by allowing him to assign + TCL_LIBRARY to any Tcl library, debug or not. + => this ended up being only a Win32 variable, and there is a lot of + confusion regarding the location of this file in an installed Tcl/Tk + tree anyway (see 8.5 for example). If you need the internal path at + this point it is safer you ask directly where the *source* tree is + and dig from there. +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/CMakeFindFrameworks.cmake) include(${CMAKE_CURRENT_LIST_DIR}/FindTclsh.cmake) diff --git a/Modules/FindTIFF.cmake b/Modules/FindTIFF.cmake index b622ca6..63ca936 100644 --- a/Modules/FindTIFF.cmake +++ b/Modules/FindTIFF.cmake @@ -1,43 +1,44 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindTIFF -# -------- -# -# Find the TIFF library (libtiff). -# -# Imported targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following :prop_tgt:`IMPORTED` targets: -# -# ``TIFF::TIFF`` -# The TIFF library, if found. -# -# Result variables -# ^^^^^^^^^^^^^^^^ -# -# This module will set the following variables in your project: -# -# ``TIFF_FOUND`` -# true if the TIFF headers and libraries were found -# ``TIFF_INCLUDE_DIR`` -# the directory containing the TIFF headers -# ``TIFF_INCLUDE_DIRS`` -# the directory containing the TIFF headers -# ``TIFF_LIBRARIES`` -# TIFF libraries to be linked -# -# Cache variables -# ^^^^^^^^^^^^^^^ -# -# The following cache variables may also be set: -# -# ``TIFF_INCLUDE_DIR`` -# the directory containing the TIFF headers -# ``TIFF_LIBRARY`` -# the path to the TIFF library +#[=======================================================================[.rst: +FindTIFF +-------- + +Find the TIFF library (libtiff). + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``TIFF::TIFF`` + The TIFF library, if found. + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``TIFF_FOUND`` + true if the TIFF headers and libraries were found +``TIFF_INCLUDE_DIR`` + the directory containing the TIFF headers +``TIFF_INCLUDE_DIRS`` + the directory containing the TIFF headers +``TIFF_LIBRARIES`` + TIFF libraries to be linked + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``TIFF_INCLUDE_DIR`` + the directory containing the TIFF headers +``TIFF_LIBRARY`` + the path to the TIFF library +#]=======================================================================] find_path(TIFF_INCLUDE_DIR tiff.h) diff --git a/Modules/FindTclStub.cmake b/Modules/FindTclStub.cmake index db0a7a1..8f63480 100644 --- a/Modules/FindTclStub.cmake +++ b/Modules/FindTclStub.cmake @@ -1,48 +1,49 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindTclStub -# ----------- -# -# TCL_STUB_LIBRARY_DEBUG and TK_STUB_LIBRARY_DEBUG were removed. -# -# This module finds Tcl stub libraries. It first finds Tcl include -# files and libraries by calling FindTCL.cmake. How to Use the Tcl -# Stubs Library: -# -# :: -# -# http://tcl.activestate.com/doc/howto/stubs.html -# -# Using Stub Libraries: -# -# :: -# -# http://safari.oreilly.com/0130385603/ch48lev1sec3 -# -# This code sets the following variables: -# -# :: -# -# TCL_STUB_LIBRARY = path to Tcl stub library -# TK_STUB_LIBRARY = path to Tk stub library -# TTK_STUB_LIBRARY = path to ttk stub library -# -# -# -# In an effort to remove some clutter and clear up some issues for -# people who are not necessarily Tcl/Tk gurus/developers, some -# variables were moved or removed. Changes compared to CMake 2.4 are: -# -# :: -# -# => these libs are not packaged by default with Tcl/Tk distributions. -# Even when Tcl/Tk is built from source, several flavors of debug libs -# are created and there is no real reason to pick a single one -# specifically (say, amongst tclstub84g, tclstub84gs, or tclstub84sgx). -# Let's leave that choice to the user by allowing him to assign -# TCL_STUB_LIBRARY to any Tcl library, debug or not. +#[=======================================================================[.rst: +FindTclStub +----------- + +TCL_STUB_LIBRARY_DEBUG and TK_STUB_LIBRARY_DEBUG were removed. + +This module finds Tcl stub libraries. It first finds Tcl include +files and libraries by calling FindTCL.cmake. How to Use the Tcl +Stubs Library: + +:: + + http://tcl.activestate.com/doc/howto/stubs.html + +Using Stub Libraries: + +:: + + http://safari.oreilly.com/0130385603/ch48lev1sec3 + +This code sets the following variables: + +:: + + TCL_STUB_LIBRARY = path to Tcl stub library + TK_STUB_LIBRARY = path to Tk stub library + TTK_STUB_LIBRARY = path to ttk stub library + + + +In an effort to remove some clutter and clear up some issues for +people who are not necessarily Tcl/Tk gurus/developers, some +variables were moved or removed. Changes compared to CMake 2.4 are: + +:: + + => these libs are not packaged by default with Tcl/Tk distributions. + Even when Tcl/Tk is built from source, several flavors of debug libs + are created and there is no real reason to pick a single one + specifically (say, amongst tclstub84g, tclstub84gs, or tclstub84sgx). + Let's leave that choice to the user by allowing him to assign + TCL_STUB_LIBRARY to any Tcl library, debug or not. +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/FindTCL.cmake) diff --git a/Modules/FindTclsh.cmake b/Modules/FindTclsh.cmake index 9bf935d..e3bd110 100644 --- a/Modules/FindTclsh.cmake +++ b/Modules/FindTclsh.cmake @@ -1,23 +1,24 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindTclsh -# --------- -# -# Find tclsh -# -# This module finds if TCL is installed and determines where the include -# files and libraries are. It also determines what the name of the -# library is. This code sets the following variables: -# -# :: -# -# TCLSH_FOUND = TRUE if tclsh has been found -# TCL_TCLSH = the path to the tclsh executable -# -# In cygwin, look for the cygwin version first. Don't look for it later -# to avoid finding the cygwin version on a Win32 build. +#[=======================================================================[.rst: +FindTclsh +--------- + +Find tclsh + +This module finds if TCL is installed and determines where the include +files and libraries are. It also determines what the name of the +library is. This code sets the following variables: + +:: + + TCLSH_FOUND = TRUE if tclsh has been found + TCL_TCLSH = the path to the tclsh executable + +In cygwin, look for the cygwin version first. Don't look for it later +to avoid finding the cygwin version on a Win32 build. +#]=======================================================================] if(CYGWIN) find_program(TCL_TCLSH NAMES cygtclsh83 cygtclsh80) diff --git a/Modules/FindThreads.cmake b/Modules/FindThreads.cmake index a0148dd..dfb683f 100644 --- a/Modules/FindThreads.cmake +++ b/Modules/FindThreads.cmake @@ -1,44 +1,45 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindThreads -# ----------- -# -# This module determines the thread library of the system. -# -# The following variables are set -# -# :: -# -# CMAKE_THREAD_LIBS_INIT - the thread library -# CMAKE_USE_SPROC_INIT - are we using sproc? -# CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads? -# CMAKE_USE_PTHREADS_INIT - are we using pthreads -# CMAKE_HP_PTHREADS_INIT - are we using hp pthreads -# -# The following import target is created -# -# :: -# -# Threads::Threads -# -# For systems with multiple thread libraries, caller can set -# -# :: -# -# CMAKE_THREAD_PREFER_PTHREAD -# -# If the use of the -pthread compiler and linker flag is preferred then the -# caller can set -# -# :: -# -# THREADS_PREFER_PTHREAD_FLAG -# -# Please note that the compiler flag can only be used with the imported -# target. Use of both the imported target as well as this switch is highly -# recommended for new code. +#[=======================================================================[.rst: +FindThreads +----------- + +This module determines the thread library of the system. + +The following variables are set + +:: + + CMAKE_THREAD_LIBS_INIT - the thread library + CMAKE_USE_SPROC_INIT - are we using sproc? + CMAKE_USE_WIN32_THREADS_INIT - using WIN32 threads? + CMAKE_USE_PTHREADS_INIT - are we using pthreads + CMAKE_HP_PTHREADS_INIT - are we using hp pthreads + +The following import target is created + +:: + + Threads::Threads + +For systems with multiple thread libraries, caller can set + +:: + + CMAKE_THREAD_PREFER_PTHREAD + +If the use of the -pthread compiler and linker flag is preferred then the +caller can set + +:: + + THREADS_PREFER_PTHREAD_FLAG + +Please note that the compiler flag can only be used with the imported +target. Use of both the imported target as well as this switch is highly +recommended for new code. +#]=======================================================================] include (CheckLibraryExists) include (CheckSymbolExists) @@ -208,7 +209,9 @@ if(THREADS_FOUND AND NOT TARGET Threads::Threads) add_library(Threads::Threads INTERFACE IMPORTED) if(THREADS_HAVE_PTHREAD_ARG) - set_property(TARGET Threads::Threads PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread") + set_property(TARGET Threads::Threads + PROPERTY INTERFACE_COMPILE_OPTIONS "$<$<COMPILE_LANGUAGE:CUDA>:SHELL:-Xcompiler -pthread>" + "$<$<NOT:$<COMPILE_LANGUAGE:CUDA>>:-pthread>") endif() if(CMAKE_THREAD_LIBS_INIT) diff --git a/Modules/FindUnixCommands.cmake b/Modules/FindUnixCommands.cmake index 45047a9..3a735f7 100644 --- a/Modules/FindUnixCommands.cmake +++ b/Modules/FindUnixCommands.cmake @@ -1,14 +1,15 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindUnixCommands -# ---------------- -# -# Find Unix commands, including the ones from Cygwin -# -# This module looks for the Unix commands bash, cp, gzip, mv, rm, and tar -# and stores the result in the variables BASH, CP, GZIP, MV, RM, and TAR. +#[=======================================================================[.rst: +FindUnixCommands +---------------- + +Find Unix commands, including the ones from Cygwin + +This module looks for the Unix commands bash, cp, gzip, mv, rm, and tar +and stores the result in the variables BASH, CP, GZIP, MV, RM, and TAR. +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake) diff --git a/Modules/FindVulkan.cmake b/Modules/FindVulkan.cmake index 4c60ed7..b1201b4 100644 --- a/Modules/FindVulkan.cmake +++ b/Modules/FindVulkan.cmake @@ -1,32 +1,33 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindVulkan -# ---------- -# -# Try to find Vulkan -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines :prop_tgt:`IMPORTED` target ``Vulkan::Vulkan``, if -# Vulkan has been found. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following variables:: -# -# Vulkan_FOUND - True if Vulkan was found -# Vulkan_INCLUDE_DIRS - include directories for Vulkan -# Vulkan_LIBRARIES - link against this library to use Vulkan -# -# The module will also define two cache variables:: -# -# Vulkan_INCLUDE_DIR - the Vulkan include directory -# Vulkan_LIBRARY - the path to the Vulkan library -# +#[=======================================================================[.rst: +FindVulkan +---------- + +Try to find Vulkan + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``Vulkan::Vulkan``, if +Vulkan has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables:: + + Vulkan_FOUND - True if Vulkan was found + Vulkan_INCLUDE_DIRS - include directories for Vulkan + Vulkan_LIBRARIES - link against this library to use Vulkan + +The module will also define two cache variables:: + + Vulkan_INCLUDE_DIR - the Vulkan include directory + Vulkan_LIBRARY - the path to the Vulkan library + +#]=======================================================================] if(WIN32) find_path(Vulkan_INCLUDE_DIR diff --git a/Modules/FindWget.cmake b/Modules/FindWget.cmake index 4fcb2fa..bd01ec2 100644 --- a/Modules/FindWget.cmake +++ b/Modules/FindWget.cmake @@ -1,18 +1,19 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindWget -# -------- -# -# Find wget -# -# This module looks for wget. This module defines the following values: -# -# :: -# -# WGET_EXECUTABLE: the full path to the wget tool. -# WGET_FOUND: True if wget has been found. +#[=======================================================================[.rst: +FindWget +-------- + +Find wget + +This module looks for wget. This module defines the following values: + +:: + + WGET_EXECUTABLE: the full path to the wget tool. + WGET_FOUND: True if wget has been found. +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/FindCygwin.cmake) diff --git a/Modules/FindWish.cmake b/Modules/FindWish.cmake index b64b041..b332bde 100644 --- a/Modules/FindWish.cmake +++ b/Modules/FindWish.cmake @@ -1,23 +1,24 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindWish -# -------- -# -# Find wish installation -# -# This module finds if TCL is installed and determines where the include -# files and libraries are. It also determines what the name of the -# library is. This code sets the following variables: -# -# :: -# -# TK_WISH = the path to the wish executable -# -# -# -# if UNIX is defined, then it will look for the cygwin version first +#[=======================================================================[.rst: +FindWish +-------- + +Find wish installation + +This module finds if TCL is installed and determines where the include +files and libraries are. It also determines what the name of the +library is. This code sets the following variables: + +:: + + TK_WISH = the path to the wish executable + + + +if UNIX is defined, then it will look for the cygwin version first +#]=======================================================================] if(UNIX) find_program(TK_WISH cygwish80 ) diff --git a/Modules/FindX11.cmake b/Modules/FindX11.cmake index f7dfc82..232804a 100644 --- a/Modules/FindX11.cmake +++ b/Modules/FindX11.cmake @@ -1,58 +1,59 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindX11 -# ------- -# -# Find X11 installation -# -# Try to find X11 on UNIX systems. The following values are defined -# -# :: -# -# X11_FOUND - True if X11 is available -# X11_INCLUDE_DIR - include directories to use X11 -# X11_LIBRARIES - link against these to use X11 -# -# and also the following more fine grained variables: -# -# :: -# -# X11_ICE_INCLUDE_PATH, X11_ICE_LIB, X11_ICE_FOUND -# X11_SM_INCLUDE_PATH, X11_SM_LIB, X11_SM_FOUND -# X11_X11_INCLUDE_PATH, X11_X11_LIB -# X11_Xaccessrules_INCLUDE_PATH, X11_Xaccess_FOUND -# X11_Xaccessstr_INCLUDE_PATH, X11_Xaccess_FOUND -# X11_Xau_INCLUDE_PATH, X11_Xau_LIB, X11_Xau_FOUND -# X11_Xcomposite_INCLUDE_PATH, X11_Xcomposite_LIB, X11_Xcomposite_FOUND -# X11_Xcursor_INCLUDE_PATH, X11_Xcursor_LIB, X11_Xcursor_FOUND -# X11_Xdamage_INCLUDE_PATH, X11_Xdamage_LIB, X11_Xdamage_FOUND -# X11_Xdmcp_INCLUDE_PATH, X11_Xdmcp_LIB, X11_Xdmcp_FOUND -# X11_Xext_LIB, X11_Xext_FOUND -# X11_dpms_INCLUDE_PATH, (in X11_Xext_LIB), X11_dpms_FOUND -# X11_XShm_INCLUDE_PATH, (in X11_Xext_LIB), X11_XShm_FOUND -# X11_Xshape_INCLUDE_PATH, (in X11_Xext_LIB), X11_Xshape_FOUND -# X11_xf86misc_INCLUDE_PATH, X11_Xxf86misc_LIB, X11_xf86misc_FOUND -# X11_xf86vmode_INCLUDE_PATH, X11_Xxf86vm_LIB X11_xf86vmode_FOUND -# X11_Xfixes_INCLUDE_PATH, X11_Xfixes_LIB, X11_Xfixes_FOUND -# X11_Xft_INCLUDE_PATH, X11_Xft_LIB, X11_Xft_FOUND -# X11_Xi_INCLUDE_PATH, X11_Xi_LIB, X11_Xi_FOUND -# X11_Xinerama_INCLUDE_PATH, X11_Xinerama_LIB, X11_Xinerama_FOUND -# X11_Xinput_INCLUDE_PATH, X11_Xinput_LIB, X11_Xinput_FOUND -# X11_Xkb_INCLUDE_PATH, X11_Xkb_FOUND -# X11_Xkblib_INCLUDE_PATH, X11_Xkb_FOUND -# X11_Xkbfile_INCLUDE_PATH, X11_Xkbfile_LIB, X11_Xkbfile_FOUND -# X11_Xmu_INCLUDE_PATH, X11_Xmu_LIB, X11_Xmu_FOUND -# X11_Xpm_INCLUDE_PATH, X11_Xpm_LIB, X11_Xpm_FOUND -# X11_XTest_INCLUDE_PATH, X11_XTest_LIB, X11_XTest_FOUND -# X11_Xrandr_INCLUDE_PATH, X11_Xrandr_LIB, X11_Xrandr_FOUND -# X11_Xrender_INCLUDE_PATH, X11_Xrender_LIB, X11_Xrender_FOUND -# X11_Xscreensaver_INCLUDE_PATH, X11_Xscreensaver_LIB, X11_Xscreensaver_FOUND -# X11_Xt_INCLUDE_PATH, X11_Xt_LIB, X11_Xt_FOUND -# X11_Xutil_INCLUDE_PATH, X11_Xutil_FOUND -# X11_Xv_INCLUDE_PATH, X11_Xv_LIB, X11_Xv_FOUND -# X11_XSync_INCLUDE_PATH, (in X11_Xext_LIB), X11_XSync_FOUND +#[=======================================================================[.rst: +FindX11 +------- + +Find X11 installation + +Try to find X11 on UNIX systems. The following values are defined + +:: + + X11_FOUND - True if X11 is available + X11_INCLUDE_DIR - include directories to use X11 + X11_LIBRARIES - link against these to use X11 + +and also the following more fine grained variables: + +:: + + X11_ICE_INCLUDE_PATH, X11_ICE_LIB, X11_ICE_FOUND + X11_SM_INCLUDE_PATH, X11_SM_LIB, X11_SM_FOUND + X11_X11_INCLUDE_PATH, X11_X11_LIB + X11_Xaccessrules_INCLUDE_PATH, X11_Xaccess_FOUND + X11_Xaccessstr_INCLUDE_PATH, X11_Xaccess_FOUND + X11_Xau_INCLUDE_PATH, X11_Xau_LIB, X11_Xau_FOUND + X11_Xcomposite_INCLUDE_PATH, X11_Xcomposite_LIB, X11_Xcomposite_FOUND + X11_Xcursor_INCLUDE_PATH, X11_Xcursor_LIB, X11_Xcursor_FOUND + X11_Xdamage_INCLUDE_PATH, X11_Xdamage_LIB, X11_Xdamage_FOUND + X11_Xdmcp_INCLUDE_PATH, X11_Xdmcp_LIB, X11_Xdmcp_FOUND + X11_Xext_LIB, X11_Xext_FOUND + X11_dpms_INCLUDE_PATH, (in X11_Xext_LIB), X11_dpms_FOUND + X11_XShm_INCLUDE_PATH, (in X11_Xext_LIB), X11_XShm_FOUND + X11_Xshape_INCLUDE_PATH, (in X11_Xext_LIB), X11_Xshape_FOUND + X11_xf86misc_INCLUDE_PATH, X11_Xxf86misc_LIB, X11_xf86misc_FOUND + X11_xf86vmode_INCLUDE_PATH, X11_Xxf86vm_LIB X11_xf86vmode_FOUND + X11_Xfixes_INCLUDE_PATH, X11_Xfixes_LIB, X11_Xfixes_FOUND + X11_Xft_INCLUDE_PATH, X11_Xft_LIB, X11_Xft_FOUND + X11_Xi_INCLUDE_PATH, X11_Xi_LIB, X11_Xi_FOUND + X11_Xinerama_INCLUDE_PATH, X11_Xinerama_LIB, X11_Xinerama_FOUND + X11_Xinput_INCLUDE_PATH, X11_Xinput_LIB, X11_Xinput_FOUND + X11_Xkb_INCLUDE_PATH, X11_Xkb_FOUND + X11_Xkblib_INCLUDE_PATH, X11_Xkb_FOUND + X11_Xkbfile_INCLUDE_PATH, X11_Xkbfile_LIB, X11_Xkbfile_FOUND + X11_Xmu_INCLUDE_PATH, X11_Xmu_LIB, X11_Xmu_FOUND + X11_Xpm_INCLUDE_PATH, X11_Xpm_LIB, X11_Xpm_FOUND + X11_XTest_INCLUDE_PATH, X11_XTest_LIB, X11_XTest_FOUND + X11_Xrandr_INCLUDE_PATH, X11_Xrandr_LIB, X11_Xrandr_FOUND + X11_Xrender_INCLUDE_PATH, X11_Xrender_LIB, X11_Xrender_FOUND + X11_Xscreensaver_INCLUDE_PATH, X11_Xscreensaver_LIB, X11_Xscreensaver_FOUND + X11_Xt_INCLUDE_PATH, X11_Xt_LIB, X11_Xt_FOUND + X11_Xutil_INCLUDE_PATH, X11_Xutil_FOUND + X11_Xv_INCLUDE_PATH, X11_Xv_LIB, X11_Xv_FOUND + X11_XSync_INCLUDE_PATH, (in X11_Xext_LIB), X11_XSync_FOUND +#]=======================================================================] if (UNIX) set(X11_FOUND 0) diff --git a/Modules/FindXMLRPC.cmake b/Modules/FindXMLRPC.cmake index e7ae919..69e6df2 100644 --- a/Modules/FindXMLRPC.cmake +++ b/Modules/FindXMLRPC.cmake @@ -1,35 +1,36 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindXMLRPC -# ---------- -# -# Find xmlrpc -# -# Find the native XMLRPC headers and libraries. -# -# :: -# -# XMLRPC_INCLUDE_DIRS - where to find xmlrpc.h, etc. -# XMLRPC_LIBRARIES - List of libraries when using xmlrpc. -# XMLRPC_FOUND - True if xmlrpc found. -# -# XMLRPC modules may be specified as components for this find module. -# Modules may be listed by running "xmlrpc-c-config". Modules include: -# -# :: -# -# c++ C++ wrapper code -# libwww-client libwww-based client -# cgi-server CGI-based server -# abyss-server ABYSS-based server -# -# Typical usage: -# -# :: -# -# find_package(XMLRPC REQUIRED libwww-client) +#[=======================================================================[.rst: +FindXMLRPC +---------- + +Find xmlrpc + +Find the native XMLRPC headers and libraries. + +:: + + XMLRPC_INCLUDE_DIRS - where to find xmlrpc.h, etc. + XMLRPC_LIBRARIES - List of libraries when using xmlrpc. + XMLRPC_FOUND - True if xmlrpc found. + +XMLRPC modules may be specified as components for this find module. +Modules may be listed by running "xmlrpc-c-config". Modules include: + +:: + + c++ C++ wrapper code + libwww-client libwww-based client + cgi-server CGI-based server + abyss-server ABYSS-based server + +Typical usage: + +:: + + find_package(XMLRPC REQUIRED libwww-client) +#]=======================================================================] # First find the config script from which to obtain other values. find_program(XMLRPC_C_CONFIG NAMES xmlrpc-c-config) diff --git a/Modules/FindXalanC.cmake b/Modules/FindXalanC.cmake index 1951b49..0eba3d9 100644 --- a/Modules/FindXalanC.cmake +++ b/Modules/FindXalanC.cmake @@ -1,45 +1,46 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindXalanC -# ----------- -# -# Find the Apache Xalan-C++ XSL transform processor headers and libraries. -# -# Imported targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following :prop_tgt:`IMPORTED` targets: -# -# ``XalanC::XalanC`` -# The Xalan-C++ ``xalan-c`` library, if found. -# -# Result variables -# ^^^^^^^^^^^^^^^^ -# -# This module will set the following variables in your project: -# -# ``XalanC_FOUND`` -# true if the Xalan headers and libraries were found -# ``XalanC_VERSION`` -# Xalan release version -# ``XalanC_INCLUDE_DIRS`` -# the directory containing the Xalan headers; note -# ``XercesC_INCLUDE_DIRS`` is also required -# ``XalanC_LIBRARIES`` -# Xalan libraries to be linked; note ``XercesC_LIBRARIES`` is also -# required -# -# Cache variables -# ^^^^^^^^^^^^^^^ -# -# The following cache variables may also be set: -# -# ``XalanC_INCLUDE_DIR`` -# the directory containing the Xalan headers -# ``XalanC_LIBRARY`` -# the Xalan library +#[=======================================================================[.rst: +FindXalanC +----------- + +Find the Apache Xalan-C++ XSL transform processor headers and libraries. + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``XalanC::XalanC`` + The Xalan-C++ ``xalan-c`` library, if found. + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``XalanC_FOUND`` + true if the Xalan headers and libraries were found +``XalanC_VERSION`` + Xalan release version +``XalanC_INCLUDE_DIRS`` + the directory containing the Xalan headers; note + ``XercesC_INCLUDE_DIRS`` is also required +``XalanC_LIBRARIES`` + Xalan libraries to be linked; note ``XercesC_LIBRARIES`` is also + required + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``XalanC_INCLUDE_DIR`` + the directory containing the Xalan headers +``XalanC_LIBRARY`` + the Xalan library +#]=======================================================================] # Written by Roger Leigh <rleigh@codelibre.net> diff --git a/Modules/FindXercesC.cmake b/Modules/FindXercesC.cmake index 51e68d5..085fafc 100644 --- a/Modules/FindXercesC.cmake +++ b/Modules/FindXercesC.cmake @@ -1,43 +1,44 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindXercesC -# ----------- -# -# Find the Apache Xerces-C++ validating XML parser headers and libraries. -# -# Imported targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following :prop_tgt:`IMPORTED` targets: -# -# ``XercesC::XercesC`` -# The Xerces-C++ ``xerces-c`` library, if found. -# -# Result variables -# ^^^^^^^^^^^^^^^^ -# -# This module will set the following variables in your project: -# -# ``XercesC_FOUND`` -# true if the Xerces headers and libraries were found -# ``XercesC_VERSION`` -# Xerces release version -# ``XercesC_INCLUDE_DIRS`` -# the directory containing the Xerces headers -# ``XercesC_LIBRARIES`` -# Xerces libraries to be linked -# -# Cache variables -# ^^^^^^^^^^^^^^^ -# -# The following cache variables may also be set: -# -# ``XercesC_INCLUDE_DIR`` -# the directory containing the Xerces headers -# ``XercesC_LIBRARY`` -# the Xerces library +#[=======================================================================[.rst: +FindXercesC +----------- + +Find the Apache Xerces-C++ validating XML parser headers and libraries. + +Imported targets +^^^^^^^^^^^^^^^^ + +This module defines the following :prop_tgt:`IMPORTED` targets: + +``XercesC::XercesC`` + The Xerces-C++ ``xerces-c`` library, if found. + +Result variables +^^^^^^^^^^^^^^^^ + +This module will set the following variables in your project: + +``XercesC_FOUND`` + true if the Xerces headers and libraries were found +``XercesC_VERSION`` + Xerces release version +``XercesC_INCLUDE_DIRS`` + the directory containing the Xerces headers +``XercesC_LIBRARIES`` + Xerces libraries to be linked + +Cache variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``XercesC_INCLUDE_DIR`` + the directory containing the Xerces headers +``XercesC_LIBRARY`` + the Xerces library +#]=======================================================================] # Written by Roger Leigh <rleigh@codelibre.net> @@ -59,6 +60,9 @@ function(_XercesC_GET_VERSION version_hdr) endif() set(XercesC_VERSION "${XercesC_MAJOR}.${XercesC_MINOR}.${XercesC_PATCH}" PARENT_SCOPE) + set(XercesC_VERSION_MAJOR "${XercesC_MAJOR}" PARENT_SCOPE) + set(XercesC_VERSION_MINOR "${XercesC_MINOR}" PARENT_SCOPE) + set(XercesC_VERSION_PATCH "${XercesC_PATCH}" PARENT_SCOPE) else() message(FATAL_ERROR "Include file ${version_hdr} does not exist or does not contain expected version information") endif() @@ -70,22 +74,26 @@ find_path(XercesC_INCLUDE_DIR DOC "Xerces-C++ include directory") mark_as_advanced(XercesC_INCLUDE_DIR) +if(XercesC_INCLUDE_DIR) + _XercesC_GET_VERSION("${XercesC_INCLUDE_DIR}/xercesc/util/XercesVersion.hpp") +endif() + if(NOT XercesC_LIBRARY) # Find all XercesC libraries find_library(XercesC_LIBRARY_RELEASE - NAMES "xerces-c" "xerces-c_3" + NAMES "xerces-c" "xerces-c_${XercesC_VERSION_MAJOR}" DOC "Xerces-C++ libraries (release)") find_library(XercesC_LIBRARY_DEBUG - NAMES "xerces-cd" "xerces-c_3D" "xerces-c_3_1D" + NAMES "xerces-cd" "xerces-c_${XercesC_VERSION_MAJOR}D" "xerces-c_${XercesC_VERSION_MAJOR}_${XercesC_VERSION_MINOR}D" DOC "Xerces-C++ libraries (debug)") include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) select_library_configurations(XercesC) mark_as_advanced(XercesC_LIBRARY_RELEASE XercesC_LIBRARY_DEBUG) endif() -if(XercesC_INCLUDE_DIR) - _XercesC_GET_VERSION("${XercesC_INCLUDE_DIR}/xercesc/util/XercesVersion.hpp") -endif() +unset(XercesC_VERSION_MAJOR) +unset(XercesC_VERSION_MINOR) +unset(XercesC_VERSION_PATCH) include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) FIND_PACKAGE_HANDLE_STANDARD_ARGS(XercesC diff --git a/Modules/FindZLIB.cmake b/Modules/FindZLIB.cmake index a5c04ac..790eb42 100644 --- a/Modules/FindZLIB.cmake +++ b/Modules/FindZLIB.cmake @@ -1,53 +1,54 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindZLIB -# -------- -# -# Find the native ZLIB includes and library. -# -# IMPORTED Targets -# ^^^^^^^^^^^^^^^^ -# -# This module defines :prop_tgt:`IMPORTED` target ``ZLIB::ZLIB``, if -# ZLIB has been found. -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# This module defines the following variables: -# -# :: -# -# ZLIB_INCLUDE_DIRS - where to find zlib.h, etc. -# ZLIB_LIBRARIES - List of libraries when using zlib. -# ZLIB_FOUND - True if zlib found. -# -# :: -# -# ZLIB_VERSION_STRING - The version of zlib found (x.y.z) -# ZLIB_VERSION_MAJOR - The major version of zlib -# ZLIB_VERSION_MINOR - The minor version of zlib -# ZLIB_VERSION_PATCH - The patch version of zlib -# ZLIB_VERSION_TWEAK - The tweak version of zlib -# -# Backward Compatibility -# ^^^^^^^^^^^^^^^^^^^^^^ -# -# The following variable are provided for backward compatibility -# -# :: -# -# ZLIB_MAJOR_VERSION - The major version of zlib -# ZLIB_MINOR_VERSION - The minor version of zlib -# ZLIB_PATCH_VERSION - The patch version of zlib -# -# Hints -# ^^^^^ -# -# A user may set ``ZLIB_ROOT`` to a zlib installation root to tell this -# module where to look. +#[=======================================================================[.rst: +FindZLIB +-------- + +Find the native ZLIB includes and library. + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``ZLIB::ZLIB``, if +ZLIB has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +:: + + ZLIB_INCLUDE_DIRS - where to find zlib.h, etc. + ZLIB_LIBRARIES - List of libraries when using zlib. + ZLIB_FOUND - True if zlib found. + +:: + + ZLIB_VERSION_STRING - The version of zlib found (x.y.z) + ZLIB_VERSION_MAJOR - The major version of zlib + ZLIB_VERSION_MINOR - The minor version of zlib + ZLIB_VERSION_PATCH - The patch version of zlib + ZLIB_VERSION_TWEAK - The tweak version of zlib + +Backward Compatibility +^^^^^^^^^^^^^^^^^^^^^^ + +The following variable are provided for backward compatibility + +:: + + ZLIB_MAJOR_VERSION - The major version of zlib + ZLIB_MINOR_VERSION - The minor version of zlib + ZLIB_PATCH_VERSION - The patch version of zlib + +Hints +^^^^^ + +A user may set ``ZLIB_ROOT`` to a zlib installation root to tell this +module where to look. +#]=======================================================================] set(_ZLIB_SEARCHES) @@ -58,10 +59,12 @@ if(ZLIB_ROOT) endif() # Normal search. +set(_ZLIB_x86 "(x86)") set(_ZLIB_SEARCH_NORMAL - PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]" - "$ENV{PROGRAMFILES}/zlib" - ) + PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]" + "$ENV{ProgramFiles}/zlib" + "$ENV{ProgramFiles${_ZLIB_x86}}/zlib") +unset(_ZLIB_x86) list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_NORMAL) set(ZLIB_NAMES z zlib zdll zlib1) diff --git a/Modules/Findosg.cmake b/Modules/Findosg.cmake index 474ea82..bb28454 100644 --- a/Modules/Findosg.cmake +++ b/Modules/Findosg.cmake @@ -1,42 +1,43 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# Findosg -# ------- -# -# -# -# -# -# NOTE: It is highly recommended that you use the new -# FindOpenSceneGraph.cmake introduced in CMake 2.6.3 and not use this -# Find module directly. -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osg This module defines -# -# OSG_FOUND - Was the Osg found? OSG_INCLUDE_DIR - Where to find the -# headers OSG_LIBRARIES - The libraries to link against for the OSG (use -# this) -# -# OSG_LIBRARY - The OSG library OSG_LIBRARY_DEBUG - The OSG debug -# library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +Findosg +------- + + + + + +NOTE: It is highly recommended that you use the new +FindOpenSceneGraph.cmake introduced in CMake 2.6.3 and not use this +Find module directly. + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osg This module defines + +OSG_FOUND - Was the Osg found? OSG_INCLUDE_DIR - Where to find the +headers OSG_LIBRARIES - The libraries to link against for the OSG (use +this) + +OSG_LIBRARY - The OSG library OSG_LIBRARY_DEBUG - The OSG debug +library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgAnimation.cmake b/Modules/FindosgAnimation.cmake index 5b26b64..65e3016 100644 --- a/Modules/FindosgAnimation.cmake +++ b/Modules/FindosgAnimation.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgAnimation -# ---------------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgAnimation This module defines -# -# OSGANIMATION_FOUND - Was osgAnimation found? OSGANIMATION_INCLUDE_DIR -# - Where to find the headers OSGANIMATION_LIBRARIES - The libraries to -# link against for the OSG (use this) -# -# OSGANIMATION_LIBRARY - The OSG library OSGANIMATION_LIBRARY_DEBUG - -# The OSG debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgAnimation +---------------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgAnimation This module defines + +OSGANIMATION_FOUND - Was osgAnimation found? OSGANIMATION_INCLUDE_DIR +- Where to find the headers OSGANIMATION_LIBRARIES - The libraries to +link against for the OSG (use this) + +OSGANIMATION_LIBRARY - The OSG library OSGANIMATION_LIBRARY_DEBUG - +The OSG debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgDB.cmake b/Modules/FindosgDB.cmake index 6ddf53c..d0789ba 100644 --- a/Modules/FindosgDB.cmake +++ b/Modules/FindosgDB.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgDB -# --------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgDB This module defines -# -# OSGDB_FOUND - Was osgDB found? OSGDB_INCLUDE_DIR - Where to find the -# headers OSGDB_LIBRARIES - The libraries to link against for the osgDB -# (use this) -# -# OSGDB_LIBRARY - The osgDB library OSGDB_LIBRARY_DEBUG - The osgDB -# debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgDB +--------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgDB This module defines + +OSGDB_FOUND - Was osgDB found? OSGDB_INCLUDE_DIR - Where to find the +headers OSGDB_LIBRARIES - The libraries to link against for the osgDB +(use this) + +OSGDB_LIBRARY - The osgDB library OSGDB_LIBRARY_DEBUG - The osgDB +debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgFX.cmake b/Modules/FindosgFX.cmake index e4bc276..438fab7 100644 --- a/Modules/FindosgFX.cmake +++ b/Modules/FindosgFX.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgFX -# --------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgFX This module defines -# -# OSGFX_FOUND - Was osgFX found? OSGFX_INCLUDE_DIR - Where to find the -# headers OSGFX_LIBRARIES - The libraries to link against for the osgFX -# (use this) -# -# OSGFX_LIBRARY - The osgFX library OSGFX_LIBRARY_DEBUG - The osgFX -# debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgFX +--------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgFX This module defines + +OSGFX_FOUND - Was osgFX found? OSGFX_INCLUDE_DIR - Where to find the +headers OSGFX_LIBRARIES - The libraries to link against for the osgFX +(use this) + +OSGFX_LIBRARY - The osgFX library OSGFX_LIBRARY_DEBUG - The osgFX +debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgGA.cmake b/Modules/FindosgGA.cmake index 97adeb7..7b6ef30 100644 --- a/Modules/FindosgGA.cmake +++ b/Modules/FindosgGA.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgGA -# --------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgGA This module defines -# -# OSGGA_FOUND - Was osgGA found? OSGGA_INCLUDE_DIR - Where to find the -# headers OSGGA_LIBRARIES - The libraries to link against for the osgGA -# (use this) -# -# OSGGA_LIBRARY - The osgGA library OSGGA_LIBRARY_DEBUG - The osgGA -# debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgGA +--------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgGA This module defines + +OSGGA_FOUND - Was osgGA found? OSGGA_INCLUDE_DIR - Where to find the +headers OSGGA_LIBRARIES - The libraries to link against for the osgGA +(use this) + +OSGGA_LIBRARY - The osgGA library OSGGA_LIBRARY_DEBUG - The osgGA +debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgIntrospection.cmake b/Modules/FindosgIntrospection.cmake index e735942..625e4c2 100644 --- a/Modules/FindosgIntrospection.cmake +++ b/Modules/FindosgIntrospection.cmake @@ -1,37 +1,38 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgIntrospection -# -------------------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgINTROSPECTION This module defines -# -# OSGINTROSPECTION_FOUND - Was osgIntrospection found? -# OSGINTROSPECTION_INCLUDE_DIR - Where to find the headers -# OSGINTROSPECTION_LIBRARIES - The libraries to link for -# osgIntrospection (use this) -# -# OSGINTROSPECTION_LIBRARY - The osgIntrospection library -# OSGINTROSPECTION_LIBRARY_DEBUG - The osgIntrospection debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgIntrospection +-------------------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgINTROSPECTION This module defines + +OSGINTROSPECTION_FOUND - Was osgIntrospection found? +OSGINTROSPECTION_INCLUDE_DIR - Where to find the headers +OSGINTROSPECTION_LIBRARIES - The libraries to link for +osgIntrospection (use this) + +OSGINTROSPECTION_LIBRARY - The osgIntrospection library +OSGINTROSPECTION_LIBRARY_DEBUG - The osgIntrospection debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgManipulator.cmake b/Modules/FindosgManipulator.cmake index b88f1a4..857ff5d 100644 --- a/Modules/FindosgManipulator.cmake +++ b/Modules/FindosgManipulator.cmake @@ -1,37 +1,38 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgManipulator -# ------------------ -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgManipulator This module defines -# -# OSGMANIPULATOR_FOUND - Was osgManipulator found? -# OSGMANIPULATOR_INCLUDE_DIR - Where to find the headers -# OSGMANIPULATOR_LIBRARIES - The libraries to link for osgManipulator -# (use this) -# -# OSGMANIPULATOR_LIBRARY - The osgManipulator library -# OSGMANIPULATOR_LIBRARY_DEBUG - The osgManipulator debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgManipulator +------------------ + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgManipulator This module defines + +OSGMANIPULATOR_FOUND - Was osgManipulator found? +OSGMANIPULATOR_INCLUDE_DIR - Where to find the headers +OSGMANIPULATOR_LIBRARIES - The libraries to link for osgManipulator +(use this) + +OSGMANIPULATOR_LIBRARY - The osgManipulator library +OSGMANIPULATOR_LIBRARY_DEBUG - The osgManipulator debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgParticle.cmake b/Modules/FindosgParticle.cmake index 059746a..91a30dc 100644 --- a/Modules/FindosgParticle.cmake +++ b/Modules/FindosgParticle.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgParticle -# --------------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgParticle This module defines -# -# OSGPARTICLE_FOUND - Was osgParticle found? OSGPARTICLE_INCLUDE_DIR - -# Where to find the headers OSGPARTICLE_LIBRARIES - The libraries to -# link for osgParticle (use this) -# -# OSGPARTICLE_LIBRARY - The osgParticle library -# OSGPARTICLE_LIBRARY_DEBUG - The osgParticle debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgParticle +--------------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgParticle This module defines + +OSGPARTICLE_FOUND - Was osgParticle found? OSGPARTICLE_INCLUDE_DIR - +Where to find the headers OSGPARTICLE_LIBRARIES - The libraries to +link for osgParticle (use this) + +OSGPARTICLE_LIBRARY - The osgParticle library +OSGPARTICLE_LIBRARY_DEBUG - The osgParticle debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgPresentation.cmake b/Modules/FindosgPresentation.cmake index 84a4105..eae75d6 100644 --- a/Modules/FindosgPresentation.cmake +++ b/Modules/FindosgPresentation.cmake @@ -1,38 +1,39 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgPresentation -# ------------------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgPresentation This module defines -# -# OSGPRESENTATION_FOUND - Was osgPresentation found? -# OSGPRESENTATION_INCLUDE_DIR - Where to find the headers -# OSGPRESENTATION_LIBRARIES - The libraries to link for osgPresentation -# (use this) -# -# OSGPRESENTATION_LIBRARY - The osgPresentation library -# OSGPRESENTATION_LIBRARY_DEBUG - The osgPresentation debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. Modified to work with osgPresentation by Robert -# Osfield, January 2012. +#[=======================================================================[.rst: +FindosgPresentation +------------------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgPresentation This module defines + +OSGPRESENTATION_FOUND - Was osgPresentation found? +OSGPRESENTATION_INCLUDE_DIR - Where to find the headers +OSGPRESENTATION_LIBRARIES - The libraries to link for osgPresentation +(use this) + +OSGPRESENTATION_LIBRARY - The osgPresentation library +OSGPRESENTATION_LIBRARY_DEBUG - The osgPresentation debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. Modified to work with osgPresentation by Robert +Osfield, January 2012. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgProducer.cmake b/Modules/FindosgProducer.cmake index e5700bf..33b9f73 100644 --- a/Modules/FindosgProducer.cmake +++ b/Modules/FindosgProducer.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgProducer -# --------------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgProducer This module defines -# -# OSGPRODUCER_FOUND - Was osgProducer found? OSGPRODUCER_INCLUDE_DIR - -# Where to find the headers OSGPRODUCER_LIBRARIES - The libraries to -# link for osgProducer (use this) -# -# OSGPRODUCER_LIBRARY - The osgProducer library -# OSGPRODUCER_LIBRARY_DEBUG - The osgProducer debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgProducer +--------------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgProducer This module defines + +OSGPRODUCER_FOUND - Was osgProducer found? OSGPRODUCER_INCLUDE_DIR - +Where to find the headers OSGPRODUCER_LIBRARIES - The libraries to +link for osgProducer (use this) + +OSGPRODUCER_LIBRARY - The osgProducer library +OSGPRODUCER_LIBRARY_DEBUG - The osgProducer debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgQt.cmake b/Modules/FindosgQt.cmake index 04a2393..cf35630 100644 --- a/Modules/FindosgQt.cmake +++ b/Modules/FindosgQt.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgQt -# --------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgQt This module defines -# -# OSGQT_FOUND - Was osgQt found? OSGQT_INCLUDE_DIR - Where to find the -# headers OSGQT_LIBRARIES - The libraries to link for osgQt (use this) -# -# OSGQT_LIBRARY - The osgQt library OSGQT_LIBRARY_DEBUG - The osgQt -# debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. Modified to work with osgQt by Robert Osfield, -# January 2012. +#[=======================================================================[.rst: +FindosgQt +--------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgQt This module defines + +OSGQT_FOUND - Was osgQt found? OSGQT_INCLUDE_DIR - Where to find the +headers OSGQT_LIBRARIES - The libraries to link for osgQt (use this) + +OSGQT_LIBRARY - The osgQt library OSGQT_LIBRARY_DEBUG - The osgQt +debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. Modified to work with osgQt by Robert Osfield, +January 2012. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgShadow.cmake b/Modules/FindosgShadow.cmake index 0a7ba23..0049c4e 100644 --- a/Modules/FindosgShadow.cmake +++ b/Modules/FindosgShadow.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgShadow -# ------------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgShadow This module defines -# -# OSGSHADOW_FOUND - Was osgShadow found? OSGSHADOW_INCLUDE_DIR - Where -# to find the headers OSGSHADOW_LIBRARIES - The libraries to link for -# osgShadow (use this) -# -# OSGSHADOW_LIBRARY - The osgShadow library OSGSHADOW_LIBRARY_DEBUG - -# The osgShadow debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgShadow +------------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgShadow This module defines + +OSGSHADOW_FOUND - Was osgShadow found? OSGSHADOW_INCLUDE_DIR - Where +to find the headers OSGSHADOW_LIBRARIES - The libraries to link for +osgShadow (use this) + +OSGSHADOW_LIBRARY - The osgShadow library OSGSHADOW_LIBRARY_DEBUG - +The osgShadow debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgSim.cmake b/Modules/FindosgSim.cmake index 15426a2..43ba542 100644 --- a/Modules/FindosgSim.cmake +++ b/Modules/FindosgSim.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgSim -# ---------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgSim This module defines -# -# OSGSIM_FOUND - Was osgSim found? OSGSIM_INCLUDE_DIR - Where to find -# the headers OSGSIM_LIBRARIES - The libraries to link for osgSim (use -# this) -# -# OSGSIM_LIBRARY - The osgSim library OSGSIM_LIBRARY_DEBUG - The osgSim -# debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgSim +---------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgSim This module defines + +OSGSIM_FOUND - Was osgSim found? OSGSIM_INCLUDE_DIR - Where to find +the headers OSGSIM_LIBRARIES - The libraries to link for osgSim (use +this) + +OSGSIM_LIBRARY - The osgSim library OSGSIM_LIBRARY_DEBUG - The osgSim +debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgTerrain.cmake b/Modules/FindosgTerrain.cmake index 04eae14..c6f5b69 100644 --- a/Modules/FindosgTerrain.cmake +++ b/Modules/FindosgTerrain.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgTerrain -# -------------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgTerrain This module defines -# -# OSGTERRAIN_FOUND - Was osgTerrain found? OSGTERRAIN_INCLUDE_DIR - -# Where to find the headers OSGTERRAIN_LIBRARIES - The libraries to link -# for osgTerrain (use this) -# -# OSGTERRAIN_LIBRARY - The osgTerrain library OSGTERRAIN_LIBRARY_DEBUG - -# The osgTerrain debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgTerrain +-------------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgTerrain This module defines + +OSGTERRAIN_FOUND - Was osgTerrain found? OSGTERRAIN_INCLUDE_DIR - +Where to find the headers OSGTERRAIN_LIBRARIES - The libraries to link +for osgTerrain (use this) + +OSGTERRAIN_LIBRARY - The osgTerrain library OSGTERRAIN_LIBRARY_DEBUG - +The osgTerrain debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgText.cmake b/Modules/FindosgText.cmake index 1e2d9fd..fd3c232 100644 --- a/Modules/FindosgText.cmake +++ b/Modules/FindosgText.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgText -# ----------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgText This module defines -# -# OSGTEXT_FOUND - Was osgText found? OSGTEXT_INCLUDE_DIR - Where to find -# the headers OSGTEXT_LIBRARIES - The libraries to link for osgText (use -# this) -# -# OSGTEXT_LIBRARY - The osgText library OSGTEXT_LIBRARY_DEBUG - The -# osgText debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgText +----------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgText This module defines + +OSGTEXT_FOUND - Was osgText found? OSGTEXT_INCLUDE_DIR - Where to find +the headers OSGTEXT_LIBRARIES - The libraries to link for osgText (use +this) + +OSGTEXT_LIBRARY - The osgText library OSGTEXT_LIBRARY_DEBUG - The +osgText debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgUtil.cmake b/Modules/FindosgUtil.cmake index 13e0b80..e84727a 100644 --- a/Modules/FindosgUtil.cmake +++ b/Modules/FindosgUtil.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgUtil -# ----------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgUtil This module defines -# -# OSGUTIL_FOUND - Was osgUtil found? OSGUTIL_INCLUDE_DIR - Where to find -# the headers OSGUTIL_LIBRARIES - The libraries to link for osgUtil (use -# this) -# -# OSGUTIL_LIBRARY - The osgUtil library OSGUTIL_LIBRARY_DEBUG - The -# osgUtil debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgUtil +----------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgUtil This module defines + +OSGUTIL_FOUND - Was osgUtil found? OSGUTIL_INCLUDE_DIR - Where to find +the headers OSGUTIL_LIBRARIES - The libraries to link for osgUtil (use +this) + +OSGUTIL_LIBRARY - The osgUtil library OSGUTIL_LIBRARY_DEBUG - The +osgUtil debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgViewer.cmake b/Modules/FindosgViewer.cmake index a91c49c..2174357 100644 --- a/Modules/FindosgViewer.cmake +++ b/Modules/FindosgViewer.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgViewer -# ------------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgViewer This module defines -# -# OSGVIEWER_FOUND - Was osgViewer found? OSGVIEWER_INCLUDE_DIR - Where -# to find the headers OSGVIEWER_LIBRARIES - The libraries to link for -# osgViewer (use this) -# -# OSGVIEWER_LIBRARY - The osgViewer library OSGVIEWER_LIBRARY_DEBUG - -# The osgViewer debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgViewer +------------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgViewer This module defines + +OSGVIEWER_FOUND - Was osgViewer found? OSGVIEWER_INCLUDE_DIR - Where +to find the headers OSGVIEWER_LIBRARIES - The libraries to link for +osgViewer (use this) + +OSGVIEWER_LIBRARY - The osgViewer library OSGVIEWER_LIBRARY_DEBUG - +The osgViewer debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgVolume.cmake b/Modules/FindosgVolume.cmake index 1178ed3..35defef 100644 --- a/Modules/FindosgVolume.cmake +++ b/Modules/FindosgVolume.cmake @@ -1,36 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgVolume -# ------------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgVolume This module defines -# -# OSGVOLUME_FOUND - Was osgVolume found? OSGVOLUME_INCLUDE_DIR - Where -# to find the headers OSGVOLUME_LIBRARIES - The libraries to link for -# osgVolume (use this) -# -# OSGVOLUME_LIBRARY - The osgVolume library OSGVOLUME_LIBRARY_DEBUG - -# The osgVolume debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# Created by Eric Wing. +#[=======================================================================[.rst: +FindosgVolume +------------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgVolume This module defines + +OSGVOLUME_FOUND - Was osgVolume found? OSGVOLUME_INCLUDE_DIR - Where +to find the headers OSGVOLUME_LIBRARIES - The libraries to link for +osgVolume (use this) + +OSGVOLUME_LIBRARY - The osgVolume library OSGVOLUME_LIBRARY_DEBUG - +The osgVolume debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +Created by Eric Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/FindosgWidget.cmake b/Modules/FindosgWidget.cmake index 78999ec..c7aae44 100644 --- a/Modules/FindosgWidget.cmake +++ b/Modules/FindosgWidget.cmake @@ -1,37 +1,38 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindosgWidget -# ------------- -# -# -# -# This is part of the Findosg* suite used to find OpenSceneGraph -# components. Each component is separate and you must opt in to each -# module. You must also opt into OpenGL and OpenThreads (and Producer -# if needed) as these modules won't do it for you. This is to allow you -# control over your own system piece by piece in case you need to opt -# out of certain components or change the Find behavior for a particular -# module (perhaps because the default FindOpenGL.cmake module doesn't -# work with your system as an example). If you want to use a more -# convenient module that includes everything, use the -# FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. -# -# Locate osgWidget This module defines -# -# OSGWIDGET_FOUND - Was osgWidget found? OSGWIDGET_INCLUDE_DIR - Where -# to find the headers OSGWIDGET_LIBRARIES - The libraries to link for -# osgWidget (use this) -# -# OSGWIDGET_LIBRARY - The osgWidget library OSGWIDGET_LIBRARY_DEBUG - -# The osgWidget debug library -# -# $OSGDIR is an environment variable that would correspond to the -# ./configure --prefix=$OSGDIR used in building osg. -# -# FindosgWidget.cmake tweaked from Findosg* suite as created by Eric -# Wing. +#[=======================================================================[.rst: +FindosgWidget +------------- + + + +This is part of the Findosg* suite used to find OpenSceneGraph +components. Each component is separate and you must opt in to each +module. You must also opt into OpenGL and OpenThreads (and Producer +if needed) as these modules won't do it for you. This is to allow you +control over your own system piece by piece in case you need to opt +out of certain components or change the Find behavior for a particular +module (perhaps because the default FindOpenGL.cmake module doesn't +work with your system as an example). If you want to use a more +convenient module that includes everything, use the +FindOpenSceneGraph.cmake instead of the Findosg*.cmake modules. + +Locate osgWidget This module defines + +OSGWIDGET_FOUND - Was osgWidget found? OSGWIDGET_INCLUDE_DIR - Where +to find the headers OSGWIDGET_LIBRARIES - The libraries to link for +osgWidget (use this) + +OSGWIDGET_LIBRARY - The osgWidget library OSGWIDGET_LIBRARY_DEBUG - +The osgWidget debug library + +$OSGDIR is an environment variable that would correspond to the +./configure --prefix=$OSGDIR used in building osg. + +FindosgWidget.cmake tweaked from Findosg* suite as created by Eric +Wing. +#]=======================================================================] # Header files are presumed to be included like # #include <osg/PositionAttitudeTransform> diff --git a/Modules/Findosg_functions.cmake b/Modules/Findosg_functions.cmake index 60de726..40df4d5 100644 --- a/Modules/Findosg_functions.cmake +++ b/Modules/Findosg_functions.cmake @@ -1,17 +1,20 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# Findosg_functions -# ----------------- -# -# -# -# -# -# This CMake file contains two macros to assist with searching for OSG -# libraries and nodekits. Please see FindOpenSceneGraph.cmake for full -# documentation. +#[=======================================================================[.rst: +Findosg_functions +----------------- + + + + + +This CMake file contains two macros to assist with searching for OSG +libraries and nodekits. Please see FindOpenSceneGraph.cmake for full +documentation. +#]=======================================================================] + +include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) # # OSG_FIND_PATH @@ -39,7 +42,7 @@ endfunction() function(OSG_FIND_LIBRARY module library) string(TOUPPER ${module} module_uc) - find_library(${module_uc}_LIBRARY + find_library(${module_uc}_LIBRARY_RELEASE NAMES ${library} HINTS ENV ${module_uc}_DIR @@ -63,18 +66,12 @@ function(OSG_FIND_LIBRARY module library) PATH_SUFFIXES lib ) - if(NOT ${module_uc}_LIBRARY_DEBUG) - # They don't have a debug library - set(${module_uc}_LIBRARY_DEBUG ${${module_uc}_LIBRARY} PARENT_SCOPE) - set(${module_uc}_LIBRARIES ${${module_uc}_LIBRARY} PARENT_SCOPE) - else() - # They really have a FOO_LIBRARY_DEBUG - set(${module_uc}_LIBRARIES - optimized ${${module_uc}_LIBRARY} - debug ${${module_uc}_LIBRARY_DEBUG} - PARENT_SCOPE - ) - endif() + select_library_configurations(${module_uc}) + + # the variables set by select_library_configurations go out of scope + # here, so we need to set them again + set(${module_uc}_LIBRARY ${${module_uc}_LIBRARY} PARENT_SCOPE) + set(${module_uc}_LIBRARIES ${${module_uc}_LIBRARIES} PARENT_SCOPE) endfunction() # diff --git a/Modules/FindwxWidgets.cmake b/Modules/FindwxWidgets.cmake index f2d6285..c813ead 100644 --- a/Modules/FindwxWidgets.cmake +++ b/Modules/FindwxWidgets.cmake @@ -1,111 +1,112 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindwxWidgets -# ------------- -# -# Find a wxWidgets (a.k.a., wxWindows) installation. -# -# This module finds if wxWidgets is installed and selects a default -# configuration to use. wxWidgets is a modular library. To specify the -# modules that you will use, you need to name them as components to the -# package: -# -# find_package(wxWidgets COMPONENTS core base ...) -# -# There are two search branches: a windows style and a unix style. For -# windows, the following variables are searched for and set to defaults -# in case of multiple choices. Change them if the defaults are not -# desired (i.e., these are the only variables you should change to -# select a configuration): -# -# :: -# -# wxWidgets_ROOT_DIR - Base wxWidgets directory -# (e.g., C:/wxWidgets-2.6.3). -# wxWidgets_LIB_DIR - Path to wxWidgets libraries -# (e.g., C:/wxWidgets-2.6.3/lib/vc_lib). -# wxWidgets_CONFIGURATION - Configuration to use -# (e.g., msw, mswd, mswu, mswunivud, etc.) -# wxWidgets_EXCLUDE_COMMON_LIBRARIES -# - Set to TRUE to exclude linking of -# commonly required libs (e.g., png tiff -# jpeg zlib regex expat). -# -# -# -# For unix style it uses the wx-config utility. You can select between -# debug/release, unicode/ansi, universal/non-universal, and -# static/shared in the QtDialog or ccmake interfaces by turning ON/OFF -# the following variables: -# -# :: -# -# wxWidgets_USE_DEBUG -# wxWidgets_USE_UNICODE -# wxWidgets_USE_UNIVERSAL -# wxWidgets_USE_STATIC -# -# -# -# There is also a wxWidgets_CONFIG_OPTIONS variable for all other -# options that need to be passed to the wx-config utility. For example, -# to use the base toolkit found in the /usr/local path, set the variable -# (before calling the FIND_PACKAGE command) as such: -# -# :: -# -# set(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr) -# -# -# -# The following are set after the configuration is done for both windows -# and unix style: -# -# :: -# -# wxWidgets_FOUND - Set to TRUE if wxWidgets was found. -# wxWidgets_INCLUDE_DIRS - Include directories for WIN32 -# i.e., where to find "wx/wx.h" and -# "wx/setup.h"; possibly empty for unices. -# wxWidgets_LIBRARIES - Path to the wxWidgets libraries. -# wxWidgets_LIBRARY_DIRS - compile time link dirs, useful for -# rpath on UNIX. Typically an empty string -# in WIN32 environment. -# wxWidgets_DEFINITIONS - Contains defines required to compile/link -# against WX, e.g. WXUSINGDLL -# wxWidgets_DEFINITIONS_DEBUG- Contains defines required to compile/link -# against WX debug builds, e.g. __WXDEBUG__ -# wxWidgets_CXX_FLAGS - Include dirs and compiler flags for -# unices, empty on WIN32. Essentially -# "`wx-config --cxxflags`". -# wxWidgets_USE_FILE - Convenience include file. -# -# -# -# Sample usage: -# -# :: -# -# # Note that for MinGW users the order of libs is important! -# find_package(wxWidgets COMPONENTS net gl core base) -# if(wxWidgets_FOUND) -# include(${wxWidgets_USE_FILE}) -# # and for each of your dependent executable/library targets: -# target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES}) -# endif() -# -# -# -# If wxWidgets is required (i.e., not an optional part): -# -# :: -# -# find_package(wxWidgets REQUIRED net gl core base) -# include(${wxWidgets_USE_FILE}) -# # and for each of your dependent executable/library targets: -# target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES}) +#[=======================================================================[.rst: +FindwxWidgets +------------- + +Find a wxWidgets (a.k.a., wxWindows) installation. + +This module finds if wxWidgets is installed and selects a default +configuration to use. wxWidgets is a modular library. To specify the +modules that you will use, you need to name them as components to the +package: + +find_package(wxWidgets COMPONENTS core base ... OPTIONAL_COMPONENTS net ...) + +There are two search branches: a windows style and a unix style. For +windows, the following variables are searched for and set to defaults +in case of multiple choices. Change them if the defaults are not +desired (i.e., these are the only variables you should change to +select a configuration): + +:: + + wxWidgets_ROOT_DIR - Base wxWidgets directory + (e.g., C:/wxWidgets-2.6.3). + wxWidgets_LIB_DIR - Path to wxWidgets libraries + (e.g., C:/wxWidgets-2.6.3/lib/vc_lib). + wxWidgets_CONFIGURATION - Configuration to use + (e.g., msw, mswd, mswu, mswunivud, etc.) + wxWidgets_EXCLUDE_COMMON_LIBRARIES + - Set to TRUE to exclude linking of + commonly required libs (e.g., png tiff + jpeg zlib regex expat). + + + +For unix style it uses the wx-config utility. You can select between +debug/release, unicode/ansi, universal/non-universal, and +static/shared in the QtDialog or ccmake interfaces by turning ON/OFF +the following variables: + +:: + + wxWidgets_USE_DEBUG + wxWidgets_USE_UNICODE + wxWidgets_USE_UNIVERSAL + wxWidgets_USE_STATIC + + + +There is also a wxWidgets_CONFIG_OPTIONS variable for all other +options that need to be passed to the wx-config utility. For example, +to use the base toolkit found in the /usr/local path, set the variable +(before calling the FIND_PACKAGE command) as such: + +:: + + set(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr) + + + +The following are set after the configuration is done for both windows +and unix style: + +:: + + wxWidgets_FOUND - Set to TRUE if wxWidgets was found. + wxWidgets_INCLUDE_DIRS - Include directories for WIN32 + i.e., where to find "wx/wx.h" and + "wx/setup.h"; possibly empty for unices. + wxWidgets_LIBRARIES - Path to the wxWidgets libraries. + wxWidgets_LIBRARY_DIRS - compile time link dirs, useful for + rpath on UNIX. Typically an empty string + in WIN32 environment. + wxWidgets_DEFINITIONS - Contains defines required to compile/link + against WX, e.g. WXUSINGDLL + wxWidgets_DEFINITIONS_DEBUG- Contains defines required to compile/link + against WX debug builds, e.g. __WXDEBUG__ + wxWidgets_CXX_FLAGS - Include dirs and compiler flags for + unices, empty on WIN32. Essentially + "`wx-config --cxxflags`". + wxWidgets_USE_FILE - Convenience include file. + + + +Sample usage: + +:: + + # Note that for MinGW users the order of libs is important! + find_package(wxWidgets COMPONENTS gl core base OPTIONAL_COMPONENTS net) + if(wxWidgets_FOUND) + include(${wxWidgets_USE_FILE}) + # and for each of your dependent executable/library targets: + target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES}) + endif() + + + +If wxWidgets is required (i.e., not an optional part): + +:: + + find_package(wxWidgets REQUIRED gl core base OPTIONAL_COMPONENTS net) + include(${wxWidgets_USE_FILE}) + # and for each of your dependent executable/library targets: + target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES}) +#]=======================================================================] # # FIXME: check this and provide a correct sample usage... @@ -396,6 +397,9 @@ if(wxWidgets_FIND_STYLE STREQUAL "win32") list(APPEND wxWidgets_LIBRARIES debug ${WX_${LIB}d} optimized ${WX_${LIB}} ) + set(wxWidgets_${LIB}_FOUND TRUE) + elseif(NOT wxWidgets_FIND_REQUIRED_${LIB}) + DBG_MSG_V("- ignored optional missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}") else() DBG_MSG_V("- not found due to missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}") set(wxWidgets_FOUND FALSE) @@ -408,9 +412,11 @@ if(wxWidgets_FIND_STYLE STREQUAL "win32") if(WX_${LIB}${_DBG}) DBG_MSG_V("Found ${LIB}${_DBG}") list(APPEND wxWidgets_LIBRARIES ${WX_${LIB}${_DBG}}) + set(wxWidgets_${LIB}_FOUND TRUE) + elseif(NOT wxWidgets_FIND_REQUIRED_${LIB}) + DBG_MSG_V("- ignored optional missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}") else() - DBG_MSG_V( - "- not found due to missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}") + DBG_MSG_V("- not found due to missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}") set(wxWidgets_FOUND FALSE) endif() endforeach() @@ -803,11 +809,24 @@ else() # - NOTE: wx-config doesn't verify that the libs requested exist # it just produces the names. Maybe a TRY_COMPILE would # be useful here... - string(REPLACE ";" "," - wxWidgets_FIND_COMPONENTS "${wxWidgets_FIND_COMPONENTS}") + unset(_cmp_req) + unset(_cmp_opt) + foreach(_cmp IN LISTS wxWidgets_FIND_COMPONENTS) + if(wxWidgets_FIND_REQUIRED_${_cmp}) + list(APPEND _cmp_req "${_cmp}") + else() + list(APPEND _cmp_opt "${_cmp}") + endif() + endforeach() + DBG_MSG_V("wxWidgets required components : ${_cmp_req}") + DBG_MSG_V("wxWidgets optional components : ${_cmp_opt}") + if(DEFINED _cmp_opt) + string(REPLACE ";" "," _cmp_opt "--optional-libs ${_cmp_opt}") + endif() + string(REPLACE ";" "," _cmp_req "${_cmp_req}") execute_process( COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" - ${wxWidgets_SELECT_OPTIONS} --libs ${wxWidgets_FIND_COMPONENTS} + ${wxWidgets_SELECT_OPTIONS} --libs ${_cmp_req} ${_cmp_opt} OUTPUT_VARIABLE wxWidgets_LIBRARIES RESULT_VARIABLE RET ERROR_QUIET @@ -833,8 +852,10 @@ else() else() set(wxWidgets_FOUND FALSE) - DBG_MSG("${wxWidgets_CONFIG_EXECUTABLE} --libs ${wxWidgets_FIND_COMPONENTS} FAILED with RET=${RET}") + DBG_MSG("${wxWidgets_CONFIG_EXECUTABLE} --libs ${_cmp_req} ${_cmp_opt} FAILED with RET=${RET}") endif() + unset(_cmp_req) + unset(_cmp_opt) endif() # When using wx-config in MSYS, the include paths are UNIX style paths which may or may @@ -960,10 +981,18 @@ DBG_MSG("wxWidgets_USE_FILE : ${wxWidgets_USE_FILE}") include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +# FIXME: set wxWidgets_<comp>_FOUND for wx-config branch +# and use HANDLE_COMPONENTS on Unix too +if(wxWidgets_FIND_STYLE STREQUAL "win32") + set(wxWidgets_HANDLE_COMPONENTS "HANDLE_COMPONENTS") +endif() + find_package_handle_standard_args(wxWidgets REQUIRED_VARS wxWidgets_LIBRARIES wxWidgets_INCLUDE_DIRS VERSION_VAR wxWidgets_VERSION_STRING + ${wxWidgets_HANDLE_COMPONENTS} ) +unset(wxWidgets_HANDLE_COMPONENTS) #===================================================================== # Macros for use in wxWidgets apps. diff --git a/Modules/FindwxWindows.cmake b/Modules/FindwxWindows.cmake index 115cdc6..35840f5 100644 --- a/Modules/FindwxWindows.cmake +++ b/Modules/FindwxWindows.cmake @@ -1,84 +1,87 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# FindwxWindows -# ------------- -# -# Find wxWindows (wxWidgets) installation -# -# This module finds if wxWindows/wxWidgets is installed and determines -# where the include files and libraries are. It also determines what -# the name of the library is. Please note this file is DEPRECATED and -# replaced by FindwxWidgets.cmake. This code sets the following -# variables: -# -# :: -# -# WXWINDOWS_FOUND = system has WxWindows -# WXWINDOWS_LIBRARIES = path to the wxWindows libraries -# on Unix/Linux with additional -# linker flags from -# "wx-config --libs" -# CMAKE_WXWINDOWS_CXX_FLAGS = Compiler flags for wxWindows, -# essentially "`wx-config --cxxflags`" -# on Linux -# WXWINDOWS_INCLUDE_DIR = where to find "wx/wx.h" and "wx/setup.h" -# WXWINDOWS_LINK_DIRECTORIES = link directories, useful for rpath on -# Unix -# WXWINDOWS_DEFINITIONS = extra defines -# -# -# -# OPTIONS If you need OpenGL support please -# -# :: -# -# set(WXWINDOWS_USE_GL 1) -# -# in your CMakeLists.txt *before* you include this file. -# -# :: -# -# HAVE_ISYSTEM - true required to replace -I by -isystem on g++ -# -# -# -# For convenience include Use_wxWindows.cmake in your project's -# CMakeLists.txt using -# include(${CMAKE_CURRENT_LIST_DIR}/Use_wxWindows.cmake). -# -# USAGE -# -# :: -# -# set(WXWINDOWS_USE_GL 1) -# find_package(wxWindows) -# -# -# -# NOTES wxWidgets 2.6.x is supported for monolithic builds e.g. -# compiled in wx/build/msw dir as: -# -# :: -# -# nmake -f makefile.vc BUILD=debug SHARED=0 USE_OPENGL=1 MONOLITHIC=1 -# -# -# -# DEPRECATED -# -# :: -# -# CMAKE_WX_CAN_COMPILE -# WXWINDOWS_LIBRARY -# CMAKE_WX_CXX_FLAGS -# WXWINDOWS_INCLUDE_PATH -# -# -# -# AUTHOR Jan Woetzel <http://www.mip.informatik.uni-kiel.de/~jw> -# (07/2003-01/2006) +#[=======================================================================[.rst: +FindwxWindows +------------- + +.. deprecated:: 3.0 + + Replaced by :module:`FindwxWidgets`. + +Find wxWindows (wxWidgets) installation + +This module finds if wxWindows/wxWidgets is installed and determines +where the include files and libraries are. It also determines what +the name of the library is. This code sets the following variables: + +:: + + WXWINDOWS_FOUND = system has WxWindows + WXWINDOWS_LIBRARIES = path to the wxWindows libraries + on Unix/Linux with additional + linker flags from + "wx-config --libs" + CMAKE_WXWINDOWS_CXX_FLAGS = Compiler flags for wxWindows, + essentially "`wx-config --cxxflags`" + on Linux + WXWINDOWS_INCLUDE_DIR = where to find "wx/wx.h" and "wx/setup.h" + WXWINDOWS_LINK_DIRECTORIES = link directories, useful for rpath on + Unix + WXWINDOWS_DEFINITIONS = extra defines + + + +OPTIONS If you need OpenGL support please + +:: + + set(WXWINDOWS_USE_GL 1) + +in your CMakeLists.txt *before* you include this file. + +:: + + HAVE_ISYSTEM - true required to replace -I by -isystem on g++ + + + +For convenience include Use_wxWindows.cmake in your project's +CMakeLists.txt using +include(${CMAKE_CURRENT_LIST_DIR}/Use_wxWindows.cmake). + +USAGE + +:: + + set(WXWINDOWS_USE_GL 1) + find_package(wxWindows) + + + +NOTES wxWidgets 2.6.x is supported for monolithic builds e.g. +compiled in wx/build/msw dir as: + +:: + + nmake -f makefile.vc BUILD=debug SHARED=0 USE_OPENGL=1 MONOLITHIC=1 + + + +DEPRECATED + +:: + + CMAKE_WX_CAN_COMPILE + WXWINDOWS_LIBRARY + CMAKE_WX_CXX_FLAGS + WXWINDOWS_INCLUDE_PATH + + + +AUTHOR Jan Woetzel <http://www.mip.informatik.uni-kiel.de/~jw> +(07/2003-01/2006) +#]=======================================================================] # ------------------------------------------------------------------ # diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake index 9dd464c..48d830f 100644 --- a/Modules/GNUInstallDirs.cmake +++ b/Modules/GNUInstallDirs.cmake @@ -1,127 +1,128 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# GNUInstallDirs -# -------------- -# -# Define GNU standard installation directories -# -# Provides install directory variables as defined by the -# `GNU Coding Standards`_. -# -# .. _`GNU Coding Standards`: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html -# -# Result Variables -# ^^^^^^^^^^^^^^^^ -# -# Inclusion of this module defines the following variables: -# -# ``CMAKE_INSTALL_<dir>`` -# -# Destination for files of a given type. This value may be passed to -# the ``DESTINATION`` options of :command:`install` commands for the -# corresponding file type. -# -# ``CMAKE_INSTALL_FULL_<dir>`` -# -# The absolute path generated from the corresponding ``CMAKE_INSTALL_<dir>`` -# value. If the value is not already an absolute path, an absolute path -# is constructed typically by prepending the value of the -# :variable:`CMAKE_INSTALL_PREFIX` variable. However, there are some -# `special cases`_ as documented below. -# -# where ``<dir>`` is one of: -# -# ``BINDIR`` -# user executables (``bin``) -# ``SBINDIR`` -# system admin executables (``sbin``) -# ``LIBEXECDIR`` -# program executables (``libexec``) -# ``SYSCONFDIR`` -# read-only single-machine data (``etc``) -# ``SHAREDSTATEDIR`` -# modifiable architecture-independent data (``com``) -# ``LOCALSTATEDIR`` -# modifiable single-machine data (``var``) -# ``RUNSTATEDIR`` -# run-time variable data (``LOCALSTATEDIR/run``) -# ``LIBDIR`` -# object code libraries (``lib`` or ``lib64`` -# or ``lib/<multiarch-tuple>`` on Debian) -# ``INCLUDEDIR`` -# C header files (``include``) -# ``OLDINCLUDEDIR`` -# C header files for non-gcc (``/usr/include``) -# ``DATAROOTDIR`` -# read-only architecture-independent data root (``share``) -# ``DATADIR`` -# read-only architecture-independent data (``DATAROOTDIR``) -# ``INFODIR`` -# info documentation (``DATAROOTDIR/info``) -# ``LOCALEDIR`` -# locale-dependent data (``DATAROOTDIR/locale``) -# ``MANDIR`` -# man documentation (``DATAROOTDIR/man``) -# ``DOCDIR`` -# documentation root (``DATAROOTDIR/doc/PROJECT_NAME``) -# -# If the includer does not define a value the above-shown default will be -# used and the value will appear in the cache for editing by the user. -# -# Special Cases -# ^^^^^^^^^^^^^ -# -# The following values of :variable:`CMAKE_INSTALL_PREFIX` are special: -# -# ``/`` -# -# For ``<dir>`` other than the ``SYSCONFDIR``, ``LOCALSTATEDIR`` and -# ``RUNSTATEDIR``, the value of ``CMAKE_INSTALL_<dir>`` is prefixed -# with ``usr/`` if it is not user-specified as an absolute path. -# For example, the ``INCLUDEDIR`` value ``include`` becomes ``usr/include``. -# This is required by the `GNU Coding Standards`_, which state: -# -# When building the complete GNU system, the prefix will be empty -# and ``/usr`` will be a symbolic link to ``/``. -# -# ``/usr`` -# -# For ``<dir>`` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR`` or -# ``RUNSTATEDIR``, the ``CMAKE_INSTALL_FULL_<dir>`` is computed by -# prepending just ``/`` to the value of ``CMAKE_INSTALL_<dir>`` -# if it is not user-specified as an absolute path. -# For example, the ``SYSCONFDIR`` value ``etc`` becomes ``/etc``. -# This is required by the `GNU Coding Standards`_. -# -# ``/opt/...`` -# -# For ``<dir>`` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR`` or -# ``RUNSTATEDIR``, the ``CMAKE_INSTALL_FULL_<dir>`` is computed by -# *appending* the prefix to the value of ``CMAKE_INSTALL_<dir>`` -# if it is not user-specified as an absolute path. -# For example, the ``SYSCONFDIR`` value ``etc`` becomes ``/etc/opt/...``. -# This is defined by the `Filesystem Hierarchy Standard`_. -# -# .. _`Filesystem Hierarchy Standard`: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html -# -# Macros -# ^^^^^^ -# -# .. command:: GNUInstallDirs_get_absolute_install_dir -# -# :: -# -# GNUInstallDirs_get_absolute_install_dir(absvar var) -# -# Set the given variable ``absvar`` to the absolute path contained -# within the variable ``var``. This is to allow the computation of an -# absolute path, accounting for all the special cases documented -# above. While this macro is used to compute the various -# ``CMAKE_INSTALL_FULL_<dir>`` variables, it is exposed publicly to -# allow users who create additional path variables to also compute -# absolute paths where necessary, using the same logic. +#[=======================================================================[.rst: +GNUInstallDirs +-------------- + +Define GNU standard installation directories + +Provides install directory variables as defined by the +`GNU Coding Standards`_. + +.. _`GNU Coding Standards`: https://www.gnu.org/prep/standards/html_node/Directory-Variables.html + +Result Variables +^^^^^^^^^^^^^^^^ + +Inclusion of this module defines the following variables: + +``CMAKE_INSTALL_<dir>`` + + Destination for files of a given type. This value may be passed to + the ``DESTINATION`` options of :command:`install` commands for the + corresponding file type. + +``CMAKE_INSTALL_FULL_<dir>`` + + The absolute path generated from the corresponding ``CMAKE_INSTALL_<dir>`` + value. If the value is not already an absolute path, an absolute path + is constructed typically by prepending the value of the + :variable:`CMAKE_INSTALL_PREFIX` variable. However, there are some + `special cases`_ as documented below. + +where ``<dir>`` is one of: + +``BINDIR`` + user executables (``bin``) +``SBINDIR`` + system admin executables (``sbin``) +``LIBEXECDIR`` + program executables (``libexec``) +``SYSCONFDIR`` + read-only single-machine data (``etc``) +``SHAREDSTATEDIR`` + modifiable architecture-independent data (``com``) +``LOCALSTATEDIR`` + modifiable single-machine data (``var``) +``RUNSTATEDIR`` + run-time variable data (``LOCALSTATEDIR/run``) +``LIBDIR`` + object code libraries (``lib`` or ``lib64`` + or ``lib/<multiarch-tuple>`` on Debian) +``INCLUDEDIR`` + C header files (``include``) +``OLDINCLUDEDIR`` + C header files for non-gcc (``/usr/include``) +``DATAROOTDIR`` + read-only architecture-independent data root (``share``) +``DATADIR`` + read-only architecture-independent data (``DATAROOTDIR``) +``INFODIR`` + info documentation (``DATAROOTDIR/info``) +``LOCALEDIR`` + locale-dependent data (``DATAROOTDIR/locale``) +``MANDIR`` + man documentation (``DATAROOTDIR/man``) +``DOCDIR`` + documentation root (``DATAROOTDIR/doc/PROJECT_NAME``) + +If the includer does not define a value the above-shown default will be +used and the value will appear in the cache for editing by the user. + +Special Cases +^^^^^^^^^^^^^ + +The following values of :variable:`CMAKE_INSTALL_PREFIX` are special: + +``/`` + + For ``<dir>`` other than the ``SYSCONFDIR``, ``LOCALSTATEDIR`` and + ``RUNSTATEDIR``, the value of ``CMAKE_INSTALL_<dir>`` is prefixed + with ``usr/`` if it is not user-specified as an absolute path. + For example, the ``INCLUDEDIR`` value ``include`` becomes ``usr/include``. + This is required by the `GNU Coding Standards`_, which state: + + When building the complete GNU system, the prefix will be empty + and ``/usr`` will be a symbolic link to ``/``. + +``/usr`` + + For ``<dir>`` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR`` or + ``RUNSTATEDIR``, the ``CMAKE_INSTALL_FULL_<dir>`` is computed by + prepending just ``/`` to the value of ``CMAKE_INSTALL_<dir>`` + if it is not user-specified as an absolute path. + For example, the ``SYSCONFDIR`` value ``etc`` becomes ``/etc``. + This is required by the `GNU Coding Standards`_. + +``/opt/...`` + + For ``<dir>`` equal to ``SYSCONFDIR``, ``LOCALSTATEDIR`` or + ``RUNSTATEDIR``, the ``CMAKE_INSTALL_FULL_<dir>`` is computed by + *appending* the prefix to the value of ``CMAKE_INSTALL_<dir>`` + if it is not user-specified as an absolute path. + For example, the ``SYSCONFDIR`` value ``etc`` becomes ``/etc/opt/...``. + This is defined by the `Filesystem Hierarchy Standard`_. + +.. _`Filesystem Hierarchy Standard`: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html + +Macros +^^^^^^ + +.. command:: GNUInstallDirs_get_absolute_install_dir + + :: + + GNUInstallDirs_get_absolute_install_dir(absvar var) + + Set the given variable ``absvar`` to the absolute path contained + within the variable ``var``. This is to allow the computation of an + absolute path, accounting for all the special cases documented + above. While this macro is used to compute the various + ``CMAKE_INSTALL_FULL_<dir>`` variables, it is exposed publicly to + allow users who create additional path variables to also compute + absolute paths where necessary, using the same logic. +#]=======================================================================] cmake_policy(PUSH) cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced @@ -276,7 +277,7 @@ _GNUInstallDirs_cache_path(CMAKE_INSTALL_DATAROOTDIR "share" _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}" "Read-only architecture-independent data (DATAROOTDIR)") -if(CMAKE_SYSTEM_NAME MATCHES "^(.*BSD|DragonFly)$") +if(CMAKE_SYSTEM_NAME MATCHES "^(([^k].*)?BSD|DragonFly)$") _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_INFODIR "info" "Info documentation (info)") _GNUInstallDirs_cache_path_fallback(CMAKE_INSTALL_MANDIR "man" diff --git a/Modules/GenerateExportHeader.cmake b/Modules/GenerateExportHeader.cmake index e6dcd00..f2e4527 100644 --- a/Modules/GenerateExportHeader.cmake +++ b/Modules/GenerateExportHeader.cmake @@ -1,189 +1,190 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# GenerateExportHeader -# -------------------- -# -# Function for generation of export macros for libraries -# -# This module provides the function GENERATE_EXPORT_HEADER(). -# -# The ``GENERATE_EXPORT_HEADER`` function can be used to generate a file -# suitable for preprocessor inclusion which contains EXPORT macros to be -# used in library classes:: -# -# GENERATE_EXPORT_HEADER( LIBRARY_TARGET -# [BASE_NAME <base_name>] -# [EXPORT_MACRO_NAME <export_macro_name>] -# [EXPORT_FILE_NAME <export_file_name>] -# [DEPRECATED_MACRO_NAME <deprecated_macro_name>] -# [NO_EXPORT_MACRO_NAME <no_export_macro_name>] -# [INCLUDE_GUARD_NAME <include_guard_name>] -# [STATIC_DEFINE <static_define>] -# [NO_DEPRECATED_MACRO_NAME <no_deprecated_macro_name>] -# [DEFINE_NO_DEPRECATED] -# [PREFIX_NAME <prefix_name>] -# [CUSTOM_CONTENT_FROM_VARIABLE <variable>] -# ) -# -# -# The target properties :prop_tgt:`CXX_VISIBILITY_PRESET <<LANG>_VISIBILITY_PRESET>` -# and :prop_tgt:`VISIBILITY_INLINES_HIDDEN` can be used to add the appropriate -# compile flags for targets. See the documentation of those target properties, -# and the convenience variables -# :variable:`CMAKE_CXX_VISIBILITY_PRESET <CMAKE_<LANG>_VISIBILITY_PRESET>` and -# :variable:`CMAKE_VISIBILITY_INLINES_HIDDEN`. -# -# By default ``GENERATE_EXPORT_HEADER()`` generates macro names in a file -# name determined by the name of the library. This means that in the -# simplest case, users of ``GenerateExportHeader`` will be equivalent to: -# -# .. code-block:: cmake -# -# set(CMAKE_CXX_VISIBILITY_PRESET hidden) -# set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) -# add_library(somelib someclass.cpp) -# generate_export_header(somelib) -# install(TARGETS somelib DESTINATION ${LIBRARY_INSTALL_DIR}) -# install(FILES -# someclass.h -# ${PROJECT_BINARY_DIR}/somelib_export.h DESTINATION ${INCLUDE_INSTALL_DIR} -# ) -# -# -# And in the ABI header files: -# -# .. code-block:: c++ -# -# #include "somelib_export.h" -# class SOMELIB_EXPORT SomeClass { -# ... -# }; -# -# -# The CMake fragment will generate a file in the -# ``${CMAKE_CURRENT_BINARY_DIR}`` called ``somelib_export.h`` containing the -# macros ``SOMELIB_EXPORT``, ``SOMELIB_NO_EXPORT``, ``SOMELIB_DEPRECATED``, -# ``SOMELIB_DEPRECATED_EXPORT`` and ``SOMELIB_DEPRECATED_NO_EXPORT``. -# They will be followed by content taken from the variable specified by -# the ``CUSTOM_CONTENT_FROM_VARIABLE`` option, if any. -# The resulting file should be installed with other headers in the library. -# -# The ``BASE_NAME`` argument can be used to override the file name and the -# names used for the macros: -# -# .. code-block:: cmake -# -# add_library(somelib someclass.cpp) -# generate_export_header(somelib -# BASE_NAME other_name -# ) -# -# -# Generates a file called ``other_name_export.h`` containing the macros -# ``OTHER_NAME_EXPORT``, ``OTHER_NAME_NO_EXPORT`` and ``OTHER_NAME_DEPRECATED`` -# etc. -# -# The ``BASE_NAME`` may be overridden by specifying other options in the -# function. For example: -# -# .. code-block:: cmake -# -# add_library(somelib someclass.cpp) -# generate_export_header(somelib -# EXPORT_MACRO_NAME OTHER_NAME_EXPORT -# ) -# -# -# creates the macro ``OTHER_NAME_EXPORT`` instead of ``SOMELIB_EXPORT``, but -# other macros and the generated file name is as default: -# -# .. code-block:: cmake -# -# add_library(somelib someclass.cpp) -# generate_export_header(somelib -# DEPRECATED_MACRO_NAME KDE_DEPRECATED -# ) -# -# -# creates the macro ``KDE_DEPRECATED`` instead of ``SOMELIB_DEPRECATED``. -# -# If ``LIBRARY_TARGET`` is a static library, macros are defined without -# values. -# -# If the same sources are used to create both a shared and a static -# library, the uppercased symbol ``${BASE_NAME}_STATIC_DEFINE`` should be -# used when building the static library: -# -# .. code-block:: cmake -# -# add_library(shared_variant SHARED ${lib_SRCS}) -# add_library(static_variant ${lib_SRCS}) -# generate_export_header(shared_variant BASE_NAME libshared_and_static) -# set_target_properties(static_variant PROPERTIES -# COMPILE_FLAGS -DLIBSHARED_AND_STATIC_STATIC_DEFINE) -# -# This will cause the export macros to expand to nothing when building -# the static library. -# -# If ``DEFINE_NO_DEPRECATED`` is specified, then a macro -# ``${BASE_NAME}_NO_DEPRECATED`` will be defined This macro can be used to -# remove deprecated code from preprocessor output: -# -# .. code-block:: cmake -# -# option(EXCLUDE_DEPRECATED "Exclude deprecated parts of the library" FALSE) -# if (EXCLUDE_DEPRECATED) -# set(NO_BUILD_DEPRECATED DEFINE_NO_DEPRECATED) -# endif() -# generate_export_header(somelib ${NO_BUILD_DEPRECATED}) -# -# -# And then in somelib: -# -# .. code-block:: c++ -# -# class SOMELIB_EXPORT SomeClass -# { -# public: -# #ifndef SOMELIB_NO_DEPRECATED -# SOMELIB_DEPRECATED void oldMethod(); -# #endif -# }; -# -# .. code-block:: c++ -# -# #ifndef SOMELIB_NO_DEPRECATED -# void SomeClass::oldMethod() { } -# #endif -# -# -# If ``PREFIX_NAME`` is specified, the argument will be used as a prefix to -# all generated macros. -# -# For example: -# -# .. code-block:: cmake -# -# generate_export_header(somelib PREFIX_NAME VTK_) -# -# Generates the macros ``VTK_SOMELIB_EXPORT`` etc. -# -# :: -# -# ADD_COMPILER_EXPORT_FLAGS( [<output_variable>] ) -# -# The ``ADD_COMPILER_EXPORT_FLAGS`` function adds ``-fvisibility=hidden`` to -# :variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` if supported, and is a no-op -# on Windows which does not need extra compiler flags for exporting support. -# You may optionally pass a single argument to ``ADD_COMPILER_EXPORT_FLAGS`` -# that will be populated with the ``CXX_FLAGS`` required to enable visibility -# support for the compiler/architecture in use. -# -# This function is deprecated. Set the target properties -# :prop_tgt:`CXX_VISIBILITY_PRESET <<LANG>_VISIBILITY_PRESET>` and -# :prop_tgt:`VISIBILITY_INLINES_HIDDEN` instead. +#[=======================================================================[.rst: +GenerateExportHeader +-------------------- + +Function for generation of export macros for libraries + +This module provides the function GENERATE_EXPORT_HEADER(). + +The ``GENERATE_EXPORT_HEADER`` function can be used to generate a file +suitable for preprocessor inclusion which contains EXPORT macros to be +used in library classes:: + + GENERATE_EXPORT_HEADER( LIBRARY_TARGET + [BASE_NAME <base_name>] + [EXPORT_MACRO_NAME <export_macro_name>] + [EXPORT_FILE_NAME <export_file_name>] + [DEPRECATED_MACRO_NAME <deprecated_macro_name>] + [NO_EXPORT_MACRO_NAME <no_export_macro_name>] + [INCLUDE_GUARD_NAME <include_guard_name>] + [STATIC_DEFINE <static_define>] + [NO_DEPRECATED_MACRO_NAME <no_deprecated_macro_name>] + [DEFINE_NO_DEPRECATED] + [PREFIX_NAME <prefix_name>] + [CUSTOM_CONTENT_FROM_VARIABLE <variable>] + ) + + +The target properties :prop_tgt:`CXX_VISIBILITY_PRESET <<LANG>_VISIBILITY_PRESET>` +and :prop_tgt:`VISIBILITY_INLINES_HIDDEN` can be used to add the appropriate +compile flags for targets. See the documentation of those target properties, +and the convenience variables +:variable:`CMAKE_CXX_VISIBILITY_PRESET <CMAKE_<LANG>_VISIBILITY_PRESET>` and +:variable:`CMAKE_VISIBILITY_INLINES_HIDDEN`. + +By default ``GENERATE_EXPORT_HEADER()`` generates macro names in a file +name determined by the name of the library. This means that in the +simplest case, users of ``GenerateExportHeader`` will be equivalent to: + +.. code-block:: cmake + + set(CMAKE_CXX_VISIBILITY_PRESET hidden) + set(CMAKE_VISIBILITY_INLINES_HIDDEN 1) + add_library(somelib someclass.cpp) + generate_export_header(somelib) + install(TARGETS somelib DESTINATION ${LIBRARY_INSTALL_DIR}) + install(FILES + someclass.h + ${PROJECT_BINARY_DIR}/somelib_export.h DESTINATION ${INCLUDE_INSTALL_DIR} + ) + + +And in the ABI header files: + +.. code-block:: c++ + + #include "somelib_export.h" + class SOMELIB_EXPORT SomeClass { + ... + }; + + +The CMake fragment will generate a file in the +``${CMAKE_CURRENT_BINARY_DIR}`` called ``somelib_export.h`` containing the +macros ``SOMELIB_EXPORT``, ``SOMELIB_NO_EXPORT``, ``SOMELIB_DEPRECATED``, +``SOMELIB_DEPRECATED_EXPORT`` and ``SOMELIB_DEPRECATED_NO_EXPORT``. +They will be followed by content taken from the variable specified by +the ``CUSTOM_CONTENT_FROM_VARIABLE`` option, if any. +The resulting file should be installed with other headers in the library. + +The ``BASE_NAME`` argument can be used to override the file name and the +names used for the macros: + +.. code-block:: cmake + + add_library(somelib someclass.cpp) + generate_export_header(somelib + BASE_NAME other_name + ) + + +Generates a file called ``other_name_export.h`` containing the macros +``OTHER_NAME_EXPORT``, ``OTHER_NAME_NO_EXPORT`` and ``OTHER_NAME_DEPRECATED`` +etc. + +The ``BASE_NAME`` may be overridden by specifying other options in the +function. For example: + +.. code-block:: cmake + + add_library(somelib someclass.cpp) + generate_export_header(somelib + EXPORT_MACRO_NAME OTHER_NAME_EXPORT + ) + + +creates the macro ``OTHER_NAME_EXPORT`` instead of ``SOMELIB_EXPORT``, but +other macros and the generated file name is as default: + +.. code-block:: cmake + + add_library(somelib someclass.cpp) + generate_export_header(somelib + DEPRECATED_MACRO_NAME KDE_DEPRECATED + ) + + +creates the macro ``KDE_DEPRECATED`` instead of ``SOMELIB_DEPRECATED``. + +If ``LIBRARY_TARGET`` is a static library, macros are defined without +values. + +If the same sources are used to create both a shared and a static +library, the uppercased symbol ``${BASE_NAME}_STATIC_DEFINE`` should be +used when building the static library: + +.. code-block:: cmake + + add_library(shared_variant SHARED ${lib_SRCS}) + add_library(static_variant ${lib_SRCS}) + generate_export_header(shared_variant BASE_NAME libshared_and_static) + set_target_properties(static_variant PROPERTIES + COMPILE_FLAGS -DLIBSHARED_AND_STATIC_STATIC_DEFINE) + +This will cause the export macros to expand to nothing when building +the static library. + +If ``DEFINE_NO_DEPRECATED`` is specified, then a macro +``${BASE_NAME}_NO_DEPRECATED`` will be defined This macro can be used to +remove deprecated code from preprocessor output: + +.. code-block:: cmake + + option(EXCLUDE_DEPRECATED "Exclude deprecated parts of the library" FALSE) + if (EXCLUDE_DEPRECATED) + set(NO_BUILD_DEPRECATED DEFINE_NO_DEPRECATED) + endif() + generate_export_header(somelib ${NO_BUILD_DEPRECATED}) + + +And then in somelib: + +.. code-block:: c++ + + class SOMELIB_EXPORT SomeClass + { + public: + #ifndef SOMELIB_NO_DEPRECATED + SOMELIB_DEPRECATED void oldMethod(); + #endif + }; + +.. code-block:: c++ + + #ifndef SOMELIB_NO_DEPRECATED + void SomeClass::oldMethod() { } + #endif + + +If ``PREFIX_NAME`` is specified, the argument will be used as a prefix to +all generated macros. + +For example: + +.. code-block:: cmake + + generate_export_header(somelib PREFIX_NAME VTK_) + +Generates the macros ``VTK_SOMELIB_EXPORT`` etc. + +:: + + ADD_COMPILER_EXPORT_FLAGS( [<output_variable>] ) + +The ``ADD_COMPILER_EXPORT_FLAGS`` function adds ``-fvisibility=hidden`` to +:variable:`CMAKE_CXX_FLAGS <CMAKE_<LANG>_FLAGS>` if supported, and is a no-op +on Windows which does not need extra compiler flags for exporting support. +You may optionally pass a single argument to ``ADD_COMPILER_EXPORT_FLAGS`` +that will be populated with the ``CXX_FLAGS`` required to enable visibility +support for the compiler/architecture in use. + +This function is deprecated. Set the target properties +:prop_tgt:`CXX_VISIBILITY_PRESET <<LANG>_VISIBILITY_PRESET>` and +:prop_tgt:`VISIBILITY_INLINES_HIDDEN` instead. +#]=======================================================================] include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake index d397791..5b32f7c 100644 --- a/Modules/GetPrerequisites.cmake +++ b/Modules/GetPrerequisites.cmake @@ -1,169 +1,170 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# GetPrerequisites -# ---------------- -# -# Functions to analyze and list executable file prerequisites. -# -# This module provides functions to list the .dll, .dylib or .so files -# that an executable or shared library file depends on. (Its -# prerequisites.) -# -# It uses various tools to obtain the list of required shared library -# files: -# -# :: -# -# dumpbin (Windows) -# objdump (MinGW on Windows) -# ldd (Linux/Unix) -# otool (Mac OSX) -# -# The following functions are provided by this module: -# -# :: -# -# get_prerequisites -# list_prerequisites -# list_prerequisites_by_glob -# gp_append_unique -# is_file_executable -# gp_item_default_embedded_path -# (projects can override with gp_item_default_embedded_path_override) -# gp_resolve_item -# (projects can override with gp_resolve_item_override) -# gp_resolved_file_type -# (projects can override with gp_resolved_file_type_override) -# gp_file_type -# -# Requires CMake 2.6 or greater because it uses function, break, return -# and PARENT_SCOPE. -# -# :: -# -# GET_PREREQUISITES(<target> <prerequisites_var> <exclude_system> <recurse> -# <exepath> <dirs> [<rpaths>]) -# -# Get the list of shared library files required by <target>. The list -# in the variable named <prerequisites_var> should be empty on first -# entry to this function. On exit, <prerequisites_var> will contain the -# list of required shared library files. -# -# <target> is the full path to an executable file. <prerequisites_var> -# is the name of a CMake variable to contain the results. -# <exclude_system> must be 0 or 1 indicating whether to include or -# exclude "system" prerequisites. If <recurse> is set to 1 all -# prerequisites will be found recursively, if set to 0 only direct -# prerequisites are listed. <exepath> is the path to the top level -# executable used for @executable_path replacment on the Mac. <dirs> is -# a list of paths where libraries might be found: these paths are -# searched first when a target without any path info is given. Then -# standard system locations are also searched: PATH, Framework -# locations, /usr/lib... -# -# :: -# -# LIST_PREREQUISITES(<target> [<recurse> [<exclude_system> [<verbose>]]]) -# -# Print a message listing the prerequisites of <target>. -# -# <target> is the name of a shared library or executable target or the -# full path to a shared library or executable file. If <recurse> is set -# to 1 all prerequisites will be found recursively, if set to 0 only -# direct prerequisites are listed. <exclude_system> must be 0 or 1 -# indicating whether to include or exclude "system" prerequisites. With -# <verbose> set to 0 only the full path names of the prerequisites are -# printed, set to 1 extra informatin will be displayed. -# -# :: -# -# LIST_PREREQUISITES_BY_GLOB(<glob_arg> <glob_exp>) -# -# Print the prerequisites of shared library and executable files -# matching a globbing pattern. <glob_arg> is GLOB or GLOB_RECURSE and -# <glob_exp> is a globbing expression used with "file(GLOB" or -# "file(GLOB_RECURSE" to retrieve a list of matching files. If a -# matching file is executable, its prerequisites are listed. -# -# Any additional (optional) arguments provided are passed along as the -# optional arguments to the list_prerequisites calls. -# -# :: -# -# GP_APPEND_UNIQUE(<list_var> <value>) -# -# Append <value> to the list variable <list_var> only if the value is -# not already in the list. -# -# :: -# -# IS_FILE_EXECUTABLE(<file> <result_var>) -# -# Return 1 in <result_var> if <file> is a binary executable, 0 -# otherwise. -# -# :: -# -# GP_ITEM_DEFAULT_EMBEDDED_PATH(<item> <default_embedded_path_var>) -# -# Return the path that others should refer to the item by when the item -# is embedded inside a bundle. -# -# Override on a per-project basis by providing a project-specific -# gp_item_default_embedded_path_override function. -# -# :: -# -# GP_RESOLVE_ITEM(<context> <item> <exepath> <dirs> <resolved_item_var> -# [<rpaths>]) -# -# Resolve an item into an existing full path file. -# -# Override on a per-project basis by providing a project-specific -# gp_resolve_item_override function. -# -# :: -# -# GP_RESOLVED_FILE_TYPE(<original_file> <file> <exepath> <dirs> <type_var> -# [<rpaths>]) -# -# Return the type of <file> with respect to <original_file>. String -# describing type of prerequisite is returned in variable named -# <type_var>. -# -# Use <exepath> and <dirs> if necessary to resolve non-absolute <file> -# values -- but only for non-embedded items. -# -# Possible types are: -# -# :: -# -# system -# local -# embedded -# other -# -# Override on a per-project basis by providing a project-specific -# gp_resolved_file_type_override function. -# -# :: -# -# GP_FILE_TYPE(<original_file> <file> <type_var>) -# -# Return the type of <file> with respect to <original_file>. String -# describing type of prerequisite is returned in variable named -# <type_var>. -# -# Possible types are: -# -# :: -# -# system -# local -# embedded -# other +#[=======================================================================[.rst: +GetPrerequisites +---------------- + +Functions to analyze and list executable file prerequisites. + +This module provides functions to list the .dll, .dylib or .so files +that an executable or shared library file depends on. (Its +prerequisites.) + +It uses various tools to obtain the list of required shared library +files: + +:: + + dumpbin (Windows) + objdump (MinGW on Windows) + ldd (Linux/Unix) + otool (Mac OSX) + +The following functions are provided by this module: + +:: + + get_prerequisites + list_prerequisites + list_prerequisites_by_glob + gp_append_unique + is_file_executable + gp_item_default_embedded_path + (projects can override with gp_item_default_embedded_path_override) + gp_resolve_item + (projects can override with gp_resolve_item_override) + gp_resolved_file_type + (projects can override with gp_resolved_file_type_override) + gp_file_type + +Requires CMake 2.6 or greater because it uses function, break, return +and PARENT_SCOPE. + +:: + + GET_PREREQUISITES(<target> <prerequisites_var> <exclude_system> <recurse> + <exepath> <dirs> [<rpaths>]) + +Get the list of shared library files required by <target>. The list +in the variable named <prerequisites_var> should be empty on first +entry to this function. On exit, <prerequisites_var> will contain the +list of required shared library files. + +<target> is the full path to an executable file. <prerequisites_var> +is the name of a CMake variable to contain the results. +<exclude_system> must be 0 or 1 indicating whether to include or +exclude "system" prerequisites. If <recurse> is set to 1 all +prerequisites will be found recursively, if set to 0 only direct +prerequisites are listed. <exepath> is the path to the top level +executable used for @executable_path replacment on the Mac. <dirs> is +a list of paths where libraries might be found: these paths are +searched first when a target without any path info is given. Then +standard system locations are also searched: PATH, Framework +locations, /usr/lib... + +:: + + LIST_PREREQUISITES(<target> [<recurse> [<exclude_system> [<verbose>]]]) + +Print a message listing the prerequisites of <target>. + +<target> is the name of a shared library or executable target or the +full path to a shared library or executable file. If <recurse> is set +to 1 all prerequisites will be found recursively, if set to 0 only +direct prerequisites are listed. <exclude_system> must be 0 or 1 +indicating whether to include or exclude "system" prerequisites. With +<verbose> set to 0 only the full path names of the prerequisites are +printed, set to 1 extra informatin will be displayed. + +:: + + LIST_PREREQUISITES_BY_GLOB(<glob_arg> <glob_exp>) + +Print the prerequisites of shared library and executable files +matching a globbing pattern. <glob_arg> is GLOB or GLOB_RECURSE and +<glob_exp> is a globbing expression used with "file(GLOB" or +"file(GLOB_RECURSE" to retrieve a list of matching files. If a +matching file is executable, its prerequisites are listed. + +Any additional (optional) arguments provided are passed along as the +optional arguments to the list_prerequisites calls. + +:: + + GP_APPEND_UNIQUE(<list_var> <value>) + +Append <value> to the list variable <list_var> only if the value is +not already in the list. + +:: + + IS_FILE_EXECUTABLE(<file> <result_var>) + +Return 1 in <result_var> if <file> is a binary executable, 0 +otherwise. + +:: + + GP_ITEM_DEFAULT_EMBEDDED_PATH(<item> <default_embedded_path_var>) + +Return the path that others should refer to the item by when the item +is embedded inside a bundle. + +Override on a per-project basis by providing a project-specific +gp_item_default_embedded_path_override function. + +:: + + GP_RESOLVE_ITEM(<context> <item> <exepath> <dirs> <resolved_item_var> + [<rpaths>]) + +Resolve an item into an existing full path file. + +Override on a per-project basis by providing a project-specific +gp_resolve_item_override function. + +:: + + GP_RESOLVED_FILE_TYPE(<original_file> <file> <exepath> <dirs> <type_var> + [<rpaths>]) + +Return the type of <file> with respect to <original_file>. String +describing type of prerequisite is returned in variable named +<type_var>. + +Use <exepath> and <dirs> if necessary to resolve non-absolute <file> +values -- but only for non-embedded items. + +Possible types are: + +:: + + system + local + embedded + other + +Override on a per-project basis by providing a project-specific +gp_resolved_file_type_override function. + +:: + + GP_FILE_TYPE(<original_file> <file> <type_var>) + +Return the type of <file> with respect to <original_file>. String +describing type of prerequisite is returned in variable named +<type_var>. + +Possible types are: + +:: + + system + local + embedded + other +#]=======================================================================] function(gp_append_unique list_var value) set(contains 0) @@ -275,7 +276,6 @@ function(gp_item_default_embedded_path item default_embedded_path_var) # as the executable by default: # set(path "@executable_path") - set(overridden 0) # On the Mac, relative to the executable depending on the type # of the thing we are embedding: @@ -294,20 +294,11 @@ function(gp_item_default_embedded_path item default_embedded_path_var) # set(path "@executable_path/../../Contents/MacOS") - # Embed .dylibs right next to the main bundle executable: - # - if(item MATCHES "\\.dylib$") - set(path "@executable_path/../MacOS") - set(overridden 1) - endif() - - # Embed frameworks in the embedded "Frameworks" directory (sibling of MacOS): + # Embed frameworks and .dylibs in the embedded "Frameworks" directory + # (sibling of MacOS): # - if(NOT overridden) - if(item MATCHES "[^/]+\\.framework/") - set(path "@executable_path/../Frameworks") - set(overridden 1) - endif() + if(item MATCHES "[^/]+\\.framework/" OR item MATCHES "\\.dylib$") + set(path "@executable_path/../Frameworks") endif() endif() diff --git a/Modules/GoogleTest.cmake b/Modules/GoogleTest.cmake index 2c9ee11..a5bb863 100644 --- a/Modules/GoogleTest.cmake +++ b/Modules/GoogleTest.cmake @@ -308,7 +308,7 @@ function(gtest_add_tests) set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${source}) endif() file(READ "${source}" contents) - string(REGEX MATCHALL "${gtest_test_type_regex} *\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents}) + string(REGEX MATCHALL "${gtest_test_type_regex} *\\(([A-Za-z_0-9 ,]+)\\)" found_tests "${contents}") foreach(hit ${found_tests}) string(REGEX MATCH "${gtest_test_type_regex}" test_type ${hit}) diff --git a/Modules/InstallRequiredSystemLibraries.cmake b/Modules/InstallRequiredSystemLibraries.cmake index 36dd0a0..9a5e64d 100644 --- a/Modules/InstallRequiredSystemLibraries.cmake +++ b/Modules/InstallRequiredSystemLibraries.cmake @@ -1,60 +1,61 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# InstallRequiredSystemLibraries -# ------------------------------ -# -# Include this module to search for compiler-provided system runtime -# libraries and add install rules for them. Some optional variables -# may be set prior to including the module to adjust behavior: -# -# ``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS`` -# Specify additional runtime libraries that may not be detected. -# After inclusion any detected libraries will be appended to this. -# -# ``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP`` -# Set to TRUE to skip calling the :command:`install(PROGRAMS)` command to -# allow the includer to specify its own install rule, using the value of -# ``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS`` to get the list of libraries. -# -# ``CMAKE_INSTALL_DEBUG_LIBRARIES`` -# Set to TRUE to install the debug runtime libraries when available -# with MSVC tools. -# -# ``CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY`` -# Set to TRUE to install only the debug runtime libraries with MSVC -# tools even if the release runtime libraries are also available. -# -# ``CMAKE_INSTALL_UCRT_LIBRARIES`` -# Set to TRUE to install the Windows Universal CRT libraries for -# app-local deployment (e.g. to Windows XP). This is meaningful -# only with MSVC from Visual Studio 2015 or higher. -# -# One may set a ``CMAKE_WINDOWS_KITS_10_DIR`` *environment variable* -# to an absolute path to tell CMake to look for Windows 10 SDKs in -# a custom location. The specified directory is expected to contain -# ``Redist/ucrt/DLLs/*`` directories. -# -# ``CMAKE_INSTALL_MFC_LIBRARIES`` -# Set to TRUE to install the MSVC MFC runtime libraries. -# -# ``CMAKE_INSTALL_OPENMP_LIBRARIES`` -# Set to TRUE to install the MSVC OpenMP runtime libraries -# -# ``CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION`` -# Specify the :command:`install(PROGRAMS)` command ``DESTINATION`` -# option. If not specified, the default is ``bin`` on Windows -# and ``lib`` elsewhere. -# -# ``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS`` -# Set to TRUE to disable warnings about required library files that -# do not exist. (For example, Visual Studio Express editions may -# not provide the redistributable files.) -# -# ``CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT`` -# Specify the :command:`install(PROGRAMS)` command ``COMPONENT`` -# option. If not specified, no such option will be used. +#[=======================================================================[.rst: +InstallRequiredSystemLibraries +------------------------------ + +Include this module to search for compiler-provided system runtime +libraries and add install rules for them. Some optional variables +may be set prior to including the module to adjust behavior: + +``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS`` + Specify additional runtime libraries that may not be detected. + After inclusion any detected libraries will be appended to this. + +``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP`` + Set to TRUE to skip calling the :command:`install(PROGRAMS)` command to + allow the includer to specify its own install rule, using the value of + ``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS`` to get the list of libraries. + +``CMAKE_INSTALL_DEBUG_LIBRARIES`` + Set to TRUE to install the debug runtime libraries when available + with MSVC tools. + +``CMAKE_INSTALL_DEBUG_LIBRARIES_ONLY`` + Set to TRUE to install only the debug runtime libraries with MSVC + tools even if the release runtime libraries are also available. + +``CMAKE_INSTALL_UCRT_LIBRARIES`` + Set to TRUE to install the Windows Universal CRT libraries for + app-local deployment (e.g. to Windows XP). This is meaningful + only with MSVC from Visual Studio 2015 or higher. + + One may set a ``CMAKE_WINDOWS_KITS_10_DIR`` *environment variable* + to an absolute path to tell CMake to look for Windows 10 SDKs in + a custom location. The specified directory is expected to contain + ``Redist/ucrt/DLLs/*`` directories. + +``CMAKE_INSTALL_MFC_LIBRARIES`` + Set to TRUE to install the MSVC MFC runtime libraries. + +``CMAKE_INSTALL_OPENMP_LIBRARIES`` + Set to TRUE to install the MSVC OpenMP runtime libraries + +``CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION`` + Specify the :command:`install(PROGRAMS)` command ``DESTINATION`` + option. If not specified, the default is ``bin`` on Windows + and ``lib`` elsewhere. + +``CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS`` + Set to TRUE to disable warnings about required library files that + do not exist. (For example, Visual Studio Express editions may + not provide the redistributable files.) + +``CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT`` + Specify the :command:`install(PROGRAMS)` command ``COMPONENT`` + option. If not specified, no such option will be used. +#]=======================================================================] cmake_policy(PUSH) cmake_policy(SET CMP0054 NEW) # if() quoted variables not dereferenced @@ -362,7 +363,7 @@ if(MSVC) ) endif() - # include the language dll's for vs8 as well as the actuall dll's + # include the language dll's for vs8 as well as the actual dll's set(MSVC_MFCLOC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC80.MFCLOC") # Install the manifest that allows DLLs to be loaded from the # directory containing the executable. @@ -406,7 +407,7 @@ if(MSVC) ) endif() - # include the language dll's for vs9 as well as the actuall dll's + # include the language dll's for vs9 as well as the actual dll's set(MSVC_MFCLOC_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC90.MFCLOC") # Install the manifest that allows DLLs to be loaded from the # directory containing the executable. @@ -487,7 +488,7 @@ if(MSVC) endif() endif() - # include the language dll's as well as the actuall dll's + # include the language dll's as well as the actual dll's set(MSVC_MFCLOC_DIR "${MSVC_REDIST_MFC_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.${MSVC_REDIST_NAME}.MFCLOC") set(__install__libs ${__install__libs} "${MSVC_MFCLOC_DIR}/mfc${v}chs.dll" diff --git a/Modules/CPackDeb.cmake b/Modules/Internal/CPack/CPackDeb.cmake index fdbae32..3042a16 100644 --- a/Modules/CPackDeb.cmake +++ b/Modules/Internal/CPack/CPackDeb.cmake @@ -1,537 +1,6 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CPackDeb -# -------- -# -# The built in (binary) CPack Deb generator (Unix only) -# -# Variables specific to CPack Debian (DEB) generator -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# CPackDeb may be used to create Deb package using :module:`CPack`. -# CPackDeb is a :module:`CPack` generator thus it uses the ``CPACK_XXX`` -# variables used by :module:`CPack`. -# -# CPackDeb generator should work on any Linux host but it will produce -# better deb package when Debian specific tools ``dpkg-xxx`` are usable on -# the build system. -# -# CPackDeb has specific features which are controlled by the specifics -# :code:`CPACK_DEBIAN_XXX` variables. -# -# :code:`CPACK_DEBIAN_<COMPONENT>_XXXX` variables may be used in order to have -# **component** specific values. Note however that ``<COMPONENT>`` refers to -# the **grouping name** written in upper case. It may be either a component name -# or a component GROUP name. -# -# Here are some CPackDeb wiki resources that are here for historic reasons and -# are no longer maintained but may still prove useful: -# -# - https://gitlab.kitware.com/cmake/community/wikis/doc/cpack/Configuration -# - https://gitlab.kitware.com/cmake/community/wikis/doc/cpack/PackageGenerators#deb-unix-only -# -# List of CPackDEB specific variables: -# -# .. variable:: CPACK_DEB_COMPONENT_INSTALL -# -# Enable component packaging for CPackDEB -# -# * Mandatory : NO -# * Default : OFF -# -# If enabled (ON) multiple packages are generated. By default a single package -# containing files of all components is generated. -# -# .. variable:: CPACK_DEBIAN_PACKAGE_NAME -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_NAME -# -# Set Package control field (variable is automatically transformed to lower -# case). -# -# * Mandatory : YES -# * Default : -# -# - :variable:`CPACK_PACKAGE_NAME` for non-component based -# installations -# - :variable:`CPACK_DEBIAN_PACKAGE_NAME` suffixed with -<COMPONENT> -# for component-based installations. -# -# See https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source -# -# .. variable:: CPACK_DEBIAN_FILE_NAME -# CPACK_DEBIAN_<COMPONENT>_FILE_NAME -# -# Package file name. -# -# * Mandatory : YES -# * Default : ``<CPACK_PACKAGE_FILE_NAME>[-<component>].deb`` -# -# This may be set to ``DEB-DEFAULT`` to allow CPackDeb to generate package file -# name by itself in deb format:: -# -# <PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb -# -# Alternatively provided package file name must end -# with either ``.deb`` or ``.ipk`` suffix. -# -# .. note:: -# -# Preferred setting of this variable is ``DEB-DEFAULT`` but for backward -# compatibility with CPackDeb in CMake prior to version 3.6 this feature -# is disabled by default. -# -# .. note:: -# -# By using non default filenames duplicate names may occur. Duplicate files -# get overwritten and it is up to the packager to set the variables in a -# manner that will prevent such errors. -# -# .. variable:: CPACK_DEBIAN_PACKAGE_EPOCH -# -# The Debian package epoch -# -# * Mandatory : No -# * Default : - -# -# Optional number that should be incremented when changing versioning schemas -# or fixing mistakes in the version numbers of older packages. -# -# .. variable:: CPACK_DEBIAN_PACKAGE_VERSION -# -# The Debian package version -# -# * Mandatory : YES -# * Default : :variable:`CPACK_PACKAGE_VERSION` -# -# This variable may contain only alphanumerics (A-Za-z0-9) and the characters -# . + - ~ (full stop, plus, hyphen, tilde) and should start with a digit. If -# :variable:`CPACK_DEBIAN_PACKAGE_RELEASE` is not set then hyphens are not -# allowed. -# -# .. note:: -# -# For backward compatibility with CMake 3.9 and lower a failed test of this -# variable's content is not a hard error when both -# :variable:`CPACK_DEBIAN_PACKAGE_RELEASE` and -# :variable:`CPACK_DEBIAN_PACKAGE_EPOCH` variables are not set. An author -# warning is reported instead. -# -# .. variable:: CPACK_DEBIAN_PACKAGE_RELEASE -# -# The Debian package release - Debian revision number. -# -# * Mandatory : No -# * Default : - -# -# This is the numbering of the DEB package itself, i.e. the version of the -# packaging and not the version of the content (see -# :variable:`CPACK_DEBIAN_PACKAGE_VERSION`). One may change the default value -# if the previous packaging was buggy and/or you want to put here a fancy Linux -# distro specific numbering. -# -# .. variable:: CPACK_DEBIAN_PACKAGE_ARCHITECTURE -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_ARCHITECTURE -# -# The Debian package architecture -# -# * Mandatory : YES -# * Default : Output of :code:`dpkg --print-architecture` (or :code:`i386` -# if :code:`dpkg` is not found) -# -# .. variable:: CPACK_DEBIAN_PACKAGE_DEPENDS -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS -# -# Sets the Debian dependencies of this package. -# -# * Mandatory : NO -# * Default : -# -# - An empty string for non-component based installations -# - :variable:`CPACK_DEBIAN_PACKAGE_DEPENDS` for component-based -# installations. -# -# .. note:: -# -# If :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS` or -# more specifically :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS` -# is set for this component, the discovered dependencies will be appended -# to :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS` instead of -# :variable:`CPACK_DEBIAN_PACKAGE_DEPENDS`. If -# :variable:`CPACK_DEBIAN_<COMPONENT>_PACKAGE_DEPENDS` is an empty string, -# only the automatically discovered dependencies will be set for this -# component. -# -# Example:: -# -# set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libc6 (< 2.4)") -# -# .. variable:: CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS -# -# Sets inter component dependencies if listed with -# :variable:`CPACK_COMPONENT_<compName>_DEPENDS` variables. -# -# * Mandatory : NO -# * Default : - -# -# .. variable:: CPACK_DEBIAN_PACKAGE_MAINTAINER -# -# The Debian package maintainer -# -# * Mandatory : YES -# * Default : :code:`CPACK_PACKAGE_CONTACT` -# -# .. variable:: CPACK_DEBIAN_PACKAGE_DESCRIPTION -# CPACK_COMPONENT_<COMPONENT>_DESCRIPTION -# -# The Debian package description -# -# * Mandatory : YES -# * Default : -# -# - :variable:`CPACK_DEBIAN_PACKAGE_DESCRIPTION` if set or -# - :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY` -# -# -# .. variable:: CPACK_DEBIAN_PACKAGE_SECTION -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_SECTION -# -# Set Section control field e.g. admin, devel, doc, ... -# -# * Mandatory : YES -# * Default : "devel" -# -# See https://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections -# -# .. variable:: CPACK_DEBIAN_ARCHIVE_TYPE -# -# The archive format used for creating the Debian package. -# -# * Mandatory : YES -# * Default : "paxr" -# -# Possible values are: -# -# - paxr -# - gnutar -# -# .. note:: -# -# Default pax archive format is the most portable format and generates -# packages that do not treat sparse files specially. -# GNU tar format on the other hand supports longer filenames. -# -# .. variable:: CPACK_DEBIAN_COMPRESSION_TYPE -# -# The compression used for creating the Debian package. -# -# * Mandatory : YES -# * Default : "gzip" -# -# Possible values are: -# -# - lzma -# - xz -# - bzip2 -# - gzip -# -# .. variable:: CPACK_DEBIAN_PACKAGE_PRIORITY -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_PRIORITY -# -# Set Priority control field e.g. required, important, standard, optional, -# extra -# -# * Mandatory : YES -# * Default : "optional" -# -# See https://www.debian.org/doc/debian-policy/ch-archive.html#s-priorities -# -# .. variable:: CPACK_DEBIAN_PACKAGE_HOMEPAGE -# -# The URL of the web site for this package, preferably (when applicable) the -# site from which the original source can be obtained and any additional -# upstream documentation or information may be found. -# -# * Mandatory : NO -# * Default : :variable:`CMAKE_PROJECT_HOMEPAGE_URL` -# -# .. note:: -# -# The content of this field is a simple URL without any surrounding -# characters such as <>. -# -# .. variable:: CPACK_DEBIAN_PACKAGE_SHLIBDEPS -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_SHLIBDEPS -# -# May be set to ON in order to use :code:`dpkg-shlibdeps` to generate -# better package dependency list. -# -# * Mandatory : NO -# * Default : -# -# - :variable:`CPACK_DEBIAN_PACKAGE_SHLIBDEPS` if set or -# - OFF -# -# .. note:: -# -# You may need set :variable:`CMAKE_INSTALL_RPATH` to an appropriate value -# if you use this feature, because if you don't :code:`dpkg-shlibdeps` -# may fail to find your own shared libs. -# See https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/RPATH-handling -# -# .. variable:: CPACK_DEBIAN_PACKAGE_DEBUG -# -# May be set when invoking cpack in order to trace debug information -# during CPackDeb run. -# -# * Mandatory : NO -# * Default : - -# -# .. variable:: CPACK_DEBIAN_PACKAGE_PREDEPENDS -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_PREDEPENDS -# -# Sets the `Pre-Depends` field of the Debian package. -# Like :variable:`Depends <CPACK_DEBIAN_PACKAGE_DEPENDS>`, except that it -# also forces :code:`dpkg` to complete installation of the packages named -# before even starting the installation of the package which declares the -# pre-dependency. -# -# * Mandatory : NO -# * Default : -# -# - An empty string for non-component based installations -# - :variable:`CPACK_DEBIAN_PACKAGE_PREDEPENDS` for component-based -# installations. -# -# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps -# -# .. variable:: CPACK_DEBIAN_PACKAGE_ENHANCES -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_ENHANCES -# -# Sets the `Enhances` field of the Debian package. -# Similar to :variable:`Suggests <CPACK_DEBIAN_PACKAGE_SUGGESTS>` but works -# in the opposite direction: declares that a package can enhance the -# functionality of another package. -# -# * Mandatory : NO -# * Default : -# -# - An empty string for non-component based installations -# - :variable:`CPACK_DEBIAN_PACKAGE_ENHANCES` for component-based -# installations. -# -# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps -# -# .. variable:: CPACK_DEBIAN_PACKAGE_BREAKS -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_BREAKS -# -# Sets the `Breaks` field of the Debian package. -# When a binary package (P) declares that it breaks other packages (B), -# :code:`dpkg` will not allow the package (P) which declares `Breaks` be -# **unpacked** unless the packages that will be broken (B) are deconfigured -# first. -# As long as the package (P) is configured, the previously deconfigured -# packages (B) cannot be reconfigured again. -# -# * Mandatory : NO -# * Default : -# -# - An empty string for non-component based installations -# - :variable:`CPACK_DEBIAN_PACKAGE_BREAKS` for component-based -# installations. -# -# See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-breaks -# -# .. variable:: CPACK_DEBIAN_PACKAGE_CONFLICTS -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONFLICTS -# -# Sets the `Conflicts` field of the Debian package. -# When one binary package declares a conflict with another using a `Conflicts` -# field, :code:`dpkg` will not allow them to be unpacked on the system at -# the same time. -# -# * Mandatory : NO -# * Default : -# -# - An empty string for non-component based installations -# - :variable:`CPACK_DEBIAN_PACKAGE_CONFLICTS` for component-based -# installations. -# -# See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-conflicts -# -# .. note:: -# -# This is a stronger restriction than -# :variable:`Breaks <CPACK_DEBIAN_PACKAGE_BREAKS>`, which prevents the -# broken package from being configured while the breaking package is in -# the "Unpacked" state but allows both packages to be unpacked at the same -# time. -# -# .. variable:: CPACK_DEBIAN_PACKAGE_PROVIDES -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_PROVIDES -# -# Sets the `Provides` field of the Debian package. -# A virtual package is one which appears in the `Provides` control field of -# another package. -# -# * Mandatory : NO -# * Default : -# -# - An empty string for non-component based installations -# - :variable:`CPACK_DEBIAN_PACKAGE_PROVIDES` for component-based -# installations. -# -# See https://www.debian.org/doc/debian-policy/ch-relationships.html#s-virtual -# -# .. variable:: CPACK_DEBIAN_PACKAGE_REPLACES -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_REPLACES -# -# Sets the `Replaces` field of the Debian package. -# Packages can declare in their control file that they should overwrite -# files in certain other packages, or completely replace other packages. -# -# * Mandatory : NO -# * Default : -# -# - An empty string for non-component based installations -# - :variable:`CPACK_DEBIAN_PACKAGE_REPLACES` for component-based -# installations. -# -# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps -# -# .. variable:: CPACK_DEBIAN_PACKAGE_RECOMMENDS -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_RECOMMENDS -# -# Sets the `Recommends` field of the Debian package. -# Allows packages to declare a strong, but not absolute, dependency on other -# packages. -# -# * Mandatory : NO -# * Default : -# -# - An empty string for non-component based installations -# - :variable:`CPACK_DEBIAN_PACKAGE_RECOMMENDS` for component-based -# installations. -# -# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps -# -# .. variable:: CPACK_DEBIAN_PACKAGE_SUGGESTS -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_SUGGESTS -# -# Sets the `Suggests` field of the Debian package. -# Allows packages to declare a suggested package install grouping. -# -# * Mandatory : NO -# * Default : -# -# - An empty string for non-component based installations -# - :variable:`CPACK_DEBIAN_PACKAGE_SUGGESTS` for component-based -# installations. -# -# See http://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps -# -# .. variable:: CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS -# -# * Mandatory : NO -# * Default : OFF -# -# Allows to generate shlibs control file automatically. Compatibility is defined by -# :variable:`CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY` variable value. -# -# .. note:: -# -# Libraries are only considered if they have both library name and version -# set. This can be done by setting SOVERSION property with -# :command:`set_target_properties` command. -# -# .. variable:: CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY -# -# Compatibility policy for auto-generated shlibs control file. -# -# * Mandatory : NO -# * Default : "=" -# -# Defines compatibility policy for auto-generated shlibs control file. -# Possible values: "=", ">=" -# -# See https://www.debian.org/doc/debian-policy/ch-sharedlibs.html#s-sharedlibs-shlibdeps -# -# .. variable:: CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_EXTRA -# -# This variable allow advanced user to add custom script to the -# control.tar.gz. -# Typical usage is for conffiles, postinst, postrm, prerm. -# -# * Mandatory : NO -# * Default : - -# -# Usage:: -# -# set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA -# "${CMAKE_CURRENT_SOURCE_DIR}/prerm;${CMAKE_CURRENT_SOURCE_DIR}/postrm") -# -# .. note:: -# -# The original permissions of the files will be used in the final -# package unless the variable -# :variable:`CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION` is set. -# In particular, the scripts should have the proper executable -# flag prior to the generation of the package. -# -# .. variable:: CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_CONTROL_STRICT_PERMISSION -# -# This variable indicates if the Debian policy on control files should be -# strictly followed. -# -# * Mandatory : NO -# * Default : FALSE -# -# Usage:: -# -# set(CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION TRUE) -# -# .. note:: -# -# This overrides the permissions on the original files, following the rules -# set by Debian policy -# https://www.debian.org/doc/debian-policy/ch-files.html#s-permissions-owners -# -# .. variable:: CPACK_DEBIAN_PACKAGE_SOURCE -# CPACK_DEBIAN_<COMPONENT>_PACKAGE_SOURCE -# -# Sets the ``Source`` field of the binary Debian package. -# When the binary package name is not the same as the source package name -# (in particular when several components/binaries are generated from one -# source) the source from which the binary has been generated should be -# indicated with the field ``Source``. -# -# * Mandatory : NO -# * Default : -# -# - An empty string for non-component based installations -# - :variable:`CPACK_DEBIAN_PACKAGE_SOURCE` for component-based -# installations. -# -# See https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Source -# -# .. note:: -# -# This value is not interpreted. It is possible to pass an optional -# revision number of the referenced source package as well. -# -# Building Debian packages on Windows -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# To communicate UNIX file permissions from the install stage -# to the CPack DEB generator the "cmake_mode_t" NTFS -# alternate data stream (ADT) is used. -# -# When a filesystem without ADT support is used only owner read/write -# permissions can be preserved. - # CPack script for creating Debian package # Author: Mathieu Malaterre # @@ -541,6 +10,9 @@ if(CMAKE_BINARY_DIR) message(FATAL_ERROR "CPackDeb.cmake may only be used by CPack internally.") endif() +cmake_policy(PUSH) +cmake_policy(SET CMP0057 NEW) # if IN_LIST + function(cpack_deb_variable_fallback OUTPUT_VAR_NAME) set(FALLBACK_VAR_NAMES ${ARGN}) @@ -592,6 +64,8 @@ function(cpack_deb_prepare_package_vars) endif() set(WDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_PATH}") + set(DBGSYMDIR "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_PACKAGE_FILE_NAME}${CPACK_DEB_PACKAGE_COMPONENT_PART_PATH}-dbgsym") + file(REMOVE_RECURSE "${DBGSYMDIR}") # per component automatic discover: some of the component might not have # binaries. @@ -608,7 +82,10 @@ function(cpack_deb_prepare_package_vars) endif() endif() - if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OR CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS) + cpack_deb_variable_fallback("CPACK_DEBIAN_DEBUGINFO_PACKAGE" + "CPACK_DEBIAN_${_local_component_name}_DEBUGINFO_PACKAGE" + "CPACK_DEBIAN_DEBUGINFO_PACKAGE") + if(CPACK_DEBIAN_PACKAGE_SHLIBDEPS OR CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS OR CPACK_DEBIAN_DEBUGINFO_PACKAGE) # Generating binary list - Get type of all install files file(GLOB_RECURSE FILE_PATHS_ LIST_DIRECTORIES false RELATIVE "${WDIR}" "${WDIR}/*") @@ -620,7 +97,7 @@ function(cpack_deb_prepare_package_vars) # get file info so that we can determine if file is executable or not unset(CPACK_DEB_INSTALL_FILES) foreach(FILE_ IN LISTS FILE_PATHS_) - execute_process(COMMAND env LC_ALL=C ${FILE_EXECUTABLE} "./${FILE_}" + execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${FILE_EXECUTABLE} "./${FILE_}" WORKING_DIRECTORY "${WDIR}" RESULT_VARIABLE FILE_RESULT_ OUTPUT_VARIABLE INSTALL_FILE_) @@ -642,6 +119,81 @@ function(cpack_deb_prepare_package_vars) string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}") list(APPEND CPACK_DEB_SHARED_OBJECT_FILES "${CMAKE_MATCH_1}") endif() + if(_FILE MATCHES "ELF.*not stripped") + string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}") + list(APPEND CPACK_DEB_UNSTRIPPED_FILES "${CMAKE_MATCH_1}") + endif() + endforeach() + endif() + + find_program(READELF_EXECUTABLE NAMES readelf) + + if(CPACK_DEBIAN_DEBUGINFO_PACKAGE AND CPACK_DEB_UNSTRIPPED_FILES) + find_program(OBJCOPY_EXECUTABLE NAMES objcopy) + + if(NOT OBJCOPY_EXECUTABLE) + message(FATAL_ERROR "debuginfo packages require the objcopy tool") + endif() + if(NOT READELF_EXECUTABLE) + message(FATAL_ERROR "debuginfo packages require the readelf tool") + endif() + + file(RELATIVE_PATH _DBGSYM_ROOT "${CPACK_TEMPORARY_DIRECTORY}" "${DBGSYMDIR}") + foreach(_FILE IN LISTS CPACK_DEB_UNSTRIPPED_FILES) + + # Get the file's Build ID + execute_process(COMMAND env LC_ALL=C ${READELF_EXECUTABLE} -n "${_FILE}" + WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}" + OUTPUT_VARIABLE READELF_OUTPUT + RESULT_VARIABLE READELF_RESULT + ERROR_VARIABLE READELF_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE ) + if(NOT READELF_RESULT EQUAL 0) + message(FATAL_ERROR "CPackDeb: readelf: '${READELF_ERROR}';\n" + "executed command: '${READELF_EXECUTABLE} -n ${_FILE}'") + endif() + if(READELF_OUTPUT MATCHES "Build ID: ([0-9a-zA-Z][0-9a-zA-Z])([0-9a-zA-Z]*)") + set(_BUILD_ID_START ${CMAKE_MATCH_1}) + set(_BUILD_ID_REMAINING ${CMAKE_MATCH_2}) + list(APPEND BUILD_IDS ${_BUILD_ID_START}${_BUILD_ID_REMAINING}) + else() + message(FATAL_ERROR "Unable to determine Build ID for ${_FILE}") + endif() + + # Split out the debug symbols from the binaries + set(_FILE_DBGSYM ${_DBGSYM_ROOT}/usr/lib/debug/.build-id/${_BUILD_ID_START}/${_BUILD_ID_REMAINING}.debug) + get_filename_component(_OUT_DIR "${_FILE_DBGSYM}" DIRECTORY) + file(MAKE_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}/${_OUT_DIR}") + execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --only-keep-debug "${_FILE}" "${_FILE_DBGSYM}" + WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}" + OUTPUT_VARIABLE OBJCOPY_OUTPUT + RESULT_VARIABLE OBJCOPY_RESULT + ERROR_VARIABLE OBJCOPY_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE ) + if(NOT OBJCOPY_RESULT EQUAL 0) + message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n" + "executed command: '${OBJCOPY_EXECUTABLE} --only-keep-debug ${_FILE} ${_FILE_DBGSYM}'") + endif() + execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --strip-unneeded ${_FILE} + WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}" + OUTPUT_VARIABLE OBJCOPY_OUTPUT + RESULT_VARIABLE OBJCOPY_RESULT + ERROR_VARIABLE OBJCOPY_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE ) + if(NOT OBJCOPY_RESULT EQUAL 0) + message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n" + "executed command: '${OBJCOPY_EXECUTABLE} --strip-debug ${_FILE}'") + endif() + execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE} + WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}" + OUTPUT_VARIABLE OBJCOPY_OUTPUT + RESULT_VARIABLE OBJCOPY_RESULT + ERROR_VARIABLE OBJCOPY_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE ) + if(NOT OBJCOPY_RESULT EQUAL 0) + message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n" + "executed command: '${OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE}'") + endif() endforeach() endif() @@ -651,7 +203,7 @@ function(cpack_deb_prepare_package_vars) if(SHLIBDEPS_EXECUTABLE) # Check version of the dpkg-shlibdeps tool using CPackDEB method - execute_process(COMMAND env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --version + execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --version OUTPUT_VARIABLE _TMP_VERSION ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) @@ -679,7 +231,7 @@ function(cpack_deb_prepare_package_vars) file(MAKE_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}/DEBIAN") # Add --ignore-missing-info if the tool supports it - execute_process(COMMAND env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --help + execute_process(COMMAND ${CMAKE_COMMAND} -E env LC_ALL=C ${SHLIBDEPS_EXECUTABLE} --help OUTPUT_VARIABLE _TMP_HELP ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) @@ -978,8 +530,6 @@ function(cpack_deb_prepare_package_vars) set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS_POLICY "=") endif() - find_program(READELF_EXECUTABLE NAMES readelf) - if(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS) if(READELF_EXECUTABLE) foreach(_FILE IN LISTS CPACK_DEB_SHARED_OBJECT_FILES) @@ -1035,18 +585,24 @@ function(cpack_deb_prepare_package_vars) # <foo>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb set(CPACK_OUTPUT_FILE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") + set(CPACK_DBGSYM_OUTPUT_FILE_NAME + "${CPACK_DEBIAN_PACKAGE_NAME}-dbgsym_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.ddeb") else() if(NOT CPACK_DEBIAN_FILE_NAME MATCHES ".*\\.(deb|ipk)") message(FATAL_ERROR "'${CPACK_DEBIAN_FILE_NAME}' is not a valid DEB package file name as it must end with '.deb' or '.ipk'!") endif() set(CPACK_OUTPUT_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}") + string(REGEX REPLACE "\.deb$" "-dbgsym.ddeb" CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_DEBIAN_FILE_NAME}") endif() set(CPACK_TEMPORARY_PACKAGE_FILE_NAME "${CPACK_TOPLEVEL_DIRECTORY}/${CPACK_OUTPUT_FILE_NAME}") get_filename_component(BINARY_DIR "${CPACK_OUTPUT_FILE_PATH}" DIRECTORY) set(CPACK_OUTPUT_FILE_PATH "${BINARY_DIR}/${CPACK_OUTPUT_FILE_NAME}") - endif() # else() back compatibility - don't change the name + else() + # back compatibility - don't change the name + string(REGEX REPLACE "\.deb$" "-dbgsym.ddeb" CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_OUTPUT_FILE_NAME}") + endif() # Print out some debug information if we were asked for that if(CPACK_DEBIAN_PACKAGE_DEBUG) @@ -1107,6 +663,16 @@ function(cpack_deb_prepare_package_vars) set(GEN_CPACK_DEBIAN_GENERATE_POSTINST "${CPACK_DEBIAN_GENERATE_POSTINST}" PARENT_SCOPE) set(GEN_CPACK_DEBIAN_GENERATE_POSTRM "${CPACK_DEBIAN_GENERATE_POSTRM}" PARENT_SCOPE) set(GEN_WDIR "${WDIR}" PARENT_SCOPE) + + set(GEN_CPACK_DEBIAN_DEBUGINFO_PACKAGE "${CPACK_DEBIAN_DEBUGINFO_PACKAGE}" PARENT_SCOPE) + if(BUILD_IDS) + set(GEN_DBGSYMDIR "${DBGSYMDIR}" PARENT_SCOPE) + set(GEN_CPACK_DBGSYM_OUTPUT_FILE_NAME "${CPACK_DBGSYM_OUTPUT_FILE_NAME}" PARENT_SCOPE) + string(REPLACE ";" " " BUILD_IDS "${BUILD_IDS}") + set(GEN_BUILD_IDS "${BUILD_IDS}" PARENT_SCOPE) + endif() endfunction() cpack_deb_prepare_package_vars() + +cmake_policy(POP) diff --git a/Modules/Internal/CPack/CPackExt.cmake b/Modules/Internal/CPack/CPackExt.cmake new file mode 100644 index 0000000..e52d978 --- /dev/null +++ b/Modules/Internal/CPack/CPackExt.cmake @@ -0,0 +1,53 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +if(NOT "${CPACK_EXT_REQUESTED_VERSIONS}" STREQUAL "") + unset(_found_major) + + foreach(_req_version IN LISTS CPACK_EXT_REQUESTED_VERSIONS) + if(_req_version MATCHES "^([0-9]+)\\.([0-9]+)$") + set(_req_major "${CMAKE_MATCH_1}") + set(_req_minor "${CMAKE_MATCH_2}") + + foreach(_known_version IN LISTS CPACK_EXT_KNOWN_VERSIONS) + string(REGEX MATCH + "^([0-9]+)\\.([0-9]+)$" + _known_version_dummy + "${_known_version}" + ) + + set(_known_major "${CMAKE_MATCH_1}") + set(_known_minor "${CMAKE_MATCH_2}") + + if(_req_major EQUAL _known_major AND NOT _known_minor LESS _req_minor) + set(_found_major "${_known_major}") + set(_found_minor "${_known_minor}") + break() + endif() + endforeach() + + if(DEFINED _found_major) + break() + endif() + endif() + endforeach() + + if(DEFINED _found_major) + set(CPACK_EXT_SELECTED_MAJOR "${_found_major}") + set(CPACK_EXT_SELECTED_MINOR "${_found_minor}") + set(CPACK_EXT_SELECTED_VERSION "${_found_major}.${_found_minor}") + else() + message(FATAL_ERROR + "Could not find a suitable version in CPACK_EXT_REQUESTED_VERSIONS" + ) + endif() +else() + list(GET CPACK_EXT_KNOWN_VERSIONS 0 CPACK_EXT_SELECTED_VERSION) + string(REGEX MATCH + "^([0-9]+)\\.([0-9]+)$" + _dummy + "${CPACK_EXT_SELECTED_VERSION}" + ) + set(CPACK_EXT_SELECTED_MAJOR "${CMAKE_MATCH_1}") + set(CPACK_EXT_SELECTED_MINOR "${CMAKE_MATCH_2}") +endif() diff --git a/Modules/Internal/CPack/CPackFreeBSD.cmake b/Modules/Internal/CPack/CPackFreeBSD.cmake new file mode 100644 index 0000000..16f906c --- /dev/null +++ b/Modules/Internal/CPack/CPackFreeBSD.cmake @@ -0,0 +1,107 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + + +if(CMAKE_BINARY_DIR) + message(FATAL_ERROR "CPackFreeBSD.cmake may only be used by CPack internally.") +endif() + +if(NOT UNIX) + message(FATAL_ERROR "CPackFreeBSD.cmake may only be used under UNIX.") +endif() + + +### +# +# These bits are copied from the Debian packaging file; slightly modified. +# They are used for filling in FreeBSD-packaging variables that can take +# on values from elsewhere -- e.g. the package description may as well be +# copied from Debian. +# +function(_cpack_freebsd_fallback_var OUTPUT_VAR_NAME) + set(FALLBACK_VAR_NAMES ${ARGN}) + + set(VALUE "${${OUTPUT_VAR_NAME}}") + if(VALUE) + return() + endif() + + foreach(variable_name IN LISTS FALLBACK_VAR_NAMES) + if(${variable_name}) + set(${OUTPUT_VAR_NAME} "${${variable_name}}" PARENT_SCOPE) + set(VALUE "${${variable_name}}") + break() + endif() + endforeach() + if(NOT VALUE) + message(WARNING "Variable ${OUTPUT_VAR_NAME} could not be given a fallback value from any variable ${FALLBACK_VAR_NAMES}.") + endif() +endfunction() + +function(check_required_var VAR_NAME) + if(NOT ${VAR_NAME}) + message(FATAL_ERROR "Variable ${VAR_NAME} is not set.") + endif() +endfunction() + +set(_cpack_freebsd_fallback_origin "misc/bogus") + +_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_NAME" + "CPACK_PACKAGE_NAME" + "CMAKE_PROJECT_NAME" + ) + +set(_cpack_freebsd_fallback_www "http://example.com/?pkg=${CPACK_FREEBSD_PACKAGE_NAME}") + +_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_COMMENT" + "CPACK_PACKAGE_DESCRIPTION_SUMMARY" + ) + +# TODO: maybe read the PACKAGE_DESCRIPTION file for the longer +# FreeBSD pkg-descr? +_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_DESCRIPTION" + "CPACK_DEBIAN_PACKAGE_DESCRIPTION" + "CPACK_PACKAGE_DESCRIPTION_SUMMARY" + "PACKAGE_DESCRIPTION" + ) + +# There's really only one homepage for a project, so +# re-use the Debian setting if it's there. +_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_WWW" + "CMAKE_PROJECT_HOMEPAGE_URL" + "CPACK_DEBIAN_PACKAGE_HOMEPAGE" + "_cpack_freebsd_fallback_www" + ) + +_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_VERSION" + "CMAKE_PROJECT_VERSION" + "${CMAKE_PROJECT_NAME}_VERSION" + "PROJECT_VERSION" + "CPACK_PACKAGE_VERSION" + "CPACK_PACKAGE_VERSION" + ) + +_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_MAINTAINER" + "CPACK_PACKAGE_CONTACT" + ) + +_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_LICENSE" + "CPACK_RPM_PACKAGE_LICENSE" + ) + +_cpack_freebsd_fallback_var("CPACK_FREEBSD_PACKAGE_ORIGIN" + "_cpack_freebsd_fallback_origin" + ) + +if(NOT CPACK_FREEBSD_PACKAGE_CATEGORIES) + string(REGEX REPLACE "/.*" "" CPACK_FREEBSD_PACKAGE_CATEGORIES ${CPACK_FREEBSD_PACKAGE_ORIGIN}) +endif() + +check_required_var("CPACK_FREEBSD_PACKAGE_NAME") +check_required_var("CPACK_FREEBSD_PACKAGE_ORIGIN") +check_required_var("CPACK_FREEBSD_PACKAGE_VERSION") +check_required_var("CPACK_FREEBSD_PACKAGE_MAINTAINER") +check_required_var("CPACK_FREEBSD_PACKAGE_COMMENT") +check_required_var("CPACK_FREEBSD_PACKAGE_DESCRIPTION") +check_required_var("CPACK_FREEBSD_PACKAGE_WWW") +check_required_var("CPACK_FREEBSD_PACKAGE_LICENSE") diff --git a/Modules/CPackNuGet.cmake b/Modules/Internal/CPack/CPackNuGet.cmake index 05403bc..198ccad 100644 --- a/Modules/CPackNuGet.cmake +++ b/Modules/Internal/CPack/CPackNuGet.cmake @@ -1,199 +1,6 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#[=======================================================================[.rst: -CPackNuGet ----------- - -When build a NuGet package there is no direct way to control an output -filename due a lack of the corresponding CLI option of NuGet, so there -is no ``CPACK_NUGET_PACKAGE_FILENAME`` variable. To form the output filename -NuGet uses the package name and the version according to its built-in rules. - -Also, be aware that including a top level directory -(``CPACK_INCLUDE_TOPLEVEL_DIRECTORY``) is ignored by this generator. - - -Variables specific to CPack NuGet generator -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -CPackNuGet may be used to create NuGet packages using :module:`CPack`. -CPackNuGet is a :module:`CPack` generator thus it uses the ``CPACK_XXX`` -variables used by :module:`CPack`. - -CPackNuGet has specific features which are controlled by the specifics -:code:`CPACK_NUGET_XXX` variables. In the "one per group" mode -(see :variable:`CPACK_COMPONENTS_GROUPING`), ``<compName>`` placeholder -in the variables below would contain a group name (uppercased and turned into -a "C" identifier). - -List of CPackNuGet specific variables: - -.. variable:: CPACK_NUGET_COMPONENT_INSTALL - - Enable component packaging for CPackNuGet - - * Mandatory : NO - * Default : OFF - -.. variable:: CPACK_NUGET_PACKAGE_NAME - CPACK_NUGET_<compName>_PACKAGE_NAME - - The NUGET package name. - - * Mandatory : YES - * Default : :variable:`CPACK_PACKAGE_NAME` - -.. variable:: CPACK_NUGET_PACKAGE_VERSION - CPACK_NUGET_<compName>_PACKAGE_VERSION - - The NuGet package version. - - * Mandatory : YES - * Default : :variable:`CPACK_PACKAGE_VERSION` - -.. variable:: CPACK_NUGET_PACKAGE_DESCRIPTION - CPACK_NUGET_<compName>_PACKAGE_DESCRIPTION - - A long description of the package for UI display. - - * Mandatory : YES - * Default : - - :variable:`CPACK_COMPONENT_<compName>_DESCRIPTION`, - - ``CPACK_COMPONENT_GROUP_<groupName>_DESCRIPTION``, - - :variable:`CPACK_PACKAGE_DESCRIPTION` - -.. variable:: CPACK_NUGET_PACKAGE_AUTHORS - CPACK_NUGET_<compName>_PACKAGE_AUTHORS - - A comma-separated list of packages authors, matching the profile names - on nuget.org_. These are displayed in the NuGet Gallery on - nuget.org_ and are used to cross-reference packages by the same - authors. - - * Mandatory : YES - * Default : :variable:`CPACK_PACKAGE_VENDOR` - -.. variable:: CPACK_NUGET_PACKAGE_TITLE - CPACK_NUGET_<compName>_PACKAGE_TITLE - - A human-friendly title of the package, typically used in UI displays - as on nuget.org_ and the Package Manager in Visual Studio. If not - specified, the package ID is used. - - * Mandatory : NO - * Default : - - :variable:`CPACK_COMPONENT_<compName>_DISPLAY_NAME`, - - ``CPACK_COMPONENT_GROUP_<groupName>_DISPLAY_NAME`` - -.. variable:: CPACK_NUGET_PACKAGE_OWNERS - CPACK_NUGET_<compName>_PACKAGE_OWNERS - - A comma-separated list of the package creators using profile names - on nuget.org_. This is often the same list as in authors, - and is ignored when uploading the package to nuget.org_. - - * Mandatory : NO - * Default : - - -.. variable:: CPACK_NUGET_PACKAGE_HOMEPAGE_URL - CPACK_NUGET_<compName>_PACKAGE_HOMEPAGE_URL - - A URL for the package's home page, often shown in UI displays as well - as nuget.org_. - - * Mandatory : NO - * Default : :variable:`CPACK_PACKAGE_HOMEPAGE_URL` - -.. variable:: CPACK_NUGET_PACKAGE_LICENSEURL - CPACK_NUGET_<compName>_PACKAGE_LICENSEURL - - A URL for the package's license, often shown in UI displays as well - as nuget.org_. - - * Mandatory : NO - * Default : - - -.. variable:: CPACK_NUGET_PACKAGE_ICONURL - CPACK_NUGET_<compName>_PACKAGE_ICONURL - - A URL for a 64x64 image with transparency background to use as the - icon for the package in UI display. - - * Mandatory : NO - * Default : - - -.. variable:: CPACK_NUGET_PACKAGE_DESCRIPTION_SUMMARY - CPACK_NUGET_<compName>_PACKAGE_DESCRIPTION_SUMMARY - - A short description of the package for UI display. If omitted, a - truncated version of description is used. - - * Mandatory : NO - * Default : :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY` - -.. variable:: CPACK_NUGET_PACKAGE_RELEASE_NOTES - CPACK_NUGET_<compName>_PACKAGE_RELEASE_NOTES - - A description of the changes made in this release of the package, - often used in UI like the Updates tab of the Visual Studio Package - Manager in place of the package description. - - * Mandatory : NO - * Default : - - -.. variable:: CPACK_NUGET_PACKAGE_COPYRIGHT - CPACK_NUGET_<compName>_PACKAGE_COPYRIGHT - - Copyright details for the package. - - * Mandatory : NO - * Default : - - -.. variable:: CPACK_NUGET_PACKAGE_TAGS - CPACK_NUGET_<compName>_PACKAGE_TAGS - - A space-delimited list of tags and keywords that describe the - package and aid discoverability of packages through search and - filtering. - - * Mandatory : NO - * Default : - - -.. variable:: CPACK_NUGET_PACKAGE_DEPENDENCIES - CPACK_NUGET_<compName>_PACKAGE_DEPENDENCIES - - A list of package dependencies. - - * Mandatory : NO - * Default : - - -.. variable:: CPACK_NUGET_PACKAGE_DEPENDENCIES_<dependency>_VERSION - CPACK_NUGET_<compName>_PACKAGE_DEPENDENCIES_<dependency>_VERSION - - A `version specification`_ for the particular dependency, where - ``<dependency>`` is an item of the dependency list (see above) - transformed with ``MAKE_C_IDENTIFIER`` function of :command:`string` - command. - - * Mandatory : NO - * Default : - - -.. variable:: CPACK_NUGET_PACKAGE_DEBUG - - Enable debug messages while executing ``CPackNuGet.cmake``. - - * Mandatory : NO - * Default : OFF - - -.. _nuget.org: http://nuget.org -.. _version specification: https://docs.microsoft.com/en-us/nuget/reference/package-versioning#version-ranges-and-wildcards - -.. NuGet spec docs https://docs.microsoft.com/en-us/nuget/reference/nuspec - -#]=======================================================================] - # Author: Alex Turbov if(CMAKE_BINARY_DIR) @@ -455,7 +262,7 @@ function(_cpack_nuget_render_spec) # NuGet will name it properly. _cpack_nuget_debug("Rendering `${CPACK_TEMPORARY_DIRECTORY}/CPack.NuGet.nuspec` file...") configure_file( - "${CMAKE_CURRENT_LIST_DIR}/CPack.NuGet.nuspec.in" + "${CMAKE_ROOT}/Modules/CPack.NuGet.nuspec.in" "${CPACK_TEMPORARY_DIRECTORY}/CPack.NuGet.nuspec" @ONLY ) diff --git a/Modules/CPackRPM.cmake b/Modules/Internal/CPack/CPackRPM.cmake index 60b3abe..2de71ee 100644 --- a/Modules/CPackRPM.cmake +++ b/Modules/Internal/CPack/CPackRPM.cmake @@ -1,965 +1,11 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# CPackRPM -# -------- -# -# The built in (binary) CPack RPM generator (Unix only) -# -# Variables specific to CPack RPM generator -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# CPackRPM may be used to create RPM packages using :module:`CPack`. -# CPackRPM is a :module:`CPack` generator thus it uses the ``CPACK_XXX`` -# variables used by :module:`CPack`. -# -# CPackRPM has specific features which are controlled by the specifics -# :code:`CPACK_RPM_XXX` variables. -# -# :code:`CPACK_RPM_<COMPONENT>_XXXX` variables may be used in order to have -# **component** specific values. Note however that ``<COMPONENT>`` refers to the -# **grouping name** written in upper case. It may be either a component name or -# a component GROUP name. Usually those variables correspond to RPM spec file -# entities. One may find information about spec files here -# http://www.rpm.org/wiki/Docs -# -# .. note:: -# -# `<COMPONENT>` part of variables is preferred to be in upper case (for e.g. if -# component is named `foo` then use `CPACK_RPM_FOO_XXXX` variable name format) -# as is with other `CPACK_<COMPONENT>_XXXX` variables. -# For the purposes of back compatibility (CMake/CPack version 3.5 and lower) -# support for same cased component (e.g. `fOo` would be used as -# `CPACK_RPM_fOo_XXXX`) is still supported for variables defined in older -# versions of CMake/CPack but is not guaranteed for variables that -# will be added in the future. For the sake of back compatibility same cased -# component variables also override upper cased versions where both are -# present. -# -# Here are some CPackRPM wiki resources that are here for historic reasons and -# are no longer maintained but may still prove useful: -# -# - https://gitlab.kitware.com/cmake/community/wikis/doc/cpack/Configuration -# - https://gitlab.kitware.com/cmake/community/wikis/doc/cpack/PackageGenerators#rpm-unix-only -# -# List of CPackRPM specific variables: -# -# .. variable:: CPACK_RPM_COMPONENT_INSTALL -# -# Enable component packaging for CPackRPM -# -# * Mandatory : NO -# * Default : OFF -# -# If enabled (ON) multiple packages are generated. By default a single package -# containing files of all components is generated. -# -# .. variable:: CPACK_RPM_PACKAGE_SUMMARY -# CPACK_RPM_<component>_PACKAGE_SUMMARY -# -# The RPM package summary. -# -# * Mandatory : YES -# * Default : :variable:`CPACK_PACKAGE_DESCRIPTION_SUMMARY` -# -# .. variable:: CPACK_RPM_PACKAGE_NAME -# CPACK_RPM_<component>_PACKAGE_NAME -# -# The RPM package name. -# -# * Mandatory : YES -# * Default : :variable:`CPACK_PACKAGE_NAME` -# -# .. variable:: CPACK_RPM_FILE_NAME -# CPACK_RPM_<component>_FILE_NAME -# -# Package file name. -# -# * Mandatory : YES -# * Default : ``<CPACK_PACKAGE_FILE_NAME>[-<component>].rpm`` with spaces -# replaced by '-' -# -# This may be set to ``RPM-DEFAULT`` to allow rpmbuild tool to generate package -# file name by itself. -# Alternatively provided package file name must end with ``.rpm`` suffix. -# -# .. note:: -# -# By using user provided spec file, rpm macro extensions such as for -# generating debuginfo packages or by simply using multiple components more -# than one rpm file may be generated, either from a single spec file or from -# multiple spec files (each component execution produces it's own spec file). -# In such cases duplicate file names may occur as a result of this variable -# setting or spec file content structure. Duplicate files get overwritten -# and it is up to the packager to set the variables in a manner that will -# prevent such errors. -# -# .. variable:: CPACK_RPM_MAIN_COMPONENT -# -# Main component that is packaged without component suffix. -# -# * Mandatory : NO -# * Default : - -# -# This variable can be set to any component or group name so that component or -# group rpm package is generated without component suffix in filename and -# package name. -# -# .. variable:: CPACK_RPM_PACKAGE_EPOCH -# -# The RPM package epoch -# -# * Mandatory : No -# * Default : - -# -# Optional number that should be incremented when changing versioning schemas -# or fixing mistakes in the version numbers of older packages. -# -# .. variable:: CPACK_RPM_PACKAGE_VERSION -# -# The RPM package version. -# -# * Mandatory : YES -# * Default : :variable:`CPACK_PACKAGE_VERSION` -# -# .. variable:: CPACK_RPM_PACKAGE_ARCHITECTURE -# CPACK_RPM_<component>_PACKAGE_ARCHITECTURE -# -# The RPM package architecture. -# -# * Mandatory : YES -# * Default : Native architecture output by ``uname -m`` -# -# This may be set to ``noarch`` if you know you are building a noarch package. -# -# .. variable:: CPACK_RPM_PACKAGE_RELEASE -# -# The RPM package release. -# -# * Mandatory : YES -# * Default : 1 -# -# This is the numbering of the RPM package itself, i.e. the version of the -# packaging and not the version of the content (see -# :variable:`CPACK_RPM_PACKAGE_VERSION`). One may change the default value if -# the previous packaging was buggy and/or you want to put here a fancy Linux -# distro specific numbering. -# -# .. note:: -# -# This is the string that goes into the RPM ``Release:`` field. Some distros -# (e.g. Fedora, CentOS) require ``1%{?dist}`` format and not just a number. -# ``%{?dist}`` part can be added by setting :variable:`CPACK_RPM_PACKAGE_RELEASE_DIST`. -# -# .. variable:: CPACK_RPM_PACKAGE_RELEASE_DIST -# -# The dist tag that is added RPM ``Release:`` field. -# -# * Mandatory : NO -# * Default : OFF -# -# This is the reported ``%{dist}`` tag from the current distribution or empty -# ``%{dist}`` if RPM macro is not set. If this variable is set then RPM -# ``Release:`` field value is set to ``${CPACK_RPM_PACKAGE_RELEASE}%{?dist}``. -# -# .. variable:: CPACK_RPM_PACKAGE_LICENSE -# -# The RPM package license policy. -# -# * Mandatory : YES -# * Default : "unknown" -# -# .. variable:: CPACK_RPM_PACKAGE_GROUP -# CPACK_RPM_<component>_PACKAGE_GROUP -# -# The RPM package group. -# -# * Mandatory : YES -# * Default : "unknown" -# -# .. variable:: CPACK_RPM_PACKAGE_VENDOR -# -# The RPM package vendor. -# -# * Mandatory : YES -# * Default : CPACK_PACKAGE_VENDOR if set or "unknown" -# -# .. variable:: CPACK_RPM_PACKAGE_URL -# CPACK_RPM_<component>_PACKAGE_URL -# -# The projects URL. -# -# * Mandatory : NO -# * Default : :variable:`CMAKE_PROJECT_HOMEPAGE_URL` -# -# .. variable:: CPACK_RPM_PACKAGE_DESCRIPTION -# CPACK_RPM_<component>_PACKAGE_DESCRIPTION -# -# RPM package description. -# -# * Mandatory : YES -# * Default : :variable:`CPACK_COMPONENT_<compName>_DESCRIPTION` (component -# based installers only) if set, :variable:`CPACK_PACKAGE_DESCRIPTION_FILE` -# if set or "no package description available" -# -# .. variable:: CPACK_RPM_COMPRESSION_TYPE -# -# RPM compression type. -# -# * Mandatory : NO -# * Default : - -# -# May be used to override RPM compression type to be used to build the -# RPM. For example some Linux distribution now default to lzma or xz -# compression whereas older cannot use such RPM. Using this one can enforce -# compression type to be used. -# -# Possible values are: -# -# - lzma -# - xz -# - bzip2 -# - gzip -# -# .. variable:: CPACK_RPM_PACKAGE_AUTOREQ -# CPACK_RPM_<component>_PACKAGE_AUTOREQ -# -# RPM spec autoreq field. -# -# * Mandatory : NO -# * Default : - -# -# May be used to enable (1, yes) or disable (0, no) automatic shared libraries -# dependency detection. Dependencies are added to requires list. -# -# .. note:: -# -# By default automatic dependency detection is enabled by rpm generator. -# -# .. variable:: CPACK_RPM_PACKAGE_AUTOPROV -# CPACK_RPM_<component>_PACKAGE_AUTOPROV -# -# RPM spec autoprov field. -# -# * Mandatory : NO -# * Default : - -# -# May be used to enable (1, yes) or disable (0, no) automatic listing of shared -# libraries that are provided by the package. Shared libraries are added to -# provides list. -# -# .. note:: -# -# By default automatic provides detection is enabled by rpm generator. -# -# .. variable:: CPACK_RPM_PACKAGE_AUTOREQPROV -# CPACK_RPM_<component>_PACKAGE_AUTOREQPROV -# -# RPM spec autoreqprov field. -# -# * Mandatory : NO -# * Default : - -# -# Variable enables/disables autoreq and autoprov at the same time. -# See :variable:`CPACK_RPM_PACKAGE_AUTOREQ` and :variable:`CPACK_RPM_PACKAGE_AUTOPROV` -# for more details. -# -# .. note:: -# -# By default automatic detection feature is enabled by rpm. -# -# .. variable:: CPACK_RPM_PACKAGE_REQUIRES -# CPACK_RPM_<component>_PACKAGE_REQUIRES -# -# RPM spec requires field. -# -# * Mandatory : NO -# * Default : - -# -# May be used to set RPM dependencies (requires). Note that you must enclose -# the complete requires string between quotes, for example:: -# -# set(CPACK_RPM_PACKAGE_REQUIRES "python >= 2.5.0, cmake >= 2.8") -# -# The required package list of an RPM file could be printed with:: -# -# rpm -qp --requires file.rpm -# -# .. variable:: CPACK_RPM_PACKAGE_CONFLICTS -# CPACK_RPM_<component>_PACKAGE_CONFLICTS -# -# RPM spec conflicts field. -# -# * Mandatory : NO -# * Default : - -# -# May be used to set negative RPM dependencies (conflicts). Note that you must -# enclose the complete requires string between quotes, for example:: -# -# set(CPACK_RPM_PACKAGE_CONFLICTS "libxml2") -# -# The conflicting package list of an RPM file could be printed with:: -# -# rpm -qp --conflicts file.rpm -# -# .. variable:: CPACK_RPM_PACKAGE_REQUIRES_PRE -# CPACK_RPM_<component>_PACKAGE_REQUIRES_PRE -# -# RPM spec requires(pre) field. -# -# * Mandatory : NO -# * Default : - -# -# May be used to set RPM preinstall dependencies (requires(pre)). Note that -# you must enclose the complete requires string between quotes, for example:: -# -# set(CPACK_RPM_PACKAGE_REQUIRES_PRE "shadow-utils, initscripts") -# -# .. variable:: CPACK_RPM_PACKAGE_REQUIRES_POST -# CPACK_RPM_<component>_PACKAGE_REQUIRES_POST -# -# RPM spec requires(post) field. -# -# * Mandatory : NO -# * Default : - -# -# May be used to set RPM postinstall dependencies (requires(post)). Note that -# you must enclose the complete requires string between quotes, for example:: -# -# set(CPACK_RPM_PACKAGE_REQUIRES_POST "shadow-utils, initscripts") -# -# .. variable:: CPACK_RPM_PACKAGE_REQUIRES_POSTUN -# CPACK_RPM_<component>_PACKAGE_REQUIRES_POSTUN -# -# RPM spec requires(postun) field. -# -# * Mandatory : NO -# * Default : - -# -# May be used to set RPM postuninstall dependencies (requires(postun)). Note -# that you must enclose the complete requires string between quotes, for -# example:: -# -# set(CPACK_RPM_PACKAGE_REQUIRES_POSTUN "shadow-utils, initscripts") -# -# .. variable:: CPACK_RPM_PACKAGE_REQUIRES_PREUN -# CPACK_RPM_<component>_PACKAGE_REQUIRES_PREUN -# -# RPM spec requires(preun) field. -# -# * Mandatory : NO -# * Default : - -# -# May be used to set RPM preuninstall dependencies (requires(preun)). Note that -# you must enclose the complete requires string between quotes, for example:: -# -# set(CPACK_RPM_PACKAGE_REQUIRES_PREUN "shadow-utils, initscripts") -# -# .. variable:: CPACK_RPM_PACKAGE_SUGGESTS -# CPACK_RPM_<component>_PACKAGE_SUGGESTS -# -# RPM spec suggest field. -# -# * Mandatory : NO -# * Default : - -# -# May be used to set weak RPM dependencies (suggests). Note that you must -# enclose the complete requires string between quotes. -# -# .. variable:: CPACK_RPM_PACKAGE_PROVIDES -# CPACK_RPM_<component>_PACKAGE_PROVIDES -# -# RPM spec provides field. -# -# * Mandatory : NO -# * Default : - -# -# May be used to set RPM dependencies (provides). The provided package list -# of an RPM file could be printed with:: -# -# rpm -qp --provides file.rpm -# -# .. variable:: CPACK_RPM_PACKAGE_OBSOLETES -# CPACK_RPM_<component>_PACKAGE_OBSOLETES -# -# RPM spec obsoletes field. -# -# * Mandatory : NO -# * Default : - -# -# May be used to set RPM packages that are obsoleted by this one. -# -# .. variable:: CPACK_RPM_PACKAGE_RELOCATABLE -# -# build a relocatable RPM. -# -# * Mandatory : NO -# * Default : CPACK_PACKAGE_RELOCATABLE -# -# If this variable is set to TRUE or ON CPackRPM will try -# to build a relocatable RPM package. A relocatable RPM may -# be installed using:: -# -# rpm --prefix or --relocate -# -# in order to install it at an alternate place see rpm(8). Note that -# currently this may fail if :variable:`CPACK_SET_DESTDIR` is set to ``ON``. If -# :variable:`CPACK_SET_DESTDIR` is set then you will get a warning message but -# if there is file installed with absolute path you'll get unexpected behavior. -# -# .. variable:: CPACK_RPM_SPEC_INSTALL_POST -# -# Deprecated - use :variable:`CPACK_RPM_SPEC_MORE_DEFINE` instead. -# -# * Mandatory : NO -# * Default : - -# * Deprecated: YES -# -# May be used to override the ``__spec_install_post`` section within the -# generated spec file. This affects the install step during package creation, -# not during package installation. For adding operations to be performed -# during package installation, use -# :variable:`CPACK_RPM_POST_INSTALL_SCRIPT_FILE` instead. -# -# .. variable:: CPACK_RPM_SPEC_MORE_DEFINE -# -# RPM extended spec definitions lines. -# -# * Mandatory : NO -# * Default : - -# -# May be used to add any ``%define`` lines to the generated spec file. An -# example of its use is to prevent stripping of executables (but note that -# this may also disable other default post install processing):: -# -# set(CPACK_RPM_SPEC_MORE_DEFINE "%define __spec_install_post /bin/true") -# -# .. variable:: CPACK_RPM_PACKAGE_DEBUG -# -# Toggle CPackRPM debug output. -# -# * Mandatory : NO -# * Default : - -# -# May be set when invoking cpack in order to trace debug information -# during CPack RPM run. For example you may launch CPack like this:: -# -# cpack -D CPACK_RPM_PACKAGE_DEBUG=1 -G RPM -# -# .. variable:: CPACK_RPM_USER_BINARY_SPECFILE -# CPACK_RPM_<componentName>_USER_BINARY_SPECFILE -# -# A user provided spec file. -# -# * Mandatory : NO -# * Default : - -# -# May be set by the user in order to specify a USER binary spec file -# to be used by CPackRPM instead of generating the file. -# The specified file will be processed by configure_file( @ONLY). -# -# .. variable:: CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE -# -# Spec file template. -# -# * Mandatory : NO -# * Default : - -# -# If set CPack will generate a template for USER specified binary -# spec file and stop with an error. For example launch CPack like this:: -# -# cpack -D CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE=1 -G RPM -# -# The user may then use this file in order to hand-craft is own -# binary spec file which may be used with -# :variable:`CPACK_RPM_USER_BINARY_SPECFILE`. -# -# .. variable:: CPACK_RPM_PRE_INSTALL_SCRIPT_FILE -# CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE -# -# Path to file containing pre (un)install script. -# -# * Mandatory : NO -# * Default : - -# -# May be used to embed a pre (un)installation script in the spec file. -# The referred script file (or both) will be read and directly -# put after the ``%pre`` or ``%preun`` section -# If :variable:`CPACK_RPM_COMPONENT_INSTALL` is set to ON the (un)install -# script for each component can be overridden with -# ``CPACK_RPM_<COMPONENT>_PRE_INSTALL_SCRIPT_FILE`` and -# ``CPACK_RPM_<COMPONENT>_PRE_UNINSTALL_SCRIPT_FILE``. -# One may verify which scriptlet has been included with:: -# -# rpm -qp --scripts package.rpm -# -# .. variable:: CPACK_RPM_POST_INSTALL_SCRIPT_FILE -# CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE -# -# Path to file containing post (un)install script. -# -# * Mandatory : NO -# * Default : - -# -# May be used to embed a post (un)installation script in the spec file. -# The referred script file (or both) will be read and directly -# put after the ``%post`` or ``%postun`` section. -# If :variable:`CPACK_RPM_COMPONENT_INSTALL` is set to ON the (un)install -# script for each component can be overridden with -# ``CPACK_RPM_<COMPONENT>_POST_INSTALL_SCRIPT_FILE`` and -# ``CPACK_RPM_<COMPONENT>_POST_UNINSTALL_SCRIPT_FILE``. -# One may verify which scriptlet has been included with:: -# -# rpm -qp --scripts package.rpm -# -# .. variable:: CPACK_RPM_USER_FILELIST -# CPACK_RPM_<COMPONENT>_USER_FILELIST -# -# * Mandatory : NO -# * Default : - -# -# May be used to explicitly specify ``%(<directive>)`` file line -# in the spec file. Like ``%config(noreplace)`` or any other directive -# that be found in the ``%files`` section. You can have multiple directives -# per line, as in ``%attr(600,root,root) %config(noreplace)``. Since -# CPackRPM is generating the list of files (and directories) the user -# specified files of the ``CPACK_RPM_<COMPONENT>_USER_FILELIST`` list will -# be removed from the generated list. If referring to directories do -# not add a trailing slash. -# -# .. variable:: CPACK_RPM_CHANGELOG_FILE -# -# RPM changelog file. -# -# * Mandatory : NO -# * Default : - -# -# May be used to embed a changelog in the spec file. -# The referred file will be read and directly put after the ``%changelog`` -# section. -# -# .. variable:: CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST -# -# list of path to be excluded. -# -# * Mandatory : NO -# * Default : /etc /etc/init.d /usr /usr/bin /usr/include /usr/lib -# /usr/libx32 /usr/lib64 /usr/share /usr/share/aclocal -# /usr/share/doc -# -# May be used to exclude path (directories or files) from the auto-generated -# list of paths discovered by CPack RPM. The default value contains a -# reasonable set of values if the variable is not defined by the user. If the -# variable is defined by the user then CPackRPM will NOT any of the default -# path. If you want to add some path to the default list then you can use -# :variable:`CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION` variable. -# -# .. variable:: CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION -# -# additional list of path to be excluded. -# -# * Mandatory : NO -# * Default : - -# -# May be used to add more exclude path (directories or files) from the initial -# default list of excluded paths. See -# :variable:`CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST`. -# -# .. variable:: CPACK_RPM_RELOCATION_PATHS -# -# Packages relocation paths list. -# -# * Mandatory : NO -# * Default : - -# -# May be used to specify more than one relocation path per relocatable RPM. -# Variable contains a list of relocation paths that if relative are prefixed -# by the value of :variable:`CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX` or by the -# value of :variable:`CPACK_PACKAGING_INSTALL_PREFIX` if the component version -# is not provided. -# Variable is not component based as its content can be used to set a different -# path prefix for e.g. binary dir and documentation dir at the same time. -# Only prefixes that are required by a certain component are added to that -# component - component must contain at least one file/directory/symbolic link -# with :variable:`CPACK_RPM_RELOCATION_PATHS` prefix for a certain relocation -# path to be added. Package will not contain any relocation paths if there are -# no files/directories/symbolic links on any of the provided prefix locations. -# Packages that either do not contain any relocation paths or contain -# files/directories/symbolic links that are outside relocation paths print -# out an ``AUTHOR_WARNING`` that RPM will be partially relocatable. -# -# .. variable:: CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX -# -# Per component relocation path install prefix. -# -# * Mandatory : NO -# * Default : CPACK_PACKAGING_INSTALL_PREFIX -# -# May be used to set per component :variable:`CPACK_PACKAGING_INSTALL_PREFIX` -# for relocatable RPM packages. -# -# .. variable:: CPACK_RPM_NO_INSTALL_PREFIX_RELOCATION -# CPACK_RPM_NO_<COMPONENT>_INSTALL_PREFIX_RELOCATION -# -# Removal of default install prefix from relocation paths list. -# -# * Mandatory : NO -# * Default : CPACK_PACKAGING_INSTALL_PREFIX or CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX -# are treated as one of relocation paths -# -# May be used to remove CPACK_PACKAGING_INSTALL_PREFIX and CPACK_RPM_<COMPONENT>_PACKAGE_PREFIX -# from relocatable RPM prefix paths. -# -# .. variable:: CPACK_RPM_ADDITIONAL_MAN_DIRS -# -# * Mandatory : NO -# * Default : - -# -# May be used to set additional man dirs that could potentially be compressed -# by brp-compress RPM macro. Variable content must be a list of regular -# expressions that point to directories containing man files or to man files -# directly. Note that in order to compress man pages a path must also be -# present in brp-compress RPM script and that brp-compress script must be -# added to RPM configuration by the operating system. -# -# Regular expressions that are added by default were taken from brp-compress -# RPM macro: -# -# - /usr/man/man.* -# - /usr/man/.*/man.* -# - /usr/info.* -# - /usr/share/man/man.* -# - /usr/share/man/.*/man.* -# - /usr/share/info.* -# - /usr/kerberos/man.* -# - /usr/X11R6/man/man.* -# - /usr/lib/perl5/man/man.* -# - /usr/share/doc/.*/man/man.* -# - /usr/lib/.*/man/man.* -# -# .. variable:: CPACK_RPM_DEFAULT_USER -# CPACK_RPM_<compName>_DEFAULT_USER -# -# default user ownership of RPM content -# -# * Mandatory : NO -# * Default : root -# -# Value should be user name and not UID. -# Note that <compName> must be in upper-case. -# -# .. variable:: CPACK_RPM_DEFAULT_GROUP -# CPACK_RPM_<compName>_DEFAULT_GROUP -# -# default group ownership of RPM content -# -# * Mandatory : NO -# * Default : root -# -# Value should be group name and not GID. -# Note that <compName> must be in upper-case. -# -# .. variable:: CPACK_RPM_DEFAULT_FILE_PERMISSIONS -# CPACK_RPM_<compName>_DEFAULT_FILE_PERMISSIONS -# -# default permissions used for packaged files -# -# * Mandatory : NO -# * Default : - (system default) -# -# Accepted values are lists with ``PERMISSIONS``. Valid permissions -# are: -# -# - OWNER_READ -# - OWNER_WRITE -# - OWNER_EXECUTE -# - GROUP_READ -# - GROUP_WRITE -# - GROUP_EXECUTE -# - WORLD_READ -# - WORLD_WRITE -# - WORLD_EXECUTE -# -# Note that <compName> must be in upper-case. -# -# .. variable:: CPACK_RPM_DEFAULT_DIR_PERMISSIONS -# CPACK_RPM_<compName>_DEFAULT_DIR_PERMISSIONS -# -# default permissions used for packaged directories -# -# * Mandatory : NO -# * Default : - (system default) -# -# Accepted values are lists with PERMISSIONS. Valid permissions -# are the same as for :variable:`CPACK_RPM_DEFAULT_FILE_PERMISSIONS`. -# Note that <compName> must be in upper-case. -# -# .. variable:: CPACK_RPM_INSTALL_WITH_EXEC -# -# force execute permissions on programs and shared libraries -# -# * Mandatory : NO -# * Default : - (system default) -# -# Force set owner, group and world execute permissions on programs and shared -# libraries. This can be used for creating valid rpm packages on systems such -# as Debian where shared libraries do not have execute permissions set. -# -# .. note:: -# -# Programs and shared libraries without execute permissions are ignored during -# separation of debug symbols from the binary for debuginfo packages. -# -# Packaging of Symbolic Links -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# CPackRPM supports packaging of symbolic links:: -# -# execute_process(COMMAND ${CMAKE_COMMAND} -# -E create_symlink <relative_path_location> <symlink_name>) -# install(FILES ${CMAKE_CURRENT_BINARY_DIR}/<symlink_name> -# DESTINATION <symlink_location> COMPONENT libraries) -# -# Symbolic links will be optimized (paths will be shortened if possible) -# before being added to the package or if multiple relocation paths are -# detected, a post install symlink relocation script will be generated. -# -# Symbolic links may point to locations that are not packaged by the same -# package (either a different component or even not packaged at all) but -# those locations will be treated as if they were a part of the package -# while determining if symlink should be either created or present in a -# post install script - depending on relocation paths. -# -# Symbolic links that point to locations outside packaging path produce a -# warning and are treated as non relocatable permanent symbolic links. -# -# Currently there are a few limitations though: -# -# * For component based packaging component interdependency is not checked -# when processing symbolic links. Symbolic links pointing to content of -# a different component are treated the same way as if pointing to location -# that will not be packaged. -# -# * Symbolic links pointing to a location through one or more intermediate -# symbolic links will not be handled differently - if the intermediate -# symbolic link(s) is also on a relocatable path, relocating it during -# package installation may cause initial symbolic link to point to an -# invalid location. -# -# Packaging of debug information -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# Debuginfo packages contain debug symbols and sources for debugging packaged -# binaries. -# -# Debuginfo RPM packaging has it's own set of variables: -# -# .. variable:: CPACK_RPM_DEBUGINFO_PACKAGE -# CPACK_RPM_<component>_DEBUGINFO_PACKAGE -# -# Enable generation of debuginfo RPM package(s). -# -# * Mandatory : NO -# * Default : OFF -# -# .. note:: -# -# Binaries must contain debug symbols before packaging so use either ``Debug`` -# or ``RelWithDebInfo`` for :variable:`CMAKE_BUILD_TYPE` variable value. -# -# .. note:: -# -# Packages generated from packages without binary files, with binary files but -# without execute permissions or without debug symbols will cause packaging -# termination. -# -# .. variable:: CPACK_BUILD_SOURCE_DIRS -# -# Provides locations of root directories of source files from which binaries -# were built. -# -# * Mandatory : YES if :variable:`CPACK_RPM_DEBUGINFO_PACKAGE` is set -# * Default : - -# -# .. note:: -# -# For CMake project :variable:`CPACK_BUILD_SOURCE_DIRS` is set by default to -# point to :variable:`CMAKE_SOURCE_DIR` and :variable:`CMAKE_BINARY_DIR` paths. -# -# .. note:: -# -# Sources with path prefixes that do not fall under any location provided with -# :variable:`CPACK_BUILD_SOURCE_DIRS` will not be present in debuginfo package. -# -# .. variable:: CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX -# CPACK_RPM_<component>_BUILD_SOURCE_DIRS_PREFIX -# -# Prefix of location where sources will be placed during package installation. -# -# * Mandatory : YES if :variable:`CPACK_RPM_DEBUGINFO_PACKAGE` is set -# * Default : "/usr/src/debug/<CPACK_PACKAGE_FILE_NAME>" and -# for component packaging "/usr/src/debug/<CPACK_PACKAGE_FILE_NAME>-<component>" -# -# .. note:: -# -# Each source path prefix is additionally suffixed by ``src_<index>`` where -# index is index of the path used from :variable:`CPACK_BUILD_SOURCE_DIRS` -# variable. This produces ``<CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX>/src_<index>`` -# replacement path. -# Limitation is that replaced path part must be shorter or of equal -# length than the length of its replacement. If that is not the case either -# :variable:`CPACK_RPM_BUILD_SOURCE_DIRS_PREFIX` variable has to be set to -# a shorter path or source directories must be placed on a longer path. -# -# .. variable:: CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS -# -# Directories containing sources that should be excluded from debuginfo packages. -# -# * Mandatory : NO -# * Default : "/usr /usr/src /usr/src/debug" -# -# Listed paths are owned by other RPM packages and should therefore not be -# deleted on debuginfo package uninstallation. -# -# .. variable:: CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS_ADDITION -# -# Paths that should be appended to :variable:`CPACK_RPM_DEBUGINFO_EXCLUDE_DIRS` -# for exclusion. -# -# * Mandatory : NO -# * Default : - -# -# .. variable:: CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE -# -# Create a single debuginfo package even if components packaging is set. -# -# * Mandatory : NO -# * Default : OFF -# -# When this variable is enabled it produces a single debuginfo package even if -# component packaging is enabled. -# -# When using this feature in combination with components packaging and there is -# more than one component this variable requires :variable:`CPACK_RPM_MAIN_COMPONENT` -# to be set. -# -# .. note:: -# -# If none of the :variable:`CPACK_RPM_<component>_DEBUGINFO_PACKAGE` variables -# is set then :variable:`CPACK_RPM_DEBUGINFO_PACKAGE` is automatically set to -# ``ON`` when :variable:`CPACK_RPM_DEBUGINFO_SINGLE_PACKAGE` is set. -# -# .. variable:: CPACK_RPM_DEBUGINFO_FILE_NAME -# CPACK_RPM_<component>_DEBUGINFO_FILE_NAME -# -# Debuginfo package file name. -# -# * Mandatory : NO -# * Default : rpmbuild tool generated package file name -# -# Alternatively provided debuginfo package file name must end with ``.rpm`` -# suffix and should differ from file names of other generated packages. -# -# Variable may contain ``@cpack_component@`` placeholder which will be -# replaced by component name if component packaging is enabled otherwise it -# deletes the placeholder. -# -# Setting the variable to ``RPM-DEFAULT`` may be used to explicitly set -# filename generation to default. -# -# .. note:: -# -# :variable:`CPACK_RPM_FILE_NAME` also supports rpmbuild tool generated package -# file name - disabled by default but can be enabled by setting the variable to -# ``RPM-DEFAULT``. -# -# Packaging of sources (SRPM) -# ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -# -# SRPM packaging is enabled by setting :variable:`CPACK_RPM_PACKAGE_SOURCES` -# variable while usually using :variable:`CPACK_INSTALLED_DIRECTORIES` variable -# to provide directory containing CMakeLists.txt and source files. -# -# For CMake projects SRPM package would be produced by executing:: -# -# cpack -G RPM --config ./CPackSourceConfig.cmake -# -# .. note:: -# -# Produced SRPM package is expected to be built with :manual:`cmake(1)` executable -# and packaged with :manual:`cpack(1)` executable so CMakeLists.txt has to be -# located in root source directory and must be able to generate binary rpm -# packages by executing ``cpack -G`` command. The two executables as well as -# rpmbuild must also be present when generating binary rpm packages from the -# produced SRPM package. -# -# Once the SRPM package is generated it can be used to generate binary packages -# by creating a directory structure for rpm generation and executing rpmbuild -# tool:: -# -# mkdir -p build_dir/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} -# rpmbuild --define "_topdir <path_to_build_dir>" --rebuild <SRPM_file_name> -# -# Generated packages will be located in build_dir/RPMS directory or its sub -# directories. -# -# .. note:: -# -# SRPM package internally uses CPack/RPM generator to generate binary packages -# so CMakeScripts.txt can decide during the SRPM to binary rpm generation step -# what content the package(s) should have as well as how they should be packaged -# (monolithic or components). CMake can decide this for e.g. by reading environment -# variables set by the package manager before starting the process of generating -# binary rpm packages. This way a single SRPM package can be used to produce -# different binary rpm packages on different platforms depending on the platform's -# packaging rules. -# -# Source RPM packaging has it's own set of variables: -# -# .. variable:: CPACK_RPM_PACKAGE_SOURCES -# -# Should the content be packaged as a source rpm (default is binary rpm). -# -# * Mandatory : NO -# * Default : OFF -# -# .. note:: -# -# For cmake projects :variable:`CPACK_RPM_PACKAGE_SOURCES` variable is set -# to ``OFF`` in CPackConfig.cmake and ``ON`` in CPackSourceConfig.cmake -# generated files. -# -# .. variable:: CPACK_RPM_SOURCE_PKG_BUILD_PARAMS -# -# Additional command-line parameters provided to :manual:`cmake(1)` executable. -# -# * Mandatory : NO -# * Default : - -# -# .. variable:: CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX -# -# Packaging install prefix that would be provided in :variable:`CPACK_PACKAGING_INSTALL_PREFIX` -# variable for producing binary RPM packages. -# -# * Mandatory : YES -# * Default : "/" -# -# .. VARIABLE:: CPACK_RPM_BUILDREQUIRES -# -# List of source rpm build dependencies. -# -# * Mandatory : NO -# * Default : - -# -# May be used to set source RPM build dependencies (BuildRequires). Note that -# you must enclose the complete build requirements string between quotes, for -# example:: -# -# set(CPACK_RPM_BUILDREQUIRES "python >= 2.5.0, cmake >= 2.8") - # Author: Eric Noulard with the help of Alexander Neundorf. +cmake_policy(PUSH) +cmake_policy(SET CMP0057 NEW) # if IN_LIST + function(get_file_permissions FILE RETURN_VAR) execute_process(COMMAND ls -l ${FILE} OUTPUT_VARIABLE permissions_ @@ -1445,7 +491,7 @@ function(cpack_rpm_prepare_install_files INSTALL_FILES_LIST WDIR PACKAGE_PREFIXE list(LENGTH SYMLINK_RELOCATIONS SYMLINK_RELOCATIONS_COUNT) list(LENGTH POINT_RELOCATIONS POINT_RELOCATIONS_COUNT) else() - # location pointed to is ouside WDR so it should be treated as a permanent symlink + # location pointed to is outside WDR so it should be treated as a permanent symlink set(SYMLINK_POINT_WD_ "${SYMLINK_POINT_}") unset(SYMLINK_RELOCATIONS) @@ -2482,7 +1528,7 @@ ${TMP_DEBUGINFO_ADDITIONAL_SOURCES} %build mkdir cpack_rpm_build_dir cd cpack_rpm_build_dir -cmake ${CPACK_RPM_SOURCE_PKG_BUILD_PARAMS} -DCPACK_PACKAGING_INSTALL_PREFIX=${CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX} ../${CPACK_PACKAGE_FILE_NAME} +'${CMAKE_COMMAND}' ${CPACK_RPM_SOURCE_PKG_BUILD_PARAMS} -DCPACK_PACKAGING_INSTALL_PREFIX=${CPACK_RPM_SOURCE_PKG_PACKAGING_INSTALL_PREFIX} ../${CPACK_PACKAGE_FILE_NAME} make %{?_smp_mflags}" # %{?_smp_mflags} -> -j option ) set(TMP_RPM_INSTALL @@ -2822,3 +1868,5 @@ mv %_topdir/tmpBBroot $RPM_BUILD_ROOT endfunction() cpack_rpm_generate_package() + +cmake_policy(POP) diff --git a/Modules/Internal/CPack/CPackWIX.cmake b/Modules/Internal/CPack/CPackWIX.cmake new file mode 100644 index 0000000..d1875f2 --- /dev/null +++ b/Modules/Internal/CPack/CPackWIX.cmake @@ -0,0 +1,20 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +if(NOT CPACK_WIX_ROOT) + string(REPLACE "\\" "/" CPACK_WIX_ROOT "$ENV{WIX}") +endif() + +find_program(CPACK_WIX_CANDLE_EXECUTABLE candle + PATHS "${CPACK_WIX_ROOT}" PATH_SUFFIXES "bin") + +if(NOT CPACK_WIX_CANDLE_EXECUTABLE) + message(FATAL_ERROR "Could not find the WiX candle executable.") +endif() + +find_program(CPACK_WIX_LIGHT_EXECUTABLE light + PATHS "${CPACK_WIX_ROOT}" PATH_SUFFIXES "bin") + +if(NOT CPACK_WIX_LIGHT_EXECUTABLE) + message(FATAL_ERROR "Could not find the WiX light executable.") +endif() diff --git a/Modules/CPackZIP.cmake b/Modules/Internal/CPack/CPackZIP.cmake index 376520c..f619de4 100644 --- a/Modules/CPackZIP.cmake +++ b/Modules/Internal/CPack/CPackZIP.cmake @@ -28,4 +28,3 @@ if(NOT ZIP_EXECUTABLE) set(CPACK_ZIP_NEED_QUOTES FALSE) endif() endif() - diff --git a/Modules/MacroAddFileDependencies.cmake b/Modules/MacroAddFileDependencies.cmake index db26814..39393d6 100644 --- a/Modules/MacroAddFileDependencies.cmake +++ b/Modules/MacroAddFileDependencies.cmake @@ -1,19 +1,20 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# MacroAddFileDependencies -# ------------------------ -# -# MACRO_ADD_FILE_DEPENDENCIES(<_file> depend_files...) -# -# Using the macro MACRO_ADD_FILE_DEPENDENCIES() is discouraged. There -# are usually better ways to specify the correct dependencies. -# -# MACRO_ADD_FILE_DEPENDENCIES(<_file> depend_files...) is just a -# convenience wrapper around the OBJECT_DEPENDS source file property. -# You can just use set_property(SOURCE <file> APPEND PROPERTY -# OBJECT_DEPENDS depend_files) instead. +#[=======================================================================[.rst: +MacroAddFileDependencies +------------------------ + +MACRO_ADD_FILE_DEPENDENCIES(<_file> depend_files...) + +Using the macro MACRO_ADD_FILE_DEPENDENCIES() is discouraged. There +are usually better ways to specify the correct dependencies. + +MACRO_ADD_FILE_DEPENDENCIES(<_file> depend_files...) is just a +convenience wrapper around the OBJECT_DEPENDS source file property. +You can just use set_property(SOURCE <file> APPEND PROPERTY +OBJECT_DEPENDS depend_files) instead. +#]=======================================================================] macro (MACRO_ADD_FILE_DEPENDENCIES _file) diff --git a/Modules/NSIS.template.in b/Modules/NSIS.template.in index 9001888..f75ae78 100644 --- a/Modules/NSIS.template.in +++ b/Modules/NSIS.template.in @@ -847,7 +847,7 @@ Section "Uninstall" @CPACK_NSIS_DELETE_ICONS@ @CPACK_NSIS_DELETE_ICONS_EXTRA@ - ;Delete empty start menu parent diretories + ;Delete empty start menu parent directories StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" startMenuDeleteLoop: @@ -866,7 +866,7 @@ Section "Uninstall" Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk" @CPACK_NSIS_DELETE_ICONS_EXTRA@ - ;Delete empty start menu parent diretories + ;Delete empty start menu parent directories StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP" secondStartMenuDeleteLoop: diff --git a/Modules/Platform/Android-Clang.cmake b/Modules/Platform/Android-Clang.cmake index f739ab1..9ed1e01 100644 --- a/Modules/Platform/Android-Clang.cmake +++ b/Modules/Platform/Android-Clang.cmake @@ -40,5 +40,6 @@ macro(__android_compiler_clang lang) endif() if(NOT CMAKE_${lang}_COMPILER_TARGET) set(CMAKE_${lang}_COMPILER_TARGET "${_ANDROID_ABI_CLANG_TARGET}") + list(APPEND CMAKE_${lang}_COMPILER_PREDEFINES_COMMAND "--target=${CMAKE_${lang}_COMPILER_TARGET}") endif() endmacro() diff --git a/Modules/Platform/Android-Determine.cmake b/Modules/Platform/Android-Determine.cmake index e623902..bb42eed 100644 --- a/Modules/Platform/Android-Determine.cmake +++ b/Modules/Platform/Android-Determine.cmake @@ -18,6 +18,9 @@ if(CMAKE_SYSTEM_VERSION EQUAL 1) return() endif() +cmake_policy(PUSH) +cmake_policy(SET CMP0057 NEW) # if IN_LIST + # If the user provided CMAKE_SYSROOT for us, extract information from it. set(_ANDROID_SYSROOT_NDK "") set(_ANDROID_SYSROOT_API "") @@ -371,3 +374,5 @@ endif() # Report the chosen architecture. message(STATUS "Android: Targeting API '${CMAKE_SYSTEM_VERSION}' with architecture '${CMAKE_ANDROID_ARCH}', ABI '${CMAKE_ANDROID_ARCH_ABI}', and processor '${CMAKE_SYSTEM_PROCESSOR}'") + +cmake_policy(POP) diff --git a/Modules/Platform/Apple-Intel.cmake b/Modules/Platform/Apple-Intel.cmake index 2d4f7e5..a854be9 100644 --- a/Modules/Platform/Apple-Intel.cmake +++ b/Modules/Platform/Apple-Intel.cmake @@ -10,6 +10,9 @@ macro(__apple_compiler_intel lang) set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names") set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "-bundle -Wl,-headerpad_max_install_names") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",") + if(NOT CMAKE_${lang}_COMPILER_VERSION VERSION_LESS 12.0) set(CMAKE_${lang}_COMPILE_OPTIONS_VISIBILITY "-fvisibility=") endif() diff --git a/Modules/Platform/DragonFly.cmake b/Modules/Platform/DragonFly.cmake index c22677b..12e5f3c 100644 --- a/Modules/Platform/DragonFly.cmake +++ b/Modules/Platform/DragonFly.cmake @@ -3,3 +3,7 @@ # see http://archive.netbsd.se/?ml=dfbsd-users&a=2007-07&m=4678361 include(Platform/FreeBSD) + +# DragonFly BSD requires -z origin to enable $ORIGIN expansion in RPATH. +# This is not required for FreeBSD since 10.2-RELEASE. +set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-z,origin,-rpath,") diff --git a/Modules/Platform/FreeBSD.cmake b/Modules/Platform/FreeBSD.cmake index ce4d3ce..082e9f6 100644 --- a/Modules/Platform/FreeBSD.cmake +++ b/Modules/Platform/FreeBSD.cmake @@ -6,6 +6,8 @@ set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") # -shared set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # +s, flag for exe link to use shared lib set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") # -rpath set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") # : or empty +# Does not require -z origin since 10.2-RELEASE +set(CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN "\$ORIGIN") set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,") set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic") diff --git a/Modules/Platform/GHS-MULTI-Initialize.cmake b/Modules/Platform/GHS-MULTI-Initialize.cmake index bf61d7b..9b384df 100644 --- a/Modules/Platform/GHS-MULTI-Initialize.cmake +++ b/Modules/Platform/GHS-MULTI-Initialize.cmake @@ -1,40 +1,44 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. +#Setup Green Hills MULTI specific compilation information -#Setup Greenhills MULTI specific compilation information - -if (NOT GHS_INT_DIRECTORY) - #Assume the C:/ghs/int#### directory that is latest is preferred - set(GHS_EXPECTED_ROOT "C:/ghs") - if (EXISTS ${GHS_EXPECTED_ROOT}) - FILE(GLOB GHS_CANDIDATE_INT_DIRS RELATIVE - ${GHS_EXPECTED_ROOT} ${GHS_EXPECTED_ROOT}/*) - string(REGEX MATCHALL "int[0-9][0-9][0-9][0-9a-z]" GHS_CANDIDATE_INT_DIRS - ${GHS_CANDIDATE_INT_DIRS}) - if (GHS_CANDIDATE_INT_DIRS) - list(SORT GHS_CANDIDATE_INT_DIRS) - list(GET GHS_CANDIDATE_INT_DIRS -1 GHS_INT_DIRECTORY) - string(CONCAT GHS_INT_DIRECTORY ${GHS_EXPECTED_ROOT} "/" - ${GHS_INT_DIRECTORY}) +set(GHS_OS_ROOT "C:/ghs" CACHE PATH "GHS platform OS search root directory") +mark_as_advanced(GHS_OS_ROOT) + +set(GHS_OS_DIR "NOTFOUND" CACHE PATH "GHS platform OS directory") +mark_as_advanced(GHS_OS_DIR) + +#set GHS_OS_DIR if not set by user +if ( NOT GHS_OS_DIR ) + if (EXISTS ${GHS_OS_ROOT}) + + #get all directories in root directory + FILE(GLOB GHS_CANDIDATE_OS_DIRS + LIST_DIRECTORIES true RELATIVE ${GHS_OS_ROOT} ${GHS_OS_ROOT}/*) + FILE(GLOB GHS_CANDIDATE_OS_FILES + LIST_DIRECTORIES false RELATIVE ${GHS_OS_ROOT} ${GHS_OS_ROOT}/*) + if ( GHS_CANDIDATE_OS_FILES ) + list(REMOVE_ITEM GHS_CANDIDATE_OS_DIRS ${GHS_CANDIDATE_OS_FILES}) endif () - endif () - #Try to look for known registry values - if (NOT GHS_INT_DIRECTORY) - find_path(GHS_INT_DIRECTORY INTEGRITY.ld PATHS - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\GreenHillsSoftware6433c345;InstallLocation]" #int1122 - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\GreenHillsSoftware289b6625;InstallLocation]" #int1104 - ) - endif () + #filter based on platform name + if (GHS_TARGET_PLATFORM STREQUAL "integrity") + list(FILTER GHS_CANDIDATE_OS_DIRS INCLUDE REGEX "int[0-9][0-9][0-9][0-9a-z].*") + endif () + + if (GHS_CANDIDATE_OS_DIRS) + list(SORT GHS_CANDIDATE_OS_DIRS) + list(GET GHS_CANDIDATE_OS_DIRS -1 GHS_OS_DIR) + string(CONCAT GHS_OS_DIR ${GHS_OS_ROOT} "/" ${GHS_OS_DIR}) + endif() - set(GHS_INT_DIRECTORY ${GHS_INT_DIRECTORY} CACHE PATH - "Path to integrity directory") + set(GHS_OS_DIR "${GHS_OS_DIR}" CACHE PATH "GHS platform OS directory" FORCE) + endif () endif () -set(GHS_OS_DIR ${GHS_INT_DIRECTORY} CACHE PATH "OS directory") -set(GHS_PRIMARY_TARGET "arm_integrity.tgt" CACHE STRING "target for compilation") -set(GHS_BSP_NAME "simarm" CACHE STRING "BSP name") +set(GHS_BSP_NAME "IGNORE" CACHE STRING "BSP name") + set(GHS_CUSTOMIZATION "" CACHE FILEPATH "optional GHS customization") mark_as_advanced(GHS_CUSTOMIZATION) set(GHS_GPJ_MACROS "" CACHE STRING "optional GHS macros generated in the .gpjs for legacy reasons") diff --git a/Modules/Platform/GNU.cmake b/Modules/Platform/GNU.cmake index e8c3b65..fac29a8 100644 --- a/Modules/Platform/GNU.cmake +++ b/Modules/Platform/GNU.cmake @@ -8,6 +8,33 @@ set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,") set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic") +# Debian policy requires that shared libraries be installed without +# executable permission. Fedora policy requires that shared libraries +# be installed with the executable permission. Since the native tools +# create shared libraries with execute permission in the first place a +# reasonable policy seems to be to install with execute permission by +# default. In order to support debian packages we provide an option +# here. The option default is based on the current distribution, but +# packagers can set it explicitly on the command line. +if(DEFINED CMAKE_INSTALL_SO_NO_EXE) + # Store the decision variable in the cache. This preserves any + # setting the user provides on the command line. + set(CMAKE_INSTALL_SO_NO_EXE "${CMAKE_INSTALL_SO_NO_EXE}" CACHE INTERNAL + "Install .so files without execute permission.") +else() + # Store the decision variable as an internal cache entry to avoid + # checking the platform every time. This option is advanced enough + # that only package maintainers should need to adjust it. They are + # capable of providing a setting on the command line. + if(EXISTS "/etc/debian_version") + set(CMAKE_INSTALL_SO_NO_EXE 1 CACHE INTERNAL + "Install .so files without execute permission.") + else() + set(CMAKE_INSTALL_SO_NO_EXE 0 CACHE INTERNAL + "Install .so files without execute permission.") + endif() +endif() + set(CMAKE_LIBRARY_ARCHITECTURE_REGEX "[a-z0-9_]+(-[a-z0-9_]+)?-gnu[a-z0-9_]*") include(Platform/UnixPaths) diff --git a/Modules/Platform/Generic-ADSP-C.cmake b/Modules/Platform/Generic-ADSP-C.cmake index de1cee2..c8597cd 100644 --- a/Modules/Platform/Generic-ADSP-C.cmake +++ b/Modules/Platform/Generic-ADSP-C.cmake @@ -9,6 +9,9 @@ string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " ") string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ") string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " ") +set(CMAKE_C_LINKER_WRAPPER_FLAG "-flags-link" " ") +set(CMAKE_C_LINKER_WRAPPER_FLAG_SEP ",") + set(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_C_COMPILER> -build-lib -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -o <TARGET> <CMAKE_C_LINK_FLAGS> <OBJECTS>") @@ -17,4 +20,3 @@ set(CMAKE_C_LINK_EXECUTABLE set(CMAKE_C_CREATE_SHARED_LIBRARY) set(CMAKE_C_CREATE_MODULE_LIBRARY) - diff --git a/Modules/Platform/Generic-ADSP-CXX.cmake b/Modules/Platform/Generic-ADSP-CXX.cmake index 0cde8f2..d76bb66 100644 --- a/Modules/Platform/Generic-ADSP-CXX.cmake +++ b/Modules/Platform/Generic-ADSP-CXX.cmake @@ -7,6 +7,9 @@ string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " ") string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ") string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT " ") +set(CMAKE_CXX_LINKER_WRAPPER_FLAG "-flags-link" " ") +set(CMAKE_CXX_LINKER_WRAPPER_FLAG_SEP ",") + set(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_CXX_COMPILER> -build-lib -proc ${ADSP_PROCESSOR} -si-revision ${ADSP_PROCESSOR_SILICIUM_REVISION} -o <TARGET> <CMAKE_CXX_LINK_FLAGS> <OBJECTS>") @@ -15,4 +18,3 @@ set(CMAKE_CXX_LINK_EXECUTABLE set(CMAKE_CXX_CREATE_SHARED_LIBRARY) set(CMAKE_CXX_CREATE_MODULE_LIBRARY) - diff --git a/Modules/Platform/Generic-SDCC-C.cmake b/Modules/Platform/Generic-SDCC-C.cmake index 4b3912a..aef4abf 100644 --- a/Modules/Platform/Generic-SDCC-C.cmake +++ b/Modules/Platform/Generic-SDCC-C.cmake @@ -37,6 +37,8 @@ if(NOT DEFINED CMAKE_EXE_LINKER_FLAGS_INIT) set (CMAKE_EXE_LINKER_FLAGS_INIT --model-small) endif() +set(CMAKE_C_LINKER_WRAPPER_FLAG "-Wl" ",") + # compile a C file into an object file set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>") @@ -51,4 +53,3 @@ set(CMAKE_C_CREATE_STATIC_LIBRARY # not supported by sdcc set(CMAKE_C_CREATE_SHARED_LIBRARY "") set(CMAKE_C_CREATE_MODULE_LIBRARY "") - diff --git a/Modules/Platform/Haiku.cmake b/Modules/Platform/Haiku.cmake index dfc2664..7e0af61 100644 --- a/Modules/Platform/Haiku.cmake +++ b/Modules/Platform/Haiku.cmake @@ -11,6 +11,7 @@ set(CMAKE_SHARED_LIBRARY_C_FLAGS "-fPIC") set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") +set(CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN "\$ORIGIN") set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,") set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic") diff --git a/Modules/Platform/Linux-Intel.cmake b/Modules/Platform/Linux-Intel.cmake index ee9aac2..f712e2b 100644 --- a/Modules/Platform/Linux-Intel.cmake +++ b/Modules/Platform/Linux-Intel.cmake @@ -30,6 +30,9 @@ macro(__linux_compiler_intel lang) # executables that use dlopen but do not set ENABLE_EXPORTS. set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-rdynamic") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG "-Wl,") + set(CMAKE_${lang}_LINKER_WRAPPER_FLAG_SEP ",") + set(_CMAKE_${lang}_IPO_SUPPORTED_BY_CMAKE YES) if(XIAR) diff --git a/Modules/Platform/Linux.cmake b/Modules/Platform/Linux.cmake index 1f8c1b4..b5d5464 100644 --- a/Modules/Platform/Linux.cmake +++ b/Modules/Platform/Linux.cmake @@ -1,6 +1,7 @@ set(CMAKE_DL_LIBS "dl") set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") +set(CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN "\$ORIGIN") set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,") set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic") diff --git a/Modules/Platform/NetBSD.cmake b/Modules/Platform/NetBSD.cmake index 1004eb3..a8f4cc8 100644 --- a/Modules/Platform/NetBSD.cmake +++ b/Modules/Platform/NetBSD.cmake @@ -6,6 +6,7 @@ set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") # -shared set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # +s, flag for exe link to use shared lib set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,") # -rpath set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":") # : or empty +set(CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN "\$ORIGIN") set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,") set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,") set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic") diff --git a/Modules/Platform/OpenBSD.cmake b/Modules/Platform/OpenBSD.cmake index 6466a0a..97e2a6a 100644 --- a/Modules/Platform/OpenBSD.cmake +++ b/Modules/Platform/OpenBSD.cmake @@ -15,6 +15,10 @@ if(NOT CMAKE_PLATFORM_RUNTIME_PATH) "${LDCONFIG_HINTS}") endif() +# OpenBSD requires -z origin to enable $ORIGIN expansion in RPATH. +# This is not required for NetBSD. +set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-z,origin,-rpath,") + set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_OPENBSD_VERSIONING 1) # OpenBSD has no multilib diff --git a/Modules/Platform/SunOS-GNU.cmake b/Modules/Platform/SunOS-GNU.cmake index 485f235..47334d6 100644 --- a/Modules/Platform/SunOS-GNU.cmake +++ b/Modules/Platform/SunOS-GNU.cmake @@ -11,6 +11,7 @@ set(__SUNOS_COMPILER_GNU 1) macro(__sunos_compiler_gnu lang) set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,-R") set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":") + set(CMAKE_SHARED_LIBRARY_RPATH_ORIGIN_TOKEN "\$ORIGIN") set(CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG "-Wl,-h") # Initialize C link type selection flags. These flags are used when diff --git a/Modules/Platform/Windows-Embarcadero.cmake b/Modules/Platform/Windows-Embarcadero.cmake index f8e1c9e..48b936e 100644 --- a/Modules/Platform/Windows-Embarcadero.cmake +++ b/Modules/Platform/Windows-Embarcadero.cmake @@ -76,6 +76,8 @@ macro(__embarcadero_language lang) set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "${_tD}") # ... while this is a space separated string. set(CMAKE_${lang}_USE_RESPONSE_FILE_FOR_INCLUDES 1) + set (CMAKE_${lang}_LINKER_WRAPPER_FLAG "-l") + # compile a source file into an object file # place <DEFINES> outside the response file because Borland refuses # to parse quotes from the response file. diff --git a/Modules/Platform/Windows-Intel.cmake b/Modules/Platform/Windows-Intel.cmake index ba31001..96b1760 100644 --- a/Modules/Platform/Windows-Intel.cmake +++ b/Modules/Platform/Windows-Intel.cmake @@ -11,7 +11,7 @@ set(__WINDOWS_INTEL 1) include(Platform/Windows-MSVC) macro(__windows_compiler_intel lang) __windows_compiler_msvc(${lang}) - string(REPLACE "<CMAKE_LINKER> /lib" "lib" CMAKE_${lang}_CREATE_STATIC_LIBRARY "${CMAKE_${lang}_CREATE_STATIC_LIBRARY}") + string(REPLACE "<CMAKE_LINKER> /lib" "xilib" CMAKE_${lang}_CREATE_STATIC_LIBRARY "${CMAKE_${lang}_CREATE_STATIC_LIBRARY}") foreach(rule CREATE_SHARED_LIBRARY CREATE_SHARED_MODULE LINK_EXECUTABLE) string(REPLACE "<CMAKE_LINKER>" "xilink" CMAKE_${lang}_${rule} "${CMAKE_${lang}_${rule}}") endforeach() diff --git a/Modules/Platform/WindowsPhone-Clang-C.cmake b/Modules/Platform/WindowsPhone-Clang-C.cmake new file mode 100644 index 0000000..6e38572 --- /dev/null +++ b/Modules/Platform/WindowsPhone-Clang-C.cmake @@ -0,0 +1 @@ +include(Platform/Windows-Clang-C) diff --git a/Modules/Platform/WindowsPhone-Clang-CXX.cmake b/Modules/Platform/WindowsPhone-Clang-CXX.cmake new file mode 100644 index 0000000..bf47978 --- /dev/null +++ b/Modules/Platform/WindowsPhone-Clang-CXX.cmake @@ -0,0 +1 @@ +include(Platform/Windows-Clang-CXX) diff --git a/Modules/Platform/WindowsPhone-GNU-C.cmake b/Modules/Platform/WindowsPhone-GNU-C.cmake new file mode 100644 index 0000000..ff6acd5 --- /dev/null +++ b/Modules/Platform/WindowsPhone-GNU-C.cmake @@ -0,0 +1 @@ +include(Platform/Windows-GNU-C) diff --git a/Modules/Platform/WindowsPhone-GNU-CXX.cmake b/Modules/Platform/WindowsPhone-GNU-CXX.cmake new file mode 100644 index 0000000..6adab6a --- /dev/null +++ b/Modules/Platform/WindowsPhone-GNU-CXX.cmake @@ -0,0 +1 @@ +include(Platform/Windows-GNU-CXX) diff --git a/Modules/Platform/WindowsStore-Clang-C.cmake b/Modules/Platform/WindowsStore-Clang-C.cmake new file mode 100644 index 0000000..6e38572 --- /dev/null +++ b/Modules/Platform/WindowsStore-Clang-C.cmake @@ -0,0 +1 @@ +include(Platform/Windows-Clang-C) diff --git a/Modules/Platform/WindowsStore-Clang-CXX.cmake b/Modules/Platform/WindowsStore-Clang-CXX.cmake new file mode 100644 index 0000000..bf47978 --- /dev/null +++ b/Modules/Platform/WindowsStore-Clang-CXX.cmake @@ -0,0 +1 @@ +include(Platform/Windows-Clang-CXX) diff --git a/Modules/Platform/WindowsStore-GNU-C.cmake b/Modules/Platform/WindowsStore-GNU-C.cmake new file mode 100644 index 0000000..ff6acd5 --- /dev/null +++ b/Modules/Platform/WindowsStore-GNU-C.cmake @@ -0,0 +1 @@ +include(Platform/Windows-GNU-C) diff --git a/Modules/Platform/WindowsStore-GNU-CXX.cmake b/Modules/Platform/WindowsStore-GNU-CXX.cmake new file mode 100644 index 0000000..6adab6a --- /dev/null +++ b/Modules/Platform/WindowsStore-GNU-CXX.cmake @@ -0,0 +1 @@ +include(Platform/Windows-GNU-CXX) diff --git a/Modules/ProcessorCount.cmake b/Modules/ProcessorCount.cmake index 772a615..05f56d8 100644 --- a/Modules/ProcessorCount.cmake +++ b/Modules/ProcessorCount.cmake @@ -1,44 +1,45 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# ProcessorCount -# -------------- -# -# ProcessorCount(var) -# -# Determine the number of processors/cores and save value in ${var} -# -# Sets the variable named ${var} to the number of physical cores -# available on the machine if the information can be determined. -# Otherwise it is set to 0. Currently this functionality is implemented -# for AIX, cygwin, FreeBSD, HPUX, IRIX, Linux, Mac OS X, QNX, Sun and -# Windows. -# -# This function is guaranteed to return a positive integer (>=1) if it -# succeeds. It returns 0 if there's a problem determining the processor -# count. -# -# Example use, in a ctest -S dashboard script: -# -# :: -# -# include(ProcessorCount) -# ProcessorCount(N) -# if(NOT N EQUAL 0) -# set(CTEST_BUILD_FLAGS -j${N}) -# set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N}) -# endif() -# -# -# -# This function is intended to offer an approximation of the value of -# the number of compute cores available on the current machine, such -# that you may use that value for parallel building and parallel -# testing. It is meant to help utilize as much of the machine as seems -# reasonable. Of course, knowledge of what else might be running on the -# machine simultaneously should be used when deciding whether to request -# a machine's full capacity all for yourself. +#[=======================================================================[.rst: +ProcessorCount +-------------- + +ProcessorCount(var) + +Determine the number of processors/cores and save value in ${var} + +Sets the variable named ${var} to the number of physical cores +available on the machine if the information can be determined. +Otherwise it is set to 0. Currently this functionality is implemented +for AIX, cygwin, FreeBSD, HPUX, IRIX, Linux, macOS, QNX, Sun and +Windows. + +This function is guaranteed to return a positive integer (>=1) if it +succeeds. It returns 0 if there's a problem determining the processor +count. + +Example use, in a ctest -S dashboard script: + +:: + + include(ProcessorCount) + ProcessorCount(N) + if(NOT N EQUAL 0) + set(CTEST_BUILD_FLAGS -j${N}) + set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N}) + endif() + + + +This function is intended to offer an approximation of the value of +the number of compute cores available on the current machine, such +that you may use that value for parallel building and parallel +testing. It is meant to help utilize as much of the machine as seems +reasonable. Of course, knowledge of what else might be running on the +machine simultaneously should be used when deciding whether to request +a machine's full capacity all for yourself. +#]=======================================================================] # A more reliable way might be to compile a small C program that uses the CPUID # instruction, but that again requires compiler support or compiling assembler diff --git a/Modules/Qt4ConfigDependentSettings.cmake b/Modules/Qt4ConfigDependentSettings.cmake index e21ecf4..684ec21 100644 --- a/Modules/Qt4ConfigDependentSettings.cmake +++ b/Modules/Qt4ConfigDependentSettings.cmake @@ -1,13 +1,14 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# Qt4ConfigDependentSettings -# -------------------------- -# -# -# -# This file is included by FindQt4.cmake, don't include it directly. +#[=======================================================================[.rst: +Qt4ConfigDependentSettings +-------------------------- + + + +This file is included by FindQt4.cmake, don't include it directly. +#]=======================================================================] ############################################### # diff --git a/Modules/Qt4Macros.cmake b/Modules/Qt4Macros.cmake index a2c8d85..5c48970 100644 --- a/Modules/Qt4Macros.cmake +++ b/Modules/Qt4Macros.cmake @@ -1,13 +1,14 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# Qt4Macros -# --------- -# -# -# -# This file is included by FindQt4.cmake, don't include it directly. +#[=======================================================================[.rst: +Qt4Macros +--------- + + + +This file is included by FindQt4.cmake, don't include it directly. +#]=======================================================================] ###################################### # diff --git a/Modules/SelectLibraryConfigurations.cmake b/Modules/SelectLibraryConfigurations.cmake index fe3bb00..8cb714d 100644 --- a/Modules/SelectLibraryConfigurations.cmake +++ b/Modules/SelectLibraryConfigurations.cmake @@ -1,31 +1,32 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# SelectLibraryConfigurations -# --------------------------- -# -# -# -# select_library_configurations( basename ) -# -# This macro takes a library base name as an argument, and will choose -# good values for basename_LIBRARY, basename_LIBRARIES, -# basename_LIBRARY_DEBUG, and basename_LIBRARY_RELEASE depending on what -# has been found and set. If only basename_LIBRARY_RELEASE is defined, -# basename_LIBRARY will be set to the release value, and -# basename_LIBRARY_DEBUG will be set to basename_LIBRARY_DEBUG-NOTFOUND. -# If only basename_LIBRARY_DEBUG is defined, then basename_LIBRARY will -# take the debug value, and basename_LIBRARY_RELEASE will be set to -# basename_LIBRARY_RELEASE-NOTFOUND. -# -# If the generator supports configuration types, then basename_LIBRARY -# and basename_LIBRARIES will be set with debug and optimized flags -# specifying the library to be used for the given configuration. If no -# build type has been set or the generator in use does not support -# configuration types, then basename_LIBRARY and basename_LIBRARIES will -# take only the release value, or the debug value if the release one is -# not set. +#[=======================================================================[.rst: +SelectLibraryConfigurations +--------------------------- + + + +select_library_configurations( basename ) + +This macro takes a library base name as an argument, and will choose +good values for basename_LIBRARY, basename_LIBRARIES, +basename_LIBRARY_DEBUG, and basename_LIBRARY_RELEASE depending on what +has been found and set. If only basename_LIBRARY_RELEASE is defined, +basename_LIBRARY will be set to the release value, and +basename_LIBRARY_DEBUG will be set to basename_LIBRARY_DEBUG-NOTFOUND. +If only basename_LIBRARY_DEBUG is defined, then basename_LIBRARY will +take the debug value, and basename_LIBRARY_RELEASE will be set to +basename_LIBRARY_RELEASE-NOTFOUND. + +If the generator supports configuration types, then basename_LIBRARY +and basename_LIBRARIES will be set with debug and optimized flags +specifying the library to be used for the given configuration. If no +build type has been set or the generator in use does not support +configuration types, then basename_LIBRARY and basename_LIBRARIES will +take only the release value, or the debug value if the release one is +not set. +#]=======================================================================] # This macro was adapted from the FindQt4 CMake module and is maintained by Will # Dicharry <wdicharry@stellarscience.com>. diff --git a/Modules/SquishTestScript.cmake b/Modules/SquishTestScript.cmake index c0e1bea..2a80be5 100644 --- a/Modules/SquishTestScript.cmake +++ b/Modules/SquishTestScript.cmake @@ -1,21 +1,22 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# SquishTestScript -# ---------------- -# -# -# -# -# -# This script launches a GUI test using Squish. You should not call the -# script directly; instead, you should access it via the SQUISH_ADD_TEST -# macro that is defined in FindSquish.cmake. -# -# This script starts the Squish server, launches the test on the client, -# and finally stops the squish server. If any of these steps fail -# (including if the tests do not pass) then a fatal error is raised. +#[=======================================================================[.rst: +SquishTestScript +---------------- + + + + + +This script launches a GUI test using Squish. You should not call the +script directly; instead, you should access it via the SQUISH_ADD_TEST +macro that is defined in FindSquish.cmake. + +This script starts the Squish server, launches the test on the client, +and finally stops the squish server. If any of these steps fail +(including if the tests do not pass) then a fatal error is raised. +#]=======================================================================] # print out the variable that we are using message(STATUS "squish_aut='${squish_aut}'") diff --git a/Modules/TestBigEndian.cmake b/Modules/TestBigEndian.cmake index 9a4bce5..0c6e188 100644 --- a/Modules/TestBigEndian.cmake +++ b/Modules/TestBigEndian.cmake @@ -1,18 +1,19 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# TestBigEndian -# ------------- -# -# Define macro to determine endian type -# -# Check if the system is big endian or little endian -# -# :: -# -# TEST_BIG_ENDIAN(VARIABLE) -# VARIABLE - variable to store the result to +#[=======================================================================[.rst: +TestBigEndian +------------- + +Define macro to determine endian type + +Check if the system is big endian or little endian + +:: + + TEST_BIG_ENDIAN(VARIABLE) + VARIABLE - variable to store the result to +#]=======================================================================] include(CheckTypeSize) diff --git a/Modules/TestCXXAcceptsFlag.cmake b/Modules/TestCXXAcceptsFlag.cmake index 10019ec..92a362e 100644 --- a/Modules/TestCXXAcceptsFlag.cmake +++ b/Modules/TestCXXAcceptsFlag.cmake @@ -1,22 +1,25 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# TestCXXAcceptsFlag -# ------------------ -# -# Deprecated. See :module:`CheckCXXCompilerFlag`. -# -# Check if the CXX compiler accepts a flag. -# -# .. code-block:: cmake -# -# CHECK_CXX_ACCEPTS_FLAG(<flags> <variable>) -# -# ``<flags>`` -# the flags to try -# ``<variable>`` -# variable to store the result +#[=======================================================================[.rst: +TestCXXAcceptsFlag +------------------ + +.. deprecated:: 3.0 + + See :module:`CheckCXXCompilerFlag`. + +Check if the CXX compiler accepts a flag. + +.. code-block:: cmake + + CHECK_CXX_ACCEPTS_FLAG(<flags> <variable>) + +``<flags>`` + the flags to try +``<variable>`` + variable to store the result +#]=======================================================================] macro(CHECK_CXX_ACCEPTS_FLAG FLAGS VARIABLE) if(NOT DEFINED ${VARIABLE}) diff --git a/Modules/TestForANSIForScope.cmake b/Modules/TestForANSIForScope.cmake index 7d2aad6..272e4ec 100644 --- a/Modules/TestForANSIForScope.cmake +++ b/Modules/TestForANSIForScope.cmake @@ -1,18 +1,19 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# TestForANSIForScope -# ------------------- -# -# Check for ANSI for scope support -# -# Check if the compiler restricts the scope of variables declared in a -# for-init-statement to the loop body. -# -# :: -# -# CMAKE_NO_ANSI_FOR_SCOPE - holds result +#[=======================================================================[.rst: +TestForANSIForScope +------------------- + +Check for ANSI for scope support + +Check if the compiler restricts the scope of variables declared in a +for-init-statement to the loop body. + +:: + + CMAKE_NO_ANSI_FOR_SCOPE - holds result +#]=======================================================================] if(NOT DEFINED CMAKE_ANSI_FOR_SCOPE) message(STATUS "Check for ANSI scope") diff --git a/Modules/TestForANSIStreamHeaders.cmake b/Modules/TestForANSIStreamHeaders.cmake index e890c67..e532a71 100644 --- a/Modules/TestForANSIStreamHeaders.cmake +++ b/Modules/TestForANSIStreamHeaders.cmake @@ -1,18 +1,19 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# TestForANSIStreamHeaders -# ------------------------ -# -# Test for compiler support of ANSI stream headers iostream, etc. -# -# check if the compiler supports the standard ANSI iostream header -# (without the .h) -# -# :: -# -# CMAKE_NO_ANSI_STREAM_HEADERS - defined by the results +#[=======================================================================[.rst: +TestForANSIStreamHeaders +------------------------ + +Test for compiler support of ANSI stream headers iostream, etc. + +check if the compiler supports the standard ANSI iostream header +(without the .h) + +:: + + CMAKE_NO_ANSI_STREAM_HEADERS - defined by the results +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/CheckIncludeFileCXX.cmake) diff --git a/Modules/TestForSSTREAM.cmake b/Modules/TestForSSTREAM.cmake index 0bfbfbb..e70df00 100644 --- a/Modules/TestForSSTREAM.cmake +++ b/Modules/TestForSSTREAM.cmake @@ -1,17 +1,18 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# TestForSSTREAM -# -------------- -# -# Test for compiler support of ANSI sstream header -# -# check if the compiler supports the standard ANSI sstream header -# -# :: -# -# CMAKE_NO_ANSI_STRING_STREAM - defined by the results +#[=======================================================================[.rst: +TestForSSTREAM +-------------- + +Test for compiler support of ANSI sstream header + +check if the compiler supports the standard ANSI sstream header + +:: + + CMAKE_NO_ANSI_STRING_STREAM - defined by the results +#]=======================================================================] if(NOT DEFINED CMAKE_HAS_ANSI_STRING_STREAM) message(STATUS "Check for sstream") diff --git a/Modules/TestForSTDNamespace.cmake b/Modules/TestForSTDNamespace.cmake index 3ae80c7..703e631 100644 --- a/Modules/TestForSTDNamespace.cmake +++ b/Modules/TestForSTDNamespace.cmake @@ -1,17 +1,18 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# TestForSTDNamespace -# ------------------- -# -# Test for std:: namespace support -# -# check if the compiler supports std:: on stl classes -# -# :: -# -# CMAKE_NO_STD_NAMESPACE - defined by the results +#[=======================================================================[.rst: +TestForSTDNamespace +------------------- + +Test for std:: namespace support + +check if the compiler supports std:: on stl classes + +:: + + CMAKE_NO_STD_NAMESPACE - defined by the results +#]=======================================================================] if(NOT DEFINED CMAKE_STD_NAMESPACE) message(STATUS "Check for STD namespace") diff --git a/Modules/UseEcos.cmake b/Modules/UseEcos.cmake index 700bfe6..6d13d42 100644 --- a/Modules/UseEcos.cmake +++ b/Modules/UseEcos.cmake @@ -1,32 +1,33 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# UseEcos -# ------- -# -# This module defines variables and macros required to build eCos application. -# -# This file contains the following macros: -# ECOS_ADD_INCLUDE_DIRECTORIES() - add the eCos include dirs -# ECOS_ADD_EXECUTABLE(name source1 ... sourceN ) - create an eCos -# executable ECOS_ADJUST_DIRECTORY(VAR source1 ... sourceN ) - adjusts -# the path of the source files and puts the result into VAR -# -# Macros for selecting the toolchain: ECOS_USE_ARM_ELF_TOOLS() - enable -# the ARM ELF toolchain for the directory where it is called -# ECOS_USE_I386_ELF_TOOLS() - enable the i386 ELF toolchain for the -# directory where it is called ECOS_USE_PPC_EABI_TOOLS() - enable the -# PowerPC toolchain for the directory where it is called -# -# It contains the following variables: ECOS_DEFINITIONS -# ECOSCONFIG_EXECUTABLE ECOS_CONFIG_FILE - defaults to ecos.ecc, if your -# eCos configuration file has a different name, adjust this variable for -# internal use only: -# -# :: -# -# ECOS_ADD_TARGET_LIB +#[=======================================================================[.rst: +UseEcos +------- + +This module defines variables and macros required to build eCos application. + +This file contains the following macros: +ECOS_ADD_INCLUDE_DIRECTORIES() - add the eCos include dirs +ECOS_ADD_EXECUTABLE(name source1 ... sourceN ) - create an eCos +executable ECOS_ADJUST_DIRECTORY(VAR source1 ... sourceN ) - adjusts +the path of the source files and puts the result into VAR + +Macros for selecting the toolchain: ECOS_USE_ARM_ELF_TOOLS() - enable +the ARM ELF toolchain for the directory where it is called +ECOS_USE_I386_ELF_TOOLS() - enable the i386 ELF toolchain for the +directory where it is called ECOS_USE_PPC_EABI_TOOLS() - enable the +PowerPC toolchain for the directory where it is called + +It contains the following variables: ECOS_DEFINITIONS +ECOSCONFIG_EXECUTABLE ECOS_CONFIG_FILE - defaults to ecos.ecc, if your +eCos configuration file has a different name, adjust this variable for +internal use only: + +:: + + ECOS_ADD_TARGET_LIB +#]=======================================================================] # first check that ecosconfig is available find_program(ECOSCONFIG_EXECUTABLE NAMES ecosconfig) diff --git a/Modules/UseJava.cmake b/Modules/UseJava.cmake index 6e2c511..68c9a27 100644 --- a/Modules/UseJava.cmake +++ b/Modules/UseJava.cmake @@ -1,438 +1,439 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# UseJava -# ------- -# -# Use Module for Java -# -# This file provides functions for Java. It is assumed that -# FindJava.cmake has already been loaded. See FindJava.cmake for -# information on how to load Java into your CMake project. -# -# :: -# -# add_jar(target_name -# [SOURCES] source1 [source2 ...] [resource1 ...] -# [INCLUDE_JARS jar1 [jar2 ...]] -# [ENTRY_POINT entry] -# [VERSION version] -# [OUTPUT_NAME name] -# [OUTPUT_DIR dir] -# [GENERATE_NATIVE_HEADERS target [DESTINATION dir]] -# ) -# -# This command creates a <target_name>.jar. It compiles the given -# source files (source) and adds the given resource files (resource) to -# the jar file. Source files can be java files or listing files -# (prefixed by '@'). If only resource files are given then just a jar file -# is created. The list of include jars are added to the classpath when -# compiling the java sources and also to the dependencies of the target. -# INCLUDE_JARS also accepts other target names created by add_jar. For -# backwards compatibility, jar files listed as sources are ignored (as -# they have been since the first version of this module). -# -# The default OUTPUT_DIR can also be changed by setting the variable -# CMAKE_JAVA_TARGET_OUTPUT_DIR. -# -# Optionally, using option GENERATE_NATIVE_HEADERS, native header files can be generated -# for methods declared as native. These files provide the connective glue that allow your -# Java and C code to interact. An INTERFACE target will be created for an easy usage -# of generated files. Sub-option DESTINATION can be used to specify output directory for -# generated header files. -# -# GENERATE_NATIVE_HEADERS option requires, at least, version 1.8 of the JDK. -# -# Additional instructions: -# -# :: -# -# To add compile flags to the target you can set these flags with -# the following variable: -# -# -# -# :: -# -# set(CMAKE_JAVA_COMPILE_FLAGS -nowarn) -# -# -# -# :: -# -# To add a path or a jar file to the class path you can do this -# with the CMAKE_JAVA_INCLUDE_PATH variable. -# -# -# -# :: -# -# set(CMAKE_JAVA_INCLUDE_PATH /usr/share/java/shibboleet.jar) -# -# -# -# :: -# -# To use a different output name for the target you can set it with: -# -# -# -# :: -# -# add_jar(foobar foobar.java OUTPUT_NAME shibboleet.jar) -# -# -# -# :: -# -# To use a different output directory than CMAKE_CURRENT_BINARY_DIR -# you can set it with: -# -# -# -# :: -# -# add_jar(foobar foobar.java OUTPUT_DIR ${PROJECT_BINARY_DIR}/bin) -# -# -# -# :: -# -# To define an entry point in your jar you can set it with the ENTRY_POINT -# named argument: -# -# -# -# :: -# -# add_jar(example ENTRY_POINT com/examples/MyProject/Main) -# -# -# -# :: -# -# To define a custom manifest for the jar, you can set it with the manifest -# named argument: -# -# -# -# :: -# -# add_jar(example MANIFEST /path/to/manifest) -# -# -# -# :: -# -# To add a VERSION to the target output name you can set it using -# the VERSION named argument to add_jar. This will create a jar file with the -# name shibboleet-1.0.0.jar and will create a symlink shibboleet.jar -# pointing to the jar with the version information. -# -# -# -# :: -# -# add_jar(shibboleet shibbotleet.java VERSION 1.2.0) -# -# -# -# :: -# -# If the target is a JNI library, utilize the following commands to -# create a JNI symbolic link: -# -# -# -# :: -# -# set(CMAKE_JNI_TARGET TRUE) -# add_jar(shibboleet shibbotleet.java VERSION 1.2.0) -# install_jar(shibboleet ${LIB_INSTALL_DIR}/shibboleet) -# install_jni_symlink(shibboleet ${JAVA_LIB_INSTALL_DIR}) -# -# -# -# :: -# -# If a single target needs to produce more than one jar from its -# java source code, to prevent the accumulation of duplicate class -# files in subsequent jars, set/reset CMAKE_JAR_CLASSES_PREFIX prior -# to calling the add_jar() function: -# -# -# -# :: -# -# set(CMAKE_JAR_CLASSES_PREFIX com/redhat/foo) -# add_jar(foo foo.java) -# -# -# -# :: -# -# set(CMAKE_JAR_CLASSES_PREFIX com/redhat/bar) -# add_jar(bar bar.java) -# -# -# -# :: -# -# For an optimum usage of option GENERATE_NATIVE_HEADERS, it is recommended to -# include module JNI before any call to add_jar. The produced target for native -# headers can then be used to compile C/C++ sources with command -# target_link_libraries. -# -# -# :: -# -# find_package(JNI) -# add_jar(foo foo.java GENERATE_NATIVE_HEADERS foo-native) -# add_library(bar bar.cpp) -# target_link_libraries(bar PRIVATE foo-native) -# -# -# Target Properties: -# -# :: -# -# The add_jar() function sets some target properties. You can get these -# properties with the -# get_property(TARGET <target_name> PROPERTY <propery_name>) -# command. -# -# -# -# :: -# -# INSTALL_FILES The files which should be installed. This is used by -# install_jar(). -# JNI_SYMLINK The JNI symlink which should be installed. -# This is used by install_jni_symlink(). -# JAR_FILE The location of the jar file so that you can include -# it. -# CLASSDIR The directory where the class files can be found. For -# example to use them with javah. -# -# :: -# -# find_jar(<VAR> -# name | NAMES name1 [name2 ...] -# [PATHS path1 [path2 ... ENV var]] -# [VERSIONS version1 [version2]] -# [DOC "cache documentation string"] -# ) -# -# This command is used to find a full path to the named jar. A cache -# entry named by <VAR> is created to stor the result of this command. -# If the full path to a jar is found the result is stored in the -# variable and the search will not repeated unless the variable is -# cleared. If nothing is found, the result will be <VAR>-NOTFOUND, and -# the search will be attempted again next time find_jar is invoked with -# the same variable. The name of the full path to a file that is -# searched for is specified by the names listed after NAMES argument. -# Additional search locations can be specified after the PATHS argument. -# If you require special a version of a jar file you can specify it with -# the VERSIONS argument. The argument after DOC will be used for the -# documentation string in the cache. -# -# :: -# -# install_jar(target_name destination) -# install_jar(target_name DESTINATION destination [COMPONENT component]) -# -# This command installs the TARGET_NAME files to the given DESTINATION. -# It should be called in the same scope as add_jar() or it will fail. -# -# Target Properties: -# -# :: -# -# The install_jar() function sets the INSTALL_DESTINATION target property -# on jars so installed. This property holds the DESTINATION as described -# above, and is used by install_jar_exports(). You can get this property -# with the -# get_property(TARGET <target_name> PROPERTY INSTALL_DESTINATION) -# command. -# -# -# -# :: -# -# install_jni_symlink(target_name destination) -# install_jni_symlink(target_name DESTINATION destination [COMPONENT component]) -# -# This command installs the TARGET_NAME JNI symlinks to the given -# DESTINATION. It should be called in the same scope as add_jar() or it -# will fail. -# -# :: -# -# install_jar_exports(TARGETS jars... -# [NAMESPACE <namespace>] -# FILE <filename> -# DESTINATION <dir> [COMPONENT <component>]) -# -# This command installs a target export file ``<filename>`` for the named jar -# targets to the given ``DESTINATION``. Its function is similar to that of -# :command:`install(EXPORTS ...)`. -# -# :: -# -# export_jars(TARGETS jars... -# [NAMESPACE <namespace>] -# FILE <filename>) -# -# This command writes a target export file ``<filename>`` for the named jar -# targets. Its function is similar to that of :command:`export(...)`. -# -# :: -# -# create_javadoc(<VAR> -# PACKAGES pkg1 [pkg2 ...] -# [SOURCEPATH <sourcepath>] -# [CLASSPATH <classpath>] -# [INSTALLPATH <install path>] -# [DOCTITLE "the documentation title"] -# [WINDOWTITLE "the title of the document"] -# [AUTHOR TRUE|FALSE] -# [USE TRUE|FALSE] -# [VERSION TRUE|FALSE] -# ) -# -# Create java documentation based on files or packages. For more -# details please read the javadoc manpage. -# -# There are two main signatures for create_javadoc. The first signature -# works with package names on a path with source files: -# -# :: -# -# Example: -# create_javadoc(my_example_doc -# PACKAGES com.example.foo com.example.bar -# SOURCEPATH "${CMAKE_CURRENT_SOURCE_DIR}" -# CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH} -# WINDOWTITLE "My example" -# DOCTITLE "<h1>My example</h1>" -# AUTHOR TRUE -# USE TRUE -# VERSION TRUE -# ) -# -# -# -# The second signature for create_javadoc works on a given list of -# files. -# -# :: -# -# create_javadoc(<VAR> -# FILES file1 [file2 ...] -# [CLASSPATH <classpath>] -# [INSTALLPATH <install path>] -# [DOCTITLE "the documentation title"] -# [WINDOWTITLE "the title of the document"] -# [AUTHOR TRUE|FALSE] -# [USE TRUE|FALSE] -# [VERSION TRUE|FALSE] -# ) -# -# -# -# Example: -# -# :: -# -# create_javadoc(my_example_doc -# FILES ${example_SRCS} -# CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH} -# WINDOWTITLE "My example" -# DOCTITLE "<h1>My example</h1>" -# AUTHOR TRUE -# USE TRUE -# VERSION TRUE -# ) -# -# -# -# Both signatures share most of the options. These options are the same -# as what you can find in the javadoc manpage. Please look at the -# manpage for CLASSPATH, DOCTITLE, WINDOWTITLE, AUTHOR, USE and VERSION. -# -# The documentation will be by default installed to -# -# :: -# -# ${CMAKE_INSTALL_PREFIX}/share/javadoc/<VAR> -# -# -# -# if you don't set the INSTALLPATH. -# -# :: -# -# create_javah(TARGET <target> -# GENERATED_FILES <VAR> -# CLASSES <class>... -# [CLASSPATH <classpath>...] -# [DEPENDS <depend>...] -# [OUTPUT_NAME <path>|OUTPUT_DIR <path>] -# ) -# -# Create C header files from java classes. These files provide the connective glue -# that allow your Java and C code to interact. -# -# This command will no longer be supported starting with version 10 of the JDK due -# to the `suppression of javah tool <http://openjdk.java.net/jeps/313>`_. -# Command ``add_jar(GENERATE_NATIVE_HEADERS)`` must be used instead. -# -# There are two main signatures for create_javah. The first signature -# returns generated files through variable specified by GENERATED_FILES option: -# -# :: -# -# Example: -# Create_javah(GENERATED_FILES files_headers -# CLASSES org.cmake.HelloWorld -# CLASSPATH hello.jar -# ) -# -# -# -# The second signature for create_javah creates a target which encapsulates -# header files generation. -# -# :: -# -# Example: -# Create_javah(TARGET target_headers -# CLASSES org.cmake.HelloWorld -# CLASSPATH hello.jar -# ) -# -# -# -# Both signatures share same options. -# -# ``CLASSES <class>...`` -# Specifies Java classes used to generate headers. -# -# ``CLASSPATH <classpath>...`` -# Specifies various paths to look up classes. Here .class files, jar files or targets -# created by command add_jar can be used. -# -# ``DEPENDS <depend>...`` -# Targets on which the javah target depends -# -# ``OUTPUT_NAME <path>`` -# Concatenates the resulting header files for all the classes listed by option CLASSES -# into <path>. Same behavior as option '-o' of javah tool. -# -# ``OUTPUT_DIR <path>`` -# Sets the directory where the header files will be generated. Same behavior as option -# '-d' of javah tool. If not specified, ${CMAKE_CURRENT_BINARY_DIR} is used as output directory. +#[=======================================================================[.rst: +UseJava +------- + +Use Module for Java + +This file provides functions for Java. It is assumed that +FindJava.cmake has already been loaded. See FindJava.cmake for +information on how to load Java into your CMake project. + +:: + + add_jar(target_name + [SOURCES] source1 [source2 ...] [resource1 ...] + [INCLUDE_JARS jar1 [jar2 ...]] + [ENTRY_POINT entry] + [VERSION version] + [OUTPUT_NAME name] + [OUTPUT_DIR dir] + [GENERATE_NATIVE_HEADERS target [DESTINATION dir]] + ) + +This command creates a <target_name>.jar. It compiles the given +source files (source) and adds the given resource files (resource) to +the jar file. Source files can be java files or listing files +(prefixed by '@'). If only resource files are given then just a jar file +is created. The list of include jars are added to the classpath when +compiling the java sources and also to the dependencies of the target. +INCLUDE_JARS also accepts other target names created by add_jar. For +backwards compatibility, jar files listed as sources are ignored (as +they have been since the first version of this module). + +The default OUTPUT_DIR can also be changed by setting the variable +CMAKE_JAVA_TARGET_OUTPUT_DIR. + +Optionally, using option GENERATE_NATIVE_HEADERS, native header files can be generated +for methods declared as native. These files provide the connective glue that allow your +Java and C code to interact. An INTERFACE target will be created for an easy usage +of generated files. Sub-option DESTINATION can be used to specify output directory for +generated header files. + +GENERATE_NATIVE_HEADERS option requires, at least, version 1.8 of the JDK. + +Additional instructions: + +:: + + To add compile flags to the target you can set these flags with + the following variable: + + + +:: + + set(CMAKE_JAVA_COMPILE_FLAGS -nowarn) + + + +:: + + To add a path or a jar file to the class path you can do this + with the CMAKE_JAVA_INCLUDE_PATH variable. + + + +:: + + set(CMAKE_JAVA_INCLUDE_PATH /usr/share/java/shibboleet.jar) + + + +:: + + To use a different output name for the target you can set it with: + + + +:: + + add_jar(foobar foobar.java OUTPUT_NAME shibboleet.jar) + + + +:: + + To use a different output directory than CMAKE_CURRENT_BINARY_DIR + you can set it with: + + + +:: + + add_jar(foobar foobar.java OUTPUT_DIR ${PROJECT_BINARY_DIR}/bin) + + + +:: + + To define an entry point in your jar you can set it with the ENTRY_POINT + named argument: + + + +:: + + add_jar(example ENTRY_POINT com/examples/MyProject/Main) + + + +:: + + To define a custom manifest for the jar, you can set it with the manifest + named argument: + + + +:: + + add_jar(example MANIFEST /path/to/manifest) + + + +:: + + To add a VERSION to the target output name you can set it using + the VERSION named argument to add_jar. This will create a jar file with the + name shibboleet-1.0.0.jar and will create a symlink shibboleet.jar + pointing to the jar with the version information. + + + +:: + + add_jar(shibboleet shibbotleet.java VERSION 1.2.0) + + + +:: + + If the target is a JNI library, utilize the following commands to + create a JNI symbolic link: + + + +:: + + set(CMAKE_JNI_TARGET TRUE) + add_jar(shibboleet shibbotleet.java VERSION 1.2.0) + install_jar(shibboleet ${LIB_INSTALL_DIR}/shibboleet) + install_jni_symlink(shibboleet ${JAVA_LIB_INSTALL_DIR}) + + + +:: + + If a single target needs to produce more than one jar from its + java source code, to prevent the accumulation of duplicate class + files in subsequent jars, set/reset CMAKE_JAR_CLASSES_PREFIX prior + to calling the add_jar() function: + + + +:: + + set(CMAKE_JAR_CLASSES_PREFIX com/redhat/foo) + add_jar(foo foo.java) + + + +:: + + set(CMAKE_JAR_CLASSES_PREFIX com/redhat/bar) + add_jar(bar bar.java) + + + +:: + + For an optimum usage of option GENERATE_NATIVE_HEADERS, it is recommended to + include module JNI before any call to add_jar. The produced target for native + headers can then be used to compile C/C++ sources with command + target_link_libraries. + + +:: + + find_package(JNI) + add_jar(foo foo.java GENERATE_NATIVE_HEADERS foo-native) + add_library(bar bar.cpp) + target_link_libraries(bar PRIVATE foo-native) + + +Target Properties: + +:: + + The add_jar() function sets some target properties. You can get these + properties with the + get_property(TARGET <target_name> PROPERTY <propery_name>) + command. + + + +:: + + INSTALL_FILES The files which should be installed. This is used by + install_jar(). + JNI_SYMLINK The JNI symlink which should be installed. + This is used by install_jni_symlink(). + JAR_FILE The location of the jar file so that you can include + it. + CLASSDIR The directory where the class files can be found. For + example to use them with javah. + +:: + + find_jar(<VAR> + name | NAMES name1 [name2 ...] + [PATHS path1 [path2 ... ENV var]] + [VERSIONS version1 [version2]] + [DOC "cache documentation string"] + ) + +This command is used to find a full path to the named jar. A cache +entry named by <VAR> is created to stor the result of this command. +If the full path to a jar is found the result is stored in the +variable and the search will not repeated unless the variable is +cleared. If nothing is found, the result will be <VAR>-NOTFOUND, and +the search will be attempted again next time find_jar is invoked with +the same variable. The name of the full path to a file that is +searched for is specified by the names listed after NAMES argument. +Additional search locations can be specified after the PATHS argument. +If you require special a version of a jar file you can specify it with +the VERSIONS argument. The argument after DOC will be used for the +documentation string in the cache. + +:: + + install_jar(target_name destination) + install_jar(target_name DESTINATION destination [COMPONENT component]) + +This command installs the TARGET_NAME files to the given DESTINATION. +It should be called in the same scope as add_jar() or it will fail. + +Target Properties: + +:: + + The install_jar() function sets the INSTALL_DESTINATION target property + on jars so installed. This property holds the DESTINATION as described + above, and is used by install_jar_exports(). You can get this property + with the + get_property(TARGET <target_name> PROPERTY INSTALL_DESTINATION) + command. + + + +:: + + install_jni_symlink(target_name destination) + install_jni_symlink(target_name DESTINATION destination [COMPONENT component]) + +This command installs the TARGET_NAME JNI symlinks to the given +DESTINATION. It should be called in the same scope as add_jar() or it +will fail. + +:: + + install_jar_exports(TARGETS jars... + [NAMESPACE <namespace>] + FILE <filename> + DESTINATION <dir> [COMPONENT <component>]) + +This command installs a target export file ``<filename>`` for the named jar +targets to the given ``DESTINATION``. Its function is similar to that of +:command:`install(EXPORTS ...)`. + +:: + + export_jars(TARGETS jars... + [NAMESPACE <namespace>] + FILE <filename>) + +This command writes a target export file ``<filename>`` for the named jar +targets. Its function is similar to that of :command:`export(...)`. + +:: + + create_javadoc(<VAR> + PACKAGES pkg1 [pkg2 ...] + [SOURCEPATH <sourcepath>] + [CLASSPATH <classpath>] + [INSTALLPATH <install path>] + [DOCTITLE "the documentation title"] + [WINDOWTITLE "the title of the document"] + [AUTHOR TRUE|FALSE] + [USE TRUE|FALSE] + [VERSION TRUE|FALSE] + ) + +Create java documentation based on files or packages. For more +details please read the javadoc manpage. + +There are two main signatures for create_javadoc. The first signature +works with package names on a path with source files: + +:: + + Example: + create_javadoc(my_example_doc + PACKAGES com.example.foo com.example.bar + SOURCEPATH "${CMAKE_CURRENT_SOURCE_DIR}" + CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH} + WINDOWTITLE "My example" + DOCTITLE "<h1>My example</h1>" + AUTHOR TRUE + USE TRUE + VERSION TRUE + ) + + + +The second signature for create_javadoc works on a given list of +files. + +:: + + create_javadoc(<VAR> + FILES file1 [file2 ...] + [CLASSPATH <classpath>] + [INSTALLPATH <install path>] + [DOCTITLE "the documentation title"] + [WINDOWTITLE "the title of the document"] + [AUTHOR TRUE|FALSE] + [USE TRUE|FALSE] + [VERSION TRUE|FALSE] + ) + + + +Example: + +:: + + create_javadoc(my_example_doc + FILES ${example_SRCS} + CLASSPATH ${CMAKE_JAVA_INCLUDE_PATH} + WINDOWTITLE "My example" + DOCTITLE "<h1>My example</h1>" + AUTHOR TRUE + USE TRUE + VERSION TRUE + ) + + + +Both signatures share most of the options. These options are the same +as what you can find in the javadoc manpage. Please look at the +manpage for CLASSPATH, DOCTITLE, WINDOWTITLE, AUTHOR, USE and VERSION. + +The documentation will be by default installed to + +:: + + ${CMAKE_INSTALL_PREFIX}/share/javadoc/<VAR> + + + +if you don't set the INSTALLPATH. + +:: + + create_javah(TARGET <target> + GENERATED_FILES <VAR> + CLASSES <class>... + [CLASSPATH <classpath>...] + [DEPENDS <depend>...] + [OUTPUT_NAME <path>|OUTPUT_DIR <path>] + ) + +Create C header files from java classes. These files provide the connective glue +that allow your Java and C code to interact. + +This command will no longer be supported starting with version 10 of the JDK due +to the `suppression of javah tool <http://openjdk.java.net/jeps/313>`_. +Command ``add_jar(GENERATE_NATIVE_HEADERS)`` must be used instead. + +There are two main signatures for create_javah. The first signature +returns generated files through variable specified by GENERATED_FILES option: + +:: + + Example: + Create_javah(GENERATED_FILES files_headers + CLASSES org.cmake.HelloWorld + CLASSPATH hello.jar + ) + + + +The second signature for create_javah creates a target which encapsulates +header files generation. + +:: + + Example: + Create_javah(TARGET target_headers + CLASSES org.cmake.HelloWorld + CLASSPATH hello.jar + ) + + + +Both signatures share same options. + + ``CLASSES <class>...`` + Specifies Java classes used to generate headers. + + ``CLASSPATH <classpath>...`` + Specifies various paths to look up classes. Here .class files, jar files or targets + created by command add_jar can be used. + + ``DEPENDS <depend>...`` + Targets on which the javah target depends + + ``OUTPUT_NAME <path>`` + Concatenates the resulting header files for all the classes listed by option CLASSES + into <path>. Same behavior as option '-o' of javah tool. + + ``OUTPUT_DIR <path>`` + Sets the directory where the header files will be generated. Same behavior as option + '-d' of javah tool. If not specified, ${CMAKE_CURRENT_BINARY_DIR} is used as output directory. +#]=======================================================================] function (__java_copy_file src dest comment) add_custom_command( diff --git a/Modules/UseJavaClassFilelist.cmake b/Modules/UseJavaClassFilelist.cmake index c2f9afa..1c4baa9 100644 --- a/Modules/UseJavaClassFilelist.cmake +++ b/Modules/UseJavaClassFilelist.cmake @@ -1,17 +1,18 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# UseJavaClassFilelist -# -------------------- -# -# -# -# -# -# This script create a list of compiled Java class files to be added to -# a jar file. This avoids including cmake files which get created in -# the binary directory. +#[=======================================================================[.rst: +UseJavaClassFilelist +-------------------- + + + + + +This script create a list of compiled Java class files to be added to +a jar file. This avoids including cmake files which get created in +the binary directory. +#]=======================================================================] if (CMAKE_JAVA_CLASS_OUTPUT_PATH) if (EXISTS "${CMAKE_JAVA_CLASS_OUTPUT_PATH}") diff --git a/Modules/UseJavaSymlinks.cmake b/Modules/UseJavaSymlinks.cmake index 358b9ef..3969f54 100644 --- a/Modules/UseJavaSymlinks.cmake +++ b/Modules/UseJavaSymlinks.cmake @@ -1,15 +1,16 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# UseJavaSymlinks -# --------------- -# -# -# -# -# -# Helper script for UseJava.cmake +#[=======================================================================[.rst: +UseJavaSymlinks +--------------- + + + + + +Helper script for UseJava.cmake +#]=======================================================================] if (UNIX AND _JAVA_TARGET_OUTPUT_LINK) if (_JAVA_TARGET_OUTPUT_NAME) diff --git a/Modules/UsePkgConfig.cmake b/Modules/UsePkgConfig.cmake index 28618eb..32d228d 100644 --- a/Modules/UsePkgConfig.cmake +++ b/Modules/UsePkgConfig.cmake @@ -1,24 +1,25 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# UsePkgConfig -# ------------ -# -# Obsolete pkg-config module for CMake, use FindPkgConfig instead. -# -# -# -# This module defines the following macro: -# -# PKGCONFIG(package includedir libdir linkflags cflags) -# -# Calling PKGCONFIG will fill the desired information into the 4 given -# arguments, e.g. PKGCONFIG(libart-2.0 LIBART_INCLUDE_DIR -# LIBART_LINK_DIR LIBART_LINK_FLAGS LIBART_CFLAGS) if pkg-config was NOT -# found or the specified software package doesn't exist, the variable -# will be empty when the function returns, otherwise they will contain -# the respective information +#[=======================================================================[.rst: +UsePkgConfig +------------ + +Obsolete pkg-config module for CMake, use FindPkgConfig instead. + + + +This module defines the following macro: + +PKGCONFIG(package includedir libdir linkflags cflags) + +Calling PKGCONFIG will fill the desired information into the 4 given +arguments, e.g. PKGCONFIG(libart-2.0 LIBART_INCLUDE_DIR +LIBART_LINK_DIR LIBART_LINK_FLAGS LIBART_CFLAGS) if pkg-config was NOT +found or the specified software package doesn't exist, the variable +will be empty when the function returns, otherwise they will contain +the respective information +#]=======================================================================] find_program(PKGCONFIG_EXECUTABLE NAMES pkg-config ) diff --git a/Modules/UseQt4.cmake b/Modules/UseQt4.cmake index c8eab77..dc2348e 100644 --- a/Modules/UseQt4.cmake +++ b/Modules/UseQt4.cmake @@ -1,15 +1,16 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# UseQt4 -# ------ -# -# Use Module for QT4 -# -# Sets up C and C++ to use Qt 4. It is assumed that FindQt.cmake has -# already been loaded. See FindQt.cmake for information on how to load -# Qt 4 into your CMake project. +#[=======================================================================[.rst: +UseQt4 +------ + +Use Module for QT4 + +Sets up C and C++ to use Qt 4. It is assumed that FindQt.cmake has +already been loaded. See FindQt.cmake for information on how to load +Qt 4 into your CMake project. +#]=======================================================================] add_definitions(${QT_DEFINITIONS}) set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<NOT:$<CONFIG:Debug>>:QT_NO_DEBUG>) diff --git a/Modules/UseSWIG.cmake b/Modules/UseSWIG.cmake index 492842b..d9a0389 100644 --- a/Modules/UseSWIG.cmake +++ b/Modules/UseSWIG.cmake @@ -30,9 +30,10 @@ Defines the following command for use with ``SWIG``: .. note:: - The variable ``SWIG_MODULE_<name>_REAL_NAME`` will be set to the name - of the swig module target library. This variable is useless if variable - ``UseSWIG_TARGET_NAME_PREFERENCE`` is set to ``STANDARD``. + This command creates a target with the specified ``<name>`` when + policy :policy:`CMP0078` is set to ``NEW``. Otherwise, the legacy + behavior will choose a different target name and store it in the + ``SWIG_MODULE_<name>_REAL_NAME`` variable. .. note:: @@ -117,6 +118,13 @@ ensure generated files will receive the required settings. :prop_sf:`INCLUDE_DIRECTORIES`, :prop_sf:`COMPILE_DEFINITIONS` and :prop_sf:`COMPILE_OPTIONS`. +``USE_TARGET_INCLUDE_DIRECTORIES`` + If set to ``TRUE``, contents of target property + :prop_tgt:`INCLUDE_DIRECTORIES` will be forwarded to ``SWIG`` compiler. + If set to ``FALSE`` target property :prop_tgt:`INCLUDE_DIRECTORIES` will be + ignored. If not set, target property ``SWIG_USE_TARGET_INCLUDE_DIRECTORIES`` + will be considered. + ``GENERATED_INCLUDE_DIRECTORIES``, ``GENERATED_COMPILE_DEFINITIONS`` and ``GENERATED_COMPILE_OPTIONS`` Add custom flags to the C/C++ generated source. They will fill, respectively, properties :prop_sf:`INCLUDE_DIRECTORIES`, :prop_sf:`COMPILE_DEFINITIONS` and @@ -149,6 +157,13 @@ input files. set_property(TARGET mymod PROPERTY SWIG_COMPILE_DEFINITIONS MY_DEF1 MY_DEF2) set_property(TARGET mymod PROPERTY SWIG_COMPILE_OPTIONS -bla -blb) +``SWIG_USE_TARGET_INCLUDE_DIRECTORIES`` + If set to ``TRUE``, contents of target property + :prop_tgt:`INCLUDE_DIRECTORIES` will be forwarded to ``SWIG`` compiler. + If set to ``FALSE`` or not defined, target property + :prop_tgt:`INCLUDE_DIRECTORIES` will be ignored. This behavior can be + overridden by specifying source property ``USE_TARGET_INCLUDE_DIRECTORIES``. + ``SWIG_GENERATED_INCLUDE_DIRECTORIES``, ``SWIG_GENERATED_COMPILE_DEFINITIONS`` and ``SWIG_GENERATED_COMPILE_OPTIONS`` These properties will populate, respectively, properties :prop_sf:`INCLUDE_DIRECTORIES`, :prop_sf:`COMPILE_DEFINITIONS` and @@ -183,13 +198,6 @@ information about support files generated by ``SWIG`` interface compilation. Some variables can be set to customize the behavior of ``swig_add_library`` as well as ``SWIG``: -``UseSWIG_TARGET_NAME_PREFERENCE`` - Specify target name strategy. - - * Set to ``LEGACY`` or undefined: legacy strategy is applied. Variable - ``SWIG_MODULE_<name>_REAL_NAME`` must be used to get real target name. - * Set to ``STANDARD``: target name matches specified name. - ``UseSWIG_MODULE_VERSION`` Specify different behaviors for ``UseSWIG`` module. @@ -211,8 +219,13 @@ as well as ``SWIG``: Specify extra dependencies for the generated module for ``<name>``. #]=======================================================================] - +cmake_policy(GET CMP0078 target_name_policy) cmake_policy (VERSION 3.12) +if (target_name_policy) + # respect user choice regarding CMP0078 policy + cmake_policy(SET CMP0078 ${target_name_policy}) +endif() +unset(target_name_policy) set(SWIG_CXX_EXTENSION "cxx") set(SWIG_EXTRA_LIBRARIES "") @@ -221,6 +234,8 @@ set(SWIG_PYTHON_EXTRA_FILE_EXTENSIONS ".py") set(SWIG_JAVA_EXTRA_FILE_EXTENSIONS ".java" "JNI.java") set(SWIG_CSHARP_EXTRA_FILE_EXTENSIONS ".cs" "PINVOKE.cs") +set(SWIG_MANAGE_SUPPORT_FILES_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/UseSWIG/ManageSupportFiles.cmake") + ## ## PRIVATE functions ## @@ -347,6 +362,14 @@ function(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile) endif() set (property "$<TARGET_PROPERTY:${target_name},SWIG_INCLUDE_DIRECTORIES>") list (APPEND swig_source_file_flags "$<$<BOOL:${property}>:-I$<JOIN:$<TARGET_GENEX_EVAL:${target_name},${property}>,$<SEMICOLON>-I>>") + set (property "$<TARGET_PROPERTY:${target_name},INCLUDE_DIRECTORIES>") + get_source_file_property(use_target_include_dirs "${infile}" USE_TARGET_INCLUDE_DIRECTORIES) + if (use_target_include_dirs) + list (APPEND swig_source_file_flags "$<$<BOOL:${property}>:-I$<JOIN:${property},$<SEMICOLON>-I>>") + elseif(use_target_include_dirs STREQUAL "NOTFOUND") + # not defined at source level, rely on target level + list (APPEND swig_source_file_flags "$<$<AND:$<BOOL:$<TARGET_PROPERTY:${target_name},SWIG_USE_TARGET_INCLUDE_DIRECTORIES>>,$<BOOL:${property}>>:-I$<JOIN:${property},$<SEMICOLON>-I>>") + endif() set (property "$<TARGET_PROPERTY:${target_name},SWIG_COMPILE_DEFINITIONS>") list (APPEND swig_source_file_flags "$<$<BOOL:${property}>:-D$<JOIN:$<TARGET_GENEX_EVAL:${target_name},${property}>,$<SEMICOLON>-D>>") @@ -423,9 +446,13 @@ function(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile) if (UseSWIG_MODULE_VERSION VERSION_GREATER 1) # as part of custom command, start by removing old generated files # to ensure obsolete files do not stay - set (swig_cleanup_command COMMAND "${CMAKE_COMMAND}" -E remove_directory "${outdir}") + set (swig_file_outdir "${workingdir}/${swig_source_file_name_we}.files") + set (swig_cleanup_command COMMAND "${CMAKE_COMMAND}" "-DSUPPORT_FILES_WORKING_DIRECTORY=${swig_file_outdir}" "-DSUPPORT_FILES_OUTPUT_DIRECTORY=${outdir}" -DACTION=CLEAN -P "${SWIG_MANAGE_SUPPORT_FILES_SCRIPT}") + set (swig_copy_command COMMAND "${CMAKE_COMMAND}" "-DSUPPORT_FILES_WORKING_DIRECTORY=${swig_file_outdir}" "-DSUPPORT_FILES_OUTPUT_DIRECTORY=${outdir}" -DACTION=COPY -P "${SWIG_MANAGE_SUPPORT_FILES_SCRIPT}") else() + set (swig_file_outdir "${outdir}") unset (swig_cleanup_command) + unset (swig_copy_command) endif() # IMPLICIT_DEPENDS below can not handle situations where a dependent file is @@ -455,16 +482,17 @@ function(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile) COMMAND "${CMAKE_COMMAND}" -E env "SWIG_LIB=${SWIG_DIR}" "${SWIG_EXECUTABLE}" "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}" "${swig_source_file_flags}" - -outdir "${outdir}" + -outdir "${swig_file_outdir}" ${swig_special_flags} ${swig_extra_flags} "${swig_include_dirs}" -o "${swig_generated_file_fullname}" "${swig_source_file_fullname}" + ${swig_copy_command} MAIN_DEPENDENCY "${swig_source_file_fullname}" DEPENDS ${swig_dependencies} IMPLICIT_DEPENDS CXX "${swig_source_file_fullname}" - COMMENT "Swig source" + COMMENT "Swig compile ${infile} for ${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}" COMMAND_EXPAND_LISTS) set_source_files_properties("${swig_generated_file_fullname}" ${swig_extra_generated_files} PROPERTIES GENERATED 1) @@ -528,10 +556,19 @@ function(SWIG_ADD_LIBRARY name) unset(_SAM_TYPE) endif() - if (NOT DEFINED UseSWIG_TARGET_NAME_PREFERENCE) - set (UseSWIG_TARGET_NAME_PREFERENCE LEGACY) - elseif (NOT UseSWIG_TARGET_NAME_PREFERENCE MATCHES "^(LEGACY|STANDARD)$") - message (FATAL_ERROR "UseSWIG_TARGET_NAME_PREFERENCE: ${UseSWIG_TARGET_NAME_PREFERENCE}: invalid value. 'LEGACY' or 'STANDARD' is expected.") + cmake_policy(GET CMP0078 target_name_policy) + if (target_name_policy STREQUAL "NEW") + set (UseSWIG_TARGET_NAME_PREFERENCE STANDARD) + else() + if (NOT target_name_policy) + cmake_policy(GET_WARNING CMP0078 _cmp0078_warning) + message(AUTHOR_WARNING "${_cmp0078_warning}\n") + endif() + if (NOT DEFINED UseSWIG_TARGET_NAME_PREFERENCE) + set (UseSWIG_TARGET_NAME_PREFERENCE LEGACY) + elseif (NOT UseSWIG_TARGET_NAME_PREFERENCE MATCHES "^(LEGACY|STANDARD)$") + message (FATAL_ERROR "UseSWIG_TARGET_NAME_PREFERENCE: ${UseSWIG_TARGET_NAME_PREFERENCE}: invalid value. 'LEGACY' or 'STANDARD' is expected.") + endif() endif() if (NOT DEFINED UseSWIG_MODULE_VERSION) diff --git a/Modules/UseSWIG/ManageSupportFiles.cmake b/Modules/UseSWIG/ManageSupportFiles.cmake new file mode 100644 index 0000000..4a03900 --- /dev/null +++ b/Modules/UseSWIG/ManageSupportFiles.cmake @@ -0,0 +1,31 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + + +if (ACTION STREQUAL "CLEAN") + # Collect current list of generated files + file (GLOB files LIST_DIRECTORIES FALSE RELATIVE "${SUPPORT_FILES_WORKING_DIRECTORY}" "${SUPPORT_FILES_WORKING_DIRECTORY}/*") + + if (files) + # clean-up the output directory + ## compute full paths + list (TRANSFORM files PREPEND "${SUPPORT_FILES_OUTPUT_DIRECTORY}/") + ## remove generated files from the output directory + file (REMOVE ${files}) + + # clean-up working directory + file (REMOVE_RECURSE "${SUPPORT_FILES_WORKING_DIRECTORY}") + endif() + + file (MAKE_DIRECTORY "${SUPPORT_FILES_WORKING_DIRECTORY}") +endif() + +if (ACTION STREQUAL "COPY") + # Collect current list of generated files + file (GLOB files LIST_DIRECTORIES FALSE "${SUPPORT_FILES_WORKING_DIRECTORY}/*") + + if (files) + # copy files to the output directory + file (COPY ${files} DESTINATION "${SUPPORT_FILES_OUTPUT_DIRECTORY}") + endif() +endif() diff --git a/Modules/Use_wxWindows.cmake b/Modules/Use_wxWindows.cmake index bd8cc01..782874c 100644 --- a/Modules/Use_wxWindows.cmake +++ b/Modules/Use_wxWindows.cmake @@ -1,35 +1,37 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# Use_wxWindows -# ------------- -# -# -# -# -# This convenience include finds if wxWindows is installed and set the -# appropriate libs, incdirs, flags etc. author Jan Woetzel <jw -at- -# mip.informatik.uni-kiel.de> (07/2003) -# -# USAGE: -# -# :: -# -# just include Use_wxWindows.cmake -# in your projects CMakeLists.txt -# -# include( ${CMAKE_MODULE_PATH}/Use_wxWindows.cmake) -# -# :: -# -# if you are sure you need GL then -# -# set(WXWINDOWS_USE_GL 1) -# -# :: -# -# *before* you include this file. +#[=======================================================================[.rst: +Use_wxWindows +------------- + +.. deprecated:: 2.8.10 + + Use ``find_package(wxWidgets)`` and ``include(${wxWidgets_USE_FILE})`` instead. + +This convenience include finds if wxWindows is installed and set the +appropriate libs, incdirs, flags etc. author Jan Woetzel <jw -at- +mip.informatik.uni-kiel.de> (07/2003) + +USAGE: + +:: + + just include Use_wxWindows.cmake + in your projects CMakeLists.txt + +include( ${CMAKE_MODULE_PATH}/Use_wxWindows.cmake) + +:: + + if you are sure you need GL then + +set(WXWINDOWS_USE_GL 1) + +:: + + *before* you include this file. +#]=======================================================================] # ----------------------------------------------------- # 16.Feb.2004: changed INCLUDE to FIND_PACKAGE to read from users own non-system CMAKE_MODULE_PATH (Jan Woetzel JW) @@ -65,4 +67,3 @@ if(WXWINDOWS_FOUND) else() message(SEND_ERROR "wxWindows not found by Use_wxWindows.cmake") endif() - diff --git a/Modules/UsewxWidgets.cmake b/Modules/UsewxWidgets.cmake index a50d03d..eed0410 100644 --- a/Modules/UsewxWidgets.cmake +++ b/Modules/UsewxWidgets.cmake @@ -1,41 +1,42 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# UsewxWidgets -# ------------ -# -# Convenience include for using wxWidgets library. -# -# Determines if wxWidgets was FOUND and sets the appropriate libs, -# incdirs, flags, etc. INCLUDE_DIRECTORIES and LINK_DIRECTORIES are -# called. -# -# USAGE -# -# :: -# -# # Note that for MinGW users the order of libs is important! -# find_package(wxWidgets REQUIRED net gl core base) -# include(${wxWidgets_USE_FILE}) -# # and for each of your dependent executable/library targets: -# target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES}) -# -# -# -# DEPRECATED -# -# :: -# -# LINK_LIBRARIES is not called in favor of adding dependencies per target. -# -# -# -# AUTHOR -# -# :: -# -# Jan Woetzel <jw -at- mip.informatik.uni-kiel.de> +#[=======================================================================[.rst: +UsewxWidgets +------------ + +Convenience include for using wxWidgets library. + +Determines if wxWidgets was FOUND and sets the appropriate libs, +incdirs, flags, etc. INCLUDE_DIRECTORIES and LINK_DIRECTORIES are +called. + +USAGE + +:: + + # Note that for MinGW users the order of libs is important! + find_package(wxWidgets REQUIRED net gl core base) + include(${wxWidgets_USE_FILE}) + # and for each of your dependent executable/library targets: + target_link_libraries(<YourTarget> ${wxWidgets_LIBRARIES}) + + + +DEPRECATED + +:: + + LINK_LIBRARIES is not called in favor of adding dependencies per target. + + + +AUTHOR + +:: + + Jan Woetzel <jw -at- mip.informatik.uni-kiel.de> +#]=======================================================================] # debug message and logging. # comment these out for distribution diff --git a/Modules/WriteBasicConfigVersionFile.cmake b/Modules/WriteBasicConfigVersionFile.cmake index 2f7c80a..1f13096 100644 --- a/Modules/WriteBasicConfigVersionFile.cmake +++ b/Modules/WriteBasicConfigVersionFile.cmake @@ -1,22 +1,24 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# WriteBasicConfigVersionFile -# --------------------------- -# -# -# -# :: -# -# WRITE_BASIC_CONFIG_VERSION_FILE( filename -# [VERSION major.minor.patch] -# COMPATIBILITY (AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion) -# ) -# -# -# -# Deprecated, see WRITE_BASIC_PACKAGE_VERSION_FILE(), it is identical. +#[=======================================================================[.rst: +WriteBasicConfigVersionFile +--------------------------- + +.. deprecated:: 3.0 + + Use the identical command :command:`write_basic_package_version_file()` + from module :module:`CMakePackageConfigHelpers`. + +:: + + WRITE_BASIC_CONFIG_VERSION_FILE( filename + [VERSION major.minor.patch] + COMPATIBILITY (AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion) + ) + + +#]=======================================================================] function(WRITE_BASIC_CONFIG_VERSION_FILE _filename) diff --git a/Modules/WriteCompilerDetectionHeader.cmake b/Modules/WriteCompilerDetectionHeader.cmake index 3718e9d..a556567 100644 --- a/Modules/WriteCompilerDetectionHeader.cmake +++ b/Modules/WriteCompilerDetectionHeader.cmake @@ -1,236 +1,237 @@ # Distributed under the OSI-approved BSD 3-Clause License. See accompanying # file Copyright.txt or https://cmake.org/licensing for details. -#.rst: -# WriteCompilerDetectionHeader -# ---------------------------- -# -# This module provides the function write_compiler_detection_header(). -# -# The ``WRITE_COMPILER_DETECTION_HEADER`` function can be used to generate -# a file suitable for preprocessor inclusion which contains macros to be -# used in source code:: -# -# write_compiler_detection_header( -# FILE <file> -# PREFIX <prefix> -# [OUTPUT_FILES_VAR <output_files_var> OUTPUT_DIR <output_dir>] -# COMPILERS <compiler> [...] -# FEATURES <feature> [...] -# [BARE_FEATURES <feature> [...]] -# [VERSION <version>] -# [PROLOG <prolog>] -# [EPILOG <epilog>] -# [ALLOW_UNKNOWN_COMPILERS] -# [ALLOW_UNKNOWN_COMPILER_VERSIONS] -# ) -# -# The ``write_compiler_detection_header`` function generates the -# file ``<file>`` with macros which all have the prefix ``<prefix>``. -# -# By default, all content is written directly to the ``<file>``. The -# ``OUTPUT_FILES_VAR`` may be specified to cause the compiler-specific -# content to be written to separate files. The separate files are then -# available in the ``<output_files_var>`` and may be consumed by the caller -# for installation for example. The ``OUTPUT_DIR`` specifies a relative -# path from the main ``<file>`` to the compiler-specific files. For example: -# -# .. code-block:: cmake -# -# write_compiler_detection_header( -# FILE climbingstats_compiler_detection.h -# PREFIX ClimbingStats -# OUTPUT_FILES_VAR support_files -# OUTPUT_DIR compilers -# COMPILERS GNU Clang MSVC Intel -# FEATURES cxx_variadic_templates -# ) -# install(FILES -# ${CMAKE_CURRENT_BINARY_DIR}/climbingstats_compiler_detection.h -# DESTINATION include -# ) -# install(FILES -# ${support_files} -# DESTINATION include/compilers -# ) -# -# -# ``VERSION`` may be used to specify the API version to be generated. -# Future versions of CMake may introduce alternative APIs. A given -# API is selected by any ``<version>`` value greater than or equal -# to the version of CMake that introduced the given API and less -# than the version of CMake that introduced its succeeding API. -# The value of the :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` -# variable is used if no explicit version is specified. -# (As of CMake version |release| there is only one API version.) -# -# ``PROLOG`` may be specified as text content to write at the start of the -# header. ``EPILOG`` may be specified as text content to write at the end -# of the header -# -# At least one ``<compiler>`` and one ``<feature>`` must be listed. Compilers -# which are known to CMake, but not specified are detected and a preprocessor -# ``#error`` is generated for them. A preprocessor macro matching -# ``<PREFIX>_COMPILER_IS_<compiler>`` is generated for each compiler -# known to CMake to contain the value ``0`` or ``1``. -# -# Possible compiler identifiers are documented with the -# :variable:`CMAKE_<LANG>_COMPILER_ID` variable. -# Available features in this version of CMake are listed in the -# :prop_gbl:`CMAKE_C_KNOWN_FEATURES` and -# :prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global properties. -# The ``{c,cxx}_std_*`` meta-features are ignored if requested. -# -# See the :manual:`cmake-compile-features(7)` manual for information on -# compile features. -# -# ``BARE_FEATURES`` will define the compatibility macros with the name used in -# newer versions of the language standard, so the code can use the new feature -# name unconditionally. -# -# ``ALLOW_UNKNOWN_COMPILERS`` and ``ALLOW_UNKNOWN_COMPILER_VERSIONS`` cause -# the module to generate conditions that treat unknown compilers as simply -# lacking all features. Without these options the default behavior is to -# generate a ``#error`` for unknown compilers and versions. -# -# Feature Test Macros -# =================== -# -# For each compiler, a preprocessor macro is generated matching -# ``<PREFIX>_COMPILER_IS_<compiler>`` which has the content either ``0`` -# or ``1``, depending on the compiler in use. Preprocessor macros for -# compiler version components are generated matching -# ``<PREFIX>_COMPILER_VERSION_MAJOR`` ``<PREFIX>_COMPILER_VERSION_MINOR`` -# and ``<PREFIX>_COMPILER_VERSION_PATCH`` containing decimal values -# for the corresponding compiler version components, if defined. -# -# A preprocessor test is generated based on the compiler version -# denoting whether each feature is enabled. A preprocessor macro -# matching ``<PREFIX>_COMPILER_<FEATURE>``, where ``<FEATURE>`` is the -# upper-case ``<feature>`` name, is generated to contain the value -# ``0`` or ``1`` depending on whether the compiler in use supports the -# feature: -# -# .. code-block:: cmake -# -# write_compiler_detection_header( -# FILE climbingstats_compiler_detection.h -# PREFIX ClimbingStats -# COMPILERS GNU Clang AppleClang MSVC Intel -# FEATURES cxx_variadic_templates -# ) -# -# .. code-block:: c++ -# -# #if ClimbingStats_COMPILER_CXX_VARIADIC_TEMPLATES -# template<typename... T> -# void someInterface(T t...) { /* ... */ } -# #else -# // Compatibility versions -# template<typename T1> -# void someInterface(T1 t1) { /* ... */ } -# template<typename T1, typename T2> -# void someInterface(T1 t1, T2 t2) { /* ... */ } -# template<typename T1, typename T2, typename T3> -# void someInterface(T1 t1, T2 t2, T3 t3) { /* ... */ } -# #endif -# -# Symbol Macros -# ============= -# -# Some additional symbol-defines are created for particular features for -# use as symbols which may be conditionally defined empty: -# -# .. code-block:: c++ -# -# class MyClass ClimbingStats_FINAL -# { -# ClimbingStats_CONSTEXPR int someInterface() { return 42; } -# }; -# -# The ``ClimbingStats_FINAL`` macro will expand to ``final`` if the -# compiler (and its flags) support the ``cxx_final`` feature, and the -# ``ClimbingStats_CONSTEXPR`` macro will expand to ``constexpr`` -# if ``cxx_constexpr`` is supported. -# -# If ``BARE_FEATURES cxx_final`` was given as argument the ``final`` keyword -# will be defined for old compilers, too. -# -# The following features generate corresponding symbol defines and if they -# are available as ``BARE_FEATURES``: -# -# ========================== =================================== ================= ====== -# Feature Define Symbol bare -# ========================== =================================== ================= ====== -# ``c_restrict`` ``<PREFIX>_RESTRICT`` ``restrict`` yes -# ``cxx_constexpr`` ``<PREFIX>_CONSTEXPR`` ``constexpr`` yes -# ``cxx_deleted_functions`` ``<PREFIX>_DELETED_FUNCTION`` ``= delete`` -# ``cxx_extern_templates`` ``<PREFIX>_EXTERN_TEMPLATE`` ``extern`` -# ``cxx_final`` ``<PREFIX>_FINAL`` ``final`` yes -# ``cxx_noexcept`` ``<PREFIX>_NOEXCEPT`` ``noexcept`` yes -# ``cxx_noexcept`` ``<PREFIX>_NOEXCEPT_EXPR(X)`` ``noexcept(X)`` -# ``cxx_override`` ``<PREFIX>_OVERRIDE`` ``override`` yes -# ========================== =================================== ================= ====== -# -# Compatibility Implementation Macros -# =================================== -# -# Some features are suitable for wrapping in a macro with a backward -# compatibility implementation if the compiler does not support the feature. -# -# When the ``cxx_static_assert`` feature is not provided by the compiler, -# a compatibility implementation is available via the -# ``<PREFIX>_STATIC_ASSERT(COND)`` and -# ``<PREFIX>_STATIC_ASSERT_MSG(COND, MSG)`` function-like macros. The macros -# expand to ``static_assert`` where that compiler feature is available, and -# to a compatibility implementation otherwise. In the first form, the -# condition is stringified in the message field of ``static_assert``. In -# the second form, the message ``MSG`` is passed to the message field of -# ``static_assert``, or ignored if using the backward compatibility -# implementation. -# -# The ``cxx_attribute_deprecated`` feature provides a macro definition -# ``<PREFIX>_DEPRECATED``, which expands to either the standard -# ``[[deprecated]]`` attribute or a compiler-specific decorator such -# as ``__attribute__((__deprecated__))`` used by GNU compilers. -# -# The ``cxx_alignas`` feature provides a macro definition -# ``<PREFIX>_ALIGNAS`` which expands to either the standard ``alignas`` -# decorator or a compiler-specific decorator such as -# ``__attribute__ ((__aligned__))`` used by GNU compilers. -# -# The ``cxx_alignof`` feature provides a macro definition -# ``<PREFIX>_ALIGNOF`` which expands to either the standard ``alignof`` -# decorator or a compiler-specific decorator such as ``__alignof__`` -# used by GNU compilers. -# -# ============================= ================================ ===================== ====== -# Feature Define Symbol bare -# ============================= ================================ ===================== ====== -# ``cxx_alignas`` ``<PREFIX>_ALIGNAS`` ``alignas`` -# ``cxx_alignof`` ``<PREFIX>_ALIGNOF`` ``alignof`` -# ``cxx_nullptr`` ``<PREFIX>_NULLPTR`` ``nullptr`` yes -# ``cxx_static_assert`` ``<PREFIX>_STATIC_ASSERT`` ``static_assert`` -# ``cxx_static_assert`` ``<PREFIX>_STATIC_ASSERT_MSG`` ``static_assert`` -# ``cxx_attribute_deprecated`` ``<PREFIX>_DEPRECATED`` ``[[deprecated]]`` -# ``cxx_attribute_deprecated`` ``<PREFIX>_DEPRECATED_MSG`` ``[[deprecated]]`` -# ``cxx_thread_local`` ``<PREFIX>_THREAD_LOCAL`` ``thread_local`` -# ============================= ================================ ===================== ====== -# -# A use-case which arises with such deprecation macros is the deprecation -# of an entire library. In that case, all public API in the library may -# be decorated with the ``<PREFIX>_DEPRECATED`` macro. This results in -# very noisy build output when building the library itself, so the macro -# may be may be defined to empty in that case when building the deprecated -# library: -# -# .. code-block:: cmake -# -# add_library(compat_support ${srcs}) -# target_compile_definitions(compat_support -# PRIVATE -# CompatSupport_DEPRECATED= -# ) +#[=======================================================================[.rst: +WriteCompilerDetectionHeader +---------------------------- + +This module provides the function write_compiler_detection_header(). + +The ``WRITE_COMPILER_DETECTION_HEADER`` function can be used to generate +a file suitable for preprocessor inclusion which contains macros to be +used in source code:: + + write_compiler_detection_header( + FILE <file> + PREFIX <prefix> + [OUTPUT_FILES_VAR <output_files_var> OUTPUT_DIR <output_dir>] + COMPILERS <compiler> [...] + FEATURES <feature> [...] + [BARE_FEATURES <feature> [...]] + [VERSION <version>] + [PROLOG <prolog>] + [EPILOG <epilog>] + [ALLOW_UNKNOWN_COMPILERS] + [ALLOW_UNKNOWN_COMPILER_VERSIONS] + ) + +The ``write_compiler_detection_header`` function generates the +file ``<file>`` with macros which all have the prefix ``<prefix>``. + +By default, all content is written directly to the ``<file>``. The +``OUTPUT_FILES_VAR`` may be specified to cause the compiler-specific +content to be written to separate files. The separate files are then +available in the ``<output_files_var>`` and may be consumed by the caller +for installation for example. The ``OUTPUT_DIR`` specifies a relative +path from the main ``<file>`` to the compiler-specific files. For example: + +.. code-block:: cmake + + write_compiler_detection_header( + FILE climbingstats_compiler_detection.h + PREFIX ClimbingStats + OUTPUT_FILES_VAR support_files + OUTPUT_DIR compilers + COMPILERS GNU Clang MSVC Intel + FEATURES cxx_variadic_templates + ) + install(FILES + ${CMAKE_CURRENT_BINARY_DIR}/climbingstats_compiler_detection.h + DESTINATION include + ) + install(FILES + ${support_files} + DESTINATION include/compilers + ) + + +``VERSION`` may be used to specify the API version to be generated. +Future versions of CMake may introduce alternative APIs. A given +API is selected by any ``<version>`` value greater than or equal +to the version of CMake that introduced the given API and less +than the version of CMake that introduced its succeeding API. +The value of the :variable:`CMAKE_MINIMUM_REQUIRED_VERSION` +variable is used if no explicit version is specified. +(As of CMake version |release| there is only one API version.) + +``PROLOG`` may be specified as text content to write at the start of the +header. ``EPILOG`` may be specified as text content to write at the end +of the header + +At least one ``<compiler>`` and one ``<feature>`` must be listed. Compilers +which are known to CMake, but not specified are detected and a preprocessor +``#error`` is generated for them. A preprocessor macro matching +``<PREFIX>_COMPILER_IS_<compiler>`` is generated for each compiler +known to CMake to contain the value ``0`` or ``1``. + +Possible compiler identifiers are documented with the +:variable:`CMAKE_<LANG>_COMPILER_ID` variable. +Available features in this version of CMake are listed in the +:prop_gbl:`CMAKE_C_KNOWN_FEATURES` and +:prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global properties. +The ``{c,cxx}_std_*`` meta-features are ignored if requested. + +See the :manual:`cmake-compile-features(7)` manual for information on +compile features. + +``BARE_FEATURES`` will define the compatibility macros with the name used in +newer versions of the language standard, so the code can use the new feature +name unconditionally. + +``ALLOW_UNKNOWN_COMPILERS`` and ``ALLOW_UNKNOWN_COMPILER_VERSIONS`` cause +the module to generate conditions that treat unknown compilers as simply +lacking all features. Without these options the default behavior is to +generate a ``#error`` for unknown compilers and versions. + +Feature Test Macros +=================== + +For each compiler, a preprocessor macro is generated matching +``<PREFIX>_COMPILER_IS_<compiler>`` which has the content either ``0`` +or ``1``, depending on the compiler in use. Preprocessor macros for +compiler version components are generated matching +``<PREFIX>_COMPILER_VERSION_MAJOR`` ``<PREFIX>_COMPILER_VERSION_MINOR`` +and ``<PREFIX>_COMPILER_VERSION_PATCH`` containing decimal values +for the corresponding compiler version components, if defined. + +A preprocessor test is generated based on the compiler version +denoting whether each feature is enabled. A preprocessor macro +matching ``<PREFIX>_COMPILER_<FEATURE>``, where ``<FEATURE>`` is the +upper-case ``<feature>`` name, is generated to contain the value +``0`` or ``1`` depending on whether the compiler in use supports the +feature: + +.. code-block:: cmake + + write_compiler_detection_header( + FILE climbingstats_compiler_detection.h + PREFIX ClimbingStats + COMPILERS GNU Clang AppleClang MSVC Intel + FEATURES cxx_variadic_templates + ) + +.. code-block:: c++ + + #if ClimbingStats_COMPILER_CXX_VARIADIC_TEMPLATES + template<typename... T> + void someInterface(T t...) { /* ... */ } + #else + // Compatibility versions + template<typename T1> + void someInterface(T1 t1) { /* ... */ } + template<typename T1, typename T2> + void someInterface(T1 t1, T2 t2) { /* ... */ } + template<typename T1, typename T2, typename T3> + void someInterface(T1 t1, T2 t2, T3 t3) { /* ... */ } + #endif + +Symbol Macros +============= + +Some additional symbol-defines are created for particular features for +use as symbols which may be conditionally defined empty: + +.. code-block:: c++ + + class MyClass ClimbingStats_FINAL + { + ClimbingStats_CONSTEXPR int someInterface() { return 42; } + }; + +The ``ClimbingStats_FINAL`` macro will expand to ``final`` if the +compiler (and its flags) support the ``cxx_final`` feature, and the +``ClimbingStats_CONSTEXPR`` macro will expand to ``constexpr`` +if ``cxx_constexpr`` is supported. + +If ``BARE_FEATURES cxx_final`` was given as argument the ``final`` keyword +will be defined for old compilers, too. + +The following features generate corresponding symbol defines and if they +are available as ``BARE_FEATURES``: + +========================== =================================== ================= ====== + Feature Define Symbol bare +========================== =================================== ================= ====== +``c_restrict`` ``<PREFIX>_RESTRICT`` ``restrict`` yes +``cxx_constexpr`` ``<PREFIX>_CONSTEXPR`` ``constexpr`` yes +``cxx_deleted_functions`` ``<PREFIX>_DELETED_FUNCTION`` ``= delete`` +``cxx_extern_templates`` ``<PREFIX>_EXTERN_TEMPLATE`` ``extern`` +``cxx_final`` ``<PREFIX>_FINAL`` ``final`` yes +``cxx_noexcept`` ``<PREFIX>_NOEXCEPT`` ``noexcept`` yes +``cxx_noexcept`` ``<PREFIX>_NOEXCEPT_EXPR(X)`` ``noexcept(X)`` +``cxx_override`` ``<PREFIX>_OVERRIDE`` ``override`` yes +========================== =================================== ================= ====== + +Compatibility Implementation Macros +=================================== + +Some features are suitable for wrapping in a macro with a backward +compatibility implementation if the compiler does not support the feature. + +When the ``cxx_static_assert`` feature is not provided by the compiler, +a compatibility implementation is available via the +``<PREFIX>_STATIC_ASSERT(COND)`` and +``<PREFIX>_STATIC_ASSERT_MSG(COND, MSG)`` function-like macros. The macros +expand to ``static_assert`` where that compiler feature is available, and +to a compatibility implementation otherwise. In the first form, the +condition is stringified in the message field of ``static_assert``. In +the second form, the message ``MSG`` is passed to the message field of +``static_assert``, or ignored if using the backward compatibility +implementation. + +The ``cxx_attribute_deprecated`` feature provides a macro definition +``<PREFIX>_DEPRECATED``, which expands to either the standard +``[[deprecated]]`` attribute or a compiler-specific decorator such +as ``__attribute__((__deprecated__))`` used by GNU compilers. + +The ``cxx_alignas`` feature provides a macro definition +``<PREFIX>_ALIGNAS`` which expands to either the standard ``alignas`` +decorator or a compiler-specific decorator such as +``__attribute__ ((__aligned__))`` used by GNU compilers. + +The ``cxx_alignof`` feature provides a macro definition +``<PREFIX>_ALIGNOF`` which expands to either the standard ``alignof`` +decorator or a compiler-specific decorator such as ``__alignof__`` +used by GNU compilers. + +============================= ================================ ===================== ====== + Feature Define Symbol bare +============================= ================================ ===================== ====== +``cxx_alignas`` ``<PREFIX>_ALIGNAS`` ``alignas`` +``cxx_alignof`` ``<PREFIX>_ALIGNOF`` ``alignof`` +``cxx_nullptr`` ``<PREFIX>_NULLPTR`` ``nullptr`` yes +``cxx_static_assert`` ``<PREFIX>_STATIC_ASSERT`` ``static_assert`` +``cxx_static_assert`` ``<PREFIX>_STATIC_ASSERT_MSG`` ``static_assert`` +``cxx_attribute_deprecated`` ``<PREFIX>_DEPRECATED`` ``[[deprecated]]`` +``cxx_attribute_deprecated`` ``<PREFIX>_DEPRECATED_MSG`` ``[[deprecated]]`` +``cxx_thread_local`` ``<PREFIX>_THREAD_LOCAL`` ``thread_local`` +============================= ================================ ===================== ====== + +A use-case which arises with such deprecation macros is the deprecation +of an entire library. In that case, all public API in the library may +be decorated with the ``<PREFIX>_DEPRECATED`` macro. This results in +very noisy build output when building the library itself, so the macro +may be may be defined to empty in that case when building the deprecated +library: + +.. code-block:: cmake + + add_library(compat_support ${srcs}) + target_compile_definitions(compat_support + PRIVATE + CompatSupport_DEPRECATED= + ) +#]=======================================================================] include(${CMAKE_CURRENT_LIST_DIR}/CMakeCompilerIdDetection.cmake) |