$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: dgregor_at_[hidden]
Date: 2007-06-10 15:59:34
Author: dgregor
Date: 2007-06-10 15:59:33 EDT (Sun, 10 Jun 2007)
New Revision: 4520
URL: http://svn.boost.org/trac/boost/changeset/4520
Log:
- Introduce static/dynamic runtime variants
- Lots of tweaking to allow us to build Boost from Visual Studio
Text files modified: 
   sandbox-branches/boost-cmake/boost_1_34_0/CMakeLists.txt                      |     1                                         
   sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/BoostConfig.cmake |    33 +++++++++++++++++++++--                 
   sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/BoostCore.cmake   |    55 ++++++++++++++++++++++++++++++--------- 
   3 files changed, 71 insertions(+), 18 deletions(-)
Modified: sandbox-branches/boost-cmake/boost_1_34_0/CMakeLists.txt
==============================================================================
--- sandbox-branches/boost-cmake/boost_1_34_0/CMakeLists.txt	(original)
+++ sandbox-branches/boost-cmake/boost_1_34_0/CMakeLists.txt	2007-06-10 15:59:33 EDT (Sun, 10 Jun 2007)
@@ -75,7 +75,6 @@
 boost_add_default_variant(SINGLE_THREADED MULTI_THREADED)
 boost_add_default_variant(STATIC_RUNTIME DYNAMIC_RUNTIME)
 
-
 # Extra features used by some libraries
 boost_add_extra_variant(PYTHON_NODEBUG PYTHON_DEBUG)
 ##########################################################################
Modified: sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/BoostConfig.cmake
==============================================================================
--- sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/BoostConfig.cmake	(original)
+++ sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/BoostConfig.cmake	2007-06-10 15:59:33 EDT (Sun, 10 Jun 2007)
@@ -110,7 +110,32 @@
 endif(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
 
 # Static and dynamic runtime linking options
-if(MSVC)
-  set(RUNTIME_STATIC_LINK_FLAGS "/MT")
-  set(RUNTIME_DYNAMIC_LINK_FLAGS "/MD")
-endif(MSVC)
\ No newline at end of file
+#if(MSVC)
+#  set(STATIC_RUNTIME_COMPILE_FLAGS "/MT")
+#  set(DYNAMIC_RUNTIME_COMPILE_FLAGS "/MD")
+#endif(MSVC)
+
+# Setup DEBUG_COMPILE_FLAGS, RELEASE_COMPILE_FLAGS, DEBUG_LINK_FLAGS and
+# and RELEASE_LINK_FLAGS based on the CMake equivalents
+if(CMAKE_CXX_FLAGS_DEBUG)
+  set(DEBUG_COMPILE_FLAGS "${CMAKE_CXX_FLAGS_DEBUG}" CACHE STRING "Compilation flags for debug libraries")
+endif(CMAKE_CXX_FLAGS_DEBUG)
+if(CMAKE_CXX_FLAGS_RELEASE)
+  set(RELEASE_COMPILE_FLAGS "${CMAKE_CXX_FLAGS_RELEASE}" CACHE STRING "Compilation flags for release libraries")
+endif(CMAKE_CXX_FLAGS_RELEASE)
+if(CMAKE_SHARED_LINKER_FLAGS_DEBUG)
+  set(DEBUG_LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS_DEBUG}" CACHE STRING "Linker flags for debug libraries")
+endif(CMAKE_SHARED_LINKER_FLAGS_DEBUG)
+if(CMAKE_SHARED_LINKER_FLAGS_RELEASE)
+  set(RELEASE_LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}" CACHE STRING "Link flags for release libraries")
+endif(CMAKE_SHARED_LINKER_FLAGS_RELEASE)
+
+# For project file generators that have multiple configurations,
+# clear out the built-in C++ compiler and link flags for each of the 
+# configurations.
+foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES})
+  string(TOUPPER ${CONFIG} UCONFIG)
+  set(CMAKE_CXX_FLAGS_${UCONFIG} "" CACHE STRING "Unused by Boost" FORCE)
+  set(CMAKE_SHARED_LINKER_FLAGS_${UCONFIG} "" CACHE STRING "Unused by Boost" FORCE)
+  set(CMAKE_MODULE_LINKER_FLAGS_${UCONFIG} "" CACHE STRING "Unused by Boost" FORCE)
+endforeach(CONFIG ${CMAKE_CONFIGURATION_TYPES})
Modified: sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/BoostCore.cmake
==============================================================================
--- sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/BoostCore.cmake	(original)
+++ sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/BoostCore.cmake	2007-06-10 15:59:33 EDT (Sun, 10 Jun 2007)
@@ -150,12 +150,19 @@
 
   # Linking statically to the runtime library
   list_contains(VARIANT_IS_STATIC_RUNTIME STATIC_RUNTIME ${ARGN})
-  if (VARIANT_IS_STATIC_RUNTIME)
+  if (VARIANT_IS_STATIC_RUNTIME)  
     set(VARIANT_TARGET_NAME "${VARIANT_TARGET_NAME}-staticrt")
     set(VARIANT_ABI_TAG "${VARIANT_ABI_TAG}s")
   endif (VARIANT_IS_STATIC_RUNTIME)
   
-  # TODO: Using debug versions of the standard/runtime support libs
+  # Using the debug version of the runtime library.
+  # With Visual C++, this comes automatically with debug
+  if (MSVC)
+    list_contains(VARIANT_IS_DEBUG DEBUG ${ARGN})
+    if (VARIANT_IS_DEBUG)
+      set(VARIANT_ABI_TAG "${VARIANT_ABI_TAG}g")
+    endif (VARIANT_IS_DEBUG)
+  endif (MSVC)
 
   # Add -pydebug for debug builds of Python
   list_contains(VARIANT_IS_PYDEBUG PYTHON_DEBUG ${ARGN})
@@ -164,7 +171,6 @@
     set(VARIANT_ABI_TAG "${VARIANT_ABI_TAG}y")
   endif (VARIANT_IS_PYDEBUG)
 
-  # TODO: using debug build of Python
   # TODO: STLport rather than default library
   # TODO: STLport's deprecated iostreams
 
@@ -240,17 +246,40 @@
     set(THIS_VARIANT_LINK_LIBS ${THIS_VARIANT_LINK_LIBS} ${THIS_LIB_${ARG}_LINK_LIBS} ${${ARG}_LINK_LIBS})
   endforeach(ARG ${ARGN})
 
-  if (THIS_VARIANT_OKAY)
-    # Use the appropriate C++ flags for debug vs. release variants
-    list_contains(THIS_LIB_IS_DEBUG "DEBUG" ${ARGN})
-    if (THIS_LIB_IS_DEBUG)
-      set(THIS_VARIANT_COMPILE_FLAGS "${CMAKE_CXX_FLAGS_DEBUG} ${THIS_VARIANT_COMPILE_FLAGS}")
-      set(THIS_VARIANT_LINK_FLAGS "${CMAKE_LINK_FLAGS_DEBUG} ${THIS_VARIANT_LINK_FLAGS}")
-    else (THIS_LIB_IS_DEBUG)
-      set(THIS_VARIANT_COMPILE_FLAGS "${CMAKE_CXX_FLAGS_RELEASE} ${THIS_VARIANT_COMPILE_FLAGS}")
-      set(THIS_VARIANT_LINK_FLAGS "${CMAKE_LINK_FLAGS_RELEASE} ${THIS_VARIANT_LINK_FLAGS}")
-    endif (THIS_LIB_IS_DEBUG)
+  # Don't build a shared library against a static run-time
+  list_contains(IS_SHARED SHARED ${ARGN})
+  list_contains(IS_STATIC_RUNTIME STATIC_RUNTIME ${ARGN})
+  if (IS_SHARED AND IS_STATIC_RUNTIME)
+    set(THIS_VARIANT_OKAY FALSE)
+  endif (IS_SHARED AND IS_STATIC_RUNTIME)
+  
+  # With Visual C++, the dynamic runtime is multi-threaded only
+  list_contains(IS_DYNAMIC_RUNTIME DYNAMIC_RUNTIME ${ARGN})
+  list_contains(IS_SINGLE_THREADED SINGLE_THREADED ${ARGN})
+  if (IS_DYNAMIC_RUNTIME AND IS_SINGLE_THREADED)
+    set(THIS_VARIANT_OKAY FALSE)
+  endif (IS_DYNAMIC_RUNTIME AND IS_SINGLE_THREADED) 
+ 
+  # Visual C++-specific runtime library flags
+  if(MSVC)
+    list_contains(IS_STATIC_RUNTIME STATIC_RUNTIME ${ARGN})
+    list_contains(IS_DEBUG DEBUG ${ARGN})
+    if(IS_DEBUG)
+      if(IS_STATIC_RUNTIME)
+        set(THIS_VARIANT_COMPILE_FLAGS "/MTd ${THIS_VARIANT_COMPILE_FLAGS}")
+      else(IS_STATIC_RUNTIME)
+        set(THIS_VARIANT_COMPILE_FLAGS "/MDd ${THIS_VARIANT_COMPILE_FLAGS}")
+      endif(IS_STATIC_RUNTIME)       
+    else(IS_DEBUG)
+      if(IS_STATIC_RUNTIME)
+        set(THIS_VARIANT_COMPILE_FLAGS "/MT ${THIS_VARIANT_COMPILE_FLAGS}")
+      else(IS_STATIC_RUNTIME)
+        set(THIS_VARIANT_COMPILE_FLAGS "/MD ${THIS_VARIANT_COMPILE_FLAGS}")
+      endif(IS_STATIC_RUNTIME)       
+    endif(IS_DEBUG)
+  endif(MSVC)
 
+  if (THIS_VARIANT_OKAY)
     # Determine the suffix for this library target
     boost_library_variant_target_name(${ARGN})
     set(VARIANT_LIBNAME "${LIBNAME}${VARIANT_TARGET_NAME}")