Hi all,
I think the interface of find_package_handle_standard_args() is a bit
counter-intuitive. Why should it matter to the (ignorant) user that
list-variables are treated different from "ordinary" values. That
doesn't make sense IMHO (see my thread "How to use
FindPackageHandleStandardArgs" on the mailing list).
I've taken the time to rewrite find_package_handle_standard_args() in
such a way that you can now supply any variable as argument to be
checked. If the argument is a list, each member in the list will be
tested. It makes the function even shorter, because there's no need to
do a separate test on _VAR1 anymore. I think this change won't break any
existing code. Any comments are appreciated.
I've attached a patch against the current version of
FindPackageHandleStandardArgs.cmake. Should I open an issue in the bug
tracker for this?
Best regards,
Marcel Loose.
--- /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake
2008-09-24 20:34:34.000000000 +0200
+++ CMake/FindPackageHandleStandardArgs.cmake 2009-05-15 12:26:40.000000000
+0200
@@ -20,6 +20,11 @@
INCLUDE(FindPackageMessage)
FUNCTION(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FAIL_MSG _VAR1 )
+ SET(ARGS)
+ FOREACH(_ARG ${_VAR1} ${ARGN})
+ LIST(APPEND ARGS ${${_ARG}})
+ ENDFOREACH(_ARG)
+
IF("${_FAIL_MSG}" STREQUAL "DEFAULT_MSG")
SET(_FAIL_MESSAGE "Could NOT find ${_NAME}")
ELSE("${_FAIL_MSG}" STREQUAL "DEFAULT_MSG")
@@ -28,30 +33,23 @@
STRING(TOUPPER ${_NAME} _NAME_UPPER)
- # collect all variables which were not found, so they can be printed, so the
+ # Check if all passed variables are valid.
+ # 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})
+ FOREACH(_CURRENT_VAR ${ARGS})
+ 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})
+ ELSE(NOT _CURRENT_VAR)
+ SET(DETAILS "${DETAILS}[${_CURRENT_VAR}]")
+ ENDIF(NOT _CURRENT_VAR)
ENDFOREACH(_CURRENT_VAR)
IF (${_NAME_UPPER}_FOUND)
- FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_VAR1}}" "${DETAILS}")
+ FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${ARGS}" "${DETAILS}")
ELSE (${_NAME_UPPER}_FOUND)
IF (${_NAME}_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "${_FAIL_MESSAGE} (missing: ${MISSING_VARS})")
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake