$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: dgregor_at_[hidden]
Date: 2008-04-02 22:32:32
Author: dgregor
Date: 2008-04-02 22:32:31 EDT (Wed, 02 Apr 2008)
New Revision: 44009
URL: http://svn.boost.org/trac/boost/changeset/44009
Log:
Allow one to explicitly describe inter-library dependencies
Text files modified: 
   branches/CMake/release/libs/filesystem/CMakeLists.txt    |     1                                         
   branches/CMake/release/libs/mpi/CMakeLists.txt           |     1                                         
   branches/CMake/release/libs/wave/CMakeLists.txt          |     7 +----                                   
   branches/CMake/release/tools/build/CMake/BoostCore.cmake |    43 +++++++++++++++++++++++++++++++-------- 
   4 files changed, 38 insertions(+), 14 deletions(-)
Modified: branches/CMake/release/libs/filesystem/CMakeLists.txt
==============================================================================
--- branches/CMake/release/libs/filesystem/CMakeLists.txt	(original)
+++ branches/CMake/release/libs/filesystem/CMakeLists.txt	2008-04-02 22:32:31 EDT (Wed, 02 Apr 2008)
@@ -2,6 +2,7 @@
   Filesystem 
   SRCDIRS src 
   TESTDIRS test
+  DEPENDS system
   )
 
 
Modified: branches/CMake/release/libs/mpi/CMakeLists.txt
==============================================================================
--- branches/CMake/release/libs/mpi/CMakeLists.txt	(original)
+++ branches/CMake/release/libs/mpi/CMakeLists.txt	2008-04-02 22:32:31 EDT (Wed, 02 Apr 2008)
@@ -5,6 +5,7 @@
     MPI
     SRCDIRS src
     TESTDIRS test
+    DEPENDS serialization
     )
 endif(MPI_FOUND)
 
Modified: branches/CMake/release/libs/wave/CMakeLists.txt
==============================================================================
--- branches/CMake/release/libs/wave/CMakeLists.txt	(original)
+++ branches/CMake/release/libs/wave/CMakeLists.txt	2008-04-02 22:32:31 EDT (Wed, 02 Apr 2008)
@@ -2,8 +2,5 @@
   Wave 
   SRCDIRS src 
   TESTDIRS test
-  )
-
-
-
-
+  DEPENDS filesystem thread date_time
+  )
\ No newline at end of file
Modified: branches/CMake/release/tools/build/CMake/BoostCore.cmake
==============================================================================
--- branches/CMake/release/tools/build/CMake/BoostCore.cmake	(original)
+++ branches/CMake/release/tools/build/CMake/BoostCore.cmake	2008-04-02 22:32:31 EDT (Wed, 02 Apr 2008)
@@ -1,7 +1,7 @@
 ##########################################################################
 # Core Functionality for Boost                                           #
 ##########################################################################
-# Copyright (C) 2007 Douglas Gregor <doug.gregor_at_[hidden]>              #
+# Copyright (C) 2007-2008 Douglas Gregor <doug.gregor_at_[hidden]>         #
 # Copyright (C) 2007 Troy Straszheim                                     #
 #                                                                        #
 # Distributed under the Boost Software License, Version 1.0.             #
@@ -23,13 +23,17 @@
 #
 #   boost_library_project(libname
 #                         [SRCDIRS srcdir1 srcdir2 ...] 
-#                         [TESTDIRS testdir1 testdir2 ...])
+#                         [TESTDIRS testdir1 testdir2 ...]
+#                         [DEPENDS lib1 lib2 ...])
 #
 # where libname is the name of the library (e.g., Python, or
 # Filesystem), srcdir1, srcdir2, etc, are subdirectories containing
 # library sources (for Boost libraries that build actual library
 # binaries), and testdir1, testdir2, etc, are subdirectories
-# containing regression tests.
+# containing regression tests. DEPENDS lists the names of the other
+# Boost libraries that this library depends on. If the dependencies
+# are not satisfied (e.g., because the library isn't present or its
+# build is turned off), this library won't be built.
 #
 # For libraries that build actual library binaries, this macro adds a
 # option BUILD_BOOST_LIBNAME (which defaults to ON). When the option
@@ -50,11 +54,21 @@
 #     )
 macro(boost_library_project LIBNAME)
   parse_arguments(THIS_PROJECT
-    "SRCDIRS;TESTDIRS"
-    ""
+    "SRCDIRS;TESTDIRS;DEPENDS"
+    "MODULAR"
     ${ARGN}
     )
 
+  set(THIS_PROJECT_OKAY ON)
+  set(THIS_PROJECT_FAILED_DEPS "")
+  foreach(DEP ${THIS_PROJECT_DEPENDS})
+    string(TOUPPER "BUILD_BOOST_${DEP}" BOOST_LIB_DEP)
+    if (NOT ${BOOST_LIB_DEP})
+      set(THIS_PROJECT_OKAY OFF)
+      set(THIS_PROJECT_FAILED_DEPS "${THIS_PROJECT_FAILED_DEPS}  ${DEP}\n")
+    endif (NOT ${BOOST_LIB_DEP})
+  endforeach(DEP)
+
   string(TOUPPER "BUILD_BOOST_${LIBNAME}" BOOST_BUILD_LIB_OPTION)
   if (THIS_PROJECT_SRCDIRS)
     # This Boost library has source directories, so provide an option
@@ -62,12 +76,23 @@
     # the library.
     option(${BOOST_BUILD_LIB_OPTION} 
       "Build Boost.${LIBNAME} (prefer make targets, not this, to build individual libs)" 
-      ON)
+      ${THIS_PROJECT_OKAY})
+
+    if (NOT THIS_PROJECT_OKAY)
+      if (${BOOST_BUILD_LIB_OPTION})
+        # The user explicitly turned on this library in a prior
+        # iteration, but it can no longer be built because one of the
+        # dependencies was turned off. Force this option off and
+        # complain about it.
+        set(${BOOST_BUILD_LIB_OPTION} OFF
+          CACHE BOOL "Build Boost.${LIBNAME} (prefer make targets, not this, to build individual libs)" FORCE)
+        message(SEND_ERROR "Cannot build Boost.${LIBNAME} due to missing library dependencies:\n${THIS_PROJECT_FAILED_DEPS}")
+      endif (${BOOST_BUILD_LIB_OPTION})
+    endif (NOT THIS_PROJECT_OKAY)
   else (THIS_PROJECT_SRCDIRS)
     # This Boost library has no source directories, and therefore does
-    # not require building. Always enable it (but don't make it an
-    # option in the cache).
-    set(${BOOST_BUILD_LIB_OPTION} ON)
+    # not require building. Enable it when its dependencies are satisfied. 
+    set(${BOOST_BUILD_LIB_OPTION} ${THIS_PROJECT_OKAY})
   endif (THIS_PROJECT_SRCDIRS)
 
   if(${BOOST_BUILD_LIB_OPTION})