[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-buildsystem
Subject: KDE/kdelibs/cmake/modules
From: Alexander Neundorf <neundorf () kde ! org>
Date: 2010-08-25 20:06:48
Message-ID: 20100825200648.C81DAAC876 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1167973 by neundorf:
-sync FindPackageHandleStandardArgs.cmake with the version from cmake master, in \
order to stay compatible with future cmake releases.
Our FindPackageHandleStandardArgs.cmake had automatic check for the version number by \
guessing the name of the variable which contains the version number. This didn't make \
it into cmake, but instead an extendible version where you can specify what you want.
FindEigen2.cmake is already converted, it looks like this:
find_package_handle_standard_args(Eigen2 REQUIRED_VARS EIGEN2_INCLUDE_DIR
VERSION_VAR EIGEN2_VERSION)
Additionally a FAIL_MESSAGE can be specified. VERSION_VAR is optional.
This must be merged in the 4.5. branch if we don't find any issues.
Alex
CCMAIL: kde-buildsystem@kde.org
M +1 -3 CMakeLists.txt
AM CMakeParseArguments.cmake
M +5 -30 FindEigen2.cmake
M +106 -47 FindPackageHandleStandardArgs.cmake
--- trunk/KDE/kdelibs/cmake/modules/CMakeLists.txt #1167972:1167973
@@ -10,9 +10,6 @@
FindPolkitQt.cmake
FindPolkitQt-1.cmake)
-# remove once we depend on a newer cmake version:
-# FindPackageHandleStandardArgs (2.8.2)
-
# Explicitely list all files which will be installed.
# We don't use a GLOB anymore so we can have also cmake files here
# which are used inside kdelibs, but which don't have to be installed (and
@@ -101,6 +98,7 @@
Qt4Macros.cmake
Qt4ConfigDependentSettings.cmake
FindPackageHandleStandardArgs.cmake
+ CMakeParseArguments.cmake # used by \
FindPackageHandleStandardArgs.cmake, will be in CMake 2.8.3 FindPythonLibrary.cmake
FindQCA2.cmake
FindQImageBlitz.cmake
--- trunk/KDE/kdelibs/cmake/modules/FindEigen2.cmake #1167972:1167973
@@ -15,20 +15,14 @@
# Redistribution and use is allowed according to the terms of the BSD license.
if(NOT Eigen2_FIND_VERSION)
- if(NOT Eigen2_FIND_VERSION_MAJOR)
set(Eigen2_FIND_VERSION_MAJOR 2)
- endif(NOT Eigen2_FIND_VERSION_MAJOR)
- if(NOT Eigen2_FIND_VERSION_MINOR)
set(Eigen2_FIND_VERSION_MINOR 0)
- endif(NOT Eigen2_FIND_VERSION_MINOR)
- if(NOT Eigen2_FIND_VERSION_PATCH)
set(Eigen2_FIND_VERSION_PATCH 0)
- endif(NOT Eigen2_FIND_VERSION_PATCH)
set(Eigen2_FIND_VERSION \
"${Eigen2_FIND_VERSION_MAJOR}.${Eigen2_FIND_VERSION_MINOR}.${Eigen2_FIND_VERSION_PATCH}")
endif(NOT Eigen2_FIND_VERSION)
-macro(_eigen2_check_version)
+macro(_eigen2_get_version)
file(READ "${EIGEN2_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" \
_eigen2_version_header LIMIT 5000 OFFSET 1000)
string(REGEX MATCH "define *EIGEN_WORLD_VERSION ([0-9]*)" \
_eigen2_world_version_match "${_eigen2_version_header}") @@ -39,27 +33,8 @@
set(EIGEN2_MINOR_VERSION "${CMAKE_MATCH_1}")
set(EIGEN2_VERSION \
${EIGEN2_WORLD_VERSION}.${EIGEN2_MAJOR_VERSION}.${EIGEN2_MINOR_VERSION})
- if(${EIGEN2_VERSION} VERSION_LESS ${Eigen2_FIND_VERSION})
- set(EIGEN2_VERSION_OK FALSE)
- else(${EIGEN2_VERSION} VERSION_LESS ${Eigen2_FIND_VERSION})
- set(EIGEN2_VERSION_OK TRUE)
- endif(${EIGEN2_VERSION} VERSION_LESS ${Eigen2_FIND_VERSION})
+endmacro(_eigen2_get_version)
- if(NOT EIGEN2_VERSION_OK)
-
- message(STATUS "Eigen2 version ${EIGEN2_VERSION} found in ${EIGEN2_INCLUDE_DIR}, \
"
- "but at least version ${Eigen2_FIND_VERSION} is required")
- endif(NOT EIGEN2_VERSION_OK)
-endmacro(_eigen2_check_version)
-
-if (EIGEN2_INCLUDE_DIR)
-
- # in cache already
- _eigen2_check_version()
- set(EIGEN2_FOUND ${EIGEN2_VERSION_OK})
-
-else (EIGEN2_INCLUDE_DIR)
-
find_path(EIGEN2_INCLUDE_DIR NAMES Eigen/Core
PATHS
${INCLUDE_INSTALL_DIR}
@@ -68,13 +43,13 @@
)
if(EIGEN2_INCLUDE_DIR)
- _eigen2_check_version()
+ _eigen2_get_version()
endif(EIGEN2_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(Eigen2 DEFAULT_MSG EIGEN2_INCLUDE_DIR \
EIGEN2_VERSION_OK) +find_package_handle_standard_args(Eigen2 REQUIRED_VARS \
EIGEN2_INCLUDE_DIR + VERSION_VAR \
EIGEN2_VERSION)
mark_as_advanced(EIGEN2_INCLUDE_DIR)
-endif(EIGEN2_INCLUDE_DIR)
--- trunk/KDE/kdelibs/cmake/modules/FindPackageHandleStandardArgs.cmake \
#1167972:1167973 @@ -1,24 +1,58 @@
-# FIND_PACKAGE_HANDLE_STANDARD_ARGS(NAME (DEFAULT_MSG|"Custom failure message") VAR1 \
... )
-# This macro is intended to be used in FindXXX.cmake modules files.
-# It handles the REQUIRED and QUIET argument to FIND_PACKAGE() and
-# it also sets the <UPPERCASED_NAME>_FOUND variable.
-# The package is considered found if all variables listed are TRUE.
-# The version-argument of FIND_PACKAGE() is also handled.
-# For checking whether the version is ok, this macro compares the
-# variable <UPPERCASED_NAME>_VERSION with the specified version.
-# Example:
+# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> ... )
#
-# FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 DEFAULT_MSG LIBXML2_LIBRARIES \
LIBXML2_INCLUDE_DIR) +# This function is intended to be used in FindXXX.cmake modules \
files. +# It handles the REQUIRED, QUIET and version-related arguments to \
FIND_PACKAGE(). +# It also sets the <UPPERCASED_NAME>_FOUND variable.
+# The package is considered found if all variables <var1>... listed contain
+# valid results, e.g. valid filepaths.
#
-# LibXml2 is considered to be found, if both LIBXML2_LIBRARIES and
+# There are two modes of this function. The first argument in both modes is
+# the name of the Find-module where it is called (in original casing).
+#
+# The first simple mode looks like this:
+# FIND_PACKAGE_HANDLE_STANDARD_ARGS(<name> (DEFAULT_MSG|"Custom failure message") \
<var1>...<varN> ) +# If the variables <var1> to <varN> are all valid, then \
<UPPERCASED_NAME>_FOUND +# will be set to TRUE.
+# If DEFAULT_MSG is given as second argument, then the function will generate
+# itself useful success and error messages. You can also supply a custom error \
message +# for the failure case. This is not recommended.
+#
+# The second mode is more powerful and also supports version checking:
+# FIND_PACKAGE_HANDLE_STANDARD_ARGS(NAME [REQUIRED_VARS <var1>...<varN>]
+# [VERSION_VAR <versionvar>
+# [FAIL_MESSAGE "Custom failure message"] \
) +#
+# As above, if <var1> through <varN> are all valid, <UPPERCASED_NAME>_FOUND
+# will be set to TRUE.
+# Via FAIL_MESSAGE a custom failure message can be specified, if this is not
+# used, the default message will be displayed.
+# Following VERSION_VAR the name of the variable can be specified which holds
+# the version of the package which has been found. If this is done, this version
+# will be checked against the (potentially) specified required version used
+# in the find_package() call. The EXACT keyword is also handled. The default
+# messages include information about the required version and the version
+# which has been actually found, both if the version is ok or not.
+#
+# Example for mode 1:
+#
+# FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 DEFAULT_MSG LIBXML2_LIBRARY \
LIBXML2_INCLUDE_DIR) +#
+# LibXml2 is considered to be found, if both LIBXML2_LIBRARY and
# LIBXML2_INCLUDE_DIR are valid. Then also LIBXML2_FOUND is set to TRUE.
# If it is not found and REQUIRED was used, it fails with FATAL_ERROR,
# independent whether QUIET was used or not.
-# If it is found, the location is reported using the VAR1 argument, so
-# here a message "Found LibXml2: /usr/lib/libxml2.so" will be printed out.
-# If the second argument is DEFAULT_MSG, the message in the failure case will
-# be "Could NOT find LibXml2", if you don't like this message you can specify
-# your own custom failure message there.
+# If it is found, success will be reported, including the content of <var1>.
+# On repeated Cmake runs, the same message won't be printed again.
+#
+# Example for mode 2:
+#
+# FIND_PACKAGE_HANDLE_STANDARD_ARGS(BISON REQUIRED_VARS BISON_EXECUTABLE
+# VERSION_VAR BISON_VERSION)
+# In this case, BISON is considered to be found if the variable(s) listed
+# after REQUIRED_VAR are all valid, i.e. BISON_EXECUTABLE in this case.
+# Also the version of BISON will be checked by using the version contained
+# in BISON_VERSION.
+# Since no FAIL_MESSAGE is given, the default messages will be printed.
#=============================================================================
# Copyright 2007-2009 Kitware, Inc.
@@ -30,18 +64,52 @@
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
-# (To distributed this file outside of CMake, substitute the full
+# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
INCLUDE(FindPackageMessage)
-FUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FAIL_MSG _VAR1 )
+INCLUDE(CMakeParseArguments)
- IF("${_FAIL_MSG}" STREQUAL "DEFAULT_MSG")
- SET(_FAIL_MESSAGE "Could NOT find ${_NAME}")
- ELSE("${_FAIL_MSG}" STREQUAL "DEFAULT_MSG")
- SET(_FAIL_MESSAGE "${_FAIL_MSG}")
- ENDIF("${_FAIL_MSG}" STREQUAL "DEFAULT_MSG")
+FUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG _VAR1)
+
+# set up the arguments for CMAKE_PARSE_ARGUMENTS and check whether we are in
+# new extended or in the "old" mode:
+ SET(options) # none
+ SET(oneValueArgs FAIL_MESSAGE VERSION_VAR)
+ SET(multiValueArgs REQUIRED_VARS)
+ SET(_KEYWORDS_FOR_EXTENDED_MODE ${options} ${oneValueArgs} ${multiValueArgs} )
+ LIST(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX)
+
+ IF(${INDEX} EQUAL -1)
+ SET(FPHSA_FAIL_MESSAGE ${_FIRST_ARG})
+ SET(FPHSA_REQUIRED_VARS ${_VAR1} ${ARGN})
+ SET(FPHSA_VERSION_VAR)
+ ELSE(${INDEX} EQUAL -1)
+
+ CMAKE_PARSE_ARGUMENTS(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}" \
${_FIRST_ARG} ${_VAR1} ${ARGN}) +
+ IF(FPHSA_UNPARSED_ARGUMENTS)
+ MESSAGE(FATAL_ERROR "Unknown keywords given to \
FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"") + \
ENDIF(FPHSA_UNPARSED_ARGUMENTS) +
+ IF(NOT FPHSA_FAIL_MESSAGE)
+ SET(FPHSA_FAIL_MESSAGE "DEFAULT_MSG")
+ ENDIF(NOT FPHSA_FAIL_MESSAGE)
+ ENDIF(${INDEX} EQUAL -1)
+
+# now that we collected all arguments, process them
+
+ IF("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG")
+ SET(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}")
+ ENDIF("${FPHSA_FAIL_MESSAGE}" STREQUAL "DEFAULT_MSG")
+
+ IF(NOT FPHSA_REQUIRED_VARS)
+ MESSAGE(FATAL_ERROR "No REQUIRED_VARS specified for \
FIND_PACKAGE_HANDLE_STANDARD_ARGS()") + ENDIF(NOT FPHSA_REQUIRED_VARS)
+
+ LIST(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR)
+
STRING(TOUPPER ${_NAME} _NAME_UPPER)
# collect all variables which were not found, so they can be printed, so the
@@ -49,15 +117,8 @@
SET(MISSING_VARS "")
SET(DETAILS "")
SET(${_NAME_UPPER}_FOUND TRUE)
- IF(NOT ${_VAR1})
- SET(${_NAME_UPPER}_FOUND FALSE)
- SET(MISSING_VARS " ${_VAR1}")
- ELSE(NOT ${_VAR1})
- SET(DETAILS "${DETAILS}[${${_VAR1}}]")
- ENDIF(NOT ${_VAR1})
-
# check if all passed variables are valid
- FOREACH(_CURRENT_VAR ${ARGN})
+ FOREACH(_CURRENT_VAR ${FPHSA_REQUIRED_VARS})
IF(NOT ${_CURRENT_VAR})
SET(${_NAME_UPPER}_FOUND FALSE)
SET(MISSING_VARS "${MISSING_VARS} ${_CURRENT_VAR}")
@@ -66,6 +127,7 @@
ENDIF(NOT ${_CURRENT_VAR})
ENDFOREACH(_CURRENT_VAR)
+
# version handling:
SET(VERSION_MSG "")
SET(VERSION_OK TRUE)
@@ -73,13 +135,9 @@
# if the package was found, check for the version using <NAME>_FIND_VERSION
IF (${_NAME_UPPER}_FOUND)
- IF(${_NAME_UPPER}_VERSION)
- SET(VERSION ${${_NAME_UPPER}_VERSION})
- ELSEIF(${_NAME}_VERSION)
- SET(VERSION ${${_NAME}_VERSION})
- ENDIF(${_NAME_UPPER}_VERSION)
+ SET(VERSION ${${FPHSA_VERSION_VAR}} )
- IF(VERSION) #hmm what do we do if the module in question doesn't set \
FOO_VERSION but something else ?... Ignore it for now + IF(VERSION)
IF(${_NAME}_FIND_VERSION_EXACT) # exact version required
IF (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}")
@@ -98,11 +156,12 @@
ENDIF ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}")
ENDIF(${_NAME}_FIND_VERSION_EXACT)
- ELSE(VERSION)
- SET(VERSION_MSG " (WARNING: Required version is \
\"${${_NAME}_FIND_VERSION}\", but version of ${_NAME} is unknown)") +# Uncomment the \
following two lines to see to which Find-modules the VERSION_VAR keywords still need \
to be added: +# ELSE(VERSION)
+# SET(VERSION_MSG " (WARNING: Required version is \
\"${${_NAME}_FIND_VERSION}\", but version of ${_NAME} is unknown)") ENDIF(VERSION)
- # if the package was not found, but some a version was given, add that to the \
output: + # if the package was not found, but a version was given, add that to the \
output: ELSE (${_NAME_UPPER}_FOUND)
IF(${_NAME}_FIND_VERSION_EXACT)
SET(VERSION_MSG " (Required is exact version \
\"${${_NAME}_FIND_VERSION}\")") @@ -113,7 +172,7 @@
ENDIF (${_NAME}_FIND_VERSION)
IF(VERSION_OK)
- SET(DETAILS "${DETAILS}[v${${VERSION}}]")
+ SET(DETAILS "${DETAILS}[v${VERSION}]")
ELSE(VERSION_OK)
SET(${_NAME_UPPER}_FOUND FALSE)
ENDIF(VERSION_OK)
@@ -121,25 +180,25 @@
# print the result:
IF (${_NAME_UPPER}_FOUND)
- FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_VAR1}} ${VERSION_MSG}" \
"${DETAILS}") + FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: \
${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG}" "${DETAILS}") ELSE (${_NAME_UPPER}_FOUND)
IF(NOT VERSION_OK)
IF (${_NAME}_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR "${_FAIL_MESSAGE}: ${VERSION_MSG} (found \
${${_VAR1}})") + MESSAGE(FATAL_ERROR "${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} \
(found ${${_FIRST_REQUIRED_VAR}})") ELSE (${_NAME}_FIND_REQUIRED)
IF (NOT ${_NAME}_FIND_QUIETLY)
- MESSAGE(STATUS "${_FAIL_MESSAGE}: ${VERSION_MSG} (found ${${_VAR1}})")
+ MESSAGE(STATUS "${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (found \
${${_FIRST_REQUIRED_VAR}})") ENDIF (NOT ${_NAME}_FIND_QUIETLY)
ENDIF (${_NAME}_FIND_REQUIRED)
ELSE(NOT VERSION_OK)
IF (${_NAME}_FIND_REQUIRED)
- MESSAGE(FATAL_ERROR "${_FAIL_MESSAGE} (missing: ${MISSING_VARS}) \
${VERSION_MSG}") + MESSAGE(FATAL_ERROR "${FPHSA_FAIL_MESSAGE} (missing: \
${MISSING_VARS}) ${VERSION_MSG}") ELSE (${_NAME}_FIND_REQUIRED)
IF (NOT ${_NAME}_FIND_QUIETLY)
- MESSAGE(STATUS "${_FAIL_MESSAGE} (missing: ${MISSING_VARS}) \
${VERSION_MSG}") + MESSAGE(STATUS "${FPHSA_FAIL_MESSAGE} (missing: \
${MISSING_VARS}) ${VERSION_MSG}") ENDIF (NOT ${_NAME}_FIND_QUIETLY)
ENDIF (${_NAME}_FIND_REQUIRED)
ENDIF(NOT VERSION_OK)
@@ -148,4 +207,4 @@
SET(${_NAME_UPPER}_FOUND ${${_NAME_UPPER}_FOUND} PARENT_SCOPE)
-ENDFUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS)
+ENDFUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _FIRST_ARG)
_______________________________________________
Kde-buildsystem mailing list
Kde-buildsystem@kde.org
https://mail.kde.org/mailman/listinfo/kde-buildsystem
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic