summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2015-08-08 13:49:04 -0700
committerRobin H. Johnson <robbat2@gentoo.org>2015-08-08 17:38:18 -0700
commit56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch)
tree3f91093cdb475e565ae857f1c5a7fd339e2d781e /sci-biology/rmblast/files/rmblast-1.2-gcc47.patch
downloadgentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2
gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip
proj/gentoo: Initial commit
This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson <robbat2@gentoo.org> X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'sci-biology/rmblast/files/rmblast-1.2-gcc47.patch')
-rw-r--r--sci-biology/rmblast/files/rmblast-1.2-gcc47.patch865
1 files changed, 865 insertions, 0 deletions
diff --git a/sci-biology/rmblast/files/rmblast-1.2-gcc47.patch b/sci-biology/rmblast/files/rmblast-1.2-gcc47.patch
new file mode 100644
index 000000000000..70200d59ea4a
--- /dev/null
+++ b/sci-biology/rmblast/files/rmblast-1.2-gcc47.patch
@@ -0,0 +1,865 @@
+ c++/include/corelib/ncbiexpt.hpp | 4 +-
+ c++/include/corelib/ncbimisc.hpp | 2 +
+ c++/include/corelib/ncbiobj.hpp | 2 +-
+ c++/include/corelib/ncbistl.hpp | 6 +-
+ c++/include/corelib/ncbistr.hpp | 2 +-
+ c++/include/corelib/test_boost.hpp | 44 +++++-
+ c++/include/dbapi/driver/dbapi_object_convert.hpp | 8 +-
+ .../dbapi/driver/impl/dbapi_driver_utils.hpp | 2 +-
+ c++/include/serial/impl/stltypes.hpp | 16 ++-
+ c++/include/serial/iterator.hpp | 6 +-
+ c++/include/serial/serialbase.hpp | 8 +-
+ c++/include/util/bitset/bmfunc.h | 7 +
+ c++/include/util/linkedset.hpp | 16 +--
+ c++/include/util/rangemap.hpp | 4 +-
+ c++/src/connect/ncbi_gnutls.c | 19 ++-
+ c++/src/corelib/ncbifile.cpp | 2 +-
+ c++/src/corelib/test_boost.cpp | 156 ++++++++++++++++++++-
+ c++/src/objtools/blast/seqdb_reader/seqdbimpl.hpp | 2 +-
+ c++/src/serial/stdtypes.cpp | 8 +-
+ 19 files changed, 269 insertions(+), 45 deletions(-)
+
+diff --git a/c++/include/corelib/ncbiexpt.hpp b/c++/include/corelib/ncbiexpt.hpp
+index a9cf850..6d90e74 100644
+--- a/c++/include/corelib/ncbiexpt.hpp
++++ b/c++/include/corelib/ncbiexpt.hpp
+@@ -831,7 +831,7 @@ const TTo* UppermostCast(const TFrom& from)
+ exception_class(const exception_class& other) \
+ : base_class(other) \
+ { \
+- x_Assign(other); \
++ this->x_Assign(other); \
+ } \
+ public: \
+ virtual ~exception_class(void) throw() {} \
+@@ -1154,7 +1154,7 @@ public:
+ : TBase( other)
+ {
+ m_Errno = other.m_Errno;
+- x_Assign(other);
++ this->x_Assign(other);
+ }
+
+ /// Destructor.
+diff --git a/c++/include/corelib/ncbimisc.hpp b/c++/include/corelib/ncbimisc.hpp
+index f45d280..f0c030d 100644
+--- a/c++/include/corelib/ncbimisc.hpp
++++ b/c++/include/corelib/ncbimisc.hpp
+@@ -57,6 +57,8 @@
+ * @{
+ */
+
++#include <stdlib.h>
++
+ #ifndef NCBI_ESWITCH_DEFINED
+ #define NCBI_ESWITCH_DEFINED
+
+diff --git a/c++/include/corelib/ncbiobj.hpp b/c++/include/corelib/ncbiobj.hpp
+index 4f83db4..815c188 100644
+--- a/c++/include/corelib/ncbiobj.hpp
++++ b/c++/include/corelib/ncbiobj.hpp
+@@ -2128,7 +2128,7 @@ public:
+ CIRef<Interface, TThisType> ref(
+ dynamic_cast<Interface*>(proxy->GetLockedObject()), *this);
+ if (ref.NotNull()) {
+- Unlock(ref.GetPointer());
++ this->Unlock(ref.GetPointer());
+ }
+ return ref;
+ }
+diff --git a/c++/include/corelib/ncbistl.hpp b/c++/include/corelib/ncbistl.hpp
+index 0bf465a..0618d9d 100644
+--- a/c++/include/corelib/ncbistl.hpp
++++ b/c++/include/corelib/ncbistl.hpp
+@@ -37,7 +37,6 @@
+
+ #include <common/ncbi_export.h>
+
+-
+ // Get rid of some warnings in MSVC++ 6.00
+ #if (_MSC_VER >= 1200)
+ // too long identificator name in the debug info; truncated
+@@ -162,6 +161,9 @@ typedef int NCBI_NAME2(T_EAT_SEMICOLON_,UniqueName)
+ #endif
+
+ #if defined(NCBI_COMPILER_GCC) || defined(NCBI_COMPILER_WORKSHOP)
++# if defined(NCBI_COMPILER_GCC) && NCBI_COMPILER_VERSION >= 400
++# include <algorithm>
++# endif
+ // This template is used by some stl algorithms (sort, reverse...)
+ // We need to have our own implementation because some C++ Compiler vendors
+ // implemented it by using a temporary variable and an assignment operator
+@@ -174,7 +176,7 @@ template<typename Iter>
+ inline
+ void iter_swap( Iter it1, Iter it2 )
+ {
+- swap( *it1, * it2 );
++ swap( *it1, *it2 );
+ }
+
+ END_STD_SCOPE
+diff --git a/c++/include/corelib/ncbistr.hpp b/c++/include/corelib/ncbistr.hpp
+index db7054f..63e3299 100644
+--- a/c++/include/corelib/ncbistr.hpp
++++ b/c++/include/corelib/ncbistr.hpp
+@@ -2583,7 +2583,7 @@ public:
+ : TBase(other)
+ {
+ m_Pos = other.m_Pos;
+- x_Assign(other);
++ this->x_Assign(other);
+ }
+
+ /// Destructor.
+diff --git a/c++/include/corelib/test_boost.hpp b/c++/include/corelib/test_boost.hpp
+index 69c41f3..4cd77d3 100644
+--- a/c++/include/corelib/test_boost.hpp
++++ b/c++/include/corelib/test_boost.hpp
+@@ -56,10 +56,18 @@
+ # undef BOOST_AUTO_TEST_MAIN
+ #endif
+
++#ifdef NCBI_COMPILER_MSVC
++# pragma warning(push)
++// 'class' : class has virtual functions, but destructor is not virtual
++# pragma warning(disable: 4265)
++#endif
++
++#include <boost/version.hpp>
+ #include <boost/test/auto_unit_test.hpp>
+ #include <boost/test/floating_point_comparison.hpp>
+ #include <boost/test/framework.hpp>
+ #include <boost/test/execution_monitor.hpp>
++#include <boost/test/parameterized_test.hpp>
+
+ #include <boost/preprocessor/tuple/rem.hpp>
+ #include <boost/preprocessor/repeat.hpp>
+@@ -72,6 +80,7 @@
+ #undef BOOST_CHECK_THROW_IMPL
+ #undef BOOST_CHECK_NO_THROW_IMPL
+ #undef BOOST_FIXTURE_TEST_CASE
++#undef BOOST_PARAM_TEST_CASE
+
+ #define BOOST_CHECK_THROW_IMPL( S, E, P, prefix, TL ) \
+ try { \
+@@ -109,6 +118,12 @@ catch( ... ) { \
+ } \
+ /**/
+
++#if BOOST_VERSION >= 104200
++# define NCBI_BOOST_LOCATION() , boost::execution_exception::location()
++#else
++# define NCBI_BOOST_LOCATION()
++#endif
++
+ #define BOOST_FIXTURE_TEST_CASE( test_name, F ) \
+ struct test_name : public F { void test_method(); }; \
+ \
+@@ -124,7 +139,8 @@ static void BOOST_AUTO_TC_INVOKER( test_name )() \
+ ::framework::current_test_case().p_name \
+ << "\"" << ex); \
+ throw boost::execution_exception( \
+- boost::execution_exception::cpp_exception_error, ""); \
++ boost::execution_exception::cpp_exception_error, "" \
++ NCBI_BOOST_LOCATION() ); \
+ } \
+ } \
+ \
+@@ -142,6 +158,12 @@ BOOST_JOIN( BOOST_JOIN( test_name, _registrar ), __LINE__ ) ( \
+ void test_name::test_method() \
+ /**/
+
++#define BOOST_PARAM_TEST_CASE( function, begin, end ) \
++ ::NCBI_NS_NCBI::NcbiTestGenTestCases( function, \
++ BOOST_TEST_STRINGIZE( function ), \
++ (begin), (end) ) \
++/**/
++
+ /// Set timeout value for the test case created using auto-registration
+ /// facility.
+ #define BOOST_AUTO_TEST_CASE_TIMEOUT(test_name, n) \
+@@ -158,6 +180,26 @@ static struct BOOST_JOIN( test_name, _timeout_spec ) \
+ } BOOST_JOIN( test_name, _timeout_spec_inst ); \
+ /**/
+
++/// Automatic registration of the set of test cases based on some function
++/// accepting one parameter. Set of parameters used to call that function is
++/// taken from iterator 'begin' which is incremented until it reaches 'end'.
++///
++/// @sa BOOST_PARAM_TEST_CASE
++#define BOOST_AUTO_PARAM_TEST_CASE( function, begin, end ) \
++ BOOST_AUTO_TU_REGISTRAR(function) ( \
++ BOOST_PARAM_TEST_CASE(function, begin, end)) \
++/**/
++
++#define BOOST_TIMEOUT(M) \
++ do { \
++ static string s(M); \
++ throw boost::execution_exception( \
++ boost::execution_exception::timeout_error, s \
++ NCBI_BOOST_LOCATION()); \
++ } while (0) \
++/**/
++
++
+
+ #define NCBITEST_CHECK_IMPL(P, check_descr, TL, CT) \
+ BOOST_CHECK_NO_THROW_IMPL(BOOST_CHECK_IMPL(P, check_descr, TL, CT), TL)
+diff --git a/c++/include/dbapi/driver/dbapi_object_convert.hpp b/c++/include/dbapi/driver/dbapi_object_convert.hpp
+index 6fcde61..eddde81 100644
+--- a/c++/include/dbapi/driver/dbapi_object_convert.hpp
++++ b/c++/include/dbapi/driver/dbapi_object_convert.hpp
+@@ -67,7 +67,7 @@ public:
+ operator const CTime&(void) const;
+
+ private:
+- mutable obj_type& m_Value;
++ obj_type& m_Value;
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+@@ -92,7 +92,7 @@ public:
+ operator const CTime&(void) const;
+
+ private:
+- mutable obj_type& m_Value;
++ obj_type& m_Value;
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+@@ -133,7 +133,7 @@ public:
+ operator const CTime&(void) const;
+
+ private:
+- mutable obj_type& m_Value;
++ obj_type& m_Value;
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+@@ -174,7 +174,7 @@ public:
+ operator const CTime&(void) const;
+
+ private:
+- mutable obj_type& m_Value;
++ obj_type& m_Value;
+ };
+
+ ////////////////////////////////////////////////////////////////////////////////
+diff --git a/c++/include/dbapi/driver/impl/dbapi_driver_utils.hpp b/c++/include/dbapi/driver/impl/dbapi_driver_utils.hpp
+index 0792a6d..b6bd64b 100644
+--- a/c++/include/dbapi/driver/impl/dbapi_driver_utils.hpp
++++ b/c++/include/dbapi/driver/impl/dbapi_driver_utils.hpp
+@@ -231,7 +231,7 @@ protected:
+
+ private:
+ const string& m_SPName;
+- mutable impl::CConnection& m_Conn;
++ impl::CConnection& m_Conn;
+ };
+
+
+diff --git a/c++/include/serial/impl/stltypes.hpp b/c++/include/serial/impl/stltypes.hpp
+index d41ab94..7d9e3ce 100644
+--- a/c++/include/serial/impl/stltypes.hpp
++++ b/c++/include/serial/impl/stltypes.hpp
+@@ -412,6 +412,7 @@ public:
+ typedef StlIterator TStlIterator;
+ typedef TypeInfoIterator TTypeInfoIterator;
+ typedef typename TTypeInfoIterator::TObjectPtr TObjectPtr;
++ typedef CStlClassInfoFunctions<Container> CParent;
+
+ static TStlIterator& It(TTypeInfoIterator& iter)
+ {
+@@ -437,7 +438,8 @@ public:
+ }
+ static bool InitIterator(TTypeInfoIterator& iter)
+ {
+- TStlIterator stl_iter = Get(iter.GetContainerPtr()).begin();
++ TStlIterator stl_iter
++ = CParent::Get(iter.GetContainerPtr()).begin();
+ if ( sizeof(TStlIterator) <= sizeof(iter.m_IteratorData) ) {
+ void* data = &iter.m_IteratorData;
+ new (data) TStlIterator(stl_iter);
+@@ -445,7 +447,7 @@ public:
+ else {
+ iter.m_IteratorData = new TStlIterator(stl_iter);
+ }
+- return stl_iter != Get(iter.GetContainerPtr()).end();
++ return stl_iter != CParent::Get(iter.GetContainerPtr()).end();
+ }
+ static void ReleaseIterator(TTypeInfoIterator& iter)
+ {
+@@ -466,7 +468,7 @@ public:
+
+ static bool NextElement(TTypeInfoIterator& iter)
+ {
+- return ++It(iter) != Get(iter.GetContainerPtr()).end();
++ return ++It(iter) != CParent::Get(iter.GetContainerPtr()).end();
+ }
+ static TObjectPtr GetElementPtr(const TTypeInfoIterator& iter)
+ {
+@@ -503,7 +505,7 @@ public:
+
+ static bool EraseElement(TTypeInfoIterator& iter)
+ {
+- TStlIterator& it = It(iter);
++ TStlIterator& it = CParent::It(iter);
+ Container* c = static_cast<Container*>(iter.GetContainerPtr());
+ it = c->erase(it);
+ return it != c->end();
+@@ -511,7 +513,7 @@ public:
+ static void EraseAllElements(TTypeInfoIterator& iter)
+ {
+ Container* c = static_cast<Container*>(iter.GetContainerPtr());
+- c->erase(It(iter), c->end());
++ c->erase(CParent::It(iter), c->end());
+ }
+
+ static void SetIteratorFunctions(CStlOneArgTemplate* info)
+@@ -542,7 +544,7 @@ public:
+ }
+ static bool EraseElement(TTypeInfoIterator& iter)
+ {
+- TStlIterator& it = It(iter);
++ TStlIterator& it = CParent::It(iter);
+ Container* c = static_cast<Container*>(iter.GetContainerPtr());
+ TStlIterator erase = it++;
+ c->erase(erase);
+@@ -551,7 +553,7 @@ public:
+ static void EraseAllElements(TTypeInfoIterator& iter)
+ {
+ Container* c = static_cast<Container*>(iter.GetContainerPtr());
+- c->erase(It(iter), c->end());
++ c->erase(CParent::It(iter), c->end());
+ }
+
+ static void SetIteratorFunctions(CStlOneArgTemplate* info)
+diff --git a/c++/include/serial/iterator.hpp b/c++/include/serial/iterator.hpp
+index 25e1193..cddb046 100644
+--- a/c++/include/serial/iterator.hpp
++++ b/c++/include/serial/iterator.hpp
+@@ -491,13 +491,13 @@ protected:
+ CTypeIteratorBase(TTypeInfo needType, const TBeginInfo& beginInfo)
+ : m_NeedType(needType)
+ {
+- Init(beginInfo);
++ this->Init(beginInfo);
+ }
+ CTypeIteratorBase(TTypeInfo needType, const TBeginInfo& beginInfo,
+ const string& filter)
+ : m_NeedType(needType)
+ {
+- Init(beginInfo, filter);
++ this->Init(beginInfo, filter);
+ }
+
+ virtual bool CanSelect(const CConstObjectInfo& object)
+@@ -599,7 +599,7 @@ public:
+
+ CTypesIteratorBase<Parent>& operator=(const TBeginInfo& beginInfo)
+ {
+- Init(beginInfo);
++ this->Init(beginInfo);
+ return *this;
+ }
+
+diff --git a/c++/include/serial/serialbase.hpp b/c++/include/serial/serialbase.hpp
+index be6a4f9..d59fb25 100644
+--- a/c++/include/serial/serialbase.hpp
++++ b/c++/include/serial/serialbase.hpp
+@@ -364,11 +364,15 @@ public:
+ // cast to object type
+ TObject& operator*(void)
+ {
+- return *reinterpret_cast<TObject*>(m_Buffer);
++ TObject* ptr = static_cast<TObject*>
++ (static_cast<void*>(m_Buffer));
++ return *ptr;
+ }
+ const TObject& operator*(void) const
+ {
+- return *reinterpret_cast<const TObject*>(m_Buffer);
++ const TObject* ptr = static_cast<const TObject*>
++ (static_cast<const void*>(m_Buffer));
++ return *ptr;
+ }
+
+ // construct/destruct object
+diff --git a/c++/include/util/bitset/bmfunc.h b/c++/include/util/bitset/bmfunc.h
+index 5917ee5..a8c204b 100644
+--- a/c++/include/util/bitset/bmfunc.h
++++ b/c++/include/util/bitset/bmfunc.h
+@@ -37,6 +37,13 @@ For more information please visit: http://bmagic.sourceforge.net
+ namespace bm
+ {
+
++bm::id_t bit_block_any_range(const bm::word_t* block,
++ bm::word_t left,
++ bm::word_t right);
++
++bm::id_t bit_block_calc_count_range(const bm::word_t* block,
++ bm::word_t left,
++ bm::word_t right);
+
+ /*!
+ @brief Structure with statistical information about bitset's memory
+diff --git a/c++/include/util/linkedset.hpp b/c++/include/util/linkedset.hpp
+index e8bbe6e..364164b 100644
+--- a/c++/include/util/linkedset.hpp
++++ b/c++/include/util/linkedset.hpp
+@@ -268,10 +268,10 @@ public:
+ pair<iterator, bool> ins = m_Container.insert(value);
+ if ( ins.second ) {
+ if ( ins.first == begin() )
+- insertToStart(*ins.first);
++ this->insertToStart(*ins.first);
+ else {
+ iterator prev = ins.first;
+- insertAfter(*--prev, *ins.first);
++ this->insertAfter(*--prev, *ins.first);
+ }
+ }
+ return ins;
+@@ -280,10 +280,10 @@ public:
+ void erase(iterator iter)
+ {
+ if ( iter == begin() )
+- removeFromStart(*iter);
++ this->removeFromStart(*iter);
+ else {
+ iterator prev = iter;
+- removeAfter(*--prev, *iter);
++ this->removeAfter(*--prev, *iter);
+ }
+ m_Container.erase(iter);
+ }
+@@ -422,10 +422,10 @@ public:
+ {
+ iterator iter = m_Container.insert(value);
+ if ( iter == begin() )
+- insertToStart(get(iter));
++ this->insertToStart(get(iter));
+ else {
+ iterator prev = iter;
+- insertAfter(get(--prev), get(iter));
++ this->insertAfter(get(--prev), get(iter));
+ }
+ return iter;
+ }
+@@ -433,10 +433,10 @@ public:
+ void erase(iterator iter)
+ {
+ if ( iter == begin() )
+- removeFromStart(get(iter));
++ this->removeFromStart(get(iter));
+ else {
+ iterator prev = iter;
+- removeAfter(get(--prev), get(iter));
++ this->removeAfter(get(--prev), get(iter));
+ }
+ m_Container.erase(iter);
+ }
+diff --git a/c++/include/util/rangemap.hpp b/c++/include/util/rangemap.hpp
+index c4f5f37..56e267d 100644
+--- a/c++/include/util/rangemap.hpp
++++ b/c++/include/util/rangemap.hpp
+@@ -578,7 +578,7 @@ public:
+ // get level
+
+ // insert element
+- TSelectMapI selectIter = insertLevel(selectKey);
++ TSelectMapI selectIter = this->insertLevel(selectKey);
+ pair<TLevelMapI, bool> levelIns = selectIter->second.insert(value);
+
+ pair<iterator, bool> ret;
+@@ -640,7 +640,7 @@ public:
+ // insert element
+ iterator ret;
+ ret.m_Range = range_type::GetWhole();
+- ret.m_SelectIter = insertLevel(selectKey);
++ ret.m_SelectIter = this->insertLevel(selectKey);
+ ret.m_SelectIterEnd = this->m_SelectMap.end();
+ ret.m_LevelIter = ret.m_SelectIter->second.insert(value);
+ return ret;
+diff --git a/c++/src/connect/ncbi_gnutls.c b/c++/src/connect/ncbi_gnutls.c
+index f0242b7..8b13713 100644
+--- a/c++/src/connect/ncbi_gnutls.c
++++ b/c++/src/connect/ncbi_gnutls.c
+@@ -98,7 +98,6 @@ static const int kGnuTlsCertPrio[] = {
+ 0
+ };
+ static const int kGnuTlsCompPrio[] = {
+- GNUTLS_COMP_LZO,
+ GNUTLS_COMP_ZLIB,
+ GNUTLS_COMP_NULL,
+ 0
+@@ -254,6 +253,24 @@ static EIO_Status s_GnuTlsOpen(void* session, int* error)
+ }
+
+
++/*ARGSUSED*/
++static void x_set_errno(gnutls_session_t session, int error)
++{
++# ifdef LIBGNUTLS_VERSION_NUMBER
++# if \
++ LIBGNUTLS_VERSION_MAJOR > 1 || \
++ LIBGNUTLS_VERSION_MINOR > 5 || \
++ LIBGNUTLS_VERSION_PATCH > 3
++ gnutls_transport_set_errno(session, error);
++ return;
++# endif /*LIBGNUTLS_VERSION >= 1.5.4*/
++# endif /*LIBGNUTLS_VERSION_NUMBER*/
++ /*NOTREACHED*/
++ if (error)
++ errno = error;
++}
++
++
+ static ssize_t x_GnuTlsPull(gnutls_transport_ptr_t ptr,
+ void* buf, size_t size)
+ {
+diff --git a/c++/src/corelib/ncbifile.cpp b/c++/src/corelib/ncbifile.cpp
+index d751e62..fdc81c7 100644
+--- a/c++/src/corelib/ncbifile.cpp
++++ b/c++/src/corelib/ncbifile.cpp
+@@ -51,8 +51,8 @@
+ # include <dirent.h>
+ # include <pwd.h>
+ # include <fcntl.h>
+-# include <sys/time.h>
+ # include <sys/mman.h>
++# include <sys/time.h>
+ # ifdef HAVE_SYS_STATVFS_H
+ # include <sys/statvfs.h>
+ # endif
+diff --git a/c++/src/corelib/test_boost.cpp b/c++/src/corelib/test_boost.cpp
+index dfd9cc8..f93d2ca 100644
+--- a/c++/src/corelib/test_boost.cpp
++++ b/c++/src/corelib/test_boost.cpp
+@@ -41,6 +41,7 @@
+ #ifndef BOOST_TEST_NO_LIB
+ # define BOOST_TEST_NO_LIB
+ #endif
++#define BOOST_TEST_NO_MAIN
+ #include <corelib/test_boost.hpp>
+
+ #include <boost/preprocessor/cat.hpp>
+@@ -95,6 +96,7 @@ const char* kTestResultTimeout = "timeout";
+ const char* kTestResultAborted = "aborted";
+ const char* kTestResultSkipped = "skipped";
+ const char* kTestResultDisabled = "disabled";
++const char* kTestResultToFix = "tofix";
+
+
+ typedef but::results_reporter::format TBoostRepFormatter;
+@@ -168,14 +170,24 @@ public:
+ unsigned long elapsed);
+ virtual
+ void test_unit_skipped(ostream& ostr, but::test_unit const& tu);
++#if BOOST_VERSION >= 104200
++ virtual
++ void log_exception (ostream& ostr, but::log_checkpoint_data const& lcd,
++ boost::execution_exception const& ex);
++ // Next line is necessary for compiling with ICC and Boost 1.41.0 and up
++ using TBoostLogFormatter::log_exception;
++#else
+ virtual
+ void log_exception (ostream& ostr, but::log_checkpoint_data const& lcd,
+ but::const_string explanation);
++#endif
+ virtual
+ void log_entry_start (ostream& ostr, but::log_entry_data const& led,
+ log_entry_types let);
+ virtual
+ void log_entry_value (ostream& ostr, but::const_string value);
++ // Next line is necessary for compiling with ICC and Boost 1.41.0 and up
++ using TBoostLogFormatter::log_entry_value;
+ virtual
+ void log_entry_finish (ostream& ostr);
+
+@@ -402,10 +414,15 @@ public:
+
+ /// Mark test case as failed due to hit of the timeout
+ void SetTestTimedOut(but::test_case* tc);
++ /// Register the fact of test failure
++ void SetTestErrored(but::test_case* tc);
++ /// Check if given test is marked as requiring fixing in the future
++ bool IsTestToFix(const but::test_unit* tu);
+
+ /// Get number of actually executed tests
+ int GetRanTestsCount(void);
+-
++ /// Get number of tests that were failed but are marked to be fixed
++ int GetToFixTestsCount(void);
+ /// Get string representation of result of test execution
+ string GetTestResultString(but::test_unit* tu);
+
+@@ -415,6 +432,11 @@ public:
+ /// Check if user initialization functions failed
+ bool IsInitFailed(void);
+
++ /// Check if there were any test errors
++ bool HasTestErrors(void);
++ /// Check if there were any timeouted tests
++ bool HasTestTimeouts(void);
++
+ private:
+ typedef list<TNcbiTestUserFunction> TUserFuncsList;
+
+@@ -493,6 +515,8 @@ private:
+ TUnitsSet m_DisabledTests;
+ /// List of all tests which result is a timeout
+ TUnitsSet m_TimedOutTests;
++ /// List of all tests marked as in need of fixing in the future
++ TUnitsSet m_ToFixTests;
+ /// List of all dependencies for each test having dependencies
+ TUnitToManyMap m_TestDeps;
+ /// Observer to make test dependencies and look for unit's timeouts
+@@ -512,12 +536,18 @@ private:
+ /// String representation for whole test timeout (real value taken from
+ /// CHECK_TIMEOUT in Makefile).
+ string m_TimeoutStr;
++ /// Multiplicator for timeouts
++ double m_TimeMult;
+ /// Timer measuring elapsed time for the whole test
+ CStopWatch m_Timer;
+ /// Timeout that was set in currently executing unit before adjustment
+ ///
+ /// @sa AdjustTestTimeout()
+ unsigned int m_CurUnitTimeout;
++ /// Flag showing if there were some test errors
++ bool m_HasTestErrors;
++ /// Flag showing if there were some timeouted tests
++ bool m_HasTestTimeouts;
+ };
+
+
+@@ -794,7 +824,10 @@ CNcbiTestApplication::CNcbiTestApplication(void)
+ m_RunMode (0),
+ m_DummyTest(NULL),
+ m_Timeout (0),
+- m_Timer (CStopWatch::eStart)
++ m_TimeMult (1),
++ m_Timer (CStopWatch::eStart),
++ m_HasTestErrors(false),
++ m_HasTestTimeouts(false)
+ {
+ m_Reporter = new CNcbiBoostReporter();
+ m_Logger = new CNcbiBoostLogger();
+@@ -1244,6 +1277,24 @@ CNcbiTestApplication::GetRanTestsCount(void)
+ return result;
+ }
+
++int
++CNcbiTestApplication::GetToFixTestsCount(void)
++{
++ int result = 0;
++ ITERATE(TUnitsSet, it, m_ToFixTests) {
++ if (!but::results_collector.results((*it)->p_id).passed())
++ ++result;
++ }
++ return result;
++}
++
++inline bool
++CNcbiTestApplication::IsTestToFix(const but::test_unit* tu)
++{
++ return m_ToFixTests.find(const_cast<but::test_unit*>(tu))
++ != m_ToFixTests.end();
++}
++
+ inline void
+ CNcbiTestApplication::x_SetupBoostReporters(void)
+ {
+@@ -1391,6 +1442,18 @@ CNcbiTestApplication::InitTestFramework(int argc, char* argv[])
+ return NULL;
+ }
+
++inline bool
++CNcbiTestApplication::HasTestErrors(void)
++{
++ return m_HasTestErrors;
++}
++
++inline bool
++CNcbiTestApplication::HasTestTimeouts(void)
++{
++ return m_HasTestTimeouts;
++}
++
+ void
+ CNcbiTestsCollector::visit(but::test_case const& test)
+ {
+@@ -1431,9 +1494,20 @@ CNcbiTestsObserver::test_unit_finish(but::test_unit const& tu,
+ // elapsed comes in microseconds
+ if (timeout != 0 && timeout < elapsed / 1000000) {
+ boost::execution_exception ex(
+- boost::execution_exception::timeout_error, "Timeout exceeded");
++ boost::execution_exception::timeout_error, "Timeout exceeded"
++ NCBI_BOOST_LOCATION());
+ but::framework::exception_caught(ex);
+ }
++
++ but::test_results& tr = but::s_rc_impl().m_results_store[tu.p_id];
++ if (!tr.passed() && s_GetTestApp().IsTestToFix(&tu)) {
++ static_cast<but::readwrite_property<bool>& >(
++ static_cast<but::class_property<bool>& >(
++ tr.p_skipped)).set(true);
++ static_cast<but::readwrite_property<but::counter_t>& >(
++ static_cast<but::class_property<but::counter_t>& >(
++ tr.p_assertions_failed)).set(0);
++ }
+ }
+
+ void
+@@ -1551,12 +1625,21 @@ CNcbiBoostLogger::test_unit_skipped(ostream& ostr, but::test_unit const& tu)
+ m_Upper->test_unit_skipped(ostr, tu);
+ }
+
++#if BOOST_VERSION >= 104200
++void
++CNcbiBoostLogger::log_exception(ostream& ostr, but::log_checkpoint_data const& lcd,
++ boost::execution_exception const& ex)
++{
++ m_Upper->log_exception(ostr, lcd, ex);
++}
++#else
+ void
+ CNcbiBoostLogger::log_exception(ostream& ostr, but::log_checkpoint_data const& lcd,
+ but::const_string explanation)
+ {
+ m_Upper->log_exception(ostr, lcd, explanation);
+ }
++#endif
+
+ void
+ CNcbiBoostLogger::log_entry_start(ostream& ostr, but::log_entry_data const& led,
+@@ -1631,9 +1714,74 @@ NcbiTestGetUnit(CTempString test_name)
+ END_NCBI_SCOPE
+
+
++using namespace but;
++
+ /// Global initialization function called from Boost framework
+-but::test_suite*
++test_suite*
+ init_unit_test_suite(int argc, char* argv[])
+ {
+ return NCBI_NS_NCBI::s_GetTestApp().InitTestFramework(argc, argv);
+ }
++
++// This main() is mostly a copy from Boost's unit_test_main.ipp
++int
++main(int argc, char* argv[])
++{
++ int result = boost::exit_success;
++
++ try {
++ framework::init( &init_unit_test_suite, argc, argv );
++
++ if( !runtime_config::test_to_run().is_empty() ) {
++ test_case_filter filter( runtime_config::test_to_run() );
++
++ traverse_test_tree( framework::master_test_suite().p_id, filter );
++ }
++
++ framework::run();
++
++ // Let's try to make report in case of any error after all catches.
++ //results_reporter::make_report();
++
++ if (!runtime_config::no_result_code()) {
++ result = results_collector.results( framework::master_test_suite().p_id ).result_code();
++ if (!NCBI_NS_NCBI::s_GetTestApp().HasTestErrors()
++ && NCBI_NS_NCBI::s_GetTestApp().HasTestTimeouts())
++ {
++ // This should certainly go to the output. So we can use only
++ // printf, nothing else.
++ printf("There were no test failures, only timeouts.\n"
++ " (for autobuild scripts: NCBI_UNITTEST_TIMEOUTS_BUT_NO_ERRORS)\n");
++ }
++ }
++ }
++#if BOOST_VERSION >= 104200
++ catch( framework::nothing_to_test const& ) {
++ result = boost::exit_success;
++ }
++#endif
++ catch( framework::internal_error const& ex ) {
++ results_reporter::get_stream() << "Boost.Test framework internal error: " << ex.what() << std::endl;
++
++ result = boost::exit_exception_failure;
++ }
++ catch( framework::setup_error const& ex ) {
++ results_reporter::get_stream() << "Test setup error: " << ex.what() << std::endl;
++
++ result = boost::exit_exception_failure;
++ }
++ catch( std::exception const& ex ) {
++ results_reporter::get_stream() << "Test framework error: " << ex.what() << std::endl;
++
++ result = boost::exit_exception_failure;
++ }
++ catch( ... ) {
++ results_reporter::get_stream() << "Boost.Test framework internal error: unknown reason" << std::endl;
++
++ result = boost::exit_exception_failure;
++ }
++
++ results_reporter::make_report();
++
++ return result;
++}
+diff --git a/c++/src/objtools/blast/seqdb_reader/seqdbimpl.hpp b/c++/src/objtools/blast/seqdb_reader/seqdbimpl.hpp
+index 92e817f..cfab8ab 100644
+--- a/c++/src/objtools/blast/seqdb_reader/seqdbimpl.hpp
++++ b/c++/src/objtools/blast/seqdb_reader/seqdbimpl.hpp
+@@ -1199,7 +1199,7 @@ private:
+ CSeqDBAtlasHolder m_AtlasHolder;
+
+ /// Reference to memory management layer.
+- mutable CSeqDBAtlas & m_Atlas;
++ CSeqDBAtlas & m_Atlas;
+
+ /// The list of database names provided to the constructor.
+ string m_DBNames;
+diff --git a/c++/src/serial/stdtypes.cpp b/c++/src/serial/stdtypes.cpp
+index f6fa651..d6e8f80 100644
+--- a/c++/src/serial/stdtypes.cpp
++++ b/c++/src/serial/stdtypes.cpp
+@@ -720,7 +720,7 @@ public:
+ if ( IsSigned() ) {
+ // signed -> unsigned
+ // check for negative value
+- if ( IsNegative(value) )
++ if ( CParent::IsNegative(value) )
+ ThrowIntegerOverflow();
+ }
+ if ( sizeof(value) > sizeof(result) ) {
+@@ -751,7 +751,7 @@ public:
+ // unsigned -> signed
+ if ( sizeof(value) == sizeof(result) ) {
+ // same size - check for sign change only
+- if ( IsNegative(result) )
++ if ( CParent::IsNegative(result) )
+ ThrowIntegerOverflow();
+ }
+ }
+@@ -786,7 +786,7 @@ public:
+ if ( IsSigned() ) {
+ // signed -> unsigned
+ // check for negative value
+- if ( IsNegative(value) )
++ if ( CParent::IsNegative(value) )
+ ThrowIntegerOverflow();
+ }
+ if ( sizeof(value) > sizeof(result) ) {
+@@ -817,7 +817,7 @@ public:
+ // unsigned -> signed
+ if ( sizeof(value) == sizeof(result) ) {
+ // same size - check for sign change only
+- if ( IsNegative(result) )
++ if ( CParent::IsNegative(result) )
+ ThrowIntegerOverflow();
+ }
+ }