/CMakeModules/MacroLogFeature.cmake

http://github.com/tomahawk-player/tomahawk · CMake · 157 lines · 90 code · 35 blank · 32 comment · 0 complexity · 5678c8fe8cd97688cf9d37bee2b3a545 MD5 · raw file

  1. # This file defines the Feature Logging macros.
  2. #
  3. # MACRO_LOG_FEATURE(VAR FEATURE DESCRIPTION URL [REQUIRED [MIN_VERSION [COMMENTS]]])
  4. # Logs the information so that it can be displayed at the end
  5. # of the configure run
  6. # VAR : TRUE or FALSE, indicating whether the feature is supported
  7. # FEATURE: name of the feature, e.g. "libjpeg"
  8. # DESCRIPTION: description what this feature provides
  9. # URL: home page
  10. # REQUIRED: TRUE or FALSE, indicating whether the featue is required
  11. # MIN_VERSION: minimum version number. empty string if unneeded
  12. # COMMENTS: More info you may want to provide. empty string if unnecessary
  13. #
  14. # MACRO_DISPLAY_FEATURE_LOG()
  15. # Call this to display the collected results.
  16. # Exits CMake with a FATAL error message if a required feature is missing
  17. #
  18. # Example:
  19. #
  20. # INCLUDE(MacroLogFeature)
  21. #
  22. # FIND_PACKAGE(JPEG)
  23. # MACRO_LOG_FEATURE(JPEG_FOUND "libjpeg" "Support JPEG images" "http://www.ijg.org" TRUE "3.2a" "")
  24. # ...
  25. # MACRO_DISPLAY_FEATURE_LOG()
  26. # Copyright (c) 2006, Alexander Neundorf, <neundorf@kde.org>
  27. # Copyright (c) 2006, Allen Winter, <winter@kde.org>
  28. # Copyright (c) 2009, Sebastian Trueg, <trueg@kde.org>
  29. #
  30. # Redistribution and use is allowed according to the terms of the BSD license.
  31. # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
  32. IF (NOT _macroLogFeatureAlreadyIncluded)
  33. SET(_file ${CMAKE_BINARY_DIR}/MissingRequirements.txt)
  34. IF (EXISTS ${_file})
  35. FILE(REMOVE ${_file})
  36. ENDIF (EXISTS ${_file})
  37. SET(_file ${CMAKE_BINARY_DIR}/EnabledFeatures.txt)
  38. IF (EXISTS ${_file})
  39. FILE(REMOVE ${_file})
  40. ENDIF (EXISTS ${_file})
  41. SET(_file ${CMAKE_BINARY_DIR}/DisabledFeatures.txt)
  42. IF (EXISTS ${_file})
  43. FILE(REMOVE ${_file})
  44. ENDIF (EXISTS ${_file})
  45. SET(_macroLogFeatureAlreadyIncluded TRUE)
  46. INCLUDE(FeatureSummary)
  47. ENDIF (NOT _macroLogFeatureAlreadyIncluded)
  48. MACRO(MACRO_LOG_FEATURE _var _package _description _url ) # _required _minvers _comments)
  49. STRING(TOUPPER "${ARGV4}" _required)
  50. SET(_minvers "${ARGV5}")
  51. SET(_comments "${ARGV6}")
  52. IF (${_var})
  53. SET(_LOGFILENAME ${CMAKE_BINARY_DIR}/EnabledFeatures.txt)
  54. ELSE (${_var})
  55. IF ("${_required}" STREQUAL "TRUE")
  56. SET(_LOGFILENAME ${CMAKE_BINARY_DIR}/MissingRequirements.txt)
  57. ELSE ("${_required}" STREQUAL "TRUE")
  58. SET(_LOGFILENAME ${CMAKE_BINARY_DIR}/DisabledFeatures.txt)
  59. ENDIF ("${_required}" STREQUAL "TRUE")
  60. ENDIF (${_var})
  61. SET(_logtext " * ${_package}")
  62. IF (NOT ${_var})
  63. IF (${_minvers} MATCHES ".*")
  64. SET(_logtext "${_logtext} (${_minvers} or higher)")
  65. ENDIF (${_minvers} MATCHES ".*")
  66. SET(_logtext "${_logtext} <${_url}>\n ")
  67. ELSE (NOT ${_var})
  68. SET(_logtext "${_logtext} - ")
  69. ENDIF (NOT ${_var})
  70. SET(_logtext "${_logtext}${_description}")
  71. IF (NOT ${_var})
  72. IF (${_comments} MATCHES ".*")
  73. SET(_logtext "${_logtext}\n ${_comments}")
  74. ENDIF (${_comments} MATCHES ".*")
  75. # SET(_logtext "${_logtext}\n") #double-space missing features?
  76. ENDIF (NOT ${_var})
  77. FILE(APPEND "${_LOGFILENAME}" "${_logtext}\n")
  78. IF(COMMAND SET_PACKAGE_INFO) # in FeatureSummary.cmake since CMake 2.8.3
  79. SET_PACKAGE_PROPERTIES("${_package}" PROPERTIES DESCRIPTION "\"${_description}\"" URL "${_url}" PURPOSE "\"${_comments}\"")
  80. ENDIF(COMMAND SET_PACKAGE_INFO)
  81. ENDMACRO(MACRO_LOG_FEATURE)
  82. MACRO(MACRO_DISPLAY_FEATURE_LOG)
  83. IF(COMMAND FEATURE_SUMMARY) # in FeatureSummary.cmake since CMake 2.8.3
  84. FEATURE_SUMMARY(FILENAME ${CMAKE_CURRENT_BINARY_DIR}/FindPackageLog.txt
  85. WHAT ALL)
  86. ENDIF(COMMAND FEATURE_SUMMARY)
  87. SET(_missingFile ${CMAKE_BINARY_DIR}/MissingRequirements.txt)
  88. SET(_enabledFile ${CMAKE_BINARY_DIR}/EnabledFeatures.txt)
  89. SET(_disabledFile ${CMAKE_BINARY_DIR}/DisabledFeatures.txt)
  90. IF (EXISTS ${_missingFile} OR EXISTS ${_enabledFile} OR EXISTS ${_disabledFile})
  91. SET(_printSummary TRUE)
  92. ENDIF (EXISTS ${_missingFile} OR EXISTS ${_enabledFile} OR EXISTS ${_disabledFile})
  93. IF(_printSummary)
  94. SET(_missingDeps 0)
  95. IF (EXISTS ${_enabledFile})
  96. FILE(READ ${_enabledFile} _enabled)
  97. FILE(REMOVE ${_enabledFile})
  98. SET(_summary "${_summary}\n-----------------------------------------------------------------------------\n-- The following external packages were located on your system.\n-- This installation will have the extra features provided by these packages.\n-----------------------------------------------------------------------------\n${_enabled}")
  99. ENDIF (EXISTS ${_enabledFile})
  100. IF (EXISTS ${_disabledFile})
  101. SET(_missingDeps 1)
  102. FILE(READ ${_disabledFile} _disabled)
  103. FILE(REMOVE ${_disabledFile})
  104. SET(_summary "${_summary}\n-----------------------------------------------------------------------------\n-- The following OPTIONAL packages could NOT be located on your system.\n-- Consider installing them to enable more features from this software.\n-----------------------------------------------------------------------------\n${_disabled}")
  105. ENDIF (EXISTS ${_disabledFile})
  106. IF (EXISTS ${_missingFile})
  107. SET(_missingDeps 1)
  108. FILE(READ ${_missingFile} _requirements)
  109. SET(_summary "${_summary}\n-----------------------------------------------------------------------------\n-- The following REQUIRED packages could NOT be located on your system.\n-- You must install these packages before continuing.\n-----------------------------------------------------------------------------\n${_requirements}")
  110. FILE(REMOVE ${_missingFile})
  111. SET(_haveMissingReq 1)
  112. ENDIF (EXISTS ${_missingFile})
  113. IF (NOT ${_missingDeps})
  114. SET(_summary "${_summary}\n-----------------------------------------------------------------------------\n-- Congratulations! All external packages have been found.")
  115. ENDIF (NOT ${_missingDeps})
  116. MESSAGE(${_summary})
  117. MESSAGE("-----------------------------------------------------------------------------\n")
  118. IF(_haveMissingReq)
  119. MESSAGE(FATAL_ERROR "Exiting: Missing Requirements")
  120. ENDIF(_haveMissingReq)
  121. ENDIF(_printSummary)
  122. ENDMACRO(MACRO_DISPLAY_FEATURE_LOG)