$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: dgregor_at_[hidden]
Date: 2007-06-08 14:33:20
Author: dgregor
Date: 2007-06-08 14:33:19 EDT (Fri, 08 Jun 2007)
New Revision: 4500
URL: http://svn.boost.org/trac/boost/changeset/4500
Log:
Document all of the CMake macros we define for Boost usage
Text files modified: 
   sandbox-branches/boost-cmake/boost_1_34_0/CMakeLists.txt                        |    90 ++++++++---                             
   sandbox-branches/boost-cmake/boost_1_34_0/libs/CMakeLists.txt                   |     2                                         
   sandbox-branches/boost-cmake/boost_1_34_0/libs/python/CMakeLists.txt            |     5                                         
   sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/boost-core.cmake    |   310 ++++++++++++++++++++++++++++++--------- 
   sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/boost-testing.cmake |   216 +++++++++++++++++++++++++--             
   5 files changed, 506 insertions(+), 117 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-08 14:33:19 EDT (Fri, 08 Jun 2007)
@@ -1,18 +1,54 @@
+##########################################################################
+# CMake Build Rules for Boost                                            #
+##########################################################################
+# Copyright (C) 2007 Douglas Gregor <doug.gregor_at_[hidden]>              #
+# Copyright (C) 2007 Troy Straszheim                                     #
+#                                                                        #
+# Distributed under the Boost Software License, Version 1.0.             #
+# See accompanying file LICENSE_1_0.txt or copy at                       #
+#   http://www.boost.org/LICENSE_1_0.txt                                 #
+##########################################################################
+# Basic Usage:                                                           #
+#                                                                        #
+#   On Unix variants:                                                    #
+#     ccmake BOOST_DIRECTORY                                             #
+#                                                                        #
+#     (c)onfigure options to your liking, then (g)enerate                #
+#     makefiles. Use "make" to build, "make test" to test, "make         #
+#     install" to install, and "make package" to build binary            #
+#     packages.                                                          #
+#                                                                        #
+#   On Windows:                                                          #
+#     run the CMake GNU, load the Boost directory, and generate          #
+#     project files or makefiles for your environment.                   #
+#                                                                        #
+# For more information about CMake, see http://www.cmake.org             #
+##########################################################################
 cmake_minimum_required(VERSION 2.4.4 FATAL_ERROR)
-
 project(Boost)
 
 ##########################################################################
-# Global configurartion                                                  #
+# Version information                                                    #
 ##########################################################################
-
-# Boost version
 set(BOOST_VERSION_MAJOR 1)
 set(BOOST_VERSION_MINOR 34)
 set(BOOST_VERSION_SUBMINOR 0)
 set(BOOST_VERSION "${BOOST_VERSION_MAJOR}.${BOOST_VERSION_MINOR}.${BOOST_VERSION_SUBMINOR}")
+##########################################################################
 
-# Which library variants will we build?
+##########################################################################
+# Boost CMake modules                                                    #
+##########################################################################
+list(APPEND CMAKE_MODULE_PATH ${Boost_SOURCE_DIR}/tools/build/CMake)
+include(boost)
+include(BoostConfig)
+##########################################################################
+
+##########################################################################
+# Build Features and Variants                                            #
+##########################################################################
+
+# User-level options deciding which variants we will build. 
 option(BUILD_STATIC "Whether to build static libraries" ON)
 option(BUILD_SHARED "Whether to build shared libraries" ON)
 option(BUILD_DEBUG "Whether to build debugging libraries" ON)
@@ -20,32 +56,15 @@
 option(BUILD_SINGLE_THREADED "Whether to build single-threaded libraries" ON)
 option(BUILD_MULTI_THREADED "Whether to build multi-threaded libraries" ON)
 
-# Always include the Boost source directory, so that we can find
-# include files in boost/
-include_directories(${Boost_SOURCE_DIR})
-
-# Boost.Build version 2 does this due to trouble with autolinking 
-# during building and testing. TODO: Try to remove this
-add_definitions(-DBOOST_ALL_NO_LIB=1)
-
-##########################################################################
-
-# Make it easy to find Boost-specific CMake modules
-list(APPEND CMAKE_MODULE_PATH ${Boost_SOURCE_DIR}/tools/build/CMake)
-
-include(boost)
-include(BoostConfig)
-
 # The default set of library variants that we will be building
 boost_add_default_variant(STATIC SHARED)
 boost_add_default_variant(DEBUG RELEASE)
 boost_add_default_variant(SINGLE_THREADED MULTI_THREADED)
+##########################################################################
 
 ##########################################################################
-# Boost installation                                                     #
+# Installation                                                           #
 ##########################################################################
-
-# Installation of Boost headers
 install(DIRECTORY boost 
         DESTINATION include
         PATTERN "CVS" EXCLUDE
@@ -55,7 +74,6 @@
 ##########################################################################
 # Binary packages                                                        #
 ##########################################################################
-
 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Boost")
 set(CPACK_PACKAGE_VENDOR "Boost.org")
 set(CPACK_PACKAGE_DESCRIPTION_FILE "${Boost_SOURCE_DIR}/README")
@@ -82,4 +100,26 @@
 include(CPack)
 ##########################################################################
 
+
+##########################################################################
+# Building Boost libraries                                               #
+##########################################################################
+# Always include the Boost source directory, so that we can find
+# include files in boost/
+include_directories(${Boost_SOURCE_DIR})
+
+# Put the libaroes and binaroes that get built into directories at the
+# top of the build tree rather than in hard-to-find leaf
+# directories. This simplifies manual testing and the use of the build
+# tree rather than installed Boost libraries.
+SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
+SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
+
+# Boost.Build version 2 does this due to trouble with autolinking
+# during building and testing.  
+# TODO: See if we can actually use auto-linking in our regression tests.
+add_definitions(-DBOOST_ALL_NO_LIB=1)
+
+# Add build rules for all of the Boost libraries
 add_subdirectory(libs)
+##########################################################################
Modified: sandbox-branches/boost-cmake/boost_1_34_0/libs/CMakeLists.txt
==============================================================================
--- sandbox-branches/boost-cmake/boost_1_34_0/libs/CMakeLists.txt	(original)
+++ sandbox-branches/boost-cmake/boost_1_34_0/libs/CMakeLists.txt	2007-06-08 14:33:19 EDT (Fri, 08 Jun 2007)
@@ -9,7 +9,7 @@
   MESSAGE(STATUS "Scanning subdirectories:")
   foreach(BOOST_LIB_CMAKE_FILE ${BOOST_LIBRARY_CMAKE_FILES})
     get_filename_component(BOOST_LIB_DIR ${BOOST_LIB_CMAKE_FILE} PATH)
-    append(${varname} ${BOOST_LIB_DIR})
+    set(${varname} ${${varname}} ${BOOST_LIB_DIR})
   endforeach(BOOST_LIB_CMAKE_FILE ${BOOST_LIBRARY_CMAKE_FILES})
 endmacro(BOOST_COLLECT_SUBPROJECT_DIRECTORY_NAMES varname)
 
Modified: sandbox-branches/boost-cmake/boost_1_34_0/libs/python/CMakeLists.txt
==============================================================================
--- sandbox-branches/boost-cmake/boost_1_34_0/libs/python/CMakeLists.txt	(original)
+++ sandbox-branches/boost-cmake/boost_1_34_0/libs/python/CMakeLists.txt	2007-06-08 14:33:19 EDT (Fri, 08 Jun 2007)
@@ -11,6 +11,11 @@
     if(CMAKE_COMPILER_IS_GNUCXX)
       set(PYTHON_LIBRARIES ${PYTHON_LIBRARIES} "rt")
     endif(CMAKE_COMPILER_IS_GNUCXX)
+  elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSD")
+    set(PYTHON_LIBRARIES ${PYTHON_LIBRARIES} "pthread")
+  elseif(CMAKE_SYSTEM_NAME STREQUAL "DragonFly")
+    # DragonFly is a variant of FreeBSD
+    set(PYTHON_LIBRARIES ${PYTHON_LIBRARIES} "pthread")
   elseif(CMAKE_SYSTEM_NAME STREQUAL "OSF")
     set(PYTHON_LIBRARIES ${PYTHON_LIBRARIES} "pthread" "dl")
     if(CMAKE_COMPILER_IS_GNUCXX)
Modified: sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/boost-core.cmake
==============================================================================
--- sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/boost-core.cmake	(original)
+++ sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/boost-core.cmake	2007-06-08 14:33:19 EDT (Fri, 08 Jun 2007)
@@ -1,44 +1,65 @@
 ##########################################################################
-# Boost core support                                                     #
+# Core Functionality for Boost                                           #
+##########################################################################
+# Copyright (C) 2007 Douglas Gregor <doug.gregor_at_[hidden]>              #
+# Copyright (C) 2007 Troy Straszheim                                     #
+#                                                                        #
+# Distributed under the Boost Software License, Version 1.0.             #
+# See accompanying file LICENSE_1_0.txt or copy at                       #
+#   http://www.boost.org/LICENSE_1_0.txt                                 #
+##########################################################################
+# Important developer macros in this file:                               #
+#                                                                        #
+#   boost_library_project: Defines a Boost library project (e.g.,        #
+#   Boost.Python).                                                       #
+#                                                                        #
+#   boost_library: Builds library binaries for Boost libraries with      #
+#   compiled sources (e.g., boost_filesystem).                           #
 ##########################################################################
-
-# Put the libs and bins that get built into directories at the top of
-# the build tree rather than in hard to find leaf directories
-SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
-SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
-
-# append to a variable
-macro(append varname)
-  set(${varname} ${${varname}} ${ARGN})
-endmacro(append varname)
 
 # Defines a Boost library project (e.g., for Boost.Python). Use as:
 #
-#   boost_library_project(libname, subdir1, subdir2, ...)
+#   boost_library_project(libname
+#                         [SRCDIRS srcdir1 srcdir2 ...] 
+#                         [TESTDIRS testdir1 testdir2 ...])
 #
 # where libname is the name of the library (e.g., Python, or
-# Filesystem) and subdir1, subdir2, etc. are the subdirectories that
-# contain CMakeLists files.
-#
-# This macro will define an option BUILD_BOOST_LIBNAME (which defaults
-# to ON). When the option is true, this macro will include the
-# subdirectories; otherwise, none of the subdirectories will be
-# included, so the library itself will not be built, installed, or
-# tested.
-macro(boost_library_project libname_)
+# 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.
+#
+# For libraries that build actual library binaries, this macro adds a
+# option BUILD_BOOST_LIBNAME (which defaults to ON). When the option
+# is ON, this macro will include the source subdirectories, and
+# therefore, will build and install the library binary.
+#
+# For libraries that have regression tests, and when testing is
+# enabled globally by the BUILD_TESTING option, this macro also
+# defines the TEST_BOOST_LIBNAME option (defaults to ON). When ON, the
+# generated makefiles/project files will contain regression tests for
+# this library.
+#
+# Example: 
+#   boost_library_project(
+#     Thread
+#     SRCDIRS src 
+#     TESTDIRS test
+#     )
+macro(boost_library_project LIBNAME)
   parse_arguments(THIS_PROJECT
     "SRCDIRS;TESTDIRS"
     ""
     ${ARGN}
     )
 
-  string(TOUPPER "BUILD_BOOST_${libname_}" BOOST_BUILD_LIB_OPTION)
+  string(TOUPPER "BUILD_BOOST_${LIBNAME}" BOOST_BUILD_LIB_OPTION)
   if (THIS_PROJECT_SRCDIRS)
     # This Boost library has source directories, so provide an option
     # BUILD_BOOST_LIBNAME that allows one to turn on/off building of
     # the library.
     option(${BOOST_BUILD_LIB_OPTION} 
-      "Build Boost.${libname_} (prefer make targets, not this, to build individual libs)" 
+      "Build Boost.${LIBNAME} (prefer make targets, not this, to build individual libs)" 
       ON)
   else (THIS_PROJECT_SRCDIRS)
     # This Boost library has no source directories, and therefore does
@@ -48,7 +69,7 @@
   endif (THIS_PROJECT_SRCDIRS)
 
   if(${BOOST_BUILD_LIB_OPTION})
-    string(TOLOWER "${libname_}" libname)
+    string(TOLOWER "${LIBNAME}" libname)
     project(${libname})
 
     if(NOT EXISTS ${CMAKE_BINARY_DIR}/bin/${PROJECT_NAME})
@@ -63,9 +84,9 @@
     if(BUILD_TESTING AND THIS_PROJECT_TESTDIRS)
       # Testing is enabled globally and this project has some
       # tests. So, add a testing option.
-      string(TOUPPER "TEST_BOOST_${libname_}" BOOST_TEST_LIB_OPTION)
+      string(TOUPPER "TEST_BOOST_${LIBNAME}" BOOST_TEST_LIB_OPTION)
       option(${BOOST_TEST_LIB_OPTION} 
-        "Enable testing of Boost.${libname_}" 
+        "Enable testing of Boost.${LIBNAME}" 
         ON)
 
       # Only include the test directories when testing is enabled for
@@ -79,35 +100,52 @@
   endif(${BOOST_BUILD_LIB_OPTION})
 endmacro(boost_library_project)
 
+# This macro is an internal utility macro that builds the name of a
+# particular variant of a library
+#
+#   boost_library_variant_target_name(feature1 feature2 ...)
+#
+# where feature1, feature2, etc. are the names of features to be
+# included in this variant, e.g., MULTI_THREADED, DEBUG. 
+#
+# This macro sets two macros:
+#   
+#   VARIANT_TARGET_NAME: The suffix that should be appended to the
+#   name of the library target to name this variant of the
+#   library. For example, this might be "-mt-static" for a static,
+#   multi-threaded variant. It should be used to name the CMake
+#   library target, e.g., boost_signals-mt-static.
+#
+#   VARIANT_VERSIONED_NAME: The suffix that will be added to the name
+#   of the generated library, containing information about the
+#   particular version of the library and the toolset used to build
+#   this library. For example, this might be "-gcc41-mt-1_34" for the
+#   multi-threaded, release variant of the library in Boost 1.34.0 as
+#   compiled with GCC 4.1.
 macro(boost_library_variant_target_name)
   set(VARIANT_TARGET_NAME "")
-  set(VARIANT_VERSIONED_NAME "")
-
-  if (BUILD_VERSIONED)
-    # If we're using versioning for the names of our generated
-    # libraries, detect the full toolset name.
-    set(VARIANT_VERSIONED_NAME "-${BOOST_TOOLSET}")
-  endif (BUILD_VERSIONED)
 
   # Add -mt for multi-threaded libraries
-  list_contains(variant_is_mt MULTI_THREADED ${ARGN})
-  if (variant_is_mt)
+  list_contains(VARIANT_IS_MT MULTI_THREADED ${ARGN})
+  if (VARIANT_IS_MT)
     set(VARIANT_TARGET_NAME "${VARIANT_TARGET_NAME}-mt")
 
-    if (BUILD_VERSIONED)
-      # If we're creating versioned names, tack on "-mt"
-      set(VARIANT_VERSIONED_NAME "${VARIANT_VERSIONED_NAME}-mt")
-    endif (BUILD_VERSIONED)
-  endif (variant_is_mt)
+    # If we're creating versioned names, tack on "-mt"
+    set(VARIANT_VERSIONED_NAME "${VARIANT_VERSIONED_NAME}-mt")
+  endif (VARIANT_IS_MT)
 
   # Add -static for static libraries, -shared for shared libraries
-  list_contains(variant_is_static STATIC ${ARGN})
-  if (variant_is_static)
+  list_contains(VARIANT_IS_STATIC STATIC ${ARGN})
+  if (VARIANT_IS_STATIC)
     set(VARIANT_TARGET_NAME "${VARIANT_TARGET_NAME}-static")
-  else (variant_is_static)
+  else (VARIANT_IS_STATIC)
     set(VARIANT_TARGET_NAME "${VARIANT_TARGET_NAME}-shared")
-  endif (variant_is_static)
+  endif (VARIANT_IS_STATIC)
+
+  # The versioned name starts with the full Boost toolset
+  set(VARIANT_VERSIONED_NAME "-${BOOST_TOOLSET}")
 
+  # Compute the ABI tag, which depends on various kinds of options
   set(VARIANT_ABI_TAG "")
 
   # TODO: Linking statically to the runtime library
@@ -117,32 +155,48 @@
   # TODO: STLport's deprecated iostreams
 
   # Add -debug for debug libraries
-  list_contains(variant_is_debug DEBUG ${ARGN})
-  if (variant_is_debug)
+  list_contains(VARIANT_IS_DEBUG DEBUG ${ARGN})
+  if (VARIANT_IS_DEBUG)
     set(VARIANT_TARGET_NAME "${VARIANT_TARGET_NAME}-debug")
+    set(VARIANT_ABI_TAG "${VARIANT_ABI_TAG}d")
+  endif (VARIANT_IS_DEBUG)
 
-    if (BUILD_VERSIONED)
-      set(VARIANT_ABI_TAG "${VARIANT_ABI_TAG}d")
-    endif (BUILD_VERSIONED)
-  endif (variant_is_debug)
-
-  if (BUILD_VERSIONED)
-    # If there is an ABI tag, append it to the versioned name
-    if (VARIANT_ABI_TAG)
-      set(VARIANT_VERSIONED_NAME "${VARIANT_VERSIONED_NAME}-${VARIANT_ABI_TAG}")
-    endif (VARIANT_ABI_TAG)
-
-    # Append the Boost version number to the versioned name
-    if(BOOST_VERSION_SUBMINOR GREATER 0)
-      set(VARIANT_VERSIONED_NAME
-        "${VARIANT_VERSIONED_NAME}-${BOOST_VERSION_MAJOR}_${BOOST_VERSION_MINOR}_${BOOST_VERSION_SUBMINOR}")
-    else(BOOST_VERSION_SUBMINOR GREATER 0)
-      set(VARIANT_VERSIONED_NAME 
-        "${VARIANT_VERSIONED_NAME}-${BOOST_VERSION_MAJOR}_${BOOST_VERSION_MINOR}")
-    endif(BOOST_VERSION_SUBMINOR GREATER 0)
-  endif (BUILD_VERSIONED)
+  # If there is an ABI tag, append it to the versioned name
+  if (VARIANT_ABI_TAG)
+    set(VARIANT_VERSIONED_NAME "${VARIANT_VERSIONED_NAME}-${VARIANT_ABI_TAG}")
+  endif (VARIANT_ABI_TAG)
+
+  # Append the Boost version number to the versioned name
+  if(BOOST_VERSION_SUBMINOR GREATER 0)
+    set(VARIANT_VERSIONED_NAME
+      "${VARIANT_VERSIONED_NAME}-${BOOST_VERSION_MAJOR}_${BOOST_VERSION_MINOR}_${BOOST_VERSION_SUBMINOR}")
+  else(BOOST_VERSION_SUBMINOR GREATER 0)
+    set(VARIANT_VERSIONED_NAME 
+      "${VARIANT_VERSIONED_NAME}-${BOOST_VERSION_MAJOR}_${BOOST_VERSION_MINOR}")
+  endif(BOOST_VERSION_SUBMINOR GREATER 0)
 endmacro(boost_library_variant_target_name)
 
+# This macro is an internal utility macro that builds a particular
+# variant of a boost library.
+#
+#   boost_library_variant(libname 
+#                         feature1 feature2 ...)
+#
+# where libname is the name of the Boost library (e.g.,
+# "boost_filesystem") and feature1, feature2, ... are the features
+# that will be used in this variant. 
+#
+# This macro will define a new library target based on libname and the
+# specific variant name (see boost_library_variant_target_name), which
+# depends on the utility target libname. The compilation and linking
+# flags for this library are defined by THIS_LIB_COMPILE_FLAGS,
+# THIS_LIB_LINK_FLAGS, THIS_LIB_LINK_LIBS, and all of the compile and
+# linking flags implied by the features provided.
+#
+# If any of the features listed conflict with this library, no new
+# targets will be built. For example, if the library provides the
+# option NOT_MULTI_THREADED, and one of the features provided is
+# MULTI_THREADED, this macro will essentially be a no-op.
 macro(boost_library_variant LIBNAME)
   set(THIS_VARIANT_COMPILE_FLAGS "${THIS_LIB_COMPILE_FLAGS}")
   set(THIS_VARIANT_LINK_FLAGS "${THIS_LIB_LINK_FLAGS}")
@@ -332,14 +386,129 @@
   endforeach(FEATURE ${ARGN})
 endmacro(boost_add_default_variant)
 
-macro(boost_library)
+# Creates a new Boost library target that generates a compiled library
+# (.a, .lib, .dll, .so, etc) from source files. This routine will
+# actually build several different variants of the same library, with
+# different compilation options, as determined by the set of "default"
+# library variants.
+#
+#   boost_library(libname
+#                 source1 source2 ...
+#                 [COMPILE_FLAGS compileflags]
+#                 [feature_COMPILE_FLAGS compileflags]
+#                 [LINK_FLAGS linkflags]
+#                 [feature_LINK_FLAGS linkflags]
+#                 [LINK_LIBS linklibs]
+#                 [feature_LINK_LIBS linklibs]
+#                 [DEPENDS libdepend1 libdepend2 ...]
+#                 [STATIC_TAG]
+#                 [MODULE]
+#                 [NOT_feature])
+#
+# where libname is the name of Boost library binary (e.g.,
+# "boost_regex") and source1, source2, etc. are the source files used
+# to build the library, e.g., cregex.cpp.
+#
+# This macro has a variety of options that affect its behavior. In
+# several cases, we use the placeholder "feature" in the option name
+# to indicate that there are actually several different kinds of
+# options, each referring to a different build feature, e.g., shared
+# libraries, multi-threaded, debug build, etc. For a complete listing
+# of these features, please refer to the CMakeLists.txt file in the
+# root of the Boost distribution, which defines the set of features
+# that will be used to build Boost libraries by default.
+#
+# The options that affect this macro's behavior are:
+#
+#   COMPILE_FLAGS: Provides additional compilation flags that will be
+#   used when building all variants of the library. For example, one
+#   might want to add "-DBOOST_SIGNALS_NO_LIB=1" through this option
+#   (which turns off auto-linking for the Signals library while
+#   building it).
+#
+#   feature_COMPILE_FLAGS: Provides additional compilation flags that
+#   will be used only when building variants of the library that
+#   include the given feature. For example,
+#   MULTI_THREADED_COMPILE_FLAGS are additional flags that will be
+#   used when building a multi-threaded variant, while
+#   SHARED_COMPILE_FLAGS will be used when building a shared library
+#   (as opposed to a static library).
+#
+#   LINK_FLAGS: Provides additional flags that will be passed to the
+#   linker when linking each variant of the library. This option
+#   should not be used to link in additional libraries; see LINK_LIBS
+#   and DEPENDS.
+#
+#   feature_LINK_FLAGS: Provides additional flags that will be passed
+#   to the linker when building variants of the library that contain a
+#   specific feature, e.g., MULTI_THREADED_LINK_FLAGS. This option
+#   should not be used to link in additional libraries; see
+#   feature_LINK_LIBS.
+#
+#   LINK_LIBS: Provides additional libraries against which each of the
+#   library variants will be linked. For example, one might provide
+#   "expat" as options to LINK_LIBS, to state that each of the library
+#   variants will link against the expat library binary. Use LINK_LIBS
+#   for libraries external to Boost; for Boost libraries, use DEPENDS.
+#
+#   feature_LINK_LIBS: Provides additional libraries for specific
+#   variants of the library to link against. For example,
+#   MULTI_THREADED_LINK_LIBS provides extra libraries to link into
+#   multi-threaded variants of the library.
+#
+#   DEPENDS: States that this Boost libraries depends on and links
+#   against another Boost library. The arguments to DEPENDS should be
+#   the unversioned name of the Boost library, such as
+#   "boost_filesystem". Like LINK_LIBS, this option states that all
+#   variants of the library being built will link against the stated
+#   libraries. Unlike LINK_LIBS, however, DEPENDS takes particular
+#   library variants into account, always linking the variant of one
+#   Boost library against the same variant of the other Boost
+#   library. For example, if the boost_mpi_python library DEPENDS on
+#   boost_python, multi-threaded variants of boost_mpi_python will
+#   link against multi-threaded variants of boost_python.
+#
+#   STATIC_TAG: States that the name of static library variants on
+#   Unix need to be named differently from shared library
+#   variants. This particular option should only be used in rare cases
+#   where the static and shared library variants are incompatible,
+#   such that linking against the shared library rather than the
+#   static library will cause features. When this option is provided,
+#   static libraries on Unix variants will have "-s" appended to their
+#   names. Note: we hope that this is a temporary solution. At
+#   present, it is only used by the Test library.
+#
+#   MODULE: This option states that, when building a shared library,
+#   the shared library should be built as a module rather than a
+#   normal shared library. Modules have special meaning an behavior on
+#   some platforms, such as Mac OS X.
+#
+#   NOT_feature: States that library variants containing a particular
+#   feature should not be built. For example, passing
+#   NOT_SINGLE_THREADED suppresses generation of single-threaded
+#   variants of this library.
+#
+#
+# Example:
+#   boost_library(
+#     boost_thread
+#     barrier.cpp condition.cpp exceptions.cpp mutex.cpp once.cpp 
+#     recursive_mutex.cpp thread.cpp tss_hooks.cpp tss_dll.cpp tss_pe.cpp 
+#     tss.cpp xtime.cpp
+#     SHARED_COMPILE_FLAGS "-DBOOST_THREAD_BUILD_DLL=1"
+#     STATIC_COMPILE_FLAGS "-DBOOST_THREAD_BUILD_LIB=1"
+#     NO_SINGLE_THREADED
+#   )
+#
+# TODO: 
+#   - Rename this to boost_add_library.
+macro(boost_library LIBNAME)
   parse_arguments(THIS_LIB
-    "DEPENDS;LINK_LIBS;COMPILE_FLAGS;LINK_FLAGS;${BOOST_ADDLIB_ARG_NAMES}"
+    "DEPENDS;COMPILE_FLAGS;LINK_FLAGS;LINK_LIBS;${BOOST_ADDLIB_ARG_NAMES}"
     "STATIC_TAG;MODULE;${BOOST_ADDLIB_OPTION_NAMES}"
     ${ARGN}
     )
-  car(LIBNAME ${THIS_LIB_DEFAULT_ARGS})
-  cdr(THIS_LIB_SOURCES ${THIS_LIB_DEFAULT_ARGS})
+  set(THIS_LIB_SOURCES ${THIS_LIB_DEFAULT_ARGS})
 
   # A top-level target that refers to all of the variants of the
   # library, collectively.
@@ -353,3 +522,4 @@
   endforeach(VARIANT_STR ${BOOST_DEFAULT_VARIANTS})
 endmacro(boost_library)
 
+# TODO: Create boost_add_executable, which deals with variants well
\ No newline at end of file
Modified: sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/boost-testing.cmake
==============================================================================
--- sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/boost-testing.cmake	(original)
+++ sandbox-branches/boost-cmake/boost_1_34_0/tools/build/CMake/boost-testing.cmake	2007-06-08 14:33:19 EDT (Fri, 08 Jun 2007)
@@ -1,21 +1,21 @@
 ##########################################################################
-# Boost testing support                                                  #
+# Regression Testing Support for Boost                                   #
 ##########################################################################
+# Copyright (C) 2007 Douglas Gregor <doug.gregor_at_[hidden]>              #
+# Copyright (C) 2007 Troy Straszheim                                     #
+#                                                                        #
+# Distributed under the Boost Software License, Version 1.0.             #
+# See accompanying file LICENSE_1_0.txt or copy at                       #
+#   http://www.boost.org/LICENSE_1_0.txt                                 #
+##########################################################################
+# This file provides a set of CMake macros that support regression
+# testing for Boost libraries. For each of the test macros below, the
+# first argument, testname, states the name of the test that will be
+# created. If no other arguments are provided, the source file
+# testname.cpp will be used as the source file; otherwise, source
+# files should be listed immediately after the name of the test.
 #
-# For each of the test macros below, the first argument, testname,
-# states the name of the test that will be created. If no other
-# arguments are provided, the source file testname.cpp will be used as
-# the source file; otherwise, all remaining arguments to the test
-# macro will be used as the source files.
-#
-# To link in additional libraries when building the executable, pass
-# LIBRARIES to the boost_*_test macro followed by followed by the list
-# of libraries to link, e.g.,
-#
-#   boost_test_run(signal_n_test LIBRARIES boost_test_exec_monitor)
-#
-# There are several macros that create tests:
-#
+# The macros for creating regression tests are:
 #   boost_test_run: Builds an executable and runs it as a test. The test
 #                   succeeds if it builds and returns 0 when executed.
 #
@@ -28,14 +28,44 @@
 #
 #   boost_test_compile_fail: Tests that the given source file produces 
 #                            errors when compiled.
-#
-#
-#   These macros format the displayed name of the test as
-#   PROJECT_NAME::testname, where PROJECT_NAME is a global set by the
-#   CMake PROJECT macro inside boost_library_project.
+
+# User-controlled option that can be used to enable/disable regression
+# testing. By default, we disable testing, because most users won't
+# want or need to perform regression testing on Boost. The Boost build
+# is significantly faster when we aren't also building regression
+# tests.
 option(BUILD_TESTING "Enable testing" OFF)
 include(CTest)
 
+# 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.
+#
+#   boost_test_parse_args(testname 
+#                         [source1 source2 ...]
+#                         [ARGS arg1 arg2... ]
+#                         [COMPILE_FLAGS compileflags]
+#                         [LINK_FLAGS linkflags]
+#                         [LINK_LIBS linklibs]
+#                         [DEPENDS libdepend1 libdepend2 ...])
+#
+# testname is the name of the test. The remaining arguments passed to
+# this macro will be parsed and categorized for the developer-level
+# test macros to use. 
+#
+# Variables affected:
+#
+#   BOOST_TEST_OKAY: Will be set to TRUE if it is okay to build and
+#   run this test.
+#
+#   BOOST_TEST_SOURCES: Will be populated with the set of source files
+#   that should be used to compile this test. If the user has provided
+#   source files, BOOST_TEST_SOURCES will contain those; otherwise,
+#   BOOST_TEST_SOURCES will only contain "testname.cpp".
+#
+#   BOOST_TEST_arg: Will be populated with the arguments provided for
+#   the arguemnt "arg", where "arg" can be any of the extra arguments
+#   specified above.
 macro(boost_test_parse_args testname)
   set(BOOST_TEST_OKAY TRUE)
   set(BOOST_TEST_COMPILE_FLAGS "")
@@ -45,7 +75,8 @@
     ${ARGN}
     )
     
-  # Categorize each of the arguments
+  # Check each of the dependencies to see if we can still build this
+  # test.
   foreach(ARG ${BOOST_TEST_DEPENDS})
     get_target_property(DEPEND_TYPE ${ARG} TYPE)
     get_target_property(DEPEND_LOCATION ${ARG} LOCATION)
@@ -76,6 +107,59 @@
   endif(NOT BUILD_TESTING)
 endmacro(boost_test_parse_args)
 
+# This macro creates a Boost regression test that will be executed. If
+# the test can be built, executed, and exits with a return code of
+# zero, it will be considered to have passed.
+#
+#   boost_test_run(testname 
+#                  [source1 source2 ...]
+#                  [ARGS arg1 arg2... ]
+#                  [COMPILE_FLAGS compileflags]
+#                  [LINK_FLAGS linkflags]
+#                  [LINK_LIBS linklibs]
+#                  [DEPENDS libdepend1 libdepend2 ...])
+#
+# testname is the name of the test. source1, source2, etc. are the
+# source files that will be built and linked into the test
+# executable. If no source files are provided, the file "testname.cpp"
+# will be used instead.
+#
+# There are several optional arguments to control how the regression
+# test is built and executed:
+#
+#   ARGS: Provides additional arguments that will be passed to the
+#   test executable when it is run.
+#
+#   COMPILE_FLAGS: Provides additional compilation flags that will be
+#   used when building this test. For example, one might want to add
+#   "-DBOOST_SIGNALS_ASSERT=1" to turn on assertions within the library.
+#
+#   LINK_FLAGS: Provides additional flags that will be passed to the
+#   linker when linking the test excecutable. This option should not
+#   be used to link in additional libraries; see LINK_LIBS and
+#   DEPENDS.
+#
+#   LINK_LIBS: Provides additional libraries against which the test
+#   executable will be linked. For example, one might provide "expat"
+#   as options to LINK_LIBS, to state that this executable should be
+#   linked against the external "expat" library. Use LINK_LIBS for
+#   libraries external to Boost; for Boost libraries, use DEPENDS.
+#
+#   DEPENDS: States that this test executable depends on and links
+#   against another Boost library. The argument to DEPENDS should be
+#   the name of a particular variant of a Boost library, e.g.,
+#   boost_signals-static.
+#
+# Example:
+#   boost_test_run(signal_test DEPENDS boost_signals-static)
+#
+# TODO: 
+#   - Improve handling of DEPENDS, so that we can specify just the
+#     library's abstract target (e.g., "boost_signals"), and possibly
+#     some features required for building the test (e.g.,
+#     MULTI_THREADED, STATIC). The test macros should then pick the
+#     best library variant available to meet those features and the
+#     current build variant (Debug or Release).
 macro(boost_test_run testname)
   boost_test_parse_args(${testname} ${ARGN})
   if (BOOST_TEST_OKAY)
@@ -92,6 +176,59 @@
   endif(BOOST_TEST_OKAY)
 endmacro(boost_test_run)
 
+# This macro creates a Boost regression test that will be executed. If
+# the test can be built, executed, and exits with a return code that
+# is not zero, it will be considered to have passed.
+#
+#   boost_test_run_fail(testname 
+#                       [source1 source2 ...]
+#                       [ARGS arg1 arg2... ]
+#                       [COMPILE_FLAGS compileflags]
+#                       [LINK_FLAGS linkflags]
+#                       [LINK_LIBS linklibs]
+#                       [DEPENDS libdepend1 libdepend2 ...])
+#
+# testname is the name of the test. source1, source2, etc. are the
+# source files that will be built and linked into the test
+# executable. If no source files are provided, the file "testname.cpp"
+# will be used instead.
+#
+# There are several optional arguments to control how the regression
+# test is built and executed:
+#
+#   ARGS: Provides additional arguments that will be passed to the
+#   test executable when it is run.
+#
+#   COMPILE_FLAGS: Provides additional compilation flags that will be
+#   used when building this test. For example, one might want to add
+#   "-DBOOST_SIGNALS_ASSERT=1" to turn on assertions within the library.
+#
+#   LINK_FLAGS: Provides additional flags that will be passed to the
+#   linker when linking the test excecutable. This option should not
+#   be used to link in additional libraries; see LINK_LIBS and
+#   DEPENDS.
+#
+#   LINK_LIBS: Provides additional libraries against which the test
+#   executable will be linked. For example, one might provide "expat"
+#   as options to LINK_LIBS, to state that this executable should be
+#   linked against the external "expat" library. Use LINK_LIBS for
+#   libraries external to Boost; for Boost libraries, use DEPENDS.
+#
+#   DEPENDS: States that this test executable depends on and links
+#   against another Boost library. The argument to DEPENDS should be
+#   the name of a particular variant of a Boost library, e.g.,
+#   boost_signals-static.
+#
+# Example:
+#   boost_test_run_fail(prg_exec_fail1 DEPENDS boost_prg_exec_monitor-static)
+#
+# TODO: 
+#   - Improve handling of DEPENDS, so that we can specify just the
+#     library's abstract target (e.g., "boost_signals"), and possibly
+#     some features required for building the test (e.g.,
+#     MULTI_THREADED, STATIC). The test macros should then pick the
+#     best library variant available to meet those features and the
+#     current build variant (Debug or Release).
 macro(boost_test_run_fail testname)
   boost_test_parse_args(${testname} ${ARGN})
   if(BOOST_TEST_OKAY)
@@ -99,6 +236,7 @@
     set_target_properties(${testname}
       PROPERTIES
       COMPILE_FLAGS "${BOOST_TEST_COMPILE_FLAGS}"
+      LINK_FLAGS "${BOOST_TEST_LINK_FLAGS}"
       OUTPUT_NAME ${PROJECT_NAME}/${testname})
     target_link_libraries(${testname} ${BOOST_TEST_DEPENDS})
     target_link_libraries(${testname} ${BOOST_TEST_LINK_LIBS})
@@ -109,6 +247,8 @@
   endif(BOOST_TEST_OKAY)
 endmacro(boost_test_run_fail)
 
+# Under construction...
+
 macro(boost_test_link testname)
   boost_test_parse_args(${testname} ${ARGN})
   if(BOOST_TEST_OKAY)
@@ -124,6 +264,23 @@
   endif(BOOST_TEST_OKAY)
 endmacro(boost_test_link)
 
+# This macro creates a Boost regression test that will be compiled,
+# but not linked or executed. If the test can be compiled with no
+# failures, the test passes.
+#
+#   boost_test_compile(testname 
+#                      [source1]
+#                      [COMPILE_FLAGS compileflags])
+#
+# testname is the name of the test. source1 is the name of the source
+# file that will be built. If no source file is provided, the file
+# "testname.cpp" will be used instead.
+#
+# The COMPILE_FLAGS argument provides additional arguments that will
+# be passed to the compiler when building this test.
+
+# Example:
+#   boost_test_compile(advance)
 macro(boost_test_compile testname)
   boost_test_parse_args(${testname} ${ARGN})
 
@@ -148,6 +305,23 @@
   endif(BOOST_TEST_OKAY)
 endmacro(boost_test_compile)
 
+# This macro creates a Boost regression test that will be compiled,
+# but compilation should fail. It is used to test, e.g., that certain
+# disallowed syntax does in fact cause a compilation failure.
+#
+#   boost_test_compile_fail(testname 
+#                           [source1]
+#                           [COMPILE_FLAGS compileflags])
+#
+# testname is the name of the test. source1 is the name of the source
+# file that will be built. If no source file is provided, the file
+# "testname.cpp" will be used instead.
+#
+# The COMPILE_FLAGS argument provides additional arguments that will
+# be passed to the compiler when building this test.
+
+# Example:
+#   boost_test_compile_fail(function_test_fail1)
 macro(boost_test_compile_fail testname)
   boost_test_parse_args(${testname} ${ARGN})