aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2018-03-12 17:55:00 -0700
committerMartin Braun <martin.braun@ettus.com>2018-03-16 10:48:46 -0700
commit07dd2720786435f80edeb8f51a243dad2f91cc4b (patch)
treee4b11332c420071409ce3ac5632439c23d1aa54f
parent85a975942f25a9029891d00fc9139bf36debc1df (diff)
downloaduhd-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.cmake34
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)