Boost logo

Boost-Commit :

From: daniel_james_at_[hidden]
Date: 2007-12-06 20:12:10


Author: danieljames
Date: 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
New Revision: 41817
URL: http://svn.boost.org/trac/boost/changeset/41817

Log:
Merge from trunk, finally.

Added:
   branches/fix-links/libs/thread/test/shared_mutex_locking_thread.hpp
      - copied unchanged from r41805, /trunk/libs/thread/test/shared_mutex_locking_thread.hpp
   branches/fix-links/libs/thread/test/test_shared_mutex_part_2.cpp
      - copied unchanged from r41805, /trunk/libs/thread/test/test_shared_mutex_part_2.cpp
   branches/fix-links/libs/thread/test/test_thread_move.cpp
      - copied unchanged from r41805, /trunk/libs/thread/test/test_thread_move.cpp
Removed:
   branches/fix-links/more/boost_soc_06_overview.html
   branches/fix-links/more/formal_review_process.htm
Properties modified:
   branches/fix-links/ (props changed)
Text files modified:
   branches/fix-links/Jamroot | 4
   branches/fix-links/boost/archive/impl/basic_binary_iprimitive.ipp | 2
   branches/fix-links/boost/archive/impl/text_iarchive_impl.ipp | 2
   branches/fix-links/boost/asio/detail/socket_ops.hpp | 12 +
   branches/fix-links/boost/dynamic_bitset/dynamic_bitset.hpp | 3
   branches/fix-links/boost/foreach.hpp | 3
   branches/fix-links/boost/function/function_base.hpp | 1
   branches/fix-links/boost/function/function_template.hpp | 9 +
   branches/fix-links/boost/fusion/support/deduce.hpp | 18 ++
   branches/fix-links/boost/interprocess/detail/workaround.hpp | 4
   branches/fix-links/boost/mpi/config.hpp | 4
   branches/fix-links/boost/mpi/datatype.hpp | 6
   branches/fix-links/boost/mpi/detail/mpi_datatype_primitive.hpp | 2
   branches/fix-links/boost/mpi/detail/packed_iprimitive.hpp | 2
   branches/fix-links/boost/mpi/detail/packed_oprimitive.hpp | 2
   branches/fix-links/boost/numeric/ublas/expression_types.hpp | 32 ++--
   branches/fix-links/boost/ptr_container/detail/move.hpp | 9 +
   branches/fix-links/boost/ptr_container/detail/reversible_ptr_container.hpp | 11 +
   branches/fix-links/boost/ptr_container/nullable.hpp | 10 +
   branches/fix-links/boost/python/converter/implicit.hpp | 2
   branches/fix-links/boost/range/detail/sizer.hpp | 6
   branches/fix-links/boost/range/sub_range.hpp | 2
   branches/fix-links/boost/signals/detail/named_slot_map.hpp | 2
   branches/fix-links/boost/test/impl/execution_monitor.ipp | 2
   branches/fix-links/boost/thread/detail/move.hpp | 32 ++-
   branches/fix-links/boost/thread/locks.hpp | 42 ++--
   branches/fix-links/boost/thread/pthread/condition_variable.hpp | 2
   branches/fix-links/boost/thread/pthread/condition_variable_fwd.hpp | 2
   branches/fix-links/boost/thread/pthread/thread.hpp | 18 +-
   branches/fix-links/boost/thread/pthread/tss.hpp | 1
   branches/fix-links/boost/thread/win32/condition_variable.hpp | 4
   branches/fix-links/boost/thread/win32/thread.hpp | 12
   branches/fix-links/boost/wave/cpp_iteration_context.hpp | 1
   branches/fix-links/boost/wave/cpplexer/cpp_lex_interface_generator.hpp | 1
   branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re.hpp | 2
   branches/fix-links/boost/wave/grammars/cpp_chlit_grammar.hpp | 23 ++
   branches/fix-links/boost/wave/grammars/cpp_defined_grammar.hpp | 3
   branches/fix-links/boost/wave/grammars/cpp_expression_grammar.hpp | 3
   branches/fix-links/boost/wave/grammars/cpp_expression_value.hpp | 21 +-
   branches/fix-links/boost/wave/grammars/cpp_intlit_grammar.hpp | 3
   branches/fix-links/boost/wave/util/cpp_macromap_predef.hpp | 1
   branches/fix-links/boost/wave/util/cpp_macromap_utils.hpp | 3
   branches/fix-links/boost/wave/util/insert_whitespace_detection.hpp | 12
   branches/fix-links/boost/wave/util/symbol_table.hpp | 2
   branches/fix-links/boost/wave/util/time_conversion_helper.hpp | 1
   branches/fix-links/boost/wave/util/unput_queue_iterator.hpp | 10
   branches/fix-links/boost/wave/wave_config.hpp | 7
   branches/fix-links/boost/wave/whitespace_handling.hpp | 1
   branches/fix-links/boost/xpressive/proto/context/default.hpp | 3
   branches/fix-links/libs/conversion/lexical_cast.htm | 15 +
   branches/fix-links/libs/foreach/test/rvalue_const.cpp | 3
   branches/fix-links/libs/function_types/example/interpreter.hpp | 3
   branches/fix-links/libs/function_types/test/custom_ccs/member_ccs.cpp | 2
   branches/fix-links/libs/function_types/test/custom_ccs/member_ccs_exact.cpp | 2
   branches/fix-links/libs/function_types/test/custom_ccs/nonmember_ccs.cpp | 2
   branches/fix-links/libs/function_types/test/custom_ccs/nonmember_ccs_exact.cpp | 2
   branches/fix-links/libs/gil/doc/index.html | 2
   branches/fix-links/libs/signals/src/named_slot_map.cpp | 2
   branches/fix-links/libs/thread/src/pthread/thread.cpp | 31 ++++
   branches/fix-links/libs/thread/src/win32/thread.cpp | 26 +-
   branches/fix-links/libs/thread/test/Jamfile.v2 | 2
   branches/fix-links/libs/thread/test/test_mutex.cpp | 14 +
   branches/fix-links/libs/thread/test/test_shared_mutex.cpp | 310 ---------------------------------------
   branches/fix-links/libs/utility/value_init_test.cpp | 12 +
   branches/fix-links/libs/wave/ChangeLog | 5
   branches/fix-links/libs/wave/doc/class_reference_context.html | 28 +-
   branches/fix-links/libs/wave/doc/class_reference_ctxpolicy.html | 6
   branches/fix-links/libs/wave/doc/introduction.html | 4
   branches/fix-links/libs/wave/doc/preface.html | 11
   branches/fix-links/libs/wave/doc/quickstart.html | 8
   branches/fix-links/libs/wave/index.html | 5
   branches/fix-links/status/explicit-failures-markup.xml | 38 ++++
   branches/fix-links/tools/boostbook/xsl/annotation.xsl | 22 +-
   branches/fix-links/tools/boostbook/xsl/chunk-common.xsl | 3
   branches/fix-links/tools/boostbook/xsl/lookup.xsl | 16 -
   branches/fix-links/tools/boostbook/xsl/type.xsl | 46 ++++-
   branches/fix-links/tools/boostbook/xsl/utility.xsl | 5
   branches/fix-links/tools/build/v2/roll.sh | 13 +
   branches/fix-links/tools/build/v2/tools/darwin.jam | 125 +++++++++++++++-
   branches/fix-links/tools/build/v2/tools/msvc.jam | 8
   branches/fix-links/tools/build/v2/tools/pgi.jam | 10
   branches/fix-links/tools/jam/doc/bjam.qbk | 4
   branches/fix-links/tools/jam/doc/history.qbk | 4
   branches/fix-links/tools/jam/src/boost-jam.spec | 2
   branches/fix-links/tools/jam/src/build.jam | 2
   branches/fix-links/tools/jam/src/execnt.c | 2
   branches/fix-links/tools/jam/src/patchlevel.h | 6
   branches/fix-links/tools/regression/src/collect_and_upload_logs.py | 38 +++-
   branches/fix-links/tools/regression/src/regression.py | 41 +++-
   branches/fix-links/tools/regression/xsl_reports/boost_wide_report.py | 4
   90 files changed, 673 insertions(+), 571 deletions(-)

Modified: branches/fix-links/Jamroot
==============================================================================
--- branches/fix-links/Jamroot (original)
+++ branches/fix-links/Jamroot 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -320,8 +320,10 @@
             # On OSX, version suffix is not needed -- the linker expets
             # libFoo.1.2.3.dylib format.
             # AIX linkers don't accept version suffixes either.
+ # Pgi compilers can't accept library with version suffix
             if $(type) = SHARED_LIB &&
- ! ( [ $(property-set).get <target-os> ] in windows cygwin darwin aix )
+ ( ! ( [ $(property-set).get <target-os> ] in windows cygwin darwin aix ) &&
+ ! ( [ $(property-set).get <toolset> ] in pgi ) )
             {
                 result = $(result).$(BOOST_VERSION) ;
             }

Modified: branches/fix-links/boost/archive/impl/basic_binary_iprimitive.ipp
==============================================================================
--- branches/fix-links/boost/archive/impl/basic_binary_iprimitive.ipp (original)
+++ branches/fix-links/boost/archive/impl/basic_binary_iprimitive.ipp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -95,7 +95,7 @@
     #endif
         s.resize(l);
     // note breaking a rule here - could be a problem on some platform
- load_binary(const_cast<char *>(s.data()), l);
+ load_binary(&(*s.begin()), l);
 }
 
 #ifndef BOOST_NO_CWCHAR

Modified: branches/fix-links/boost/archive/impl/text_iarchive_impl.ipp
==============================================================================
--- branches/fix-links/boost/archive/impl/text_iarchive_impl.ipp (original)
+++ branches/fix-links/boost/archive/impl/text_iarchive_impl.ipp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -53,7 +53,7 @@
     if(NULL != s.data())
     #endif
         s.resize(size);
- is.read(const_cast<char *>(s.data()), size);
+ is.read(&(*s.begin()), size);
 }
 
 #ifndef BOOST_NO_CWCHAR

Modified: branches/fix-links/boost/asio/detail/socket_ops.hpp
==============================================================================
--- branches/fix-links/boost/asio/detail/socket_ops.hpp (original)
+++ branches/fix-links/boost/asio/detail/socket_ops.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -1125,8 +1125,12 @@
 inline void gai_strcpy(char* target, const char* source, std::size_t max_size)
 {
   using namespace std;
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
+ strcpy_s(target, max_size, source);
+#else
   *target = 0;
   strncat(target, source, max_size);
+#endif
 }
 
 enum { gai_clone_flag = 1 << 30 };
@@ -1659,7 +1663,11 @@
       {
         return ec = boost::asio::error::no_buffer_space;
       }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
+ sprintf_s(serv, servlen, "%u", ntohs(port));
+#else
       sprintf(serv, "%u", ntohs(port));
+#endif
     }
     else
     {
@@ -1678,7 +1686,11 @@
         {
           return ec = boost::asio::error::no_buffer_space;
         }
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) && !defined(UNDER_CE)
+ sprintf_s(serv, servlen, "%u", ntohs(port));
+#else
         sprintf(serv, "%u", ntohs(port));
+#endif
       }
 #if defined(BOOST_HAS_THREADS) && defined(BOOST_HAS_PTHREADS)
       ::pthread_mutex_unlock(&mutex);

Modified: branches/fix-links/boost/dynamic_bitset/dynamic_bitset.hpp
==============================================================================
--- branches/fix-links/boost/dynamic_bitset/dynamic_bitset.hpp (original)
+++ branches/fix-links/boost/dynamic_bitset/dynamic_bitset.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -1087,7 +1087,8 @@
 
     assert((size_type)bits_per_block * i < (size_type)ulong_width);
 
- result |= (m_bits[i] << (bits_per_block * i));
+ unsigned long piece = m_bits[i];
+ result |= (piece << (bits_per_block * i));
   }
 
   return result;

Modified: branches/fix-links/boost/foreach.hpp
==============================================================================
--- branches/fix-links/boost/foreach.hpp (original)
+++ branches/fix-links/boost/foreach.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -14,6 +14,7 @@
 // Russell Hind - For help porting to Borland
 // Alisdair Meredith - For help porting to Borland
 // Stefan Slapeta - For help porting to Intel
+// David Jenkins - For help finding a Microsoft Code Analysis bug
 
 #ifndef BOOST_FOREACH
 
@@ -29,7 +30,7 @@
 #include <boost/detail/workaround.hpp>
 
 // Some compilers let us detect even const-qualified rvalues at compile-time
-#if BOOST_WORKAROUND(BOOST_MSVC, >= 1310) \
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1310) && !defined(_PREFAST_) \
  || (BOOST_WORKAROUND(__GNUC__, >= 4) && !defined(BOOST_INTEL)) \
  || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ >= 4) && !defined(BOOST_INTEL))
 # define BOOST_FOREACH_COMPILE_TIME_CONST_RVALUE_DETECTION

Modified: branches/fix-links/boost/function/function_base.hpp
==============================================================================
--- branches/fix-links/boost/function/function_base.hpp (original)
+++ branches/fix-links/boost/function/function_base.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -33,6 +33,7 @@
 #if defined(BOOST_MSVC)
 # pragma warning( push )
 # pragma warning( disable : 4793 ) // complaint about native code generation
+# pragma warning( disable : 4127 ) // "conditional expression is constant"
 #endif
 
 // Define BOOST_FUNCTION_STD_NS to the namespace that contains type_info.

Modified: branches/fix-links/boost/function/function_template.hpp
==============================================================================
--- branches/fix-links/boost/function/function_template.hpp (original)
+++ branches/fix-links/boost/function/function_template.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -11,6 +11,11 @@
 // protection.
 #include <boost/function/detail/prologue.hpp>
 
+#if defined(BOOST_MSVC)
+# pragma warning( push )
+# pragma warning( disable : 4127 ) // "conditional expression is constant"
+#endif
+
 #define BOOST_FUNCTION_TEMPLATE_PARMS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, typename T)
 
 #define BOOST_FUNCTION_TEMPLATE_ARGS BOOST_PP_ENUM_PARAMS(BOOST_FUNCTION_NUM_ARGS, T)
@@ -958,3 +963,7 @@
 #undef BOOST_FUNCTION_ARG_TYPES
 #undef BOOST_FUNCTION_VOID_RETURN_TYPE
 #undef BOOST_FUNCTION_RETURN
+
+#if defined(BOOST_MSVC)
+# pragma warning( pop )
+#endif

Modified: branches/fix-links/boost/fusion/support/deduce.hpp
==============================================================================
--- branches/fix-links/boost/fusion/support/deduce.hpp (original)
+++ branches/fix-links/boost/fusion/support/deduce.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -25,6 +25,24 @@
         typedef T type;
     };
 
+ template <typename T>
+ struct deduce<T const>
+ {
+ typedef T type;
+ };
+
+ template <typename T>
+ struct deduce<T volatile>
+ {
+ typedef T type;
+ };
+
+ template <typename T>
+ struct deduce<T const volatile>
+ {
+ typedef T type;
+ };
+
     // Keep references on mutable LValues
 
     template <typename T>

Modified: branches/fix-links/boost/interprocess/detail/workaround.hpp
==============================================================================
--- branches/fix-links/boost/interprocess/detail/workaround.hpp (original)
+++ branches/fix-links/boost/interprocess/detail/workaround.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -19,7 +19,9 @@
 
    #if defined(_POSIX_THREAD_PROCESS_SHARED)
    # if !((_XOPEN_VERSION >= 600) && (_POSIX_THREAD_PROCESS_SHARED - 0 <= 0))
- # if !defined(__CYGWIN__)
+ // Cygwin defines _POSIX_THREAD_PROCESS_SHARED but does not support it.
+ // Mac Os X >= Leopard defines _POSIX_THREAD_PROCESS_SHARED but it does not seem to work
+ # if !defined(__CYGWIN__) && !defined(__APPLE__)
    # define BOOST_INTERPROCESS_POSIX_PROCESS_SHARED
    # endif
    # endif

Modified: branches/fix-links/boost/mpi/config.hpp
==============================================================================
--- branches/fix-links/boost/mpi/config.hpp (original)
+++ branches/fix-links/boost/mpi/config.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -13,6 +13,10 @@
 #ifndef BOOST_MPI_CONFIG_HPP
 #define BOOST_MPI_CONFIG_HPP
 
+/* Force MPICH not to define SEEK_SET, SEEK_CUR, and SEEK_END, which
+ conflict with the versions in <stdio.h> and <cstdio>. */
+#define MPICH_IGNORE_CXX_SEEK 1
+
 #include <mpi.h>
 #include <boost/config.hpp>
 

Modified: branches/fix-links/boost/mpi/datatype.hpp
==============================================================================
--- branches/fix-links/boost/mpi/datatype.hpp (original)
+++ branches/fix-links/boost/mpi/datatype.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -25,6 +25,7 @@
 #include <boost/mpl/or.hpp>
 #include <boost/mpi/detail/mpi_datatype_cache.hpp>
 #include <boost/mpl/assert.hpp>
+#include <utility> // for std::pair
 
 namespace boost { namespace mpi {
 
@@ -289,6 +290,11 @@
   : boost::mpl::bool_<true>
 {};
 
+/// INTERNAL ONLY
+template<typename T, typename U>
+struct is_mpi_datatype<std::pair<T, U> >
+ : mpl::and_<is_mpi_datatype<T>, is_mpi_datatype<U> > { };
+
 } } // end namespace boost::mpi
 
 #endif // BOOST_MPI_MPI_DATATYPE_HPP

Modified: branches/fix-links/boost/mpi/detail/mpi_datatype_primitive.hpp
==============================================================================
--- branches/fix-links/boost/mpi/detail/mpi_datatype_primitive.hpp (original)
+++ branches/fix-links/boost/mpi/detail/mpi_datatype_primitive.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -9,7 +9,7 @@
 #ifndef BOOST_MPI_DETAIL_MPI_DATATYPE_OPRIMITIVE_HPP
 #define BOOST_MPI_DETAIL_MPI_DATATYPE_OPRIMITIVE_HPP
 
-#include <mpi.h>
+#include <boost/mpi/config.hpp>
 #include <cstddef> // size_t
 
 #include <boost/config.hpp>

Modified: branches/fix-links/boost/mpi/detail/packed_iprimitive.hpp
==============================================================================
--- branches/fix-links/boost/mpi/detail/packed_iprimitive.hpp (original)
+++ branches/fix-links/boost/mpi/detail/packed_iprimitive.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -9,7 +9,7 @@
 #ifndef BOOST_MPI_PACKED_IPRIMITIVE_HPP
 #define BOOST_MPI_PACKED_IPRIMITIVE_HPP
 
-#include <mpi.h>
+#include <boost/mpi/config.hpp>
 #include <iostream>
 #include <cstddef> // size_t
 #include <boost/config.hpp>

Modified: branches/fix-links/boost/mpi/detail/packed_oprimitive.hpp
==============================================================================
--- branches/fix-links/boost/mpi/detail/packed_oprimitive.hpp (original)
+++ branches/fix-links/boost/mpi/detail/packed_oprimitive.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -9,7 +9,7 @@
 #ifndef BOOST_MPI_PACKED_OPRIMITIVE_HPP
 #define BOOST_MPI_PACKED_OPRIMITIVE_HPP
 
-#include <mpi.h>
+#include <boost/mpi/config.hpp>
 #include <iostream>
 #include <cstddef> // size_t
 #include <boost/config.hpp>

Modified: branches/fix-links/boost/numeric/ublas/expression_types.hpp
==============================================================================
--- branches/fix-links/boost/numeric/ublas/expression_types.hpp (original)
+++ branches/fix-links/boost/numeric/ublas/expression_types.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -217,13 +217,13 @@
         }
         template<class A>
         BOOST_UBLAS_INLINE
- const vector_indirect<const E, A> operator () (const indirect_array<A> &ia) const {
- return vector_indirect<const E, A> (operator () (), ia);
+ const vector_indirect<const E, indirect_array<A> > operator () (const indirect_array<A> &ia) const {
+ return vector_indirect<const E, indirect_array<A> > (operator () (), ia);
         }
         template<class A>
         BOOST_UBLAS_INLINE
- vector_indirect<E, A> operator () (const indirect_array<A> &ia) {
- return vector_indirect<E, A> (operator () (), ia);
+ vector_indirect<E, indirect_array<A> > operator () (const indirect_array<A> &ia) {
+ return vector_indirect<E, indirect_array<A> > (operator () (), ia);
         }
 
         BOOST_UBLAS_INLINE
@@ -244,13 +244,13 @@
         }
         template<class A>
         BOOST_UBLAS_INLINE
- const vector_indirect<const E, A> project (const indirect_array<A> &ia) const {
- return vector_indirect<const E, A> (operator () (), ia);
+ const vector_indirect<const E, indirect_array<A> > project (const indirect_array<A> &ia) const {
+ return vector_indirect<const E, indirect_array<A> > (operator () (), ia);
         }
         template<class A>
         BOOST_UBLAS_INLINE
- vector_indirect<E, A> project (const indirect_array<A> &ia) {
- return vector_indirect<E, A> (operator () (), ia);
+ vector_indirect<E, indirect_array<A> > project (const indirect_array<A> &ia) {
+ return vector_indirect<E, indirect_array<A> > (operator () (), ia);
         }
 #endif
     };
@@ -371,13 +371,13 @@
         }
         template<class A>
         BOOST_UBLAS_INLINE
- const matrix_indirect<const E, A> operator () (const indirect_array<A> &ia1, const indirect_array<A> &ia2) const {
- return matrix_indirect<const E, A> (operator () (), ia1, ia2);
+ const matrix_indirect<const E, indirect_array<A> > operator () (const indirect_array<A> &ia1, const indirect_array<A> &ia2) const {
+ return matrix_indirect<const E, indirect_array<A> > (operator () (), ia1, ia2);
         }
         template<class A>
         BOOST_UBLAS_INLINE
- matrix_indirect<E, A> operator () (const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
- return matrix_indirect<E, A> (operator () (), ia1, ia2);
+ matrix_indirect<E, indirect_array<A> > operator () (const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
+ return matrix_indirect<E, indirect_array<A> > (operator () (), ia1, ia2);
         }
 
         BOOST_UBLAS_INLINE
@@ -398,13 +398,13 @@
         }
         template<class A>
         BOOST_UBLAS_INLINE
- const matrix_indirect<const E, A> project (const indirect_array<A> &ia1, const indirect_array<A> &ia2) const {
- return matrix_indirect<const E, A> (operator () (), ia1, ia2);
+ const matrix_indirect<const E, indirect_array<A> > project (const indirect_array<A> &ia1, const indirect_array<A> &ia2) const {
+ return matrix_indirect<const E, indirect_array<A> > (operator () (), ia1, ia2);
         }
         template<class A>
         BOOST_UBLAS_INLINE
- matrix_indirect<E, A> project (const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
- return matrix_indirect<E, A> (operator () (), ia1, ia2);
+ matrix_indirect<E, indirect_array<A> > project (const indirect_array<A> &ia1, const indirect_array<A> &ia2) {
+ return matrix_indirect<E, indirect_array<A> > (operator () (), ia1, ia2);
         }
 #endif
     };

Modified: branches/fix-links/boost/ptr_container/detail/move.hpp
==============================================================================
--- branches/fix-links/boost/ptr_container/detail/move.hpp (original)
+++ branches/fix-links/boost/ptr_container/detail/move.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -12,6 +12,11 @@
 
 namespace move_ptrs {
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4512)
+#endif
+
 template<typename Ptr>
 class move_source {
 public:
@@ -22,6 +27,10 @@
     move_source(const Ptr&);
 };
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
 } // End namespace move_ptrs.
 
 

Modified: branches/fix-links/boost/ptr_container/detail/reversible_ptr_container.hpp
==============================================================================
--- branches/fix-links/boost/ptr_container/detail/reversible_ptr_container.hpp (original)
+++ branches/fix-links/boost/ptr_container/detail/reversible_ptr_container.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -38,9 +38,14 @@
 #include <typeinfo>
 #include <memory>
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:4127)
+#endif
+
 namespace boost
 {
-
+
 namespace ptr_container_detail
 {
     template< class CloneAllocator >
@@ -648,4 +653,8 @@
 
 } // namespace 'boost'
 
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
 #endif

Modified: branches/fix-links/boost/ptr_container/nullable.hpp
==============================================================================
--- branches/fix-links/boost/ptr_container/nullable.hpp (original)
+++ branches/fix-links/boost/ptr_container/nullable.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -45,8 +45,18 @@
     private:
             BOOST_STATIC_CONSTANT( T*, var );
     public:
+
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(push)
+#pragma warning(disable:6334)
+#endif
+
             BOOST_STATIC_CONSTANT(bool, value = sizeof( ptr_container_detail::is_nullable( var ) )
                                                 == sizeof( type_traits::yes_type ) );
+#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
+#pragma warning(pop)
+#endif
+
     };
     
     template< class T >

Modified: branches/fix-links/boost/python/converter/implicit.hpp
==============================================================================
--- branches/fix-links/boost/python/converter/implicit.hpp (original)
+++ branches/fix-links/boost/python/converter/implicit.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -32,7 +32,7 @@
 
         arg_from_python<Source> get_source(obj);
         bool convertible = get_source.convertible();
- BOOST_ASSERT(convertible);
+ BOOST_VERIFY(convertible);
         
         new (storage) Target(get_source());
         

Modified: branches/fix-links/boost/range/detail/sizer.hpp
==============================================================================
--- branches/fix-links/boost/range/detail/sizer.hpp (original)
+++ branches/fix-links/boost/range/detail/sizer.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -25,12 +25,10 @@
     //////////////////////////////////////////////////////////////////////
     
     template< typename T, std::size_t sz >
- char&
- sizer( const T BOOST_RANGE_ARRAY_REF()[sz] )[sz];
+ char (& sizer( const T BOOST_RANGE_ARRAY_REF()[sz] ) )[sz];
     
     template< typename T, std::size_t sz >
- char&
- sizer( T BOOST_RANGE_ARRAY_REF()[sz] )[sz];
+ char (& sizer( T BOOST_RANGE_ARRAY_REF()[sz] ) )[sz];
 
 } // namespace 'boost'
 

Modified: branches/fix-links/boost/range/sub_range.hpp
==============================================================================
--- branches/fix-links/boost/range/sub_range.hpp (original)
+++ branches/fix-links/boost/range/sub_range.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -11,6 +11,8 @@
 #ifndef BOOST_RANGE_SUB_RANGE_HPP
 #define BOOST_RANGE_SUB_RANGE_HPP
 
+#include <boost/detail/workaround.hpp>
+
 #if BOOST_WORKAROUND(BOOST_MSVC, == 1310) || BOOST_WORKAROUND(BOOST_MSVC, == 1400)
     #pragma warning( disable : 4996 )
 #endif

Modified: branches/fix-links/boost/signals/detail/named_slot_map.hpp
==============================================================================
--- branches/fix-links/boost/signals/detail/named_slot_map.hpp (original)
+++ branches/fix-links/boost/signals/detail/named_slot_map.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -127,7 +127,7 @@
         || slot_ == other.slot_));
   }
 
-#if BOOST_WORKAROUND(_MSC_VER, <= 1400)
+#if BOOST_WORKAROUND(_MSC_VER, <= 1500)
   void decrement();
   void advance(difference_type);
 #endif

Modified: branches/fix-links/boost/test/impl/execution_monitor.ipp
==============================================================================
--- branches/fix-links/boost/test/impl/execution_monitor.ipp (original)
+++ branches/fix-links/boost/test/impl/execution_monitor.ipp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -51,7 +51,7 @@
 #endif
 
 // to use vsnprintf
-#if defined(__SUNPRO_CC) && defined(__SunOS)
+#if defined(__SUNPRO_CC) || defined(__SunOS)
 # include <stdio.h>
 # include <stdarg.h>
 using std::va_list;

Modified: branches/fix-links/boost/thread/detail/move.hpp
==============================================================================
--- branches/fix-links/boost/thread/detail/move.hpp (original)
+++ branches/fix-links/boost/thread/detail/move.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -8,25 +8,29 @@
 
 namespace boost
 {
- template<typename T>
- struct move_t
+ namespace detail
     {
- T& t;
- move_t(T& t_):
- t(t_)
- {}
+ template<typename T>
+ struct thread_move_t
+ {
+ T& t;
+ thread_move_t(T& t_):
+ t(t_)
+ {}
+
+ T* operator->() const
+ {
+ return &t;
+ }
+ };
 
- T* operator->() const
+ template<typename T>
+ thread_move_t<T> thread_move(T& t)
         {
- return &t;
+ return thread_move_t<T>(t);
         }
- };
-
- template<typename T>
- move_t<T> move(T& t)
- {
- return move_t<T>(t);
     }
+
 }
 
 

Modified: branches/fix-links/boost/thread/locks.hpp
==============================================================================
--- branches/fix-links/boost/thread/locks.hpp (original)
+++ branches/fix-links/boost/thread/locks.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -86,21 +86,21 @@
         {
             timed_lock(target_time);
         }
- unique_lock(boost::move_t<unique_lock<Mutex> > other):
+ unique_lock(detail::thread_move_t<unique_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
         }
- unique_lock(boost::move_t<upgrade_lock<Mutex> > other);
+ unique_lock(detail::thread_move_t<upgrade_lock<Mutex> > other);
 
- unique_lock& operator=(boost::move_t<unique_lock<Mutex> > other)
+ unique_lock& operator=(detail::thread_move_t<unique_lock<Mutex> > other)
         {
             unique_lock temp(other);
             swap(temp);
             return *this;
         }
 
- unique_lock& operator=(boost::move_t<upgrade_lock<Mutex> > other)
+ unique_lock& operator=(detail::thread_move_t<upgrade_lock<Mutex> > other)
         {
             unique_lock temp(other);
             swap(temp);
@@ -112,7 +112,7 @@
             std::swap(m,other.m);
             std::swap(is_locked,other.is_locked);
         }
- void swap(boost::move_t<unique_lock<Mutex> > other)
+ void swap(detail::thread_move_t<unique_lock<Mutex> > other)
         {
             std::swap(m,other->m);
             std::swap(is_locked,other->is_locked);
@@ -228,13 +228,13 @@
             timed_lock(target_time);
         }
 
- shared_lock(boost::move_t<shared_lock<Mutex> > other):
+ shared_lock(detail::thread_move_t<shared_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
         }
 
- shared_lock(boost::move_t<unique_lock<Mutex> > other):
+ shared_lock(detail::thread_move_t<unique_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
@@ -244,7 +244,7 @@
             }
         }
 
- shared_lock(boost::move_t<upgrade_lock<Mutex> > other):
+ shared_lock(detail::thread_move_t<upgrade_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
@@ -254,21 +254,21 @@
             }
         }
 
- shared_lock& operator=(boost::move_t<shared_lock<Mutex> > other)
+ shared_lock& operator=(detail::thread_move_t<shared_lock<Mutex> > other)
         {
             shared_lock temp(other);
             swap(temp);
             return *this;
         }
 
- shared_lock& operator=(boost::move_t<unique_lock<Mutex> > other)
+ shared_lock& operator=(detail::thread_move_t<unique_lock<Mutex> > other)
         {
             shared_lock temp(other);
             swap(temp);
             return *this;
         }
 
- shared_lock& operator=(boost::move_t<upgrade_lock<Mutex> > other)
+ shared_lock& operator=(detail::thread_move_t<upgrade_lock<Mutex> > other)
         {
             shared_lock temp(other);
             swap(temp);
@@ -364,13 +364,13 @@
                 lock();
             }
         }
- upgrade_lock(boost::move_t<upgrade_lock<Mutex> > other):
+ upgrade_lock(detail::thread_move_t<upgrade_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
         }
 
- upgrade_lock(boost::move_t<unique_lock<Mutex> > other):
+ upgrade_lock(detail::thread_move_t<unique_lock<Mutex> > other):
             m(other->m),is_locked(other->is_locked)
         {
             other->is_locked=false;
@@ -380,14 +380,14 @@
             }
         }
 
- upgrade_lock& operator=(boost::move_t<upgrade_lock<Mutex> > other)
+ upgrade_lock& operator=(detail::thread_move_t<upgrade_lock<Mutex> > other)
         {
             upgrade_lock temp(other);
             swap(temp);
             return *this;
         }
 
- upgrade_lock& operator=(boost::move_t<unique_lock<Mutex> > other)
+ upgrade_lock& operator=(detail::thread_move_t<unique_lock<Mutex> > other)
         {
             upgrade_lock temp(other);
             swap(temp);
@@ -453,7 +453,7 @@
     };
 
     template<typename Mutex>
- unique_lock<Mutex>::unique_lock(boost::move_t<upgrade_lock<Mutex> > other):
+ unique_lock<Mutex>::unique_lock(detail::thread_move_t<upgrade_lock<Mutex> > other):
         m(other->m),is_locked(other->is_locked)
     {
         other->is_locked=false;
@@ -474,23 +474,23 @@
         upgrade_to_unique_lock& operator=(upgrade_to_unique_lock&);
     public:
         explicit upgrade_to_unique_lock(upgrade_lock<Mutex>& m_):
- source(&m_),exclusive(boost::move(*source))
+ source(&m_),exclusive(detail::thread_move(*source))
         {}
         ~upgrade_to_unique_lock()
         {
             if(source)
             {
- *source=boost::move(exclusive);
+ *source=detail::thread_move(exclusive);
             }
         }
 
- upgrade_to_unique_lock(boost::move_t<upgrade_to_unique_lock<Mutex> > other):
- source(other->source),exclusive(boost::move(other->exclusive))
+ upgrade_to_unique_lock(detail::thread_move_t<upgrade_to_unique_lock<Mutex> > other):
+ source(other->source),exclusive(detail::thread_move(other->exclusive))
         {
             other->source=0;
         }
         
- upgrade_to_unique_lock& operator=(boost::move_t<upgrade_to_unique_lock<Mutex> > other)
+ upgrade_to_unique_lock& operator=(detail::thread_move_t<upgrade_to_unique_lock<Mutex> > other)
         {
             upgrade_to_unique_lock temp(other);
             swap(temp);

Modified: branches/fix-links/boost/thread/pthread/condition_variable.hpp
==============================================================================
--- branches/fix-links/boost/thread/pthread/condition_variable.hpp (original)
+++ branches/fix-links/boost/thread/pthread/condition_variable.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -143,7 +143,7 @@
             while (!pred())
             {
                 if(!timed_wait(m, wait_until))
- return false;
+ return pred();
             }
             return true;
         }

Modified: branches/fix-links/boost/thread/pthread/condition_variable_fwd.hpp
==============================================================================
--- branches/fix-links/boost/thread/pthread/condition_variable_fwd.hpp (original)
+++ branches/fix-links/boost/thread/pthread/condition_variable_fwd.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -41,7 +41,7 @@
             while (!pred())
             {
                 if(!timed_wait(m, wait_until))
- return false;
+ return pred();
             }
             return true;
         }

Modified: branches/fix-links/boost/thread/pthread/thread.hpp
==============================================================================
--- branches/fix-links/boost/thread/pthread/thread.hpp (original)
+++ branches/fix-links/boost/thread/pthread/thread.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -97,7 +97,7 @@
             thread_data(F f_):
                 f(f_)
             {}
- thread_data(boost::move_t<F> f_):
+ thread_data(detail::thread_move_t<F> f_):
                 f(f_)
             {}
             
@@ -127,16 +127,16 @@
             start_thread();
         }
         template <class F>
- thread(boost::move_t<F> f):
+ thread(detail::thread_move_t<F> f):
             thread_info(new thread_data<F>(f))
         {
             start_thread();
         }
 
- explicit thread(boost::move_t<thread> x);
- thread& operator=(boost::move_t<thread> x);
- operator boost::move_t<thread>();
- boost::move_t<thread> move();
+ thread(detail::thread_move_t<thread> x);
+ thread& operator=(detail::thread_move_t<thread> x);
+ operator detail::thread_move_t<thread>();
+ detail::thread_move_t<thread> move();
 
         void swap(thread& x);
 
@@ -208,7 +208,7 @@
             ~restore_interruption();
         };
 
- BOOST_THREAD_DECL inline thread::id get_id()
+ inline thread::id get_id()
         {
             return thread::id(pthread_self());
         }
@@ -217,13 +217,13 @@
         BOOST_THREAD_DECL bool interruption_enabled();
         BOOST_THREAD_DECL bool interruption_requested();
 
- BOOST_THREAD_DECL inline void yield()
+ inline void yield()
         {
             thread::yield();
         }
         
         template<typename TimeDuration>
- BOOST_THREAD_DECL inline void sleep(TimeDuration const& rel_time)
+ inline void sleep(TimeDuration const& rel_time)
         {
             thread::sleep(get_system_time()+rel_time);
         }

Modified: branches/fix-links/boost/thread/pthread/tss.hpp
==============================================================================
--- branches/fix-links/boost/thread/pthread/tss.hpp (original)
+++ branches/fix-links/boost/thread/pthread/tss.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -6,6 +6,7 @@
 // http://www.boost.org/LICENSE_1_0.txt)
 // (C) Copyright 2007 Anthony Williams
 
+#include <boost/thread/detail/config.hpp>
 #include <boost/shared_ptr.hpp>
 
 namespace boost

Modified: branches/fix-links/boost/thread/win32/condition_variable.hpp
==============================================================================
--- branches/fix-links/boost/thread/win32/condition_variable.hpp (original)
+++ branches/fix-links/boost/thread/win32/condition_variable.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -186,7 +186,7 @@
                 while (!pred())
                 {
                     if(!do_wait(m, wait_until))
- return false;
+ return pred();
                 }
                 return true;
             }
@@ -330,7 +330,7 @@
         template<typename lock_type,typename duration_type,typename predicate_type>
         bool timed_wait(lock_type& m,duration_type const& wait_duration,predicate_type pred)
         {
- return timed_wait(m,wait_duration.total_milliseconds(),pred);
+ return do_wait(m,wait_duration.total_milliseconds(),pred);
         }
     };
 

Modified: branches/fix-links/boost/thread/win32/thread.hpp
==============================================================================
--- branches/fix-links/boost/thread/win32/thread.hpp (original)
+++ branches/fix-links/boost/thread/win32/thread.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -169,7 +169,7 @@
             thread_data(F f_):
                 f(f_)
             {}
- thread_data(boost::move_t<F> f_):
+ thread_data(detail::thread_move_t<F> f_):
                 f(f_)
             {}
             
@@ -200,16 +200,16 @@
             start_thread();
         }
         template <class F>
- explicit thread(boost::move_t<F> f):
+ thread(detail::thread_move_t<F> f):
             thread_info(detail::heap_new<thread_data<F> >(f))
         {
             start_thread();
         }
 
- thread(boost::move_t<thread> x);
- thread& operator=(boost::move_t<thread> x);
- operator boost::move_t<thread>();
- boost::move_t<thread> move();
+ thread(detail::thread_move_t<thread> x);
+ thread& operator=(detail::thread_move_t<thread> x);
+ operator detail::thread_move_t<thread>();
+ detail::thread_move_t<thread> move();
 
         void swap(thread& x);
 

Modified: branches/fix-links/boost/wave/cpp_iteration_context.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpp_iteration_context.hpp (original)
+++ branches/fix-links/boost/wave/cpp_iteration_context.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -22,6 +22,7 @@
 #include <boost/wave/cpp_exceptions.hpp>
 #include <boost/wave/language_support.hpp>
 #include <boost/wave/util/file_position.hpp>
+#include <boost/spirit/iterator/multi_pass.hpp> // make_multi_pass
 
 // this must occur after all of the includes and before any code appears
 #ifdef BOOST_HAS_ABI_HEADERS

Modified: branches/fix-links/boost/wave/cpplexer/cpp_lex_interface_generator.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/cpp_lex_interface_generator.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/cpp_lex_interface_generator.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -17,6 +17,7 @@
 #include <boost/wave/util/file_position.hpp>
 #include <boost/wave/language_support.hpp>
 #include <boost/wave/cpplexer/cpp_lex_interface.hpp>
+#include <boost/wave/cpplexer/cpp_lex_token.hpp> // lex_token
 
 // this must occur after all of the includes and before any code appears
 #ifdef BOOST_HAS_ABI_HEADERS

Modified: branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re.hpp
==============================================================================
--- branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re.hpp (original)
+++ branches/fix-links/boost/wave/cpplexer/re2clex/cpp_re.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -33,6 +33,8 @@
 namespace cpplexer {
 namespace re2clex {
 
+struct Scanner;
+
 ///////////////////////////////////////////////////////////////////////////////
 // The scanner function to call whenever a new token is requested
 BOOST_WAVE_DECL boost::wave::token_id scan(Scanner *s);

Modified: branches/fix-links/boost/wave/grammars/cpp_chlit_grammar.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_chlit_grammar.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_chlit_grammar.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -14,22 +14,37 @@
 #include <limits> // std::numeric_limits
 #include <climits> // CHAR_BIT
 
+#include <boost/wave/wave_config.hpp>
+
 #include <boost/static_assert.hpp>
 #include <boost/cstdint.hpp>
 
 #include <boost/spirit/core.hpp>
 #include <boost/spirit/attribute/closure.hpp>
 #include <boost/spirit/dynamic/if.hpp>
+#if SPIRIT_VERSION >= 0x1700
+#include <boost/spirit/actor/assign_actor.hpp>
+#include <boost/spirit/actor/push_back_actor.hpp>
+#endif // SPIRIT_VERSION >= 0x1700
 
 #include <boost/spirit/phoenix/operators.hpp>
 #include <boost/spirit/phoenix/primitives.hpp>
 #include <boost/spirit/phoenix/statements.hpp>
 #include <boost/spirit/phoenix/functions.hpp>
 
-#include <boost/wave/wave_config.hpp>
 #include <boost/wave/cpp_exceptions.hpp>
 #include <boost/wave/grammars/cpp_literal_grammar_gen.hpp>
 
+#if !defined(spirit_append_actor)
+#if SPIRIT_VERSION >= 0x1700
+#define spirit_append_actor(actor) boost::spirit::push_back_a(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign_a(actor)
+#else
+#define spirit_append_actor(actor) boost::spirit::append(actor)
+#define spirit_assign_actor(actor) boost::spirit::assign(actor)
+#endif // SPIRIT_VERSION >= 0x1700
+#endif // !defined(spirit_append_actor)
+
 // this must occur after all of the includes and before any code appears
 #ifdef BOOST_HAS_ABI_HEADERS
 #include BOOST_ABI_PREFIX
@@ -63,9 +78,9 @@
 ///////////////////////////////////////////////////////////////////////////////
     struct compose_character_literal {
 
- template <typename ResultT, typename A1, typename A2, typename A3>
- struct result {
-
+ template <typename A1, typename A2, typename A3, typename A4>
+ struct result
+ {
             typedef void type;
         };
 

Modified: branches/fix-links/boost/wave/grammars/cpp_defined_grammar.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_defined_grammar.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_defined_grammar.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -11,6 +11,8 @@
 #if !defined(CPP_DEFINED_GRAMMAR_HPP_F48287B2_DC67_40A8_B4A1_800EFBD67869_INCLUDED)
 #define CPP_DEFINED_GRAMMAR_HPP_F48287B2_DC67_40A8_B4A1_800EFBD67869_INCLUDED
 
+#include <boost/wave/wave_config.hpp>
+
 #include <boost/assert.hpp>
 #include <boost/spirit/core.hpp>
 #include <boost/spirit/attribute/closure.hpp>
@@ -19,7 +21,6 @@
 #include <boost/spirit/actor/push_back_actor.hpp>
 #endif // SPIRIT_VERSION >= 0x1700
 
-#include <boost/wave/wave_config.hpp>
 #include <boost/wave/token_ids.hpp>
 #include <boost/wave/util/pattern_parser.hpp>
 #include <boost/wave/grammars/cpp_defined_grammar_gen.hpp>

Modified: branches/fix-links/boost/wave/grammars/cpp_expression_grammar.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_expression_grammar.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_expression_grammar.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -11,6 +11,8 @@
 #if !defined(CPP_EXPRESSION_GRAMMAR_HPP_099CD1A4_A6C0_44BE_8F24_0B00F5BE5674_INCLUDED)
 #define CPP_EXPRESSION_GRAMMAR_HPP_099CD1A4_A6C0_44BE_8F24_0B00F5BE5674_INCLUDED
 
+#include <boost/wave/wave_config.hpp>
+
 #include <boost/assert.hpp>
 #include <boost/spirit/core.hpp>
 #include <boost/spirit/attribute/closure.hpp>
@@ -26,7 +28,6 @@
 #include <boost/spirit/phoenix/statements.hpp>
 #include <boost/spirit/phoenix/casts.hpp>
 
-#include <boost/wave/wave_config.hpp>
 #include <boost/wave/token_ids.hpp>
 
 #include <boost/wave/cpp_exceptions.hpp>

Modified: branches/fix-links/boost/wave/grammars/cpp_expression_value.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_expression_value.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_expression_value.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -16,6 +16,7 @@
 #endif // defined(BOOST_SPIRIT_DEBUG)
 
 #include <boost/wave/wave_config.hpp>
+#include <boost/wave/grammars/cpp_value_error.hpp> // value_error
 
 // this must occur after all of the includes and before any code appears
 #ifdef BOOST_HAS_ABI_HEADERS
@@ -185,8 +186,8 @@
             case is_bool:
                 {
                     int_literal_type result = value.i + as_long(rhs);
- if (rhs.value.i > 0L && value.i > result ||
- rhs.value.i < 0L && value.i < result)
+ if ((rhs.value.i > 0L && value.i > result) ||
+ (rhs.value.i < 0L && value.i < result))
                     {
                         valid = error_integer_overflow;
                     }
@@ -199,8 +200,8 @@
             case is_int:
                 {
                     int_literal_type result = value.i + rhs.value.i;
- if (rhs.value.i > 0L && value.i > result ||
- rhs.value.i < 0L && value.i < result)
+ if ((rhs.value.i > 0L && value.i > result) ||
+ (rhs.value.i < 0L && value.i < result))
                     {
                         valid = error_integer_overflow;
                     }
@@ -252,8 +253,8 @@
             case is_bool:
                 {
                     int_literal_type result = value.i - as_long(rhs);
- if (rhs.value.i > 0L && result > value.i ||
- rhs.value.i < 0L && result < value.i)
+ if ((rhs.value.i > 0L && result > value.i) ||
+ (rhs.value.i < 0L && result < value.i))
                     {
                         valid = error_integer_overflow;
                     }
@@ -266,8 +267,8 @@
             case is_int:
                 {
                     int_literal_type result = value.i - rhs.value.i;
- if (rhs.value.i > 0L && result > value.i ||
- rhs.value.i < 0L && result < value.i)
+ if ((rhs.value.i > 0L && result > value.i) ||
+ (rhs.value.i < 0L && result < value.i))
                     {
                         valid = error_integer_overflow;
                     }
@@ -310,8 +311,8 @@
             case is_int:
                 {
                     uint_literal_type result = value.ui - rhs.value.i;
- if (rhs.value.i > 0L && result > value.ui ||
- rhs.value.i < 0L && result < value.ui)
+ if ((rhs.value.i > 0L && result > value.ui) ||
+ (rhs.value.i < 0L && result < value.ui))
                     {
                         valid = error_integer_overflow;
                     }

Modified: branches/fix-links/boost/wave/grammars/cpp_intlit_grammar.hpp
==============================================================================
--- branches/fix-links/boost/wave/grammars/cpp_intlit_grammar.hpp (original)
+++ branches/fix-links/boost/wave/grammars/cpp_intlit_grammar.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -11,6 +11,8 @@
 #if !defined(CPP_INTLIT_GRAMMAR_HPP_2E1E70B1_F15C_4132_8554_10A231B0D91C_INCLUDED)
 #define CPP_INTLIT_GRAMMAR_HPP_2E1E70B1_F15C_4132_8554_10A231B0D91C_INCLUDED
 
+#include <boost/wave/wave_config.hpp>
+
 #include <boost/spirit/core.hpp>
 #include <boost/spirit/attribute/closure.hpp>
 #if SPIRIT_VERSION >= 0x1700
@@ -22,7 +24,6 @@
 #include <boost/spirit/phoenix/primitives.hpp>
 #include <boost/spirit/phoenix/statements.hpp>
 
-#include <boost/wave/wave_config.hpp>
 #include <boost/wave/cpp_exceptions.hpp>
 #include <boost/wave/grammars/cpp_literal_grammar_gen.hpp>
 

Modified: branches/fix-links/boost/wave/util/cpp_macromap_predef.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/cpp_macromap_predef.hpp (original)
+++ branches/fix-links/boost/wave/util/cpp_macromap_predef.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -19,6 +19,7 @@
 #include <boost/wave/wave_config.hpp>
 #include <boost/wave/wave_config_constant.hpp>
 #include <boost/wave/token_ids.hpp>
+#include <boost/wave/util/time_conversion_helper.hpp> // time_conversion_helper
 
 // this must occur after all of the includes and before any code appears
 #ifdef BOOST_HAS_ABI_HEADERS

Modified: branches/fix-links/boost/wave/util/cpp_macromap_utils.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/cpp_macromap_utils.hpp (original)
+++ branches/fix-links/boost/wave/util/cpp_macromap_utils.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -17,6 +17,7 @@
 
 #include <boost/wave/wave_config.hpp>
 #include <boost/wave/token_ids.hpp>
+#include <boost/wave/util/unput_queue_iterator.hpp>
 
 // this must occur after all of the includes and before any code appears
 #ifdef BOOST_HAS_ABI_HEADERS
@@ -420,8 +421,6 @@
 inline bool
 is_whitespace_only (ContainerT const &argument)
 {
- using namespace cpplexer;
-
     typename ContainerT::const_iterator end = argument.end();
     for (typename ContainerT::const_iterator it = argument.begin();
           it != end; ++it)

Modified: branches/fix-links/boost/wave/util/insert_whitespace_detection.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/insert_whitespace_detection.hpp (original)
+++ branches/fix-links/boost/wave/util/insert_whitespace_detection.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -84,7 +84,7 @@
     }
 // T_INTLIT
     inline bool
- handle_intlit(boost::wave::token_id prev, boost::wave::token_id before)
+ handle_intlit(boost::wave::token_id prev, boost::wave::token_id /*before*/)
     {
         using namespace boost::wave;
         switch (static_cast<unsigned int>(prev)) {
@@ -101,7 +101,7 @@
 // T_FLOATLIT
     inline bool
     handle_floatlit(boost::wave::token_id prev,
- boost::wave::token_id before)
+ boost::wave::token_id /*before*/)
     {
         using namespace boost::wave;
         switch (static_cast<unsigned int>(prev)) {
@@ -118,7 +118,7 @@
 // <% T_LEFTBRACE
     inline bool
     handle_alt_leftbrace(boost::wave::token_id prev,
- boost::wave::token_id before)
+ boost::wave::token_id /*before*/)
     {
         using namespace boost::wave;
         switch (static_cast<unsigned int>(prev)) {
@@ -131,7 +131,7 @@
 // <: T_LEFTBRACKET
     inline bool
     handle_alt_leftbracket(boost::wave::token_id prev,
- boost::wave::token_id before)
+ boost::wave::token_id /*before*/)
     {
         using namespace boost::wave;
         switch (static_cast<unsigned int>(prev)) {
@@ -144,7 +144,7 @@
 // T_FIXEDPOINTLIT
     inline bool
     handle_fixedpointlit(boost::wave::token_id prev,
- boost::wave::token_id before)
+ boost::wave::token_id /*before*/)
     {
         using namespace boost::wave;
         switch (static_cast<unsigned int>(prev)) {
@@ -174,7 +174,7 @@
 // T_QUESTION_MARK
     inline bool
     handle_questionmark(boost::wave::token_id prev,
- boost::wave::token_id before)
+ boost::wave::token_id /*before*/)
     {
         using namespace boost::wave;
         switch(static_cast<unsigned int>(prev)) {

Modified: branches/fix-links/boost/wave/util/symbol_table.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/symbol_table.hpp (original)
+++ branches/fix-links/boost/wave/util/symbol_table.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -14,6 +14,8 @@
 #include <map>
 
 #include <boost/wave/wave_config.hpp>
+#include <boost/shared_ptr.hpp>
+
 #if BOOST_WAVE_SERIALIZATION != 0
 #include <boost/serialization/serialization.hpp>
 #include <boost/serialization/map.hpp>

Modified: branches/fix-links/boost/wave/util/time_conversion_helper.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/time_conversion_helper.hpp (original)
+++ branches/fix-links/boost/wave/util/time_conversion_helper.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -12,6 +12,7 @@
 #define TIME_CONVERSION_HELPER_HPP_DA97E389_1797_43BA_82AE_B071064B3EF4_INCLUDED
 
 #include <ctime>
+#include <cstring>
 
 #include <boost/config.hpp>
 #include <boost/spirit/core.hpp>

Modified: branches/fix-links/boost/wave/util/unput_queue_iterator.hpp
==============================================================================
--- branches/fix-links/boost/wave/util/unput_queue_iterator.hpp (original)
+++ branches/fix-links/boost/wave/util/unput_queue_iterator.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -18,6 +18,7 @@
 #include <boost/iterator_adaptors.hpp>
 
 #include <boost/wave/wave_config.hpp>
+#include <boost/wave/token_ids.hpp> // token_id
 
 // this must occur after all of the includes and before any code appears
 #ifdef BOOST_HAS_ABI_HEADERS
@@ -416,10 +417,7 @@
     inline boost::wave::token_id
     skip_whitespace(IteratorT &first, IteratorT const &last)
     {
- using namespace cpplexer;
-
- token_id id = next_token<IteratorT>::peek(first, last, false);
-
+ token_id id = next_token<IteratorT>::peek(first, last, false);
         if (IS_CATEGORY(id, WhiteSpaceTokenType)) {
             do {
                 ++first;
@@ -434,11 +432,9 @@
     inline boost::wave::token_id
     skip_whitespace(IteratorT &first, IteratorT const &last, ContainerT &queue)
     {
- using namespace cpplexer;
         queue.push_back (*first); // queue up the current token
         
- token_id id = next_token<IteratorT>::peek(first, last, false);
-
+ token_id id = next_token<IteratorT>::peek(first, last, false);
         if (IS_CATEGORY(id, WhiteSpaceTokenType)) {
             do {
                 queue.push_back(*++first); // queue up the next whitespace

Modified: branches/fix-links/boost/wave/wave_config.hpp
==============================================================================
--- branches/fix-links/boost/wave/wave_config.hpp (original)
+++ branches/fix-links/boost/wave/wave_config.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -347,7 +347,7 @@
 // import as a keyword (T_IMPORT token id)
 //
 #if !defined(BOOST_WAVE_SUPPORT_IMPORT_KEYWORD)
-#define BOOST_WAVE_SUPPORT_IMPORT_KEYWORD 0
+#define BOOST_WAVE_SUPPORT_IMPORT_KEYWORD 0
 #endif
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -404,8 +404,9 @@
 #define PHOENIX_LIMIT 6
 #endif
 #if PHOENIX_LIMIT < 6
-#error "Boost.Wave: the constant PHOENIX_LIMIT must be at least defined to 4" \
- " to compile the library."
+// boost/spirit/attribute.hpp sets PHOENIX_LIMIT to 3!
+#error "Boost.Wave: the constant PHOENIX_LIMIT must be at least defined to 6" \
+" to compile the library."
 #endif
 
 ///////////////////////////////////////////////////////////////////////////////

Modified: branches/fix-links/boost/wave/whitespace_handling.hpp
==============================================================================
--- branches/fix-links/boost/wave/whitespace_handling.hpp (original)
+++ branches/fix-links/boost/wave/whitespace_handling.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -16,6 +16,7 @@
 #include <boost/wave/wave_config.hpp>
 #include <boost/wave/token_ids.hpp>
 #include <boost/wave/preprocessing_hooks.hpp>
+#include <boost/wave/language_support.hpp>
 
 // this must occur after all of the includes and before any code appears
 #ifdef BOOST_HAS_ABI_HEADERS

Modified: branches/fix-links/boost/xpressive/proto/context/default.hpp
==============================================================================
--- branches/fix-links/boost/xpressive/proto/context/default.hpp (original)
+++ branches/fix-links/boost/xpressive/proto/context/default.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -40,9 +40,10 @@
     #ifndef BOOST_PROTO_DOXYGEN_INVOKED
         #define BOOST_PROTO_DECLTYPE_NESTED_TYPEDEF_TPL_(Nested, Expr)\
             BOOST_TYPEOF_NESTED_TYPEDEF_TPL(BOOST_PP_CAT(nested_and_hidden_, Nested), Expr)\
+ static int const sz = sizeof(detail::check_reference(Expr)); \
             struct Nested\
               : mpl::if_c<\
- 1==sizeof(detail::check_reference(Expr))\
+ 1==sz\
                   , typename BOOST_PP_CAT(nested_and_hidden_, Nested)::type &\
                   , typename BOOST_PP_CAT(nested_and_hidden_, Nested)::type\
>\

Modified: branches/fix-links/libs/conversion/lexical_cast.htm
==============================================================================
--- branches/fix-links/libs/conversion/lexical_cast.htm (original)
+++ branches/fix-links/libs/conversion/lexical_cast.htm 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -194,7 +194,18 @@
 </pre>
                         </blockquote>Exception used to indicate runtime lexical_cast
                 failure.
- <hr>
+
+<hr>
+ <h2><a name="BOOST_LEXICAL_CAST_ASSUME_C_LOCALE"><code>BOOST_LEXICAL_CAST_ASSUME_C_LOCALE</code></a></h2>
+ <blockquote><pre>#define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
+
+or,
+
+g++ -DBOOST_LEXICAL_CAST_ASSUME_C_LOCALE ... (gcc on Linux/Unix)
+cl.exe /DBOOST_LEXICAL_CAST_ASSUME_C_LOCALE ... (Visual C++ on Windows)
+</pre>
+Eliminate an overhead of <code>std::locale</code> if your program runs in the "C" locale. If the option is set but a program runs in other locale, <code>lexical_cast</code> result is unspecified.
+<hr>
                 
 <h2><a name="faq">Frequently Asked Questions</h2>
     <p> Q: Why does <code>lexical_cast&lt;int8_t&gt;("127")</code> throw <code>bad_lexical_cast</code>?
@@ -219,7 +230,7 @@
     <a name="n1973"></a><li> [N1973] Kevlin Henney, Beman Dawes, Lexical Conversion Library Proposal for TR2,
       <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1973.html">N1973</a>.
       <a name="tuning"></a><li> [Tuning] Alexander Nasonov, Fine Tuning for lexical_cast,
- Overload #74,
+ Overload #74 (PDF),
       August 2006.</li>
 </ul>
 <h2><a name="changes">Changes</a></h2>

Modified: branches/fix-links/libs/foreach/test/rvalue_const.cpp
==============================================================================
--- branches/fix-links/libs/foreach/test/rvalue_const.cpp (original)
+++ branches/fix-links/libs/foreach/test/rvalue_const.cpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -13,7 +13,10 @@
 #include <boost/foreach.hpp>
 
 #ifdef BOOST_FOREACH_NO_CONST_RVALUE_DETECTION
+// ignore error during Microsoft Code Analysis
+#if !defined(_PREFAST_)
 # error Expected failure : const rvalues disallowed
+#endif
 #else
 
 std::vector<int> const get_vector()

Modified: branches/fix-links/libs/function_types/example/interpreter.hpp
==============================================================================
--- branches/fix-links/libs/function_types/example/interpreter.hpp (original)
+++ branches/fix-links/libs/function_types/example/interpreter.hpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -133,8 +133,9 @@
     void apply(Function func, token_parser & parser, Args const & args)
     {
       typedef typename mpl::deref<From>::type arg_type;
+ typedef typename mpl::next<From>::type next_iter_type;
 
- invoker<Function, typename mpl::next<From>::type, To>::apply
+ invoker<Function, next_iter_type, To>::apply
           ( func, parser, fusion::push_back(args, parser.get<arg_type>()) );
     }
   };

Modified: branches/fix-links/libs/function_types/test/custom_ccs/member_ccs.cpp
==============================================================================
--- branches/fix-links/libs/function_types/test/custom_ccs/member_ccs.cpp (original)
+++ branches/fix-links/libs/function_types/test/custom_ccs/member_ccs.cpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -14,7 +14,7 @@
 #include <boost/function_types/is_callable_builtin.hpp>
 
 #ifndef BOOST_FT_CC_STDCALL
-# error "test not supported with this compiler"
+# error "test not supported with this compiler/platform"
 #endif
 
 namespace ft = boost::function_types;

Modified: branches/fix-links/libs/function_types/test/custom_ccs/member_ccs_exact.cpp
==============================================================================
--- branches/fix-links/libs/function_types/test/custom_ccs/member_ccs_exact.cpp (original)
+++ branches/fix-links/libs/function_types/test/custom_ccs/member_ccs_exact.cpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -14,7 +14,7 @@
 #include <boost/function_types/is_callable_builtin.hpp>
 
 #ifndef BOOST_FT_CC_STDCALL
-# error "test not supported with this compiler"
+# error "test not supported with this compiler/platform"
 #endif
 
 namespace ft = boost::function_types;

Modified: branches/fix-links/libs/function_types/test/custom_ccs/nonmember_ccs.cpp
==============================================================================
--- branches/fix-links/libs/function_types/test/custom_ccs/nonmember_ccs.cpp (original)
+++ branches/fix-links/libs/function_types/test/custom_ccs/nonmember_ccs.cpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -16,7 +16,7 @@
 #include <boost/function_types/is_callable_builtin.hpp>
 
 #ifndef BOOST_FT_CC_STDCALL
-# error "test not supported with this compiler"
+# error "test not supported with this compiler/platform"
 #endif
 
 namespace ft = boost::function_types;

Modified: branches/fix-links/libs/function_types/test/custom_ccs/nonmember_ccs_exact.cpp
==============================================================================
--- branches/fix-links/libs/function_types/test/custom_ccs/nonmember_ccs_exact.cpp (original)
+++ branches/fix-links/libs/function_types/test/custom_ccs/nonmember_ccs_exact.cpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -16,7 +16,7 @@
 #include <boost/function_types/is_callable_builtin.hpp>
 
 #ifndef BOOST_FT_CC_STDCALL
-# error "test not supported with this compiler"
+# error "test not supported with this compiler/platform"
 #endif
 
 namespace ft = boost::function_types;

Modified: branches/fix-links/libs/gil/doc/index.html
==============================================================================
--- branches/fix-links/libs/gil/doc/index.html (original)
+++ branches/fix-links/libs/gil/doc/index.html 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -21,7 +21,7 @@
         <h3 class="navbar">Information</h3>
         <ul>
             <li>GIL ASL Home</li>
- <li>GIL Wxtensions</li>
+ <li>GIL Extensions</li>
             <li>GIL Discussion Forum</li>
             <li>Acknowledgements</li>
         </ul>

Modified: branches/fix-links/libs/signals/src/named_slot_map.cpp
==============================================================================
--- branches/fix-links/libs/signals/src/named_slot_map.cpp (original)
+++ branches/fix-links/libs/signals/src/named_slot_map.cpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -24,7 +24,7 @@
 typedef slot_container_type::const_iterator const_group_iterator;
 
 
-#if BOOST_WORKAROUND(_MSC_VER, <= 1400)
+#if BOOST_WORKAROUND(_MSC_VER, <= 1500)
 void named_slot_map_iterator::decrement() { assert(false); }
 void named_slot_map_iterator::advance(difference_type) { assert(false); }
 #endif

Modified: branches/fix-links/libs/thread/src/pthread/thread.cpp
==============================================================================
--- branches/fix-links/libs/thread/src/pthread/thread.cpp (original)
+++ branches/fix-links/libs/thread/src/pthread/thread.cpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -188,6 +188,37 @@
         detach();
     }
 
+ thread::thread(detail::thread_move_t<thread> x)
+ {
+ lock_guard<mutex> lock(x->thread_info_mutex);
+ thread_info=x->thread_info;
+ x->thread_info.reset();
+ }
+
+ thread& thread::operator=(detail::thread_move_t<thread> x)
+ {
+ thread new_thread(x);
+ swap(new_thread);
+ return *this;
+ }
+
+ thread::operator detail::thread_move_t<thread>()
+ {
+ return move();
+ }
+
+ detail::thread_move_t<thread> thread::move()
+ {
+ detail::thread_move_t<thread> x(*this);
+ return x;
+ }
+
+ void thread::swap(thread& x)
+ {
+ thread_info.swap(x.thread_info);
+ }
+
+
     bool thread::operator==(const thread& other) const
     {
         return get_id()==other.get_id();

Modified: branches/fix-links/libs/thread/src/win32/thread.cpp
==============================================================================
--- branches/fix-links/libs/thread/src/win32/thread.cpp (original)
+++ branches/fix-links/libs/thread/src/win32/thread.cpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -244,30 +244,28 @@
         detach();
     }
     
- thread::thread(boost::move_t<thread> x)
+ thread::thread(detail::thread_move_t<thread> x)
     {
- {
- boost::mutex::scoped_lock l(x->thread_info_mutex);
- thread_info=x->thread_info;
- }
- x->release_handle();
+ lock_guard<mutex> lock(x->thread_info_mutex);
+ thread_info=x->thread_info;
+ x->thread_info=0;
     }
     
- thread& thread::operator=(boost::move_t<thread> x)
+ thread& thread::operator=(detail::thread_move_t<thread> x)
     {
         thread new_thread(x);
         swap(new_thread);
         return *this;
     }
         
- thread::operator boost::move_t<thread>()
+ thread::operator detail::thread_move_t<thread>()
     {
         return move();
     }
 
- boost::move_t<thread> thread::move()
+ detail::thread_move_t<thread> thread::move()
     {
- boost::move_t<thread> x(*this);
+ detail::thread_move_t<thread> x(*this);
         return x;
     }
 
@@ -317,7 +315,7 @@
 
     void thread::release_handle()
     {
- boost::mutex::scoped_lock l1(thread_info_mutex);
+ lock_guard<mutex> l1(thread_info_mutex);
         thread_info=0;
     }
     
@@ -379,9 +377,9 @@
                     target_system_time.wYear=target_time.abs_time.date().year();
                     target_system_time.wMonth=target_time.abs_time.date().month();
                     target_system_time.wDay=target_time.abs_time.date().day();
- target_system_time.wHour=target_time.abs_time.time_of_day().hours();
- target_system_time.wMinute=target_time.abs_time.time_of_day().minutes();
- target_system_time.wSecond=target_time.abs_time.time_of_day().seconds();
+ target_system_time.wHour=(WORD)target_time.abs_time.time_of_day().hours();
+ target_system_time.wMinute=(WORD)target_time.abs_time.time_of_day().minutes();
+ target_system_time.wSecond=(WORD)target_time.abs_time.time_of_day().seconds();
 
                     if(!SystemTimeToFileTime(&target_system_time,((FILETIME*)&due_time)))
                     {

Modified: branches/fix-links/libs/thread/test/Jamfile.v2
==============================================================================
--- branches/fix-links/libs/thread/test/Jamfile.v2 (original)
+++ branches/fix-links/libs/thread/test/Jamfile.v2 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -35,6 +35,7 @@
 {
     test-suite "threads"
         : [ thread-run test_thread.cpp ]
+ [ thread-run test_thread_move.cpp ]
           [ thread-run test_mutex.cpp ]
           [ thread-run test_condition_notify_one.cpp ]
           [ thread-run test_condition_timed_wait_times_out.cpp ]
@@ -45,6 +46,7 @@
           [ thread-run test_xtime.cpp ]
           [ thread-run test_barrier.cpp ]
           [ thread-run test_shared_mutex.cpp ]
+ [ thread-run test_shared_mutex_part_2.cpp ]
           [ thread-run test_lock_concept.cpp ]
     ;
 }

Modified: branches/fix-links/libs/thread/test/test_mutex.cpp
==============================================================================
--- branches/fix-links/libs/thread/test/test_mutex.cpp (original)
+++ branches/fix-links/libs/thread/test/test_mutex.cpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -102,6 +102,11 @@
     typedef M mutex_type;
     typedef typename M::scoped_timed_lock timed_lock_type;
 
+ static bool fake_predicate()
+ {
+ return false;
+ }
+
     void operator()()
     {
         mutex_type mutex;
@@ -123,14 +128,17 @@
         BOOST_CHECK(lock ? true : false);
 
         // Construct and initialize an xtime for a fast time out.
- boost::xtime xt = delay(0, 100);
+ boost::system_time timeout = boost::get_system_time()+boost::posix_time::milliseconds(100);
 
         // Test the lock and the mutex with condition variables.
         // No one is going to notify this condition variable. We expect to
         // time out.
- BOOST_CHECK(!condition.timed_wait(lock, xt));
+ BOOST_CHECK(!condition.timed_wait(lock, timeout, fake_predicate));
         BOOST_CHECK(lock ? true : false);
- BOOST_CHECK(in_range(xt));
+
+ boost::system_time now=boost::get_system_time();
+ boost::posix_time::milliseconds const timeout_resolution(20);
+ BOOST_CHECK((now-timeout_resolution)<timeout);
 
         // Test the lock, unlock and timedlock methods.
         lock.unlock();

Modified: branches/fix-links/libs/thread/test/test_shared_mutex.cpp
==============================================================================
--- branches/fix-links/libs/thread/test/test_shared_mutex.cpp (original)
+++ branches/fix-links/libs/thread/test/test_shared_mutex.cpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -5,13 +5,9 @@
 
 #include <boost/test/unit_test.hpp>
 #include <boost/thread/thread.hpp>
-#include <boost/thread/mutex.hpp>
-#include <boost/thread/condition_variable.hpp>
-#include <boost/thread/shared_mutex.hpp>
 #include <boost/thread/xtime.hpp>
 #include "util.inl"
-#include <iostream>
-#include <boost/date_time/posix_time/posix_time_io.hpp>
+#include "shared_mutex_locking_thread.hpp"
 
 #define CHECK_LOCKED_VALUE_EQUAL(mutex_name,value,expected_value) \
     { \
@@ -19,65 +15,6 @@
         BOOST_CHECK_EQUAL(value,expected_value); \
     }
 
-
-namespace
-{
- template<typename lock_type>
- class locking_thread
- {
- boost::shared_mutex& rw_mutex;
- unsigned& unblocked_count;
- unsigned& simultaneous_running_count;
- unsigned& max_simultaneous_running;
- boost::mutex& unblocked_count_mutex;
- boost::condition_variable& unblocked_condition;
- boost::mutex& finish_mutex;
- public:
- locking_thread(boost::shared_mutex& rw_mutex_,
- unsigned& unblocked_count_,
- boost::mutex& unblocked_count_mutex_,
- boost::condition_variable& unblocked_condition_,
- boost::mutex& finish_mutex_,
- unsigned& simultaneous_running_count_,
- unsigned& max_simultaneous_running_):
- rw_mutex(rw_mutex_),
- unblocked_count(unblocked_count_),
- unblocked_condition(unblocked_condition_),
- simultaneous_running_count(simultaneous_running_count_),
- max_simultaneous_running(max_simultaneous_running_),
- unblocked_count_mutex(unblocked_count_mutex_),
- finish_mutex(finish_mutex_)
- {}
-
- void operator()()
- {
- // acquire lock
- lock_type lock(rw_mutex);
-
- // increment count to show we're unblocked
- {
- boost::mutex::scoped_lock ublock(unblocked_count_mutex);
- ++unblocked_count;
- unblocked_condition.notify_one();
- ++simultaneous_running_count;
- if(simultaneous_running_count>max_simultaneous_running)
- {
- max_simultaneous_running=simultaneous_running_count;
- }
- }
-
- // wait to finish
- boost::mutex::scoped_lock finish_lock(finish_mutex);
- {
- boost::mutex::scoped_lock ublock(unblocked_count_mutex);
- --simultaneous_running_count;
- }
- }
- };
-
-}
-
-
 void test_multiple_readers()
 {
     unsigned const number_of_threads=100;
@@ -328,250 +265,11 @@
         throw;
     }
 
-
     CHECK_LOCKED_VALUE_EQUAL(unblocked_count_mutex,unblocked_count,reader_count+writer_count);
     CHECK_LOCKED_VALUE_EQUAL(unblocked_count_mutex,max_simultaneous_readers,reader_count);
     CHECK_LOCKED_VALUE_EQUAL(unblocked_count_mutex,max_simultaneous_writers,1u);
 }
 
-void test_only_one_upgrade_lock_permitted()
-{
- unsigned const number_of_threads=100;
-
- boost::thread_group pool;
-
- boost::shared_mutex rw_mutex;
- unsigned unblocked_count=0;
- unsigned simultaneous_running_count=0;
- unsigned max_simultaneous_running=0;
- boost::mutex unblocked_count_mutex;
- boost::condition_variable unblocked_condition;
- boost::mutex finish_mutex;
- boost::mutex::scoped_lock finish_lock(finish_mutex);
-
- try
- {
- for(unsigned i=0;i<number_of_threads;++i)
- {
- pool.create_thread(locking_thread<boost::upgrade_lock<boost::shared_mutex> >(rw_mutex,unblocked_count,unblocked_count_mutex,unblocked_condition,
- finish_mutex,simultaneous_running_count,max_simultaneous_running));
- }
-
- boost::thread::sleep(delay(1));
-
- CHECK_LOCKED_VALUE_EQUAL(unblocked_count_mutex,unblocked_count,1U);
-
- finish_lock.unlock();
-
- pool.join_all();
- }
- catch(...)
- {
- pool.interrupt_all();
- pool.join_all();
- throw;
- }
-
- CHECK_LOCKED_VALUE_EQUAL(unblocked_count_mutex,unblocked_count,number_of_threads);
- CHECK_LOCKED_VALUE_EQUAL(unblocked_count_mutex,max_simultaneous_running,1u);
-}
-
-void test_can_lock_upgrade_if_currently_locked_shared()
-{
- boost::thread_group pool;
-
- boost::shared_mutex rw_mutex;
- unsigned unblocked_count=0;
- unsigned simultaneous_running_count=0;
- unsigned max_simultaneous_running=0;
- boost::mutex unblocked_count_mutex;
- boost::condition_variable unblocked_condition;
- boost::mutex finish_mutex;
- boost::mutex::scoped_lock finish_lock(finish_mutex);
-
- unsigned const reader_count=100;
-
- try
- {
- for(unsigned i=0;i<reader_count;++i)
- {
- pool.create_thread(locking_thread<boost::shared_lock<boost::shared_mutex> >(rw_mutex,unblocked_count,unblocked_count_mutex,unblocked_condition,
- finish_mutex,simultaneous_running_count,max_simultaneous_running));
- }
- boost::thread::sleep(delay(1));
- pool.create_thread(locking_thread<boost::upgrade_lock<boost::shared_mutex> >(rw_mutex,unblocked_count,unblocked_count_mutex,unblocked_condition,
- finish_mutex,simultaneous_running_count,max_simultaneous_running));
- {
- boost::mutex::scoped_lock lk(unblocked_count_mutex);
- while(unblocked_count<(reader_count+1))
- {
- unblocked_condition.wait(lk);
- }
- }
- CHECK_LOCKED_VALUE_EQUAL(unblocked_count_mutex,unblocked_count,reader_count+1);
-
- finish_lock.unlock();
- pool.join_all();
- }
- catch(...)
- {
- pool.interrupt_all();
- pool.join_all();
- throw;
- }
-
-
- CHECK_LOCKED_VALUE_EQUAL(unblocked_count_mutex,unblocked_count,reader_count+1);
- CHECK_LOCKED_VALUE_EQUAL(unblocked_count_mutex,max_simultaneous_running,reader_count+1);
-}
-
-namespace
-{
- class simple_writing_thread
- {
- boost::shared_mutex& rwm;
- boost::mutex& finish_mutex;
- boost::mutex& unblocked_mutex;
- unsigned& unblocked_count;
-
- public:
- simple_writing_thread(boost::shared_mutex& rwm_,
- boost::mutex& finish_mutex_,
- boost::mutex& unblocked_mutex_,
- unsigned& unblocked_count_):
- rwm(rwm_),finish_mutex(finish_mutex_),
- unblocked_mutex(unblocked_mutex_),unblocked_count(unblocked_count_)
- {}
-
- void operator()()
- {
- boost::unique_lock<boost::shared_mutex> lk(rwm);
-
- {
- boost::mutex::scoped_lock ulk(unblocked_mutex);
- ++unblocked_count;
- }
-
- boost::mutex::scoped_lock flk(finish_mutex);
- }
- };
-}
-
-void test_if_other_thread_has_write_lock_try_lock_shared_returns_false()
-{
-
- boost::shared_mutex rw_mutex;
- boost::mutex finish_mutex;
- boost::mutex unblocked_mutex;
- unsigned unblocked_count=0;
- boost::mutex::scoped_lock finish_lock(finish_mutex);
- boost::thread writer(simple_writing_thread(rw_mutex,finish_mutex,unblocked_mutex,unblocked_count));
- boost::this_thread::sleep(boost::posix_time::seconds(1));
- CHECK_LOCKED_VALUE_EQUAL(unblocked_mutex,unblocked_count,1u);
-
- bool const try_succeeded=rw_mutex.try_lock_shared();
- BOOST_CHECK(!try_succeeded);
- if(try_succeeded)
- {
- rw_mutex.unlock_shared();
- }
-
- finish_lock.unlock();
- writer.join();
-}
-
-void test_if_no_thread_has_lock_try_lock_shared_returns_true()
-{
- boost::shared_mutex rw_mutex;
- bool const try_succeeded=rw_mutex.try_lock_shared();
- BOOST_CHECK(try_succeeded);
- if(try_succeeded)
- {
- rw_mutex.unlock_shared();
- }
-}
-
-namespace
-{
- class simple_reading_thread
- {
- boost::shared_mutex& rwm;
- boost::mutex& finish_mutex;
- boost::mutex& unblocked_mutex;
- unsigned& unblocked_count;
-
- public:
- simple_reading_thread(boost::shared_mutex& rwm_,
- boost::mutex& finish_mutex_,
- boost::mutex& unblocked_mutex_,
- unsigned& unblocked_count_):
- rwm(rwm_),finish_mutex(finish_mutex_),
- unblocked_mutex(unblocked_mutex_),unblocked_count(unblocked_count_)
- {}
-
- void operator()()
- {
- boost::shared_lock<boost::shared_mutex> lk(rwm);
-
- {
- boost::mutex::scoped_lock ulk(unblocked_mutex);
- ++unblocked_count;
- }
-
- boost::mutex::scoped_lock flk(finish_mutex);
- }
- };
-}
-
-void test_if_other_thread_has_shared_lock_try_lock_shared_returns_true()
-{
-
- boost::shared_mutex rw_mutex;
- boost::mutex finish_mutex;
- boost::mutex unblocked_mutex;
- unsigned unblocked_count=0;
- boost::mutex::scoped_lock finish_lock(finish_mutex);
- boost::thread writer(simple_reading_thread(rw_mutex,finish_mutex,unblocked_mutex,unblocked_count));
- boost::thread::sleep(delay(1));
- CHECK_LOCKED_VALUE_EQUAL(unblocked_mutex,unblocked_count,1u);
-
- bool const try_succeeded=rw_mutex.try_lock_shared();
- BOOST_CHECK(try_succeeded);
- if(try_succeeded)
- {
- rw_mutex.unlock_shared();
- }
-
- finish_lock.unlock();
- writer.join();
-}
-
-void test_timed_lock_shared_times_out_if_write_lock_held()
-{
- boost::shared_mutex rw_mutex;
- boost::mutex finish_mutex;
- boost::mutex unblocked_mutex;
- unsigned unblocked_count=0;
- boost::mutex::scoped_lock finish_lock(finish_mutex);
- boost::thread writer(simple_writing_thread(rw_mutex,finish_mutex,unblocked_mutex,unblocked_count));
- boost::thread::sleep(delay(1));
- CHECK_LOCKED_VALUE_EQUAL(unblocked_mutex,unblocked_count,1u);
-
- boost::system_time const start=boost::get_system_time();
- boost::system_time const timeout=start+boost::posix_time::milliseconds(2000);
- bool const timed_lock_succeeded=rw_mutex.timed_lock_shared(timeout);
- BOOST_CHECK(in_range(boost::get_xtime(timeout),1));
- BOOST_CHECK(!timed_lock_succeeded);
- if(timed_lock_succeeded)
- {
- rw_mutex.unlock_shared();
- }
-
- finish_lock.unlock();
- writer.join();
-}
-
-
 boost::unit_test_framework::test_suite* init_unit_test_suite(int, char*[])
 {
     boost::unit_test_framework::test_suite* test =
@@ -582,12 +280,6 @@
     test->add(BOOST_TEST_CASE(&test_reader_blocks_writer));
     test->add(BOOST_TEST_CASE(&test_unlocking_writer_unblocks_all_readers));
     test->add(BOOST_TEST_CASE(&test_unlocking_last_reader_only_unblocks_one_writer));
- test->add(BOOST_TEST_CASE(&test_only_one_upgrade_lock_permitted));
- test->add(BOOST_TEST_CASE(&test_can_lock_upgrade_if_currently_locked_shared));
- test->add(BOOST_TEST_CASE(&test_if_other_thread_has_write_lock_try_lock_shared_returns_false));
- test->add(BOOST_TEST_CASE(&test_if_no_thread_has_lock_try_lock_shared_returns_true));
- test->add(BOOST_TEST_CASE(&test_if_other_thread_has_shared_lock_try_lock_shared_returns_true));
- test->add(BOOST_TEST_CASE(&test_timed_lock_shared_times_out_if_write_lock_held));
 
     return test;
 }

Modified: branches/fix-links/libs/utility/value_init_test.cpp
==============================================================================
--- branches/fix-links/libs/utility/value_init_test.cpp (original)
+++ branches/fix-links/libs/utility/value_init_test.cpp 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -8,10 +8,12 @@
 //
 // Initial: 21 Agu 2002
 
+#include <cstring> // For memcmp.
 #include <iostream>
 #include <string>
 
 #include "boost/utility/value_init.hpp"
+#include <boost/shared_ptr.hpp>
 
 #ifdef __BORLANDC__
 #pragma hdrstop
@@ -152,6 +154,8 @@
 bool operator == ( AggregatePODStructWrapper const& lhs, AggregatePODStructWrapper const& rhs )
 { return lhs.dataMember == rhs.dataMember ; }
 
+typedef unsigned char ArrayOfBytes[256];
+
 //
 // This test function tests boost::value_initialized<T> for a specific type T.
 // The first argument (y) is assumed have the value of a value-initialized object.
@@ -175,6 +179,9 @@
   x_c_ref = z ;
   BOOST_CHECK ( x_c == z ) ;
 
+ boost::shared_ptr<boost::value_initialized<T> > ptr( new boost::value_initialized<T> );
+ BOOST_CHECK ( y == *ptr ) ;
+
 #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
   boost::value_initialized<T const> cx ;
   BOOST_CHECK ( y == cx ) ;
@@ -184,6 +191,7 @@
   BOOST_CHECK ( y == cx_c ) ;
   BOOST_CHECK ( y == boost::get(cx_c) ) ;
 #endif
+
   return boost::minimal_test::errors_counter() == counter_before_test ;
 }
 
@@ -232,6 +240,10 @@
   aggregatePODStructWrapper1.dataMember = nonZeroInitializedAggregatePODStruct;
   BOOST_CHECK ( test(aggregatePODStructWrapper0, aggregatePODStructWrapper1) );
 
+ ArrayOfBytes zeroInitializedArrayOfBytes = { 0 };
+ boost::value_initialized<ArrayOfBytes> valueInitializedArrayOfBytes;
+ BOOST_CHECK (std::memcmp(get(valueInitializedArrayOfBytes), zeroInitializedArrayOfBytes, sizeof(ArrayOfBytes)) == 0);
+
   return 0;
 }
 

Modified: branches/fix-links/libs/wave/ChangeLog
==============================================================================
--- branches/fix-links/libs/wave/ChangeLog (original)
+++ branches/fix-links/libs/wave/ChangeLog 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -24,6 +24,9 @@
 
 CHANGELOG
 
+- Wave Version 1.4
+
+Boost V1.35.0
 - Wave Version 1.3
 - Changed the return value of the 'evaluated_conditional_expression()' pp hook
   to 'bool' allowing to force Wave to re-evaluate the current conditional
@@ -151,6 +154,8 @@
   spotting the problem.
 - Unterminated C++/C comment diagnostics are now a warning and not an error
   anymore.
+- Applied patch provided by Jens Seidel making sure every header compiles on
+ its own.
   
 Boost V1.34.0
 - Wave Version 1.2.4

Modified: branches/fix-links/libs/wave/doc/class_reference_context.html
==============================================================================
--- branches/fix-links/libs/wave/doc/class_reference_context.html (original)
+++ branches/fix-links/libs/wave/doc/class_reference_context.html 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -52,7 +52,7 @@
     
     <span class="keyword">template</span> &lt;
         <span class="keyword">typename</span> Iterator, <span class="keyword">typename</span> LexIterator,
- <span class="keyword">typename</span> InputPolicy, <span class="keyword">typename</span> TracePolicy
+ <span class="keyword">typename</span> InputPolicy, <span class="keyword">typename</span> ContextPolicy
     &gt;
     <span class="keyword">class</span> context <span class="special">:</span> <span class="keyword">public</span> InputPolicy
     {
@@ -66,7 +66,7 @@
         <a href="class_reference_context.html#constructor">context</a>(Iterator<span class="keyword"> const</span> &amp;first_,
             Iterator <span class="keyword">const</span> &amp;last_,
             <span class="keyword">char const</span> *fname = <span class="string">"&lt;Unknown&gt;"</span>,
- TracePolicy <span class="keyword">const</span>&amp; trace = TracePolicy())
+ ContextPolicy <span class="keyword">const</span>&amp; ctx_policy = ContextPolicy())
 
     <span class="comment">// iterator interface</span>
         iterator_type begin() <span class="keyword">const</span>;
@@ -135,9 +135,9 @@
         to use, when it comes to including and opening an included file.</p></td>
   </tr>
   <tr>
- <td class="table_cells"><code>TracePolicy</code></td>
- <td class="table_cells"><p>The type of the trace policy class, which allows
- to customize the trace output generated while expanding macros. The requirements for this policy are described here.</p></td>
+ <td class="table_cells"><code>ContextPolicy</code></td>
+ <td class="table_cells"><p>The type of the context policy class, which allows
+ to customize different aspects of the behaviour of the preprocessing. The requirements of this policy and the available customization points provided by this policy are described here.</p></td>
   </tr>
 </table>
 <p>For further information about the lexer type to use, please refer to the <a href="class_reference_lexer.html">The
@@ -145,9 +145,9 @@
 <p>If the template parameter <tt>InputPolicy</tt> is omitted, the template <tt>boost::wave::iteration_context_policies::load_file_to_string</tt>
   is used. For further information about the input policy, please refer to the
   topic The Input Policy.</p>
-<p>If the template parameter TracePolicyT is omitted, the <tt>boost::wave::macro_trace_policies::no_tracing</tt>
- policy type is used, i.e. by default there is no tracing performed. For further
- information about the hooking policy, please refer to the topic <a href="class_reference_ctxpolicy.html">The
+<p>If the template parameter ContextPolicy is omitted, the <tt>boost::wave::context_policies::eat_whitespace</tt>
+ policy type is used, implementing certain basic preprocessing hooks needed for normal (default) execution. For further
+ information about the context policy, please refer to the topic <a href="class_reference_ctxpolicy.html">The
   Context Policy</a>. </p>
 <h2><a name="public_typedefs"></a>Public Typedefs</h2>
 <p>The <tt>boost::wave::context</tt> template defines the following public typedefs, which may be useful while using this class:</p>
@@ -172,8 +172,8 @@
     <td class="table_cells"><p>The <tt>InputPolicy</tt> template parameter provided, while the <tt>context</tt> class was instantiated. </p></td>
   </tr>
   <tr>
- <td class="table_cells"><code>trace_policy_type</code></td>
- <td class="table_cells"><p>The <tt>TracePolicy</tt> template parameter provided, while the <tt>context</tt> class was instantiated. </p></td>
+ <td class="table_cells"><code>context_policy_type</code></td>
+ <td class="table_cells"><p>The <tt>ContextPolicy</tt> template parameter provided, while the <tt>context</tt> class was instantiated. </p></td>
   </tr>
   <tr>
     <td class="table_cells"><code>position_type</code></td>
@@ -184,15 +184,15 @@
 <p><b><a name="constructor" id="constructor"></a>Constructor</b></p>
 <pre> context(Iterator <span class="keyword">const</span> &amp;first,
         Iterator <span class="keyword">const</span> &amp;last, <span class="keyword">char</span> <span class="keyword">const</span> *filename,
- TracePolicy <span class="keyword">const</span>&amp; trace);</pre>
+ ContextPolicy <span class="keyword">const</span>&amp; ctx_policy);</pre>
     <p>Constructs a context object on top of the input stream given by the pair
     of auxilliary iterators <tt>[first,&nbsp;last)</tt>. The iterators should
     be at least <tt>forward_iterator</tt> type iterators. The filename parameter
     is to be supplied for informational purposes only. This string is used for
     indicating the token positions inside the input stream, it is not validated
     against the file system. If the filename parameter is not given it defaults
- to <span class="copyright">&quot;&lt;Unknown&gt;&quot;</span>. If the trace
- parameter isn't supplied it defaults to a default constructed <tt>TracePolicy</tt>
+ to <span class="copyright">&quot;&lt;Unknown&gt;&quot;</span>. If the ctx_policy
+ parameter isn't supplied it defaults to a default constructed <tt>ContextPolicy</tt>
     object. </p>
     <p>Additionally the macro symbol table is filled with the predefined macros
     and the current reference directory is set to the path of the given filename.
@@ -507,7 +507,7 @@
   <font size="2">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) </font> </p>
 <span class="updated"></span>
 <p class="copyright"><span class="updated">Last updated:
- <!-- #BeginDate format:fcAm1m -->Tuesday, June 26, 2007 20:21<!-- #EndDate -->
+ <!-- #BeginDate format:fcAm1m -->Sunday, December 2, 2007 19:12<!-- #EndDate -->
   </span>
 </p>
 <p>&nbsp;</p>

Modified: branches/fix-links/libs/wave/doc/class_reference_ctxpolicy.html
==============================================================================
--- branches/fix-links/libs/wave/doc/class_reference_ctxpolicy.html (original)
+++ branches/fix-links/libs/wave/doc/class_reference_ctxpolicy.html 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -38,10 +38,10 @@
   <li>a token is about to be returned from the preprocessor, </li>
   <li>a macro get's defined or undefined, </li>
   <li>a macro has been expanded or rescanned,</li>
- <li>an include file has been opened or left, </li>
+ <li>an include file has been opened or closed, </li>
   <li>a conditional expression was evaluated,</li>
   <li>a token has to be skipped because it is contained in a non-evaluated conditional block, </li>
- <li> a pragma of the form <tt>'wave option[(value)]'</tt> has been recognised. </li>
+ <li> a pragma of the form <tt>'wave option[(value)]'</tt> has been recognized. </li>
 </ul>
 <p>This policy type is used as a template parameter to the boost::wave::context<>
   object, where the default policy provides empty hook functions only.</p>
@@ -435,7 +435,7 @@
   <br>
 <font size="2">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) </font> </p>
 <p class="copyright"><span class="updated">Last updated:
- <!-- #BeginDate format:fcAm1m -->Wednesday, July 4, 2007 16:10<!-- #EndDate -->
+ <!-- #BeginDate format:fcAm1m -->Sunday, December 2, 2007 19:12<!-- #EndDate -->
 </span></p>
 </body>
 </html>

Modified: branches/fix-links/libs/wave/doc/introduction.html
==============================================================================
--- branches/fix-links/libs/wave/doc/introduction.html (original)
+++ branches/fix-links/libs/wave/doc/introduction.html 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -32,7 +32,7 @@
   iterator interface. The context object helps to configure the actual preprocessing
   process (as search path's, predefined macros, etc.). The exposed iterators are
   generated by this context object too. Iterating over the sequence defined by
- the two iterators will return the preprocessed tokens, which are to be built
+ the two iterators will return the preprocessed tokens, which are built
   on the fly from the given input stream. </P>
 <P dir="ltr"> The C++ preprocessor iterator itself is fed by a C++ lexer iterator,
   which implements an abstract interface. The C++ lexers packaged with the
@@ -87,7 +87,7 @@
 <font size="2">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) </font> </p>
 <span class="updated"></span>
 <p class="copyright"><span class="updated">Last updated:
- <!-- #BeginDate format:fcAm1m -->Wednesday, December 14, 2005 10:58<!-- #EndDate -->
+ <!-- #BeginDate format:fcAm1m -->Sunday, December 2, 2007 19:03<!-- #EndDate -->
 </span> </p>
 </body>
 </html>

Modified: branches/fix-links/libs/wave/doc/preface.html
==============================================================================
--- branches/fix-links/libs/wave/doc/preface.html (original)
+++ branches/fix-links/libs/wave/doc/preface.html 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -23,7 +23,7 @@
     <td width="30"></td>
   </tr>
 </table>
-<p>During the last time many new features were developed as additions to the <tt>Spirit</tt>
+<p>During the last time many new features have been developed as additions to the <tt>Spirit</tt>
   <a href="references.html#spirit">[4]</a> parser construction framework and we
   felt more and more, that it would be very helpful, to have a 'real world' example,
   which could be used as a sandbox for testing the usability of certain features.
@@ -41,7 +41,7 @@
 <p align="justify"> The C++ preprocessor is a macro processor that under normal
   circumstances is used automatically by your C++ compiler to transform your program
   before actual compilation. It is called a macro processor because it allows
- you to define macros, which are brief abbreviations for longer constructs. The
+ to define macros, which are brief abbreviations for longer constructs. The
   C++ preprocessor provides four separate facilities that you can use as you see
   fit: </p>
 <blockquote>
@@ -61,7 +61,7 @@
   generative metaprogramming combined with template metaprogramming in C++ is
   by far one of the most powerful compile-time reflection/metaprogramming facilities
   that any language has ever supported.</p>
-<p>The C++ Standard [2] was adopted back in 1998, but there is still no (known to me) C++ compiler, which has a bugfree implementation of the rather simple preprocessor requirements mandated therein. This may be a result of the mentioned underestimation or even banning of the preprocessor from good programming style during the last few years or may stem from the somewhat awkward standardese dialect of English used to describe it. </p>
+<p>The C++ Standard [2] was adopted back in 1998, but there is still no (known to me) commercial C++ compiler, which has a bugfree implementation of the rather simple preprocessor requirements mandated therein. This may be a result of the mentioned underestimation or even banning of the preprocessor from good programming style during the last few years or may stem from the somewhat awkward standardese dialect of English used to describe it. Two open source projects are exceptions of this: gcc and Clang (a subproject of LLVM), both providing preprocessors with very good standards conformance. </p>
 <p align="justify">So the main goals for the <tt>Wave</tt> project are:</p>
 <blockquote>
   <p><b><img src="theme/bullet.gif" width="13" height="13" id="IMG1">&nbsp;</b>full
@@ -88,8 +88,7 @@
 preprocessors when complexity increases.</p>
 <p>As tests showed, the <tt>Wave</tt> library is very conformant to the C++ Standard,
   such that it compiles several strict conformant macro definitions, which are
- not even compilable with EDG based preprocessors (i.e. Comeau or Intel). The only preprocessor known to have similar Standards conformance
-today is the preprocessor of the gcc C/C++ compiler.</p>
+not even compilable with EDG based preprocessors (i.e. Comeau or Intel). </p>
 <table border="0">
   <tr>
     <td width="10"></td>
@@ -104,7 +103,7 @@
 <font size="2">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) </font> </p>
 <span class="updated"></span>
 <p class="copyright"><span class="updated">Last updated:
- <!-- #BeginDate format:fcAm1m -->Sunday, May 15, 2005 12:23<!-- #EndDate -->
+ <!-- #BeginDate format:fcAm1m -->Sunday, December 2, 2007 19:03<!-- #EndDate -->
 </span></p>
 </body>
 </html>

Modified: branches/fix-links/libs/wave/doc/quickstart.html
==============================================================================
--- branches/fix-links/libs/wave/doc/quickstart.html (original)
+++ branches/fix-links/libs/wave/doc/quickstart.html 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -24,7 +24,7 @@
     <td width="30"></td>
   </tr>
 </table>
-<p>Preprocessing with Wave is highly configurable. You must
+<p>Preprocessing with <tt>Wave</tt> is highly configurable. You must
 define a few options to control it. Here are a few of the
 options you can define:</p>
 <BLOCKQUOTE dir="ltr" style="MARGIN-RIGHT: 0px">
@@ -38,13 +38,13 @@
   </P>
 </BLOCKQUOTE>
 <p>You can access all these processing parameters through the <tt>boost::wave::context</tt>
- object. So you must instantiate one object of this type to use the <tt>Wave</tt>
+ object. So you must instantiate one object instance of this type to use the <tt>Wave</tt>
   library. (For more information about the context template class, please refer
   to the class reference here.) To instantiate
   the <tt>boost::wave::context</tt> object you have to supply at least two template parameters:
   the iterator type of the underlying input stream to use and the type of the lexer iterator to be used as the token source for the preprocessing engine.</p>
 <P dir="ltr">Do not instantiate the main preprocessing iterators yourself.
-Get them from the wave::context object instead.
+Get them from the <tt>boost::wave::context</tt> object instead.
 The following code snippet is taken from the <tt>quick_start</tt> sample, which shows a minimal usage scenario for <tt>Wave</tt>. </P>
 <pre><span class="comment"> // The following preprocesses a given input file.
     // Open the file and read it into a string variable</span>
@@ -115,7 +115,7 @@
 <font size="2">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) </font> </p>
 <span class="updated"></span>
 <p class="copyright"><span class="updated">Last updated:
- <!-- #BeginDate format:fcAm1m -->Wednesday, July 26, 2006 19:28<!-- #EndDate -->
+ <!-- #BeginDate format:fcAm1m -->Sunday, December 2, 2007 19:06<!-- #EndDate -->
 </span></p>
 </body>
 </html>

Modified: branches/fix-links/libs/wave/index.html
==============================================================================
--- branches/fix-links/libs/wave/index.html (original)
+++ branches/fix-links/libs/wave/index.html 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -10,7 +10,7 @@
   <tr>
     <td width="21"> <h1></h1></td>
     <td width="885"> <font face="Verdana, Arial, Helvetica, sans-serif"><b><font size="6">Wave
- V1.2.4</font></b></font></td>
+ V1.3</font></b></font></td>
     <td width="96"></td>
   </tr>
 </table>
@@ -104,7 +104,7 @@
 <font size="2">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) </font> </p>
 <span class="updated"></span>
 <p class="copyright"><span class="updated">Last updated:
- <!-- #BeginDate format:fcAm1m -->Tuesday, May 23, 2006 12:37<!-- #EndDate -->
+ <!-- #BeginDate format:fcAm1m -->Sunday, December 2, 2007 18:57<!-- #EndDate -->
 </span></p>
 </body>
 </html>

Deleted: branches/fix-links/more/boost_soc_06_overview.html
==============================================================================
--- branches/fix-links/more/boost_soc_06_overview.html 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
+++ (empty file)
@@ -1,820 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0.1 Transitional//EN">
-
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-<title>An overview of Boost participation in
-Google Summer of Code&trade; 2006</title>
-<link rel="stylesheet" href="../boost.css" type="text/css">
-<style type="text/css">
-<!--
-table{
- PADDING-RIGHT: 2pt;
- BORDER-TOP: gray 1pt solid;
- DISPLAY: block;
- PADDING-LEFT: 2pt;
- PADDING-BOTTOM: 2pt;
- BORDER-LEFT: gray 1pt solid;
- MARGIN-RIGHT: 32pt;
- PADDING-TOP: 2pt;
- background-color: #EEEEEE;
-}
-td{
- BORDER-STYLE: solid;
- BORDER-WIDTH: 1pt;
- BORDER-LEFT: ;
- BORDER-RIGHT: gray 1pt solid;
- BORDER-TOP: ;
- BORDER-BOTTOM: gray 1pt solid;
-}
-th{color: #ffffff; background-color: #000000;}
-.odd_tr{background-color: #ffffff;}
--->
-</style>
-</head>
-
-<body>
-<img src="../boost.png" alt="boost.png (6308 bytes)" align="middle" width="277" height="86">
-<h1>An overview of Boost participation in
-Google Summer of Code&trade; 2006</h1>
-
-<hr>
-
-<p>
-For the second consecutive year, Google has conducted its
-Summer of Code™ initiative,
-a program by which student developers are sponsored for their contributions
-within open source organizations willing to mentor the participants. The 2006
-campaign has run between April and September, with active development work
-taking place between May 23 and August 21.
-</p>
-
-<p>
-Around mid April, when the program had just started, some Boost members began
-considering the possibility to enter Summer of Code as a mentoring
-organization. Despite the lack of time and the fact that most of us were
-completely new to this initiative, Boost managed to successfully apply for
-the program. As a result ten projects were selected and mentored, most of
-which are expected to become full contributions to Boost in the near future.
-</p>
-
-<p>
-We give here a summary report of this experience, along with a short analysis
-of the main problems we found, so that we can work at solving them and do
-better next year.
-</p>
-
-<h2>Contents</h2>
-
-<ul>
- <li>How the program works
- <ul>
- <li>2006 figures</li>
- </ul>
- </li>
- <li>Boost participation
- <ul>
- <li><a href="#application_and_process_selection">Application and
- process selection</a></li>
- <li>Accepted projects</li>
- <li>Development</li>
- <li>Results</li>
- </ul>
- </li>
- <li>Analysis
- <ul>
- <li>Boost appeal</li>
- <li>Opportunities lost?</li>
- <li>Projects startup</li>
- <li>Ongoing development</li>
- <li><a href="#public_communication_issues">Public communication
- issues</a></li>
- <li>Scope of projects</li>
- </ul>
- </li>
- <li>Suggestions for improvement
- <ul>
- <li>Preparation</li>
- <li>Public communication</li>
- <li>Project management</li>
- </ul>
- </li>
- <li>Conclusions</li>
- <li>Acknowledgements</li>
-</ul>
-
-
-<h2><a name="how_the_program_works">How the program works</a></h2>
-
-<p>
-There are three types of participants in Google Summer of Code:
-<ul>
- <li>Google itself acts as the funding partner and conducts the overall
- program.</li>
- <li>The open source organizations accepted into the program must designate
- people inside the organization who will act as project mentors.</li>
- <li>Students submit their project ideas and, if selected, work in
- collaboration with one of the mentoring organizations; upon successful
- completion of the project, students receive the full stipend for the
- program.</li>
-</ul>
-The program goes through the following stages:
-<ul>
- <li>Organization selection: those open source organizations willing to
- enter Summer of Code submit an expression of interest to Google, along
- with information Google uses for qualifying purposes. Selected organizations
- are publicly announced and each organization is expected to provide a pool
- of project ideas.</li>
- <li>Student selection: students willing to participate submit one or more
- project proposals, typically expanding on some of the ideas previously
- provided by the mentoring organizations. A student can apply several times
- and for different organizations, but ultimately can only be chosen for just
- one project. These proposals are routed by Google to the appropriate
- organizations, which must analyze them, rank them, and assign mentors to the
- most promising applications. Based on the information provided by mentoring
- organizations, Google issues the final list of accepted projects.</li>
- <li>Development: Students, guided by their assigned mentors, are expected to
- complete the projects in a period of three months. Google asks mentors for a
- mid-program review upon which continuation of the project depends.</li>
- <li>Final review: Once the development period is over, mentors are requested
- to inform Google on the results of the project, and determine whether students
- qualify to receive the full stipend.</li>
-</ul>
-</p>
-
-<h3><a name="2006_figures">2006 figures</a></h3>
-
-<p>
-The 2006 campaign of Google Summer of Code took place between April 14 and
-September 25. A total of 102 mentoring organizations participated. Of the 6,338
-applications submitted by 3,044 students around the globe, 630 were finally
-selected and funded. Google has spent more than US$3 million in student stipends
-and compensations to the mentoring organizations.
-</p>
-
-<h2><a name="#boost_participation">Boost participation</a></h2>
-
-<h3><a name="#application_and_process_selection">Application and
-process selection</a></h3>
-
-<p>
-On April 14, the same day Google Summer of Code started, Julio M. Merino Vidal
-(later to become one of the selected students) sent a message encouraging Boost
-members to participate in this program as a mentoring organization. This call
-sparked the interest of the community; although time was already short for doing
-all the preparation labors, Boost moderators put rapidly themselves to work and
-conducted the preliminary registration steps. In the meantime, a Wiki page was
-grown with project ideas provided by Boost members, totalling more than twenty
-proposals.
-</p>
-
-<p>
-By the beginning of May Boost was officially accepted into the program and Boost
-moderators set out to form a group of mentors, selected on an invitation basis.
-As student selection is a delicate process, involving the assessment of individuals
-on their technical skills, all subsequent discussions were conducted by the
-selected mentors on a private mail list established for their collaboration.
-</p>
-
-<p>
-We were not prepared for the avalanche of student applications that followed. On
-day two after the application period was open, we had received three proposals;
-next day it was 14, and within a week the count exceeded 50. By the end of the
-application period the total number of proposals received was 174, which forced
-us to go through a very intensive ranking process and recruit additional mentors.
-Two rules were followed so as rationalize the process of selection among dozens
-of different proposals:
-<ul>
- <li>Where there were competing applications for the same project idea, only
- one were to be ultimately selected; so, no two projects with the same or very
- similar goals were accepted.</li>
- <li>Some of the applications built on a given Boost library (for instance, the
- Boost Graph Library is a frequent target for the addition of algorithms.) We
- limited the applications to a maximum of two per Boost library.</li>
-</ul>
-These rules have the combined effect of greatly reducing the number of eligible
-applications while at the same time distributing the accepted projects evenly
-across the space of ideas. Moreover, students with unique proposals, i.e. project
-ideas not coming from the pool originally presented by Boost, are at a
-competitive advantage.
-</p>
-
-<p>
-The different proposals were classified according to its related technological
-area so that each cluster could be handled by an appointed mentor with the
-required expertise on the subject. Mentors submitted then "focus reports"
-summarizing the applications under their responsibility; these reports served as
-a first filter to help reduce the number of final applications to be evaluated
-jointly. Along the process, students with the most promising proposals were asked
-to refine their ideas and provide further information.
-</p>
-
-<p>
-Although not enforced by the official rules, we agreed upon a one-to-one ratio
-of mentors to students, which ultimately marked a hard limit on the maximum number
-of eligible projects.
-</p>
-
-<h3><a name="accepted_projects">Accepted projects</a></h3>
-
-<p>
-Google accepted and funded the ten top-ranked projects endorsed by Boost. Of
-these, eight projects are libraries or library components targeted for future
-inclusion into Boost, while the remaining two consist of utility programs
-heavily relying on Boost.
-</p>
-
-<blockquote>
-<b>C++ Coroutine Library</b>
-<br>
-Giovanni Piero Deretta, mentored by Eric Niebler.
-<br>
-Library for the management through a modern C++ interface of OS-provided
-coroutine facilities.
-</blockquote>
-
-<blockquote>
-<b>Concurrency Library</b>
-<br>
-Matthew Calabrese, mentored by David Abrahams.
-<br>
-STL-inspired generic framework for high-level specification and execution of
-parallelizable algorithms.
-</blockquote>
-
-<blockquote>
-<b>TR1 Math Special Functions</b>
-<br>
-Xiaogang Zhang, mentored by John Maddock.
-<br>
-Implementation of the 23 special mathematical functions specified in C++
-standard library extension proposal TR1.
-</blockquote>
-
-<blockquote>
-<b>The Boost.Process library</b>
-<br>
-Julio M. Merino Vidal, mentored by Jeff Garland.
-<br>
-Portable library for process launching and basic management.
-</blockquote>
-
-<blockquote>
-<b>Out-of-Core Graphs and Graph Algorithms</b>
-<br>
-St&eacute;phane Zampelli, mentored by Jeremy Siek.
-<br>
-Extension of the Boost Graph Library to deal with out-of-core structures,
-i.e. data sets too large to be kept in main memory at once.
-</blockquote>
-
-<blockquote>
-<b>MISC (M)ulti (I)ndex (S)pecialized (C)ontainers</b>
-<br>
-Mat&iacute;as Capeletto, mentored by Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
-<br>
-Families of specialized containers internally based on Boost.MultiIndex.
-</blockquote>
-
-<blockquote>
-<b>Generic Tree Container</b>
-<br>
-Bernhard Reiter, mentored by Ren&eacute; Rivera.
-<br>
-Design and implementation of a family of STL-compatible tree containers.
-</blockquote>
-
-<blockquote>
-<b>Viewer utility for FSMs</b>
-<br>
-Ioana Tibuleac, mentored by Andreas Huber D&ouml;nni.
-<br>
-Utility program for the visualization of finite state machines (FSMs) specified
-with Boost.Statechart.
-</blockquote>
-
-<blockquote>
-<b>Modular C++ preprocessor, using Boost.Spirit</b>
-<br>
-Hermanpreet 'Lally' Singh, mentored by Joel de Guzman.
-<br>
-Implementation with Boost.Spirit and Boost.Wave of a front-end translator
-from Modular C++ (as specified in a proposal to add modules to C++ by Daveed
-Vandevoorde) to standard C++.
-</blockquote>
-
-<blockquote>
-<b>Implementing a state of the art Mincut/Maxflow algorithm.</b>
-<br>
-Stephan Diederich, mentored by Douglas Gregor.
-<br>
-Implementation of a fast mincut/maxflow routine for the Boost Graph Library
-based on a new algorithm devised by Vladimir Kolmogorov.
-</blockquote>
-
-<h3><a name="development">Development</a></h3>
-
-<p>
-Two main facilities were set up to assist students and mentors during the
-development phase: a mailing list and a Trac/SVN project management system
-with separate directories for each project. One of the students, Mat&iacute;as
-Capeletto, out of personal initiative registered a Google Group aimed at giving
-students with Boost a place for informal interaction and discussion of common
-problems.
-</p>
-
-<p>
-After the initial warm-up period, each student-mentor pair performed development
-work mostly privately. The usage of the Boost mailing lists was scarce, and
-only by the end of the program did some students publicly announced their results.
-</p>
-
-<h3><a name="results">Results</a></h3>
-
-<p>
-By the date the development period was officially closed, the status of the
-different projects was as follows:
-<ul>
- <li>Seven projects were completed or nearly completed and the students are
- expected to ask for a formal review within 2006 or early 2007. Four of these
- projects necessitated a goal reorientation during development, basically
- because the original plan was too ambitious for three months. Most of the
- projects are still in active development during the months following the
- Summer of Code program.</li>
- <li>Two projects did not reach the planned goals, but nevertheless produced
- useful material that could be expanded outside of the Summer of Code
- program.</li>
- <li>One project was abandoned shortly after the midterm review. The reasons
- for the abandonment are unknown.</li>
-</ul>
-The results of all the projects can be consulted online at the dedicated
-<a href="https://www.boost-consulting.com:8443/trac/soc/browser/boost/soc/2006">Trac
-site</a>.
-</p>
-
-<h2><a name="analysis">Analysis</a></h2>
-
-<p>
-We examine the various stages of Boost participation in Summer of Code, with an
-emphasis on discovering opportunities for improvement.
-</p>
-
-<h3><a name="boost_appeal">Boost appeal</a></h3>
-
-<p>
-In a mid project
-<a href="http://code.google.com/soc/GSoC2006Statistics.pdf">presentation at OSCON
-2006</a>, Chris DiBona from Google provided some data about the organizations
-which received the most applications:
-</p>
-
-<p align="center">
-<table cellspacing="0">
-<tr>
- <th align="left">Organization</th>
- <th>No of applications</th>
-</tr>
-<tr>
- <td>KDE</td>
- <td align="center">244</td>
-</tr>
-<tr class="odd_tr">
- <td>Ubuntu &amp; Bazaar</td>
- <td align="center">236</td>
-</tr>
-<tr>
- <td>Python Software Foundation</td>
- <td align="center">212</td>
-</tr>
-<tr class="odd_tr">
- <td>GNOME</td>
- <td align="center">199</td>
-</tr>
-<tr>
- <td>Apache Software Foundation</td>
- <td align="center">190</td>
-</tr>
-<tr class="odd_tr">
- <td><b>Boost</b></td>
- <td align="center"><b>174</b></td>
-</tr>
-<tr>
- <td>Gaim</td>
- <td align="center">152</td>
-</tr>
-<tr class="odd_tr">
- <td>The GNU Project</td>
- <td align="center">148</td>
-</tr>
-<tr>
- <td>Drupal</td>
- <td align="center">146</td>
-</tr>
-</table>
-</p>
-<blockquote style="FONT-SIZE: 75%;">
-The numbers shown here have been estimated from a chart included in the
-presentation slides. This chart contains an additional column labeled "Google"
-which actually accounts for the applications dismissed because of their low
-quality.
-</blockquote>
-
-<p>
-The fact that Boost is ranked the sixth most attractive organization out of a
-total of 102 was entirely unexpected, especially considering the wide popularity
-of the rest of top-rated organizations. There is a more or less implicit
-consensus among Boost members that ours is a relatively niche project, known for
-its quality standards by seasoned C++ practitioners, but with a limited penetration
-among entry level programmers: maybe the figures above should make us reconsider
-this assumption. A cursory examination of the applications submitted to Boost reveals
-that most applicants were regular users of Boost: many cite the Boost status among
-the C++ community as an appealing factor in order to apply.
-</p>
-
-<h3><a name="opportunities_lost">Opportunities lost?</a></h3>
-
-<p>
-If we look at the number of funded projects with respect to the applications received,
-figures are not so favorable to Boost.</p>
-
-<p align="center">
-<table cellspacing="0">
-<tr>
- <th align="left">Organization</th>
- <th>No of projects</th>
- <th>Project/app ratio</th>
-</tr>
-<tr>
- <td>KDE</td>
- <td align="center">24</td>
- <td align="center">9.8 %</td>
-</tr>
-<tr class="odd_tr">
- <td>Ubuntu &amp; Bazaar</td>
- <td align="center">22</td>
- <td align="center">9.3 %</td>
-</tr>
-<tr>
- <td>Python Software Foundation</td>
- <td align="center">23</td>
- <td align="center">10.8 %</td>
-</tr>
-<tr class="odd_tr">
- <td>GNOME</td>
- <td align="center">19</td>
- <td align="center">9.5 %</td>
-</tr>
-<tr>
- <td>Apache Software Foundation</td>
- <td align="center">27</td>
- <td align="center">14.2 %</td>
-</tr>
-<tr class="odd_tr">
- <td><b>Boost</b></td>
- <td align="center"><b>10</b></td>
- <td align="center"><b>5.7 %</b></td>
-</tr>
-<tr>
- <td>Gaim</td>
- <td align="center">8</td>
- <td align="center">5.3 %</td>
-</tr>
-<tr class="odd_tr">
- <td>The GNU Project</td>
- <td align="center">10</td>
- <td align="center">6.8 %</td>
-</tr>
-<tr>
- <td>Drupal</td>
- <td align="center">14</td>
- <td align="center">9.6 %</td>
-</tr>
-</table>
-</p>
-
-<p>
-It turns out that the project/application ratio for almost any other organization
-among the top nine is considerably higher than that of Boost. As it happens, Google
-initially requested that organizations submitted the maximum number of projects they
-felt they could cope with, and we got funding for exactly what we aimed for, so the
-limiting factor lies entirely on Boost's side.
-</p>
-
-<h3><a name="projects_startup">Projects startup</a></h3>
-
-<p>
-Contributing to Boost relies on a fair number of guidelines and protocols for
-coding, documentation, testing and maintenance. Many of the required tools are
-exclusively used within Boost, and some of them are not trivial, like for instance
-Boost.Build. Although the Boost web site contains information about all these tools
-and procedures, this intelligence is scattered through unrelated pages and sometimes
-is very hard to come by.
-</p>
-
-<p>
-So, there is a good deal of expertise required to begin working at Boost. Some
-students have reported on startup difficulties getting to know these details and
-familiarizing themselves with the tools, most notably <code>bjam</code> and Quickbook. Each
-student overcome the startup difficulties on their own or resorting to their
-mentors (see the section on <a href="#public_communication_issues">public
-communication issues</a>).
-</p>
-
-<h3><a name="ongoing_development">Ongoing development</a></h3>
-
-<p>
-Once students got past the startup stage, most projects advanced without serious
-complications. In the majority of cases, it was realized at some point during
-the development that there was no time to complete it. Some participants had to
-redefine the goals in an effort to keep the project within schedule, while others
-simply decided that they would continue working after the official deadline of
-Summer of Code.
-</p>
-
-<p>
-The information flow between each student and their mentor was usually reported
-by both parties to be satisfactory. The projects suffering from lack of
-communication have been precisely those yielding the poorest results. In general,
-mentors have not felt overwhelmed by requests from their students, and even in a
-couple of cases the projects were run practically unattendedly. This fact is
-witness to the high competence of the students recruited into the program.
-</p>
-
-<p>
-The degree of usage of the Trac/SVN system has varied. Some students did frequent
-updates, while others have just used the repository to dump the final results for
-the official submission to Google.
-</p>
-
-<h3><a name="public_communication_issues">Public communication
-issues</a></h3>
-
-<p>
-Students and mentors had at their disposal three different forums for the public
-interchange of information and support:
-<ul>
- <li>Boost public lists, especially the developers and users lists.</li>
- <li>A dedicated mailing list reaching all students and mentors working at
- Summer of Code in Boost.</li>
- <li>A more casual Google Group, set up by one of the students, aimed at
- providing the participants with a place for socializing and resolution of
- common problems.</li>
-</ul>
-Despite this abundance of resources, there was an almost complete lack of group
-communication among all the parties involved and between these and the larger
-Boost community. Seemingly, students were satisfied to pursue their activities by
-relying on support from their mentors alone. This circumstance has prevented
-Boost members from enriching the initiative by offering their experience and
-insight, and has possibly led students to the false impression that contributing
-to Boost proceeds in a predictable linear path from requisites to completion of
-the work. When asked about their not engaging in public communication, the students
-gave vague justifications that can be classified into the following:
-<ul>
- <li>Doubts were deemed too technical or specific to be worth raising in
- public.</li>
- <li>A crave for perfectionism detracted students from asking or submitting work
- in progress until they felt their material looked good enough.</li>
- <li>Shyness: some students probably lacked previous experience communicating in
- public, and most are not English native speakers, which could also be a
- limiting factor.</li>
-</ul>
-Although students did not identify the following as a reason not to go public, it
-is likely that many of them did not feel the need given the readily access to their
-mentors they enjoyed. It is easy to grow used to such a dedicated source of support
-and neglect resorting to other resources. Mentors should have encouraged their
-students to pursue the public discussion of projects, which constitutes one of the
-pillars of Boost renowned quality.
-</p>
-
-<h3><a name="scope_of_projects">Scope of projects</a></h3>
-
-<p>
-In hindsight, it has become apparent that most projects were too ambitious to be
-completed within the three months of duration of the program, and even those that
-were considered a success will need weeks or months of polishing up before the
-material is ready for a formal review. In contrast with other organizations
-participating in the Summer of Code program, Boost has as of this writing included
-no results into its code base. No formal review for any project has been requested
-yet, either.
-</p>
-
-<p>
-These scope issues are very dependent on the particular type of project. We can
-classify the Boost projects for Summer of Code as follows:
-<ul>
- <li>Full-fledged libraries,</li>
- <li>additions to existing Boost libraries,</li>
- <li>utilities and tool projects using Boost.</li>
-</ul>
-Of these, additions (like for instance the mincut/maxflow algorithm for BGL by
-Stephan Diederich) are the most suitable for completion in a short period of time:
-most of the preparation work is already done, and the student has clear guides as
-to what coding and documentation standards to follow. Also, these projects need
-not undergo a formal review, since it is the responsibility of the hosting library
-author to review the code and include it within her discretion. Utility projects
-seem also suitable for small timeframes, though most project proposals and requests
-are naturally oriented to contributions of actual code to the Boost project.
-</p>
-
-<p>
-As for those projects involving the design and realization of full-fledged
-libraries, there is little hope that the goals and scope can be kept modest enough
-for a three-month schedule. Boost candidate libraries developed by professional
-authors usually take much longer than three months to be accepted; some libraries
-have been evolving through several <i>years</i> before being included into Boost.
-So, the best we can hope for if we are to support the realization of library projects
-for Boost inside Summer of Code is that the results by the end of the program can
-be evaluated to constitute a viable <i>potential</i> contribution to Boost. When this is
-the case, it is crucial that the student commits to further working on the project
-up to completion and formal review. Perhaps more important than getting libraries
-coded is to engage new authors into a long-term relationship with the Boost project.
-</p>
-
-<h2><a name="suggestions_for_improvement">Suggestions for improvement</a></h2>
-
-<p>
-The following proposals aim to alleviate some of the problems we have identified
-during the development of Summer of Code within Boost. These action points are
-related only to the issues found in connection with Boost: we are not addressing
-other areas of improvement associated to the Summer of Code program itself.
-</p>
-
-<h3><a name="preparation">Preparation</a></h3>
-
-<p>
-Much work can be done before the actual program begins. The following preparation
-activities can already be launched:
-</p>
-
-<p>
-<b>Create a pool of ideas for projects.</b> This action will provide valuable extra
-time for evaluation and refining of ideas before the Summer of Code begins.
-The experience has shown that those projects with more preparation work, especially
-in the area of design, were ultimately more successful. The pool can also be used
-to retain interesting ideas that arise at the mailing lists and very often are
-not given proper attention and become abandoned.
-</p>
-
-<p>
-<b>Create a student pool.</b> Prior involvement with Boost is clearly an advantage
-both in the selection phase and later during project development. Those students
-with a serious interest in participating in Summer of Code with Boost can enter
-the pool and begin exploring ideas and interacting with the community well in
-advance of the summer, so as to put themselves in a favorable position for the
-selection. Advertisement for the student pool can be initiated in the beginning of
-2007 through the usual channels (web site and mailing lists): additionally, Boost
-members involved with the University can spread this information locally and help
-raise the interest of students in their environment.
-</p>
-
-<p>
-<b>Create a mentor pool.</b> Given the rush with which Boost entered the 2006
-Summer of Code campaign, the invitation of mentors has to be done on an on-demand
-basis as it became all too evident that the task was growing bigger and bigger.
-It is important that the organization is better prepared next year so that a
-number of people with the ability and will to participate as Boost mentors are
-identified in advance.
-</p>
-
-<p>
-<b>Prepare a startup package.</b> In order to facilitate the initial period of
-getting familiarized with the various Boost guidelines, protocols and tools, it
-would be extremely useful to prepare a compilation of startup material for
-students. This package can consist of a single document gathering the currently
-dispersed information, or go beyond this and provide some bundle of documentation
-and pre-built tools, an approach that one of the students is currently working on.
-</p>
-
-<h3><a name="public_communication">Public communication</a></h3>
-
-<p>
-It is crucial that students get involved with the community as soon as possible
-and grow to appreciate the advantages of public development with respect to
-solitary coding.
-</p>
-
-<p>
-<b>Mandate (bi)weekly reports.</b> These reports should be directed to the public
-mailing lists so as to give all Boost members an opportunity to follow the work
-in progress and contribute. Reporting has the extra benefit for students of
-forcing them to reflect on their own work periodically and struggle with the
-often difficult task of presenting their ideas to others.
-</p>
-
-<p>
-<b>Conduct student-mentor exclusively through public channels.</b> This might be
-too drastic a policy, as some matters need privacy, and depending on the amount
-of information exchanged flooding problems may arise. Less severe variations
-involve allowing for some private interchange at the mentors' discretion and
-moving this kind of communication to a dedicated public mailing list different
-from the general ones.
-</p>
-
-<h3><a name="project_management">Project management</a></h3>
-
-<p>
-The two most important issues to improve upon with respect to the management are:
-<ul>
- <li>Project scope must be kept under control,</li>
- <li>The progress has to be publicly visible, so that problems of scope,
- design and/or schedule can be more easily detected.</li>
-</ul>
-Some of the proposals in this section are not to be regarded as strict rules,
-but rather as general guidelines to be kept in mind by students and encouraged
-by mentors.
-</p>
-
-<p>
-<b>Create a best practices document.</b> This document can serve as a guideline
-for project management, an area in which Boost traditionally imposes no
-requirements. Students might lack the expertise in this area that is usually
-taken for granted in the traditional model where contributions to Boost are
-made by professional programmers.
-</p>
-
-<p>
-<b>Mandate a design phase.</b> Having a concrete design set up and clearly
-described early in the project will help estimate the necessary effort for
-completion of the work. This is also an opportunity for public discussion.
-</p>
-
-<p>
-<b>Maintain code, docs and tests in parallel.</b> All too often, novice
-programmers do the coding in one fell swoop and only then move to testing and
-documenting their work. This is unacceptable by all current methodology
-standards, and can result in serious underestimations of the time to
-completion.
-</p>
-
-<p>
-<b>Encourage the KISS principle.</b> It is much better to finish a simpler library
-and then iteratively evolve it, once it has been exposed to public scrutiny and
-usage.
-</p>
-
-<p>
-<b>More Trac updates.</b> The repository should be viewed as an everyday work
-tool, not only as the place into which to dump the final results. Updating often
-leads to more visibility of the work by the mentor and the public in general.
-</p>
-
-<p>
-<b>Informal reviews.</b> The typical Summer of Code Boost project will not be
-completed by the official deadline, as have been discussed earlier. To somehow
-officialize the work done within the Summer of Code proper, and also to allow
-the students to reach some sort of psychological milestone, informal reviews can
-be instituted where Boost members evaluate the work done at then end of Summer
-of Code.
-</p>
-
-<p>
-<b>Engage students.</b> This experience has shown that it is possible to guide
-willing and bright students to the competence levels required for contributing
-to Boost. The best possible outcome of Summer of Code campaigns are the
-incorporation of new people into the circle of Boost active contributors. Strive
-to make the students commit to Boost.
-</p>
-
-<h2><a name="conclusions">Conclusions</a></h2>
-
-<p>
-Despite the lack of previous experience in Boost, our participation in Google
-Summer of Code has been extremely fruitful: much useful material has been produced,
-and, perhaps more importantly, some of the students are likely to commit on a
-long-term basis and grow to be regular Boost contributors. Traditionally, becoming
-a productive Boost author has a very high entry barrier due to the extreme quality
-standards, lack of public support and the very specific culture of the project.
-The appeal of Summer of Code itself and the possibility of being gently mentored
-into the world of Boost have most likely been key factors in lowering this entry
-barrier.
-</p>
-
-<p>
-The process has not been without some difficulties, either, as it was expected of
-a newcomer organization as Boost. We have tried to identify in this paper the
-areas of improvement and suggest specific actions so that the upcoming Google
-Summer of Code 2007 can be an even more rewarding experience.
-</p>
-
-<h2><a name="acknowledgements">Acknowledgements</a></h2>
-
-<p>
-This paper couldn't have been written without the numerous reports and contributions
-kindly provided by Boost students and mentors: Many thanks to all the participants
-for sharing their experiences with me. Thank you also to the people at Google who
-have promoted and conducted the Summer of Code initiative.
-</p>
-
-<hr>
-
-<p>Revised October 17th 2006</p>
-
-<p>&copy; Copyright 2006 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
-Distributed under the Boost Software
-License, Version 1.0. (See accompanying file <a href="../LICENSE_1_0.txt">
-LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
-http://www.boost.org/LICENSE_1_0.txt>)
-</p>
-
-</body>
-</html>

Deleted: branches/fix-links/more/formal_review_process.htm
==============================================================================
--- branches/fix-links/more/formal_review_process.htm 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
+++ (empty file)
@@ -1,350 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-
-<html>
- <head>
- <meta name="generator" content=
- "Microsoft FrontPage 5.0">
- <meta http-equiv="Content-Type" content=
- "text/html; charset=windows-1252">
- <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
- <meta name="ProgId" content="FrontPage.Editor.Document">
-
- <title>Boost Formal Review Process</title>
-<style type="text/css">
-_at_import ../boost.css
-.first {
- margin-top: 0 }
-.last {
- margin-bottom: 0 }
-div.attention, div.caution, div.danger, div.error, div.hint,
-div.important, div.note, div.tip, div.warning, div.admonition {
- margin: 2em ;
- border: medium outset ;
- padding: 1em }
-div.attention p.admonition-title, div.caution p.admonition-title,
-div.danger p.admonition-title, div.error p.admonition-title,
-div.warning p.admonition-title {
- color: red ;
- font-weight: bold ;
- font-family: sans-serif }
-div.hint p.admonition-title, div.important p.admonition-title,
-div.note p.admonition-title, div.tip p.admonition-title,
-div.admonition p.admonition-title {
- font-weight: bold ;
- font-family: sans-serif }
-</style>
-</head>
-
-<body bgcolor="#FFFFFF" text="#000000">
- <table border="1" bgcolor="#007F7F" cellpadding="2">
- <tr>
- <td bgcolor="#FFFFFF"><img src="../boost.png" alt=
- "boost.png (6897 bytes)" width="277" height="86"></td>
-
- <td><a href="../index.htm"><font face="Arial" color=
- "#FFFFFF"><big>Home</big></font></a></td>
-
- <td><a href="../libs/libraries.htm"><font face="Arial" color=
- "#FFFFFF"><big>Libraries</big></font></a></td>
-
- <td><a href="
http://beta.boost.org/users/people.html"><font face="Arial" color=
- "#FFFFFF"><big>People</big></font></a></td>
-
- <td><a href="faq.htm"><font face="Arial" color=
- "#FFFFFF"><big>FAQ</big></font></a></td>
-
- <td><a href="index.htm"><font face="Arial" color=
- "#FFFFFF"><big>More</big></font></a></td>
- </tr>
- </table>
-
- <h1>Boost Formal Review Process</h1>
- <div class="admonition-note admonition">
- <p class="first admonition-title">Before Requesting a Formal Review</p>
- <p class="last"><b>Read and follow the Boost <a href=
- "submission_process.htm">submission process</a>.</b>&nbsp; There are at
- least four steps a library author must take before a formal review is
- requested.</p>
- </div>
-
- <p>Introduction<br>
- What to include in Review Comments<br>
- Results<br>
- Notes for Review Managers<br>
- Notes for Library Submitters<br>
- Review Wizard<br>
- Fast Track Reviews</p>
-
- <h2><a name="Introduction" id="Introduction">Introduction</a></h2>
-
- <p>Proposed libraries are accepted into Boost only after undergoing a
- formal review, where Boost mailing list members comment on their evaluation
- of the library.</p>
-
- <p>The final "accept" or "reject" decision is made by the <a href=
- "#Review_Manager">Review Manager</a>, based on the review comments received
- from boost mailing list members.</p>
-
- <p>Boost mailing list members are encouraged to submit Formal Review
- comments:</p>
-
- <blockquote>
- <ul>
- <li>Publicly on the mailing list.</li>
-
- <li>Privately to the Review Manager.</li>
- </ul>
- </blockquote>
-
- <p>Private comments to a library submitter may be helpful to her or him,
- but won't help the Review Manager reach a decision, so the other forms are
- preferred.</p>
-
- <h2>What to include in Review <a name="Comments" id=
- "Comments">Comments</a></h2>
-
- <p>Your comments may be brief or lengthy, but basically the Review Manager
- needs your evaluation of the library.&nbsp; If you identify problems along
- the way, please note if they are minor, serious, or showstoppers.</p>
-
- <p>The goal of a Boost library review is to improve the library through
- constructive criticism, and at the end a decision must be made: is the
- library good enough at this point to accept into Boost? If not, we hope to
- have provided enough constructive criticism for it to be improved and
- accepted at a later time. The Serialization library is a good example of how
- constructive criticism resulted in revisions resulting in an excellent
- library that was accepted in its second review.</p>
-
- <p>Here are some questions you might want to answer in your review:</p>
-
- <ul>
- <li>What is your evaluation of the design?<br></li>
-
- <li>What is your evaluation of the implementation?<br></li>
-
- <li>What is your evaluation of the documentation?<br></li>
-
- <li>What is your evaluation of the potential usefulness of the
- library?<br></li>
-
- <li>Did you try to use the library?&nbsp; With what compiler?&nbsp; Did
- you have any problems?<br></li>
-
- <li>How much effort did you put into your evaluation? A glance? A quick
- reading? In-depth study?<br></li>
-
- <li>Are you knowledgeable about the problem domain?</li>
- </ul>
-
- <p>And finally, every review should answer this question:<br></p>
-
- <ul>
- <li>Do you think the library should be accepted as a Boost library?&nbsp;
- Be sure to say this explicitly so that your other comments don't obscure
- your overall opinion.</li>
- </ul>
-
- <p>Many reviews include questions for library authors. Authors are
- interested in defending their library against your criticisms; otherwise
- they would not have brought their library up for review. If you don't get a
- response to your question quickly, be patient; if it takes too long or you
- don't get an answer you feel is sufficient, ask again or try to rephrase the
- question. Do remember that English is not the native language for many
- Boosters, and that can cause misunderstandings.<br>
- <br>
- E-mail is a poor communication medium, and even if messages rarely get lost
- in transmission, they often get drowned in the deluge of other messages.
- Don't assume that an unanswered message means you're being ignored. Given
- constructively, criticism will be taken better and have more positive
- effects, and you'll get the answers you want.</p>
-
- <h2><a name="Results">Results</a></h2>
-
- <p>At the conclusion of the comment period, the Review Manager will post a
- message to the mailing list saying if the library has been accepted or
- rejected.&nbsp; A rationale is also helpful, but its extent is up to the
- Review Manager. If there are suggestions, or conditions that must be met
- before final inclusion, they should be stated.</p>
-
- <h2>Notes for <a name="Review_Manager" id="Review_Manager">Review
- Manager</a>s</h2>
-
- <p>Before a library can be scheduled for formal review, an active boost
- member not connected with the library submission must volunteer to be the
- "Review Manager" for the library.</p>
-
- <p>The Review Manager:</p>
-
- <ul>
- <li>Checks the submission to make sure it really is complete enough to
- warrant formal review.&nbsp; See the <a href="lib_guide.htm">Boost
- Library Requirements and Guidelines</a>.&nbsp; If necessary, work with
- the submitter to verify the code compiles and runs correctly on several
- compilers and platforms.</li>
-
- <li>Finalizes the schedule with the Review Wizard
- and the submitter .</li>
-
- <li>Posts a notice of the review schedule on the regular <b><a href=
- "mailto:boost_at_[hidden]">boost</a></b> mailing list, the
- <b><a href="mailto:boost-users_at_[hidden]">boost-users</a></b>
- mailing list, and the <b><a href=
- "mailto:boost-announce_at_[hidden]">boost-announce</a></b> mailing
- list.
-
- <ul>
- <li>The notice should include a brief description of the library and
- what it does, to let readers know if the library is one they are
- interested in reviewing.</li>
-
- <li>If the library is known to fail with certain compilers, please
- mention them in the review notice so reviewers with those compilers
- won't waste time diagnosing known problems.</li>
- </ul>
- </li>
-
- <li>Inspects the Boost <a href="../libs/libraries.htm">library
- catalogue</a> for libraries which may interact with the new submission.
- These potential interactions should be pointed out in the review
- announcement, and the author(s) of these libraries should be privately
- notified and urged to participate in the review.</li>
-
- <li>Urges people to do reviews if they aren't forthcoming.</li>
-
- <li>Follows review discussions regarding the library, moderating or
- answering questions as needed.</li>
-
- <li>Asks the review wizard for permission
- to extend the review schedule if it appears that too few reviews will
- be submitted during the review period.</li>
-
- <li>Decides if there is consensus to accept the library, and if there
- are any conditions attached.</li>
-
- <li>Decides if there is consensus to accept the library, and if there are
- any conditions attached.</li>
-
- <li>Posts a notice of the review results on the
- regular <b><a href="mailto:boost_at_[hidden]">boost</a></b> mailing
- list, the <b><a href=
- "mailto:boost-users_at_[hidden]">boost-users</a></b> mailing list,
- and the <b><a href=
- "mailto:boost-announce_at_[hidden]">boost-announce</a></b> mailing
- list.</li>
- </ul>
-
- <p>In other words, it is the Review Manager's responsibility to make sure
- the review process works smoothly.</p>
-
- <h2>Notes for Library <a name="Submitters" id=
- "Submitters">Submitters</a></h2>
-
- <p>See Submission Process for a
- description of the steps a library developer goes through to get a library
- accepted by Boost.</p>
-
- <p>A proposed library should remain stable during the review period; it
- will just confuse and irritate reviewers if there are numerous
- changes.&nbsp; It is, however, useful to upload fixes for serious bugs
- right away, particularly those which prevent reviewers from fully
- evaluating the library.&nbsp; Post a notice of such fixes on the mailing
- list.</p>
-
- <p>Library improvements suggested by reviewers should normally be held
- until after the completion of review period.&nbsp; If the suggested changes
- might affect reviewer's judgments,&nbsp;post a notice of the pending change
- on the mailing list.</p>
-
- <h2>Review <a name="Wizard" id="Wizard">Wizard</a></h2>
-
- <p>The Review Wizard coordinates the formal review schedule:</p>
-
- <ul>
- <li>Maintains a list of review manager volunteers, in the form of a
- queue, so that volunteers who least recently managed reviews become the
- prime candidates for upcoming reviews.</li>
-
- <li>When a formal review is requested for a library:</li>
-
- <li style="list-style: none">&nbsp;
-
- <ul>
- <li>Assign a review manager and suggests a schedule, after checking
- (via private email) availability of the volunteers at the top of
- review manager queue.</li>
-
- <li>Finalize the schedule, once the review manager verifies the
- library is actually ready for review.</li>
-
- <li>Resolve schedule slips or other issues with review managers and
- submitters.</li>
- </ul>
- </li>
-
- <li>Monitors the general review process, and makes minor adjustments as
- needed, or queries the list about possible major adjustments.</li>
- </ul>
- The role of Boost Review Wizard is currently played by John
- Phillips (phillips at mps dot ohio-state dot edu) and Ronald
- Garcia (garcia at cs dot indiana dot edu).
-
- <li>Resolves questions from review managers and library submitters, who
- sometimes want a third opinion on questions such as "Should we extend the
- review period because ...?"</li>
-
- <li>Monitors the general review process, and makes minor adjustments as
- needed, or queries the list about possible major adjustments.</li>
- </ul>The role of Boost Review Wizard is currently played by <a href=
- "mailto:reportbase_at_[hidden]">Tom Brinkman</a> and Ronald Garcia (garcia at
- cs dot indiana dot edu).
-
- <p>Revised
- <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->10 October, 2006<!--webbot bot="Timestamp" endspan i-checksum="38930" --></p>
-
- <p>To qualify for fast track review:</p>
-
- <ul>
- <li>The component must be small.</li>
-
- <li>The technique must be already in use in Boost libraries and the new
- component provides a common implementation.</li>
-
- <li>A full Boost-conformant implementation is available in the
- sandbox.</li>
-
- <li>The Review Wizard determines that the proposal qualifies for fast
- track review.</li>
- </ul>
-
- <p>Procedure:</p>
-
- <ul>
- <li>The Boost Review Wizard posts a review announcement to the main Boost
- developer's list. The review period will normally last for 5 days. No two
- fast track reviews will run in parallel. Fast track reviews may run
- during full reviews, though generally this is to be avoided.</li>
-
- <li>After the review period ends, the submitter will post a review
- summary containing proposed changes to the reviewed implementation.</li>
-
- <li>The Review Wizard will accept or reject the proposed library and
- proposed changes.</li>
-
- <li>After applying the proposed changes, the component is checked into
- CVS like any other library.<br>
- &nbsp;</li>
- </ul>
- <hr>
-
- <p>Revised
- <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->15
- October, 2003<!--webbot bot="Timestamp" endspan i-checksum="38556" --></p>
-
- <p>&copy; Copyright Beman Dawes 2000</p>
-
- <p>Distributed under the Boost Software License, Version 1.0. (See
- accompanying file LICENSE_1_0.txt or copy
- at <a href=
- "http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt>)</p>
-</body>
-</html>

Modified: branches/fix-links/status/explicit-failures-markup.xml
==============================================================================
--- branches/fix-links/status/explicit-failures-markup.xml (original)
+++ branches/fix-links/status/explicit-failures-markup.xml 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -1487,13 +1487,44 @@
     <!-- function_types -->
     <library name="function_types">
         <mark-expected-failures>
- <test name="nonmember_ccs"/>
- <test name="nonmember_ccs_exact"/>
             <test name="member_ccs"/>
             <test name="member_ccs_exact"/>
             <toolset name="acc*"/>
+ <toolset name="darwin-4.0.1"/>
+ <toolset name="gcc-*"/>
+ <toolset name="hp_cxx*"/>
+ <toolset name="intel*"/>
+ <toolset name="msvc-*_64"/>
+ <toolset name="msvc-*wm*"/>
+ <toolset name="pathscale-*"/>
+ <note author="Tobias Schwinger">
+ Not all compilers/platforms implement nonstandard calling conventions.
+ <hr/>
+ With GCC/x86 this failure reflects
+
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=29328 .
+ </note>
+ </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="nonmember_ccs"/>
+ <test name="nonmember_ccs_exact"/>
+ <toolset name="acc*"/>
+ <toolset name="darwin-4.0.1"/>
+ <toolset name="gcc-*"/>
             <toolset name="hp_cxx*"/>
- <note author="Boris Gubenko" refid="44"/>
+ <toolset name="intel*"/>
+ <toolset name="msvc-*_64"/>
+ <toolset name="msvc-*wm*"/>
+ <toolset name="pathscale-*"/>
+ <note author="Tobias Schwinger">
+ Not all compilers/platforms implement nonstandard calling conventions.
+ </note>
+ </mark-expected-failures>
+ <mark-expected-failures>
+ <test name="interfaces_example"/>
+ <toolset name="msvc-7.1"/>
+ <note author="Tobias Schwinger">
+ Overload selection does not work in some assignment contexts with this compiler.
+ </note>
         </mark-expected-failures>
     </library>
 
@@ -5437,6 +5468,7 @@
             <test name="value_init_test"/>
             <toolset name="gcc-3.3*"/>
             <toolset name="gcc-3.4*"/>
+ <toolset name="gcc-4.0*"/>
             <toolset name="gcc-4.1*"/>
             <toolset name="gcc-4.2*"/>
             <toolset name="gcc-mingw-3.4*"/>

Modified: branches/fix-links/tools/boostbook/xsl/annotation.xsl
==============================================================================
--- branches/fix-links/tools/boostbook/xsl/annotation.xsl (original)
+++ branches/fix-links/tools/boostbook/xsl/annotation.xsl 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
    Copyright (c) 2002 Douglas Gregor <doug.gregor -at- gmail.com>
-
+
    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)
@@ -21,10 +21,10 @@
   <xsl:template match="function|overloaded-function" mode="generate.id">
     <xsl:variable name="name" select="normalize-space(@name)"/>
     <xsl:variable name="translated-name"
- select="translate($name,
- '~!%^&amp;*()[].,&lt;&gt;|/ +-=',
+ select="translate($name,
+ '~!%^&amp;*()[].,&lt;&gt;|/ +-=',
                                     'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')"/>
-
+
     <xsl:choose>
       <xsl:when test="count(key('named-entities', $name))=1
                       and ($translated-name=$name)">
@@ -163,7 +163,7 @@
       <xsl:with-param name="name" select="$name"/>
       <xsl:with-param name="display-name" select="string(.)"/>
       <xsl:with-param name="unqualified-name" select="$unqualified-name"/>
- <xsl:with-param name="nodes"
+ <xsl:with-param name="nodes"
         select="key('functions', $unqualified-name)"/>
     </xsl:call-template>
   </xsl:template>
@@ -207,7 +207,7 @@
       <xsl:with-param name="name" select="$name"/>
       <xsl:with-param name="display-name" select="string(.)"/>
       <xsl:with-param name="unqualified-name" select="$unqualified-name"/>
- <xsl:with-param name="nodes"
+ <xsl:with-param name="nodes"
         select="key('enums', $unqualified-name)"/>
     </xsl:call-template>
   </xsl:template>
@@ -225,7 +225,7 @@
     </xsl:variable>
 
     <xsl:variable name="node" select="key('libraries', $name)"/>
-
+
     <xsl:choose>
       <xsl:when test="count($node)=0">
         <xsl:message>
@@ -254,7 +254,7 @@
 
   <xsl:template match="macroname" mode="annotation">
     <xsl:param name="name" select="text()"/>
-
+
     <xsl:variable name="node" select="key('macros', $name)"/>
     <xsl:choose>
       <xsl:when test="count($node) = 0">
@@ -290,7 +290,7 @@
 
   <xsl:template match="headername" mode="annotation">
     <xsl:param name="name" select="text()"/>
-
+
     <xsl:variable name="node" select="key('headers', $name)"/>
     <xsl:choose>
       <xsl:when test="count($node) = 0">
@@ -350,6 +350,10 @@
     </emphasis>
   </xsl:template>
 
+ <xsl:template match="description" mode="annotation">
+ <xsl:apply-templates mode="annotation"/>
+ </xsl:template>
+
   <xsl:template match="comment()" mode="annotation">
     <xsl:copy/>
   </xsl:template>

Modified: branches/fix-links/tools/boostbook/xsl/chunk-common.xsl
==============================================================================
--- branches/fix-links/tools/boostbook/xsl/chunk-common.xsl (original)
+++ branches/fix-links/tools/boostbook/xsl/chunk-common.xsl 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -27,7 +27,8 @@
     <xsl:variable name="basename" select="substring-before( $their, $html.ext )"/>
     <xsl:choose>
         <xsl:when test="not($recursive)">
- <xsl:value-of select="translate( $basename, '.', '/' )"/>
+ <!-- translate dots into directory separators, and replace illegal file path characters with underscores -->
+ <xsl:value-of select="translate( $basename, '.&lt;&gt;\:*?&quot;|', '/_______' )"/>
             <xsl:value-of select="$html.ext"/>
         </xsl:when>
         <xsl:otherwise>

Modified: branches/fix-links/tools/boostbook/xsl/lookup.xsl
==============================================================================
--- branches/fix-links/tools/boostbook/xsl/lookup.xsl (original)
+++ branches/fix-links/tools/boostbook/xsl/lookup.xsl 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -14,15 +14,13 @@
   <!-- Generate an ID for the entity referenced -->
   <xsl:template name="generate.id">
     <xsl:param name="node" select="."/>
- <xsl:choose>
- <xsl:when test="ancestor::class-specialization|ancestor::struct-specialization|ancestor::union-specialization">
- <xsl:value-of select="generate-id(.)"/>
- <xsl:text>-bb</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:apply-templates select="$node" mode="generate.id"/>
- </xsl:otherwise>
- </xsl:choose>
+ <xsl:apply-templates select="$node" mode="generate.id"/>
+ <xsl:if test="$node/ancestor-or-self::class-specialization|
+ $node/ancestor-or-self::struct-specialization|
+ $node/ancestor-or-self::union-specialization">
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="generate-id($node)"/>
+ </xsl:if>
   </xsl:template>
 
   <xsl:template match="*" mode="generate.id">

Modified: branches/fix-links/tools/boostbook/xsl/type.xsl
==============================================================================
--- branches/fix-links/tools/boostbook/xsl/type.xsl (original)
+++ branches/fix-links/tools/boostbook/xsl/type.xsl 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -33,6 +33,13 @@
     </xsl:call-template>
   </xsl:template>
 
+ <xsl:template match="class-specialization|struct-specialization|union-specialization" mode="generate.id">
+ <xsl:call-template name="fully-qualified-name">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="separator" select="'.'"/>
+ </xsl:call-template>
+ </xsl:template>
+
   <xsl:template match="typedef" mode="generate.id">
     <xsl:call-template name="fully-qualified-name">
       <xsl:with-param name="node" select="."/>
@@ -56,6 +63,15 @@
     <xsl:value-of select="@name"/>
   </xsl:template>
 
+ <xsl:template match="function | overloaded-function" mode="generate.id">
+ <xsl:call-template name="fully-qualified-name">
+ <xsl:with-param name="node" select="."/>
+ <xsl:with-param name="separator" select="'.'"/>
+ </xsl:call-template>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="generate-id(.)"/>
+ </xsl:template>
+
   <!-- Display the full name of the current node, e.g., "Class
        template function". -->
   <xsl:template name="type.display.name">
@@ -518,6 +534,10 @@
           <xsl:apply-templates select="type/*|type/text()" mode="annotation"/>
         </xsl:when>
         <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>Warning: missing 'type' element inside 'inherit'</xsl:text>
+ </xsl:message>
+ <xsl:call-template name="print.warning.context"/>
           <xsl:apply-templates mode="annotation"/>
         </xsl:otherwise>
       </xsl:choose>
@@ -540,8 +560,8 @@
         <xsl:call-template name="highlight-comment">
           <xsl:with-param name="text">
             <xsl:text>// </xsl:text>
- <xsl:apply-templates select="purpose/*|purpose/text()"
- mode="annotation"/>
+ <xsl:apply-templates select="purpose"
+ mode="comment"/>
           </xsl:with-param>
         </xsl:call-template>
       </xsl:if>
@@ -855,7 +875,6 @@
             <xsl:apply-templates select="purpose" mode="comment"/>
           </xsl:with-param>
         </xsl:call-template>
- <xsl:text>&#10;</xsl:text>
       </xsl:if>
     </xsl:if>
 
@@ -878,7 +897,19 @@
       <xsl:with-param name="keyword" select="$class-key"/>
     </xsl:call-template>
     <xsl:text> </xsl:text>
- <xsl:value-of select="@name"/>
+
+ <!-- Make the class name a link to the class reference page (useful for nested classes) -->
+ <xsl:call-template name="internal-link">
+ <xsl:with-param name="to">
+ <xsl:call-template name="generate.id">
+ <xsl:with-param name="node" select="."/>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="text">
+ <xsl:value-of select="@name"/>
+ </xsl:with-param>
+ </xsl:call-template>
+
     <xsl:apply-templates select="specialization"/>
 
     <xsl:choose>
@@ -1190,7 +1221,7 @@
           <xsl:call-template name="highlight-comment">
             <xsl:with-param name="text">
               <xsl:text>// </xsl:text>
- <xsl:apply-templates select="purpose/*|purpose/text()" mode="annotation"/>
+ <xsl:apply-templates select="purpose" mode="comment"/>
             </xsl:with-param>
           </xsl:call-template>
 
@@ -1415,10 +1446,7 @@
           </xsl:call-template>
         </term>
         <listitem>
- <xsl:apply-templates
- select="purpose/*|purpose/text()|
- description/*|description/text()"
- mode="annotation"/>
+ <xsl:apply-templates select="purpose|description" mode="comment"/>
         </listitem>
       </varlistentry>
     </xsl:if>

Modified: branches/fix-links/tools/boostbook/xsl/utility.xsl
==============================================================================
--- branches/fix-links/tools/boostbook/xsl/utility.xsl (original)
+++ branches/fix-links/tools/boostbook/xsl/utility.xsl 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -21,12 +21,13 @@
 
   <!-- get name of first ancestor-or-self which is a class, struct or union -->
   <xsl:template name="object-name">
- <xsl:value-of select="(ancestor-or-self::class |
+ <xsl:variable name="ancestors" select="ancestor-or-self::class |
       ancestor-or-self::class-specialization |
       ancestor-or-self::struct |
       ancestor-or-self::struct-specialization |
       ancestor-or-self::union |
- ancestor-or-self::union-specialization)/@name[last()]"/>
+ ancestor-or-self::union-specialization"/>
+ <xsl:value-of select="$ancestors[last()]/@name"/>
   </xsl:template>
 
   <!-- get name of access specification that we are inside -->

Modified: branches/fix-links/tools/build/v2/roll.sh
==============================================================================
--- branches/fix-links/tools/build/v2/roll.sh (original)
+++ branches/fix-links/tools/build/v2/roll.sh 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -52,10 +52,21 @@
 rm roll.sh
 chmod a+x jam_src/build.bat
 cd .. && zip -r boost-build.zip boost-build && tar --bzip2 -cf boost-build.tar.bz2 boost-build
+# Copy packages to a location where they are grabbed for beta.boost.org
+cp boost-build.zip boost-build.tar.bz2 ~/public_html/boost_build_nightly
 cd boost-build
 
 chmod -R u+w *
 # Upload docs to sourceforge
-perl -pi -e 's%<!-- sf logo -->%SourceForge.net Logo%' index.html doc/*.html
+x=`cat <<EOF
+<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+_uacct = "UA-2917240-2";
+urchinTracker();
+</script>
+EOF`
+echo $x
+perl -pi -e "s|</body>|$x</body>|" `find doc -name '*.html'`
 scp -r doc example boost_build.png *.html hacking.txt vladimir_prus_at_[hidden]:/home/groups/b/bo/boost/htdocs/boost-build2
 scp ../userman.pdf vladimir_prus_at_[hidden]:/home/groups/b/bo/boost/htdocs/boost-build2/doc

Modified: branches/fix-links/tools/build/v2/tools/darwin.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/darwin.jam (original)
+++ branches/fix-links/tools/build/v2/tools/darwin.jam 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -1,6 +1,9 @@
 # Copyright 2003 Christopher Currie
 # Copyright 2006 Dave Abrahams
 # Copyright 2003, 2004, 2005, 2006 Vladimir Prus
+# Copyright 2005-2007 Mat Marcus
+# Copyright 2005-2007 Adobe Systems Incorporated
+# Copyright 2007 Rene Rivera
 # Distributed under the Boost Software License, Version 1.0.
 # (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 
@@ -12,6 +15,7 @@
 import type ;
 import common ;
 import generators ;
+import path : basename ;
 
 feature.extend toolset : darwin ;
 import gcc ;
@@ -22,10 +26,13 @@
 
 toolset.inherit-rules darwin : gcc ;
 toolset.inherit-flags darwin : gcc
- : # On Darwin, static runtime is just not supported. So don't inherit
- # any flags settings for <runtime-link>static
- <runtime-link>static
- ;
+ : <runtime-link>static
+ <architecture>x86/<address-model>32
+ <architecture>x86/<address-model>64
+ <architecture>x86/<instruction-set>
+ <architecture>power/<address-model>32
+ <architecture>power/<address-model>64
+ <architecture>power/<instruction-set> ;
 
 # No additional initialization should be necessary
 rule init ( version ? : command * : options * )
@@ -49,8 +56,109 @@
 
 feature framework : : free ;
 
+# The following adds objective-c support to darwin.
+# Thanks to http://thread.gmane.org/gmane.comp.lib.boost.build/13759
+
+type.register OBJECTIVE_C : m ;
+type.register OBJECTIVE_CPP : mm ;
+
+generators.register-c-compiler darwin.compile.m : OBJECTIVE_C : OBJ : <toolset>darwin ;
+generators.register-c-compiler darwin.compile.mm : OBJECTIVE_CPP : OBJ : <toolset>darwin ;
+
+rule compile.m
+{
+ LANG on $(<) = "-x objective-c" ;
+}
+
+actions compile.m
+{
+ "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
+}
+
+rule compile.mm
+{
+ LANG on $(<) = "-x objective-c++" ;
+}
+
+actions compile.mm
+{
+ "$(CONFIG_COMMAND)" $(LANG) $(OPTIONS) $(USER_OPTIONS) -D$(DEFINES) -I"$(INCLUDES)" -c -o "$(<)" "$(>)"
+}
+
+# Determine the MacOSX SDK versions installed and their locations.
+local rule available-macosx-versions ( )
+{
+ local sdks = [ GLOB /Developer/SDKs : MacOSX* ] ;
+ for local sdk in $(sdks)
+ {
+ local sdk-version = [ MATCH ([0-9]+)[.]([0-9]+)[.]?([0-9]+)? : $(sdk:D=) ] ;
+ sdk-version = $(sdk-version:J=.) ;
+ if $(sdk-version)
+ {
+ .macosx-sdk = $(sdk-version) $(.macosx-sdk) ;
+ .macosx-sdk.$(sdk-version) = $(sdk) ;
+ }
+ }
+ return $(.macosx-sdk) ;
+}
+
+# Add the found SDK version only to the allowed set. The "latests" SDKs
+# wil be first in the list, and hence the default.
+feature macosx-version
+ : [ available-macosx-versions ]
+ : propagated link-incompatible symmetric ;
+if 10.4 in [ feature.values macosx-version ]
+{
+ feature.set-default macosx-version : 10.4 ;
+}
+
+# Add the options for all the found SDKs.
+for local sdk in $(.macosx-sdk)
+{
+ flags darwin.compile OPTIONS <macosx-version>$(sdk) :
+ -isysroot $(.macosx-sdk.$(sdk))
+ -mmacosx-version-min=$(sdk)
+ ;
+ flags darwin.link OPTIONS <macosx-version>$(sdk) :
+ -isysroot $(.macosx-sdk.$(sdk))
+ -mmacosx-version-min=$(sdk)
+ ;
+}
+
+# Add option selection for combined and specific architecture combinations.
+
+local rule arch-addr-flags ( toolset variable
+ : architecture : address-model + : values + : default ? )
+{
+ if $(default)
+ {
+ flags $(toolset) $(variable)
+ <architecture>$(architecture)/<address-model>
+ : $(values) ;
+ }
+ flags $(toolset) $(variable)
+ <architecture>/<address-model>$(address-model)
+ <architecture>$(architecture)/<address-model>$(address-model)
+ : $(values) ;
+}
+
+arch-addr-flags darwin OPTIONS : combined : 32 : -arch i386 -arch ppc : default ;
+arch-addr-flags darwin OPTIONS : combined : 64 : -arch x86_64 -arch ppc64 ;
+
+arch-addr-flags darwin OPTIONS : x86 : 32 : -arch i386 : default ;
+arch-addr-flags darwin OPTIONS : x86 : 64 : -arch x86_64 ;
+
+arch-addr-flags darwin OPTIONS : power : 32 : -arch ppc : default ;
+arch-addr-flags darwin OPTIONS : power : 64 : -arch ppc64 ;
+
+
+flags darwin.link OPTIONS <runtime-link>static
+ : -nodefaultlibs -shared-libgcc -lstdc++-static -lgcc_eh -lgcc -lSystem ;
+
+flags darwin.link OPTIONS <variant>release : -Wl,-dead_strip -no_dead_strip_inits_and_terms ;
+
 flags darwin.compile OPTIONS <link>shared : -dynamic ;
-flags darwin.compile OPTIONS : -Wno-long-double -no-cpp-precomp ;
+flags darwin.compile OPTIONS : -Wno-long-double -no-cpp-precomp -gdwarf-2 ;
 
 flags darwin.link FRAMEWORK <framework> ;
 
@@ -86,11 +194,12 @@
 
 actions link.dll bind LIBRARIES
 {
- $(CONFIG_COMMAND) -dynamiclib -L"$(LINKPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(FRAMEWORK_PATH) -framework$(_)$(FRAMEWORK:D=:S=) $(OPTIONS) $(USER_OPTIONS)
+ $(CONFIG_COMMAND) -dynamiclib -install_name "$(<:B)$(<:S)" -L"$(LINKPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(FRAMEWORK_PATH) -framework$(_)$(FRAMEWORK:D=:S=) $(OPTIONS) $(USER_OPTIONS)
 }
 
+# We use libtool instead of ar to support universal binary linking
+# TODO: Find a way to use the underlying tools, i.e. lipo, to do this.
 actions piecemeal archive
 {
- ar -c -r -s $(ARFLAGS) "$(<:T)" "$(>:T)"
+ libtool -static -o "$(<:T)" $(ARFLAGS) "$(>:T)"
 }
-

Modified: branches/fix-links/tools/build/v2/tools/msvc.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/msvc.jam (original)
+++ branches/fix-links/tools/build/v2/tools/msvc.jam 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -315,11 +315,11 @@
                     # selected by the "amd64" parameter to vcvarsall.bat.
                     # There are two variables we can use --
                     # PROCESSOR_ARCHITECTURE and PROCESSOR_IDENTIFIER.
- # The first reflects processor proper, and the second is
- # empirically found to be always x86 when using 32-bit
+ # The first is 'x86' when running 32-bit windows,
+ # no matter what processor is, and 'AMD64' on 64-bit
+ # windows on x86 (either AMD64 or EM64T).
                     # windows.
- if [ MATCH ^(AMD64) : [ os.environ PROCESSOR_IDENTIFIER ] ]
- || [ MATCH ^(EM64T) : [ os.environ PROCESSOR_IDENTIFIER ] ]
+ if [ MATCH ^(AMD64) : [ os.environ PROCESSOR_ARCHITECTURE ] ]
                     {
                         setup-option = x86 amd64 x86_ia64 ;
                     }

Modified: branches/fix-links/tools/build/v2/tools/pgi.jam
==============================================================================
--- branches/fix-links/tools/build/v2/tools/pgi.jam (original)
+++ branches/fix-links/tools/build/v2/tools/pgi.jam 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -11,6 +11,7 @@
 import fortran ;
 import type ;
 import common ;
+import gcc ;
 
 feature.extend toolset : pgi ;
 toolset.inherit pgi : unix ;
@@ -41,6 +42,8 @@
 
   flags pgi.link FINDLIBS-SA : [
     feature.get-values <find-shared-library> : $(options) ] : unchecked ;
+
+ gcc.init-link-flags pgi gnu $(condition) ;
 }
 
 # Declare generators
@@ -49,7 +52,8 @@
 generators.register-fortran-compiler pgi.compile.fortran : FORTRAN : OBJ : <toolset>pgi ;
 
 # Declare flags and actions for compilation
-flags pgi.compile OPTIONS <link>shared : -shared -fpic ;
+flags pgi.compile OPTIONS : -Kieee ;
+flags pgi.compile OPTIONS <link>shared : -fpic ;
 flags pgi.compile OPTIONS <debug-symbols>on : -g ;
 flags pgi.compile OPTIONS <profiling>on : -xprofile=tcov ;
 flags pgi.compile OPTIONS <optimization>speed : -fast -Mx,8,0x10000000 ;
@@ -93,7 +97,7 @@
 flags pgi.link LINKPATH <library-path> ;
 flags pgi.link FINDLIBS-ST <find-static-library> ;
 flags pgi.link FINDLIBS-SA <find-shared-library> ;
-flags pgi.link FINDLIBS-SA <threading>multi : pthread ;
+flags pgi.link FINDLIBS-SA <threading>multi : pthread rt ;
 flags pgi.link LIBRARIES <library-file> ;
 flags pgi.link LINK-RUNTIME <runtime-link>static : static ;
 flags pgi.link LINK-RUNTIME <runtime-link>shared : dynamic ;
@@ -129,7 +133,7 @@
 
 actions link.dll bind LIBRARIES
 {
- "$(CONFIG_COMMAND)" -shared -fpic $(OPTIONS) -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -Bdynamic -l$(FINDLIBS-SA) -Bstatic -l$(FINDLIBS-ST) -B$(LINK-RUNTIME)
+ "$(CONFIG_COMMAND)" $(OPTIONS) -shared -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" -Wl,-h -Wl,$(<[1]:D=) "$(LIBRARIES)" -Bdynamic -l$(FINDLIBS-SA) -Bstatic -l$(FINDLIBS-ST) -B$(LINK-RUNTIME)
 }
 
 actions updated together piecemeal pgi.archive

Modified: branches/fix-links/tools/jam/doc/bjam.qbk
==============================================================================
--- branches/fix-links/tools/jam/doc/bjam.qbk (original)
+++ branches/fix-links/tools/jam/doc/bjam.qbk 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -1,6 +1,6 @@
 [article Boost.Jam
     [quickbook 1.3]
- [version: 3.1.16]
+ [version: 3.1.17]
     [authors [Rivera, Rene], [Abrahams, David], [Prus, Vladimir]]
     [copyright 2003 2004 2005 2006 2007 Rene Rivera, David Abrahams, Vladimir Prus]
     [category tool-build]
@@ -21,7 +21,7 @@
 
 [/ Shortcuts ]
 
-[def :version: 3.1.16]
+[def :version: 3.1.17]
 
 [/ Images ]
 

Modified: branches/fix-links/tools/jam/doc/history.qbk
==============================================================================
--- branches/fix-links/tools/jam/doc/history.qbk (original)
+++ branches/fix-links/tools/jam/doc/history.qbk 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -5,6 +5,10 @@
 This is mostly a bug fix release.
 
 [list
+ [li Work around some Windows CMD.EXE programs that will fail executing a totally
+ empty batch file.
+ -- ['Rene R.]
+ ]
     [li Add support for detection and building with =vc9=.
         -- ['John P.]
         ]

Modified: branches/fix-links/tools/jam/src/boost-jam.spec
==============================================================================
--- branches/fix-links/tools/jam/src/boost-jam.spec (original)
+++ branches/fix-links/tools/jam/src/boost-jam.spec 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -1,5 +1,5 @@
 Name: boost-jam
-Version: 3.1.16
+Version: 3.1.17
 Summary: Build tool
 Release: 1
 Source: %{name}-%{version}.tgz

Modified: branches/fix-links/tools/jam/src/build.jam
==============================================================================
--- branches/fix-links/tools/jam/src/build.jam (original)
+++ branches/fix-links/tools/jam/src/build.jam 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -13,7 +13,7 @@
 ./ ?= "" ;
 
 # Info about what we are building.
-_VERSION_ = 3 1 16 ;
+_VERSION_ = 3 1 17 ;
 NAME = boost-jam ;
 VERSION = $(_VERSION_:J=$(.)) ;
 RELEASE = 1 ;

Modified: branches/fix-links/tools/jam/src/execnt.c
==============================================================================
--- branches/fix-links/tools/jam/src/execnt.c (original)
+++ branches/fix-links/tools/jam/src/execnt.c 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -238,7 +238,7 @@
     }
 
     /* Trim leading, -ending- white space */
- while( isspace( *command ) )
+ while( *(command+1) && isspace( *command ) )
         ++command;
 
     /* Write to .BAT file unless the line would be too long and it

Modified: branches/fix-links/tools/jam/src/patchlevel.h
==============================================================================
--- branches/fix-links/tools/jam/src/patchlevel.h (original)
+++ branches/fix-links/tools/jam/src/patchlevel.h 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -9,9 +9,9 @@
 
 #define VERSION_MAJOR 3
 #define VERSION_MINOR 1
-#define VERSION_PATCH 16
+#define VERSION_PATCH 17
 #define VERSION_MAJOR_SYM "03"
 #define VERSION_MINOR_SYM "1"
-#define VERSION_PATCH_SYM "16"
-#define VERSION "3.1.16"
+#define VERSION_PATCH_SYM "17"
+#define VERSION "3.1.17"
 #define JAMVERSYM "JAMVERSION=3.1"

Modified: branches/fix-links/tools/regression/src/collect_and_upload_logs.py
==============================================================================
--- branches/fix-links/tools/regression/src/collect_and_upload_logs.py (original)
+++ branches/fix-links/tools/regression/src/collect_and_upload_logs.py 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -17,6 +17,8 @@
 import os.path
 import string
 import sys
+import re
+import urlparse
 
 
 def process_xml_file( input_file, output_file ):
@@ -176,23 +178,32 @@
             utils.log('Dart server error: %s' % e)
 
 
-def upload_to_ftp( tag, results_file, ftp_proxy, debug_level ):
- ftp_site = 'fx.meta-comm.com'
- site_path = '/boost-regression'
- utils.log( 'Uploading log archive "%s" to ftp://%s%s/%s' % ( results_file, ftp_site, site_path, tag ) )
+def upload_to_ftp( tag, results_file, ftp_proxy, debug_level, ftp_url ):
+
+ if not ftp_url:
+ ftp_host = 'boost.cowic.de'
+ ftp_url = ''.join(['ftp','://anonymous','@',ftp_host,'/boost/test/results/'])
+ utils.log( 'Uploading log archive "%s" to %s/%s' % ( results_file, ftp_url, tag ) )
+
+ ftp_parts = urlparse.urlparse(ftp_url)
+ ftp_netloc = re.split('[@]',ftp_parts[1])
+ ftp_user = re.split('[:]',ftp_netloc[0])[0]
+ ftp_password = re.split('[:]',ftp_netloc[0]+':anonymous')[1]
+ ftp_site = re.split('[:]',ftp_netloc[1])[0]
+ ftp_path = ftp_parts[2]
     
     if not ftp_proxy:
         ftp = ftplib.FTP( ftp_site )
         ftp.set_debuglevel( debug_level )
- ftp.login()
+ ftp.login( ftp_user, ftp_password )
     else:
         utils.log( ' Connecting through FTP proxy server "%s"' % ftp_proxy )
         ftp = ftplib.FTP( ftp_proxy )
         ftp.set_debuglevel( debug_level )
         ftp.set_pasv (0) # turn off PASV mode
- ftp.login( 'anonymous@%s' % ftp_site, 'anonymous@' )
+ ftp.login( '%s@%s' % (ftp_user,ftp_site), ftp_password )
 
- ftp.cwd( site_path )
+ ftp.cwd( ftp_path )
     try:
         ftp.cwd( tag )
     except ftplib.error_perm:
@@ -323,11 +334,12 @@
         , send_bjam_log = False
         , timestamp_file = None
         , dart_server = None
+ , ftp_url = None
         , **unused
         ):
 
     logs_archive = os.path.join( results_dir, '%s.zip' % runner_id )
- upload_to_ftp( tag, logs_archive, ftp_proxy, debug_level )
+ upload_to_ftp( tag, logs_archive, ftp_proxy, debug_level, ftp_url )
     if send_bjam_log:
         bjam_log_path = os.path.join( results_dir, 'bjam.log' )
         if not timestamp_file:
@@ -336,7 +348,7 @@
         timestamp = time.strftime( '%Y-%m-%d-%H-%M-%S', read_timestamp( timestamp_file ) )
         logs_archive = os.path.join( results_dir, '%s.%s.log.zip' % ( runner_id, timestamp ) )
         compress_file( bjam_log_path, logs_archive )
- upload_to_ftp( '%s/logs' % tag, logs_archive, ftp_proxy, debug_level )
+ upload_to_ftp( '%s/logs' % tag, logs_archive, ftp_proxy, debug_level, ftp_url )
 
 
 def collect_and_upload_logs(
@@ -355,6 +367,7 @@
         , send_bjam_log = False
         , dart_server = None
         , http_proxy = None
+ , ftp_url = None
         , **unused
         ):
     
@@ -383,6 +396,7 @@
         , send_bjam_log
         , timestamp_file
         , dart_server = dart_server
+ , ftp_url = ftp_url
         )
 
 
@@ -404,6 +418,7 @@
         , 'help'
         , 'dart-server='
         , 'revision='
+ , 'ftp='
         ]
     
     options = {
@@ -419,6 +434,7 @@
         , '--debug-level' : 0
         , '--dart-server' : 'beta.boost.org:8081'
         , '--revision' : None
+ , '--ftp' : None
         
         }
     
@@ -439,7 +455,8 @@
         , 'debug_level' : int(options[ '--debug-level' ])
         , 'send_bjam_log' : options.has_key( '--send-bjam-log' )
         , 'dart_server' : options[ '--dart-server' ]
- , 'revision ' : options[ '--revision' ]
+ , 'revision' : options[ '--revision' ]
+ , 'ftp' : options[ '--ftp' ]
         }
 
 
@@ -475,6 +492,7 @@
 \t--debug-level debugging level; controls the amount of debugging
 \t output printed; 0 by default (no debug output)
 \t--dart-server The dart server to send results to.
+\t--ftp The ftp URL to upload results to.
 ''' % '\n\t'.join( commands.keys() )
 
     

Modified: branches/fix-links/tools/regression/src/regression.py
==============================================================================
--- branches/fix-links/tools/regression/src/regression.py (original)
+++ branches/fix-links/tools/regression/src/regression.py 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -26,7 +26,7 @@
     'trunk' : 'trunk',
     'release' : 'branches/release',
     'build' : 'trunk/tools/build/v2',
- 'jam' : 'tags/tools/jam/Boost_Jam_3_1_15/src',
+ 'jam' : 'tags/tools/jam/Boost_Jam_3_1_16/src',
     'regression' : 'trunk/tools/regression',
     'boost-build.jam'
                     : 'trunk/boost-build.jam'
@@ -84,6 +84,8 @@
             action='store_true' )
 
         #~ Connection Options:
+ opt.add_option( '--ftp',
+ help="FTP URL to upload results to." )
         opt.add_option( '--proxy',
             help="HTTP proxy server address and port (e.g.'http://www.someproxy.com:3128')" )
         opt.add_option( '--ftp-proxy',
@@ -121,6 +123,7 @@
         self.local=None
         self.force_update=False
         self.have_source=False
+ self.ftp=None
         self.proxy=None
         self.ftp_proxy=None
         self.dart_server=None
@@ -386,17 +389,31 @@
     def command_upload_logs(self):
         self.import_utils()
         from collect_and_upload_logs import upload_logs
- self.retry(
- lambda:
- upload_logs(
- self.regression_results,
- self.runner, self.tag,
- self.user,
- self.ftp_proxy,
- self.debug_level, self.send_bjam_log,
- self.timestamp_path,
- self.dart_server )
- )
+ if self.ftp:
+ self.retry(
+ lambda:
+ upload_logs(
+ self.regression_results,
+ self.runner, self.tag,
+ self.user,
+ self.ftp_proxy,
+ self.debug_level, self.send_bjam_log,
+ self.timestamp_path,
+ self.dart_server,
+ ftp_url = self.ftp )
+ )
+ else:
+ self.retry(
+ lambda:
+ upload_logs(
+ self.regression_results,
+ self.runner, self.tag,
+ self.user,
+ self.ftp_proxy,
+ self.debug_level, self.send_bjam_log,
+ self.timestamp_path,
+ self.dart_server )
+ )
     
     def command_regression(self):
         import socket

Modified: branches/fix-links/tools/regression/xsl_reports/boost_wide_report.py
==============================================================================
--- branches/fix-links/tools/regression/xsl_reports/boost_wide_report.py (original)
+++ branches/fix-links/tools/regression/xsl_reports/boost_wide_report.py 2007-12-06 20:12:02 EST (Thu, 06 Dec 2007)
@@ -484,8 +484,8 @@
         os.makedirs( merged_dir )
     
     if not dont_collect_logs:
- ftp_site = 'fx.meta-comm.com'
- site_path = '/boost-regression/%s' % tag
+ ftp_site = 'boost.cowic.de'
+ site_path = '/boost/test/results/%s' % tag
 
         ftp_task( ftp_site, site_path, incoming_dir )
 


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk