Boost logo

Boost-Commit :

From: eric_at_[hidden]
Date: 2007-12-06 02:20:11


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

Log:
Merged revisions 41678-41775 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r41679 | anthonyw | 2007-12-03 23:57:23 -0800 (Mon, 03 Dec 2007) | 1 line
  
  fixed typo in condition_variable_any::timed_wait
........
  r41681 | anthonyw | 2007-12-04 01:15:37 -0800 (Tue, 04 Dec 2007) | 1 line
  
  changed boost::move to boost::detail::thread_move to fix issue #1492
........
  r41682 | anthonyw | 2007-12-04 02:04:30 -0800 (Tue, 04 Dec 2007) | 1 line
  
  split shared mutex tests in two to take less time
........
  r41683 | anthonyw | 2007-12-04 03:44:25 -0800 (Tue, 04 Dec 2007) | 1 line
  
  don't dllexport/dllimport inline functions
........
  r41684 | anthonyw | 2007-12-04 04:08:38 -0800 (Tue, 04 Dec 2007) | 1 line
  
  add explicit casts to remove warnings
........
  r41686 | anthonyw | 2007-12-04 05:02:58 -0800 (Tue, 04 Dec 2007) | 1 line
  
  Added test for thread move constructor; implemented move on pthreads
........
  r41687 | anthonyw | 2007-12-04 06:07:01 -0800 (Tue, 04 Dec 2007) | 1 line
  
  changed order of declaration to eliminate warnings
........
  r41688 | nesotto | 2007-12-04 06:41:44 -0800 (Tue, 04 Dec 2007) | 1 line
  
  ticket 1488
........
  r41696 | fmhess | 2007-12-04 11:42:08 -0800 (Tue, 04 Dec 2007) | 2 lines
  
  Make sure output filenames don't include any illegal characters.
........
  r41697 | fmhess | 2007-12-04 11:45:10 -0800 (Tue, 04 Dec 2007) | 4 lines
  
  Fixed printing of object name for nested classes (merge of
  revision 41421 from sandbox/boost_docs).
........
  r41698 | fmhess | 2007-12-04 11:55:50 -0800 (Tue, 04 Dec 2007) | 17 lines
  
  Made generated ids for functions and overloaded functions human-readable
  which also results in (mostly) human-readable names for
  their .html output files. Made generate.id template properly use
  its node parameter (merge of parts of revision 41461 from sandbox/boost_docs).
  
  Made class name in synopsis a link to class reference page, which is useful
  for nested classes (merge of revision 41435 from sandbox/boost_docs).
  
  Removed spurious new line in synopisis between a nested class
  and the comment describing its purpose (merge of revision 41434 from
  sandbox/boost_docs).
  
  Added a warning if an "inherit" element has
  no "type" child element (partial merge of revision 41463 from
  sandbox/boost_docs).
........
  r41701 | chris_kohlhoff | 2007-12-04 13:28:42 -0800 (Tue, 04 Dec 2007) | 2 lines
  
  Prevent deprecated function warnings for MSVC >= 8.
........
  r41703 | nasonov | 2007-12-04 13:49:51 -0800 (Tue, 04 Dec 2007) | 1 line
  
  Link to html version of [Tuning] and BOOST_LEXICAL_CAST_ASSUME_C_LOCALE synopsis
........
  r41704 | igaztanaga | 2007-12-04 14:05:28 -0800 (Tue, 04 Dec 2007) | 1 line
  
  Added Leopard workaround. _POSIX_THREAD_PROCESS_SHARED is defined but does not seem to work. For the moment, Mac OS will use emulation code
........
  r41705 | djenkins | 2007-12-04 14:19:58 -0800 (Tue, 04 Dec 2007) | 1 line
  
  Fix msvc-9.0 code analysis problem
........
  r41707 | noel_belcourt | 2007-12-04 15:18:38 -0800 (Tue, 04 Dec 2007) | 6 lines
  
  Fixes to get pgi shared libraries working, executables
  that don't core, and limiting the number of error
  messages emitted by the compiler so as to reduce the
  size of the log file.
........
  r41727 | grafik | 2007-12-04 16:32:04 -0800 (Tue, 04 Dec 2007) | 1 line
  
  Switch FTP site for results.
........
  r41734 | noel_belcourt | 2007-12-04 19:11:25 -0800 (Tue, 04 Dec 2007) | 5 lines
  
  Pgi compilers can't accept shared library with Boost version
  suffix appended to it. Add logic to tag rule in Jamroot to
  suppress appending version suffix for pgi toolset.
........
  r41735 | noel_belcourt | 2007-12-04 19:20:30 -0800 (Tue, 04 Dec 2007) | 3 lines
  
  Patch pgi shared library use.
........
  r41736 | grafik | 2007-12-04 20:33:36 -0800 (Tue, 04 Dec 2007) | 1 line
  
  Fix parsing of macosx version numbers from detected SDKs.
........
  r41738 | anthonyw | 2007-12-05 00:27:44 -0800 (Wed, 05 Dec 2007) | 1 line
  
  added missing include of detail/config.hpp
........
  r41739 | t_schwinger | 2007-12-05 02:24:21 -0800 (Wed, 05 Dec 2007) | 3 lines
  
  clarifies #error message
........
  r41740 | t_schwinger | 2007-12-05 02:26:16 -0800 (Wed, 05 Dec 2007) | 2 lines
  
  updates function_types failures
........
  r41741 | anthonyw | 2007-12-05 02:58:45 -0800 (Wed, 05 Dec 2007) | 1 line
  
  improved timeout checks
........
  r41742 | t_schwinger | 2007-12-05 05:20:13 -0800 (Wed, 05 Dec 2007) | 3 lines
  
  attempts to fix strange problems with Pathscale compilers
........
  r41762 | chris_kohlhoff | 2007-12-05 13:46:19 -0800 (Wed, 05 Dec 2007) | 2 lines
  
  Don't use deprecated function workaround when compiling for Windows CE.
........
  r41770 | ramey | 2007-12-05 18:33:59 -0800 (Wed, 05 Dec 2007) | 2 lines
  
  change to fix failures with gcc 4.1+
  modification to string input primitives
........
  r41775 | djenkins | 2007-12-05 22:23:55 -0800 (Wed, 05 Dec 2007) | 1 line
  
  Avoid bug in Microsoft Code Analysis
........

Added:
   branches/proto/v3/libs/thread/test/shared_mutex_locking_thread.hpp
      - copied unchanged from r41775, /trunk/libs/thread/test/shared_mutex_locking_thread.hpp
   branches/proto/v3/libs/thread/test/test_shared_mutex_part_2.cpp
      - copied unchanged from r41775, /trunk/libs/thread/test/test_shared_mutex_part_2.cpp
   branches/proto/v3/libs/thread/test/test_thread_move.cpp
      - copied unchanged from r41775, /trunk/libs/thread/test/test_thread_move.cpp
Properties modified:
   branches/proto/v3/ (props changed)
Text files modified:
   branches/proto/v3/Jamroot | 4
   branches/proto/v3/boost/archive/impl/basic_binary_iprimitive.ipp | 2
   branches/proto/v3/boost/archive/impl/text_iarchive_impl.ipp | 2
   branches/proto/v3/boost/asio/detail/socket_ops.hpp | 12 +
   branches/proto/v3/boost/foreach.hpp | 3
   branches/proto/v3/boost/interprocess/detail/workaround.hpp | 4
   branches/proto/v3/boost/ptr_container/detail/move.hpp | 9 +
   branches/proto/v3/boost/thread/detail/move.hpp | 32 ++-
   branches/proto/v3/boost/thread/locks.hpp | 42 ++--
   branches/proto/v3/boost/thread/pthread/thread.hpp | 18 +-
   branches/proto/v3/boost/thread/pthread/tss.hpp | 1
   branches/proto/v3/boost/thread/win32/condition_variable.hpp | 2
   branches/proto/v3/boost/thread/win32/thread.hpp | 12
   branches/proto/v3/boost/xpressive/proto/context/default.hpp | 3
   branches/proto/v3/libs/conversion/lexical_cast.htm | 15 +
   branches/proto/v3/libs/foreach/test/rvalue_const.cpp | 3
   branches/proto/v3/libs/function_types/example/interpreter.hpp | 3
   branches/proto/v3/libs/function_types/test/custom_ccs/member_ccs.cpp | 2
   branches/proto/v3/libs/function_types/test/custom_ccs/member_ccs_exact.cpp | 2
   branches/proto/v3/libs/function_types/test/custom_ccs/nonmember_ccs.cpp | 2
   branches/proto/v3/libs/function_types/test/custom_ccs/nonmember_ccs_exact.cpp | 2
   branches/proto/v3/libs/thread/src/pthread/thread.cpp | 31 ++++
   branches/proto/v3/libs/thread/src/win32/thread.cpp | 26 +-
   branches/proto/v3/libs/thread/test/Jamfile.v2 | 2
   branches/proto/v3/libs/thread/test/test_mutex.cpp | 14 +
   branches/proto/v3/libs/thread/test/test_shared_mutex.cpp | 310 ---------------------------------------
   branches/proto/v3/status/explicit-failures-markup.xml | 20 +-
   branches/proto/v3/tools/boostbook/xsl/annotation.xsl | 22 +-
   branches/proto/v3/tools/boostbook/xsl/chunk-common.xsl | 3
   branches/proto/v3/tools/boostbook/xsl/lookup.xsl | 16 -
   branches/proto/v3/tools/boostbook/xsl/type.xsl | 46 ++++-
   branches/proto/v3/tools/boostbook/xsl/utility.xsl | 5
   branches/proto/v3/tools/build/v2/tools/darwin.jam | 7
   branches/proto/v3/tools/build/v2/tools/pgi.jam | 7
   branches/proto/v3/tools/regression/src/collect_and_upload_logs.py | 38 +++-
   branches/proto/v3/tools/regression/src/regression.py | 39 +++-
   branches/proto/v3/tools/regression/xsl_reports/boost_wide_report.py | 4
   37 files changed, 310 insertions(+), 455 deletions(-)

Modified: branches/proto/v3/Jamroot
==============================================================================
--- branches/proto/v3/Jamroot (original)
+++ branches/proto/v3/Jamroot 2007-12-06 02:20:07 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/proto/v3/boost/archive/impl/basic_binary_iprimitive.ipp
==============================================================================
--- branches/proto/v3/boost/archive/impl/basic_binary_iprimitive.ipp (original)
+++ branches/proto/v3/boost/archive/impl/basic_binary_iprimitive.ipp 2007-12-06 02:20:07 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/proto/v3/boost/archive/impl/text_iarchive_impl.ipp
==============================================================================
--- branches/proto/v3/boost/archive/impl/text_iarchive_impl.ipp (original)
+++ branches/proto/v3/boost/archive/impl/text_iarchive_impl.ipp 2007-12-06 02:20:07 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/proto/v3/boost/asio/detail/socket_ops.hpp
==============================================================================
--- branches/proto/v3/boost/asio/detail/socket_ops.hpp (original)
+++ branches/proto/v3/boost/asio/detail/socket_ops.hpp 2007-12-06 02:20:07 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/proto/v3/boost/foreach.hpp
==============================================================================
--- branches/proto/v3/boost/foreach.hpp (original)
+++ branches/proto/v3/boost/foreach.hpp 2007-12-06 02:20:07 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/proto/v3/boost/interprocess/detail/workaround.hpp
==============================================================================
--- branches/proto/v3/boost/interprocess/detail/workaround.hpp (original)
+++ branches/proto/v3/boost/interprocess/detail/workaround.hpp 2007-12-06 02:20:07 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/proto/v3/boost/ptr_container/detail/move.hpp
==============================================================================
--- branches/proto/v3/boost/ptr_container/detail/move.hpp (original)
+++ branches/proto/v3/boost/ptr_container/detail/move.hpp 2007-12-06 02:20:07 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/proto/v3/boost/thread/detail/move.hpp
==============================================================================
--- branches/proto/v3/boost/thread/detail/move.hpp (original)
+++ branches/proto/v3/boost/thread/detail/move.hpp 2007-12-06 02:20:07 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/proto/v3/boost/thread/locks.hpp
==============================================================================
--- branches/proto/v3/boost/thread/locks.hpp (original)
+++ branches/proto/v3/boost/thread/locks.hpp 2007-12-06 02:20:07 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/proto/v3/boost/thread/pthread/thread.hpp
==============================================================================
--- branches/proto/v3/boost/thread/pthread/thread.hpp (original)
+++ branches/proto/v3/boost/thread/pthread/thread.hpp 2007-12-06 02:20:07 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/proto/v3/boost/thread/pthread/tss.hpp
==============================================================================
--- branches/proto/v3/boost/thread/pthread/tss.hpp (original)
+++ branches/proto/v3/boost/thread/pthread/tss.hpp 2007-12-06 02:20:07 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/proto/v3/boost/thread/win32/condition_variable.hpp
==============================================================================
--- branches/proto/v3/boost/thread/win32/condition_variable.hpp (original)
+++ branches/proto/v3/boost/thread/win32/condition_variable.hpp 2007-12-06 02:20:07 EST (Thu, 06 Dec 2007)
@@ -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/proto/v3/boost/thread/win32/thread.hpp
==============================================================================
--- branches/proto/v3/boost/thread/win32/thread.hpp (original)
+++ branches/proto/v3/boost/thread/win32/thread.hpp 2007-12-06 02:20:07 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/proto/v3/boost/xpressive/proto/context/default.hpp
==============================================================================
--- branches/proto/v3/boost/xpressive/proto/context/default.hpp (original)
+++ branches/proto/v3/boost/xpressive/proto/context/default.hpp 2007-12-06 02:20:07 EST (Thu, 06 Dec 2007)
@@ -28,9 +28,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(proto::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/proto/v3/libs/conversion/lexical_cast.htm
==============================================================================
--- branches/proto/v3/libs/conversion/lexical_cast.htm (original)
+++ branches/proto/v3/libs/conversion/lexical_cast.htm 2007-12-06 02:20:07 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/proto/v3/libs/foreach/test/rvalue_const.cpp
==============================================================================
--- branches/proto/v3/libs/foreach/test/rvalue_const.cpp (original)
+++ branches/proto/v3/libs/foreach/test/rvalue_const.cpp 2007-12-06 02:20:07 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/proto/v3/libs/function_types/example/interpreter.hpp
==============================================================================
--- branches/proto/v3/libs/function_types/example/interpreter.hpp (original)
+++ branches/proto/v3/libs/function_types/example/interpreter.hpp 2007-12-06 02:20:07 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/proto/v3/libs/function_types/test/custom_ccs/member_ccs.cpp
==============================================================================
--- branches/proto/v3/libs/function_types/test/custom_ccs/member_ccs.cpp (original)
+++ branches/proto/v3/libs/function_types/test/custom_ccs/member_ccs.cpp 2007-12-06 02:20:07 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/proto/v3/libs/function_types/test/custom_ccs/member_ccs_exact.cpp
==============================================================================
--- branches/proto/v3/libs/function_types/test/custom_ccs/member_ccs_exact.cpp (original)
+++ branches/proto/v3/libs/function_types/test/custom_ccs/member_ccs_exact.cpp 2007-12-06 02:20:07 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/proto/v3/libs/function_types/test/custom_ccs/nonmember_ccs.cpp
==============================================================================
--- branches/proto/v3/libs/function_types/test/custom_ccs/nonmember_ccs.cpp (original)
+++ branches/proto/v3/libs/function_types/test/custom_ccs/nonmember_ccs.cpp 2007-12-06 02:20:07 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/proto/v3/libs/function_types/test/custom_ccs/nonmember_ccs_exact.cpp
==============================================================================
--- branches/proto/v3/libs/function_types/test/custom_ccs/nonmember_ccs_exact.cpp (original)
+++ branches/proto/v3/libs/function_types/test/custom_ccs/nonmember_ccs_exact.cpp 2007-12-06 02:20:07 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/proto/v3/libs/thread/src/pthread/thread.cpp
==============================================================================
--- branches/proto/v3/libs/thread/src/pthread/thread.cpp (original)
+++ branches/proto/v3/libs/thread/src/pthread/thread.cpp 2007-12-06 02:20:07 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/proto/v3/libs/thread/src/win32/thread.cpp
==============================================================================
--- branches/proto/v3/libs/thread/src/win32/thread.cpp (original)
+++ branches/proto/v3/libs/thread/src/win32/thread.cpp 2007-12-06 02:20:07 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/proto/v3/libs/thread/test/Jamfile.v2
==============================================================================
--- branches/proto/v3/libs/thread/test/Jamfile.v2 (original)
+++ branches/proto/v3/libs/thread/test/Jamfile.v2 2007-12-06 02:20:07 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/proto/v3/libs/thread/test/test_mutex.cpp
==============================================================================
--- branches/proto/v3/libs/thread/test/test_mutex.cpp (original)
+++ branches/proto/v3/libs/thread/test/test_mutex.cpp 2007-12-06 02:20:07 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/proto/v3/libs/thread/test/test_shared_mutex.cpp
==============================================================================
--- branches/proto/v3/libs/thread/test/test_shared_mutex.cpp (original)
+++ branches/proto/v3/libs/thread/test/test_shared_mutex.cpp 2007-12-06 02:20:07 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/proto/v3/status/explicit-failures-markup.xml
==============================================================================
--- branches/proto/v3/status/explicit-failures-markup.xml (original)
+++ branches/proto/v3/status/explicit-failures-markup.xml 2007-12-06 02:20:07 EST (Thu, 06 Dec 2007)
@@ -1490,29 +1490,31 @@
             <test name="member_ccs"/>
             <test name="member_ccs_exact"/>
             <toolset name="acc*"/>
- <toolset name="hp_cxx*"/>
             <toolset name="darwin-4.0.1"/>
- <toolset name="gcc-4.2.1*"/>
- <toolset name="msvc_8.0_64"/>
+ <toolset name="gcc-*"/>
+ <toolset name="hp_cxx*"/>
             <toolset name="intel*"/>
+ <toolset name="msvc-*_64"/>
+ <toolset name="msvc-*wm*"/>
             <note author="Tobias Schwinger">
- Not all compilers implement nonstandard calling conventions.
+ Not all compilers/platforms implement nonstandard calling conventions.
               <hr/>
               With GCC/x86 this failure reflects
- gcc.gnu.org/bugzilla/show_bug.cgi?id=29328 .
+ 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="hp_cxx*"/>
             <toolset name="darwin-4.0.1"/>
- <toolset name="gcc-4.2.1*"/>
- <toolset name="msvc_8.0_64"/>
+ <toolset name="gcc-*"/>
+ <toolset name="hp_cxx*"/>
             <toolset name="intel*"/>
+ <toolset name="msvc-*_64"/>
+ <toolset name="msvc-*wm*"/>
             <note author="Tobias Schwinger">
- Not all compilers implement nonstandard calling conventions.
+ Not all compilers/platforms implement nonstandard calling conventions.
             </note>
         </mark-expected-failures>
     </library>

Modified: branches/proto/v3/tools/boostbook/xsl/annotation.xsl
==============================================================================
--- branches/proto/v3/tools/boostbook/xsl/annotation.xsl (original)
+++ branches/proto/v3/tools/boostbook/xsl/annotation.xsl 2007-12-06 02:20:07 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/proto/v3/tools/boostbook/xsl/chunk-common.xsl
==============================================================================
--- branches/proto/v3/tools/boostbook/xsl/chunk-common.xsl (original)
+++ branches/proto/v3/tools/boostbook/xsl/chunk-common.xsl 2007-12-06 02:20:07 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/proto/v3/tools/boostbook/xsl/lookup.xsl
==============================================================================
--- branches/proto/v3/tools/boostbook/xsl/lookup.xsl (original)
+++ branches/proto/v3/tools/boostbook/xsl/lookup.xsl 2007-12-06 02:20:07 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/proto/v3/tools/boostbook/xsl/type.xsl
==============================================================================
--- branches/proto/v3/tools/boostbook/xsl/type.xsl (original)
+++ branches/proto/v3/tools/boostbook/xsl/type.xsl 2007-12-06 02:20:07 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/proto/v3/tools/boostbook/xsl/utility.xsl
==============================================================================
--- branches/proto/v3/tools/boostbook/xsl/utility.xsl (original)
+++ branches/proto/v3/tools/boostbook/xsl/utility.xsl 2007-12-06 02:20:07 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/proto/v3/tools/build/v2/tools/darwin.jam
==============================================================================
--- branches/proto/v3/tools/build/v2/tools/darwin.jam (original)
+++ branches/proto/v3/tools/build/v2/tools/darwin.jam 2007-12-06 02:20:07 EST (Thu, 06 Dec 2007)
@@ -91,7 +91,8 @@
     local sdks = [ GLOB /Developer/SDKs : MacOSX* ] ;
     for local sdk in $(sdks)
     {
- local sdk-version = [ MATCH ([0-9]+[.][0-9]+[.]?[0-9]*) : $(sdk) ] ;
+ 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) ;
@@ -106,6 +107,10 @@
 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)

Modified: branches/proto/v3/tools/build/v2/tools/pgi.jam
==============================================================================
--- branches/proto/v3/tools/build/v2/tools/pgi.jam (original)
+++ branches/proto/v3/tools/build/v2/tools/pgi.jam 2007-12-06 02:20:07 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
@@ -50,7 +53,7 @@
 
 # Declare flags and actions for compilation
 flags pgi.compile OPTIONS : -Kieee ;
-flags pgi.compile OPTIONS <link>shared : -shared -fpic ;
+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 ;
@@ -130,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/proto/v3/tools/regression/src/collect_and_upload_logs.py
==============================================================================
--- branches/proto/v3/tools/regression/src/collect_and_upload_logs.py (original)
+++ branches/proto/v3/tools/regression/src/collect_and_upload_logs.py 2007-12-06 02:20:07 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/proto/v3/tools/regression/src/regression.py
==============================================================================
--- branches/proto/v3/tools/regression/src/regression.py (original)
+++ branches/proto/v3/tools/regression/src/regression.py 2007-12-06 02:20:07 EST (Thu, 06 Dec 2007)
@@ -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/proto/v3/tools/regression/xsl_reports/boost_wide_report.py
==============================================================================
--- branches/proto/v3/tools/regression/xsl_reports/boost_wide_report.py (original)
+++ branches/proto/v3/tools/regression/xsl_reports/boost_wide_report.py 2007-12-06 02:20:07 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