summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake118
-rw-r--r--Modules/CMakeFindCodeBlocks.cmake2
-rw-r--r--Modules/CMakeFindEclipseCDT4.cmake104
-rw-r--r--Modules/CMakeTestWatcomVersion.c1
-rw-r--r--Modules/CPack.cmake2
-rw-r--r--Modules/CheckCCompilerFlag.cmake3
-rw-r--r--Modules/CheckSymbolExists.cmake1
-rw-r--r--Modules/FeatureSummary.cmake391
-rw-r--r--Modules/FindFreetype.cmake25
-rw-r--r--Modules/FindGIF.cmake52
-rw-r--r--Modules/FindHDF5.cmake19
-rw-r--r--Modules/FindJava.cmake5
-rw-r--r--Modules/FindPostgreSQL.cmake53
-rw-r--r--Modules/FindQt4.cmake14
-rw-r--r--Modules/FindX11.cmake53
-rw-r--r--Modules/InstallRequiredSystemLibraries.cmake34
-rw-r--r--Modules/NSIS.template.in20
-rw-r--r--Modules/Platform/AIX-VisualAge-Fortran.cmake1
-rw-r--r--Modules/Platform/Windows-wcl386.cmake42
19 files changed, 647 insertions, 293 deletions
diff --git a/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake b/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake
new file mode 100644
index 0000000..55c37c2
--- /dev/null
+++ b/Modules/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake
@@ -0,0 +1,118 @@
+
+#=============================================================================
+# Copyright 2009 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+# This file is included by CMakeFindEclipseCDT4.cmake and CMakeFindCodeBlocks.cmake
+
+# The Eclipse and the CodeBlocks generators need to know the standard include path
+# so that they can find the headers at runtime and parsing etc. works better
+# This is done here by actually running gcc with the options so it prints its
+# system include directories, which are parsed then and stored in the cache.
+MACRO(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang _resultIncludeDirs _resultDefines)
+ SET(${_resultIncludeDirs})
+ SET(_gccOutput)
+ FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy" "\n" )
+
+ IF (${_lang} STREQUAL "c++")
+ SET(_compilerExecutable "${CMAKE_CXX_COMPILER}")
+ ELSE ()
+ SET(_compilerExecutable "${CMAKE_C_COMPILER}")
+ ENDIF ()
+ EXECUTE_PROCESS(COMMAND ${_compilerExecutable} -v -E -x ${_lang} -dD dummy
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles
+ ERROR_VARIABLE _gccOutput
+ OUTPUT_VARIABLE _gccStdout )
+ FILE(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy")
+
+ # First find the system include dirs:
+ IF( "${_gccOutput}" MATCHES "> search starts here[^\n]+\n *(.+ *\n) *End of (search) list" )
+
+ # split the output into lines and then remove leading and trailing spaces from each of them:
+ STRING(REGEX MATCHALL "[^\n]+\n" _includeLines "${CMAKE_MATCH_1}")
+ FOREACH(nextLine ${_includeLines})
+ STRING(STRIP "${nextLine}" _includePath)
+ LIST(APPEND ${_resultIncludeDirs} "${_includePath}")
+ ENDFOREACH(nextLine)
+
+ ENDIF()
+
+
+ # now find the builtin macros:
+ STRING(REGEX MATCHALL "#define[^\n]+\n" _defineLines "${_gccStdout}")
+# A few example lines which the regexp below has to match properly:
+# #define MAX(a,b) ((a) > (b) ? (a) : (b))
+# #define __fastcall __attribute__((__fastcall__))
+# #define FOO (23)
+# #define __UINTMAX_TYPE__ long long unsigned int
+# #define __UINTMAX_TYPE__ long long unsigned int
+# #define __i386__ 1
+
+ FOREACH(nextLine ${_defineLines})
+ STRING(REGEX MATCH "^#define +([A-Za-z_][A-Za-z0-9_]*)(\\([^\\)]+\\))? +(.+) *$" _dummy "${nextLine}")
+ SET(_name "${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
+ STRING(STRIP "${CMAKE_MATCH_3}" _value)
+ #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()
+ LIST(APPEND ${_resultDefines} " ")
+ ENDIF()
+ ENDFOREACH(nextLine)
+
+ENDMACRO(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang)
+
+# Save the current LC_ALL, LC_MESSAGES, and LANG environment variables and set them
+# to "C" that way GCC's "search starts here" text is in English and we can grok it.
+SET(_orig_lc_all $ENV{LC_ALL})
+SET(_orig_lc_messages $ENV{LC_MESSAGES})
+SET(_orig_lang $ENV{LANG})
+IF(_orig_lc_all)
+ SET(ENV{LC_ALL} C)
+ENDIF()
+IF(_orig_lc_messages)
+ SET(ENV{LC_MESSAGES} C)
+ENDIF()
+IF(_orig_lang)
+ SET(ENV{LANG} C)
+ENDIF()
+
+# Now check for C, works for gcc and Intel compiler at least
+IF (NOT CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS)
+ IF ("${CMAKE_C_COMPILER_ID}" MATCHES GNU OR "${CMAKE_C_COMPILER_ID}" MATCHES Intel)
+ _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c _dirs _defines)
+ SET(CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "C compiler system include directories")
+ SET(CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "C compiler system defined macros")
+ ENDIF ()
+ENDIF ()
+
+# And now the same for C++
+IF (NOT CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS)
+ IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU OR "${CMAKE_CXX_COMPILER_ID}" MATCHES Intel)
+ _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c++ _dirs _defines)
+ SET(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "CXX compiler system include directories")
+ SET(CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "CXX compiler system defined macros")
+ ENDIF ()
+ENDIF ()
+
+# Restore original LC_ALL, LC_MESSAGES, and LANG
+IF(_orig_lc_all)
+ SET(ENV{LC_ALL} ${_orig_lc_all})
+ENDIF()
+IF(_orig_lc_messages)
+ SET(ENV{LC_MESSAGES} ${_orig_lc_messages})
+ENDIF()
+IF(_orig_lang)
+ SET(ENV{LANG} ${_orig_lang})
+ENDIF()
diff --git a/Modules/CMakeFindCodeBlocks.cmake b/Modules/CMakeFindCodeBlocks.cmake
index c72c8f7..23f2c82 100644
--- a/Modules/CMakeFindCodeBlocks.cmake
+++ b/Modules/CMakeFindCodeBlocks.cmake
@@ -21,3 +21,5 @@ IF(CMAKE_CODEBLOCKS_EXECUTABLE)
SET(CMAKE_OPEN_PROJECT_COMMAND "${CMAKE_CODEBLOCKS_EXECUTABLE} <PROJECT_FILE>" )
ENDIF(CMAKE_CODEBLOCKS_EXECUTABLE)
+# Determine builtin macros and include dirs:
+INCLUDE(${CMAKE_CURRENT_LIST_DIR}/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake)
diff --git a/Modules/CMakeFindEclipseCDT4.cmake b/Modules/CMakeFindEclipseCDT4.cmake
index a756e64..2f71cb9 100644
--- a/Modules/CMakeFindEclipseCDT4.cmake
+++ b/Modules/CMakeFindEclipseCDT4.cmake
@@ -24,105 +24,5 @@ SET(CMAKE_ECLIPSE_MAKE_ARGUMENTS "" CACHE STRING "Additional command line argume
SET(ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT FALSE CACHE BOOL "If enabled, CMake will generate a source project for Eclipse in CMAKE_SOURCE_DIR")
MARK_AS_ADVANCED(ECLIPSE_CDT4_GENERATE_SOURCE_PROJECT)
-# The Eclipse generator needs to know the standard include path
-# so that Eclipse ca find the headers at runtime and parsing etc. works better
-# This is done here by actually running gcc with the options so it prints its
-# system include directories, which are parsed then and stored in the cache.
-MACRO(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang _resultIncludeDirs _resultDefines)
- SET(${_resultIncludeDirs})
- SET(_gccOutput)
- FILE(WRITE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy" "\n" )
-
- IF (${_lang} STREQUAL "c++")
- SET(_compilerExecutable "${CMAKE_CXX_COMPILER}")
- ELSE (${_lang} STREQUAL "c++")
- SET(_compilerExecutable "${CMAKE_C_COMPILER}")
- ENDIF (${_lang} STREQUAL "c++")
- EXECUTE_PROCESS(COMMAND ${_compilerExecutable} -v -E -x ${_lang} -dD dummy
- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles
- ERROR_VARIABLE _gccOutput
- OUTPUT_VARIABLE _gccStdout )
- FILE(REMOVE "${CMAKE_BINARY_DIR}/CMakeFiles/dummy")
-
- # First find the system include dirs:
- IF( "${_gccOutput}" MATCHES "> search starts here[^\n]+\n *(.+ *\n) *End of (search) list" )
-
- # split the output into lines and then remove leading and trailing spaces from each of them:
- STRING(REGEX MATCHALL "[^\n]+\n" _includeLines "${CMAKE_MATCH_1}")
- FOREACH(nextLine ${_includeLines})
- STRING(STRIP "${nextLine}" _includePath)
- LIST(APPEND ${_resultIncludeDirs} "${_includePath}")
- ENDFOREACH(nextLine)
-
- ENDIF( "${_gccOutput}" MATCHES "> search starts here[^\n]+\n *(.+ *\n) *End of (search) list" )
-
-
- # now find the builtin macros:
- STRING(REGEX MATCHALL "#define[^\n]+\n" _defineLines "${_gccStdout}")
-# A few example lines which the regexp below has to match properly:
-# #define MAX(a,b) ((a) > (b) ? (a) : (b))
-# #define __fastcall __attribute__((__fastcall__))
-# #define FOO (23)
-# #define __UINTMAX_TYPE__ long long unsigned int
-# #define __UINTMAX_TYPE__ long long unsigned int
-# #define __i386__ 1
-
- FOREACH(nextLine ${_defineLines})
- STRING(REGEX MATCH "^#define +([A-Za-z_][A-Za-z0-9_]*)(\\([^\\)]+\\))? +(.+) *$" _dummy "${nextLine}")
- SET(_name "${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
- STRING(STRIP "${CMAKE_MATCH_3}" _value)
- #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()
- LIST(APPEND ${_resultDefines} " ")
- ENDIF()
- ENDFOREACH(nextLine)
-
-ENDMACRO(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang)
-
-# Save the current LC_ALL, LC_MESSAGES, and LANG environment variables and set them
-# to "C" that way GCC's "search starts here" text is in English and we can grok it.
-SET(_orig_lc_all $ENV{LC_ALL})
-SET(_orig_lc_messages $ENV{LC_MESSAGES})
-SET(_orig_lang $ENV{LANG})
-IF(_orig_lc_all)
- SET(ENV{LC_ALL} C)
-ENDIF(_orig_lc_all)
-IF(_orig_lc_messages)
- SET(ENV{LC_MESSAGES} C)
-ENDIF(_orig_lc_messages)
-IF(_orig_lang)
- SET(ENV{LANG} C)
-ENDIF(_orig_lang)
-
-# Now check for C, works for gcc and Intel compiler at least
-IF (NOT CMAKE_ECLIPSE_C_SYSTEM_INCLUDE_DIRS)
- IF ("${CMAKE_C_COMPILER_ID}" MATCHES GNU OR "${CMAKE_C_COMPILER_ID}" MATCHES Intel)
- _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c _dirs _defines)
- SET(CMAKE_ECLIPSE_C_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "C compiler system include directories")
- SET(CMAKE_ECLIPSE_C_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "C compiler system defined macros")
- ENDIF ("${CMAKE_C_COMPILER_ID}" MATCHES GNU OR "${CMAKE_C_COMPILER_ID}" MATCHES Intel)
-ENDIF (NOT CMAKE_ECLIPSE_C_SYSTEM_INCLUDE_DIRS)
-
-# And now the same for C++
-IF (NOT CMAKE_ECLIPSE_CXX_SYSTEM_INCLUDE_DIRS)
- IF ("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU OR "${CMAKE_CXX_COMPILER_ID}" MATCHES Intel)
- _DETERMINE_GCC_SYSTEM_INCLUDE_DIRS(c++ _dirs _defines)
- SET(CMAKE_ECLIPSE_CXX_SYSTEM_INCLUDE_DIRS "${_dirs}" CACHE INTERNAL "CXX compiler system include directories")
- SET(CMAKE_ECLIPSE_CXX_SYSTEM_DEFINED_MACROS "${_defines}" CACHE INTERNAL "CXX compiler system defined macros")
- ENDIF ("${CMAKE_CXX_COMPILER_ID}" MATCHES GNU OR "${CMAKE_CXX_COMPILER_ID}" MATCHES Intel)
-ENDIF (NOT CMAKE_ECLIPSE_CXX_SYSTEM_INCLUDE_DIRS)
-
-# Restore original LC_ALL, LC_MESSAGES, and LANG
-IF(_orig_lc_all)
- SET(ENV{LC_ALL} ${_orig_lc_all})
-ENDIF(_orig_lc_all)
-IF(_orig_lc_messages)
- SET(ENV{LC_MESSAGES} ${_orig_lc_messages})
-ENDIF(_orig_lc_messages)
-IF(_orig_lang)
- SET(ENV{LANG} ${_orig_lang})
-ENDIF(_orig_lang)
+# Determine builtin macros and include dirs:
+INCLUDE(${CMAKE_CURRENT_LIST_DIR}/CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake)
diff --git a/Modules/CMakeTestWatcomVersion.c b/Modules/CMakeTestWatcomVersion.c
new file mode 100644
index 0000000..0343fb1
--- /dev/null
+++ b/Modules/CMakeTestWatcomVersion.c
@@ -0,0 +1 @@
+VERSION=__WATCOMC__
diff --git a/Modules/CPack.cmake b/Modules/CPack.cmake
index bf52b25..d82de93 100644
--- a/Modules/CPack.cmake
+++ b/Modules/CPack.cmake
@@ -322,7 +322,7 @@ cpack_set_if_not_set(CPACK_PACKAGE_FILE_NAME
cpack_set_if_not_set(CPACK_PACKAGE_INSTALL_DIRECTORY
"${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}")
cpack_set_if_not_set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY
- "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}")
+ "${CPACK_PACKAGE_INSTALL_DIRECTORY}")
cpack_set_if_not_set(CPACK_PACKAGE_DEFAULT_LOCATION "/")
cpack_set_if_not_set(CPACK_PACKAGE_RELOCATABLE "true")
diff --git a/Modules/CheckCCompilerFlag.cmake b/Modules/CheckCCompilerFlag.cmake
index a03b64d..a390b38 100644
--- a/Modules/CheckCCompilerFlag.cmake
+++ b/Modules/CheckCCompilerFlag.cmake
@@ -27,6 +27,8 @@ MACRO (CHECK_C_COMPILER_FLAG _FLAG _RESULT)
SET(CMAKE_REQUIRED_DEFINITIONS "${_FLAG}")
CHECK_C_SOURCE_COMPILES("int main(void) { return 0; }" ${_RESULT}
# Some compilers do not fail with a bad flag
+ FAIL_REGEX "warning: command line option .* is valid for .* but not for C"
+ # Apple gcc
FAIL_REGEX "unrecognized .*option" # GNU
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "warning D9002" # MSVC, any lang
@@ -36,4 +38,3 @@ MACRO (CHECK_C_COMPILER_FLAG _FLAG _RESULT)
)
SET (CMAKE_REQUIRED_DEFINITIONS "${SAFE_CMAKE_REQUIRED_DEFINITIONS}")
ENDMACRO (CHECK_C_COMPILER_FLAG)
-
diff --git a/Modules/CheckSymbolExists.cmake b/Modules/CheckSymbolExists.cmake
index a62aa70..be7d658 100644
--- a/Modules/CheckSymbolExists.cmake
+++ b/Modules/CheckSymbolExists.cmake
@@ -40,7 +40,6 @@ MACRO(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE)
ENDMACRO(CHECK_SYMBOL_EXISTS)
MACRO(_CHECK_SYMBOL_EXISTS SOURCEFILE SYMBOL FILES VARIABLE)
-message(STATUS "files: -${FILES}-")
IF("${VARIABLE}" MATCHES "^${VARIABLE}$")
SET(CMAKE_CONFIGURABLE_FILE_CONTENT "/* */\n")
SET(MACRO_CHECK_SYMBOL_EXISTS_FLAGS ${CMAKE_REQUIRED_FLAGS})
diff --git a/Modules/FeatureSummary.cmake b/Modules/FeatureSummary.cmake
index f7bfe27..570fb7b 100644
--- a/Modules/FeatureSummary.cmake
+++ b/Modules/FeatureSummary.cmake
@@ -1,44 +1,57 @@
# - Macros for generating a summary of enabled/disabled features
#
-# This module provides the macros feature_summary(), set_package_info() and
+# This module provides the macros feature_summary(), set_package_properties() and
# add_feature_info().
-# For compatiblity it also still provides set_feature_info(),
-# print_enabled_features() and print_disabled_features.
+# For compatiblity it also still provides set_package_info(), set_feature_info(),
+# print_enabled_features() and print_disabled_features().
#
# These macros can be used to generate a summary of enabled and disabled
# packages and/or feature for a build tree:
#
-# -- Enabled features:
+# -- The following OPTIONAL packages have been found:
# LibXml2 (required version >= 2.4) , XML processing library. , <http://xmlsoft.org>
+# * Enables HTML-import in MyWordProcessor
+# * Enables odt-export in MyWordProcessor
# PNG , A PNG image library. , <http://www.libpng.org/pub/png/>
-# -- Disabled features:
+# * Enables saving screenshots
+# -- The following OPTIONAL packages have not been found:
# Lua51 , The Lua scripting language. , <http://www.lua.org>
+# * Enables macros in MyWordProcessor
# Foo , Foo provides cool stuff.
#
#
# FEATURE_SUMMARY( [FILENAME <file>]
# [APPEND]
# [VAR <variable_name>]
+# [INCLUDE_QUIET_PACKAGES]
+# [FATAL_ON_MISSING_REQUIRED_PACKAGES]
# [DESCRIPTION "Found packages:"]
# WHAT (ALL | PACKAGES_FOUND | PACKAGES_NOT_FOUND
# | ENABLED_FEATURES | DISABLED_FEATURES]
# )
#
# The FEATURE_SUMMARY() macro can be used to print information about enabled
-# or disabled features or packages of a project.
+# or disabled packages or features of a project.
# By default, only the names of the features/packages will be printed and their
-# required version when one was specified. Use SET_FEATURE_INFO() to add more
-# useful information, like e.g. a download URL for the respective package.
+# required version when one was specified. Use SET_PACKAGE_PROPERTIES() to add more
+# useful information, like e.g. a download URL for the respective package or their
+# purpose in the project.
#
# The WHAT option is the only mandatory option. Here you specify what information
# will be printed:
-# ENABLED_FEATURES: the list of all features and packages which are enabled,
-# excluding the QUIET packages
-# DISABLED_FEATURES: the list of all features and packages which are disabled,
-# excluding the QUIET packages
+# ALL: print everything
+# ENABLED_FEATURES: the list of all features which are enabled
+# DISABLED_FEATURES: the list of all features which are disabled
# PACKAGES_FOUND: the list of all packages which have been found
# PACKAGES_NOT_FOUND: the list of all packages which have not been found
-# ALL: this will give all packages which have or have not been found
+# OPTIONAL_PACKAGES_FOUND: only those packages which have been found which have the type OPTIONAL
+# OPTIONAL_PACKAGES_NOT_FOUND: only those packages which have not been found which have the type OPTIONAL
+# RECOMMENDED_PACKAGES_FOUND: only those packages which have been found which have the type RECOMMENDED
+# RECOMMENDED_PACKAGES_NOT_FOUND: only those packages which have not been found which have the type RECOMMENDED
+# REQUIRED_PACKAGES_FOUND: only those packages which have been found which have the type REQUIRED
+# REQUIRED_PACKAGES_NOT_FOUND: only those packages which have not been found which have the type REQUIRED
+# RUNTIME_PACKAGES_FOUND: only those packages which have been found which have the type RUNTIME
+# RUNTIME_PACKAGES_NOT_FOUND: only those packages which have not been found which have the type RUNTIME
#
# If a FILENAME is given, the information is printed into this file. If APPEND
# is used, it is appended to this file, otherwise the file is overwritten if
@@ -48,19 +61,29 @@
# If FILENAME is not used, the information is printed to the terminal.
# Using the DESCRIPTION option a description or headline can be set which will
# be printed above the actual content.
+# If INCLUDE_QUIET_PACKAGES is given, packages which have been searched with find_package(... QUIET) will
+# also be listed. By default they are skipped.
+# If FATAL_ON_MISSING_REQUIRED_PACKAGES is given, CMake will abort if a package which is marked as REQUIRED
+# has not been found.
#
# Example 1, append everything to a file:
# feature_summary(WHAT ALL
# FILENAME ${CMAKE_BINARY_DIR}/all.log APPEND)
#
-# Example 2, print the enabled features into the variable enabledFeaturesText:
+# Example 2, print the enabled features into the variable enabledFeaturesText, including QUIET packages:
# feature_summary(WHAT ENABLED_FEATURES
+# INCLUDE_QUIET_PACKAGES
# DESCRIPTION "Enabled Features:"
# VAR enabledFeaturesText)
# message(STATUS "${enabledFeaturesText}")
#
#
-# SET_PACKAGE_INFO(<name> <description> [<url> [<comment>] ] )
+# SET_PACKAGE_PROPERTIES(<name> PROPERTIES [ URL <url> ]
+# [ DESCRIPTION <description> ]
+# [ TYPE (RUNTIME|OPTIONAL|RECOMMENDED|REQUIRED) ]
+# [ PURPOSE <purpose> ]
+# )
+#
# Use this macro to set up information about the named package, which can
# then be displayed via FEATURE_SUMMARY().
# This can be done either directly in the Find-module or in the project
@@ -68,10 +91,47 @@
# The features for which information can be set are added automatically by the
# find_package() command.
#
+# URL: this should be the homepage of the package, or something similar. Ideally this is set
+# already directly in the Find-module.
+#
+# DESCRIPTION: A short description what that package is, at most one sentence.
+# Ideally this is set already directly in the Find-module.
+#
+# TYPE: What type of dependency has the using project on that package. Default is OPTIONAL.
+# In this case it is a package which can be used by the project when available at buildtime,
+# but it also work without. RECOMMENDED is similar to OPTIONAL, i.e. the project will build
+# if the package is not present, but the functionality of the resulting binaries will be severly
+# limited. If a REQUIRED package is not available at buildtime, the project may not even build. This
+# can be combined with the FATAL_ON_MISSING_REQUIRED_PACKAGES argument for feature_summary().
+# Last, a RUNTIME package is a package which is actually not used at all during the build, but
+# which is required for actually running the resulting binaries. So if such a package is missing,
+# the project can still be built, but it may not work later on. If set_package_properties() is called
+# multiple times for the same package with different TYPEs, the TYPE is only changed to higher
+# TYPEs ( RUNTIME < OPTIONAL < RECOMMENDED < REQUIRED ), lower TYPEs are ignored.
+# The TYPE property is project-specific, so it cannot be set by the Find-module, but must be set in the project.
+#
+# PURPOSE: This describes which features this package enables in the project, i.e. it tells the user
+# what functionality he gets in the resulting binaries.
+# If set_package_properties() is called multiple times for a package, all PURPOSE properties are appended
+# to a list of purposes of the package in the project.
+# As the TYPE property, also the PURPOSE property
+# is project-specific, so it cannot be set by the Find-module, but must be set in the project.
+#
+#
# Example for setting the info for a package:
# find_package(LibXml2)
-# set_package_info(LibXml2 "XML processing library." "http://xmlsoft.org/")
+# set_package_properties(LibXml2 PROPERTIES DESCRIPTION "A XML processing library."
+# URL "http://xmlsoft.org/")
#
+# set_package_properties(LibXml2 PROPERTIES TYPE RECOMMENDED
+# PURPOSE "Enables HTML-import in MyWordProcessor")
+# ...
+# set_package_properties(LibXml2 PROPERTIES TYPE OPTIONAL
+# PURPOSE "Enables odt-export in MyWordProcessor")
+#
+# find_package(DBUS)
+# set_package_properties(LibXml2 PROPERTIES TYPE RUNTIME
+# PURPOSE "Necessary to disable the screensaver during a presentation" )
#
# ADD_FEATURE_INFO(<name> <enabled> <description>)
# Use this macro to add information about a feature with the given <name>.
@@ -87,14 +147,22 @@
#
# The following macros are provided for compatibility with previous CMake versions:
#
+# SET_PACKAGE_INFO(<name> <description> [<url> [<purpose>] ] )
+# Use this macro to set up information about the named package, which can
+# then be displayed via FEATURE_SUMMARY().
+# This can be done either directly in the Find-module or in the project
+# which uses the module after the FIND_PACKAGE() call.
+# The features for which information can be set are added automatically by the
+# find_package() command.
+#
# PRINT_ENABLED_FEATURES()
# Does the same as FEATURE_SUMMARY(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
#
# PRINT_DISABLED_FEATURES()
# Does the same as FEATURE_SUMMARY(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
#
-# SET_FEATURE_INFO(<name> <description> [<url> [<comment>] ] )
-# Does the same as SET_PACKAGE_INFO(<name> <description> <url> <comment> )
+# SET_FEATURE_INFO(<name> <description> [<url>] )
+# Does the same as SET_PACKAGE_INFO(<name> <description> <url> )
#=============================================================================
# Copyright 2007-2009 Kitware, Inc.
@@ -123,64 +191,149 @@ FUNCTION(ADD_FEATURE_INFO _name _enabled _desc)
ENDFUNCTION(ADD_FEATURE_INFO)
-FUNCTION(SET_FEATURE_INFO)
- SET_PACKAGE_INFO(${ARGN})
-ENDFUNCTION(SET_FEATURE_INFO)
+FUNCTION(SET_PACKAGE_PROPERTIES _name _props)
+ IF(NOT "${_props}" STREQUAL "PROPERTIES")
+ MESSAGE(FATAL_ERROR "PROPERTIES keyword is missing in SET_PACKAGE_PROPERTIES() call.")
+ ENDIF()
-FUNCTION(SET_PACKAGE_INFO _name _desc)
- SET(_url "${ARGV2}")
- SET(_comment "${ARGV3}")
- SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_desc}" )
- IF(_url MATCHES ".+")
- SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_URL "${_url}" )
- ENDIF(_url MATCHES ".+")
- IF(_comment MATCHES ".+")
- SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_COMMENT "${_comment}" )
- ENDIF(_comment MATCHES ".+")
-ENDFUNCTION(SET_PACKAGE_INFO)
+ SET(options ) # none
+ SET(oneValueArgs DESCRIPTION URL TYPE PURPOSE )
+ SET(multiValueArgs ) # none
+
+ CMAKE_PARSE_ARGUMENTS(_SPP "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ IF(_SPP_UNPARSED_ARGUMENTS)
+ MESSAGE(FATAL_ERROR "Unknown keywords given to SET_PACKAGE_PROPERTIES(): \"${_SPP_UNPARSED_ARGUMENTS}\"")
+ ENDIF()
+
+ IF(_SPP_DESCRIPTION)
+ GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION)
+ IF(_info)
+ MESSAGE(STATUS "Warning: Property DESCRIPTION for package ${_name} already set to \"${_info}\", overriding it with \"${_SPP_DESCRIPTION}\"")
+ ENDIF()
+
+ SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_SPP_DESCRIPTION}" )
+ ENDIF()
+
+
+ IF(_SPP_URL)
+ GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_name}_URL)
+ IF(_info)
+ MESSAGE(STATUS "Warning: Property URL already set to \"${_info}\", overriding it with \"${_SPP_URL}\"")
+ ENDIF()
+
+ SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_URL "${_SPP_URL}" )
+ ENDIF()
+
+
+ # handle the PURPOSE: use APPEND, since there can be multiple purposes for one package inside a project
+ IF(_SPP_PURPOSE)
+ SET_PROPERTY(GLOBAL APPEND PROPERTY _CMAKE_${_name}_PURPOSE "${_SPP_PURPOSE}" )
+ ENDIF()
+
+ # handle the TYPE
+ IF(NOT _SPP_TYPE)
+ SET(_SPP_TYPE OPTIONAL)
+ ENDIF()
+
+ # List the supported types, according to their priority
+ SET(validTypes "RUNTIME" "OPTIONAL" "RECOMMENDED" "REQUIRED" )
+ LIST(FIND validTypes ${_SPP_TYPE} _typeIndexInList)
+ IF("${_typeIndexInList}" STREQUAL "-1" )
+ MESSAGE(FATAL_ERROR "Bad package property type ${_SPP_TYPE} used in SET_PACKAGE_PROPERTIES(). "
+ "Valid types are OPTIONAL, RECOMMENDED, REQUIRED and RUNTIME." )
+ ENDIF()
+
+ GET_PROPERTY(_previousType GLOBAL PROPERTY _CMAKE_${_name}_TYPE)
+ LIST(FIND validTypes "${_previousType}" _prevTypeIndexInList)
+
+ # make sure a previously set TYPE is not overridden with a lower new TYPE:
+ IF("${_typeIndexInList}" GREATER "${_prevTypeIndexInList}")
+ SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_TYPE "${_SPP_TYPE}" )
+ ENDIF()
+
+ENDFUNCTION(SET_PACKAGE_PROPERTIES)
+
+
+
+FUNCTION(_FS_GET_FEATURE_SUMMARY _property _var _includeQuiet)
+
+ SET(_type "ANY")
+ IF("${_property}" MATCHES "REQUIRED_")
+ SET(_type "REQUIRED")
+ ELSEIF("${_property}" MATCHES "RECOMMENDED_")
+ SET(_type "RECOMMENDED")
+ ELSEIF("${_property}" MATCHES "RUNTIME_")
+ SET(_type "RUNTIME")
+ ELSEIF("${_property}" MATCHES "OPTIONAL_")
+ SET(_type "OPTIONAL")
+ ENDIF()
+
+ IF("${_property}" MATCHES "PACKAGES_FOUND")
+ SET(_property "PACKAGES_FOUND")
+ ELSEIF("${_property}" MATCHES "PACKAGES_NOT_FOUND")
+ SET(_property "PACKAGES_NOT_FOUND")
+ ENDIF()
-FUNCTION(_FS_GET_FEATURE_SUMMARY _property _var)
SET(_currentFeatureText "")
GET_PROPERTY(_EnabledFeatures GLOBAL PROPERTY ${_property})
+
FOREACH(_currentFeature ${_EnabledFeatures})
- SET(_currentFeatureText "${_currentFeatureText}\n${_currentFeature}")
- GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_REQUIRED_VERSION)
- IF(_info)
- SET(_currentFeatureText "${_currentFeatureText} (required version ${_info})")
- ENDIF(_info)
- GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_DESCRIPTION)
- IF(_info)
- SET(_currentFeatureText "${_currentFeatureText} , ${_info}")
- ENDIF(_info)
- GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_URL)
- IF(_info)
- SET(_currentFeatureText "${_currentFeatureText} , <${_info}>")
- ENDIF(_info)
- GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_COMMENT)
- IF(_info)
- SET(_currentFeatureText "${_currentFeatureText} , ${_info}")
- ENDIF(_info)
- ENDFOREACH(_currentFeature)
- SET(${_var} "${_currentFeatureText}" PARENT_SCOPE)
-ENDFUNCTION(_FS_GET_FEATURE_SUMMARY)
+ # does this package belong to the type we currently want to list ?
+ GET_PROPERTY(_currentType GLOBAL PROPERTY _CMAKE_${_currentFeature}_TYPE)
+ IF(NOT _currentType)
+ SET(_currentType OPTIONAL)
+ ENDIF()
-FUNCTION(PRINT_ENABLED_FEATURES)
- FEATURE_SUMMARY(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
-ENDFUNCTION(PRINT_ENABLED_FEATURES)
+ IF("${_type}" STREQUAL ANY OR "${_type}" STREQUAL "${_currentType}")
+ # check whether the current feature/package should be in the output depending on whether it was QUIET or not
+ SET(includeThisOne TRUE)
+ # skip QUIET packages, except if they are REQUIRED or INCLUDE_QUIET_PACKAGES has been set
+ IF((NOT "${_currentType}" STREQUAL "REQUIRED") AND NOT _includeQuiet)
+ GET_PROPERTY(_isQuiet GLOBAL PROPERTY _CMAKE_${_currentFeature}_QUIET)
+ IF(_isQuiet)
+ SET(includeThisOne FALSE)
+ ENDIF()
+ ENDIF()
-FUNCTION(PRINT_DISABLED_FEATURES)
- FEATURE_SUMMARY(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
-ENDFUNCTION(PRINT_DISABLED_FEATURES)
+ IF(includeThisOne)
+
+ SET(_currentFeatureText "${_currentFeatureText}\n${_currentFeature}")
+ GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_REQUIRED_VERSION)
+ IF(_info)
+ SET(_currentFeatureText "${_currentFeatureText} (required version ${_info})")
+ ENDIF(_info)
+ GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_DESCRIPTION)
+ IF(_info)
+ SET(_currentFeatureText "${_currentFeatureText} , ${_info}")
+ ENDIF(_info)
+ GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_URL)
+ IF(_info)
+ SET(_currentFeatureText "${_currentFeatureText} , <${_info}>")
+ ENDIF(_info)
+
+ GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_PURPOSE)
+ FOREACH(_purpose ${_info})
+ SET(_currentFeatureText "${_currentFeatureText}\n * ${_purpose}")
+ ENDFOREACH()
+
+ ENDIF(includeThisOne)
+
+ ENDIF("${_type}" STREQUAL ANY OR "${_type}" STREQUAL "${_currentType}")
+
+ ENDFOREACH(_currentFeature)
+ SET(${_var} "${_currentFeatureText}" PARENT_SCOPE)
+ENDFUNCTION(_FS_GET_FEATURE_SUMMARY)
FUNCTION(FEATURE_SUMMARY)
# CMAKE_PARSE_ARGUMENTS(<prefix> <options> <one_value_keywords> <multi_value_keywords> args...)
- SET(options APPEND)
+ SET(options APPEND INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
SET(oneValueArgs FILENAME VAR DESCRIPTION WHAT)
SET(multiValueArgs ) # none
@@ -188,27 +341,70 @@ FUNCTION(FEATURE_SUMMARY)
IF(_FS_UNPARSED_ARGUMENTS)
MESSAGE(FATAL_ERROR "Unknown keywords given to FEATURE_SUMMARY(): \"${_FS_UNPARSED_ARGUMENTS}\"")
- ENDIF(_FS_UNPARSED_ARGUMENTS)
+ ENDIF()
IF(NOT _FS_WHAT)
MESSAGE(FATAL_ERROR "The call to FEATURE_SUMMAY() doesn't set the required WHAT argument.")
- ENDIF(NOT _FS_WHAT)
+ ENDIF()
+
+ SET(validWhatParts "ENABLED_FEATURES"
+ "DISABLED_FEATURES"
+ "PACKAGES_FOUND"
+ "PACKAGES_NOT_FOUND"
+ "OPTIONAL_PACKAGES_FOUND"
+ "OPTIONAL_PACKAGES_NOT_FOUND"
+ "RECOMMENDED_PACKAGES_FOUND"
+ "RECOMMENDED_PACKAGES_NOT_FOUND"
+ "REQUIRED_PACKAGES_FOUND"
+ "REQUIRED_PACKAGES_NOT_FOUND"
+ "RUNTIME_PACKAGES_FOUND"
+ "RUNTIME_PACKAGES_NOT_FOUND")
- IF( "${_FS_WHAT}" STREQUAL "ENABLED_FEATURES"
- OR "${_FS_WHAT}" STREQUAL "DISABLED_FEATURES"
- OR "${_FS_WHAT}" STREQUAL "PACKAGES_FOUND"
- OR "${_FS_WHAT}" STREQUAL "PACKAGES_NOT_FOUND")
- _FS_GET_FEATURE_SUMMARY( ${_FS_WHAT} _featureSummary)
+ LIST(FIND validWhatParts "${_FS_WHAT}" indexInList)
+ IF(NOT "${indexInList}" STREQUAL "-1")
+ _FS_GET_FEATURE_SUMMARY( ${_FS_WHAT} _featureSummary ${_FS_INCLUDE_QUIET_PACKAGES} )
SET(_fullText "${_FS_DESCRIPTION}${_featureSummary}\n")
+ IF (("${_FS_WHAT}" STREQUAL "REQUIRED_PACKAGES_NOT_FOUND") AND _featureSummary)
+ SET(requiredPackagesNotFound TRUE)
+ ENDIF()
+
ELSEIF("${_FS_WHAT}" STREQUAL "ALL")
- _FS_GET_FEATURE_SUMMARY( PACKAGES_FOUND _tmp1)
- _FS_GET_FEATURE_SUMMARY( PACKAGES_NOT_FOUND _tmp2)
- SET(_featureSummary "${_tmp1}${_tmp2}")
- IF(_FS_DESCRIPTION)
- SET(_fullText "${_FS_DESCRIPTION}${_tmp1}${_tmp2}\n")
- ELSE(_FS_DESCRIPTION)
- SET(_fullText "-- Found the following packages:${_tmp1}\n-- Did not find the following packages:${_tmp2}\n")
- ENDIF(_FS_DESCRIPTION)
+
+ SET(allWhatParts "ENABLED_FEATURES"
+ "RUNTIME_PACKAGES_FOUND"
+ "OPTIONAL_PACKAGES_FOUND"
+ "RECOMMENDED_PACKAGES_FOUND"
+ "REQUIRED_PACKAGES_FOUND"
+
+ "DISABLED_FEATURES"
+ "RUNTIME_PACKAGES_NOT_FOUND"
+ "OPTIONAL_PACKAGES_NOT_FOUND"
+ "RECOMMENDED_PACKAGES_NOT_FOUND"
+ "REQUIRED_PACKAGES_NOT_FOUND"
+ )
+
+ SET(title_ENABLED_FEATURES "The following features have been enabled:")
+ SET(title_DISABLED_FEATURES "The following features have been disabled:")
+ SET(title_OPTIONAL_PACKAGES_FOUND "The following OPTIONAL packages have been found:")
+ SET(title_OPTIONAL_PACKAGES_NOT_FOUND "The following OPTIONAL packages have not been found:")
+ SET(title_RECOMMENDED_PACKAGES_FOUND "The following RECOMMENDED packages have been found:")
+ SET(title_RECOMMENDED_PACKAGES_NOT_FOUND "The following RECOMMENDED packages have not been found:")
+ SET(title_REQUIRED_PACKAGES_FOUND "The following REQUIRED packages have been found:")
+ SET(title_REQUIRED_PACKAGES_NOT_FOUND "The following REQUIRED packages have not been found:")
+ SET(title_RUNTIME_PACKAGES_FOUND "The following RUNTIME packages have been found:")
+ SET(title_RUNTIME_PACKAGES_NOT_FOUND "The following RUNTIME packages have not been found:")
+
+ SET(_fullText "${_FS_DESCRIPTION}")
+ FOREACH(part ${allWhatParts})
+ SET(_tmp)
+ _FS_GET_FEATURE_SUMMARY( ${part} _tmp ${_FS_INCLUDE_QUIET_PACKAGES})
+ IF(_tmp)
+ SET(_fullText "${_fullText}\n\n-- ${title_${part}}\n${_tmp}")
+ IF("${part}" STREQUAL "REQUIRED_PACKAGES_NOT_FOUND")
+ SET(requiredPackagesNotFound TRUE)
+ ENDIF()
+ ENDIF()
+ ENDFOREACH()
ELSE()
MESSAGE(FATAL_ERROR "The WHAT argument of FEATURE_SUMMARY() is set to ${_FS_WHAT}, which is not a valid value.")
ENDIF()
@@ -218,16 +414,53 @@ FUNCTION(FEATURE_SUMMARY)
FILE(APPEND "${_FS_FILENAME}" "${_fullText}")
ELSE(_FS_APPEND)
FILE(WRITE "${_FS_FILENAME}" "${_fullText}")
- ENDIF(_FS_APPEND)
+ ENDIF()
ELSE(_FS_FILENAME)
IF(NOT _FS_VAR)
MESSAGE(STATUS "${_fullText}")
- ENDIF(NOT _FS_VAR)
- ENDIF(_FS_FILENAME)
+ ENDIF()
+ ENDIF()
IF(_FS_VAR)
SET(${_FS_VAR} "${_fullText}" PARENT_SCOPE)
- ENDIF(_FS_VAR)
+ ENDIF()
+
+ IF(requiredPackagesNotFound AND _FS_FATAL_ON_MISSING_REQUIRED_PACKAGES)
+ MESSAGE(FATAL_ERROR "feature_summary() Error: REQUIRED package(s) are missing, aborting CMake run.")
+ ENDIF()
ENDFUNCTION(FEATURE_SUMMARY)
+
+
+# The stuff below is only kept for compatibility
+
+FUNCTION(SET_PACKAGE_INFO _name _desc)
+ SET(_url "${ARGV2}")
+ SET(_purpose "${ARGV3}")
+ SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_DESCRIPTION "${_desc}" )
+ IF(_url MATCHES ".+")
+ SET_PROPERTY(GLOBAL PROPERTY _CMAKE_${_name}_URL "${_url}" )
+ ENDIF()
+ IF(_purpose MATCHES ".+")
+ SET_PROPERTY(GLOBAL APPEND PROPERTY _CMAKE_${_name}_PURPOSE "${_purpose}" )
+ ENDIF()
+ENDFUNCTION(SET_PACKAGE_INFO)
+
+
+
+FUNCTION(SET_FEATURE_INFO)
+ SET_PACKAGE_INFO(${ARGN})
+ENDFUNCTION(SET_FEATURE_INFO)
+
+
+
+FUNCTION(PRINT_ENABLED_FEATURES)
+ FEATURE_SUMMARY(WHAT ENABLED_FEATURES DESCRIPTION "Enabled features:")
+ENDFUNCTION(PRINT_ENABLED_FEATURES)
+
+
+
+FUNCTION(PRINT_DISABLED_FEATURES)
+ FEATURE_SUMMARY(WHAT DISABLED_FEATURES DESCRIPTION "Disabled features:")
+ENDFUNCTION(PRINT_DISABLED_FEATURES)
diff --git a/Modules/FindFreetype.cmake b/Modules/FindFreetype.cmake
index 8957b64..6251805 100644
--- a/Modules/FindFreetype.cmake
+++ b/Modules/FindFreetype.cmake
@@ -24,45 +24,38 @@
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
-# Created by Eric Wing.
+# Created by Eric Wing.
# Modifications by Alexander Neundorf.
# This file has been renamed to "FindFreetype.cmake" instead of the correct
# "FindFreeType.cmake" in order to be compatible with the one from KDE4, Alex.
-# Ugh, FreeType seems to use some #include trickery which
+# Ugh, FreeType seems to use some #include trickery which
# makes this harder than it should be. It looks like they
# put ft2build.h in a common/easier-to-find location which
-# then contains a #include to a more specific header in a
+# then contains a #include to a more specific header in a
# more specific location (#include <freetype/config/ftheader.h>).
-# Then from there, they need to set a bunch of #define's
+# Then from there, they need to set a bunch of #define's
# so you can do something like:
# #include FT_FREETYPE_H
# Unfortunately, using CMake's mechanisms like INCLUDE_DIRECTORIES()
# wants explicit full paths and this trickery doesn't work too well.
-# I'm going to attempt to cut out the middleman and hope
+# I'm going to attempt to cut out the middleman and hope
# everything still works.
-FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
+FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
HINTS
$ENV{FREETYPE_DIR}
- PATH_SUFFIXES include
PATHS
/usr/local/X11R6/include
/usr/local/X11/include
- /usr/X11/include
- /sw/include
- /opt/local/include
/usr/freeware/include
)
-FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
+FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
HINTS
$ENV{FREETYPE_DIR}/include/freetype2
PATHS
/usr/local/X11R6/include
/usr/local/X11/include
- /usr/X11/include
- /sw/include
- /opt/local/include
/usr/freeware/include
PATH_SUFFIXES freetype2
)
@@ -75,8 +68,6 @@ FIND_LIBRARY(FREETYPE_LIBRARY
PATHS
/usr/local/X11R6
/usr/local/X11
- /usr/X11
- /sw
/usr/freeware
)
@@ -86,7 +77,7 @@ IF(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
ENDIF(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
SET(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}")
-# handle the QUIETLY and REQUIRED arguments and set FREETYPE_FOUND to TRUE if
+# handle the QUIETLY and REQUIRED arguments and set FREETYPE_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Freetype DEFAULT_MSG FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS)
diff --git a/Modules/FindGIF.cmake b/Modules/FindGIF.cmake
index 1fad07d..41e9098 100644
--- a/Modules/FindGIF.cmake
+++ b/Modules/FindGIF.cmake
@@ -1,7 +1,11 @@
-# This module defines
+# This module searches giflib and defines
# GIF_LIBRARIES - libraries to link to in order to use GIF
-# GIF_FOUND, if false, do not try to link
+# GIF_FOUND, if false, do not try to link
# GIF_INCLUDE_DIR, where to find the headers
+# GIF_VERSION, reports either version 4 or 3 (for everything before version 4)
+#
+# 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
@@ -19,7 +23,7 @@
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
-# Created by Eric Wing.
+# Created by Eric Wing.
# Modifications by Alexander Neundorf
FIND_PATH(GIF_INCLUDE_DIR gif_lib.h
@@ -28,39 +32,49 @@ FIND_PATH(GIF_INCLUDE_DIR gif_lib.h
PATH_SUFFIXES include
PATHS
~/Library/Frameworks
- /Library/Frameworks
- /sw/include # Fink
- [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;OSG_ROOT]/include
- /usr/freeware/include
+ /usr/freeware
)
# the gif library can have many names :-/
-SET(POTENTIAL_GIF_LIBS gif libgif ungif libungif giflib)
+SET(POTENTIAL_GIF_LIBS gif libgif ungif libungif giflib giflib4)
-FIND_LIBRARY(GIF_LIBRARY
+FIND_LIBRARY(GIF_LIBRARY
NAMES ${POTENTIAL_GIF_LIBS}
HINTS
$ENV{GIF_DIR}
PATH_SUFFIXES lib64 lib
PATHS
~/Library/Frameworks
- /Library/Frameworks
- /usr/local
- /usr
- /sw
- /opt/local
- /opt/csw
- /opt
- [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;OSG_ROOT]
/usr/freeware
)
# see readme.txt
SET(GIF_LIBRARIES ${GIF_LIBRARY})
-# handle the QUIETLY and REQUIRED arguments and set GIF_FOUND to TRUE if
+# Very basic version detection.
+# The GIF_LIB_VERSION string in gif_lib.h seems to be unreliable, since it seems
+# to be always " Version 2.0, " in versions 3.x of giflib.
+# In version 4 the member UserData was added to GifFileType, so we check for this
+# one.
+# http://giflib.sourcearchive.com/documentation/4.1.4/files.html
+IF(GIF_INCLUDE_DIR)
+ INCLUDE(CMakePushCheckState)
+ INCLUDE(CheckStructHasMember)
+ CMAKE_PUSH_CHECK_STATE()
+ SET(GIF_VERSION 3)
+ SET(CMAKE_REQUIRED_INCLUDES "${GIF_INCLUDE_DIR}")
+ CHECK_STRUCT_HAS_MEMBER(GifFileType UserData gif_lib.h GIF_GifFileType_UserData )
+ IF(GIF_GifFileType_UserData)
+ SET(GIF_VERSION 4)
+ ENDIF()
+ CMAKE_POP_CHECK_STATE()
+ENDIF()
+
+
+# handle the QUIETLY and REQUIRED arguments and set GIF_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GIF DEFAULT_MSG GIF_LIBRARY GIF_INCLUDE_DIR)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GIF REQUIRED_VARS GIF_LIBRARY GIF_INCLUDE_DIR
+ VERSION_VAR GIF_VERSION )
MARK_AS_ADVANCED(GIF_INCLUDE_DIR GIF_LIBRARY)
diff --git a/Modules/FindHDF5.cmake b/Modules/FindHDF5.cmake
index 6f01ea0..bc60638 100644
--- a/Modules/FindHDF5.cmake
+++ b/Modules/FindHDF5.cmake
@@ -10,8 +10,8 @@
# 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, and HL. If the COMPONENTS argument is not
-# given, the module will attempt to find only the C bindings.
+# 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.
#
# On UNIX systems, 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
@@ -34,6 +34,8 @@
# HDF5_CXX_LIBRARIES - Required libraries for the HDF5 C++ bindings
# HDF5_Fortran_LIBRARIES - Required libraries for the HDF5 Fortran bindings
# HDF5_HL_LIBRARIES - Required libraries for the HDF5 high level API
+# HDF5_Fortran_HL_LIBRARIES - Required libraries for the high level Fortran
+# bindings.
# HDF5_LIBRARIES - Required libraries for all requested bindings
# HDF5_FOUND - true if HDF5 was found on the system
# HDF5_LIBRARY_DIRS - the full set of library directories
@@ -67,6 +69,7 @@ set( HDF5_VALID_COMPONENTS
CXX
Fortran
HL
+ Fortran_HL
)
# Validate the list of find components.
@@ -189,6 +192,7 @@ if( NOT HDF5_FOUND )
set( HDF5_CXX_TARGET hdf5_cpp )
set( HDF5_HL_TARGET hdf5_hl )
set( HDF5_Fortran_TARGET hdf5_fortran )
+ set( HDF5_Fortran_HL_TARGET hdf5_hl_fortran )
foreach( _component ${HDF5_LANGUAGE_BINDINGS} )
list( FIND HDF5_VALID_COMPONENTS ${_component} _component_location )
get_target_property( _comp_location ${HDF5_${_component}_TARGET} LOCATION )
@@ -211,7 +215,10 @@ if( NOT HDF5_FOUND )
set( HDF5_C_LIBRARY_NAMES_INIT hdf5 )
set( HDF5_HL_LIBRARY_NAMES_INIT hdf5_hl ${HDF5_C_LIBRARY_NAMES_INIT} )
set( HDF5_CXX_LIBRARY_NAMES_INIT hdf5_cpp ${HDF5_C_LIBRARY_NAMES_INIT} )
- set( HDF5_Fortran_LIBRARY_NAMES_INIT hdf5_fortran ${HDF5_C_LIBRARY_NAMES_INIT} )
+ set( HDF5_Fortran_LIBRARY_NAMES_INIT hdf5_fortran
+ ${HDF5_C_LIBRARY_NAMES_INIT} )
+ set( HDF5_Fortran_HL_LIBRARY_NAMES_INIT hdf5hl_fortran
+ ${HDF5_Fortran_LIBRARY_NAMES_INIT} )
foreach( LANGUAGE ${HDF5_LANGUAGE_BINDINGS} )
if( HDF5_${LANGUAGE}_COMPILE_LINE )
@@ -222,8 +229,8 @@ if( NOT HDF5_FOUND )
HDF5_${LANGUAGE}_LIBRARY_NAMES
)
- # take a guess that the includes may be in the 'include' sibling directory
- # of a library directory.
+ # take a guess that the includes may be in the 'include' sibling
+ # directory of a library directory.
foreach( dir ${HDF5_${LANGUAGE}_LIBRARY_DIRS} )
list( APPEND HDF5_${LANGUAGE}_INCLUDE_FLAGS ${dir}/../include )
endforeach()
@@ -233,7 +240,7 @@ if( NOT HDF5_FOUND )
list( APPEND HDF5_DEFINITIONS ${HDF5_${LANGUAGE}_DEFINITIONS} )
# find the HDF5 include directories
- if(${LANGUAGE} STREQUAL "Fortran")
+ if(${LANGUAGE} MATCHES "Fortran.*")
set(HDF5_INCLUDE_FILENAME hdf5.mod)
else()
set(HDF5_INCLUDE_FILENAME hdf5.h)
diff --git a/Modules/FindJava.cmake b/Modules/FindJava.cmake
index 1b11a34..34a7077 100644
--- a/Modules/FindJava.cmake
+++ b/Modules/FindJava.cmake
@@ -130,11 +130,6 @@ IF(Java_JAVA_EXECUTABLE)
else( )
set(Java_VERSION ${Java_VERSION_MAJOR}.${Java_VERSION_MINOR}.${Java_VERSION_PATCH}.${Java_VERSION_TWEAK})
endif( )
- # display info
- #MESSAGE( STATUS "Java version ${Java_VERSION_STRING} configured successfully!" ) # keep me, used for debug
- IF(NOT Java_FIND_QUIETLY)
- MESSAGE( STATUS "Java version ${Java_VERSION} configured successfully!" )
- ENDIF(NOT Java_FIND_QUIETLY)
ENDIF()
ENDIF(Java_JAVA_EXECUTABLE)
diff --git a/Modules/FindPostgreSQL.cmake b/Modules/FindPostgreSQL.cmake
index 96b6741..55f95c6 100644
--- a/Modules/FindPostgreSQL.cmake
+++ b/Modules/FindPostgreSQL.cmake
@@ -7,7 +7,6 @@
# ...
# if( PostgreSQL_FOUND )
# include_directories(${PostgreSQL_INCLUDE_DIRS})
-# link_directories(${PostgreSQL_LIBRARY_DIRS})
# endif( PostgreSQL_FOUND )
# ...
# Remember to include ${PostgreSQL_LIBRARIES} in the target_link_libraries() statement.
@@ -113,12 +112,26 @@ find_path(PostgreSQL_INCLUDE_DIR
# Look in other places.
${PostgreSQL_ROOT_DIRECTORIES}
PATH_SUFFIXES
+ pgsql
postgresql
include
# Help the user find it if we cannot.
DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
)
+find_path(PostgreSQL_TYPE_INCLUDE_DIR
+ NAMES catalog/pg_type.h
+ PATHS
+ # Look in other places.
+ ${PostgreSQL_ROOT_DIRECTORIES}
+ PATH_SUFFIXES
+ pgsql/server
+ postgresql/server
+ include/server
+ # Help the user find it if we cannot.
+ DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
+)
+
# The PostgreSQL library.
set (PostgreSQL_LIBRARY_TO_FIND pq)
# Setting some more prefixes for the library
@@ -138,42 +151,22 @@ find_library( PostgreSQL_LIBRARY
get_filename_component(PostgreSQL_LIBRARY_DIR ${PostgreSQL_LIBRARY} PATH)
# Did we find anything?
-set( PostgreSQL_FOUND 0 )
-if ( EXISTS "${PostgreSQL_INCLUDE_DIR}" AND EXISTS "${PostgreSQL_LIBRARY_DIR}" )
- set( PostgreSQL_FOUND 1 )
-else ( EXISTS "${PostgreSQL_INCLUDE_DIR}" AND EXISTS "${PostgreSQL_LIBRARY_DIR}" )
- if ( POSTGRES_REQUIRED )
- message( FATAL_ERROR "PostgreSQL is required. ${PostgreSQL_ROOT_DIR_MESSAGE}" )
- endif ( POSTGRES_REQUIRED )
-endif (EXISTS "${PostgreSQL_INCLUDE_DIR}" AND EXISTS "${PostgreSQL_LIBRARY_DIR}" )
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(PostgreSQL DEFAULT_MSG
+ PostgreSQL_LIBRARY PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR)
+
+set( PostgreSQL_FOUND ${POSTGRESQL_FOUND})
# Now try to get the include and library path.
if(PostgreSQL_FOUND)
- if(EXISTS "${PostgreSQL_INCLUDE_DIR}")
- set(PostgreSQL_INCLUDE_DIRS
- ${PostgreSQL_INCLUDE_DIR}
- )
- endif(EXISTS "${PostgreSQL_INCLUDE_DIR}")
-
- if(EXISTS "${PostgreSQL_LIBRARY_DIR}")
- set(PostgreSQL_LIBRARY_DIRS
- ${PostgreSQL_LIBRARY_DIR}
- )
- set(PostgreSQL_LIBRARIES ${PostgreSQL_LIBRARY_TO_FIND})
- endif(EXISTS "${PostgreSQL_LIBRARY_DIR}")
+ set(PostgreSQL_INCLUDE_DIRS ${PostgreSQL_INCLUDE_DIR} ${PostgreSQL_TYPE_INCLUDE_DIR} )
+ set(PostgreSQL_LIBRARY_DIRS ${PostgreSQL_LIBRARY_DIR} )
+ set(PostgreSQL_LIBRARIES ${PostgreSQL_LIBRARY_TO_FIND})
#message("Final PostgreSQL include dir: ${PostgreSQL_INCLUDE_DIRS}")
#message("Final PostgreSQL library dir: ${PostgreSQL_LIBRARY_DIRS}")
#message("Final PostgreSQL libraries: ${PostgreSQL_LIBRARIES}")
endif(PostgreSQL_FOUND)
-if(NOT PostgreSQL_FOUND)
- if(NOT PostgreSQL_FIND_QUIETLY)
- message(STATUS "PostgreSQL was not found. ${PostgreSQL_DIR_MESSAGE}")
- else(NOT PostgreSQL_FIND_QUIETLY)
- if(PostgreSQL_FIND_REQUIRED)
- message(FATAL_ERROR "PostgreSQL was not found. ${PostgreSQL_DIR_MESSAGE}")
- endif(PostgreSQL_FIND_REQUIRED)
- endif(NOT PostgreSQL_FIND_QUIETLY)
-endif(NOT PostgreSQL_FOUND)
+mark_as_advanced(PostgreSQL_INCLUDE_DIR PostgreSQL_TYPE_INCLUDE_DIR PostgreSQL_LIBRARY )
diff --git a/Modules/FindQt4.cmake b/Modules/FindQt4.cmake
index e592438..1ebd69d 100644
--- a/Modules/FindQt4.cmake
+++ b/Modules/FindQt4.cmake
@@ -352,7 +352,7 @@ IF(QT_QT_LIBRARY)
ENDIF(QT_QT_LIBRARY)
-INCLUDE(CheckSymbolExists)
+INCLUDE(CheckCXXSymbolExists)
INCLUDE(MacroAddFileDependencies)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
@@ -715,19 +715,19 @@ IF (QT_QMAKE_EXECUTABLE AND QTVERSION)
# Add QT_INCLUDE_DIR to CMAKE_REQUIRED_INCLUDES
SET(CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES};${QT_INCLUDE_DIR}")
# Check for Window system symbols (note: only one should end up being set)
- CHECK_SYMBOL_EXISTS(Q_WS_X11 "QtCore/qglobal.h" Q_WS_X11)
- CHECK_SYMBOL_EXISTS(Q_WS_WIN "QtCore/qglobal.h" Q_WS_WIN)
- CHECK_SYMBOL_EXISTS(Q_WS_QWS "QtCore/qglobal.h" Q_WS_QWS)
- CHECK_SYMBOL_EXISTS(Q_WS_MAC "QtCore/qglobal.h" Q_WS_MAC)
+ CHECK_CXX_SYMBOL_EXISTS(Q_WS_X11 "QtCore/qglobal.h" Q_WS_X11)
+ CHECK_CXX_SYMBOL_EXISTS(Q_WS_WIN "QtCore/qglobal.h" Q_WS_WIN)
+ CHECK_CXX_SYMBOL_EXISTS(Q_WS_QWS "QtCore/qglobal.h" Q_WS_QWS)
+ CHECK_CXX_SYMBOL_EXISTS(Q_WS_MAC "QtCore/qglobal.h" Q_WS_MAC)
IF(Q_WS_MAC)
IF(QT_QMAKE_CHANGED)
UNSET(QT_MAC_USE_COCOA CACHE)
ENDIF(QT_QMAKE_CHANGED)
- CHECK_SYMBOL_EXISTS(QT_MAC_USE_COCOA "QtCore/qconfig.h" QT_MAC_USE_COCOA)
+ CHECK_CXX_SYMBOL_EXISTS(QT_MAC_USE_COCOA "QtCore/qconfig.h" QT_MAC_USE_COCOA)
ENDIF(Q_WS_MAC)
IF (QT_QTCOPY_REQUIRED)
- CHECK_SYMBOL_EXISTS(QT_IS_QTCOPY "QtCore/qglobal.h" QT_KDE_QT_COPY)
+ CHECK_CXX_SYMBOL_EXISTS(QT_IS_QTCOPY "QtCore/qglobal.h" QT_KDE_QT_COPY)
IF (NOT QT_IS_QTCOPY)
MESSAGE(FATAL_ERROR "qt-copy is required, but hasn't been found")
ENDIF (NOT QT_IS_QTCOPY)
diff --git a/Modules/FindX11.cmake b/Modules/FindX11.cmake
index df44979..9df3f01 100644
--- a/Modules/FindX11.cmake
+++ b/Modules/FindX11.cmake
@@ -6,6 +6,7 @@
#
# and also the following more fine grained variables:
# Include paths: 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
@@ -27,6 +28,7 @@
# 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_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
@@ -35,6 +37,8 @@
# 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
+
#=============================================================================
# Copyright 2001-2009 Kitware, Inc.
@@ -57,11 +61,11 @@ IF (UNIX)
SET(CMAKE_FIND_FRAMEWORK NEVER)
SET(X11_INC_SEARCH_PATH
/usr/pkg/xorg/include
- /usr/X11R6/include
- /usr/X11R7/include
+ /usr/X11R6/include
+ /usr/X11R7/include
/usr/include/X11
- /usr/openwin/include
- /usr/openwin/share/include
+ /usr/openwin/include
+ /usr/openwin/share/include
/opt/graphics/OpenGL/include
)
@@ -69,7 +73,7 @@ IF (UNIX)
/usr/pkg/xorg/lib
/usr/X11R6/lib
/usr/X11R7/lib
- /usr/openwin/lib
+ /usr/openwin/lib
)
FIND_PATH(X11_X11_INCLUDE_PATH X11/X.h ${X11_INC_SEARCH_PATH})
@@ -77,9 +81,10 @@ IF (UNIX)
# Look for includes; keep the list sorted by name of the cmake *_INCLUDE_PATH
# variable (which doesn't need to match the include file name).
-
+
# Solaris lacks XKBrules.h, so we should skip kxkbd there.
FIND_PATH(X11_ICE_INCLUDE_PATH X11/ICE/ICE.h ${X11_INC_SEARCH_PATH})
+ FIND_PATH(X11_SM_INCLUDE_PATH X11/SM/SM.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xaccessrules_INCLUDE_PATH X11/extensions/XKBrules.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xaccessstr_INCLUDE_PATH X11/extensions/XKBstr.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xau_INCLUDE_PATH X11/Xauth.h ${X11_INC_SEARCH_PATH})
@@ -97,6 +102,7 @@ IF (UNIX)
FIND_PATH(X11_Xinput_INCLUDE_PATH X11/extensions/XInput.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xkb_INCLUDE_PATH X11/extensions/XKB.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xkblib_INCLUDE_PATH X11/XKBlib.h ${X11_INC_SEARCH_PATH})
+ FIND_PATH(X11_Xkbfile_INCLUDE_PATH X11/extensions/XKBfile.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xpm_INCLUDE_PATH X11/xpm.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_XTest_INCLUDE_PATH X11/extensions/XTest.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_XShm_INCLUDE_PATH X11/extensions/XShm.h ${X11_INC_SEARCH_PATH})
@@ -107,6 +113,7 @@ IF (UNIX)
FIND_PATH(X11_Xutil_INCLUDE_PATH X11/Xutil.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xt_INCLUDE_PATH X11/Intrinsic.h ${X11_INC_SEARCH_PATH})
FIND_PATH(X11_Xv_INCLUDE_PATH X11/extensions/Xvlib.h ${X11_INC_SEARCH_PATH})
+ FIND_PATH(X11_XSync_INCLUDE_PATH X11/extensions/sync.h ${X11_INC_SEARCH_PATH})
FIND_LIBRARY(X11_X11_LIB X11 ${X11_LIB_SEARCH_PATH})
@@ -125,6 +132,7 @@ IF (UNIX)
FIND_LIBRARY(X11_Xi_LIB Xi ${X11_LIB_SEARCH_PATH})
FIND_LIBRARY(X11_Xinerama_LIB Xinerama ${X11_LIB_SEARCH_PATH})
FIND_LIBRARY(X11_Xinput_LIB Xi ${X11_LIB_SEARCH_PATH})
+ FIND_LIBRARY(X11_Xkbfile_LIB xkbfile ${X11_LIB_SEARCH_PATH})
FIND_LIBRARY(X11_Xpm_LIB Xpm ${X11_LIB_SEARCH_PATH})
FIND_LIBRARY(X11_Xrandr_LIB Xrandr ${X11_LIB_SEARCH_PATH})
FIND_LIBRARY(X11_Xrender_LIB Xrender ${X11_LIB_SEARCH_PATH})
@@ -277,15 +285,30 @@ IF (UNIX)
SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xkb_INCLUDE_PATH} )
ENDIF (X11_Xkb_INCLUDE_PATH AND X11_Xkblib_INCLUDE_PATH AND X11_Xlib_INCLUDE_PATH)
+ IF (X11_Xkbfile_INCLUDE_PATH AND X11_Xkbfile_LIB AND X11_Xlib_INCLUDE_PATH)
+ SET(X11_Xkbfile_FOUND TRUE)
+ SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xkbfile_INCLUDE_PATH} )
+ ENDIF (X11_Xkbfile_INCLUDE_PATH AND X11_Xkbfile_LIB AND X11_Xlib_INCLUDE_PATH)
+
IF (X11_Xinput_INCLUDE_PATH AND X11_Xinput_LIB)
SET(X11_Xinput_FOUND TRUE)
SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_Xinput_INCLUDE_PATH})
ENDIF (X11_Xinput_INCLUDE_PATH AND X11_Xinput_LIB)
+ IF (X11_XSync_INCLUDE_PATH)
+ SET(X11_XSync_FOUND TRUE)
+ SET(X11_INCLUDE_DIR ${X11_INCLUDE_DIR} ${X11_XSync_INCLUDE_PATH})
+ ENDIF (X11_XSync_INCLUDE_PATH)
+
IF(X11_ICE_LIB AND X11_ICE_INCLUDE_PATH)
SET(X11_ICE_FOUND TRUE)
ENDIF(X11_ICE_LIB AND X11_ICE_INCLUDE_PATH)
+ IF(X11_SM_LIB AND X11_SM_INCLUDE_PATH)
+ SET(X11_SM_FOUND TRUE)
+ ENDIF(X11_SM_LIB AND X11_SM_INCLUDE_PATH)
+
+
# Deprecated variable for backwards compatibility with CMake 1.4
IF (X11_X11_INCLUDE_PATH AND X11_LIBRARIES)
SET(X11_FOUND 1)
@@ -306,11 +329,11 @@ IF (UNIX)
CHECK_LIBRARY_EXISTS("${X11_LIBRARIES}" "XOpenDisplay" "${X11_LIBRARY_DIR}" X11_LIB_X11_SOLO)
IF(NOT X11_LIB_X11_SOLO)
# Find library needed for dnet_ntoa.
- CHECK_LIBRARY_EXISTS("dnet" "dnet_ntoa" "" X11_LIB_DNET_HAS_DNET_NTOA)
+ CHECK_LIBRARY_EXISTS("dnet" "dnet_ntoa" "" X11_LIB_DNET_HAS_DNET_NTOA)
IF (X11_LIB_DNET_HAS_DNET_NTOA)
SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -ldnet)
ELSE (X11_LIB_DNET_HAS_DNET_NTOA)
- CHECK_LIBRARY_EXISTS("dnet_stub" "dnet_ntoa" "" X11_LIB_DNET_STUB_HAS_DNET_NTOA)
+ CHECK_LIBRARY_EXISTS("dnet_stub" "dnet_ntoa" "" X11_LIB_DNET_STUB_HAS_DNET_NTOA)
IF (X11_LIB_DNET_STUB_HAS_DNET_NTOA)
SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -ldnet_stub)
ENDIF (X11_LIB_DNET_STUB_HAS_DNET_NTOA)
@@ -320,11 +343,11 @@ IF (UNIX)
# Find library needed for gethostbyname.
CHECK_FUNCTION_EXISTS("gethostbyname" CMAKE_HAVE_GETHOSTBYNAME)
IF(NOT CMAKE_HAVE_GETHOSTBYNAME)
- CHECK_LIBRARY_EXISTS("nsl" "gethostbyname" "" CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
+ CHECK_LIBRARY_EXISTS("nsl" "gethostbyname" "" CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
IF (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lnsl)
ELSE (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
- CHECK_LIBRARY_EXISTS("bsd" "gethostbyname" "" CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
+ CHECK_LIBRARY_EXISTS("bsd" "gethostbyname" "" CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
IF (CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lbsd)
ENDIF (CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
@@ -334,7 +357,7 @@ IF (UNIX)
# Find library needed for connect.
CHECK_FUNCTION_EXISTS("connect" CMAKE_HAVE_CONNECT)
IF(NOT CMAKE_HAVE_CONNECT)
- CHECK_LIBRARY_EXISTS("socket" "connect" "" CMAKE_LIB_SOCKET_HAS_CONNECT)
+ CHECK_LIBRARY_EXISTS("socket" "connect" "" CMAKE_LIB_SOCKET_HAS_CONNECT)
IF (CMAKE_LIB_SOCKET_HAS_CONNECT)
SET (X11_X_EXTRA_LIBS -lsocket ${X11_X_EXTRA_LIBS})
ENDIF (CMAKE_LIB_SOCKET_HAS_CONNECT)
@@ -343,7 +366,7 @@ IF (UNIX)
# Find library needed for remove.
CHECK_FUNCTION_EXISTS("remove" CMAKE_HAVE_REMOVE)
IF(NOT CMAKE_HAVE_REMOVE)
- CHECK_LIBRARY_EXISTS("posix" "remove" "" CMAKE_LIB_POSIX_HAS_REMOVE)
+ CHECK_LIBRARY_EXISTS("posix" "remove" "" CMAKE_LIB_POSIX_HAS_REMOVE)
IF (CMAKE_LIB_POSIX_HAS_REMOVE)
SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lposix)
ENDIF (CMAKE_LIB_POSIX_HAS_REMOVE)
@@ -352,7 +375,7 @@ IF (UNIX)
# Find library needed for shmat.
CHECK_FUNCTION_EXISTS("shmat" CMAKE_HAVE_SHMAT)
IF(NOT CMAKE_HAVE_SHMAT)
- CHECK_LIBRARY_EXISTS("ipc" "shmat" "" CMAKE_LIB_IPS_HAS_SHMAT)
+ CHECK_LIBRARY_EXISTS("ipc" "shmat" "" CMAKE_LIB_IPS_HAS_SHMAT)
IF (CMAKE_LIB_IPS_HAS_SHMAT)
SET (X11_X_EXTRA_LIBS ${X11_X_EXTRA_LIBS} -lipc)
ENDIF (CMAKE_LIB_IPS_HAS_SHMAT)
@@ -422,6 +445,8 @@ IF (UNIX)
X11_Xdmcp_INCLUDE_PATH
X11_Xkb_INCLUDE_PATH
X11_Xkblib_INCLUDE_PATH
+ X11_Xkbfile_INCLUDE_PATH
+ X11_Xkbfile_LIB
X11_Xscreensaver_INCLUDE_PATH
X11_Xscreensaver_LIB
X11_Xpm_INCLUDE_PATH
@@ -437,6 +462,8 @@ IF (UNIX)
X11_ICE_LIB
X11_ICE_INCLUDE_PATH
X11_SM_LIB
+ X11_SM_INCLUDE_PATH
+ X11_XSync_INCLUDE_PATH
)
SET(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_SAVE})
ENDIF (UNIX)
diff --git a/Modules/InstallRequiredSystemLibraries.cmake b/Modules/InstallRequiredSystemLibraries.cmake
index 59e5ec1..b6735c1 100644
--- a/Modules/InstallRequiredSystemLibraries.cmake
+++ b/Modules/InstallRequiredSystemLibraries.cmake
@@ -330,6 +330,40 @@ IF(MSVC)
ENDFOREACH(lib)
ENDIF(MSVC)
+IF(WATCOM)
+ GET_FILENAME_COMPONENT( CompilerPath ${CMAKE_C_COMPILER} PATH )
+ IF(WATCOM17)
+ SET( __install__libs ${CompilerPath}/clbr17.dll
+ ${CompilerPath}/mt7r17.dll ${CompilerPath}/plbr17.dll )
+ ENDIF()
+ IF(WATCOM18)
+ SET( __install__libs ${CompilerPath}/clbr18.dll
+ ${CompilerPath}/mt7r18.dll ${CompilerPath}/plbr18.dll )
+ ENDIF()
+ IF(WATCOM19)
+ SET( __install__libs ${CompilerPath}/clbr19.dll
+ ${CompilerPath}/mt7r19.dll ${CompilerPath}/plbr19.dll )
+ ENDIF()
+ FOREACH(lib
+ ${__install__libs}
+ )
+ IF(EXISTS ${lib})
+ SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS
+ ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS} ${lib})
+ ELSE()
+ IF(NOT CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS)
+ MESSAGE(WARNING "system runtime library file does not exist: '${lib}'")
+ # This warning indicates an incomplete Watcom installation
+ # or a bug somewhere above here in this file.
+ # If you would like to avoid this warning, fix the real problem, or
+ # set CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_NO_WARNINGS before including
+ # this file.
+ ENDIF()
+ ENDIF()
+ ENDFOREACH()
+ENDIF()
+
+
# Include system runtime libraries in the installation if any are
# specified by CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS.
IF(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS)
diff --git a/Modules/NSIS.template.in b/Modules/NSIS.template.in
index df9d2d3..6259a5b 100644
--- a/Modules/NSIS.template.in
+++ b/Modules/NSIS.template.in
@@ -74,7 +74,7 @@ Var AR_RegFlags
ClearErrors
;Reading component status from registry
- ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@\Components\${SecName}" "Installed"
+ ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed"
IfErrors "default_${SecName}"
;Status will stay default if registry value not found
;(component was never installed)
@@ -107,13 +107,13 @@ Var AR_RegFlags
;Section is not selected:
;Calling Section uninstall macro and writing zero installed flag
!insertmacro "Remove_${${SecName}}"
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@\Components\${SecName}" \
+ WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \
"Installed" 0
Goto "exit_${SecName}"
"leave_${SecName}:"
;Section is selected:
- WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@\Components\${SecName}" \
+ WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \
"Installed" 1
"exit_${SecName}:"
@@ -493,7 +493,7 @@ Function ConditionalAddToRegisty
Pop $0
Pop $1
StrCmp "$0" "" ConditionalAddToRegisty_EmptyString
- WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" \
+ WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \
"$1" "$0"
;MessageBox MB_OK "Set Registry: '$1' to '$0'"
DetailPrint "Set install registry entry: '$1' to '$0'"
@@ -804,17 +804,17 @@ FunctionEnd
Section "Uninstall"
ReadRegStr $START_MENU SHCTX \
- "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" "StartMenu"
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu"
;MessageBox MB_OK "Start menu is in: $START_MENU"
ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \
- "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" "DoNotAddToPath"
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath"
ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \
- "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" "AddToPathAllUsers"
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers"
ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \
- "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" "AddToPathCurrentUser"
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser"
;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS"
ReadRegStr $INSTALL_DESKTOP SHCTX \
- "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@" "InstallToDesktop"
+ "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop"
;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP "
@CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@
@@ -831,7 +831,7 @@ Section "Uninstall"
;Remove the uninstaller itself.
Delete "$INSTDIR\Uninstall.exe"
- DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_NAME@"
+ DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
;Remove the installation directory if it is empty.
RMDir "$INSTDIR"
diff --git a/Modules/Platform/AIX-VisualAge-Fortran.cmake b/Modules/Platform/AIX-VisualAge-Fortran.cmake
new file mode 100644
index 0000000..19e59d6
--- /dev/null
+++ b/Modules/Platform/AIX-VisualAge-Fortran.cmake
@@ -0,0 +1 @@
+include(Platform/AIX-XL-Fortran)
diff --git a/Modules/Platform/Windows-wcl386.cmake b/Modules/Platform/Windows-wcl386.cmake
index e96ebb5..e1140df 100644
--- a/Modules/Platform/Windows-wcl386.cmake
+++ b/Modules/Platform/Windows-wcl386.cmake
@@ -39,7 +39,7 @@ SET (CMAKE_C_STANDARD_LIBRARIES_INIT "library clbrdll.lib library plbrdll.lib l
SET (CMAKE_CXX_STANDARD_LIBRARIES_INIT "${CMAKE_C_STANDARD_LIBRARIES_INIT}")
SET(CMAKE_C_CREATE_IMPORT_LIBRARY
- "wlib -q -n -b <TARGET_IMPLIB> +'<TARGET_UNQUOTED>'")
+ "wlib -c -q -n -b <TARGET_IMPLIB> +'<TARGET_UNQUOTED>'")
SET(CMAKE_CXX_CREATE_IMPORT_LIBRARY ${CMAKE_C_CREATE_IMPORT_LIBRARY})
SET(CMAKE_C_LINK_EXECUTABLE
@@ -77,7 +77,45 @@ SET(CMAKE_C_CREATE_SHARED_LIBRARY ${CMAKE_CXX_CREATE_SHARED_LIBRARY})
SET(CMAKE_C_CREATE_SHARED_MODULE ${CMAKE_CXX_CREATE_SHARED_MODULE})
# create a C++ static library
-SET(CMAKE_CXX_CREATE_STATIC_LIBRARY "wlib ${CMAKE_LIB_QUIET} -n -b '<TARGET_UNQUOTED>' <LINK_FLAGS> <OBJECTS> ")
+SET(CMAKE_CXX_CREATE_STATIC_LIBRARY "wlib ${CMAKE_LIB_QUIET} -c -n -b '<TARGET_UNQUOTED>' <LINK_FLAGS> <OBJECTS> ")
# create a C static library
SET(CMAKE_C_CREATE_STATIC_LIBRARY ${CMAKE_CXX_CREATE_STATIC_LIBRARY})
+
+IF(NOT CMAKE_WATCOM_COMPILER_TESTS_RUN)
+ SET(CMAKE_WATCOM_COMPILER_TESTS_RUN 1)
+ SET(testWatcomVersionFile
+ "${CMAKE_ROOT}/Modules/CMakeTestWatcomVersion.c")
+ STRING(REGEX REPLACE "/" "\\\\" testWatcomVersionFile "${testWatcomVersionFile}")
+ MESSAGE(STATUS "Check for Watcom compiler version")
+ SET(CMAKE_TEST_COMPILER ${CMAKE_C_COMPILER})
+ IF (NOT CMAKE_C_COMPILER)
+ SET(CMAKE_TEST_COMPILER ${CMAKE_CXX_COMPILER})
+ ENDIF()
+ EXECUTE_PROCESS(COMMAND ${CMAKE_TEST_COMPILER}
+ -q -pc \"${testWatcomVersionFile}\"
+ OUTPUT_VARIABLE CMAKE_COMPILER_OUTPUT
+ RESULT_VARIABLE CMAKE_COMPILER_RETURN
+ )
+ STRING(REGEX REPLACE "\n" " " compilerVersion "${CMAKE_COMPILER_OUTPUT}")
+ STRING(REGEX REPLACE ".*VERSION=(.*)" "\\1"
+ compilerVersion "${compilerVersion}")
+ IF("${CMAKE_COMPILER_RETURN}" STREQUAL "0")
+ SET(WATCOM16)
+ SET(WATCOM17)
+ SET(WATCOM18)
+ SET(WATCOM19)
+ IF("${compilerVersion}" LESS 1270)
+ SET(WATCOM16 1)
+ ENDIF()
+ IF("${compilerVersion}" EQUAL 1270)
+ SET(WATCOM17 1)
+ ENDIF()
+ IF("${compilerVersion}" EQUAL 1280)
+ SET(WATCOM18 1)
+ ENDIF()
+ IF("${compilerVersion}" EQUAL 1290)
+ SET(WATCOM19 1)
+ ENDIF()
+ ENDIF()
+ENDIF()