From: Andrey Kamaev Date: Wed, 22 Feb 2012 14:04:59 +0000 (+0000) Subject: Small refactoring of OpenCV cmake options X-Git-Tag: accepted/tizen/6.0/unified/20201030.111113~5482 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4ac407e76acda3ae0b2815287c06bb2a5674bacc;p=platform%2Fupstream%2Fopencv.git Small refactoring of OpenCV cmake options --- diff --git a/CMakeLists.txt b/CMakeLists.txt index e5c40ce..5919697 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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 diff --git a/cmake/OpenCVUtils.cmake b/cmake/OpenCVUtils.cmake index 7dfe938..397254a 100644 --- a/cmake/OpenCVUtils.cmake +++ b/cmake/OpenCVUtils.cmake @@ -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( "help string describing option" [IF ]) +# option( "help string describing the option" [IF ]) 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( [ ...]) # status( THEN ELSE ) 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}")