Revision: 70088
          http://sourceforge.net/p/brlcad/code/70088
Author:   starseeker
Date:     2017-08-17 21:29:40 +0000 (Thu, 17 Aug 2017)
Log Message:
-----------
Rework the BRLCAD_OPTION logic to use functions.

Modified Paths:
--------------
    brlcad/trunk/CMakeLists.txt
    brlcad/trunk/configure
    brlcad/trunk/misc/CMake/BRLCAD_Options.cmake
    brlcad/trunk/misc/CMake/ThirdParty.cmake
    brlcad/trunk/misc/CMake/ThirdParty_TCL.cmake

Modified: brlcad/trunk/CMakeLists.txt
===================================================================
--- brlcad/trunk/CMakeLists.txt 2017-08-17 21:24:24 UTC (rev 70087)
+++ brlcad/trunk/CMakeLists.txt 2017-08-17 21:29:40 UTC (rev 70088)
@@ -1114,18 +1114,12 @@
 else(MSVC)
   set(BRLCAD_BUNDLED_LIBS_DEFAULT "AUTO")
 endif(MSVC)
-BRLCAD_OPTION(${BRLCAD_BUNDLED_LIBS_DEFAULT} BRLCAD_BUNDLED_LIBS 
BRLCAD_BUNDLED_LIBS_ALIASES BRLCAD_BUNDLED_LIBS_DESCRIPTION)
-set_property(CACHE BRLCAD_BUNDLED_LIBS PROPERTY STRINGS AUTO BUNDLED SYSTEM)
-string(TOUPPER "${BRLCAD_BUNDLED_LIBS}" BRLCAD_BUNDLED_LIBS_UPPER)
-set(BRLCAD_BUNDLED_LIBS "${BRLCAD_BUNDLED_LIBS_UPPER}" CACHE STRING "Build 
bundled libraries." FORCE)
-if(${BRLCAD_BUNDLED_LIBS} MATCHES "ON")
-  set(BRLCAD_BUNDLED_LIBS "BUNDLED" CACHE STRING "Build bundled libraries." 
FORCE)
-endif(${BRLCAD_BUNDLED_LIBS} MATCHES "ON")
-if(${BRLCAD_BUNDLED_LIBS} MATCHES "OFF")
-  set(BRLCAD_BUNDLED_LIBS "SYSTEM" CACHE STRING "Build bundled libraries." 
FORCE)
-endif(${BRLCAD_BUNDLED_LIBS} MATCHES "OFF")
+BRLCAD_OPTION(BRLCAD_BUNDLED_LIBS ${BRLCAD_BUNDLED_LIBS_DEFAULT}
+  TYPE ABS
+  ALIASES BRLCAD_BUNDLED_LIBS_ALIASES
+  DESCRIPTION BRLCAD_BUNDLED_LIBS_DESCRIPTION)
 if(NOT BRLCAD_BUNDLED_LIBS MATCHES "AUTO" AND NOT BRLCAD_BUNDLED_LIBS MATCHES 
"BUNDLED" AND NOT BRLCAD_BUNDLED_LIBS MATCHES "SYSTEM")
-  message(WARNING "Unknown value BRLCAD_BUNDLED_LIBS supplied for 
BRLCAD_BUNDLED_LIBS - defaulting to AUTO")
+  message(WARNING "Unknown value BRLCAD_BUNDLED_LIBS supplied for 
BRLCAD_BUNDLED_LIBS (${BRLCAD_BUNDLED_LIBS}) - defaulting to AUTO")
   message(WARNING "Valid options are AUTO, BUNDLED and SYSTEM")
   set(BRLCAD_BUNDLED_LIBS "AUTO" CACHE STRING "Build bundled libraries." FORCE)
 endif(NOT BRLCAD_BUNDLED_LIBS MATCHES "AUTO" AND NOT BRLCAD_BUNDLED_LIBS 
MATCHES "BUNDLED" AND NOT BRLCAD_BUNDLED_LIBS MATCHES "SYSTEM")
@@ -1204,7 +1198,10 @@
 Default depends on whether OpenGL is successfully detected -
 if it is, default is to enable.
 ")
-BRLCAD_OPTION(${OPENGL_FOUND} BRLCAD_ENABLE_OPENGL 
BRLCAD_ENABLE_OPENGL_ALIASES BRLCAD_ENABLE_OPENGL_DESCRIPTION)
+BRLCAD_OPTION(BRLCAD_ENABLE_OPENGL ${OPENGL_FOUND}
+  TYPE BOOL
+  ALIASES BRLCAD_ENABLE_OPENGL_ALIASES
+  DESCRIPTION BRLCAD_ENABLE_OPENGL_DESCRIPTION)
 
 # Enable RTGL.  Requires an enabled OpenGL.
 option(BRLCAD_ENABLE_RTGL "Enable experimental RTGL code." OFF)
@@ -1287,7 +1284,10 @@
 Default is \"ON\", and should only be disabled for read-only render
 work where performance is critical.
 ")
-BRLCAD_OPTION(ON BRLCAD_ENABLE_RUNTIME_DEBUG 
BRLCAD_ENABLE_RUNTIME_DEBUG_ALIASES BRLCAD_ENABLE_RUNTIME_DEBUG_DESCRIPTION)
+BRLCAD_OPTION(BRLCAD_ENABLE_RUNTIME_DEBUG ON
+  TYPE BOOL
+  ALIASES BRLCAD_ENABLE_RUNTIME_DEBUG_ALIASES
+  DESCRIPTION BRLCAD_ENABLE_RUNTIME_DEBUG_DESCRIPTION)
 mark_as_advanced(BRLCAD_ENABLE_RUNTIME_DEBUG)
 if(NOT BRLCAD_ENABLE_RUNTIME_DEBUG)
   message("}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}")
@@ -1316,7 +1316,10 @@
 set(BRLCAD_FLAGS_DEBUG_DESCRIPTION "
 Add compiler flags to aid in program debugging.  Defaults to ON.
 ")
-BRLCAD_OPTION(ON BRLCAD_FLAGS_DEBUG BRLCAD_FLAGS_DEBUG_ALIASES 
BRLCAD_FLAGS_DEBUG_DESCRIPTION)
+BRLCAD_OPTION(BRLCAD_FLAGS_DEBUG ON
+  TYPE BOOL
+  ALIASES BRLCAD_FLAGS_DEBUG_ALIASES
+  DESCRIPTION BRLCAD_FLAGS_DEBUG_DESCRIPTION)
 
 # A variety of debugging messages in the code key off of the DEBUG
 # definition - set it according to whether we're using debug flags.
@@ -1332,9 +1335,10 @@
 set(BRLCAD_ENABLE_COMPILER_WARNINGS_DESCRIPTION "
 Use extra compiler warning flags when compiling C/C++ code.  Defaults to ON.
 ")
-BRLCAD_OPTION(ON BRLCAD_ENABLE_COMPILER_WARNINGS
-  BRLCAD_ENABLE_COMPILER_WARNINGS_ALIASES
-  BRLCAD_ENABLE_COMPILER_WARNINGS_DESCRIPTION)
+BRLCAD_OPTION(BRLCAD_ENABLE_COMPILER_WARNINGS ON
+  TYPE BOOL
+  ALIASES BRLCAD_ENABLE_COMPILER_WARNINGS_ALIASES
+  DESCRIPTION BRLCAD_ENABLE_COMPILER_WARNINGS_DESCRIPTION)
 mark_as_advanced(BRLCAD_ENABLE_COMPILER_WARNINGS)
 
 # Enable/disable strict compiler settings - these are used for building
@@ -1352,7 +1356,10 @@
 discovered by these flags whenever possible rather than disabling strict
 mode.
 ")
-BRLCAD_OPTION(ON BRLCAD_ENABLE_STRICT BRLCAD_ENABLE_STRICT_ALIASES 
BRLCAD_ENABLE_STRICT_DESCRIPTION)
+BRLCAD_OPTION(BRLCAD_ENABLE_STRICT ON
+  TYPE BOOL
+  ALIASES BRLCAD_ENABLE_STRICT_ALIASES
+  DESCRIPTION BRLCAD_ENABLE_STRICT_DESCRIPTION)
 if(BRLCAD_ENABLE_STRICT)
   mark_as_advanced(BRLCAD_ENABLE_STRICT)
   CONFIG_H_APPEND(BRLCAD "#define STRICT_FLAGS 1\n")
@@ -1389,9 +1396,10 @@
 
 EXPERIMENTAL!
 ")
-BRLCAD_OPTION(OFF ENABLE_ALL_CXX_COMPILE
-  ENABLE_ALL_CXX_COMPILE_ALIASES
-  ENABLE_ALL_CXX_COMPILE_DESCRIPTION)
+BRLCAD_OPTION(ENABLE_ALL_CXX_COMPILE OFF
+  TYPE BOOL
+  ALIASES ENABLE_ALL_CXX_COMPILE_ALIASES
+  DESCRIPTION ENABLE_ALL_CXX_COMPILE_DESCRIPTION)
 mark_as_advanced(ENABLE_ALL_CXX_COMPILE)
 
 # Build with coverage enabled
@@ -1409,9 +1417,10 @@
 policy.  The current minimum C standard is ??.
 There is no currently defined minimum C++ standard.
 ")
-BRLCAD_OPTION(OFF ENABLE_POSIX_COMPLIANCE
-  ENABLE_POSIX_COMPLIANCE_ALIASES
-  ENABLE_POSIX_COMPLIANCE_DESCRIPTION)
+BRLCAD_OPTION(ENABLE_POSIX_COMPLIANCE OFF
+  TYPE BOOL
+  ALIASES ENABLE_POSIX_COMPLIANCE_ALIASES
+  DESCRIPTION ENABLE_POSIX_COMPLIANCE_DESCRIPTION)
 mark_as_advanced(ENABLE_POSIX_COMPLIANCE)
 
 #== ISO C ==
@@ -1422,9 +1431,10 @@
 Causes C compiler options to be set for strict compliance with the
 appropriate ISO C standard.
 ")
-BRLCAD_OPTION(OFF ENABLE_STRICT_COMPILER_STANDARD_COMPLIANCE
-  ENABLE_STRICT_COMPILER_STANDARD_COMPLIANCE_ALIASES
-  ENABLE_STRICT_COMPILER_STANDARD_COMPLIANCE_DESCRIPTION)
+BRLCAD_OPTION(ENABLE_STRICT_COMPILER_STANDARD_COMPLIANCE OFF
+  TYPE BOOL
+  ALIASES ENABLE_STRICT_COMPILER_STANDARD_COMPLIANCE_ALIASES
+  DESCRIPTION ENABLE_STRICT_COMPILER_STANDARD_COMPLIANCE_DESCRIPTION)
 mark_as_advanced(ENABLE_STRICT_COMPILER_STANDARD_COMPLIANCE)
 
 # Build with dtrace support
@@ -1510,7 +1520,10 @@
 executable file (which on Linux is usually a shell script with 0755
 permissions).
 ")
-BRLCAD_OPTION(${EXTRADOCS_DEFAULT} BRLCAD_EXTRADOCS BRLCAD_EXTRADOCS_ALIASES 
BRLCAD_EXTRADOCS_DESCRIPTION)
+BRLCAD_OPTION(BRLCAD_EXTRADOCS ${EXTRADOCS_DEFAULT}
+  TYPE BOOL
+  ALIASES BRLCAD_EXTRADOCS_ALIASES
+  DESCRIPTION BRLCAD_EXTRADOCS_DESCRIPTION)
 
 
 # The HTML output is used in the graphical help browsers in MGED and Archer,

Modified: brlcad/trunk/configure
===================================================================
--- brlcad/trunk/configure      2017-08-17 21:24:24 UTC (rev 70087)
+++ brlcad/trunk/configure      2017-08-17 21:29:40 UTC (rev 70088)
@@ -10,9 +10,9 @@
 do
    case $1
    in
-     --enable-all)                options="$options -DBRLCAD_BUNDLED_LIBS=ON";
+     --enable-all)                options="$options 
-DBRLCAD_BUNDLED_LIBS=BUNDLED";
                                   shift;;
-     --disable-all)                options="$options 
-DBRLCAD_BUNDLED_LIBS=OFF";
+     --disable-all)                options="$options 
-DBRLCAD_BUNDLED_LIBS=SYSTEM";
                                   shift;;
      --enable-opengl)                options="$options 
-DBRLCAD_ENABLE_OPENGL=ON";
                                   shift;;

Modified: brlcad/trunk/misc/CMake/BRLCAD_Options.cmake
===================================================================
--- brlcad/trunk/misc/CMake/BRLCAD_Options.cmake        2017-08-17 21:24:24 UTC 
(rev 70087)
+++ brlcad/trunk/misc/CMake/BRLCAD_Options.cmake        2017-08-17 21:29:40 UTC 
(rev 70088)
@@ -46,63 +46,98 @@
 # configure style option syntax and CMake's variables, and append that to
 # the generated configure.new file.
 
+
+function(WRITE_CONFIG_YN opt opt_ALIASES onval offval)
+  set(ofile "${CMAKE_BINARY_DIR}/configure.new")
+  foreach(item ${${opt_ALIASES}})
+    string(TOLOWER ${item} alias_str)
+    string(REPLACE "_" "-" alias_str "${alias_str}")
+    string(REPLACE "enable" "disable" disable_str "${alias_str}")
+    file(APPEND "${ofile}" "     --${alias_str})                
options=\"$options -D${opt}=${onval}\";\n")
+    file(APPEND "${ofile}" "                                  shift;;\n")
+    file(APPEND "${ofile}" "     --${disable_str})                
options=\"$options -D${opt}=${offval}\";\n")
+    file(APPEND "${ofile}" "                                  shift;;\n")
+  endforeach(item ${${opt_ALIASES}})
+endfunction(WRITE_CONFIG_YN)
+
+function(WRITE_CONFIG_STR opt opt_ALIASES)
+  foreach(item ${${opt_ALIASES}})
+    string(TOLOWER ${item} alias_str)
+    file(APPEND "${ofile}" "     --${alias_str}=*)               
inputstr=$1;\n")
+    file(APPEND "${ofile}" "                                     
options=\"$options -D${opt}=\${inputstr#--${alias_str}=}\";\n")
+    file(APPEND "${ofile}" "                                  shift;;\n")
+  endforeach(item ${${opt_ALIASES}})
+endfunction(WRITE_CONFIG_STR)
+
+function(WRITE_CONFIG_OPTS opt opt_ALIASES style)
+
+  set(ofile "${CMAKE_BINARY_DIR}/configure.new")
+
+  if("${style}" STREQUAL "STRING")
+    # If we've got a string type, we don't need inverse logic.
+    WRITE_CONFIG_STR("${opt}" "${opt_ALIASES}")
+    return()
+  endif("${style}" STREQUAL "STRING")
+
+  # handle BUNDLE/SYSTEM options
+  if("${style}" STREQUAL "ABS")
+    WRITE_CONFIG_YN("${opt}" "${opt_ALIASES}" BUNDLED SYSTEM)
+  endif("${style}" STREQUAL "ABS")
+
+  # handle Boolean options
+  if("${style}" STREQUAL "BOOL")
+    WRITE_CONFIG_YN("${opt}" "${opt_ALIASES}" "ON" "OFF")
+  endif("${style}" STREQUAL "BOOL")
+
+endfunction(WRITE_CONFIG_OPTS)
+
 # Handle aliases for BRL-CAD options
-macro(OPTION_ALIASES opt opt_ALIASES style)
-  if(${opt_ALIASES})
-    foreach(item ${${opt_ALIASES}})
-      string(REPLACE "ENABLE_" "DISABLE_" inverse_item ${item})
-      set(inverse_aliases ${inverse_aliases} ${inverse_item})
-    endforeach(item ${${opt_ALIASES}})
-    foreach(item ${${opt_ALIASES}})
-      if(NOT "${item}" STREQUAL "${opt}")
-       if(NOT "${${item}}" STREQUAL "")
-         set(${opt} ${${item}} CACHE STRING "setting ${opt} via alias ${item}" 
FORCE)
-         set(${item} "" CACHE STRING "set ${opt} via this variable" FORCE)
-         mark_as_advanced(${item})
-       endif(NOT "${${item}}" STREQUAL "")
-      endif(NOT "${item}" STREQUAL "${opt}")
-    endforeach(item ${${opt_ALIASES}})
-    # handle DISABLE forms of options
-    foreach(item ${inverse_aliases})
-      if(NOT "${item}" STREQUAL "${opt}")
-       if(NOT "${${item}}" STREQUAL "")
-         set(invert_item ${${item}})
-         if("${${item}}" STREQUAL "ON")
-           set(invert_item "OFF")
-         elseif("${invert_item}" STREQUAL "OFF")
-           set(invert_item "ON")
-         endif("${${item}}" STREQUAL "ON")
-         set(${opt} ${invert_item} CACHE STRING "setting ${opt} via alias 
${item}" FORCE)
-         set(${item} "" CACHE STRING "set ${opt} via this variable" FORCE)
-         mark_as_advanced(${item})
-       endif(NOT "${${item}}" STREQUAL "")
-      endif(NOT "${item}" STREQUAL "${opt}")
-    endforeach(item ${inverse_aliases})
-    foreach(item ${${opt_ALIASES}})
-      string(TOLOWER ${item} alias_str)
-      string(REPLACE "_" "-" alias_str "${alias_str}")
-      string(REPLACE "enable" "disable" disable_str "${alias_str}")
-      if("${style}" STREQUAL "ABS")
-       file(APPEND "${CMAKE_BINARY_DIR}/configure.new" "     --${alias_str})   
             options=\"$options -D${opt}=BUNDLED\";\n")
-       file(APPEND "${CMAKE_BINARY_DIR}/configure.new" "                       
           shift;;\n")
-       file(APPEND "${CMAKE_BINARY_DIR}/configure.new" "     --${disable_str}) 
               options=\"$options -D${opt}=SYSTEM\";\n")
-       file(APPEND "${CMAKE_BINARY_DIR}/configure.new" "                       
           shift;;\n")
-      endif("${style}" STREQUAL "ABS")
-      if("${style}" STREQUAL "BOOL")
-       file(APPEND "${CMAKE_BINARY_DIR}/configure.new" "     --${alias_str})   
             options=\"$options -D${opt}=ON\";\n")
-       file(APPEND "${CMAKE_BINARY_DIR}/configure.new" "                       
           shift;;\n")
-       file(APPEND "${CMAKE_BINARY_DIR}/configure.new" "     --${disable_str}) 
               options=\"$options -D${opt}=OFF\";\n")
-       file(APPEND "${CMAKE_BINARY_DIR}/configure.new" "                       
           shift;;\n")
-      endif("${style}" STREQUAL "BOOL")
-    endforeach(item ${${opt_ALIASES}})
-  endif(${opt_ALIASES})
-endmacro(OPTION_ALIASES)
+function(OPTION_RESOLVE_ALIASES ropt opt opt_ALIASES style)
 
+  set(lopt ${${ropt}})
+
+  foreach(item ${${opt_ALIASES}})
+    if(NOT "${item}" STREQUAL "${opt}" AND NOT "${${item}}" STREQUAL "")
+      set(lopt ${${item}})
+      set(${item} "" CACHE STRING "set ${opt} via this variable" FORCE)
+      mark_as_advanced(${item})
+    endif(NOT "${item}" STREQUAL "${opt}" AND NOT "${${item}}" STREQUAL "")
+  endforeach(item ${${opt_ALIASES}})
+
+  # String types don't have inverses
+  if("${style}" STREQUAL "STRING")
+    set(${ropt} ${lopt} PARENT_SCOPE)
+    return()
+  endif("${style}" STREQUAL "STRING")
+
+  # Generate inverse aliases for all "ENABLE" options
+  foreach(item ${${opt_ALIASES}})
+    string(REPLACE "ENABLE_" "DISABLE_" inverse_item ${item})
+    set(inverse_aliases ${inverse_aliases} ${inverse_item})
+  endforeach(item ${${opt_ALIASES}})
+
+  # Check the inverse options for a set value
+  foreach(item ${${opt_ALIASES}})
+    if(NOT "${${item}}" STREQUAL "")
+      set(lopt ${${item}})
+      set(${item} "" CACHE STRING "set ${opt} via this variable" FORCE)
+      mark_as_advanced(${item})
+    endif(NOT "${${item}}" STREQUAL "")
+  endforeach(item ${${opt_ALIASES}})
+
+  # Let the parent scope know the result
+  set(${ropt} ${lopt} PARENT_SCOPE)
+
+endfunction(OPTION_RESOLVE_ALIASES)
+
 # Write documentation description for BRL-CAD options
-macro(OPTION_DESCRIPTION opt opt_ALIASES opt_DESCRIPTION)
-  file(APPEND "${CMAKE_BINARY_DIR}/OPTIONS" "\n--- ${opt} ---\n")
-  file(APPEND "${CMAKE_BINARY_DIR}/OPTIONS" "${${opt_DESCRIPTION}}")
+function(WRITE_OPTION_DESCRIPTION opt opt_ALIASES opt_DESCRIPTION)
 
+  set(ofile "${CMAKE_BINARY_DIR}/OPTIONS")
+
+  file(APPEND "${ofile}" "\n--- ${opt} ---\n")
+  file(APPEND "${ofile}" "${${opt_DESCRIPTION}}")
+
   set(ALIASES_LIST "\nAliases: ")
   foreach(item ${${opt_ALIASES}})
     set(ALIASES_LIST_TEST "${ALIASES_LIST}, ${item}")
@@ -109,7 +144,7 @@
     string(LENGTH ${ALIASES_LIST_TEST} LL)
 
     if(${LL} GREATER 80)
-      file(APPEND "${CMAKE_BINARY_DIR}/OPTIONS" "${ALIASES_LIST}\n")
+      file(APPEND "${ofile}" "${ALIASES_LIST}\n")
       set(ALIASES_LIST "          ${item}")
     else(${LL} GREATER 80)
       if(NOT ${ALIASES_LIST} MATCHES "\nAliases")
@@ -127,29 +162,101 @@
   if(ALIASES_LIST)
     string(STRIP ALIASES_LIST ${ALIASES_LIST})
     if(ALIASES_LIST)
-      file(APPEND "${CMAKE_BINARY_DIR}/OPTIONS" "${ALIASES_LIST}")
+      file(APPEND "${ofile}" "${ALIASES_LIST}")
     endif(ALIASES_LIST)
   endif(ALIASES_LIST)
 
-  file(APPEND "${CMAKE_BINARY_DIR}/OPTIONS" "\n\n")
-endmacro(OPTION_DESCRIPTION)
+  file(APPEND "${ofile}" "\n\n")
 
+endfunction(WRITE_OPTION_DESCRIPTION)
+
+
+function(VAL_NORMALIZE val optype)
+  string(TOUPPER "${${val}}" uval)
+  if("${uval}" STREQUAL "YES")
+    set(uval "ON")
+  endif("${uval}" STREQUAL "YES")
+  if("${uval}" STREQUAL "NO")
+    set(uval "OFF")
+  endif("${uval}" STREQUAL "NO")
+  if("${optype}" STREQUAL "ABS")
+    if("${uval}" STREQUAL "ON")
+      set(uval "BUNDLED")
+    endif("${uval}" STREQUAL "ON")
+    if("${uval}" STREQUAL "OFF")
+      set(uval "SYSTEM")
+    endif("${uval}" STREQUAL "OFF")
+  endif("${optype}" STREQUAL "ABS")
+  set(${val} "${uval}" PARENT_SCOPE)
+endfunction(VAL_NORMALIZE)
+
+
+function(OPT_NORMALIZE ropt default optype)
+
+  # We need something for a default
+  if("${default}" STREQUAL "")
+    message(FATAL_ERROR "Error - empty default value supplied for ${opt}")
+  endif("${default}" STREQUAL "")
+
+  # If we need to use the default, do so.
+  if("${${ropt}}" STREQUAL "")
+    set(local_opt "${default}")
+  else("${${ropt}}" STREQUAL "")
+    set(local_opt ${${ropt}})
+  endif("${${ropt}}" STREQUAL "")
+
+  # We should be done with logic that will change the setting - normalize
+  VAL_NORMALIZE(local_opt ${optype})
+
+  # Let the parent know what the normalized result is
+  set(${ropt} ${local_opt} PARENT_SCOPE)
+
+endfunction(OPT_NORMALIZE)
+
+
 # Standard option with BRL-CAD aliases and description
-macro(BRLCAD_OPTION default opt opt_ALIASES opt_DESCRIPTION)
-  if(NOT DEFINED ${opt} OR "${${opt}}" STREQUAL "")
-    if("${default}" STREQUAL "ON" OR "${default}" STREQUAL "YES")
-      set(${opt} ON CACHE BOOL "define ${opt}" FORCE)
-    elseif("${default}" STREQUAL "OFF" OR "${default}" STREQUAL "NO")
-      set(${opt} OFF CACHE BOOL "define ${opt}" FORCE)
-    else("${default}" STREQUAL "ON" OR "${default}" STREQUAL "YES")
-      set(${opt} ${default} CACHE STRING "define ${opt}" FORCE)
-    endif("${default}" STREQUAL "ON" OR "${default}" STREQUAL "YES")
-  endif(NOT DEFINED ${opt} OR "${${opt}}" STREQUAL "")
+function(BRLCAD_OPTION opt default)
 
-  OPTION_ALIASES("${opt}" "${opt_ALIASES}" "BOOL")
-  OPTION_DESCRIPTION("${opt}" "${opt_ALIASES}" "${opt_DESCRIPTION}")
-endmacro(BRLCAD_OPTION)
+  cmake_parse_arguments(O "" "DESCRIPTION;TYPE" "ALIASES" ${ARGN})
 
+  # Initialize
+  set(lopt "${${opt}}")
+  set(otype)
+  if(O_TYPE)
+    set(otype ${O_TYPE})
+  endif(O_TYPE)
+
+  # Process aliases and write descriptions
+  if(O_ALIASES)
+    OPTION_RESOLVE_ALIASES(lopt "${opt}" "${O_ALIASES}" "${otype}")
+    WRITE_CONFIG_OPTS("${opt}" "${O_ALIASES}" "${otype}")
+    if(O_DESCRIPTION)
+      WRITE_OPTION_DESCRIPTION("${opt}" "${O_ALIASES}" "${O_DESCRIPTION}")
+    endif(O_DESCRIPTION)
+  endif(O_ALIASES)
+
+  # Finalize the actual value to be used
+  OPT_NORMALIZE(lopt "${default}" ${otype})
+
+  # Set in the cache
+  if("${otype}" STREQUAL "BOOL")
+    set(${opt} "${lopt}" CACHE BOOL "define ${opt}" FORCE)
+  else("${otype}" STREQUAL "BOOL")
+    set(${opt} "${lopt}" CACHE STRING "define ${opt}" FORCE)
+  endif("${otype}" STREQUAL "BOOL")
+
+  # For drop-down menus in CMake gui - set STRINGS property
+  if("${otype}" STREQUAL "ABS")
+    set_property(CACHE ${opt} PROPERTY STRINGS AUTO BUNDLED SYSTEM)
+  endif("${otype}" STREQUAL "ABS")
+
+  # Let the parent know
+  set(${opt} "${lopt}" PARENT_SCOPE)
+
+endfunction(BRLCAD_OPTION)
+
+
+
 # Local Variables:
 # tab-width: 8
 # mode: cmake

Modified: brlcad/trunk/misc/CMake/ThirdParty.cmake
===================================================================
--- brlcad/trunk/misc/CMake/ThirdParty.cmake    2017-08-17 21:24:24 UTC (rev 
70087)
+++ brlcad/trunk/misc/CMake/ThirdParty.cmake    2017-08-17 21:29:40 UTC (rev 
70088)
@@ -265,8 +265,10 @@
   endif(${CMAKE_PROJECT_NAME}_${varname_root}_BUILD)
 
   if(NOT ${varname_root}_UNDOCUMENTED)
-    OPTION_ALIASES("${CMAKE_PROJECT_NAME}_${varname_root}" 
"${varname_root}_ALIASES" "ABS")
-    OPTION_DESCRIPTION("${CMAKE_PROJECT_NAME}_${varname_root}" 
"${varname_root}_ALIASES" "${description}")
+    BRLCAD_OPTION("${CMAKE_PROJECT_NAME}_${varname_root}" 
"${${CMAKE_PROJECT_NAME}_${varname_root}}"
+      TYPE ABS
+      ALIASES "${varname_root}_ALIASES"
+      DESCRIPTION "${description}")
   endif(NOT ${varname_root}_UNDOCUMENTED)
 
   # For drop-down menus in CMake gui - set STRINGS property
@@ -545,12 +547,11 @@
     set(${upper}_EXECUTABLE_TARGET "" CACHE STRING "No build target for 
${lower}" FORCE)
   endif(${CMAKE_PROJECT_NAME}_${upper}_BUILD)
 
-  OPTION_ALIASES("${CMAKE_PROJECT_NAME}_${upper}" "${aliases}" "ABS")
-  OPTION_DESCRIPTION("${CMAKE_PROJECT_NAME}_${upper}" "${aliases}" 
"${description}")
+  BRLCAD_OPTION("${CMAKE_PROJECT_NAME}_${upper}" 
"${${CMAKE_PROJECT_NAME}_${upper}}"
+      TYPE ABS
+      ALIASES "${aliases}"
+      DESCRIPTION "${description}")
 
-  # For drop-down menus in CMake gui - set STRINGS property
-  set_property(CACHE ${CMAKE_PROJECT_NAME}_${upper} PROPERTY STRINGS AUTO 
BUNDLED SYSTEM)
-
   mark_as_advanced(${upper}_EXECUTABLE)
   mark_as_advanced(${upper}_EXECUTABLE_TARGET)
   mark_as_advanced(${upper}_FOUND)

Modified: brlcad/trunk/misc/CMake/ThirdParty_TCL.cmake
===================================================================
--- brlcad/trunk/misc/CMake/ThirdParty_TCL.cmake        2017-08-17 21:24:24 UTC 
(rev 70087)
+++ brlcad/trunk/misc/CMake/ThirdParty_TCL.cmake        2017-08-17 21:29:40 UTC 
(rev 70088)
@@ -389,12 +389,11 @@
     endif(${CMAKE_PROJECT_NAME}_${PKGNAME_UPPER}_BUILD)
   endif(NOT ${PKGNAME_UPPER}_MET_CONDITION)
 
-  OPTION_ALIASES("${CMAKE_PROJECT_NAME}_${PKGNAME_UPPER}" "${aliases}" "ABS")
-  OPTION_DESCRIPTION("${CMAKE_PROJECT_NAME}_${PKGNAME_UPPER}" "${aliases}" 
"${description}")
+  BRLCAD_OPTION("${CMAKE_PROJECT_NAME}_${PKGNAME_UPPER}" 
"${${CMAKE_PROJECT_NAME}_${PKGNAME_UPPER}}"
+    TYPE ABS
+    ALIASES "${aliases}"
+    DESCRIPTION "${description}")
 
-  # For drop-down menus in CMake gui - set STRINGS property
-  set_property(CACHE ${CMAKE_PROJECT_NAME}_${PKGNAME_UPPER} PROPERTY STRINGS 
AUTO BUNDLED SYSTEM)
-
 endmacro(THIRD_PARTY_TCL_PACKAGE)
 
 # Local Variables:

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to