diff options
author | Martin Braun <martin.braun@ettus.com> | 2018-03-12 17:55:00 -0700 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2018-03-16 10:48:46 -0700 |
commit | 07dd2720786435f80edeb8f51a243dad2f91cc4b (patch) | |
tree | e4b11332c420071409ce3ac5632439c23d1aa54f | |
parent | 85a975942f25a9029891d00fc9139bf36debc1df (diff) | |
download | uhd-07dd2720786435f80edeb8f51a243dad2f91cc4b.tar.gz uhd-07dd2720786435f80edeb8f51a243dad2f91cc4b.tar.bz2 uhd-07dd2720786435f80edeb8f51a243dad2f91cc4b.zip |
cmake: Correctly fail when an unavailable component is requested
For example, if Doxygen wasn't installed, specifying -DENABLE_MANUAL=ON
should always cause CMake to immediately fail.
-rw-r--r-- | host/cmake/Modules/UHDComponent.cmake | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/host/cmake/Modules/UHDComponent.cmake b/host/cmake/Modules/UHDComponent.cmake index da2e1ea2f..b18f651ea 100644 --- a/host/cmake/Modules/UHDComponent.cmake +++ b/host/cmake/Modules/UHDComponent.cmake @@ -11,12 +11,16 @@ SET(_uhd_disabled_components "" CACHE INTERNAL "" FORCE) ######################################################################## # Register a component into the system -# - name the component string name -# - var the global enable variable -# - enb the default enable setting -# - deps a list of dependencies -# - dis the default disable setting +# - name the component string name ("FOO") +# - var the global enable variable (ENABLE_FOO) +# - enb the default enable setting (ON) +# - deps a list of dependencies (DEPENDENCY_FOUND) +# - dis the default disable setting (OFF) # - req fail if dependencies not met (unless specifically disabled) +# +# In parentheses are examples. If you specify those, we register a component +# "FOO" which is enabled by calling CMake with -DENABLE_FOO=ON. It defaults to +# ON, unless DEPENDENCY_FOUND is false, in which case it becomes false. ######################################################################## MACRO(LIBUHD_REGISTER_COMPONENT name var enb deps dis req) MESSAGE(STATUS "") @@ -25,19 +29,33 @@ MACRO(LIBUHD_REGISTER_COMPONENT name var enb deps dis req) MESSAGE(STATUS " Dependency ${dep} = ${${dep}}") ENDFOREACH(dep) - #if user specified option, store here + # If user specified option, store here. Note: If the user doesn't specify + # this option on the cmake command line, both user_enabled and + # user_disabled will be false! IF("${${var}}" STREQUAL "OFF") SET(user_disabled TRUE) ELSE() SET(user_disabled FALSE) ENDIF("${${var}}" STREQUAL "OFF") + IF("${${var}}" STREQUAL "ON") + SET(user_enabled TRUE) + ELSE() + SET(user_enabled FALSE) + ENDIF("${${var}}" STREQUAL "ON") #setup the dependent option for this component INCLUDE(CMakeDependentOption) CMAKE_DEPENDENT_OPTION(${var} "enable ${name} support" ${enb} "${deps}" ${dis}) - #if a required option's dependencies aren't met, fail unless user specifies otherwise - IF(NOT ${var} AND ${req} AND NOT user_disabled) + # There are two failure cases: + # 1) The user requested this component explicitly (-DENABLE_FOO=ON) but the + # requirements are not met. + # 2) The user did not explicitly turn off this component (-DENABLE_FOO=OFF) + # but it is flagged as required by ${req} + IF(NOT ${var} AND user_enabled) # Case 1) + MESSAGE(FATAL_ERROR "Dependencies for required component ${name} not met.") + ENDIF(NOT ${var} AND user_enabled) + IF(NOT ${var} AND ${req} AND NOT user_disabled) # Case 2) MESSAGE(FATAL_ERROR "Dependencies for required component ${name} not met.") ENDIF(NOT ${var} AND ${req} AND NOT user_disabled) |