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)
# ----------------------------------------------------------------------------
# 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 )
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
# ----------------------------------------------------------------------------
set(OPENCV_DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
endif()
+if(CMAKE_VERBOSE)
+ set(CMAKE_VERBOSE_MAKEFILE 1)
+endif()
+
# ----------------------------------------------------------------------------
# Path for build/platform -specific headers
# 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()
# 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:
# 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}})
endforeach()
endmacro()
+
# stable & safe duplicates removal macro
macro(ocv_list_unique __lst)
if(${__lst})
endif()
endmacro()
+
# safe list reversal macro
macro(ocv_list_reverse __lst)
if(${__lst})
endif()
endmacro()
+
# safe list sorting macro
macro(ocv_list_sort __lst)
if(${__lst})
endif()
endmacro()
+
# simple regex escaping routine (does not cover all cases!!!)
macro(ocv_regex_escape var regex)
string(REGEX REPLACE "([+.*^$])" "\\\\1" ${var} "${regex}")