]> OCCT Git - occt-copy.git/commitdiff
0029039: Configuration - allow to choose and to have separate install directory... CR29039_710
authorski <ski@opencascade.com>
Wed, 23 Aug 2017 09:35:34 +0000 (12:35 +0300)
committerski <ski@opencascade.com>
Thu, 24 Aug 2017 09:38:14 +0000 (12:38 +0300)
Added option to choose RTL type using Cmake GUI.

CMakeLists.txt
adm/cmake/occt_defs_flags.cmake
adm/cmake/occt_macros.cmake
adm/cmake/vardescr.cmake

index 6c2510ee1b6a22bfcd0131b94fb938c6dd058531..7674685a8c895cc7568f306dbf1c6f09aceacf2e 100644 (file)
@@ -52,6 +52,14 @@ set_property (GLOBAL PROPERTY OCC_VERSION_MAINTENANCE ${OCC_VERSION_MAINTENANCE}
 
 set (INSTALL_TEST_CASES OFF CACHE BOOL "${INSTALL_TEST_CASES_DESCR}")
 
+if (MSVC)
+  # overwrite type of used RTL libraries
+  if (NOT BUILD_CHANGE_USED_RTL_TYPE)
+    set (BUILD_CHANGE_USED_RTL_TYPE "default" CACHE STRING "${BUILD_CHANGE_USED_RTL_TYPE_DESCR}" FORCE)
+    set_property(CACHE BUILD_CHANGE_USED_RTL_TYPE PROPERTY STRINGS "default" "static/release RTL" "static/debug RTL" "dynamic/release RTL" "dynamic/debug RTL")
+  endif()
+endif()
+
 # Regeneration of OCCT resource files
 set (BUILD_RESOURCES OFF CACHE BOOL "${BUILD_RESOURCES_DESCR}")
 
@@ -201,6 +209,26 @@ if (NOT DEFINED INSTALL_DIR_LIB)
   endif()
 endif()
 
+if (MSVC)
+  if (NOT DEFINED BUILD_CHANGE_USED_RTL_TYPE_PREV)
+    set (BUILD_CHANGE_USED_RTL_TYPE_PREV "${BUILD_CHANGE_USED_RTL_TYPE}" CACHE INTERNAL "" FORCE)
+  elseif (NOT "${BUILD_CHANGE_USED_RTL_TYPE_PREV}" STREQUAL "${BUILD_CHANGE_USED_RTL_TYPE}")
+    if ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "static/release RTL")
+      set (INSTALL_DIR_BIN "${OS_WITH_BIT}/${COMPILER}/release_rtl/static_rtl/bin" CACHE PATH "${INSTALL_DIR_BIN_DESCR}" FORCE)
+      set (INSTALL_DIR_LIB "${OS_WITH_BIT}/${COMPILER}/release_rtl/static_rtl/lib" CACHE PATH "${INSTALL_DIR_LIB_DESCR}" FORCE)
+    elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "static/debug RTL")
+      set (INSTALL_DIR_BIN "${OS_WITH_BIT}/${COMPILER}/debug_rtl/static_rtl/bin" CACHE PATH "${INSTALL_DIR_BIN_DESCR}" FORCE)
+      set (INSTALL_DIR_LIB "${OS_WITH_BIT}/${COMPILER}/debug_rtl/static_rtl/lib" CACHE PATH "${INSTALL_DIR_LIB_DESCR}" FORCE)
+    elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "dynamic/release RTL")
+      set (INSTALL_DIR_BIN "${OS_WITH_BIT}/${COMPILER}/release_rtl/dynamic_rtl/bin" CACHE PATH "${INSTALL_DIR_BIN_DESCR}" FORCE)
+      set (INSTALL_DIR_LIB "${OS_WITH_BIT}/${COMPILER}/release_rtl/dynamic_rtl/lib" CACHE PATH "${INSTALL_DIR_LIB_DESCR}" FORCE)
+    elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "dynamic/debug RTL")
+      set (INSTALL_DIR_BIN "${OS_WITH_BIT}/${COMPILER}/debug_rtl/dynamic_rtl/bin" CACHE PATH "${INSTALL_DIR_BIN_DESCR}" FORCE)
+      set (INSTALL_DIR_LIB "${OS_WITH_BIT}/${COMPILER}/debug_rtl/dynamic_rtl/lib" CACHE PATH "${INSTALL_DIR_LIB_DESCR}" FORCE)
+    endif()
+  endif()
+endif()
+
 # OCCT headers: <prefix>/inc for windows,
 #               <prefix>/include/opencascade-7.0.0 for unix
 if (NOT DEFINED INSTALL_DIR_INCLUDE)
index 65fff6e721151e5dba546c5392eeb36ea621f519..2db120934471a1830cee827adbbeb1c31c873fff 100644 (file)
@@ -134,3 +134,76 @@ endif()
 
 set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNo_Exception")
 set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNo_Exception")
+
+# unset unused configurations variables and update CACHE variables
+get_cmake_property(ALL_CACHE_VARIABLES CACHE_VARIABLES)
+string (REGEX MATCHALL "(^|;)CMAKE_[A-Z_]+_FLAGS[^;]*" CACHE_VARIABLES_FLAGS "${ALL_CACHE_VARIABLES}")
+foreach (CACHE_FLAG ${CACHE_VARIABLES_FLAGS})
+  if (NOT "x${${CACHE_FLAG}}" STREQUAL "x")
+    OCCT_REMOVE_DUPLICATES_SUBSTRING(${${CACHE_FLAG}} ${CACHE_FLAG})
+  endif()
+  string (REGEX MATCH "CMAKE_[A-Z_]+_FLAGS_([^;]+)" CONFIGURATION_NAME "${CACHE_FLAG}")
+  string (TOLOWER "${CMAKE_MATCH_1}" CMAKE_MATCH_1)
+  set (ISFOUND OFF)
+  if (NOT "x${CMAKE_MATCH_1}" STREQUAL "x")
+    foreach (conf ${CMAKE_CONFIGURATION_TYPES})
+      string (TOLOWER "${conf}" conf)
+      if ( "${conf}" STREQUAL "${CMAKE_MATCH_1}" )
+        set (ISFOUND ON)
+      endif()
+    endforeach()
+    if (NOT ISFOUND AND MSVC)
+      unset("${CACHE_FLAG}" CACHE)
+    else()
+      set (${CACHE_FLAG} "${${CACHE_FLAG}}" CACHE STRING "" FORCE)
+    endif()
+  else()
+    set (${CACHE_FLAG} "${${CACHE_FLAG}}" CACHE STRING "" FORCE)
+  endif()
+endforeach()
+
+if (MSVC)
+  # Update CRT defines if BUILD_CHANGE_USED_RTL_TYPE variable was changed
+  if (NOT "${BUILD_CHANGE_USED_RTL_TYPE_PREV}" STREQUAL "${BUILD_CHANGE_USED_RTL_TYPE}")
+    set (BUILD_CHANGE_USED_RTL_TYPE_PREV "${BUILD_CHANGE_USED_RTL_TYPE}" CACHE INTERNAL "" FORCE)
+
+    get_cmake_property(ALL_CACHE_VARIABLES CACHE_VARIABLES)
+    string (REGEX MATCHALL "(^|;)CMAKE_C[X]*_FLAGS[^;]*" CACHE_VARIABLES_C_FLAGS "${ALL_CACHE_VARIABLES}")
+
+    foreach(CMAKE_C_FLAG ${CACHE_VARIABLES_C_FLAGS})
+      OCCT_REMOVE_CRL_DEFINES (${CMAKE_C_FLAG})
+    endforeach()
+
+    if ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "static/release RTL")
+      message (STATUS "Info. Release Static RTLs are used.")
+      set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MT")
+      set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MT")
+    elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "static/debug RTL")
+      message (STATUS "Info. Debug Static RTLs are used.")
+      set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MTd")
+      set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MTd")
+    elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "dynamic/release RTL")
+      message (STATUS "Info. Release Dynamic RTLs are used.")
+      set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MD")
+      set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MD")
+    elseif ("${BUILD_CHANGE_USED_RTL_TYPE}" STREQUAL "dynamic/debug RTL")
+      message (STATUS "Info. Debug Dynamic RTLs are used.")
+      set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MDd")
+      set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MDd")
+    else()
+      string (REGEX MATCHALL "(^|;)CMAKE_C[X]*_FLAGS_[^;]+" CACHE_VARIABLES_C_FLAGS_WITH_CONF "${ALL_CACHE_VARIABLES}")
+      foreach(CMAKE_C_FLAG ${CACHE_VARIABLES_C_FLAGS_WITH_CONF})
+        string (REGEX MATCH "CMAKE_C[X]*_FLAGS_([^;]+)" CONFIGURATION_NAME "${CMAKE_C_FLAG}")
+        if ( "x${CMAKE_MATCH_1}" STREQUAL "xDEBUG")
+          set (${CMAKE_C_FLAG} "${${CMAKE_C_FLAG}} /MDd")
+        else()
+          set (${CMAKE_C_FLAG} "${${CMAKE_C_FLAG}} /MD")
+        endif()
+      endforeach()
+    endif()
+
+    foreach(CMAKE_C_FLAG ${CACHE_VARIABLES_C_FLAGS})
+      set (${CMAKE_C_FLAG} "${${CMAKE_C_FLAG}}" CACHE STRING "" FORCE)
+    endforeach()
+  endif()
+endif()
index 1381625eb1e822413cb212996c4c6625dc1ea42b..2a64aa3f7a3e9af6541bc21ef2f46281e71825e8 100644 (file)
@@ -602,3 +602,17 @@ macro (OCCT_CREATE_SYMLINK_TO_FILE LIBRARY_NAME LINK_NAME)
     ")
   endif()
 endmacro()
+
+macro (OCCT_REMOVE_CRL_DEFINES VARIABLE_NAME)
+  set( CompilerFlags /MDd /MTd /MD /MT )
+  foreach(CompilerFlag ${CompilerFlags})
+    string(REPLACE "${CompilerFlag}" "" ${VARIABLE_NAME} "${${VARIABLE_NAME}}")
+  endforeach()
+endmacro()
+
+function(OCCT_REMOVE_DUPLICATES_SUBSTRING INPUT_STRING OUTPUT_STRING)
+  separate_arguments(INPUT_STRING)
+  list(REMOVE_DUPLICATES INPUT_STRING)
+  string(REPLACE ";" " " INPUT_STRING "${INPUT_STRING}")
+  set(${OUTPUT_STRING} "${INPUT_STRING}" PARENT_SCOPE)
+endfunction()
index bf578f87e566d0ca04e9d027c3283ce472265720..a1ba72564b1c455b6b6b42ad908d5c1e22b07505 100644 (file)
@@ -122,6 +122,10 @@ leads to automatic search of Doxygen binaries. Building of it will be call Doxyg
 to generate the documentation in HTML format. The documentation will be available in the
 installation directory (overview.bat script) if INSTALL_DOC_Overview variable is checked")
 
+set (BUILD_CHANGE_USED_RTL_TYPE_DESCR
+"Indicates whether a multithreaded module is a DLL or static and specifies retail or debug versions of the run-time library.
+In case of default value define /MDd will be used for Debug configuration and define /MD will be used for other configurations.")
+
 set (3RDPARTY_DIR_DESCR
 "The root directory where all required third-party products will be searched. If a
 third-party product have been found - corresponding CMake variables will be specified