Project import
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..fe6963e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,151 @@
+#
+#    Copyright (c) 2010-2012 Nest Labs, Inc.
+#    All rights reserved.
+#
+#    This document is the property of Nest. It is considered
+#    confidential and proprietary information.
+#
+#    This document may not be reproduced or transmitted in any form,
+#    in whole or in part, without the express written permission of
+#    Nest.
+#
+#    Description:
+#      This file is the makefile for Boost, a collection of open
+#      source libraries that extend the functionality of the C++ standard
+#      library.
+#
+
+
+include pre.mak
+include products/paths.mak
+
+PackageName		:= boost
+
+PackageExtension	:= tar.bz2
+PackageSeparator	:= _
+
+PackagePatchArgs	:= -p1
+
+PackageArchive		:= $(PackageName).$(PackageExtension)
+PackageSourceDir	:= $(PackageName)$(PackageSeparator)$(PackageVersion)
+
+CleanPaths		+= $(PackageLicenseFile)
+
+TpsDir			:= sw/tps
+
+IcuDir			:= $(TpsDir)/icu
+IcuSearchPath		:= $(call GenerateResultPaths,$(IcuDir),usr)
+
+PythonDir        	:= $(TpsDir)/python
+PythonSearchPath 	:= $(call GenerateResultPaths,$(PythonDir),/)
+
+# For the short-term, we are always building with GCC even though the
+# actual tool chain may be some repackaged version of GCC. So, just
+# specify that.
+
+BoostToolset		:= gcc
+
+# We do not want versioned headers and libraries, so specify the
+# 'system' layout. Also, we do not want all the various combinations
+# of shared/static, release/debug, stripped/unstripped and
+# non-threaded/threaded libraries, so just specify 'minimal'.
+
+BoostJamConfig		+= --layout=system \
+			   --build-type=minimal \
+			   -sICU_PATH=$(IcuSearchPath) \
+			   link=shared
+
+# If ForceLibStdCPP is set, tell boost to use libstdc++ instead of
+# the compiler default
+ifeq ($(call IsYes,$(ForceLibStdCPP)),Y)
+BoostJamConfig		+= dll-path=$(BoostLibraryPath) cxxflags="-stdlib=libstdc++" linkflags="-stdlib=libstdc++"
+endif
+
+
+BoostLibraries		= filesystem	\
+			  system	\
+			  signals
+
+ifeq ($(BUILD_FEATURE_BOOST_PYTHON),1)
+BoostLibraries += \
+	python
+endif
+
+BoostLibrariesList	= $(subst $(Space),$(Comma),$(strip $(BoostLibraries)))
+
+BoostProjectConfig	= $(call GenerateBuildPaths,project-config.jam)
+
+SOURCEDIRS = $(PackageSourceDir)
+$(PackageSourceDir)_RULE_TARGET = $(BuildDirectory)/configure
+
+all: $(PackageDefaultGoal)
+
+# Generate the package license contents.
+
+$(PackageSourceDir)/LICENSE_1_0.txt: $(BuildDirectory)/source
+
+$(PackageLicenseFile): $(PackageSourceDir)/LICENSE_1_0.txt
+	$(copy-result)
+
+# Extract the source from the archive and apply patches, if any.
+
+$(PackageSourceDir): $(PackageArchive) $(PackagePatchPaths)
+	$(expand-and-patch-package)
+
+# Prepare the sources.
+
+$(BuildDirectory)/source: $(PackageSourceDir) | $(BuildDirectory)
+	$(Verbose)touch $(BuildDirectory)/source
+
+# Generate the package build makefile.
+
+
+# Generate the build-specific makefile and user configuration. We have
+# to post-process the generated user configuration since Boost's
+# adominable build system has no other way to override the actual C++
+# compiler executable used (see http://goodliffe.blogspot.com/2008/05/
+# cross-compiling-boost.html and boost/docs/html/bbv2/
+# tasks.html#bbv2.tasks.crosscompile).
+
+# Configure the source for building.
+$(BuildDirectory)/configure: $(BuildDirectory)/source | $(PackageSourceDir) $(BuildDirectory)
+	$(call create-links,$(CURDIR)/$(PackageSourceDir),$(BuildDirectory))
+	$(Verbose)cd $(BuildDirectory) && \
+	./bootstrap.sh \
+	--prefix=$(ResultDirectory) \
+	--with-toolset=$(BoostToolset) \
+	--with-icu=$(IcuSearchPath) \
+	--with-libraries=$(BoostLibrariesList) \
+	--with-python-root=$(PythonSearchPath)	
+	$(Verbose)$(SED) -e "s#^\([[:space:]]*using\)[[:space:]]\{1,\}\($(BoostToolset)\)[[:space:]]\{1,\};#\1 \2 : $(TargetProcArch) : $(CXX) $(CPPOPTFLAGS) ;#g" \
+	< $(BoostProjectConfig) > $(BoostProjectConfig).N || $(RM) -f $(BoostProjectConfig)
+	$(Verbose)mv -f $(BoostProjectConfig) $(BoostProjectConfig).O
+	$(Verbose)mv -f $(BoostProjectConfig).N $(BoostProjectConfig)
+	$(Verbose)touch $(BuildDirectory)/configure
+
+# Build the source.
+
+$(BuildDirectory)/build: $(BuildDirectory)/configure
+	$(Verbose)cd $(BuildDirectory) && \
+	./bjam $(JOBSFLAG) $(BoostJamConfig)
+	$(Verbose)touch $(BuildDirectory)/build
+
+# Stage the build to a temporary installation area.
+
+$(BuildDirectory)/stage: $(BuildDirectory)/build | $(ResultDirectory)
+	$(Verbose)cd $(BuildDirectory) && \
+	INSTALL="$(INSTALL) $(INSTALLFLAGS)" && \
+	./bjam $(JOBSFLAG) $(BoostJamConfig) \
+	install --prefix=$(ResultDirectory)
+	$(Verbose)touch $(BuildDirectory)/stage
+
+.PHONY: stage
+stage: $(BuildDirectory)/stage
+
+clean:
+	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(BuildDirectory)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(ResultDirectory)
+	$(Verbose)$(RM) $(RMFLAGS) -r $(PackageSourceDir).mk.d
+
+include post.mak
diff --git a/boost.patches/boost-00.description b/boost.patches/boost-00.description
new file mode 100644
index 0000000..40cbf45
--- /dev/null
+++ b/boost.patches/boost-00.description
@@ -0,0 +1 @@
+This patch fixes https://svn.boost.org/trac/boost/ticket/4688
diff --git a/boost.patches/boost-00.patch b/boost.patches/boost-00.patch
new file mode 100644
index 0000000..85362e4
--- /dev/null
+++ b/boost.patches/boost-00.patch
@@ -0,0 +1,26 @@
+diff --git a/libs/filesystem/v2/src/v2_path.cpp b/libs/filesystem/v2/src/v2_path.cpp
+index 7adeaff..027b299 100644
+--- a/libs/filesystem/v2/src/v2_path.cpp
++++ b/libs/filesystem/v2/src/v2_path.cpp
+@@ -45,7 +45,7 @@ namespace
+   {
+ #if !defined(macintosh) && !defined(__APPLE__) && !defined(__APPLE_CC__) 
+     // ISO C calls this "the locale-specific native environment":
+-    static std::locale lc("");
++    static std::locale lc;
+ #else  // Mac OS
+     // "All BSD system functions expect their string parameters to be in UTF-8 encoding
+     // and nothing else."
+diff --git a/libs/filesystem/v3/src/path.cpp b/libs/filesystem/v3/src/path.cpp
+index 7dc0b53..213ca36 100644
+--- a/libs/filesystem/v3/src/path.cpp
++++ b/libs/filesystem/v3/src/path.cpp
+@@ -760,7 +760,7 @@ namespace
+ 
+ #   else
+     // ISO C calls this "the locale-specific native environment":
+-    return std::locale("");
++    return std::locale();
+ 
+ #   endif
+   }
diff --git a/boost.patches/boost-00.url b/boost.patches/boost-00.url
new file mode 100644
index 0000000..42f770e
--- /dev/null
+++ b/boost.patches/boost-00.url
@@ -0,0 +1 @@
+https://svn.boost.org/trac/boost/raw-attachment/ticket/4688/boost_filesystem.patch
diff --git a/boost.patches/boost-01.description b/boost.patches/boost-01.description
new file mode 100644
index 0000000..cc99764
--- /dev/null
+++ b/boost.patches/boost-01.description
@@ -0,0 +1,5 @@
+This patch addresses upstream issues 5331
+<https://svn.boost.org/trac/boost/attachment/ticket/5331> and 6692
+<https://svn.boost.org/trac/boost/attachment/ticket/6692> by removing
+the use of the deprecated swp{b} instructions on ARMv6 and ARMv7
+architectures, replacing them with the newer {ld,st}rex.
diff --git a/boost.patches/boost-01.patch b/boost.patches/boost-01.patch
new file mode 100644
index 0000000..e556c4e
--- /dev/null
+++ b/boost.patches/boost-01.patch
@@ -0,0 +1,88 @@
+--- a/boost/smart_ptr/detail/spinlock_gcc_arm.hpp	2009-03-02 08:22:16.000000000 -0800
++++ b/boost/smart_ptr/detail/spinlock_gcc_arm.hpp	2012-06-28 16:39:55.000000000 -0700
+@@ -2,7 +2,7 @@
+ #define BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED
+ 
+ //
+-//  Copyright (c) 2008 Peter Dimov
++//  Copyright (c) 2008, 2011 Peter Dimov
+ //
+ //  Distributed under the Boost Software License, Version 1.0.
+ //  See accompanying file LICENSE_1_0.txt or copy at
+@@ -11,6 +11,20 @@
+ 
+ #include <boost/smart_ptr/detail/yield_k.hpp>
+ 
++#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__)
++
++# define BOOST_SP_ARM_BARRIER "dmb"
++
++#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__)
++
++# define BOOST_SP_ARM_BARRIER "mcr p15, 0, r0, c7, c10, 5"
++
++#else
++
++# define BOOST_SP_ARM_BARRIER ""
++
++#endif
++
+ namespace boost
+ {
+ 
+@@ -29,12 +43,38 @@
+     {
+         int r;
+ 
++#if defined(__ARM_ARCH_6__) \
++    || defined(__ARM_ARCH_6J__) \
++    || defined(__ARM_ARCH_6K__) \
++    || defined(__ARM_ARCH_6Z__) \
++    || defined(__ARM_ARCH_6ZK__) \
++    || defined(__ARM_ARCH_6T2__) \
++    || defined(__ARM_ARCH_7__) \
++    || defined(__ARM_ARCH_7A__) \
++    || defined(__ARM_ARCH_7R__) \
++    || defined(__ARM_ARCH_7M__) \
++    || defined(__ARM_ARCH_7EM__)
++
+         __asm__ __volatile__(
+-            "swp %0, %1, [%2]":
++            "ldrex %0, [%2]; \n"
++            "cmp %0, %1; \n"
++            "strexne %0, %1, [%2]; \n"
++            BOOST_SP_ARM_BARRIER :
+             "=&r"( r ): // outputs
+             "r"( 1 ), "r"( &v_ ): // inputs
+             "memory", "cc" );
+ 
++#else
++
++        __asm__ __volatile__(
++            "swp %0, %1, [%2];\n"
++            BOOST_SP_ARM_BARRIER :
++            "=&r"( r ): // outputs
++            "r"( 1 ), "r"( &v_ ): // inputs
++            "memory", "cc" );
++
++#endif
++
+         return r == 0;
+     }
+ 
+@@ -48,7 +88,7 @@
+ 
+     void unlock()
+     {
+-        __asm__ __volatile__( "" ::: "memory" );
++        __asm__ __volatile__( BOOST_SP_ARM_BARRIER ::: "memory" );
+         *const_cast< int volatile* >( &v_ ) = 0;
+     }
+ 
+@@ -82,4 +122,6 @@
+ 
+ #define BOOST_DETAIL_SPINLOCK_INIT {0}
+ 
++#undef BOOST_SP_ARM_BARRIER
++
+ #endif // #ifndef BOOST_SMART_PTR_DETAIL_SPINLOCK_GCC_ARM_HPP_INCLUDED
diff --git a/boost.patches/boost-02.description b/boost.patches/boost-02.description
new file mode 100644
index 0000000..32ef535
--- /dev/null
+++ b/boost.patches/boost-02.description
@@ -0,0 +1,3 @@
+This patch fixes various compilation errors and warnings when compiling using gcc 4.8.2
+
+
diff --git a/boost.patches/boost-02.patch b/boost.patches/boost-02.patch
new file mode 100644
index 0000000..66f0979
--- /dev/null
+++ b/boost.patches/boost-02.patch
@@ -0,0 +1,126 @@
+--- a/boost/config/stdlib/libstdcpp3.hpp	2010-10-01 02:19:44.000000000 -0700
++++ b/boost/config/stdlib/libstdcpp3.hpp	2014-05-31 04:07:43.998193374 -0700
+@@ -31,7 +31,8 @@
+ 
+ #ifdef __GLIBCXX__ // gcc 3.4 and greater:
+ #  if defined(_GLIBCXX_HAVE_GTHR_DEFAULT) \
+-        || defined(_GLIBCXX__PTHREADS)
++        || defined(_GLIBCXX__PTHREADS)    \
++		|| defined(_GLIBCXX_HAS_GTHREADS) 
+       //
+       // If the std lib has thread support turned on, then turn it on in Boost
+       // as well.  We do this because some gcc-3.4 std lib headers define _REENTANT
+--- a/boost/thread/xtime.hpp	2008-06-18 06:01:08.000000000 -0700
++++ b/boost/thread/xtime.hpp	2014-05-31 04:07:44.098193379 -0700
+@@ -20,7 +20,7 @@
+ 
+ enum xtime_clock_types
+ {
+-    TIME_UTC=1
++    TIME_UTC_=1
+ //    TIME_TAI,
+ //    TIME_MONOTONIC,
+ //    TIME_PROCESS,
+@@ -68,7 +68,7 @@
+ 
+ inline int xtime_get(struct xtime* xtp, int clock_type)
+ {
+-    if (clock_type == TIME_UTC)
++    if (clock_type == TIME_UTC_)
+     {
+         *xtp=get_xtime(get_system_time());
+         return clock_type;
+--- a/libs/thread/src/pthread/thread.cpp	2010-10-29 16:27:00.000000000 -0700
++++ b/libs/thread/src/pthread/thread.cpp	2014-05-31 04:07:50.302193645 -0700
+@@ -350,7 +350,7 @@
+                     cond.timed_wait(lock, xt);
+ #   endif
+                     xtime cur;
+-                    xtime_get(&cur, TIME_UTC);
++                    xtime_get(&cur, TIME_UTC_);
+                     if (xtime_cmp(xt, cur) <= 0)
+                         return;
+                 }
+@@ -365,7 +365,7 @@
+             BOOST_VERIFY(!pthread_yield());
+ #   else
+             xtime xt;
+-            xtime_get(&xt, TIME_UTC);
++            xtime_get(&xt, TIME_UTC_);
+             sleep(xt);
+ #   endif
+         }
+--- a/libs/thread/src/pthread/timeconv.inl	2010-04-01 08:04:15.000000000 -0700
++++ b/libs/thread/src/pthread/timeconv.inl	2014-05-31 04:07:50.302193645 -0700
+@@ -20,8 +20,8 @@
+ inline void to_time(int milliseconds, boost::xtime& xt)
+ {
+     int res = 0;
+-    res = boost::xtime_get(&xt, boost::TIME_UTC);
+-    BOOST_ASSERT(res == boost::TIME_UTC);
++    res = boost::xtime_get(&xt, boost::TIME_UTC_);
++    BOOST_ASSERT(res == boost::TIME_UTC_);
+ 
+     xt.sec += (milliseconds / MILLISECONDS_PER_SECOND);
+     xt.nsec += ((milliseconds % MILLISECONDS_PER_SECOND) *
+@@ -57,8 +57,8 @@
+ {
+     boost::xtime cur;
+     int res = 0;
+-    res = boost::xtime_get(&cur, boost::TIME_UTC);
+-    BOOST_ASSERT(res == boost::TIME_UTC);
++    res = boost::xtime_get(&cur, boost::TIME_UTC_);
++    BOOST_ASSERT(res == boost::TIME_UTC_);
+ 
+     if (boost::xtime_cmp(xt, cur) <= 0)
+     {
+@@ -88,8 +88,8 @@
+ {
+     boost::xtime cur;
+     int res = 0;
+-    res = boost::xtime_get(&cur, boost::TIME_UTC);
+-    BOOST_ASSERT(res == boost::TIME_UTC);
++    res = boost::xtime_get(&cur, boost::TIME_UTC_);
++    BOOST_ASSERT(res == boost::TIME_UTC_);
+ 
+     if (boost::xtime_cmp(xt, cur) <= 0)
+         milliseconds = 0;
+@@ -110,8 +110,8 @@
+ {
+     boost::xtime cur;
+     int res = 0;
+-    res = boost::xtime_get(&cur, boost::TIME_UTC);
+-    BOOST_ASSERT(res == boost::TIME_UTC);
++    res = boost::xtime_get(&cur, boost::TIME_UTC_);
++    BOOST_ASSERT(res == boost::TIME_UTC_);
+ 
+     if (boost::xtime_cmp(xt, cur) <= 0)
+         microseconds = 0;
+--- a/boost/static_assert.hpp	2008-07-11 03:49:31.000000000 -0700
++++ b/boost/static_assert.hpp	2014-06-07 07:32:29.365107458 -0700
+@@ -38,6 +38,15 @@
+ #  define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)
+ #endif
+ 
++//
++// If the compiler warns about unused typedefs then enable this:
++//
++#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
++#  define BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused))
++#else
++#  define BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE
++#endif
++
+ #ifdef BOOST_HAS_STATIC_ASSERT
+ #  define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)
+ #else
+@@ -116,7 +125,7 @@
+ #define BOOST_STATIC_ASSERT( B ) \
+    typedef ::boost::static_assert_test<\
+       sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\
+-         BOOST_JOIN(boost_static_assert_typedef_, __LINE__)
++		  BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_STATIC_ASSERT_UNUSED_ATTRIBUTE
+ #endif
+ 
+ #else
+
diff --git a/boost.patches/boost-50.description b/boost.patches/boost-50.description
new file mode 100644
index 0000000..b4de134
--- /dev/null
+++ b/boost.patches/boost-50.description
@@ -0,0 +1 @@
+This patch resolves compiler errors / warnings regarding shadow variables.
diff --git a/boost.patches/boost-50.patch b/boost.patches/boost-50.patch
new file mode 100644
index 0000000..474e31f
--- /dev/null
+++ b/boost.patches/boost-50.patch
@@ -0,0 +1,110 @@
+--- a/boost/concept_check.hpp
++++ b/boost/concept_check.hpp
+@@ -1014,11 +1014,11 @@
+         c.swap(c);
+       }
+ 
+-      void const_constraints(const C& c) {
+-        ci = c.begin();
+-        ci = c.end();
+-        n = c.size();
+-        b = c.empty();
++      void const_constraints(const C& constraint) {
++        ci = constraint.begin();
++        ci = constraint.end();
++        n = constraint.size();
++        b = constraint.empty();
+       }
+ 
+     private:
+--- a/boost/filesystem/v3/path.hpp	2010-10-16 06:09:25.000000000 -0700
++++ b/boost/filesystem/v3/path.hpp	2011-05-14 16:54:35.927910801 -0700
+@@ -142,23 +142,23 @@
+     }
+ 
+     template <class InputIterator>
+-    path(InputIterator begin, InputIterator end)
++    path(InputIterator first, InputIterator last)
+     { 
+-      if (begin != end)
++      if (first != last)
+       {
+         std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+-          s(begin, end);
++          s(first, last);
+         path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, codecvt());
+       }
+     }
+ 
+     template <class InputIterator>
+-    path(InputIterator begin, InputIterator end, const codecvt_type& cvt)
++    path(InputIterator first, InputIterator last, const codecvt_type& cvt)
+     { 
+-      if (begin != end)
++      if (first != last)
+       {
+         std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+-          s(begin, end);
++          s(first, last);
+         path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt);
+       }
+     }
+@@ -190,19 +190,19 @@
+     }
+ 
+     template <class InputIterator>
+-    path& assign(InputIterator begin, InputIterator end)
++    path& assign(InputIterator first, InputIterator last)
+     {
+-      return assign(begin, end, codecvt());
++      return assign(first, last, codecvt());
+     }
+ 
+     template <class InputIterator>
+-    path& assign(InputIterator begin, InputIterator end, const codecvt_type& cvt)
++    path& assign(InputIterator first, InputIterator last, const codecvt_type& cvt)
+     { 
+       m_pathname.clear();
+-      if (begin != end)
++      if (first != last)
+       {
+         std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+-          s(begin, end);
++          s(first, last);
+         path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt);
+       }
+       return *this;
+@@ -227,13 +227,13 @@
+     path& append(Source const& source, const codecvt_type& cvt);
+ 
+     template <class InputIterator>
+-    path& append(InputIterator begin, InputIterator end)
++    path& append(InputIterator first, InputIterator last)
+     { 
+-      return append(begin, end, codecvt());
++      return append(first, last, codecvt());
+     }
+ 
+     template <class InputIterator>
+-    path& append(InputIterator begin, InputIterator end, const codecvt_type& cvt);
++    path& append(InputIterator first, InputIterator last, const codecvt_type& cvt);
+ 
+     //  -----  modifiers  -----
+ 
+@@ -612,13 +612,13 @@
+ //--------------------------------------------------------------------------------------//
+ 
+   template <class InputIterator>
+-  path& path::append(InputIterator begin, InputIterator end, const codecvt_type& cvt)
++  path& path::append(InputIterator first, InputIterator last, const codecvt_type& cvt)
+   { 
+-    if (begin == end)
++    if (first == last)
+       return *this;
+     string_type::size_type sep_pos(m_append_separator_if_needed());
+     std::basic_string<typename std::iterator_traits<InputIterator>::value_type>
+-      s(begin, end);
++      s(first, last);
+     path_traits::convert(s.c_str(), s.c_str()+s.size(), m_pathname, cvt);
+     if (sep_pos)
+       m_erase_redundant_separator(sep_pos);
diff --git a/boost.patches/boost-51.description b/boost.patches/boost-51.description
new file mode 100644
index 0000000..ab896a1
--- /dev/null
+++ b/boost.patches/boost-51.description
@@ -0,0 +1 @@
+This patch applies upstream change set 67067 <https://svn.boost.org/trac/boost/changeset/67067> for issue 4930 <https://svn.boost.org/trac/boost/ticket/4930>.
diff --git a/boost.patches/boost-51.patch b/boost.patches/boost-51.patch
new file mode 100644
index 0000000..a7ffbec
--- /dev/null
+++ b/boost.patches/boost-51.patch
@@ -0,0 +1,28 @@
+--- a/libs/filesystem/v2/src/v2_operations.cpp	2010-08-10 13:00:09.000000000 -0700
++++ b/libs/filesystem/v2/src/v2_operations.cpp	2011-06-16 17:28:00.000000000 -0700
+@@ -1215,8 +1214,9 @@
+         if ( ::stat( from_file_ph.c_str(), &from_stat ) != 0 )
+           { return error_code( errno, system_category() ); }
+ 
+-        int oflag = O_CREAT | O_WRONLY;
+-        if ( fail_if_exists ) oflag |= O_EXCL;
++        int oflag = O_CREAT | O_WRONLY | O_TRUNC;
++        if ( fail_if_exists )
++          oflag |= O_EXCL;
+         if (  (outfile = ::open( to_file_ph.c_str(), oflag, from_stat.st_mode )) < 0 )
+         {
+           int open_errno = errno;
+--- a/libs/filesystem/v3/src/operations.cpp	2010-10-16 06:09:25.000000000 -0700
++++ b/libs/filesystem/v3/src/operations.cpp	2011-06-16 17:28:00.000000000 -0700
+@@ -426,8 +433,9 @@
+     if (::stat(from_p.c_str(), &from_stat)!= 0)
+       { return false; }
+ 
+-    int oflag = O_CREAT | O_WRONLY;
+-    if (fail_if_exists)oflag |= O_EXCL;
++    int oflag = O_CREAT | O_WRONLY | O_TRUNC;
++    if (fail_if_exists)
++      oflag |= O_EXCL;
+     if ((outfile = ::open(to_p.c_str(), oflag, from_stat.st_mode))< 0)
+     {
+       int open_errno = errno;
diff --git a/boost.patches/boost-52.description b/boost.patches/boost-52.description
new file mode 100644
index 0000000..98582d2
--- /dev/null
+++ b/boost.patches/boost-52.description
@@ -0,0 +1 @@
+This patch resolves compiler errors / warnings regarding shadow variables in boost::numeric::ublas.
diff --git a/boost.patches/boost-52.patch b/boost.patches/boost-52.patch
new file mode 100644
index 0000000..aeae509
--- /dev/null
+++ b/boost.patches/boost-52.patch
@@ -0,0 +1,1948 @@
+diff -aruN a/boost/archive/basic_archive.hpp b/boost/archive/basic_archive.hpp
+--- a/boost/archive/basic_archive.hpp	2010-11-06 09:31:31.000000000 -0700
++++ b/boost/archive/basic_archive.hpp	2012-02-07 15:25:24.619334954 -0800
+@@ -254,7 +254,7 @@
+ #define BOOST_ARCHIVE_STRONG_TYPEDEF(T, D)         \
+     class D : public T {                           \
+     public:                                        \
+-        explicit D(const T t) : T(t){}             \
++        explicit D(const T t) : T(type){}       \
+     };                                             \
+ /**/
+ 
+diff -aruN a/boost/numeric/ublas/banded.hpp b/boost/numeric/ublas/banded.hpp
+--- a/boost/numeric/ublas/banded.hpp	2010-07-04 23:06:24.000000000 -0700
++++ b/boost/numeric/ublas/banded.hpp	2012-02-07 15:25:24.623735807 -0800
+@@ -63,16 +63,16 @@
+             size1_ (0), size2_ (0),
+             lower_ (0), upper_ (0), data_ (0) {}
+         BOOST_UBLAS_INLINE
+-        banded_matrix (size_type size1, size_type size2, size_type lower = 0, size_type upper = 0):
++        banded_matrix (size_type s1, size_type s2, size_type l = 0, size_type u = 0):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2),
+-            lower_ (lower), upper_ (upper), data_ ((std::max) (size1, size2) * (lower + 1 + upper)) {
++            size1_ (s1), size2_ (s2),
++            lower_ (l), upper_ (u), data_ ((std::max) (s1, s2) * (l + 1 + u)) {
+         }
+         BOOST_UBLAS_INLINE
+-        banded_matrix (size_type size1, size_type size2, size_type lower, size_type upper, const array_type &data):
++        banded_matrix (size_type s1, size_type s2, size_type l, size_type u, const array_type &d):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2),
+-            lower_ (lower), upper_ (upper), data_ (data) {}
++            size1_ (s1), size2_ (s2),
++            lower_ (l), upper_ (u), data_ (d) {}
+         BOOST_UBLAS_INLINE
+         banded_matrix (const banded_matrix &m):
+             matrix_container<self_type> (),
+@@ -80,10 +80,10 @@
+             lower_ (m.lower_), upper_ (m.upper_), data_ (m.data_) {}
+         template<class AE>
+         BOOST_UBLAS_INLINE
+-        banded_matrix (const matrix_expression<AE> &ae, size_type lower = 0, size_type upper = 0):
++        banded_matrix (const matrix_expression<AE> &ae, size_type l = 0, size_type u = 0):
+             matrix_container<self_type> (),
+             size1_ (ae ().size1 ()), size2_ (ae ().size2 ()),
+-            lower_ (lower), upper_ (upper),
++            lower_ (l), upper_ (u),
+             data_ ((std::max) (size1_, size2_) * (lower_ + 1 + upper_)) {
+             matrix_assign<scalar_assign> (*this, ae);
+         }
+@@ -118,27 +118,27 @@
+ 
+         // Resizing
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, size_type lower = 0, size_type upper = 0, bool preserve = true) {
++        void resize (size_type s1, size_type s2, size_type l = 0, size_type u = 0, bool preserve = true) {
+             if (preserve) {
+-                self_type temporary (size1, size2, lower, upper);
++                self_type temporary (s1, s2, l, u);
+                 detail::matrix_resize_preserve<layout_type> (*this, temporary);
+             }
+             else {
+-                data ().resize ((std::max) (size1, size2) * (lower + 1 + upper));
+-                size1_ = size1;
+-                size2_ = size2;
+-                lower_ = lower;
+-                upper_ = upper;
++                data ().resize ((std::max) (s1, s2) * (l + 1 + u));
++                size1_ = s1;
++                size2_ = s2;
++                lower_ = l;
++                upper_ = u;
+             }
+         }
+ 
+         BOOST_UBLAS_INLINE
+-        void resize_packed_preserve (size_type size1, size_type size2, size_type lower = 0, size_type upper = 0) {
+-            size1_ = size1;
+-            size2_ = size2;
+-            lower_ = lower;
+-            upper_ = upper;
+-            data ().resize ((std::max) (size1, size2) * (lower + 1 + upper), value_type ());
++        void resize_packed_preserve (size_type s1, size_type s2, size_type l = 0, size_type u = 0) {
++            size1_ = s1;
++            size2_ = s2;
++            lower_ = l;
++            upper_ = u;
++            data ().resize ((std::max) (size1, size2) * (l + 1 + u), value_type ());
+         }
+ 
+         // Element access
+@@ -1082,9 +1082,9 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        banded_adaptor (matrix_type &data, size_type lower = 0, size_type upper = 0):
++        banded_adaptor (matrix_type &d, size_type l = 0, size_type u = 0):
+             matrix_expression<self_type> (),
+-            data_ (data), lower_ (lower), upper_ (upper) {}
++            data_ (d), lower_ (l), upper_ (u) {}
+         BOOST_UBLAS_INLINE
+         banded_adaptor (const banded_adaptor &m):
+             matrix_expression<self_type> (),
+diff -aruN a/boost/numeric/ublas/detail/matrix_assign.hpp b/boost/numeric/ublas/detail/matrix_assign.hpp
+--- a/boost/numeric/ublas/detail/matrix_assign.hpp	2010-10-19 00:01:35.000000000 -0700
++++ b/boost/numeric/ublas/detail/matrix_assign.hpp	2012-02-07 15:25:24.623735807 -0800
+@@ -75,21 +75,21 @@
+                 if (it2 != it2_end && it2e != it2e_end) {
+                     size_type it2_index = it2.index2 (), it2e_index = it2e.index2 ();
+                     while (true) {
+-                        difference_type compare = it2_index - it2e_index;
+-                        if (compare == 0) {
++                        difference_type compare2 = it2_index - it2e_index;
++                        if (compare2 == 0) {
+                             ++ it2, ++ it2e;
+                             if (it2 != it2_end && it2e != it2e_end) {
+                                 it2_index = it2.index2 ();
+                                 it2e_index = it2e.index2 ();
+                             } else
+                                 break;
+-                        } else if (compare < 0) {
+-                            increment (it2, it2_end, - compare);
++                        } else if (compare2 < 0) {
++                            increment (it2, it2_end, - compare2);
+                             if (it2 != it2_end)
+                                 it2_index = it2.index2 ();
+                             else
+                                 break;
+-                        } else if (compare > 0) {
++                        } else if (compare2 > 0) {
+                             if (conformant_restrict_type::other (it2e.index1 (), it2e.index2 ()))
+                                 if (static_cast<value_type>(*it2e) != value_type/*zero*/())
+                                     index.push_back (std::pair<size_type, size_type> (it2e.index1 (), it2e.index2 ()));
+@@ -178,21 +178,21 @@
+                 if (it1 != it1_end && it1e != it1e_end) {
+                     size_type it1_index = it1.index1 (), it1e_index = it1e.index1 ();
+                     while (true) {
+-                        difference_type compare = it1_index - it1e_index;
+-                        if (compare == 0) {
++                        difference_type compare2 = it1_index - it1e_index;
++                        if (compare2 == 0) {
+                             ++ it1, ++ it1e;
+                             if (it1 != it1_end && it1e != it1e_end) {
+                                 it1_index = it1.index1 ();
+                                 it1e_index = it1e.index1 ();
+                             } else
+                                 break;
+-                        } else if (compare < 0) {
+-                            increment (it1, it1_end, - compare);
++                        } else if (compare2 < 0) {
++                            increment (it1, it1_end, - compare2);
+                             if (it1 != it1_end)
+                                 it1_index = it1.index1 ();
+                             else
+                                 break;
+-                        } else if (compare > 0) {
++                        } else if (compare2 > 0) {
+                             if (conformant_restrict_type::other (it1e.index1 (), it1e.index2 ()))
+                                 if (static_cast<value_type>(*it1e) != value_type/*zero*/())
+                                     index.push_back (std::pair<size_type, size_type> (it1e.index1 (), it1e.index2 ()));
+@@ -997,8 +997,8 @@
+                 if (it2 != it2_end && it2e != it2e_end) {
+                     size_type it2_index = it2.index2 (), it2e_index = it2e.index2 ();
+                     while (true) {
+-                        difference_type compare = it2_index - it2e_index;
+-                        if (compare == 0) {
++                        difference_type compare2 = it2_index - it2e_index;
++                        if (compare2 == 0) {
+                             functor_type::apply (*it2, *it2e);
+                             ++ it2, ++ it2e;
+                             if (it2 != it2_end && it2e != it2e_end) {
+@@ -1006,18 +1006,18 @@
+                                 it2e_index = it2e.index2 ();
+                             } else
+                                 break;
+-                        } else if (compare < 0) {
++                        } else if (compare2 < 0) {
+                             if (!functor_type::computed) {
+                                 functor_type::apply (*it2, expr_value_type/*zero*/());
+                                 ++ it2;
+                             } else
+-                                increment (it2, it2_end, - compare);
++                                increment (it2, it2_end, - compare2);
+                             if (it2 != it2_end)
+                                 it2_index = it2.index2 ();
+                             else
+                                 break;
+-                        } else if (compare > 0) {
+-                            increment (it2e, it2e_end, compare);
++                        } else if (compare2 > 0) {
++                            increment (it2e, it2e_end, compare2);
+                             if (it2e != it2e_end)
+                                 it2e_index = it2e.index2 ();
+                             else
+@@ -1118,8 +1118,8 @@
+                 if (it1 != it1_end && it1e != it1e_end) {
+                     size_type it1_index = it1.index1 (), it1e_index = it1e.index1 ();
+                     while (true) {
+-                        difference_type compare = it1_index - it1e_index;
+-                        if (compare == 0) {
++                        difference_type compare2 = it1_index - it1e_index;
++                        if (compare2 == 0) {
+                             functor_type::apply (*it1, *it1e);
+                             ++ it1, ++ it1e;
+                             if (it1 != it1_end && it1e != it1e_end) {
+@@ -1127,18 +1127,18 @@
+                                 it1e_index = it1e.index1 ();
+                             } else
+                                 break;
+-                        } else if (compare < 0) {
++                        } else if (compare2 < 0) {
+                             if (!functor_type::computed) {
+                                 functor_type::apply (*it1, expr_value_type/*zero*/()); // zeroing
+                                 ++ it1;
+                             } else
+-                                increment (it1, it1_end, - compare);
++                                increment (it1, it1_end, - compare2);
+                             if (it1 != it1_end)
+                                 it1_index = it1.index1 ();
+                             else
+                                 break;
+-                        } else if (compare > 0) {
+-                            increment (it1e, it1e_end, compare);
++                        } else if (compare2 > 0) {
++                            increment (it1e, it1e_end, compare2);
+                             if (it1e != it1e_end)
+                                 it1e_index = it1e.index1 ();
+                             else
+@@ -1386,8 +1386,8 @@
+                 if (it2 != it2_end && it2e != it2e_end) {
+                     size_type it2_index = it2.index2 (), it2e_index = it2e.index2 ();
+                     while (true) {
+-                        difference_type compare = it2_index - it2e_index;
+-                        if (compare == 0) {
++                        difference_type compare2 = it2_index - it2e_index;
++                        if (compare2 == 0) {
+                             functor_type::apply (*it2, *it2e);
+                             ++ it2, ++ it2e;
+                             if (it2 != it2_end && it2e != it2e_end) {
+@@ -1395,14 +1395,14 @@
+                                 it2e_index = it2e.index2 ();
+                             } else
+                                 break;
+-                        } else if (compare < 0) {
+-                            increment (it2, it2_end, - compare);
++                        } else if (compare2 < 0) {
++                            increment (it2, it2_end, - compare2);
+                             if (it2 != it2_end)
+                                 it2_index = it2.index2 ();
+                             else
+                                 break;
+-                        } else if (compare > 0) {
+-                            increment (it2e, it2e_end, compare);
++                        } else if (compare2 > 0) {
++                            increment (it2e, it2e_end, compare2);
+                             if (it2e != it2e_end)
+                                 it2e_index = it2e.index2 ();
+                             else
+@@ -1511,8 +1511,8 @@
+                 if (it1 != it1_end && it1e != it1e_end) {
+                     size_type it1_index = it1.index1 (), it1e_index = it1e.index1 ();
+                     while (true) {
+-                        difference_type compare = it1_index - it1e_index;
+-                        if (compare == 0) {
++                        difference_type compare2 = it1_index - it1e_index;
++                        if (compare2 == 0) {
+                             functor_type::apply (*it1, *it1e);
+                             ++ it1, ++ it1e;
+                             if (it1 != it1_end && it1e != it1e_end) {
+@@ -1520,14 +1520,14 @@
+                                 it1e_index = it1e.index1 ();
+                             } else
+                                 break;
+-                        }  else if (compare < 0) {
+-                            increment (it1, it1_end, - compare);
++                        }  else if (compare2 < 0) {
++                            increment (it1, it1_end, - compare2);
+                             if (it1 != it1_end)
+                                 it1_index = it1.index1 ();
+                             else
+                                 break;
+-                        } else if (compare > 0) {
+-                            increment (it1e, it1e_end, compare);
++                        } else if (compare2 > 0) {
++                            increment (it1e, it1e_end, compare2);
+                             if (it1e != it1e_end)
+                                 it1e_index = it1e.index1 ();
+                             else
+diff -aruN a/boost/numeric/ublas/hermitian.hpp b/boost/numeric/ublas/hermitian.hpp
+--- a/boost/numeric/ublas/hermitian.hpp	2010-07-04 23:06:24.000000000 -0700
++++ b/boost/numeric/ublas/hermitian.hpp	2012-02-07 15:25:24.627228060 -0800
+@@ -284,14 +284,14 @@
+             size_ (BOOST_UBLAS_SAME (size, size)), data_ (triangular_type::packed_size (layout_type (), size, size)) {
+         }
+         BOOST_UBLAS_INLINE
+-        hermitian_matrix (size_type size1, size_type size2):
++        hermitian_matrix (size_type s1, size_type s2):
+             matrix_container<self_type> (),
+-            size_ (BOOST_UBLAS_SAME (size1, size2)), data_ (triangular_type::packed_size (layout_type (), size1, size2)) {
++            size_ (BOOST_UBLAS_SAME (s1, s2)), data_ (triangular_type::packed_size (layout_type (), s1, s2)) {
+         }
+         BOOST_UBLAS_INLINE
+-        hermitian_matrix (size_type size, const array_type &data):
++        hermitian_matrix (size_type s, const array_type &d):
+             matrix_container<self_type> (),
+-            size_ (size), data_ (data) {}
++            size_ (s), data_ (d) {}
+         BOOST_UBLAS_INLINE
+         hermitian_matrix (const hermitian_matrix &m):
+             matrix_container<self_type> (),
+@@ -338,8 +338,8 @@
+             }
+         }
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool preserve = true) {
+-            resize (BOOST_UBLAS_SAME (size1, size2), preserve);
++        void resize (size_type s1, size_type s2, bool preserve = true) {
++            resize (BOOST_UBLAS_SAME (s1, s2), preserve);
+         }
+         BOOST_UBLAS_INLINE
+         void resize_packed_preserve (size_type size) {
+@@ -1192,9 +1192,9 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        hermitian_adaptor (matrix_type &data):
++        hermitian_adaptor (matrix_type &d):
+             matrix_expression<self_type> (),
+-            data_ (data) {
++            data_ (d) {
+             BOOST_UBLAS_CHECK (data_.size1 () == data_.size2 (), bad_size ());
+         }
+         BOOST_UBLAS_INLINE
+@@ -1508,11 +1508,11 @@
+                 it1_begin_ (), it1_end_ (), it1_ (),
+                 it2_begin_ (), it2_end_ (), it2_ () {}
+             BOOST_UBLAS_INLINE
+-            const_iterator1 (const self_type &m, int begin, int end,
++            const_iterator1 (const self_type &m, int b, int e,
+                              const const_subiterator1_type &it1_begin, const const_subiterator1_type &it1_end,
+                              const const_subiterator2_type &it2_begin, const const_subiterator2_type &it2_end):
+                 container_const_reference<self_type> (m),
+-                begin_ (begin), end_ (end), current_ (begin),
++                begin_ (b), end_ (e), current_ (b),
+                 it1_begin_ (it1_begin), it1_end_ (it1_end), it1_ (it1_begin_),
+                 it2_begin_ (it2_begin), it2_end_ (it2_end), it2_ (it2_begin_) {
+                 if (current_ == 0 && it1_ == it1_end_)
+@@ -1962,11 +1962,11 @@
+                 it1_begin_ (), it1_end_ (), it1_ (),
+                 it2_begin_ (), it2_end_ (), it2_ () {}
+             BOOST_UBLAS_INLINE
+-            const_iterator2 (const self_type &m, int begin, int end,
++            const_iterator2 (const self_type &m, int b, int e,
+                              const const_subiterator1_type &it1_begin, const const_subiterator1_type &it1_end,
+                              const const_subiterator2_type &it2_begin, const const_subiterator2_type &it2_end):
+                 container_const_reference<self_type> (m),
+-                begin_ (begin), end_ (end), current_ (begin),
++                begin_ (b), end_ (e), current_ (b),
+                 it1_begin_ (it1_begin), it1_end_ (it1_end), it1_ (it1_begin_),
+                 it2_begin_ (it2_begin), it2_end_ (it2_end), it2_ (it2_begin_) {
+                 if (current_ == 0 && it1_ == it1_end_)
+diff -aruN a/boost/numeric/ublas/matrix_expression.hpp b/boost/numeric/ublas/matrix_expression.hpp
+--- a/boost/numeric/ublas/matrix_expression.hpp	2009-10-06 16:31:22.000000000 -0700
++++ b/boost/numeric/ublas/matrix_expression.hpp	2012-02-07 15:25:24.627228060 -0800
+@@ -1918,39 +1918,39 @@
+             // Sparse specializations
+             BOOST_UBLAS_INLINE
+             void increment (sparse_bidirectional_iterator_tag) {
+-                size_type index1 = (*this) ().size1 ();
++                size_type temp_index1 = (*this) ().size1 ();
+                 if (it1_ != it1_end_) {
+                     if (it1_.index1 () <= i_)
+                         ++ it1_;
+                     if (it1_ != it1_end_)
+-                        index1 = it1_.index1 ();
++                        temp_index1 = it1_.index1 ();
+                 }
+-                size_type index2 = (*this) ().size1 ();
++                size_type temp_index2 = (*this) ().size1 ();
+                 if (it2_ != it2_end_)
+                     if (it2_.index1 () <= i_)
+                         ++ it2_;
+                     if (it2_ != it2_end_) {
+-                        index2 = it2_.index1 ();
++                        temp_index2 = it2_.index1 ();
+                 }
+-                i_ = (std::min) (index1, index2);
++                i_ = (std::min) (temp_index1, temp_index2);
+             }
+             BOOST_UBLAS_INLINE
+             void decrement (sparse_bidirectional_iterator_tag) {
+-                size_type index1 = (*this) ().size1 ();
++                size_type temp_index1 = (*this) ().size1 ();
+                 if (it1_ != it1_end_) {
+                     if (i_ <= it1_.index1 ())
+                         -- it1_;
+                     if (it1_ != it1_end_)
+-                        index1 = it1_.index1 ();
++                        temp_index1 = it1_.index1 ();
+                 }
+-                size_type index2 = (*this) ().size1 ();
++                size_type temp_index2 = (*this) ().size1 ();
+                 if (it2_ != it2_end_) {
+                     if (i_ <= it2_.index1 ())
+                         -- it2_;
+                     if (it2_ != it2_end_)
+-                        index2 = it2_.index1 ();
++                        temp_index2 = it2_.index1 ();
+                 }
+-                i_ = (std::max) (index1, index2);
++                i_ = (std::max) (temp_index1, temp_index2);
+             }
+             BOOST_UBLAS_INLINE
+             void increment (sparse_bidirectional_iterator_tag, difference_type n) {
+@@ -2233,39 +2233,39 @@
+             // Sparse specializations
+             BOOST_UBLAS_INLINE
+             void increment (sparse_bidirectional_iterator_tag) {
+-                size_type index1 = (*this) ().size2 ();
++                size_type temp_index1 = (*this) ().size2 ();
+                 if (it1_ != it1_end_) {
+                     if (it1_.index2 () <= j_)
+                         ++ it1_;
+                     if (it1_ != it1_end_)
+                         index1 = it1_.index2 ();
+                 }
+-                size_type index2 = (*this) ().size2 ();
++                size_type temp_index2 = (*this) ().size2 ();
+                 if (it2_ != it2_end_) {
+                     if (it2_.index2 () <= j_)
+                         ++ it2_;
+                     if (it2_ != it2_end_)
+                         index2 = it2_.index2 ();
+                 }
+-                j_ = (std::min) (index1, index2);
++                j_ = (std::min) (temp_index1, temp_index2);
+             }
+             BOOST_UBLAS_INLINE
+             void decrement (sparse_bidirectional_iterator_tag) {
+-                size_type index1 = (*this) ().size2 ();
++                size_type temp_index1 = (*this) ().size2 ();
+                 if (it1_ != it1_end_) {
+                     if (j_ <= it1_.index2 ())
+                         -- it1_;
+                     if (it1_ != it1_end_)
+                         index1 = it1_.index2 ();
+                 }
+-                size_type index2 = (*this) ().size2 ();
++                size_type temp_index2 = (*this) ().size2 ();
+                 if (it2_ != it2_end_) {
+                     if (j_ <= it2_.index2 ())
+                         -- it2_;
+                     if (it2_ != it2_end_)
+                         index2 = it2_.index2 ();
+                 }
+-                j_ = (std::max) (index1, index2);
++                j_ = (std::max) (temp_index1, temp_index2);
+             }
+             BOOST_UBLAS_INLINE
+             void increment (sparse_bidirectional_iterator_tag, difference_type n) {
+diff -aruN a/boost/numeric/ublas/matrix.hpp b/boost/numeric/ublas/matrix.hpp
+--- a/boost/numeric/ublas/matrix.hpp	2010-10-19 00:01:35.000000000 -0700
++++ b/boost/numeric/ublas/matrix.hpp	2012-02-07 15:25:24.631348942 -0800
+@@ -126,9 +126,9 @@
+ 	   * \param size2 number of columns
+ 	   */
+         BOOST_UBLAS_INLINE
+-        matrix (size_type size1, size_type size2):
++        matrix (size_type s1, size_type s2):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), data_ (layout_type::storage_size (size1, size2)) {
++            size1_ (s1), size2_ (s2), data_ (layout_type::storage_size (s1, s2)) {
+         }
+ 
+ 	  /** Dense matrix constructor with defined size a initial value for all the matrix elements
+@@ -136,9 +136,9 @@
+ 	   * \param size2 number of columns
+ 	   * \param init initial value assigned to all elements
+ 	   */
+-        matrix (size_type size1, size_type size2, const value_type &init):
++        matrix (size_type s1, size_type s2, const value_type &init):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), data_ (layout_type::storage_size (size1, size2), init) {
++            size1_ (s1), size2_ (s2), data_ (layout_type::storage_size (s1, s2), init) {
+         }
+ 
+ 	  /** Dense matrix constructor with defined size and an initial data array
+@@ -147,9 +147,9 @@
+ 	   * \param data array to copy into the matrix. Must have the same dimension as the matrix
+ 	   */
+         BOOST_UBLAS_INLINE
+-        matrix (size_type size1, size_type size2, const array_type &data):
++        matrix (size_type s1, size_type s2, const array_type &d):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), data_ (data) {}
++            size1_ (s1), size2_ (s2), data_ (d) {}
+ 
+ 	  /** Copy-constructor of a dense matrix
+ 	   * \param m is a dense matrix
+@@ -212,15 +212,15 @@
+ 	   * \param preserve a boolean to say if one wants the data to be preserved during the resizing. Default is true.
+ 	   */
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool preserve = true) {
++        void resize (size_type s1, size_type s2, bool preserve = true) {
+             if (preserve) {
+-                self_type temporary (size1, size2);
++                self_type temporary (s1, s2);
+                 detail::matrix_resize_preserve<layout_type> (*this, temporary);
+             }
+             else {
+-                data ().resize (layout_type::storage_size (size1, size2));
+-                size1_ = size1;
+-                size2_ = size2;
++                data ().resize (layout_type::storage_size (s1, s2));
++                size1_ = s1;
++                size2_ = s2;
+             }
+         }
+ 
+@@ -1186,10 +1186,10 @@
+             matrix_container<self_type> (),
+             size1_ (0), size2_ (0), data_ (1) {}
+         BOOST_UBLAS_INLINE
+-        vector_of_vector (size_type size1, size_type size2):
++        vector_of_vector (size_type s1, size_type s2):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), data_ (1) {
+-            resize (size1, size2, true);
++            size1_ (s1), size2_ (s2), data_ (1) {
++            resize (s1, s2, true);
+         }
+         BOOST_UBLAS_INLINE
+         vector_of_vector (const vector_of_vector &m):
+@@ -1227,18 +1227,18 @@
+ 
+         // Resizing
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool preserve = true) {
+-            size1_ = size1;
+-            size2_ = size2;
++        void resize (size_type s1, size_type s2, bool preserve = true) {
++            size1_ = s1;
++            size2_ = s2;
+             if (preserve)
+-                data ().resize (layout_type::size_M (size1, size2) + 1, typename array_type::value_type ());
++                data ().resize (layout_type::size_M (s1, s2) + 1, typename array_type::value_type ());
+             else
+-                data ().resize (layout_type::size_M (size1, size2) + 1);
+-            for (size_type k = 0; k < layout_type::size_M (size1, size2); ++ k) {
++                data ().resize (layout_type::size_M (s1, s2) + 1);
++            for (size_type k = 0; k < layout_type::size_M (s1, s2); ++ k) {
+                 if (preserve)
+-                    data () [k].resize (layout_type::size_m (size1, size2), value_type ());
++                    data () [k].resize (layout_type::size_m (s1, s2), value_type ());
+                 else
+-                    data () [k].resize (layout_type::size_m (size1, size2));
++                    data () [k].resize (layout_type::size_m (s1, s2));
+             }
+         }
+ 
+@@ -2171,9 +2171,9 @@
+             matrix_container<self_type> (),
+             size1_ (size), size2_ (size) {}
+         BOOST_UBLAS_INLINE
+-        zero_matrix (size_type size1, size_type size2):
++        zero_matrix (size_type s1, size_type s2):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2) {}
++            size1_ (s1), size2_ (s2) {}
+         BOOST_UBLAS_INLINE
+         zero_matrix (const zero_matrix &m):
+             matrix_container<self_type> (),
+@@ -2196,9 +2196,9 @@
+             size2_ = size;
+         }
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool /*preserve*/ = true) {
+-            size1_ = size1;
+-            size2_ = size2;
++        void resize (size_type s1, size_type s2, bool /*preserve*/ = true) {
++            size1_ = s1;
++            size2_ = s2;
+         }
+ 
+         // Element access
+@@ -2558,9 +2558,9 @@
+             matrix_container<self_type> (),
+             size1_ (size), size2_ (size), size_common_ ((std::min) (size1_, size2_)) {}
+         BOOST_UBLAS_INLINE
+-        identity_matrix (size_type size1, size_type size2):
++        identity_matrix (size_type s1, size_type s2):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), size_common_ ((std::min) (size1_, size2_)) {}
++            size1_ (s1), size2_ (s2), size_common_ ((std::min) (size1_, size2_)) {}
+         BOOST_UBLAS_INLINE
+         identity_matrix (const identity_matrix &m):
+             matrix_container<self_type> (),
+@@ -2584,9 +2584,9 @@
+             size_common_ = ((std::min)(size1_, size2_));
+         }
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool /*preserve*/ = true) {
+-            size1_ = size1;
+-            size2_ = size2;
++        void resize (size_type s1, size_type s2, bool /*preserve*/ = true) {
++            size1_ = s1;
++            size2_ = s2;
+             size_common_ = ((std::min)(size1_, size2_));
+         }
+ 
+@@ -2970,9 +2970,9 @@
+             matrix_container<self_type> (),
+             size1_ (0), size2_ (0), value_ () {}
+         BOOST_UBLAS_INLINE
+-        scalar_matrix (size_type size1, size_type size2, const value_type &value = value_type(1)):
++        scalar_matrix (size_type s1, size_type s2, const value_type &value = value_type(1)):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), value_ (value) {}
++            size1_ (s1), size2_ (s2), value_ (value) {}
+         BOOST_UBLAS_INLINE
+         scalar_matrix (const scalar_matrix &m):
+             matrix_container<self_type> (),
+@@ -2990,9 +2990,9 @@
+ 
+         // Resizing
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool /*preserve*/ = true) {
+-            size1_ = size1;
+-            size2_ = size2;
++        void resize (size_type s1, size_type s2, bool /*preserve*/ = true) {
++            size1_ = s1;
++            size2_ = s2;
+         }
+ 
+         // Element access
+@@ -3446,8 +3446,8 @@
+             size1_ (N), size2_ (M) /* , data_ () */ {
+         }
+         BOOST_UBLAS_INLINE
+-        c_matrix (size_type size1, size_type size2):
+-            size1_ (size1), size2_ (size2) /* , data_ () */ {
++        c_matrix (size_type s1, size_type s2):
++            size1_ (s1), size2_ (s2) /* , data_ () */ {
+             if (size1_ > N || size2_ > M)
+                 bad_size ().raise ();
+         }
+@@ -3487,14 +3487,14 @@
+ 
+         // Resizing
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool preserve = true) {
+-            if (size1 > N || size2 > M)
++        void resize (size_type s1, size_type s2, bool preserve = true) {
++            if (s1 > N || s2 > M)
+                 bad_size ().raise ();
+             if (preserve) {
+-                self_type temporary (size1, size2);
++                self_type temporary (s1, s2);
+                 // Common elements to preserve
+-                const size_type size1_min = (std::min) (size1, size1_);
+-                const size_type size2_min = (std::min) (size2, size2_);
++                const size_type size1_min = (std::min) (s1, size1_);
++                const size_type size2_min = (std::min) (s2, size2_);
+                 for (size_type i = 0; i != size1_min; ++i) {    // indexing copy over major
+                     for (size_type j = 0; j != size2_min; ++j) {
+                         temporary.data_[i][j] = data_[i][j];
+@@ -3503,8 +3503,8 @@
+                 assign_temporary (temporary);
+             }
+             else {
+-                size1_ = size1;
+-                size2_ = size2;
++                size1_ = s1;
++                size2_ = s2;
+             }
+         }
+ 
+diff -aruN a/boost/numeric/ublas/matrix_proxy.hpp b/boost/numeric/ublas/matrix_proxy.hpp
+--- a/boost/numeric/ublas/matrix_proxy.hpp	2010-07-04 23:06:24.000000000 -0700
++++ b/boost/numeric/ublas/matrix_proxy.hpp	2012-02-07 15:25:24.631348942 -0800
+@@ -51,8 +51,8 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        matrix_row (matrix_type &data, size_type i):
+-            data_ (data), i_ (i) {
++        matrix_row (matrix_type &d, size_type i):
++            data_ (d), i_ (i) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (i_ < data_.size1 (), bad_index ());
+         }
+@@ -508,8 +508,8 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        matrix_column (matrix_type &data, size_type j):
+-            data_ (data), j_ (j) {
++        matrix_column (matrix_type &d, size_type j):
++            data_ (d), j_ (j) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (j_ < data_.size2 (), bad_index ());
+         }
+@@ -965,8 +965,8 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        matrix_vector_range (matrix_type &data, const range_type &r1, const range_type &r2):
+-            data_ (data), r1_ (r1.preprocess (data.size1 ())), r2_ (r2.preprocess (data.size2 ())) {
++        matrix_vector_range (matrix_type &d, const range_type &r1, const range_type &r2):
++            data_ (d), r1_ (r1.preprocess (d.size1 ())), r2_ (r2.preprocess (d.size2 ())) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (r1_.start () <= data_.size1 () &&
+             //                     r1_.start () + r1_.size () <= data_.size1 (), bad_index ());
+@@ -1421,8 +1421,8 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        matrix_vector_slice (matrix_type &data, const slice_type &s1, const slice_type &s2):
+-            data_ (data), s1_ (s1.preprocess (data.size1 ())), s2_ (s2.preprocess (data.size2 ())) {
++        matrix_vector_slice (matrix_type &d, const slice_type &s1, const slice_type &s2):
++            data_ (d), s1_ (s1.preprocess (d.size1 ())), s2_ (s2.preprocess (d.size2 ())) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (s1_.start () <= data_.size1 () &&
+             //                    s1_.start () + s1_.stride () * (s1_.size () - (s1_.size () > 0)) <= data_.size1 (), bad_index ());
+@@ -1886,11 +1886,11 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        matrix_vector_indirect (matrix_type &data, size_type size):
+-            data_ (data), ia1_ (size), ia2_ (size) {}
++        matrix_vector_indirect (matrix_type &d, size_type s):
++            data_ (d), ia1_ (s), ia2_ (s) {}
+         BOOST_UBLAS_INLINE
+-        matrix_vector_indirect (matrix_type &data, const indirect_array_type &ia1, const indirect_array_type &ia2):
+-            data_ (data), ia1_ (ia1), ia2_ (ia2) {
++        matrix_vector_indirect (matrix_type &d, const indirect_array_type &ia1, const indirect_array_type &ia2):
++            data_ (d), ia1_ (ia1), ia2_ (ia2) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (ia1_.size () == ia2_.size (), bad_size ());
+         }
+@@ -2351,8 +2351,8 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        matrix_range (matrix_type &data, const range_type &r1, const range_type &r2):
+-            data_ (data), r1_ (r1.preprocess (data.size1 ())), r2_ (r2.preprocess (data.size2 ())) {
++        matrix_range (matrix_type &d, const range_type &r1, const range_type &r2):
++            data_ (d), r1_ (r1.preprocess (d.size1 ())), r2_ (r2.preprocess (d.size2 ())) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (r1_.start () <= data_.size1 () &&
+             //                    r1_.start () + r1_.size () <= data_.size1 (), bad_index ());
+@@ -2360,8 +2360,8 @@
+             //                    r2_.start () + r2_.size () <= data_.size2 (), bad_index ());
+         }
+         BOOST_UBLAS_INLINE
+-        matrix_range (const matrix_closure_type &data, const range_type &r1, const range_type &r2, int):
+-            data_ (data), r1_ (r1.preprocess (data.size1 ())), r2_ (r2.preprocess (data.size2 ())) {
++        matrix_range (const matrix_closure_type &d, const range_type &r1, const range_type &r2, int):
++            data_ (d), r1_ (r1.preprocess (d.size1 ())), r2_ (r2.preprocess (d.size2 ())) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (r1_.start () <= data_.size1 () &&
+             //                    r1_.start () + r1_.size () <= data_.size1 (), bad_index ());
+@@ -3255,8 +3255,8 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        matrix_slice (matrix_type &data, const slice_type &s1, const slice_type &s2):
+-            data_ (data), s1_ (s1.preprocess (data.size1 ())), s2_ (s2.preprocess (data.size2 ())) {
++        matrix_slice (matrix_type &d, const slice_type &s1, const slice_type &s2):
++            data_ (d), s1_ (s1.preprocess (d.size1 ())), s2_ (s2.preprocess (d.size2 ())) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (s1_.start () <= data_.size1 () &&
+             //                    s1_.start () + s1_.stride () * (s1_.size () - (s1_.size () > 0)) <= data_.size1 (), bad_index ());
+@@ -3264,8 +3264,8 @@
+             //                    s2_.start () + s2_.stride () * (s2_.size () - (s2_.size () > 0)) <= data_.size2 (), bad_index ());
+         }
+         BOOST_UBLAS_INLINE
+-        matrix_slice (const matrix_closure_type &data, const slice_type &s1, const slice_type &s2, int):
+-            data_ (data), s1_ (s1.preprocess (data.size1 ())), s2_ (s2.preprocess (data.size2 ())) {
++        matrix_slice (const matrix_closure_type &d, const slice_type &s1, const slice_type &s2, int):
++            data_ (d), s1_ (s1.preprocess (d.size1 ())), s2_ (s2.preprocess (d.size2 ())) {
+             // Early checking of preconditions.
+             // BOOST_UBLAS_CHECK (s1_.start () <= data_.size1 () &&
+             //                    s1_.start () + s1_.stride () * (s1_.size () - (s1_.size () > 0)) <= data_.size1 (), bad_index ());
+@@ -4213,14 +4213,14 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        matrix_indirect (matrix_type &data, size_type size1, size_type size2):
+-            data_ (data), ia1_ (size1), ia2_ (size2) {}
++        matrix_indirect (matrix_type &d, size_type s1, size_type s2):
++            data_ (d), ia1_ (s1), ia2_ (s2) {}
+         BOOST_UBLAS_INLINE
+-        matrix_indirect (matrix_type &data, const indirect_array_type &ia1, const indirect_array_type &ia2):
+-            data_ (data), ia1_ (ia1.preprocess (data.size1 ())), ia2_ (ia2.preprocess (data.size2 ())) {}
++        matrix_indirect (matrix_type &d, const indirect_array_type &ia1, const indirect_array_type &ia2):
++            data_ (d), ia1_ (ia1.preprocess (d.size1 ())), ia2_ (ia2.preprocess (d.size2 ())) {}
+         BOOST_UBLAS_INLINE
+-        matrix_indirect (const matrix_closure_type &data, const indirect_array_type &ia1, const indirect_array_type &ia2, int):
+-            data_ (data), ia1_ (ia1.preprocess (data.size1 ())), ia2_ (ia2.preprocess (data.size2 ())) {}
++        matrix_indirect (const matrix_closure_type &d, const indirect_array_type &ia1, const indirect_array_type &ia2, int):
++            data_ (d), ia1_ (ia1.preprocess (d.size1 ())), ia2_ (ia2.preprocess (d.size2 ())) {}
+ 
+         // Accessors
+         BOOST_UBLAS_INLINE
+diff -aruN a/boost/numeric/ublas/matrix_sparse.hpp b/boost/numeric/ublas/matrix_sparse.hpp
+--- a/boost/numeric/ublas/matrix_sparse.hpp	2010-07-04 23:06:24.000000000 -0700
++++ b/boost/numeric/ublas/matrix_sparse.hpp	2012-02-07 15:25:24.635307503 -0800
+@@ -300,9 +300,9 @@
+             matrix_container<self_type> (),
+             size1_ (0), size2_ (0), data_ () {}
+         BOOST_UBLAS_INLINE
+-        mapped_matrix (size_type size1, size_type size2, size_type non_zeros = 0):
++        mapped_matrix (size_type s1, size_type s2, size_type non_zeros = 0):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), data_ () {
++            size1_ (s1), size2_ (s2), data_ () {
+             detail::map_reserve (data (), restrict_capacity (non_zeros));
+         }
+         BOOST_UBLAS_INLINE
+@@ -358,11 +358,11 @@
+         }
+     public:
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool preserve = true) {
++        void resize (size_type s1, size_type s2, bool preserve = true) {
+             // FIXME preserve unimplemented
+             BOOST_UBLAS_CHECK (!preserve, internal_logic ());
+-            size1_ = size1;
+-            size2_ = size2;
++            size1_ = s1;
++            size2_ = s2;
+             data ().clear ();
+         }
+ 
+@@ -1373,9 +1373,9 @@
+             data_ [layout_type::size_M (size1_, size2_)] = vector_data_value_type ();
+         }
+         BOOST_UBLAS_INLINE
+-        mapped_vector_of_mapped_vector (size_type size1, size_type size2, size_type non_zeros = 0):
++        mapped_vector_of_mapped_vector (size_type s1, size_type s2, size_type non_zeros = 0):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), data_ () {
++            size1_ (s1), size2_ (s2), data_ () {
+             data_ [layout_type::size_M (size1_, size2_)] = vector_data_value_type ();
+         }
+         BOOST_UBLAS_INLINE
+@@ -1427,11 +1427,11 @@
+ 
+         // Resizing
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool preserve = true) {
++        void resize (size_type s1, size_type s2, bool preserve = true) {
+             // FIXME preserve unimplemented
+             BOOST_UBLAS_CHECK (!preserve, internal_logic ());
+-            size1_ = size1;
+-            size2_ = size2;
++            size1_ = s1;
++            size2_ = s2;
+             data ().clear ();
+             data () [layout_type::size_M (size1_, size2_)] = vector_data_value_type ();
+         }
+@@ -2666,9 +2666,9 @@
+             storage_invariants ();
+         }
+         BOOST_UBLAS_INLINE
+-        compressed_matrix (size_type size1, size_type size2, size_type non_zeros = 0):
++        compressed_matrix (size_type s1, size_type s2, size_type non_zeros = 0):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), capacity_ (restrict_capacity (non_zeros)),
++            size1_ (s1), size2_ (s2), capacity_ (restrict_capacity (non_zeros)),
+             filled1_ (1), filled2_ (0),
+             index1_data_ (layout_type::size_M (size1_, size2_) + 1), index2_data_ (capacity_), value_data_ (capacity_) {
+             index1_data_ [filled1_ - 1] = k_based (filled2_);
+@@ -2764,9 +2764,9 @@
+             return value_data_;
+         }
+         BOOST_UBLAS_INLINE
+-        void set_filled (const array_size_type& filled1, const array_size_type& filled2) {
+-            filled1_ = filled1;
+-            filled2_ = filled2;
++        void set_filled (const array_size_type& f1, const array_size_type& f2) {
++            filled1_ = f1;
++            filled2_ = f2;
+             storage_invariants ();
+         }
+         BOOST_UBLAS_INLINE
+@@ -2802,11 +2802,11 @@
+         }
+     public:
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool preserve = true) {
++        void resize (size_type s1, size_type s2, bool preserve = true) {
+             // FIXME preserve unimplemented
+             BOOST_UBLAS_CHECK (!preserve, internal_logic ());
+-            size1_ = size1;
+-            size2_ = size2;
++            size1_ = s1;
++            size2_ = s2;
+             capacity_ = restrict_capacity (capacity_);
+             filled1_ = 1;
+             filled2_ = 0;
+@@ -4045,9 +4045,9 @@
+             storage_invariants ();
+         }
+         BOOST_UBLAS_INLINE
+-        coordinate_matrix (size_type size1, size_type size2, array_size_type non_zeros = 0):
++        coordinate_matrix (size_type s1, size_type s2, array_size_type non_zeros = 0):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), capacity_ (restrict_capacity (non_zeros)),
++            size1_ (s1), size2_ (s2), capacity_ (restrict_capacity (non_zeros)),
+             filled_ (0), sorted_filled_ (filled_), sorted_ (true),
+             index1_data_ (capacity_), index2_data_ (capacity_), value_data_ (capacity_) {
+             storage_invariants ();
+@@ -4111,13 +4111,13 @@
+             return value_data_;
+         }
+         BOOST_UBLAS_INLINE
+-        void set_filled (const array_size_type &filled) {
++        void set_filled (const array_size_type &f) {
+             // Make sure that storage_invariants() succeeds
+-            if (sorted_ && filled < filled_)
+-                sorted_filled_ = filled;
++            if (sorted_ && f < filled_)
++                sorted_filled_ = f;
+             else
+-                sorted_ = (sorted_filled_ == filled);
+-            filled_ = filled;
++                sorted_ = (sorted_filled_ == f);
++            filled_ = f;
+             storage_invariants ();
+         }
+         BOOST_UBLAS_INLINE
+@@ -4144,11 +4144,11 @@
+         }
+     public:
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool preserve = true) {
++        void resize (size_type s1, size_type s2, bool preserve = true) {
+             // FIXME preserve unimplemented
+             BOOST_UBLAS_CHECK (!preserve, internal_logic ());
+-            size1_ = size1;
+-            size2_ = size2;
++            size1_ = s1;
++            size2_ = s2;
+             capacity_ = restrict_capacity (capacity_);
+             index1_data_.resize (capacity_);
+             index2_data_.resize (capacity_);
+@@ -4403,21 +4403,21 @@
+                 std::inplace_merge (ita.begin (), iunsorted, ita.end ());
+                 
+                 // sum duplicates with += and remove
+-                array_size_type filled = 0;
++                array_size_type f = 0;
+                 for (array_size_type i = 1; i < filled_; ++ i) {
+-                    if (index1_data_ [filled] != index1_data_ [i] ||
+-                        index2_data_ [filled] != index2_data_ [i]) {
+-                        ++ filled;
+-                        if (filled != i) {
+-                            index1_data_ [filled] = index1_data_ [i];
+-                            index2_data_ [filled] = index2_data_ [i];
+-                            value_data_ [filled] = value_data_ [i];
++                    if (index1_data_ [f] != index1_data_ [i] ||
++                        index2_data_ [f] != index2_data_ [i]) {
++                        ++ f;
++                        if (f != i) {
++                            index1_data_ [f] = index1_data_ [i];
++                            index2_data_ [f] = index2_data_ [i];
++                            value_data_ [f] = value_data_ [i];
+                         }
+                     } else {
+-                        value_data_ [filled] += value_data_ [i];
++                        value_data_ [f] += value_data_ [i];
+                     }
+                 }
+-                filled_ = filled + 1;
++                filled_ = f + 1;
+                 sorted_filled_ = filled_;
+                 sorted_ = true;
+                 storage_invariants ();
+diff -aruN a/boost/numeric/ublas/storage.hpp b/boost/numeric/ublas/storage.hpp
+--- a/boost/numeric/ublas/storage.hpp	2010-04-06 13:09:04.000000000 -0700
++++ b/boost/numeric/ublas/storage.hpp	2012-02-07 15:25:24.635307503 -0800
+@@ -62,8 +62,8 @@
+             data_ = 0;
+         }
+         explicit BOOST_UBLAS_INLINE
+-        unbounded_array (size_type size, const ALLOC &a = ALLOC()):
+-            alloc_(a), size_ (size) {
++        unbounded_array (size_type s, const ALLOC &a = ALLOC()):
++            alloc_(a), size_ (s) {
+           if (size_) {
+               data_ = alloc_.allocate (size_);
+               if (! detail::has_trivial_constructor<T>::value) {
+@@ -76,8 +76,8 @@
+         }
+         // No value initialised, but still be default constructed
+         BOOST_UBLAS_INLINE
+-        unbounded_array (size_type size, const value_type &init, const ALLOC &a = ALLOC()):
+-            alloc_ (a), size_ (size) {
++        unbounded_array (size_type s, const value_type &init, const ALLOC &a = ALLOC()):
++            alloc_ (a), size_ (s) {
+             if (size_) {
+                 data_ = alloc_.allocate (size_);
+                 std::uninitialized_fill (begin(), end(), init);
+@@ -113,33 +113,33 @@
+         // Resizing
+     private:
+         BOOST_UBLAS_INLINE
+-        void resize_internal (const size_type size, const value_type init, const bool preserve) {
+-            if (size != size_) {
++        void resize_internal (const size_type s, const value_type init, const bool preserve) {
++            if (s != size_) {
+                 pointer p_data = data_;
+-                if (size) {
+-                    data_ = alloc_.allocate (size);
++                if (s) {
++                    data_ = alloc_.allocate (s);
+                     if (preserve) {
+                         pointer si = p_data;
+                         pointer di = data_;
+-                        if (size < size_) {
+-                            for (; di != data_ + size; ++di) {
++                        if (s < size_) {
++                            for (; di != data_ + s; ++di) {
+                                 alloc_.construct (di, *si);
+                                 ++si;
+                             }
+                         }
+                         else {
+-                            for (pointer si = p_data; si != p_data + size_; ++si) {
+-                                alloc_.construct (di, *si);
++                            for (pointer si2 = p_data; si2 != p_data + size_; ++si) {
++                                alloc_.construct (di, *si2);
+                                 ++di;
+                             }
+-                            for (; di != data_ + size; ++di) {
++                            for (; di != data_ + s; ++di) {
+                                 alloc_.construct (di, init);
+                             }
+                         }
+                     }
+                     else {
+                         if (! detail::has_trivial_constructor<T>::value) {
+-                            for (pointer di = data_; di != data_ + size; ++di)
++                            for (pointer di = data_; di != data_ + s; ++di)
+                                 alloc_.construct (di, value_type());
+                         }
+                     }
+@@ -153,19 +153,19 @@
+                     alloc_.deallocate (p_data, size_);
+                 }
+ 
+-                if (!size)
++                if (!s)
+                     data_ = 0;
+-                size_ = size;
++                size_ = s;
+             }
+         }
+     public:
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size) {
+-            resize_internal (size, value_type (), false);
++        void resize (size_type s) {
++            resize_internal (s, value_type (), false);
+         }
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, value_type init) {
+-            resize_internal (size, init, true);
++        void resize (size_type s, value_type init) {
++            resize_internal (s, init, true);
+         }
+                     
+         // Random Access Container
+@@ -318,14 +318,14 @@
+             size_ (0) /*, data_ ()*/ {   // size 0 - use bounded_vector to default construct with size N
+         }
+         explicit BOOST_UBLAS_INLINE
+-        bounded_array (size_type size):
+-            size_ (size) /*, data_ ()*/ {
++        bounded_array (size_type s):
++            size_ (s) /*, data_ ()*/ {
+             BOOST_UBLAS_CHECK (size_ <= N, bad_size ());
+             // data_ (an array) elements are already default constructed
+         }
+         BOOST_UBLAS_INLINE
+-        bounded_array (size_type size, const value_type &init):
+-            size_ (size) /*, data_ ()*/ {
++        bounded_array (size_type s, const value_type &init):
++            size_ (s) /*, data_ ()*/ {
+             BOOST_UBLAS_CHECK (size_ <= N, bad_size ());
+             // ISSUE elements should be value constructed here, but we must fill instead as already default constructed
+             std::fill (begin(), end(), init) ;
+@@ -339,16 +339,16 @@
+         
+         // Resizing
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size) {
+-            BOOST_UBLAS_CHECK (size <= N, bad_size ());
+-            size_ = size;
++        void resize (size_type s) {
++            BOOST_UBLAS_CHECK (s <= N, bad_size ());
++            size_ = s;
+         }
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, value_type init) {
+-            BOOST_UBLAS_CHECK (size <= N, bad_size ());
+-            if (size > size_)
+-                std::fill (data_ + size_, data_ + size, init);
+-            size_ = size;
++        void resize (size_type s, value_type init) {
++            BOOST_UBLAS_CHECK (s <= N, bad_size ());
++            if (s > size_)
++                std::fill (data_ + size_, data_ + s, init);
++            size_ = s;
+         }
+ 
+         // Random Access Container
+@@ -489,17 +489,17 @@
+             size_ (0), own_ (true), data_ (new value_type [0]) {
+         }
+         explicit BOOST_UBLAS_INLINE
+-        array_adaptor (size_type size):
+-            size_ (size), own_ (true), data_ (new value_type [size]) {
++        array_adaptor (size_type s):
++            size_ (s), own_ (true), data_ (new value_type [s]) {
+         }
+         BOOST_UBLAS_INLINE
+-        array_adaptor (size_type size, const value_type &init):
+-            size_ (size), own_ (true), data_ (new value_type [size]) {
++        array_adaptor (size_type s, const value_type &init):
++            size_ (s), own_ (true), data_ (new value_type [s]) {
+             std::fill (data_, data_ + size_, init);
+         }
+         BOOST_UBLAS_INLINE
+-        array_adaptor (size_type size, pointer data):
+-            size_ (size), own_ (false), data_ (data) {}
++        array_adaptor (size_type s, pointer d):
++            size_ (s), own_ (false), data_ (d) {}
+         BOOST_UBLAS_INLINE
+         array_adaptor (const array_adaptor &a):
+             storage_array<self_type> (),
+@@ -516,26 +516,26 @@
+         // Resizing
+     private:
+         BOOST_UBLAS_INLINE
+-        void resize_internal (size_type size, value_type init, bool preserve = true) {
+-           if (size != size_) {
+-                pointer data = new value_type [size];
++        void resize_internal (size_type s, value_type init, bool preserve = true) {
++           if (s != size_) {
++                pointer data = new value_type [s];
+                 if (preserve) {
+-                    std::copy (data_, data_ + (std::min) (size, size_), data);
+-                    std::fill (data + (std::min) (size, size_), data + size, init);
++                    std::copy (data_, data_ + (std::min) (s, size_), data);
++                    std::fill (data + (std::min) (s, size_), data + s, init);
+                 }
+                 if (own_)
+                     delete [] data_;
+-                size_ = size;
++                size_ = s;
+                 own_ = true;
+                 data_ = data;
+             }
+         }
+         BOOST_UBLAS_INLINE
+-        void resize_internal (size_type size, pointer data, value_type init, bool preserve = true) {
++        void resize_internal (size_type s, pointer data, value_type init, bool preserve = true) {
+             if (data != data_) {
+                 if (preserve) {
+-                    std::copy (data_, data_ + (std::min) (size, size_), data);
+-                    std::fill (data + (std::min) (size, size_), data + size, init);
++                    std::copy (data_, data_ + (std::min) (s, size_), data);
++                    std::fill (data + (std::min) (s, size_), data + s, init);
+                 }
+                 if (own_)
+                     delete [] data_;
+@@ -543,26 +543,26 @@
+                 data_ = data;
+             }
+             else {
+-                std::fill (data + (std::min) (size, size_), data + size, init);
++                std::fill (data + (std::min) (s, size_), data + s, init);
+             }
+-            size_ = size;
++            size_ = s;
+         }
+     public:
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size) {
+-            resize_internal (size, value_type (), false);
++        void resize (size_type s) {
++            resize_internal (s, value_type (), false);
+         }
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, value_type init) {
+-            resize_internal (size, init, true);
++        void resize (size_type s, value_type init) {
++            resize_internal (s, init, true);
+         }
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, pointer data) {
+-            resize_internal (size, data, value_type (), false);
++        void resize (size_type s, pointer data) {
++            resize_internal (s, data, value_type (), false);
+         }
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, pointer data, value_type init) {
+-            resize_internal (size, data, init, true);
++        void resize (size_type s, pointer data, value_type init) {
++            resize_internal (s, data, init, true);
+         }
+ 
+         BOOST_UBLAS_INLINE
+@@ -882,9 +882,9 @@
+         basic_range ():
+             start_ (0), size_ (0) {}
+         BOOST_UBLAS_INLINE
+-        basic_range (size_type start, size_type stop):
+-            start_ (start), size_ (stop - start) {
+-            BOOST_UBLAS_CHECK (start_ <= stop, bad_index ());
++        basic_range (size_type in_start, size_type in_stop):
++            start_ (in_start), size_ (in_stop - in_start) {
++            BOOST_UBLAS_CHECK (start_ <= in_stop, bad_index ());
+         }
+ 
+         BOOST_UBLAS_INLINE
+@@ -1055,10 +1055,10 @@
+         }
+ 
+         BOOST_UBLAS_INLINE
+-        basic_range preprocess (size_type size) const {
++        basic_range preprocess (size_type s) const {
+             if (this != &all_)
+                 return *this;
+-            return basic_range (0, size);
++            return basic_range (0, s);
+         }
+         static
+         BOOST_UBLAS_INLINE
+@@ -1094,8 +1094,8 @@
+         basic_slice ():
+             start_ (0), stride_ (0), size_ (0) {}
+         BOOST_UBLAS_INLINE
+-        basic_slice (size_type start, difference_type stride, size_type size):
+-            start_ (start), stride_ (stride), size_ (size) {}
++        basic_slice (size_type in_start, difference_type in_stride, size_type in_size):
++            start_ (in_start), stride_ (in_stride), size_ (in_size) {}
+ 
+         BOOST_UBLAS_INLINE
+         size_type start () const {
+@@ -1274,10 +1274,10 @@
+         }
+ 
+         BOOST_UBLAS_INLINE
+-        basic_slice preprocess (size_type size) const {
++        basic_slice preprocess (size_type s) const {
+             if (this != &all_)
+                 return *this;
+-            return basic_slice (0, 1, size);
++            return basic_slice (0, 1, s);
+         }
+         static
+         BOOST_UBLAS_INLINE
+@@ -1316,11 +1316,11 @@
+         indirect_array ():
+             size_ (), data_ () {}
+         explicit BOOST_UBLAS_INLINE
+-        indirect_array (size_type size):
+-            size_ (size), data_ (size) {}
++        indirect_array (size_type s):
++            size_ (s), data_ (s) {}
+         BOOST_UBLAS_INLINE
+-        indirect_array (size_type size, const array_type &data):
+-            size_ (size), data_ (data) {}
++        indirect_array (size_type s, const array_type &d):
++            size_ (s), data_ (d) {}
+         BOOST_UBLAS_INLINE
+         indirect_array (pointer start, pointer stop):
+             size_ (stop - start), data_ (stop - start) {
+@@ -1376,27 +1376,27 @@
+         BOOST_UBLAS_INLINE
+         indirect_array compose (const basic_range<size_type, difference_type> &r) const {
+             BOOST_UBLAS_CHECK (r.start () + r.size () <= size_, bad_size ());
+-            array_type data (r.size ());
++            array_type local_data (r.size ());
+             for (size_type i = 0; i < r.size (); ++ i)
+-                data [i] = data_ [r.start () + i];
+-            return indirect_array (r.size (), data);
++                local_data [i] = data_ [r.start () + i];
++            return indirect_array (r.size (), local_data);
+         }
+         BOOST_UBLAS_INLINE
+         indirect_array compose (const basic_slice<size_type, difference_type> &s) const {
+             BOOST_UBLAS_CHECK (s.start () + s.stride () * (s.size () - (s.size () > 0)) <= size (), bad_size ());
+-            array_type data (s.size ());
++            array_type local_data (s.size ());
+             for (size_type i = 0; i < s.size (); ++ i)
+-                data [i] = data_ [s.start () + s.stride () * i];
+-            return indirect_array (s.size (), data);
++                local_data [i] = data_ [s.start () + s.stride () * i];
++            return indirect_array (s.size (), local_data);
+         }
+         BOOST_UBLAS_INLINE
+         indirect_array compose (const indirect_array &ia) const {
+-            array_type data (ia.size_);
++            array_type local_data (ia.size_);
+             for (size_type i = 0; i < ia.size_; ++ i) {
+                 BOOST_UBLAS_CHECK (ia.data_ [i] <= size_, bad_size ());
+-                data [i] = data_ [ia.data_ [i]];
++                local_data [i] = data_ [ia.data_ [i]];
+             }
+-            return indirect_array (ia.size_, data);
++            return indirect_array (ia.size_, local_data);
+         }
+ 
+         // Comparison
+@@ -1534,11 +1534,11 @@
+         }
+ 
+         BOOST_UBLAS_INLINE
+-        indirect_array preprocess (size_type size) const {
++        indirect_array preprocess (size_type s) const {
+             if (this != &all_)
+                 return *this;
+-            indirect_array ia (size);
+-            for (size_type i = 0; i < size; ++ i)
++            indirect_array ia (s);
++            for (size_type i = 0; i < s; ++ i)
+                ia (i) = i;
+             return ia;
+         }
+@@ -1666,8 +1666,8 @@
+         typedef const value_type const_reference;
+ 
+         BOOST_UBLAS_INLINE
+-        index_pair_array(size_type size, V1& data1, V2& data2) :
+-              size_(size),data1_(data1),data2_(data2) {}
++        index_pair_array(size_type s, V1& data1, V2& data2) :
++              size_(s),data1_(data1),data2_(data2) {}
+ 
+         BOOST_UBLAS_INLINE
+         size_type size() const {
+@@ -1841,8 +1841,8 @@
+         typedef const value_type const_reference;
+ 
+         BOOST_UBLAS_INLINE
+-        index_triple_array(size_type size, V1& data1, V2& data2, V3& data3) :
+-              size_(size),data1_(data1),data2_(data2),data3_(data3) {}
++        index_triple_array(size_type s, V1& data1, V2& data2, V3& data3) :
++              size_(s),data1_(data1),data2_(data2),data3_(data3) {}
+ 
+         BOOST_UBLAS_INLINE
+         size_type size() const {
+diff -aruN a/boost/numeric/ublas/storage_sparse.hpp b/boost/numeric/ublas/storage_sparse.hpp
+--- a/boost/numeric/ublas/storage_sparse.hpp	2009-03-09 13:24:11.000000000 -0700
++++ b/boost/numeric/ublas/storage_sparse.hpp	2012-02-07 15:25:24.635307503 -0800
+@@ -263,38 +263,38 @@
+     private:
+         // Resizing - implicitly exposses uninitialized (but default constructed) mapped_type
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size) {
++        void resize (size_type s) {
+             BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
+-            if (size > capacity_) {
+-                const size_type capacity = size << 1;
+-                BOOST_UBLAS_CHECK (capacity, internal_logic ());
+-                pointer data = alloc_.allocate (capacity);
+-                std::uninitialized_copy (data_, data_ + (std::min) (size, size_), data);
+-                std::uninitialized_fill (data + (std::min) (size, size_), data + capacity, value_type ());
++            if (s > capacity_) {
++                const size_type cap = s << 1;
++                BOOST_UBLAS_CHECK (cap, internal_logic ());
++                pointer data = alloc_.allocate (cap);
++                std::uninitialized_copy (data_, data_ + (std::min) (s, size_), data);
++                std::uninitialized_fill (data + (std::min) (s, size_), data + cap, value_type ());
+ 
+                 if (capacity_) {
+                     std::for_each (data_, data_ + capacity_, static_destroy);
+                     alloc_.deallocate (data_, capacity_);
+                 }
+-                capacity_ = capacity;
++                capacity_ = cap;
+                 data_ = data;
+             }
+-            size_ = size;
++            size_ = s;
+             BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
+         }
+     public:
+ 
+         // Reserving
+         BOOST_UBLAS_INLINE
+-        void reserve (size_type capacity) {
++        void reserve (size_type cap) {
+             BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
+             // Reduce capacity_ if size_ allows
+-            BOOST_UBLAS_CHECK (capacity >= size_, bad_size ());
++            BOOST_UBLAS_CHECK (cap >= size_, bad_size ());
+             pointer data;
+-            if (capacity) {
+-                data = alloc_.allocate (capacity);
++            if (cap) {
++                data = alloc_.allocate (cap);
+                 std::uninitialized_copy (data_, data_ + size_, data);
+-                std::uninitialized_fill (data + size_, data + capacity, value_type ());
++                std::uninitialized_fill (data + size_, data + cap, value_type ());
+             }
+             else
+                 data = 0;
+@@ -303,7 +303,7 @@
+                 std::for_each (data_, data_ + capacity_, static_destroy);
+                 alloc_.deallocate (data_, capacity_);
+             }
+-            capacity_ = capacity;
++            capacity_ = cap;
+             data_ = data;
+             BOOST_UBLAS_CHECK (size_ <= capacity_, internal_logic ());
+         }
+diff -aruN a/boost/numeric/ublas/symmetric.hpp b/boost/numeric/ublas/symmetric.hpp
+--- a/boost/numeric/ublas/symmetric.hpp	2009-10-06 16:53:19.000000000 -0700
++++ b/boost/numeric/ublas/symmetric.hpp	2012-02-07 15:25:24.635307503 -0800
+@@ -76,14 +76,14 @@
+             size_ (BOOST_UBLAS_SAME (size, size)), data_ (triangular_type::packed_size (layout_type (), size, size)) {
+         }
+         BOOST_UBLAS_INLINE
+-        symmetric_matrix (size_type size1, size_type size2):
++        symmetric_matrix (size_type s1, size_type s2):
+             matrix_container<self_type> (),
+-            size_ (BOOST_UBLAS_SAME (size1, size2)), data_ (triangular_type::packed_size (layout_type (), size1, size2)) {
++            size_ (BOOST_UBLAS_SAME (s1, s2)), data_ (triangular_type::packed_size (layout_type (), s1, s2)) {
+         }
+         BOOST_UBLAS_INLINE
+-        symmetric_matrix (size_type size, const array_type &data):
++        symmetric_matrix (size_type size, const array_type &d):
+             matrix_container<self_type> (),
+-            size_ (size), data_ (data) {}
++            size_ (size), data_ (d) {}
+         BOOST_UBLAS_INLINE
+         symmetric_matrix (const symmetric_matrix &m):
+             matrix_container<self_type> (),
+@@ -130,8 +130,8 @@
+             }
+         }
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool preserve = true) {
+-            resize (BOOST_UBLAS_SAME (size1, size2), preserve);
++        void resize (size_type s1, size_type s2, bool preserve = true) {
++            resize (BOOST_UBLAS_SAME (s1, s2), preserve);
+         }
+         BOOST_UBLAS_INLINE
+         void resize_packed_preserve (size_type size) {
+@@ -944,9 +944,9 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        symmetric_adaptor (matrix_type &data):
++        symmetric_adaptor (matrix_type &d):
+             matrix_expression<self_type> (),
+-            data_ (data) {
++            data_ (d) {
+             BOOST_UBLAS_CHECK (data_.size1 () == data_.size2 (), bad_size ());
+         }
+         BOOST_UBLAS_INLINE
+@@ -1201,11 +1201,11 @@
+                 it1_begin_ (), it1_end_ (), it1_ (),
+                 it2_begin_ (), it2_end_ (), it2_ () {}
+             BOOST_UBLAS_INLINE
+-            const_iterator1 (const self_type &m, int begin, int end,
++            const_iterator1 (const self_type &m, int b, int e,
+                              const const_subiterator1_type &it1_begin, const const_subiterator1_type &it1_end,
+                              const const_subiterator2_type &it2_begin, const const_subiterator2_type &it2_end):
+                 container_const_reference<self_type> (m),
+-                begin_ (begin), end_ (end), current_ (begin),
++                begin_ (b), end_ (e), current_ (b),
+                 it1_begin_ (it1_begin), it1_end_ (it1_end), it1_ (it1_begin_),
+                 it2_begin_ (it2_begin), it2_end_ (it2_end), it2_ (it2_begin_) {
+                 if (current_ == 0 && it1_ == it1_end_)
+@@ -1648,11 +1648,11 @@
+                 it1_begin_ (), it1_end_ (), it1_ (),
+                 it2_begin_ (), it2_end_ (), it2_ () {}
+             BOOST_UBLAS_INLINE
+-            const_iterator2 (const self_type &m, int begin, int end,
++            const_iterator2 (const self_type &m, int b, int e,
+                              const const_subiterator1_type &it1_begin, const const_subiterator1_type &it1_end,
+                              const const_subiterator2_type &it2_begin, const const_subiterator2_type &it2_end):
+                 container_const_reference<self_type> (m),
+-                begin_ (begin), end_ (end), current_ (begin),
++                begin_ (b), end_ (e), current_ (b),
+                 it1_begin_ (it1_begin), it1_end_ (it1_end), it1_ (it1_begin_),
+                 it2_begin_ (it2_begin), it2_end_ (it2_end), it2_ (it2_begin_) {
+                 if (current_ == 0 && it1_ == it1_end_)
+diff -aruN a/boost/numeric/ublas/triangular.hpp b/boost/numeric/ublas/triangular.hpp
+--- a/boost/numeric/ublas/triangular.hpp	2010-07-04 23:06:24.000000000 -0700
++++ b/boost/numeric/ublas/triangular.hpp	2012-02-07 15:25:24.639286239 -0800
+@@ -106,14 +106,14 @@
+             matrix_container<self_type> (),
+             size1_ (0), size2_ (0), data_ (0) {}
+         BOOST_UBLAS_INLINE
+-        triangular_matrix (size_type size1, size_type size2):
++        triangular_matrix (size_type s1, size_type s2):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), data_ (triangular_type::packed_size (layout_type (), size1, size2)) {
++            size1_ (s1), size2_ (s2), data_ (triangular_type::packed_size (layout_type (), s1, s2)) {
+         }
+         BOOST_UBLAS_INLINE
+-        triangular_matrix (size_type size1, size_type size2, const array_type &data):
++        triangular_matrix (size_type s1, size_type s2, const array_type &d):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), data_ (data) {}
++            size1_ (s1), size2_ (s2), data_ (d) {}
+         BOOST_UBLAS_INLINE
+         triangular_matrix (const triangular_matrix &m):
+             matrix_container<self_type> (),
+@@ -149,21 +149,21 @@
+ 
+         // Resizing
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool preserve = true) {
++        void resize (size_type s1, size_type s2, bool preserve = true) {
+             if (preserve) {
+-                self_type temporary (size1, size2);
++                self_type temporary (s1, s2);
+                 detail::matrix_resize_preserve<layout_type, triangular_type> (*this, temporary);
+             }
+             else {
+-                data ().resize (triangular_type::packed_size (layout_type (), size1, size2));
+-                size1_ = size1;
+-                size2_ = size2;
++                data ().resize (triangular_type::packed_size (layout_type (), s1, s2));
++                size1_ = s1;
++                size2_ = s2;
+             }
+         }
+         BOOST_UBLAS_INLINE
+-        void resize_packed_preserve (size_type size1, size_type size2) {
+-            size1_ = size1;
+-            size2_ = size2;
++        void resize_packed_preserve (size_type s1, size_type s2) {
++            size1_ = s1;
++            size2_ = s2;
+             data ().resize (triangular_type::packed_size (layout_type (), size1_, size2_), value_type ());
+         }
+ 
+@@ -996,9 +996,9 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        triangular_adaptor (matrix_type &data):
++        triangular_adaptor (matrix_type &d):
+             matrix_expression<self_type> (),
+-            data_ (data) {}
++            data_ (d) {}
+         BOOST_UBLAS_INLINE
+         triangular_adaptor (const triangular_adaptor &m):
+             matrix_expression<self_type> (),
+diff -aruN a/boost/numeric/ublas/vector.hpp b/boost/numeric/ublas/vector.hpp
+--- a/boost/numeric/ublas/vector.hpp	2010-07-04 23:06:24.000000000 -0700
++++ b/boost/numeric/ublas/vector.hpp	2012-02-07 15:25:24.639286239 -0800
+@@ -72,9 +72,9 @@
+ 	/// By default, its elements are initialized to 0.
+ 	/// \param size initial size of the vector
+         explicit BOOST_UBLAS_INLINE
+-        vector (size_type size):
++        vector (size_type s):
+             vector_container<self_type> (),
+-            data_ (size) {
++            data_ (s) {
+         }
+ 
+ 	/// \brief Constructor of a vector by copying from another container
+@@ -83,25 +83,25 @@
+ 	/// \param data container of type \c A
+ 	/// \todo remove this definition because \c size is not used
+         BOOST_UBLAS_INLINE
+-        vector (size_type size, const array_type &data):
++        vector (size_type s, const array_type &d):
+             vector_container<self_type> (),
+-            data_ (data) {}
++            data_ (d) {}
+ 
+ 	/// \brief Constructor of a vector by copying from another container
+ 	/// This type has the generic name \c array_typ within the vector definition.
+ 	/// \param data container of type \c A
+         BOOST_UBLAS_INLINE
+-        vector (const array_type &data):
++        vector (const array_type &d):
+             vector_container<self_type> (),
+-            data_ (data) {}
++            data_ (d) {}
+ 
+ 	/// \brief Constructor of a vector with a predefined size and a unique initial value
+ 	/// \param size of the vector
+ 	/// \param init value to assign to each element of the vector
+         BOOST_UBLAS_INLINE
+-        vector (size_type size, const value_type &init):
++        vector (size_type s, const value_type &init):
+             vector_container<self_type> (),
+-            data_ (size, init) {}
++            data_ (s, init) {}
+ 
+ 	/// \brief Copy-constructor of a vector
+ 	/// \param v is the vector to be duplicated
+@@ -175,11 +175,11 @@
+ 	/// \param size new size of the vector
+ 	/// \param preserve if true, keep values
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, bool preserve = true) {
++        void resize (size_type s, bool preserve = true) {
+             if (preserve)
+-                data ().resize (size, typename A::value_type ());
++                data ().resize (s, typename A::value_type ());
+             else
+-                data ().resize (size);
++                data ().resize (s);
+         }
+ 
+ 	// ---------------
+@@ -900,9 +900,9 @@
+             vector_container<self_type> (),
+             size_ (0) {}
+         explicit BOOST_UBLAS_INLINE
+-        zero_vector (size_type size):
++        zero_vector (size_type s):
+             vector_container<self_type> (),
+-            size_ (size) {}
++            size_ (s) {}
+         BOOST_UBLAS_INLINE
+         zero_vector (const zero_vector &v):
+             vector_container<self_type> (),
+@@ -916,8 +916,8 @@
+ 
+         // Resizing
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, bool /*preserve*/ = true) {
+-            size_ = size;
++        void resize (size_type s, bool /*preserve*/ = true) {
++            size_ = s;
+         }
+ 
+         // Element support
+@@ -1110,9 +1110,9 @@
+ 	/// \param size is the dimension of the vector
+ 	/// \param index is the order of the vector
+         BOOST_UBLAS_INLINE
+-        explicit unit_vector (size_type size, size_type index = 0):
++        explicit unit_vector (size_type s, size_type i = 0):
+             vector_container<self_type> (),
+-            size_ (size), index_ (index) {}
++            size_ (s), index_ (i) {}
+ 
+ 	/// \brief Copy-constructor
+         BOOST_UBLAS_INLINE
+@@ -1141,8 +1141,8 @@
+ 	/// \brief Resize the vector. The values are preserved by default (i.e. the index does not change)
+ 	/// \param size is the new size of the vector
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, bool /*preserve*/ = true) {
+-            size_ = size;
++        void resize (size_type s, bool /*preserve*/ = true) {
++            size_ = s;
+         }
+ 
+         // Element support
+@@ -1352,9 +1352,9 @@
+             vector_container<self_type> (),
+             size_ (0), value_ () {}
+         BOOST_UBLAS_INLINE
+-        explicit scalar_vector (size_type size, const value_type &value = value_type(1)):
++        explicit scalar_vector (size_type s, const value_type &value = value_type(1)):
+             vector_container<self_type> (),
+-            size_ (size), value_ (value) {}
++            size_ (s), value_ (value) {}
+         BOOST_UBLAS_INLINE
+         scalar_vector (const scalar_vector &v):
+             vector_container<self_type> (),
+@@ -1368,8 +1368,8 @@
+ 
+         // Resizing
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, bool /*preserve*/ = true) {
+-            size_ = size;
++        void resize (size_type s, bool /*preserve*/ = true) {
++            size_ = s;
+         }
+ 
+         // Element support
+@@ -1594,8 +1594,8 @@
+         c_vector ():
+             size_ (N) /* , data_ () */ {}
+         explicit BOOST_UBLAS_INLINE
+-        c_vector (size_type size):
+-            size_ (size) /* , data_ () */ {
++        c_vector (size_type s):
++            size_ (s) /* , data_ () */ {
+             if (size_ > N)
+                 bad_size ().raise ();
+         }
+@@ -1631,10 +1631,10 @@
+ 
+         // Resizing
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, bool preserve = true) {
+-            if (size > N)
++        void resize (size_type s, bool preserve = true) {
++            if (s > N)
+                 bad_size ().raise ();
+-            size_ = size;
++            size_ = s;
+         }
+ 
+         // Element support
+diff -aruN a/boost/numeric/ublas/vector_of_vector.hpp b/boost/numeric/ublas/vector_of_vector.hpp
+--- a/boost/numeric/ublas/vector_of_vector.hpp	2007-11-25 10:07:19.000000000 -0800
++++ b/boost/numeric/ublas/vector_of_vector.hpp	2012-02-07 15:25:24.639286239 -0800
+@@ -66,9 +66,9 @@
+             storage_invariants ();
+         }
+         BOOST_UBLAS_INLINE
+-        generalized_vector_of_vector (size_type size1, size_type size2, size_type non_zeros = 0):
++        generalized_vector_of_vector (size_type s1, size_type s2, size_type non_zeros = 0):
+             matrix_container<self_type> (),
+-            size1_ (size1), size2_ (size2), data_ (layout_type::size_M (size1_, size2_) + 1) {
++            size1_ (s1), size2_ (s2), data_ (layout_type::size_M (size1_, size2_) + 1) {
+             const size_type sizeM = layout_type::size_M (size1_, size2_);
+             const size_type sizem = layout_type::size_m (size1_, size2_);
+             for (size_type i = 0; i < sizeM; ++ i) // create size1 vector elements
+@@ -132,10 +132,10 @@
+ 
+         // Resizing
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size1, size_type size2, bool preserve = true) {
++        void resize (size_type s1, size_type s2, bool preserve = true) {
+             const size_type oldM = layout_type::size_M (size1_, size2_);
+-            size1_ = size1;
+-            size2_ = size2;
++            size1_ = s1;
++            size2_ = s2;
+             const size_type sizeM = layout_type::size_M (size1_, size2_);
+             const size_type sizem = layout_type::size_m (size1_, size2_);
+             data ().resize (sizeM + 1, preserve);
+diff -aruN a/boost/numeric/ublas/vector_proxy.hpp b/boost/numeric/ublas/vector_proxy.hpp
+--- a/boost/numeric/ublas/vector_proxy.hpp	2010-07-04 23:06:24.000000000 -0700
++++ b/boost/numeric/ublas/vector_proxy.hpp	2012-02-07 15:25:24.639286239 -0800
+@@ -59,15 +59,15 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        vector_range (vector_type &data, const range_type &r):
+-            data_ (data), r_ (r.preprocess (data.size ())) {
++        vector_range (vector_type &d, const range_type &r):
++            data_ (d), r_ (r.preprocess (d.size ())) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (r_.start () <= data_.size () &&
+             //                   r_.start () + r_.size () <= data_.size (), bad_index ());
+         }
+         BOOST_UBLAS_INLINE
+-        vector_range (const vector_closure_type &data, const range_type &r, bool):
+-            data_ (data), r_ (r.preprocess (data.size ())) {
++        vector_range (const vector_closure_type &d, const range_type &r, bool):
++            data_ (d), r_ (r.preprocess (d.size ())) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (r_.start () <= data_.size () &&
+             //                    r_.start () + r_.size () <= data_.size (), bad_index ());
+@@ -614,15 +614,15 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        vector_slice (vector_type &data, const slice_type &s):
+-            data_ (data), s_ (s.preprocess (data.size ())) {
++        vector_slice (vector_type &d, const slice_type &s):
++            data_ (d), s_ (s.preprocess (d.size ())) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (s_.start () <= data_.size () &&
+             //                    s_.start () + s_.stride () * (s_.size () - (s_.size () > 0)) <= data_.size (), bad_index ());
+         }
+         BOOST_UBLAS_INLINE
+-        vector_slice (const vector_closure_type &data, const slice_type &s, int):
+-            data_ (data), s_ (s.preprocess (data.size ())) {
++        vector_slice (const vector_closure_type &d, const slice_type &s, int):
++            data_ (d), s_ (s.preprocess (d.size ())) {
+             // Early checking of preconditions here.
+             // BOOST_UBLAS_CHECK (s_.start () <= data_.size () &&
+             //                    s_.start () + s_.stride () * (s_.size () - (s_.size () > 0)) <= data_.size (), bad_index ());
+@@ -1159,14 +1159,14 @@
+ 
+         // Construction and destruction
+         BOOST_UBLAS_INLINE
+-        vector_indirect (vector_type &data, size_type size):
+-            data_ (data), ia_ (size) {}
++        vector_indirect (vector_type &d, size_type s):
++            data_ (d), ia_ (s) {}
+         BOOST_UBLAS_INLINE
+-        vector_indirect (vector_type &data, const indirect_array_type &ia):
+-            data_ (data), ia_ (ia.preprocess (data.size ())) {}
++        vector_indirect (vector_type &d, const indirect_array_type &ia):
++            data_ (d), ia_ (ia.preprocess (d.size ())) {}
+         BOOST_UBLAS_INLINE
+-        vector_indirect (const vector_closure_type &data, const indirect_array_type &ia, int):
+-            data_ (data), ia_ (ia.preprocess (data.size ())) {}
++        vector_indirect (const vector_closure_type &d, const indirect_array_type &ia, int):
++            data_ (d), ia_ (ia.preprocess (d.size ())) {}
+ 
+         // Accessors
+         BOOST_UBLAS_INLINE
+diff -aruN a/boost/numeric/ublas/vector_sparse.hpp b/boost/numeric/ublas/vector_sparse.hpp
+--- a/boost/numeric/ublas/vector_sparse.hpp	2010-07-04 23:06:24.000000000 -0700
++++ b/boost/numeric/ublas/vector_sparse.hpp	2012-02-07 15:25:24.639286239 -0800
+@@ -309,9 +309,9 @@
+             vector_container<self_type> (),
+             size_ (0), data_ () {}
+         BOOST_UBLAS_INLINE
+-        mapped_vector (size_type size, size_type non_zeros = 0):
++        mapped_vector (size_type s, size_type non_zeros = 0):
+             vector_container<self_type> (),
+-            size_ (size), data_ () {
++            size_ (s), data_ () {
+             detail::map_reserve (data(), restrict_capacity (non_zeros));
+         }
+         BOOST_UBLAS_INLINE
+@@ -360,8 +360,8 @@
+         }
+     public:
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, bool preserve = true) {
+-            size_ = size;
++        void resize (size_type s, bool preserve = true) {
++            size_ = s;
+             if (preserve) {
+                 data ().erase (data ().lower_bound(size_), data ().end());
+             }
+@@ -832,9 +832,9 @@
+             storage_invariants ();
+         }
+         explicit BOOST_UBLAS_INLINE
+-        compressed_vector (size_type size, size_type non_zeros = 0):
++        compressed_vector (size_type s, size_type non_zeros = 0):
+             vector_container<self_type> (),
+-            size_ (size), capacity_ (restrict_capacity (non_zeros)), filled_ (0),
++            size_ (s), capacity_ (restrict_capacity (non_zeros)), filled_ (0),
+             index_data_ (capacity_), value_data_ (capacity_) {
+         storage_invariants ();
+         }
+@@ -887,8 +887,8 @@
+             return value_data_;
+         }
+         BOOST_UBLAS_INLINE
+-        void set_filled (const typename index_array_type::size_type & filled) {
+-            filled_ = filled;
++        void set_filled (const typename index_array_type::size_type & f) {
++            filled_ = f;
+             storage_invariants ();
+         }
+         BOOST_UBLAS_INLINE
+@@ -910,14 +910,14 @@
+         }
+     public:
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, bool preserve = true) {
+-            size_ = size;
++        void resize (size_type s, bool preserve = true) {
++            size_ = s;
+             capacity_ = restrict_capacity (capacity_);
+             if (preserve) {
+                 index_data_. resize (capacity_, size_type ());
+                 value_data_. resize (capacity_, value_type ());
+                 filled_ = (std::min) (capacity_, filled_);
+-                while ((filled_ > 0) && (zero_based(index_data_[filled_ - 1]) >= size)) {
++                while ((filled_ > 0) && (zero_based(index_data_[filled_ - 1]) >= s)) {
+                     --filled_;
+                 }
+             }
+@@ -1473,9 +1473,9 @@
+             storage_invariants ();
+         }
+         explicit BOOST_UBLAS_INLINE
+-        coordinate_vector (size_type size, size_type non_zeros = 0):
++        coordinate_vector (size_type s, size_type non_zeros = 0):
+             vector_container<self_type> (),
+-            size_ (size), capacity_ (restrict_capacity (non_zeros)),
++            size_ (s), capacity_ (restrict_capacity (non_zeros)),
+             filled_ (0), sorted_filled_ (filled_), sorted_ (true),
+             index_data_ (capacity_), value_data_ (capacity_) {
+             storage_invariants ();
+@@ -1531,9 +1531,9 @@
+             return value_data_;
+         }
+         BOOST_UBLAS_INLINE
+-        void set_filled (const typename index_array_type::size_type &sorted, const typename index_array_type::size_type &filled) {
++        void set_filled (const typename index_array_type::size_type &sorted, const typename index_array_type::size_type &f) {
+             sorted_filled_ = sorted;
+-            filled_ = filled;
++            filled_ = f;
+             storage_invariants ();
+         }
+         BOOST_UBLAS_INLINE
+@@ -1556,16 +1556,16 @@
+         }
+     public:
+         BOOST_UBLAS_INLINE
+-        void resize (size_type size, bool preserve = true) {
++        void resize (size_type s, bool preserve = true) {
+             if (preserve)
+                 sort ();    // remove duplicate elements.
+-            size_ = size;
++            size_ = s;
+             capacity_ = restrict_capacity (capacity_);
+             if (preserve) {
+                 index_data_. resize (capacity_, size_type ());
+                 value_data_. resize (capacity_, value_type ());
+                 filled_ = (std::min) (capacity_, filled_);
+-                while ((filled_ > 0) && (zero_based(index_data_[filled_ - 1]) >= size)) {
++                while ((filled_ > 0) && (zero_based(index_data_[filled_ - 1]) >= s)) {
+                     --filled_;
+                 }
+             }
+@@ -1813,19 +1813,19 @@
+                 std::inplace_merge (ipa.begin (), iunsorted, ipa.end ());
+ 
+                 // sum duplicates with += and remove
+-                size_type filled = 0;
++                size_type f = 0;
+                 for (size_type i = 1; i < filled_; ++ i) {
+-                    if (index_data_ [filled] != index_data_ [i]) {
+-                        ++ filled;
+-                        if (filled != i) {
+-                            index_data_ [filled] = index_data_ [i];
+-                            value_data_ [filled] = value_data_ [i];
++                    if (index_data_ [f] != index_data_ [i]) {
++                        ++ f;
++                        if (f != i) {
++                            index_data_ [f] = index_data_ [i];
++                            value_data_ [f] = value_data_ [i];
+                         }
+                     } else {
+-                        value_data_ [filled] += value_data_ [i];
++                        value_data_ [f] += value_data_ [i];
+                     }
+                 }
+-                filled_ = filled + 1;
++                filled_ = f + 1;
+                 sorted_filled_ = filled_;
+                 sorted_ = true;
+                 storage_invariants ();
diff --git a/boost.patches/boost-53.description b/boost.patches/boost-53.description
new file mode 100644
index 0000000..a8c9afd
--- /dev/null
+++ b/boost.patches/boost-53.description
@@ -0,0 +1,3 @@
+Fix compiler warnings triggered by -Wunused-local-typedefs.  Some of this was taken
+from here https://svn.boost.org/trac/boost/ticket/8546 and some was fixed by looking
+at the build log.
diff --git a/boost.patches/boost-53.patch b/boost.patches/boost-53.patch
new file mode 100644
index 0000000..552e5a2
--- /dev/null
+++ b/boost.patches/boost-53.patch
@@ -0,0 +1,158 @@
+diff -Naur a/boost/algorithm/string/detail/finder.hpp b/boost/algorithm/string/detail/finder.hpp
+--- a/boost/algorithm/string/detail/finder.hpp	2009-09-13 12:10:55.000000000 -0700
++++ b/boost/algorithm/string/detail/finder.hpp	2015-04-15 09:02:18.683944124 -0700
+@@ -142,7 +142,6 @@
+                     ForwardIteratorT End,
+                     std::forward_iterator_tag ) const
+                 {
+-                    typedef ForwardIteratorT input_iterator_type;
+                     typedef iterator_range<ForwardIteratorT> result_type;
+ 
+                     first_finder_type first_finder(
+@@ -263,7 +262,6 @@
+                     ForwardIteratorT End,
+                     unsigned int N) const
+                 {
+-                    typedef ForwardIteratorT input_iterator_type;
+                     typedef iterator_range<ForwardIteratorT> result_type;
+ 
+                     // Sanity check
+@@ -298,7 +296,6 @@
+                     ForwardIteratorT End,
+                     unsigned int N) const
+                 {
+-                    typedef ForwardIteratorT input_iterator_type;
+                     typedef iterator_range<ForwardIteratorT> result_type;
+ 
+                     // Sanity check
+@@ -362,7 +359,6 @@
+                 unsigned int N,
+                 std::random_access_iterator_tag )
+             {
+-                typedef ForwardIteratorT input_iterator_type;
+                 typedef iterator_range<ForwardIteratorT> result_type;
+ 
+                 if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
+@@ -436,7 +432,6 @@
+                 unsigned int N,
+                 std::random_access_iterator_tag )
+             {
+-                typedef ForwardIteratorT input_iterator_type;
+                 typedef iterator_range<ForwardIteratorT> result_type;
+ 
+                 if ( (End<=Begin) || ( static_cast<unsigned int>(End-Begin) < N ) )
+diff -Naur a/boost/bind/arg.hpp b/boost/bind/arg.hpp
+--- a/boost/bind/arg.hpp	2007-11-25 10:07:19.000000000 -0800
++++ b/boost/bind/arg.hpp	2015-04-15 09:02:18.683944124 -0700
+@@ -34,7 +34,6 @@
+     template< class T > arg( T const & /* t */ )
+     {
+         // static assert I == is_placeholder<T>::value
+-        typedef char T_must_be_placeholder[ I == is_placeholder<T>::value? 1: -1 ];
+     }
+ };
+ 
+diff -Naur a/boost/concept/detail/general.hpp b/boost/concept/detail/general.hpp
+--- a/boost/concept/detail/general.hpp	2010-06-08 12:31:13.000000000 -0700
++++ b/boost/concept/detail/general.hpp	2015-04-15 09:02:18.683944124 -0700
+@@ -12,6 +12,15 @@
+ #  include <boost/mpl/if.hpp>
+ # endif
+ 
++
++// If the compiler warns about unused typedefs then enable this:
++//
++#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
++#  define BOOST_CONCEPT_ASSERT_UNUSED_ATTRIBUTE __attribute__((unused))
++#else
++#  define BOOST_CONCEPT_ASSERT_UNUSED_ATTRIBUTE
++#endif
++
+ // This implementation works on Comeau and GCC, all the way back to
+ // 2.95
+ namespace boost { namespace concepts {
+@@ -68,7 +77,7 @@
+ #  define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )             \
+     typedef ::boost::concepts::detail::instantiate<          \
+     &::boost::concepts::requirement_<ModelFnPtr>::failed>    \
+-      BOOST_PP_CAT(boost_concept_check,__LINE__)
++      BOOST_PP_CAT(boost_concept_check,__LINE__) BOOST_CONCEPT_ASSERT_UNUSED_ATTRIBUTE
+ 
+ }}
+ 
+diff -Naur a/boost/ptr_container/detail/move.hpp b/boost/ptr_container/detail/move.hpp
+--- a/boost/ptr_container/detail/move.hpp	2008-03-22 14:45:55.000000000 -0700
++++ b/boost/ptr_container/detail/move.hpp	2015-04-15 09:02:18.699944284 -0700
+@@ -20,7 +20,7 @@
+ template<typename Ptr>
+ class move_source {
+ public:
+-    move_source(Ptr& ptr) : ptr_(ptr) {}
++    move_source(Ptr& ptrArg) : ptr_(ptrArg) {}
+     Ptr& ptr() const { return ptr_; }
+ private:
+     Ptr& ptr_;
+diff -Naur a/boost/ptr_container/detail/reversible_ptr_container.hpp b/boost/ptr_container/detail/reversible_ptr_container.hpp
+--- a/boost/ptr_container/detail/reversible_ptr_container.hpp	2009-04-05 12:55:59.000000000 -0700
++++ b/boost/ptr_container/detail/reversible_ptr_container.hpp	2015-04-15 09:02:18.699944284 -0700
+@@ -278,9 +278,9 @@
+ 
+     private:
+         template< class ForwardIterator >
+-        ForwardIterator advance( ForwardIterator begin, size_type n ) 
++        ForwardIterator advance( ForwardIterator beginArg, size_type n ) 
+         {
+-            ForwardIterator iter = begin;
++            ForwardIterator iter = beginArg;
+             std::advance( iter, n );
+             return iter;
+         }        
+diff -Naur a/boost/ptr_container/detail/static_move_ptr.hpp b/boost/ptr_container/detail/static_move_ptr.hpp
+--- a/boost/ptr_container/detail/static_move_ptr.hpp	2008-03-22 14:45:55.000000000 -0700
++++ b/boost/ptr_container/detail/static_move_ptr.hpp	2015-04-15 09:02:18.699944284 -0700
+@@ -151,7 +151,7 @@
+     deleter_const_reference get_deleter() const { return impl_.second(); }
+ private:
+     template<typename TT, typename DD>
+-    void check(const static_move_ptr<TT, DD>& ptr)
++    void check(const static_move_ptr<TT, DD>& ptrArg)
+         {
+             typedef move_ptrs::is_smart_ptr_convertible<TT, T> convertible;
+             BOOST_STATIC_ASSERT(convertible::value);
+diff -Naur a/boost/ptr_container/exception.hpp b/boost/ptr_container/exception.hpp
+--- a/boost/ptr_container/exception.hpp	2008-03-22 14:45:55.000000000 -0700
++++ b/boost/ptr_container/exception.hpp	2015-04-15 09:02:18.699944284 -0700
+@@ -24,7 +24,7 @@
+     {
+         const char* what_;
+     public:
+-        bad_ptr_container_operation( const char* what ) : what_( what )
++        bad_ptr_container_operation( const char* whatArg ) : what_( whatArg )
+         { }
+         
+         virtual const char* what() const throw()
+@@ -38,7 +38,7 @@
+     class bad_index : public bad_ptr_container_operation
+     {
+     public:
+-        bad_index( const char* what ) : bad_ptr_container_operation( what )
++        bad_index( const char* whatArg ) : bad_ptr_container_operation( whatArg )
+         { }
+     };
+ 
+diff -Naur a/boost/system/error_code.hpp b/boost/system/error_code.hpp
+--- a/boost/system/error_code.hpp	2010-07-06 03:47:30.000000000 -0700
++++ b/boost/system/error_code.hpp	2015-04-15 09:02:18.695944245 -0700
+@@ -211,9 +211,9 @@
+     inline const error_category &  get_system_category() { return system_category(); }
+     inline const error_category &  get_generic_category() { return generic_category(); }
+     inline const error_category &  get_posix_category() { return generic_category(); }
+-    static const error_category &  posix_category = generic_category();
+-    static const error_category &  errno_ecat     = generic_category();
+-    static const error_category &  native_ecat    = system_category();
++    //static const error_category &  posix_category = generic_category();
++    //static const error_category &  errno_ecat     = generic_category();
++    //static const error_category &  native_ecat    = system_category();
+ # endif
+ 
+     //  class error_condition  -----------------------------------------------//
diff --git a/boost.patches/boost-54.description b/boost.patches/boost-54.description
new file mode 100644
index 0000000..679dc8c
--- /dev/null
+++ b/boost.patches/boost-54.description
@@ -0,0 +1 @@
+Fix compiler shadowed declaration warnings in uuid_io
diff --git a/boost.patches/boost-54.patch b/boost.patches/boost-54.patch
new file mode 100644
index 0000000..12718e7
--- /dev/null
+++ b/boost.patches/boost-54.patch
@@ -0,0 +1,12 @@
+diff -aruN boost_1_45_0/boost/uuid/uuid_io.hpp boost_1_45_0.N/boost/uuid/uuid_io.hpp
+--- boost_1_45_0/boost/uuid/uuid_io.hpp	2010-07-12 17:37:17.000000000 -0700
++++ boost_1_45_0.N/boost/uuid/uuid_io.hpp	2015-04-28 17:59:01.600615207 -0700
+@@ -59,7 +59,7 @@
+         }
+         
+         if (flags & std::ios_base::left) {
+-            for (std::streamsize i=uuid_width; i<width; i++) {
++            for (std::streamsize j=uuid_width; j<width; j++) {
+                 os << fill;
+             }
+         }
diff --git a/boost.patches/boost-55.description b/boost.patches/boost-55.description
new file mode 100644
index 0000000..3405cc2
--- /dev/null
+++ b/boost.patches/boost-55.description
@@ -0,0 +1 @@
+Allow boost dynamic libraries to expect to be installed in a specific directory
diff --git a/boost.patches/boost-55.patch b/boost.patches/boost-55.patch
new file mode 100644
index 0000000..cf15560
--- /dev/null
+++ b/boost.patches/boost-55.patch
@@ -0,0 +1,21 @@
+diff -Naur a/tools/build/v2/tools/darwin.jam b/tools/build/v2/tools/darwin.jam
+--- a/tools/build/v2/tools/darwin.jam	2010-07-12 00:37:43.000000000 -0700
++++ b/tools/build/v2/tools/darwin.jam	2015-12-04 10:04:07.000000000 -0800
+@@ -33,6 +33,8 @@
+ ## A dependency, that is forced to be included in the link.
+ feature force-load : : free dependency incidental ;
+ 
++flags darwin.link INSTALL_NAME_PATH <dll-path> ;
++
+ #############################################################################
+ 
+ if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ]
+@@ -540,7 +542,7 @@
+ 
+ actions link.dll bind LIBRARIES
+ {
+-    "$(CONFIG_COMMAND)" -dynamiclib -Wl,-single_module -install_name "$(<:B)$(<:S)" -L"$(LINKPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(FRAMEWORK_PATH) -framework$(_)$(FRAMEWORK:D=:S=) $(OPTIONS) $(USER_OPTIONS)
++    "$(CONFIG_COMMAND)" -dynamiclib -Wl,-single_module -install_name "$(INSTALL_NAME_PATH[1])/$(<[1]:B)$(<[1]:S)" -L"$(LINKPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) $(FRAMEWORK_PATH) -framework$(_)$(FRAMEWORK:D=:S=) $(OPTIONS) $(USER_OPTIONS)
+ }
+ 
+ # We use libtool instead of ar to support universal binary linking
diff --git a/boost.tar.bz2 b/boost.tar.bz2
new file mode 100644
index 0000000..e824653
--- /dev/null
+++ b/boost.tar.bz2
Binary files differ
diff --git a/boost.url b/boost.url
new file mode 100644
index 0000000..75502b2
--- /dev/null
+++ b/boost.url
@@ -0,0 +1 @@
+http://download.sourceforge.net/boost/boost_1_45_0.tar.bz2
diff --git a/boost.version b/boost.version
new file mode 100644
index 0000000..37918b8
--- /dev/null
+++ b/boost.version
@@ -0,0 +1 @@
+1_45_0