Small refactoring of OpenCV cmake options
authorAndrey Kamaev <no@email>
Wed, 22 Feb 2012 14:04:59 +0000 (14:04 +0000)
committerAndrey Kamaev <no@email>
Wed, 22 Feb 2012 14:04:59 +0000 (14:04 +0000)
CMakeLists.txt
cmake/OpenCVUtils.cmake

index e5c40ce..5919697 100644 (file)
@@ -72,11 +72,6 @@ set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
 set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "" FORCE)
 set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "" FORCE)
 
-set(CMAKE_VERBOSE OFF CACHE BOOL "Verbose mode")
-if(CMAKE_VERBOSE)
-    set(CMAKE_VERBOSE_MAKEFILE 1)
-endif()
-
 include(cmake/OpenCVUtils.cmake REQUIRED)
 
 # ----------------------------------------------------------------------------
@@ -121,11 +116,7 @@ OCV_OPTION(WITH_XINE           "Include Xine support (GPL)"                  OFF
 
 # OpenCV build components
 # ===================================================
-if(ANDROID OR IOS)
-    OCV_OPTION(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead 6of static ones (.lib/.a)" OFF )
-else()
-    OCV_OPTION(BUILD_SHARED_LIBS "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" ON )
-endif()
+OCV_OPTION(BUILD_SHARED_LIBS        "Build shared libraries (.dll/.so) instead of static ones (.lib/.a)" NOT (ANDROID OR IOS) )
 OCV_OPTION(BUILD_ANDROID_EXAMPLES   "Build examples for Android platform"         ON  IF ANDROID )
 OCV_OPTION(BUILD_DOCS               "Create build rules for OpenCV Documentation" ON )
 OCV_OPTION(BUILD_EXAMPLES           "Build all examples"                          OFF )
@@ -165,8 +156,15 @@ OCV_OPTION(ENABLE_SSE41               "Enable SSE4.1 instructions"
 OCV_OPTION(ENABLE_SSE42               "Enable SSE4.2 instructions"                               OFF  IF (CMAKE_COMPILER_IS_GNUCXX AND (X86 OR X86_64)) )
 OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors"                                 OFF )
 
+# uncategorized options
+# ===================================================
+OCV_OPTION(CMAKE_VERBOSE "Verbose mode" OFF )
+
+# backward compatibility
+# ===================================================
 include(cmake/OpenCVLegacyOptions.cmake OPTIONAL)
 
+
 # ----------------------------------------------------------------------------
 #  Get actual OpenCV version number from sources
 # ----------------------------------------------------------------------------
@@ -217,6 +215,10 @@ if(DEFINED CMAKE_DEBUG_POSTFIX)
   set(OPENCV_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
 endif()
 
+if(CMAKE_VERBOSE)
+  set(CMAKE_VERBOSE_MAKEFILE 1)
+endif()
+
 
 # ----------------------------------------------------------------------------
 #  Path for build/platform -specific headers
index 7dfe938..397254a 100644 (file)
@@ -15,19 +15,44 @@ endif()
 # Provides an option that the user can optionally select.
 # Can accept condition to control when option is available for user.
 # Usage:
-#   option(<option_variable> "help string describing option" <initial value> [IF <condition>])
+#   option(<option_variable> "help string describing the option" <initial value or boolean expression> [IF <condition>])
 macro(OCV_OPTION variable description value)
-  SET(__condition ${ARGN})
+  set(__value ${value})
+  set(__condition "")
+  set(__varname "__value")
+  foreach(arg ${ARGN})
+    if(arg STREQUAL "IF" OR arg STREQUAL "if")
+      set(__varname "__condition")
+    else()
+      list(APPEND ${__varname} ${arg})
+    endif()
+  endforeach()
+  unset(__varname)
   if("${__condition}" STREQUAL "")
-    SET(__condition 1)
+    set(__condition 2 GREATER 1)
   endif()
-  list(REMOVE_ITEM __condition "IF" "if")
+
   if(${__condition})
-    OPTION(${variable} "${description}" ${value})
+    if("${__value}" MATCHES ";")
+      if(${__value})
+        option(${variable} "${description}" ON)
+      else()
+        option(${variable} "${description}" OFF)
+      endif()
+    elseif(DEFINED ${__value})
+      if(${__value})
+        option(${variable} "${description}" ON)
+      else()
+        option(${variable} "${description}" OFF)
+      endif()
+    else()
+      option(${variable} "${description}" ${__value})
+    endif()
   else()
-    UNSET(${variable} CACHE)
+    unset(${variable} CACHE)
   endif()
-  UNSET(__condition)
+  unset(__condition)
+  unset(__value)
 endmacro()
 
 
@@ -35,35 +60,36 @@ endmacro()
 # After it adds module to build and define
 # constants passed as second arg
 macro(CHECK_MODULE module_name define)
-    set(${define} 0)
-    if(PKG_CONFIG_FOUND)
-        set(ALIAS               ALIASOF_${module_name})
-        set(ALIAS_FOUND                 ${ALIAS}_FOUND)
-        set(ALIAS_INCLUDE_DIRS   ${ALIAS}_INCLUDE_DIRS)
-        set(ALIAS_LIBRARY_DIRS   ${ALIAS}_LIBRARY_DIRS)
-        set(ALIAS_LIBRARIES         ${ALIAS}_LIBRARIES)
-
-        PKG_CHECK_MODULES(${ALIAS} ${module_name})
-
-        if (${ALIAS_FOUND})
-            set(${define} 1)
-            foreach(P "${ALIAS_INCLUDE_DIRS}")
-                if (${P})
-                    list(APPEND HIGHGUI_INCLUDE_DIRS ${${P}})
-                endif()
-            endforeach()
-
-            foreach(P "${ALIAS_LIBRARY_DIRS}")
-                if (${P})
-                    list(APPEND HIGHGUI_LIBRARY_DIRS ${${P}})
-                endif()
-            endforeach()
-
-            list(APPEND HIGHGUI_LIBRARIES ${${ALIAS_LIBRARIES}})
+  set(${define} 0)
+  if(PKG_CONFIG_FOUND)
+    set(ALIAS               ALIASOF_${module_name})
+    set(ALIAS_FOUND                 ${ALIAS}_FOUND)
+    set(ALIAS_INCLUDE_DIRS   ${ALIAS}_INCLUDE_DIRS)
+    set(ALIAS_LIBRARY_DIRS   ${ALIAS}_LIBRARY_DIRS)
+    set(ALIAS_LIBRARIES         ${ALIAS}_LIBRARIES)
+
+    PKG_CHECK_MODULES(${ALIAS} ${module_name})
+
+    if(${ALIAS_FOUND})
+      set(${define} 1)
+      foreach(P "${ALIAS_INCLUDE_DIRS}")
+        if(${P})
+          list(APPEND HIGHGUI_INCLUDE_DIRS ${${P}})
         endif()
+      endforeach()
+
+      foreach(P "${ALIAS_LIBRARY_DIRS}")
+        if(${P})
+          list(APPEND HIGHGUI_LIBRARY_DIRS ${${P}})
+        endif()
+      endforeach()
+
+      list(APPEND HIGHGUI_LIBRARIES ${${ALIAS_LIBRARIES}})
     endif()
+  endif()
 endmacro()
 
+
 # Status report macro.
 # Automatically align right column and selects text based on condition.
 # Usage:
@@ -71,75 +97,77 @@ endmacro()
 #   status(<heading> <value1> [<value2> ...])
 #   status(<heading> <condition> THEN <text for TRUE> ELSE <text for FALSE> )
 macro(status text)
-    SET(status_cond)
-    SET(status_then)
-    SET(status_else)
-
-    SET(status_current_name "cond")
-    foreach(arg ${ARGN})
-       if(arg STREQUAL "THEN")
-           SET(status_current_name "then")
-       elseif(arg STREQUAL "ELSE")
-           SET(status_current_name "else")
-       else()
-           LIST(APPEND status_${status_current_name} ${arg})
-       endif()
-    endforeach()
-
-    if(DEFINED status_cond)
-        SET(status_placeholder_length 32)
-        string(RANDOM LENGTH ${status_placeholder_length} ALPHABET " " status_placeholder)
-        string(LENGTH "${text}" status_text_length)
-        if (status_text_length LESS status_placeholder_length)
-            string(SUBSTRING "${text}${status_placeholder}" 0 ${status_placeholder_length} status_text)
-        elseif (DEFINED status_then OR DEFINED status_else)
-            message(STATUS "${text}")
-            SET(status_text "${status_placeholder}")
-        else()
-            SET(status_text "${text}")
-        endif()
+  set(status_cond)
+  set(status_then)
+  set(status_else)
+
+  set(status_current_name "cond")
+  foreach(arg ${ARGN})
+    if(arg STREQUAL "THEN")
+      set(status_current_name "then")
+    elseif(arg STREQUAL "ELSE")
+      set(status_current_name "else")
+    else()
+      list(APPEND status_${status_current_name} ${arg})
+    endif()
+  endforeach()
 
-        if (DEFINED status_then OR DEFINED status_else)
-            if(${status_cond})
-                string(REPLACE ";" " " status_then "${status_then}")
-                message(STATUS "${status_text}" "${status_then}")
-            else()
-                string(REPLACE ";" " " status_else "${status_else}")
-                message(STATUS "${status_text}" "${status_else}")
-            endif()
-        else()
-            string(REPLACE ";" " " status_cond "${status_cond}")
-            message(STATUS "${status_text}" "${status_cond}")
-        endif()
-     else()
-         message(STATUS "${text}")
-     endif()
+  if(DEFINED status_cond)
+    set(status_placeholder_length 32)
+    string(RANDOM LENGTH ${status_placeholder_length} ALPHABET " " status_placeholder)
+    string(LENGTH "${text}" status_text_length)
+    if(status_text_length LESS status_placeholder_length)
+      string(SUBSTRING "${text}${status_placeholder}" 0 ${status_placeholder_length} status_text)
+    elseif(DEFINED status_then OR DEFINED status_else)
+      message(STATUS "${text}")
+      set(status_text "${status_placeholder}")
+    else()
+      set(status_text "${text}")
+    endif()
+
+    if(DEFINED status_then OR DEFINED status_else)
+      if(${status_cond})
+        string(REPLACE ";" " " status_then "${status_then}")
+        message(STATUS "${status_text}" "${status_then}")
+      else()
+        string(REPLACE ";" " " status_else "${status_else}")
+        message(STATUS "${status_text}" "${status_else}")
+      endif()
+    else()
+      string(REPLACE ";" " " status_cond "${status_cond}")
+      message(STATUS "${status_text}" "${status_cond}")
+    endif()
+  else()
+    message(STATUS "${text}")
+  endif()
 endmacro()
 
+
 # splits cmake libraries list of format "general;item1;debug;item2;release;item3" to two lists
 macro(ocv_split_libs_list lst lstdbg lstopt)
-    set(${lstdbg} "")
-    set(${lstopt} "")
-    set(perv_keyword "")
-    foreach(word ${${lst}})
-        if(word STREQUAL "debug" OR word STREQUAL "optimized")
-            set(perv_keyword ${word})
-        elseif(word STREQUAL "general")
-            set(perv_keyword "")
-        elseif(perv_keyword STREQUAL "debug")
-            list(APPEND ${lstdbg} "${word}")
-            set(perv_keyword "")
-        elseif(perv_keyword STREQUAL "optimized")
-            list(APPEND ${lstopt} "${word}")
-            set(perv_keyword "")
-        else()
-            list(APPEND ${lstdbg} "${word}")
-            list(APPEND ${lstopt} "${word}")
-            set(perv_keyword "")
-        endif()
-    endforeach()
+  set(${lstdbg} "")
+  set(${lstopt} "")
+  set(perv_keyword "")
+  foreach(word ${${lst}})
+    if(word STREQUAL "debug" OR word STREQUAL "optimized")
+      set(perv_keyword ${word})
+    elseif(word STREQUAL "general")
+      set(perv_keyword "")
+    elseif(perv_keyword STREQUAL "debug")
+      list(APPEND ${lstdbg} "${word}")
+      set(perv_keyword "")
+    elseif(perv_keyword STREQUAL "optimized")
+      list(APPEND ${lstopt} "${word}")
+      set(perv_keyword "")
+    else()
+      list(APPEND ${lstdbg} "${word}")
+      list(APPEND ${lstopt} "${word}")
+      set(perv_keyword "")
+    endif()
+  endforeach()
 endmacro()
 
+
 # remove all matching elements from the list
 macro(ocv_list_filterout lst regex)
   foreach(item ${${lst}})
@@ -149,6 +177,7 @@ macro(ocv_list_filterout lst regex)
   endforeach()
 endmacro()
 
+
 # stable & safe duplicates removal macro
 macro(ocv_list_unique __lst)
   if(${__lst})
@@ -156,6 +185,7 @@ macro(ocv_list_unique __lst)
   endif()
 endmacro()
 
+
 # safe list reversal macro
 macro(ocv_list_reverse __lst)
   if(${__lst})
@@ -163,6 +193,7 @@ macro(ocv_list_reverse __lst)
   endif()
 endmacro()
 
+
 # safe list sorting macro
 macro(ocv_list_sort __lst)
   if(${__lst})
@@ -170,6 +201,7 @@ macro(ocv_list_sort __lst)
   endif()
 endmacro()
 
+
 # simple regex escaping routine (does not cover all cases!!!)
 macro(ocv_regex_escape var regex)
   string(REGEX REPLACE "([+.*^$])" "\\\\1" ${var} "${regex}")