diff options
| author | Alexander Neundorf <neundorf@kde.org> | 2010-03-14 15:31:41 +0000 | 
|---|---|---|
| committer | Alexander Neundorf <neundorf@kde.org> | 2010-03-14 15:31:41 +0000 | 
| commit | 575ac8acb9ae2ea0b6112057487002be02330557 (patch) | |
| tree | 583c1b782f6c7ddd4c0399ff10fd3a65fb5d464b | |
| parent | 35342e6c7ad882f14e12bf96ce2f6e39e82e5aa1 (diff) | |
| download | extra-cmake-modules-575ac8acb9ae2ea0b6112057487002be02330557.tar.gz extra-cmake-modules-575ac8acb9ae2ea0b6112057487002be02330557.tar.bz2 | |
-add a copy of FindPackageHandleStandardArgs, which adds checking the version numbers, so you get
 this automatically in all modules which use find_package_handle_standard_args()
Alex
svn path=/trunk/KDE/kdelibs/; revision=1103184
| -rw-r--r-- | modules/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | modules/FindPackageHandleStandardArgs.cmake | 141 | ||||
| -rw-r--r-- | modules/FindPhonon.cmake | 1 | 
3 files changed, 144 insertions, 1 deletions
| diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 587a289f..fad2de0e 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -10,6 +10,9 @@ set(cmakeFilesDontInstall                 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 diff --git a/modules/FindPackageHandleStandardArgs.cmake b/modules/FindPackageHandleStandardArgs.cmake new file mode 100644 index 00000000..9e89d2b0 --- /dev/null +++ b/modules/FindPackageHandleStandardArgs.cmake @@ -0,0 +1,141 @@ +# 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(LibXml2 DEFAULT_MSG LIBXML2_LIBRARIES LIBXML2_INCLUDE_DIR) +# +#    LibXml2 is considered to be found, if both LIBXML2_LIBRARIES 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. + +#============================================================================= +# Copyright 2007-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 distributed 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 ) + +  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") + +  STRING(TOUPPER ${_NAME} _NAME_UPPER) + +  # collect all variables which were not found, so they can be printed, so the  +  # user knows better what went wrong (#6375) +  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}) +    IF(NOT ${_CURRENT_VAR}) +      SET(${_NAME_UPPER}_FOUND FALSE) +      SET(MISSING_VARS "${MISSING_VARS} ${_CURRENT_VAR}") +    ELSE(NOT ${_CURRENT_VAR}) +      SET(DETAILS "${DETAILS}[${${_CURRENT_VAR}}]") +    ENDIF(NOT ${_CURRENT_VAR}) +  ENDFOREACH(_CURRENT_VAR) + +  # version handling: +  SET(VERSION_MSG "") +  SET(VERSION_OK TRUE) +  IF (${_NAME}_FIND_VERSION) + +    # if the package was found, check for the version using <NAME>_FIND_VERSION +    IF (${_NAME_UPPER}_FOUND) +      SET(VERSION ${${_NAME_UPPER}_VERSION}) + +      IF(${_NAME}_FIND_VERSION_EXACT)       # exact version required +        IF (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}") +          SET(VERSION_MSG " Found version \"${VERSION}\", but required is exact version \"${${_NAME}_FIND_VERSION}\"") +          SET(VERSION_OK FALSE) +        ELSE (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}") +          SET(VERSION_MSG " (found exact version \"${VERSION}\")") +        ENDIF (NOT "${${_NAME}_FIND_VERSION}" VERSION_EQUAL "${VERSION}") + +      ELSE(${_NAME}_FIND_VERSION_EXACT)     # minimum version specified: +        IF ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}") +          SET(VERSION_MSG " Found version \"${VERSION}\", but required is at least \"${${_NAME}_FIND_VERSION}\"") +          SET(VERSION_OK FALSE) +        ELSE ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}") +          SET(VERSION_MSG " (found version \"${VERSION}\", required is \"${${_NAME}_FIND_VERSION}\")") +        ENDIF ("${${_NAME}_FIND_VERSION}" VERSION_GREATER "${VERSION}") +      ENDIF(${_NAME}_FIND_VERSION_EXACT) + +    # if the package was not found, but some 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}\")") +      ELSE(${_NAME}_FIND_VERSION_EXACT) +         SET(VERSION_MSG " (Required is at least version \"${${_NAME}_FIND_VERSION}\")") +      ENDIF(${_NAME}_FIND_VERSION_EXACT) +    ENDIF (${_NAME_UPPER}_FOUND) +  ENDIF (${_NAME}_FIND_VERSION) + +  IF(VERSION_OK) +      SET(DETAILS "${DETAILS}[v${${VERSION}}]") +  ELSE(VERSION_OK) +    SET(${_NAME_UPPER}_FOUND FALSE) +  ENDIF(VERSION_OK) + + +  # print the result: +  IF (${_NAME_UPPER}_FOUND) +    FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_VAR1}} ${VERSION_MSG}" "${DETAILS}") +  ELSE (${_NAME_UPPER}_FOUND) +    IF(NOT VERSION_OK) + +      IF (${_NAME}_FIND_REQUIRED) +          MESSAGE(FATAL_ERROR "${_FAIL_MESSAGE}: ${VERSION_MSG} (found ${${_VAR1}})") +      ELSE (${_NAME}_FIND_REQUIRED) +        IF (NOT ${_NAME}_FIND_QUIETLY) +          MESSAGE(STATUS "${_FAIL_MESSAGE}: ${VERSION_MSG} (found ${${_VAR1}})") +        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}") +      ELSE (${_NAME}_FIND_REQUIRED) +        IF (NOT ${_NAME}_FIND_QUIETLY) +          MESSAGE(STATUS "${_FAIL_MESSAGE}  (missing: ${MISSING_VARS}) ${VERSION_MSG}") +        ENDIF (NOT ${_NAME}_FIND_QUIETLY) +      ENDIF (${_NAME}_FIND_REQUIRED) +    ENDIF(NOT VERSION_OK) + +  ENDIF (${_NAME_UPPER}_FOUND) + +  SET(${_NAME_UPPER}_FOUND ${${_NAME_UPPER}_FOUND} PARENT_SCOPE) + +ENDFUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS) diff --git a/modules/FindPhonon.cmake b/modules/FindPhonon.cmake index e24ffdce..85953cca 100644 --- a/modules/FindPhonon.cmake +++ b/modules/FindPhonon.cmake @@ -19,7 +19,6 @@ macro(_phonon_find_version)     file(READ ${_phonon_namespace_header_file} _phonon_header LIMIT 5000 OFFSET 1000)     string(REGEX MATCH "define PHONON_VERSION_STR \"(4\\.[0-9]+\\.[0-9a-z]+)\"" _phonon_version_match "${_phonon_header}")     set(PHONON_VERSION "${CMAKE_MATCH_1}") -   message(STATUS "Phonon Version: ${PHONON_VERSION}")  endmacro(_phonon_find_version)  # the dirs listed with HINTS are searched before the default sets of dirs | 
