$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: dgregor_at_[hidden]
Date: 2008-04-03 22:14:14
Author: dgregor
Date: 2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
New Revision: 44027
URL: http://svn.boost.org/trac/boost/changeset/44027
Log:
Describe inter-library dependency information, and use the reverse topological ordering of libraries based on those dependencies to include libraries in a logical order
Added:
   branches/CMake/release/libs/filesystem/filesystem.cmake   (contents, props changed)
   branches/CMake/release/libs/mpi/mpi.cmake   (contents, props changed)
   branches/CMake/release/libs/python/python.cmake   (contents, props changed)
   branches/CMake/release/libs/wave/wave.cmake   (contents, props changed)
Text files modified: 
   branches/CMake/release/CMakeLists.txt                              |    16 ++++++-                                 
   branches/CMake/release/libs/CMakeLists.txt                         |    24 ++++++++----                            
   branches/CMake/release/libs/filesystem/CMakeLists.txt              |     1                                         
   branches/CMake/release/libs/mpi/CMakeLists.txt                     |     1                                         
   branches/CMake/release/libs/numeric/conversion/test/CMakeLists.txt |     2                                         
   branches/CMake/release/libs/numeric/ublas/test/CMakeLists.txt      |    12 +++---                                  
   branches/CMake/release/libs/python/CMakeLists.txt                  |     1                                         
   branches/CMake/release/libs/serialization/test/CMakeLists.txt      |     2                                         
   branches/CMake/release/libs/wave/CMakeLists.txt                    |     1                                         
   branches/CMake/release/tools/build/CMake/BoostCore.cmake           |    80 +++++++++++++++++++++++-----------------
   branches/CMake/release/tools/build/CMake/BoostTesting.cmake        |     8 ++++                                    
   branches/CMake/release/tools/build/CMake/BoostUtils.cmake          |     3 +                                       
   12 files changed, 94 insertions(+), 57 deletions(-)
Modified: branches/CMake/release/CMakeLists.txt
==============================================================================
--- branches/CMake/release/CMakeLists.txt	(original)
+++ branches/CMake/release/CMakeLists.txt	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -98,6 +98,11 @@
         DESTINATION ${BOOST_HEADER_DIR}
         PATTERN "CVS" EXCLUDE
         REGEX ".svn" EXCLUDE)
+if (NOT TEST_INSTALLED_TREE)
+  # If I don't have if around this, I get a seg fault
+  # install(EXPORT boost-targets DESTINATION "lib/Boost${BOOST_VERSION}")
+endif (NOT TEST_INSTALLED_TREE)
+
 ##########################################################################
 
 ##########################################################################
@@ -147,9 +152,14 @@
 ##########################################################################
 # Building Boost libraries                                               #
 ##########################################################################
-# Always include the Boost source directory, so that we can find
-# include files in boost/
-include_directories(${Boost_SOURCE_DIR})
+# Always include the directory where Boost's include files will be.
+if (TEST_INSTALLED_TREE)
+  # Use the headers from the installation directory
+  include_directories("${CMAKE_INSTALL_PREFIX}/${BOOST_HEADER_DIR}")
+else (TEST_INSTALLED_TREE)
+  # Use the headers directly from the Boost source tree (in boost/)
+  include_directories(${Boost_SOURCE_DIR})
+endif (TEST_INSTALLED_TREE)
 
 # Put the libaries and binaries that get built into directories at the
 # top of the build tree rather than in hard-to-find leaf
Modified: branches/CMake/release/libs/CMakeLists.txt
==============================================================================
--- branches/CMake/release/libs/CMakeLists.txt	(original)
+++ branches/CMake/release/libs/CMakeLists.txt	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -3,10 +3,9 @@
 # have CMakeLists.txt files.
 
 # return a list of directories that we should add_subdirectory()
-macro(BOOST_COLLECT_SUBPROJECT_DIRECTORY_NAMES varname)
+macro(BOOST_COLLECT_SUBPROJECT_DIRECTORY_NAMES varname filename)
   file(GLOB BOOST_LIBRARY_CMAKE_FILES 
-    RELATIVE "${CMAKE_SOURCE_DIR}/libs" "*/CMakeLists.txt")
-  MESSAGE(STATUS "Scanning subdirectories:")
+    RELATIVE "${CMAKE_SOURCE_DIR}/libs" "*/${filename}")
   foreach(BOOST_LIB_CMAKE_FILE ${BOOST_LIBRARY_CMAKE_FILES})
     get_filename_component(BOOST_LIB_DIR ${BOOST_LIB_CMAKE_FILE} PATH)
     set(${varname} ${${varname}} ${BOOST_LIB_DIR})
@@ -20,10 +19,19 @@
   endforeach(subdir ${ARGN})
 endmacro(ADD_SUBDIRECTORIES prefix)
 
-boost_collect_subproject_directory_names(BOOST_SUBPROJECT_DIRS)
-list(SORT BOOST_SUBPROJECT_DIRS)
-add_subdirectories(" + " ${BOOST_SUBPROJECT_DIRS})
+# Find all of the subdirectories with .cmake files in them. These are
+# the libraries with dependencies.
+boost_collect_subproject_directory_names(BOOST_MODULE_DIRS "*.cmake")
+foreach(subdir ${BOOST_MODULE_DIRS})
+  include("${CMAKE_SOURCE_DIR}/libs/${subdir}/${subdir}.cmake")
+endforeach(subdir)
+
+# Find all of the subdirectories with CMakeLists.txt files in
+# them. This contains all of the Boost libraries.
+boost_collect_subproject_directory_names(BOOST_SUBPROJECT_DIRS "CMakeLists.txt")
 
-# Compute the topological ordering of Boost projects
+# Add all of the Boost projects in reverse topological order, so that
+# a library's dependencies show up before the library itself.
+list(SORT BOOST_SUBPROJECT_DIRS)
 topological_sort(BOOST_SUBPROJECT_DIRS BOOST_ _DEPENDS)
-message(STATUS "${BOOST_SUBPROJECT_DIRS}")
+add_subdirectories(" + " ${BOOST_SUBPROJECT_DIRS})
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-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -2,7 +2,6 @@
   Filesystem 
   SRCDIRS src 
   TESTDIRS test
-  DEPENDS system
   MODULAR
   )
 
Added: branches/CMake/release/libs/filesystem/filesystem.cmake
==============================================================================
--- (empty file)
+++ branches/CMake/release/libs/filesystem/filesystem.cmake	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -0,0 +1 @@
+boost_module(Filesystem DEPENDS system)
\ No newline at end of file
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-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -5,7 +5,6 @@
     MPI
     SRCDIRS src
     TESTDIRS test
-    DEPENDS serialization
     )
 endif(MPI_FOUND)
 
Added: branches/CMake/release/libs/mpi/mpi.cmake
==============================================================================
--- (empty file)
+++ branches/CMake/release/libs/mpi/mpi.cmake	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -0,0 +1 @@
+boost_module(MPI DEPENDS serialization)
Modified: branches/CMake/release/libs/numeric/conversion/test/CMakeLists.txt
==============================================================================
--- branches/CMake/release/libs/numeric/conversion/test/CMakeLists.txt	(original)
+++ branches/CMake/release/libs/numeric/conversion/test/CMakeLists.txt	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -2,5 +2,5 @@
 boost_test_run(traits_test)
 boost_test_run(converter_test)
 boost_test_run(udt_support_test)
-boost_test_run(numeric_cast_test)
+boost_test_run(numeric_conv_cast_test numeric_cast_test.cpp)
 boost_test_run(udt_example_0)
Modified: branches/CMake/release/libs/numeric/ublas/test/CMakeLists.txt
==============================================================================
--- branches/CMake/release/libs/numeric/ublas/test/CMakeLists.txt	(original)
+++ branches/CMake/release/libs/numeric/ublas/test/CMakeLists.txt	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -20,27 +20,27 @@
 add_definitions(-DBOOST_UBLAS_NO_EXCEPTIONS)
 # TODO: <toolset>vacpp:<define>"BOOST_UBLAS_NO_ELEMENT_PROXIES"
 
-boost_test_run(test1
+boost_test_run(ublas_test1
   test1.cpp test11.cpp test12.cpp test13.cpp
   COMPILE_FLAGS "${UBLAS_TESTSET_DEFINES}")
 
-boost_test_run(test2
+boost_test_run(ublas_test2
   test2.cpp test21.cpp test22.cpp test23.cpp
   COMPILE_FLAGS "${UBLAS_TESTSET_DEFINES}")
 
-boost_test_run(test3
+boost_test_run(ublas_test3
   test3.cpp test31.cpp test32.cpp test33.cpp
   COMPILE_FLAGS "${UBLAS_TESTSET_SPARSE_DEFINES}")
 
-boost_test_run(test4
+boost_test_run(ublas_test4
   test4.cpp test42.cpp test43.cpp
   COMPILE_FLAGS "${UBLAS_TESTSET_DEFINES}")
 
-boost_test_run(test5
+boost_test_run(ublas_test5
   test5.cpp test52.cpp test53.cpp
   COMPILE_FLAGS "${UBLAS_TESTSET_DEFINES}")
 
-boost_test_run(test6
+boost_test_run(ublas_test6
   test6.cpp test62.cpp test63.cpp
   COMPILE_FLAGS "${UBLAS_TESTSET_DEFINES}")
 
Modified: branches/CMake/release/libs/python/CMakeLists.txt
==============================================================================
--- branches/CMake/release/libs/python/CMakeLists.txt	(original)
+++ branches/CMake/release/libs/python/CMakeLists.txt	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -62,6 +62,5 @@
     Python
     SRCDIRS src
     TESTDIRS test
-    DEPENDS graph
     )
 endif (PYTHON_LIBRARIES)
Added: branches/CMake/release/libs/python/python.cmake
==============================================================================
--- (empty file)
+++ branches/CMake/release/libs/python/python.cmake	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -0,0 +1 @@
+boost_module(Python DEPENDS graph)
Modified: branches/CMake/release/libs/serialization/test/CMakeLists.txt
==============================================================================
--- branches/CMake/release/libs/serialization/test/CMakeLists.txt	(original)
+++ branches/CMake/release/libs/serialization/test/CMakeLists.txt	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -128,7 +128,7 @@
 serialization_test_allarchives(test_shared_ptr_132)
 serialization_test_allarchives(test_polymorphic POLYMORPHIC 
   test_polymorphic.cpp test_polymorphic_A.cpp)
-serialization_test(test_iterators NO_LIBS)
+serialization_test(test_serialization_iterators test_iterators.cpp NO_LIBS)
 serialization_test(test_iterators_base64 NO_LIBS)
 serialization_test(test_inclusion NO_LIBS)
 serialization_test(test_private_ctor)
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-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -2,5 +2,4 @@
   Wave 
   SRCDIRS src 
   TESTDIRS test
-  DEPENDS filesystem thread date_time
   )
\ No newline at end of file
Added: branches/CMake/release/libs/wave/wave.cmake
==============================================================================
--- (empty file)
+++ branches/CMake/release/libs/wave/wave.cmake	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -0,0 +1 @@
+boost_module(Wave 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-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -60,14 +60,15 @@
 #     )
 macro(boost_library_project LIBNAME)
   parse_arguments(THIS_PROJECT
-    "SRCDIRS;TESTDIRS;DEPENDS"
+    "SRCDIRS;TESTDIRS"
     "MODULAR"
     ${ARGN}
     )
 
   set(THIS_PROJECT_OKAY ON)
+  string(TOUPPER "BOOST_${LIBNAME}_DEPENDS" THIS_PROJECT_DEPENDS)
   set(THIS_PROJECT_FAILED_DEPS "")
-  foreach(DEP ${THIS_PROJECT_DEPENDS})
+  foreach(DEP ${${THIS_PROJECT_DEPENDS}})
     string(TOUPPER "BUILD_BOOST_${DEP}" BOOST_LIB_DEP)
     if (NOT ${BOOST_LIB_DEP})
       set(THIS_PROJECT_OKAY OFF)
@@ -75,10 +76,6 @@
     endif (NOT ${BOOST_LIB_DEP})
   endforeach(DEP)
 
-  # Export BOOST_${LIBNAME}_DEPENDS
-  string(TOUPPER "BOOST_${LIBNAME}_DEPENDS" THIS_PROJECT_LIBNAME_DEPENDS)
-  set(${THIS_PROJECT_LIBNAME_DEPENDS} ${THIS_PROJECT_DEPENDS} PARENT_SCOPE)
-
   string(TOUPPER "BUILD_BOOST_${LIBNAME}" BOOST_BUILD_LIB_OPTION)
   if (THIS_PROJECT_SRCDIRS)
     # This Boost library has source directories, so provide an option
@@ -105,7 +102,7 @@
     set(${BOOST_BUILD_LIB_OPTION} ${THIS_PROJECT_OKAY})
   endif (THIS_PROJECT_SRCDIRS)
 
-  if(${BOOST_BUILD_LIB_OPTION})
+  if(${BOOST_BUILD_LIB_OPTION} AND THIS_PROJECT_OKAY)
     string(TOLOWER "${LIBNAME}" libname)
     project(${libname})
 
@@ -164,9 +161,21 @@
         endforeach(SUBDIR ${THIS_PROJECT_TESTDIRS})
       endif(${BOOST_TEST_LIB_OPTION})
     endif(BUILD_TESTING AND THIS_PROJECT_TESTDIRS)
-  endif(${BOOST_BUILD_LIB_OPTION})
+  endif(${BOOST_BUILD_LIB_OPTION} AND THIS_PROJECT_OKAY)
 endmacro(boost_library_project)
 
+macro(boost_module LIBNAME)
+  parse_arguments(THIS_MODULE
+    "DEPENDS"
+    ""
+    ${ARGN}
+    )
+
+  # Export BOOST_${LIBNAME}_DEPENDS
+  string(TOUPPER "BOOST_${LIBNAME}_DEPENDS" THIS_MODULE_LIBNAME_DEPENDS)
+  set(${THIS_MODULE_LIBNAME_DEPENDS} "${THIS_MODULE_DEPENDS}")
+endmacro(boost_module)
+
 # This macro is an internal utility macro that builds the name of a
 # particular variant of a library
 #
@@ -443,6 +452,7 @@
 
     # Installation of this library variant
     install(TARGETS ${VARIANT_LIBNAME} DESTINATION lib)
+#      EXPORT boost-targets)
   endif (THIS_VARIANT_OKAY)
 endmacro(boost_library_variant)
 
@@ -719,32 +729,34 @@
     )
   set(THIS_LIB_SOURCES ${THIS_LIB_DEFAULT_ARGS})
 
-  # A top-level target that refers to all of the variants of the
-  # library, collectively.
-  add_custom_target(${LIBNAME})
-
-  if (THIS_LIB_EXTRA_VARIANTS)
-    # Build the set of variants that we will generate for this library
-    set(THIS_LIB_VARIANTS)
-    foreach(VARIANT ${BOOST_DEFAULT_VARIANTS})
-      foreach(EXTRA_VARIANT ${THIS_LIB_EXTRA_VARIANTS})
-        string(REPLACE ":" ";" FEATURES "${EXTRA_VARIANT}")
-        separate_arguments(FEATURES)
-        foreach(FEATURE ${FEATURES})
-          list(APPEND THIS_LIB_VARIANTS "${VARIANT}:${FEATURE}")
-        endforeach(FEATURE ${FEATURES})
-      endforeach(EXTRA_VARIANT ${THIS_LIB_EXTRA_VARIANTS})
-    endforeach(VARIANT ${BOOST_DEFAULT_VARIANTS})
-  else (THIS_LIB_EXTRA_VARIANTS)
-    set(THIS_LIB_VARIANTS ${BOOST_DEFAULT_VARIANTS})
-  endif (THIS_LIB_EXTRA_VARIANTS)
-
-  # Build each of the library variants
-  foreach(VARIANT_STR ${THIS_LIB_VARIANTS})
-    string(REPLACE ":" ";" VARIANT ${VARIANT_STR})
-    separate_arguments(VARIANT)
-    boost_library_variant(${LIBNAME} ${VARIANT})
-  endforeach(VARIANT_STR ${THIS_LIB_VARIANTS})
+  if (NOT TEST_INSTALLED_TREE)
+    # A top-level target that refers to all of the variants of the
+    # library, collectively.
+    add_custom_target(${LIBNAME})
+    
+    if (THIS_LIB_EXTRA_VARIANTS)
+      # Build the set of variants that we will generate for this library
+      set(THIS_LIB_VARIANTS)
+      foreach(VARIANT ${BOOST_DEFAULT_VARIANTS})
+        foreach(EXTRA_VARIANT ${THIS_LIB_EXTRA_VARIANTS})
+          string(REPLACE ":" ";" FEATURES "${EXTRA_VARIANT}")
+          separate_arguments(FEATURES)
+          foreach(FEATURE ${FEATURES})
+            list(APPEND THIS_LIB_VARIANTS "${VARIANT}:${FEATURE}")
+          endforeach(FEATURE ${FEATURES})
+        endforeach(EXTRA_VARIANT ${THIS_LIB_EXTRA_VARIANTS})
+      endforeach(VARIANT ${BOOST_DEFAULT_VARIANTS})
+    else (THIS_LIB_EXTRA_VARIANTS)
+      set(THIS_LIB_VARIANTS ${BOOST_DEFAULT_VARIANTS})
+    endif (THIS_LIB_EXTRA_VARIANTS)
+    
+    # Build each of the library variants
+    foreach(VARIANT_STR ${THIS_LIB_VARIANTS})
+      string(REPLACE ":" ";" VARIANT ${VARIANT_STR})
+      separate_arguments(VARIANT)
+      boost_library_variant(${LIBNAME} ${VARIANT})
+    endforeach(VARIANT_STR ${THIS_LIB_VARIANTS})
+  endif (NOT TEST_INSTALLED_TREE)
 endmacro(boost_add_library)
 
 # Creates a new executable from source files.
Modified: branches/CMake/release/tools/build/CMake/BoostTesting.cmake
==============================================================================
--- branches/CMake/release/tools/build/CMake/BoostTesting.cmake	(original)
+++ branches/CMake/release/tools/build/CMake/BoostTesting.cmake	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -37,6 +37,14 @@
 option(BUILD_TESTING "Enable testing" OFF)
 include(CTest)
 
+if (BUILD_TESTING)
+  option(TEST_INSTALLED_TREE "Enable testing of an already-installed tree" OFF)
+
+  if (TEST_INSTALLED_TREE)
+    include("${CMAKE_INSTALL_PREFIX}/lib/Boost${BOOST_VERSION}/boost-targets.cmake")
+  endif (TEST_INSTALLED_TREE)
+endif (BUILD_TESTING)
+
 # This macro is an internal utility macro that helps parse the
 # arguments passed to the Boost testing commands. It will generally
 # not be used by Boost developers.
Modified: branches/CMake/release/tools/build/CMake/BoostUtils.cmake
==============================================================================
--- branches/CMake/release/tools/build/CMake/BoostUtils.cmake	(original)
+++ branches/CMake/release/tools/build/CMake/BoostUtils.cmake	2008-04-03 22:14:12 EDT (Thu, 03 Apr 2008)
@@ -151,6 +151,9 @@
         "${VERTEX};${${PREFIX}${UPPER_VERTEX}${SUFFIX}}")
       list(APPEND STACK ${NEW_ELEMENT})
 
+      # We've now seen this vertex
+      set(FOUND_${UPPER_VERTEX} TRUE)
+
       # While the depth-first search stack is not empty
       list(LENGTH STACK STACK_LENGTH)
       while(STACK_LENGTH GREATER 0)