You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by ad...@apache.org on 2016/06/29 00:33:31 UTC

[6/6] incubator-kudu git commit: thirdparty: add boost and switch to header-only build

thirdparty: add boost and switch to header-only build

The addition of boost to thirdparty is bound to make some squeamish, so
here's my rationale:
1. My original goal was to enable the TSAN build on Ubuntu 16.04, a distro
   that has switched to the new gcc5 ABI. This renders the system boost
   installation unusable as it can't link against our TSAN-instrumented
   libstdc++. To be fair, switching to a header-only build has eliminated
   this problem.
2. Boost is effectively the last remaining dependency that isn't explicitly
   managed as a thirdparty dependency. The only exceptions are glibc,
   libstdc++, and libsasl, all of which should not be managed due to their
   interactions with other ABIs. In my opinion, Kudu should manage as many
   dependencies as possible in this way.
3. Doing this means Kudu developers will no longer need to install boost
   system packages to build Kudu.
4. Historically, Kudu has permitted the use of any boost version even
   though some versions needed patches to build with a new compiler. IIRC,
   https://svn.boost.org/trac/boost/ticket/6165 was one such instance.
5. For the boost logic that Kudu does use, we'll know exactly which features
   exist and which do not. There'll be no more version-based ambiguity.
6. Doing this means we can drop the odd boost_uuid appendage.
7. This patch by no means implies that boost is to stay in Kudu forever.
   We're already at the point where we can get by with boost headers alone.
   Once we replace the remaining bits (i.e. optional and intrusive lists
   come to mind), we can jettison it altogether.

With that out of the way, here are the details:
- Inclusion of boost as a thirdparty dependency. I spent some time fighting
  with the boost build to get it to copy the headers without building
  anything; eventually I gave up and used rsync instead.
- Removal of boost components from Kudu's cmake logic. This netted a nice
  cleanup of cmake code.
- Removal of boost handling from documentation and other random places.
- Removal of boost_uuid.

Change-Id: Id5b73a8e2a86099429b6032023a01a0da7b02371
Reviewed-on: http://gerrit.cloudera.org:8080/3500
Tested-by: Kudu Jenkins
Reviewed-by: Dan Burkert <da...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/incubator-kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-kudu/commit/5b83695b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-kudu/tree/5b83695b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-kudu/diff/5b83695b

Branch: refs/heads/master
Commit: 5b83695bcfda9499701ac1974a5c169e1bcfbc60
Parents: e84cfdf
Author: Adar Dembo <ad...@cloudera.com>
Authored: Sat Jun 25 14:59:19 2016 -0700
Committer: Adar Dembo <ad...@cloudera.com>
Committed: Wed Jun 29 00:32:58 2016 +0000

----------------------------------------------------------------------
 CMakeLists.txt                                  |  59 ++---
 LICENSE.txt                                     |   2 -
 build-support/dist_test.py                      |   2 +-
 build-support/release/rat_exclude_files.txt     |  10 -
 docs/contributing.adoc                          |  37 +--
 docs/installation.adoc                          |  46 +---
 src/kudu/util/CMakeLists.txt                    |   2 -
 thirdparty/.gitignore                           |   1 +
 thirdparty/LICENSE.txt                          |  28 ++
 thirdparty/boost_uuid/LICENSE.txt               |  23 --
 .../boost_uuid/boost/uuid/name_generator.hpp    | 125 ---------
 .../boost_uuid/boost/uuid/nil_generator.hpp     |  34 ---
 .../boost_uuid/boost/uuid/random_generator.hpp  | 118 ---------
 thirdparty/boost_uuid/boost/uuid/seed_rng.hpp   | 262 -------------------
 thirdparty/boost_uuid/boost/uuid/sha1.hpp       | 208 ---------------
 .../boost_uuid/boost/uuid/string_generator.hpp  | 184 -------------
 thirdparty/boost_uuid/boost/uuid/uuid.hpp       | 221 ----------------
 .../boost_uuid/boost/uuid/uuid_generators.hpp   |  19 --
 thirdparty/boost_uuid/boost/uuid/uuid_io.hpp    | 198 --------------
 .../boost_uuid/boost/uuid/uuid_serialize.hpp    |  20 --
 thirdparty/build-definitions.sh                 |  13 +-
 thirdparty/build-thirdparty.sh                  |   7 +-
 thirdparty/download-thirdparty.sh               |  11 +
 ...ost-issue-12179-fix-compilation-errors.patch |  11 +
 thirdparty/preflight.py                         |  16 --
 thirdparty/vars.sh                              |   3 +
 26 files changed, 100 insertions(+), 1560 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a23d8d3..d4b1ad2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -875,56 +875,27 @@ if (NOT APPLE)
 endif()
 
 ## Boost
-# It's important that Boost come last in the list of packages, because it's the only
-# dependency that we don't currently bundle in thirdparty/. If we put this earlier
-# in list, then we might end up with /usr/local/include taking precedence over
-# thirdparty/installed/include and pulling in the wrong version of other dependencies
-# that might be installed in the system.
 
-### Workaround for http://stackoverflow.com/questions/9948375/cmake-find-package-succeeds-but-returns-wrong-path
+# The boost-cmake project hasn't been maintained for years. Let's make sure we
+# don't accidentally use it if it can be found.
 set(Boost_NO_BOOST_CMAKE ON)
 
-# Find Boost static libraries.
-set(Boost_USE_STATIC_LIBS ON)
-find_package(Boost COMPONENTS system thread REQUIRED)
-set(BOOST_STATIC_LIBS ${Boost_LIBRARIES})
-list(LENGTH BOOST_STATIC_LIBS BOOST_STATIC_LIBS_LEN)
-list(SORT BOOST_STATIC_LIBS)
-
-# Find Boost shared libraries.
-set(Boost_USE_STATIC_LIBS OFF)
-find_package(Boost COMPONENTS system thread REQUIRED)
-set(BOOST_SHARED_LIBS ${Boost_LIBRARIES})
-list(LENGTH BOOST_SHARED_LIBS BOOST_SHARED_LIBS_LEN)
-list(SORT BOOST_SHARED_LIBS)
-
-# We should have found the same number of libraries both times.
-if(NOT ${BOOST_SHARED_LIBS_LEN} EQUAL ${BOOST_STATIC_LIBS_LEN})
-  set(ERROR_MSG "Boost static and shared libraries are inconsistent.")
-  set(ERROR_MSG "${ERROR_MSG} Static libraries: ${BOOST_STATIC_LIBS}.")
-  set(ERROR_MSG "${ERROR_MSG} Shared libraries: ${BOOST_SHARED_LIBS}.")
-  message(FATAL_ERROR "${ERROR_MSG}")
-endif()
-
-# Add each pair of static/shared libraries.
-math(EXPR LAST_IDX "${BOOST_STATIC_LIBS_LEN} - 1")
-foreach(IDX RANGE ${LAST_IDX})
-  list(GET BOOST_STATIC_LIBS ${IDX} BOOST_STATIC_LIB)
-  list(GET BOOST_SHARED_LIBS ${IDX} BOOST_SHARED_LIB)
+# Look for Boost in thirdparty only.
+set(BOOST_ROOT ${THIRDPARTY_PREFIX})
 
-  # Remove the prefix/suffix from the library name.
-  #
-  # e.g. libboost_system-mt --> boost_system
-  get_filename_component(LIB_NAME ${BOOST_STATIC_LIB} NAME_WE)
-  string(REGEX REPLACE "lib([^-]*)(-mt)?" "\\1" LIB_NAME_NO_PREFIX_SUFFIX ${LIB_NAME})
-  ADD_THIRDPARTY_LIB(${LIB_NAME_NO_PREFIX_SUFFIX}
-    STATIC_LIB "${BOOST_STATIC_LIB}"
-    SHARED_LIB "${BOOST_SHARED_LIB}")
-  list(APPEND KUDU_BASE_LIBS ${LIB_NAME_NO_PREFIX_SUFFIX})
-endforeach()
+# As of cmake 3.5, there's still no way to force FindBoost.cmake to omit system
+# paths from its search. No combination of Boost_NO_SYSTEM_PATHS, BOOST_ROOT, or
+# BOOST_INCLUDEDIR does the trick; the best they can do is ensure the system
+# paths are searched last.
+#
+# To prevent system boost installations from being picked up, we'll work around
+# this ourselves by checking the prefix of Boost_INCLUDE_DIR.
+find_package(Boost REQUIRED)
+if(NOT ${Boost_INCLUDE_DIR} MATCHES ${BOOST_ROOT})
+  message(FATAL_ERROR "Chose Boost headers outside ${BOOST_ROOT}: ${Boost_INCLUDE_DIR}")
+endif()
 include_directories(SYSTEM ${Boost_INCLUDE_DIR})
 
-
 ############################################################
 # Linker setup
 ############################################################

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/LICENSE.txt
----------------------------------------------------------------------
diff --git a/LICENSE.txt b/LICENSE.txt
index 76dcb9c..f88a5ef 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -502,8 +502,6 @@ src/kudu/gutil/valgrind.h: Hybrid BSD (half BSD, half zlib)
   - See the file headers for full license text.
 
 src/kudu/server/url-coding.cc (some portions): Boost software license
-thirdparty/boost_uuid/: Boost software license
-  - See thirdparty/boost_uuid/LICENSE.txt
 
 www/bootstrap: Apache 2.0 license
 java/kudu-client/src/main/java/org/kududb/util/{Slice,Slices}.java: Apache 2.0 license

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/build-support/dist_test.py
----------------------------------------------------------------------
diff --git a/build-support/dist_test.py b/build-support/dist_test.py
index d6a29d9..bb5e3f2 100755
--- a/build-support/dist_test.py
+++ b/build-support/dist_test.py
@@ -139,7 +139,7 @@ def get_test_commandlines():
 def is_lib_blacklisted(lib):
   # These particular system libraries, we should ship to the remote nodes.
   # No need to ship things like libc, libstdcxx, etc.
-  if "boost" in lib or "oauth" in lib:
+  if "oauth" in lib:
     return False
   if lib.startswith("/lib") or lib.startswith("/usr"):
     return True

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/build-support/release/rat_exclude_files.txt
----------------------------------------------------------------------
diff --git a/build-support/release/rat_exclude_files.txt b/build-support/release/rat_exclude_files.txt
index dee85f7..bec9880 100644
--- a/build-support/release/rat_exclude_files.txt
+++ b/build-support/release/rat_exclude_files.txt
@@ -166,16 +166,6 @@ src/kudu/util/debug/trace_event_impl.h
 src/kudu/util/debug/trace_event_impl_constants.cc
 src/kudu/util/debug/trace_event_synthetic_delay.cc
 src/kudu/util/debug/trace_event_synthetic_delay.h
-thirdparty/boost_uuid/boost/uuid/name_generator.hpp
-thirdparty/boost_uuid/boost/uuid/nil_generator.hpp
-thirdparty/boost_uuid/boost/uuid/random_generator.hpp
-thirdparty/boost_uuid/boost/uuid/seed_rng.hpp
-thirdparty/boost_uuid/boost/uuid/sha1.hpp
-thirdparty/boost_uuid/boost/uuid/string_generator.hpp
-thirdparty/boost_uuid/boost/uuid/uuid.hpp
-thirdparty/boost_uuid/boost/uuid/uuid_generators.hpp
-thirdparty/boost_uuid/boost/uuid/uuid_io.hpp
-thirdparty/boost_uuid/boost/uuid/uuid_serialize.hpp
 thirdparty/patches/*.patch
 www/d3.v2.js
 www/epoch.0.5.2.min.css

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/docs/contributing.adoc
----------------------------------------------------------------------
diff --git a/docs/contributing.adoc b/docs/contributing.adoc
index 46ed2f6..6507d05 100644
--- a/docs/contributing.adoc
+++ b/docs/contributing.adoc
@@ -146,33 +146,16 @@ In general, Kudu follows the
 link:https://google.github.io/styleguide/cppguide.html[Google {cpp} Style Guide],
 with the following exceptions:
 
-=== Limitations on `boost` Library Use
-
-`boost` libraries can be used in cases where a suitable
-replacement does not exist in the Kudu code base. However, try to avoid introducing
-dependencies on new `boost` libraries, and use Kudu code in preference
-to `boost` where available. For example, do not use `boost`'s scoped pointer
-implementations.
-
-.Approved `boost` Libraries
-
-- `boost::assign` (container literals)
-- `boost::shared_mutex` (but prefer Kudu's spin lock implementation for short
-  critical sections)
-
-Check that any features from `boost` you use are present in *`boost` 1.46*
-or earlier, for compatibility with RHEL 6.
-
-.`boost` Libraries and the Kudu {cpp} Client
-Do not use `boost` in any public headers for the Kudu {cpp} client, because
-`boost` commonly breaks backward compatibility, and passing data between two `boost`
-versions (one by the user, one by Kudu) causes serious issues.
-
-In addition, do not create dependencies from the Kudu {cpp} client to any `boost`
-libraries. `libboost_system` is particularly troublesome, as any `boost` code
-that throws exceptions will grow a dependency on it. Among other things, you
-cannot use `boost::{lock_guard,unique_lock,shared_lock}` in any code consumed
-by the {cpp} client (such as _common/_ and _util/_).
+=== Limitations on `boost` Use
+
+`boost` classes from header-only libraries can be used in cases where a suitable
+replacement does not exist in the Kudu code base. However:
+* Do not introduce dependencies on `boost` classes not already depended on. We
+  are actively trying to remove `boost` from the Kudu code base, and new
+  dependencies make that work more difficult.
+* Do not use `boost` in any public headers for the Kudu {cpp} client, because
+  `boost` commonly breaks backward compatibility, and passing data between two
+  `boost` versions (one by the user, one by Kudu) causes serious issues.
 
 === Line length
 

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/docs/installation.adoc
----------------------------------------------------------------------
diff --git a/docs/installation.adoc b/docs/installation.adoc
index 395c9c1..2c3918c 100644
--- a/docs/installation.adoc
+++ b/docs/installation.adoc
@@ -214,8 +214,7 @@ on a version older than 7.0, the Red Hat Developer Toolset must be installed
 . Install the prerequisite libraries, if they are not installed.
 +
 ----
-$ sudo yum install gcc gcc-c++ autoconf automake libtool \
-  boost-static boost-devel cyrus-sasl-devel \
+$ sudo yum install gcc gcc-c++ autoconf automake libtool cyrus-sasl-devel \
   cyrus-sasl-plain patch pkgconfig make rsync vim-common gdb unzip redhat-lsb-core git
 ----
 
@@ -294,8 +293,7 @@ automated deployment scenario. It skips the steps marked *Optional* above.
 ----
 #!/bin/bash
 
-sudo yum -y install gcc gcc-c++ autoconf automake libtool \
-  boost-static boost-devel cyrus-sasl-devel \
+sudo yum -y install gcc gcc-c++ autoconf automake libtool cyrus-sasl-devel \
   cyrus-sasl-plain patch pkgconfig make rsync vim-common gdb unzip redhat-lsb-core git
 DTLS_RPM=rhscl-devtoolset-3-epel-6-x86_64.noarch.rpm
 DTLS_RPM_URL=https://www.softwarecollections.org/en/scls/rhscl/devtoolset-3/epel-6-x86_64/download/${DTLS_RPM}
@@ -320,8 +318,8 @@ make -j4
 . Install the prerequisite libraries, if they are not installed.
 +
 ----
-$ sudo apt-get install git autoconf automake libboost-thread-dev \
-  libboost-system-dev curl gcc g++ libsasl2-dev libsasl2-modules \
+$ sudo apt-get install git autoconf automake \
+  curl gcc g++ libsasl2-dev libsasl2-modules \
   libtool ntp patch pkg-config make rsync unzip vim-common gdb python lsb-release
 ----
 
@@ -384,8 +382,8 @@ the steps marked *Optional* above.
 ----
 #!/bin/bash
 
-sudo apt-get -y install git autoconf automake libboost-thread-dev \
-  libboost-system-dev curl gcc g++ libsasl2-dev libsasl2-modules \
+sudo apt-get -y install git autoconf automake \
+  curl gcc g++ libsasl2-dev libsasl2-modules \
   libtool ntp patch pkg-config make rsync unzip vim-common gdb python lsb-release
 git clone https://github.com/apache/incubator-kudu kudu
 cd kudu
@@ -401,11 +399,6 @@ make -j4
 
 [[sles_from_source]]
 === SUSE Linux Enterprise Server
-Building Kudu on SLES requires building Boost from source, since SLES does not
-have system packages containing Boost static libraries. Boost may be built
-anywhere, provided that the `BOOST_ROOT` environment variable is set to the
-location while invoking CMake to build Kudu. In the instructions below, Boost is
-built alongside Kudu.
 
 . Install the prerequisite libraries, if they are not installed.
 +
@@ -414,17 +407,6 @@ $ sudo zypper install autoconf automake curl cyrus-sasl-devel gcc gcc-c++ \
   gdb git libtool make ntp patch pkg-config python rsync unzip vim lsb-release
 ----
 
-. Install Boost.
-+
-----
-wget https://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
-tar xzf boost_1_59_0.tar.gz
-pushd boost_1_59_0
-./bootstrap.sh
-./b2 --with-system --with-thread
-popd
-----
-
 . Clone the Git repository and change to the new `kudu` directory.
 +
 [source,bash]
@@ -448,8 +430,7 @@ except for the `kudu` directory itself.
 ----
 mkdir -p build/release
 cd build/release
-BOOST_ROOT=../../../boost_1_59_0 \
-  ../../thirdparty/installed/bin/cmake \
+../../thirdparty/installed/bin/cmake \
   -DCMAKE_BUILD_TYPE=release \
   ../..
 make -j4
@@ -476,19 +457,12 @@ the steps marked *Optional* above.
 
 sudo zypper install autoconf automake curl cyrus-sasl-devel gcc gcc-c++ \
   gdb git libtool make ntp patch pkg-config python rsync unzip vim lsb-release
-wget https://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
-tar xzf boost_1_59_0.tar.gz
-pushd boost_1_59_0
-./bootstrap.sh
-./b2 --with-system --with-thread
-popd
 git clone https://github.com/apache/incubator-kudu kudu
 cd kudu
 thirdparty/build-if-necessary.sh
 mkdir -p build/release
 cd build/release
-BOOST_ROOT=../../../boost_1_59_0 \
-  ../../thirdparty/installed/bin/cmake \
+../../thirdparty/installed/bin/cmake \
   -DCMAKE_BUILD_TYPE=release \
   ../..
 make -j4
@@ -513,7 +487,7 @@ for more information.
 . Install the prerequisite libraries, if they are not installed.
 +
 ----
-$ brew install autoconf automake cmake libtool pkg-config boost pstree
+$ brew install autoconf automake cmake libtool pkg-config pstree
 ----
 
 . Clone the Git repository and change to the new `kudu` directory.
@@ -570,7 +544,7 @@ are installed.
 ----
 #!/bin/bash
 
-brew install autoconf automake cmake libtool pkg-config boost pstree
+brew install autoconf automake cmake libtool pkg-config pstree
 git clone https://github.com/apache/incubator-kudu kudu
 cd kudu
 thirdparty/build-if-necessary.sh

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/src/kudu/util/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/src/kudu/util/CMakeLists.txt b/src/kudu/util/CMakeLists.txt
index 1ee64f8..01f9b1a 100644
--- a/src/kudu/util/CMakeLists.txt
+++ b/src/kudu/util/CMakeLists.txt
@@ -176,8 +176,6 @@ if(NOT APPLE)
 endif()
 
 set(UTIL_LIBS
-  boost_system
-  boost_thread
   crcutil
   gflags
   glog

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/.gitignore
----------------------------------------------------------------------
diff --git a/thirdparty/.gitignore b/thirdparty/.gitignore
index 57d7d9f..718273f 100644
--- a/thirdparty/.gitignore
+++ b/thirdparty/.gitignore
@@ -46,3 +46,4 @@ lz4-lz4-*
 nvml-*
 python-*
 gcc-*
+boost_*

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/LICENSE.txt
----------------------------------------------------------------------
diff --git a/thirdparty/LICENSE.txt b/thirdparty/LICENSE.txt
index c66b2e2..ba5c2d5 100644
--- a/thirdparty/LICENSE.txt
+++ b/thirdparty/LICENSE.txt
@@ -587,6 +587,34 @@ nvml bundles jemalloc which is licensed under the BSD 2-clause license:
   OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+--------------------------------------------------------------------------------
+thirdparty/boost_*/: Boost Software License
+Source: http://www.boost.org/
+
+  Boost Software License - Version 1.0 - August 17th, 2003
+
+  Permission is hereby granted, free of charge, to any person or organization
+  obtaining a copy of the software and accompanying documentation covered by
+  this license (the "Software") to use, reproduce, display, distribute,
+  execute, and transmit the Software, and to prepare derivative works of the
+  Software, and to permit third-parties to whom the Software is furnished to
+  do so, all subject to the following:
+
+  The copyright notices in the Software and this entire statement, including
+  the above license grant, this restriction and the following disclaimer,
+  must be included in all copies of the Software, in whole or in part, and
+  all derivative works of the Software, unless such copies or derivative
+  works are solely in the form of machine-executable object code generated by
+  a source language processor.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+  FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+  SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+  FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+  DEALINGS IN THE SOFTWARE.
+
 
 
 ================================================================================

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/boost_uuid/LICENSE.txt
----------------------------------------------------------------------
diff --git a/thirdparty/boost_uuid/LICENSE.txt b/thirdparty/boost_uuid/LICENSE.txt
deleted file mode 100644
index 0076b2d..0000000
--- a/thirdparty/boost_uuid/LICENSE.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-  Boost Software License - Version 1.0 - August 17th, 2003
-
-  Permission is hereby granted, free of charge, to any person or organization
-  obtaining a copy of the software and accompanying documentation covered by
-  this license (the "Software") to use, reproduce, display, distribute,
-  execute, and transmit the Software, and to prepare derivative works of the
-  Software, and to permit third-parties to whom the Software is furnished to
-  do so, all subject to the following:
-
-  The copyright notices in the Software and this entire statement, including
-  the above license grant, this restriction and the following disclaimer,
-  must be included in all copies of the Software, in whole or in part, and
-  all derivative works of the Software, unless such copies or derivative
-  works are solely in the form of machine-executable object code generated by
-  a source language processor.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-  SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-  FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-  DEALINGS IN THE SOFTWARE.

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/boost_uuid/boost/uuid/name_generator.hpp
----------------------------------------------------------------------
diff --git a/thirdparty/boost_uuid/boost/uuid/name_generator.hpp b/thirdparty/boost_uuid/boost/uuid/name_generator.hpp
deleted file mode 100644
index 42473a6..0000000
--- a/thirdparty/boost_uuid/boost/uuid/name_generator.hpp
+++ /dev/null
@@ -1,125 +0,0 @@
-// Boost name_generator.hpp header file  ----------------------------------------------//
-
-// Copyright 2010 Andy Tompkins.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_UUID_NAME_GENERATOR_HPP
-#define BOOST_UUID_NAME_GENERATOR_HPP
-
-#include <boost/uuid/uuid.hpp>
-#include <boost/uuid/sha1.hpp>
-#include <boost/assert.hpp>
-#include <string>
-#include <cstring> // for strlen, wcslen
-
-#ifdef BOOST_NO_STDC_NAMESPACE
-namespace std {
-    using ::strlen;
-    using ::wcslen;
-} //namespace std
-#endif //BOOST_NO_STDC_NAMESPACE
-
-namespace boost {
-namespace uuids {
-
-// generate a name-based uuid
-// TODO: add in common namesspace uuids
-class name_generator {
-public:
-    typedef uuid result_type;
-
-    explicit name_generator(uuid const& namespace_uuid)
-        : namespace_uuid(namespace_uuid)
-    {}
-
-    uuid operator()(const char* name) {
-        reset();
-        process_characters(name, std::strlen(name));
-        return sha_to_uuid();
-    }
-
-    uuid operator()(const wchar_t* name) {
-        reset();
-        process_characters(name, std::wcslen(name));
-        return sha_to_uuid();
-    }
-
-    template <typename ch, typename char_traits, typename alloc>
-    uuid operator()(std::basic_string<ch, char_traits, alloc> const& name) {
-        reset();
-        process_characters(name.c_str(), name.length());
-        return sha_to_uuid();
-    }
-    
-    uuid operator()(void const* buffer, std::size_t byte_count) {
-        reset();
-        sha.process_bytes(buffer, byte_count);
-        return sha_to_uuid();
-    };
-
-private:
-    // we convert all characters to uint32_t so that each
-    // character is 4 bytes reguardless of sizeof(char) or
-    // sizeof(wchar_t).  We want the name string on any
-    // platform / compiler to generate the same uuid
-    // except for char
-    template <typename char_type>
-    void process_characters(char_type const*const characters, size_t count) {
-        BOOST_ASSERT(sizeof(uint32_t) >= sizeof(char_type));
-
-        for (size_t i=0; i<count; i++) {
-            uint32_t c = characters[i];
-            sha.process_byte( (c >> 0) && 0xFF );
-            sha.process_byte( (c >> 8) && 0xFF );
-            sha.process_byte( (c >> 16) && 0xFF );
-            sha.process_byte( (c >> 24) && 0xFF );
-        }
-    }
-    
-    void process_characters(char const*const characters, size_t count) {
-        sha.process_bytes(characters, count);
-    }
-
-    void reset()
-    {
-        sha.reset();
-        sha.process_bytes(namespace_uuid.begin(), namespace_uuid.size());
-    }
-    
-    uuid sha_to_uuid()
-    {
-        unsigned int digest[5];
-
-        sha.get_digest(digest);
-
-        uuid u;
-        for (int i=0; i<4; ++i) {
-            *(u.begin() + i*4+0) = ((digest[i] >> 24) & 0xFF);
-            *(u.begin() + i*4+1) = ((digest[i] >> 16) & 0xFF);
-            *(u.begin() + i*4+2) = ((digest[i] >> 8) & 0xFF);
-            *(u.begin() + i*4+3) = ((digest[i] >> 0) & 0xFF);
-        }
-
-        // set variant
-        // must be 0b10xxxxxx
-        *(u.begin()+8) &= 0xBF;
-        *(u.begin()+8) |= 0x80;
-
-        // set version
-        // must be 0b0101xxxx
-        *(u.begin()+6) &= 0x5F; //0b01011111
-        *(u.begin()+6) |= 0x50; //0b01010000
-
-        return u;
-    }
-
-private:
-    uuid namespace_uuid;
-    detail::sha1 sha;
-};
-
-}} // namespace boost::uuids
-
-#endif // BOOST_UUID_NAME_GENERATOR_HPP

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/boost_uuid/boost/uuid/nil_generator.hpp
----------------------------------------------------------------------
diff --git a/thirdparty/boost_uuid/boost/uuid/nil_generator.hpp b/thirdparty/boost_uuid/boost/uuid/nil_generator.hpp
deleted file mode 100644
index c3c5818..0000000
--- a/thirdparty/boost_uuid/boost/uuid/nil_generator.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-// Boost nil_generator.hpp header file  ----------------------------------------------//
-
-// Copyright 2010 Andy Tompkins.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_UUID_NIL_GENERATOR_HPP
-#define BOOST_UUID_NIL_GENERATOR_HPP
-
-#include <boost/uuid/uuid.hpp>
-
-namespace boost {
-namespace uuids {
-
-// generate a nil uuid
-struct nil_generator {
-    typedef uuid result_type;
-    
-    uuid operator()() const {
-        // initialize to all zeros
-        uuid u = {{0}};
-        return u;
-    }
-};
-
-inline uuid nil_uuid() {
-    return nil_generator()();
-}
-
-}} // namespace boost::uuids
-
-#endif // BOOST_UUID_NIL_GENERATOR_HPP
-

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/boost_uuid/boost/uuid/random_generator.hpp
----------------------------------------------------------------------
diff --git a/thirdparty/boost_uuid/boost/uuid/random_generator.hpp b/thirdparty/boost_uuid/boost/uuid/random_generator.hpp
deleted file mode 100644
index 4d11f6b..0000000
--- a/thirdparty/boost_uuid/boost/uuid/random_generator.hpp
+++ /dev/null
@@ -1,118 +0,0 @@
-// Boost random_generator.hpp header file  ----------------------------------------------//
-
-// Copyright 2010 Andy Tompkins.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_UUID_RANDOM_GENERATOR_HPP
-#define BOOST_UUID_RANDOM_GENERATOR_HPP
-
-#include <boost/uuid/uuid.hpp>
-#include <boost/uuid/seed_rng.hpp>
-#include <boost/random/uniform_int.hpp>
-#include <boost/random/variate_generator.hpp>
-#include <boost/random/mersenne_twister.hpp>
-#include <boost/assert.hpp>
-#include <boost/shared_ptr.hpp>
-#include <limits>
-
-namespace boost {
-namespace uuids {
-
-// generate a random-based uuid
-template <typename UniformRandomNumberGenerator>
-class basic_random_generator {
-private:
-    typedef uniform_int<unsigned long> distribution_type;
-    typedef variate_generator<UniformRandomNumberGenerator*, distribution_type> generator_type;
-
-    struct null_deleter
-    {
-        void operator()(void const *) const {}
-    };
-
-public:
-    typedef uuid result_type;
-    
-    // default constructor creates the random number generator
-    basic_random_generator()
-        : pURNG(new UniformRandomNumberGenerator)
-        , generator
-          ( pURNG.get()
-          , distribution_type
-            ( (std::numeric_limits<unsigned long>::min)()
-            , (std::numeric_limits<unsigned long>::max)()
-            )
-          )
-    {
-        // seed the random number generator
-        detail::seed(*pURNG);
-    }
-    
-    // keep a reference to a random number generator
-    // don't seed a given random number generator
-    explicit basic_random_generator(UniformRandomNumberGenerator& gen)
-        : pURNG(&gen, null_deleter())
-        , generator
-          ( pURNG.get()
-          , distribution_type
-            ( (std::numeric_limits<unsigned long>::min)()
-            , (std::numeric_limits<unsigned long>::max)()
-            )
-          )
-    {}
-    
-    // keep a pointer to a random number generator
-    // don't seed a given random number generator
-    explicit basic_random_generator(UniformRandomNumberGenerator* pGen)
-        : pURNG(pGen, null_deleter())
-        , generator
-          ( pURNG.get()
-          , distribution_type
-            ( (std::numeric_limits<unsigned long>::min)()
-            , (std::numeric_limits<unsigned long>::max)()
-            )
-          )
-    {
-        BOOST_ASSERT(pURNG);
-    }
-    
-    uuid operator()()
-    {
-        uuid u;
-        
-        int i=0;
-        unsigned long random_value = generator();
-        for (uuid::iterator it=u.begin(); it!=u.end(); ++it, ++i) {
-            if (i==sizeof(unsigned long)) {
-                random_value = generator();
-                i = 0;
-            }
-
-            *it = ((random_value >> (i*8)) & 0xFF);
-        }
-
-        // set variant
-        // must be 0b10xxxxxx
-        *(u.begin()+8) &= 0xBF;
-        *(u.begin()+8) |= 0x80;
-
-        // set version
-        // must be 0b0100xxxx
-        *(u.begin()+6) &= 0x4F; //0b01001111
-        *(u.begin()+6) |= 0x40; //0b01000000
-
-        return u;
-    }
-
-private:
-    shared_ptr<UniformRandomNumberGenerator> pURNG;
-    generator_type generator;
-};
-
-typedef basic_random_generator<mt19937> random_generator;
-
-}} // namespace boost::uuids
-
-#endif //BOOST_UUID_RANDOM_GENERATOR_HPP

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/boost_uuid/boost/uuid/seed_rng.hpp
----------------------------------------------------------------------
diff --git a/thirdparty/boost_uuid/boost/uuid/seed_rng.hpp b/thirdparty/boost_uuid/boost/uuid/seed_rng.hpp
deleted file mode 100644
index 3090197..0000000
--- a/thirdparty/boost_uuid/boost/uuid/seed_rng.hpp
+++ /dev/null
@@ -1,262 +0,0 @@
-// Boost seed_rng.hpp header file  ----------------------------------------------//
-
-// Copyright 2007 Andy Tompkins.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// Revision History
-//  09 Nov 2007 - Initial Revision
-//  25 Feb 2008 - moved to namespace boost::uuids::detail
-//  28 Nov 2009 - disabled deprecated warnings for MSVC
-
-// seed_rng models a UniformRandomNumberGenerator (see Boost.Random).
-// Random number generators are hard to seed well.  This is intended to provide
-// good seed values for random number generators.
-// It creates random numbers from a sha1 hash of data from a variary of sources,
-// all of which are standard function calls.  It produces random numbers slowly.
-// Peter Dimov provided the details of sha1_random_digest_().
-// see http://archives.free.net.ph/message/20070507.175609.4c4f503a.en.html
-
-#ifndef BOOST_UUID_SEED_RNG_HPP
-#define BOOST_UUID_SEED_RNG_HPP
-
-#include <boost/config.hpp>
-#include <cstring> // for memcpy
-#include <limits>
-#include <memory.h>
-#include <ctime> // for time_t, time, clock_t, clock
-#include <cstdlib> // for rand
-#include <cstdio> // for FILE, fopen, fread, fclose
-#include <boost/uuid/sha1.hpp>
-//#include <boost/nondet_random.hpp> //forward declare boost::random_device
-
-// can't use boost::generator_iterator since boost::random number seed(Iter&, Iter)
-// functions need a last iterator
-//#include <boost/generator_iterator.hpp>
-# include <boost/iterator/iterator_facade.hpp>
-
-#if defined(_MSC_VER)
-#pragma warning(push) // Save warning settings.
-#pragma warning(disable : 4996) // Disable deprecated std::fopen
-#endif
-
-#ifdef BOOST_NO_STDC_NAMESPACE
-namespace std {
-    using ::memcpy;
-    using ::time_t;
-    using ::time;
-    using ::clock_t;
-    using ::clock;
-    using ::rand;
-    using ::FILE;
-    using ::fopen;
-    using ::fread;
-    using ::fclose;
-} //namespace std
-#endif
-
-// forward declare random number generators
-namespace boost {
-class random_device;
-} //namespace boost
-
-namespace boost {
-namespace uuids {
-namespace detail {
-
-// should this be part of Boost.Random?
-class seed_rng
-{
-public:
-    typedef unsigned int result_type;
-    BOOST_STATIC_CONSTANT(bool, has_fixed_range = false);
-    //BOOST_STATIC_CONSTANT(unsigned int, min_value = 0);
-    //BOOST_STATIC_CONSTANT(unsigned int, max_value = UINT_MAX);
-
-public:
-    // note: rd_ intentionally left uninitialized
-    seed_rng()
-        : rd_index_(5)
-        , random_(std::fopen( "/dev/urandom", "rb" ))
-    {}
-    
-    ~seed_rng()
-    {
-        if (random_) {
-            std::fclose(random_);
-        }
-    }
-
-    result_type min BOOST_PREVENT_MACRO_SUBSTITUTION () const
-    {
-        return (std::numeric_limits<result_type>::min)();
-    }
-    result_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const
-    {
-        return (std::numeric_limits<result_type>::max)();
-    }
-
-    result_type operator()()
-    {
-        if (rd_index_ >= 5) {
-            //get new digest
-            sha1_random_digest_();
-
-            rd_index_ = 0;
-        }
-
-        return rd_[rd_index_++];
-    }
-
-private:
-    static unsigned int * sha1_random_digest_state_()
-    {
-        // intentionally left uninitialized
-        static unsigned int state[ 5 ];
-        return state;
-    }
-
-    void sha1_random_digest_()
-    {
-        boost::uuids::detail::sha1 sha;
-
-        unsigned int * ps = sha1_random_digest_state_();
-
-        unsigned int state[ 5 ];
-        std::memcpy( state, ps, sizeof( state ) ); // harmless data race
-
-        sha.process_bytes( (unsigned char const*)state, sizeof( state ) );
-        sha.process_bytes( (unsigned char const*)&ps, sizeof( ps ) );
-
-        {
-            std::time_t tm = std::time( 0 );
-            sha.process_bytes( (unsigned char const*)&tm, sizeof( tm ) );
-        }
-
-        {
-            std::clock_t ck = std::clock();
-            sha.process_bytes( (unsigned char const*)&ck, sizeof( ck ) );
-        }
-
-        {
-            unsigned int rn[] = { std::rand(), std::rand(), std::rand() };
-            sha.process_bytes( (unsigned char const*)rn, sizeof( rn ) );
-        }
-
-        {
-            // intentionally left uninitialized
-            unsigned char buffer[ 20 ];
-
-            if(random_)
-            {
-                std::fread( buffer, 1, 20, random_ );
-            }
-
-            // using an uninitialized buffer[] if fopen fails
-            // intentional, we rely on its contents being random
-            sha.process_bytes( buffer, sizeof( buffer ) );
-        }
-
-        {
-            // *p is intentionally left uninitialized
-            unsigned int * p = new unsigned int;
-
-            sha.process_bytes( (unsigned char const*)p, sizeof( *p ) );
-            sha.process_bytes( (unsigned char const*)&p, sizeof( p ) );
-
-            delete p;
-        }
-
-        sha.process_bytes( (unsigned char const*)rd_, sizeof( rd_ ) );
-
-        unsigned int digest[ 5 ];
-        sha.get_digest( digest );
-
-        for( int i = 0; i < 5; ++i )
-        {
-            // harmless data race
-            ps[ i ] ^= digest[ i ];
-            rd_[ i ] ^= digest[ i ];
-        }
-    }
-
-private:
-    unsigned int rd_[5];
-    int rd_index_;
-    std::FILE * random_;
-    
-private: // make seed_rng noncopyable
-    seed_rng(seed_rng const&);
-    seed_rng& operator=(seed_rng const&);
-};
-
-// almost a copy of boost::generator_iterator
-// but default constructor sets m_g to NULL
-template <class Generator>
-class generator_iterator
-  : public iterator_facade<
-        generator_iterator<Generator>
-      , typename Generator::result_type
-      , single_pass_traversal_tag
-      , typename Generator::result_type const&
-    >
-{
-    typedef iterator_facade<
-        generator_iterator<Generator>
-      , typename Generator::result_type
-      , single_pass_traversal_tag
-      , typename Generator::result_type const&
-    > super_t;
-    
- public:
-    generator_iterator() : m_g(NULL) {}
-    generator_iterator(Generator* g) : m_g(g), m_value((*m_g)()) {}
-
-    void increment()
-    {
-        m_value = (*m_g)();
-    }
-
-    const typename Generator::result_type&
-    dereference() const
-    {
-        return m_value;
-    }
-
-    bool equal(generator_iterator const& y) const
-    {
-        return this->m_g == y.m_g && this->m_value == y.m_value;
-    }
-
- private:
-    Generator* m_g;
-    typename Generator::result_type m_value;
-};
-
-// seed() seeds a random number generator with good seed values
-
-template <typename UniformRandomNumberGenerator>
-inline void seed(UniformRandomNumberGenerator& rng)
-{
-    seed_rng seed_gen;
-    generator_iterator<seed_rng> begin(&seed_gen);
-    generator_iterator<seed_rng> end;
-    rng.seed(begin, end);
-}
-
-// random_device does not / can not be seeded
-template <>
-inline void seed<boost::random_device>(boost::random_device&) {}
-
-// random_device does not / can not be seeded
-template <>
-inline void seed<seed_rng>(seed_rng&) {}
-
-}}} //namespace boost::uuids::detail
-
-#if defined(_MSC_VER)
-#pragma warning(pop) // Restore warnings to previous state.
-#endif
-
-#endif

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/boost_uuid/boost/uuid/sha1.hpp
----------------------------------------------------------------------
diff --git a/thirdparty/boost_uuid/boost/uuid/sha1.hpp b/thirdparty/boost_uuid/boost/uuid/sha1.hpp
deleted file mode 100644
index b4a1344..0000000
--- a/thirdparty/boost_uuid/boost/uuid/sha1.hpp
+++ /dev/null
@@ -1,208 +0,0 @@
-// boost/uuid/sha1.hpp header file  ----------------------------------------------//
-
-// Copyright 2007 Andy Tompkins.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// Revision History
-//  29 May 2007 - Initial Revision
-//  25 Feb 2008 - moved to namespace boost::uuids::detail
-
-// This is a byte oriented implementation
-// Note: this implementation does not handle message longer than
-//       2^32 bytes.
-
-#ifndef BOOST_UUID_SHA1_H
-#define BOOST_UUID_SHA1_H
-
-#include <boost/static_assert.hpp>
-#include <cstddef>
-
-#ifdef BOOST_NO_STDC_NAMESPACE
-namespace std {
-    using ::size_t;
-} // namespace std
-#endif
-
-namespace boost {
-namespace uuids {
-namespace detail {
-
-BOOST_STATIC_ASSERT(sizeof(unsigned char)*8 == 8);
-BOOST_STATIC_ASSERT(sizeof(unsigned int)*8 == 32);
-
-inline unsigned int left_rotate(unsigned int x, std::size_t n)
-{
-    return (x<<n) ^ (x>> (32-n));
-}
-
-class sha1
-{
-public:
-    typedef unsigned int(&digest_type)[5];
-public:
-    sha1();
-
-    void reset();
-
-    void process_byte(unsigned char byte);
-    void process_block(void const* bytes_begin, void const* bytes_end);
-    void process_bytes(void const* buffer, std::size_t byte_count);
-
-    void get_digest(digest_type digest);
-
-private:
-    void process_block();
-
-private:
-    unsigned int h_[5];
-
-    unsigned char block_[64];
-
-    std::size_t block_byte_index_;
-    std::size_t byte_count_;
-};
-
-inline sha1::sha1()
-{
-    reset();
-}
-
-inline void sha1::reset()
-{
-    h_[0] = 0x67452301;
-    h_[1] = 0xEFCDAB89;
-    h_[2] = 0x98BADCFE;
-    h_[3] = 0x10325476;
-    h_[4] = 0xC3D2E1F0;
-
-    block_byte_index_ = 0;
-    byte_count_ = 0;
-}
-
-inline void sha1::process_byte(unsigned char byte)
-{
-    block_[block_byte_index_++] = byte;
-    ++byte_count_;
-    if (block_byte_index_ == 64) {
-        block_byte_index_ = 0;
-        process_block();
-    }
-}
-
-inline void sha1::process_block(void const* bytes_begin, void const* bytes_end)
-{
-    unsigned char const* begin = static_cast<unsigned char const*>(bytes_begin);
-    unsigned char const* end = static_cast<unsigned char const*>(bytes_end);
-    for(; begin != end; ++begin) {
-        process_byte(*begin);
-    }
-}
-
-inline void sha1::process_bytes(void const* buffer, std::size_t byte_count)
-{
-    unsigned char const* b = static_cast<unsigned char const*>(buffer);
-    process_block(b, b+byte_count);
-}
-
-inline void sha1::process_block()
-{
-    unsigned int w[80];
-    for (std::size_t i=0; i<16; ++i) {
-        w[i]  = (block_[i*4 + 0] << 24);
-        w[i] |= (block_[i*4 + 1] << 16);
-        w[i] |= (block_[i*4 + 2] << 8);
-        w[i] |= (block_[i*4 + 3]);
-    }
-    for (std::size_t i=16; i<80; ++i) {
-        w[i] = left_rotate((w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16]), 1);
-    }
-
-    unsigned int a = h_[0];
-    unsigned int b = h_[1];
-    unsigned int c = h_[2];
-    unsigned int d = h_[3];
-    unsigned int e = h_[4];
-
-    for (std::size_t i=0; i<80; ++i) {
-        unsigned int f;
-        unsigned int k;
-
-        if (i<20) {
-            f = (b & c) | (~b & d);
-            k = 0x5A827999;
-        } else if (i<40) {
-            f = b ^ c ^ d;
-            k = 0x6ED9EBA1;
-        } else if (i<60) {
-            f = (b & c) | (b & d) | (c & d);
-            k = 0x8F1BBCDC;
-        } else {
-            f = b ^ c ^ d;
-            k = 0xCA62C1D6;
-        }
-
-        unsigned temp = left_rotate(a, 5) + f + e + k + w[i];
-        e = d;
-        d = c;
-        c = left_rotate(b, 30);
-        b = a;
-        a = temp;
-    }
-
-    h_[0] += a;
-    h_[1] += b;
-    h_[2] += c;
-    h_[3] += d;
-    h_[4] += e;
-}
-
-inline void sha1::get_digest(digest_type digest)
-{
-    std::size_t bit_count = byte_count_*8;
-
-    // append the bit '1' to the message
-    process_byte(0x80);
-
-    // append k bits '0', where k is the minimum number >= 0
-    // such that the resulting message length is congruent to 56 (mod 64)
-    // check if there is enough space for padding and bit_count
-    if (block_byte_index_ > 56) {
-        // finish this block
-        while (block_byte_index_ != 0) {
-            process_byte(0);
-        }
-
-        // one more block
-        while (block_byte_index_ < 56) {
-            process_byte(0);
-        }
-    } else {
-        while (block_byte_index_ < 56) {
-            process_byte(0);
-        }
-    }
-
-    // append length of message (before pre-processing) 
-    // as a 64-bit big-endian integer
-    process_byte(0);
-    process_byte(0);
-    process_byte(0);
-    process_byte(0);
-    process_byte( static_cast<unsigned char>((bit_count>>24) & 0xFF));
-    process_byte( static_cast<unsigned char>((bit_count>>16) & 0xFF));
-    process_byte( static_cast<unsigned char>((bit_count>>8 ) & 0xFF));
-    process_byte( static_cast<unsigned char>((bit_count)     & 0xFF));
-
-    // get final digest
-    digest[0] = h_[0];
-    digest[1] = h_[1];
-    digest[2] = h_[2];
-    digest[3] = h_[3];
-    digest[4] = h_[4];
-}
-
-}}} // namespace boost::uuids::detail
-
-#endif

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/boost_uuid/boost/uuid/string_generator.hpp
----------------------------------------------------------------------
diff --git a/thirdparty/boost_uuid/boost/uuid/string_generator.hpp b/thirdparty/boost_uuid/boost/uuid/string_generator.hpp
deleted file mode 100644
index 7d2733b..0000000
--- a/thirdparty/boost_uuid/boost/uuid/string_generator.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-// Boost string_generator.hpp header file  ----------------------------------------------//
-
-// Copyright 2010 Andy Tompkins.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-#ifndef BOOST_UUID_STRING_GENERATOR_HPP
-#define BOOST_UUID_STRING_GENERATOR_HPP
-
-#include <boost/uuid/uuid.hpp>
-#include <string>
-#include <cstring> // for strlen, wcslen
-#include <iterator>
-#include <algorithm> // for find
-#include <stdexcept>
-
-#ifdef BOOST_NO_STDC_NAMESPACE
-namespace std {
-    using ::strlen;
-    using ::wcslen;
-} //namespace std
-#endif //BOOST_NO_STDC_NAMESPACE
-
-namespace boost {
-namespace uuids {
-
-// generate a uuid from a string
-// lexical_cast works fine using uuid_io.hpp
-// but this generator should accept more forms
-// and be more efficient
-// would like to accept the following forms:
-// 0123456789abcdef0123456789abcdef
-// 01234567-89ab-cdef-0123456789abcdef
-// {01234567-89ab-cdef-0123456789abcdef}
-// {0123456789abcdef0123456789abcdef}
-// others?
-struct string_generator {
-    typedef uuid result_type;
-    
-    template <typename ch, typename char_traits, typename alloc>
-    uuid operator()(std::basic_string<ch, char_traits, alloc> const& s) const {
-        return operator()(s.begin(), s.end());
-    };
-
-    uuid operator()(char const*const s) const {
-        return operator()(s, s+std::strlen(s));
-    }
-
-    uuid operator()(wchar_t const*const s) const {
-        return operator()(s, s+std::wcslen(s));
-    }
-
-    template <typename CharIterator>
-    uuid operator()(CharIterator begin, CharIterator end) const
-    {
-        typedef typename std::iterator_traits<CharIterator>::value_type char_type;
-
-        // check open brace
-        char_type c = get_next_char(begin, end);
-        bool has_open_brace = is_open_brace(c);
-        char_type open_brace_char = c;
-        if (has_open_brace) {
-            c = get_next_char(begin, end);
-        }
-
-        bool has_dashes = false;
-
-        uuid u;
-        int i=0;
-        for (uuid::iterator it_byte=u.begin(); it_byte!=u.end(); ++it_byte, ++i) {
-            if (it_byte != u.begin()) {
-                c = get_next_char(begin, end);
-            }
-            
-            if (i == 4) {
-                has_dashes = is_dash(c);
-                if (has_dashes) {
-                    c = get_next_char(begin, end);
-                }
-            }
-            
-            if (has_dashes) {
-                if (i == 6 || i == 8 || i == 10) {
-                    if (is_dash(c)) {
-                        c = get_next_char(begin, end);
-                    } else {
-                        throw_invalid();
-                    }
-                }
-            }
-
-            *it_byte = get_value(c);
-
-            c = get_next_char(begin, end);
-            *it_byte <<= 4;
-            *it_byte |= get_value(c);
-        }
-
-        // check close brace
-        if (has_open_brace) {
-            c = get_next_char(begin, end);
-            check_close_brace(c, open_brace_char);
-        }
-        
-        return u;
-    }
-    
-private:
-    template <typename CharIterator>
-    typename std::iterator_traits<CharIterator>::value_type
-    get_next_char(CharIterator& begin, CharIterator end) const {
-        if (begin == end) {
-            throw_invalid();
-        }
-        return *begin++;
-    }
-
-    unsigned char get_value(char c) const {
-        static char const*const digits_begin = "0123456789abcdefABCDEF";
-        static char const*const digits_end = digits_begin + 22;
-
-        static unsigned char const values[] =
-            { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15
-            , static_cast<unsigned char>(-1) };
-
-        char const* d = std::find(digits_begin, digits_end, c);
-        return values[d - digits_begin];
-    }
-
-    unsigned char get_value(wchar_t c) const {
-        static wchar_t const*const digits_begin = L"0123456789abcdefABCDEF";
-        static wchar_t const*const digits_end = digits_begin + 22;
-        
-        static unsigned char const values[] =
-            { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,10,11,12,13,14,15
-            , static_cast<unsigned char>(-1) };
-
-        wchar_t const* d = std::find(digits_begin, digits_end, c);
-        return values[d - digits_begin];
-    }
-
-    bool is_dash(char c) const {
-        return c == '-';
-    }
-    
-    bool is_dash(wchar_t c) const {
-        return c == L'-';
-    }
-    
-    // return closing brace
-    bool is_open_brace(char c) const {
-        return (c == '{');
-    }
-    
-    bool is_open_brace(wchar_t c) const {
-        return (c == L'{');
-    }
-    
-    void check_close_brace(char c, char open_brace) const {
-        if (open_brace == '{' && c == '}') {
-            //great
-        } else {
-            throw_invalid();
-        }
-    }
-    
-    void check_close_brace(wchar_t c, wchar_t open_brace) const {
-        if (open_brace == L'{' && c == L'}') {
-            // great
-        } else {
-            throw_invalid();
-        }
-    }
-    
-    void throw_invalid() const {
-        throw std::runtime_error("invalid uuid string");
-    }
-};
-
-}} // namespace boost::uuids
-
-#endif //BOOST_UUID_STRING_GENERATOR_HPP
-

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/boost_uuid/boost/uuid/uuid.hpp
----------------------------------------------------------------------
diff --git a/thirdparty/boost_uuid/boost/uuid/uuid.hpp b/thirdparty/boost_uuid/boost/uuid/uuid.hpp
deleted file mode 100644
index 2678d85..0000000
--- a/thirdparty/boost_uuid/boost/uuid/uuid.hpp
+++ /dev/null
@@ -1,221 +0,0 @@
-// Boost uuid.hpp header file  ----------------------------------------------//
-
-// Copyright 2006 Andy Tompkins.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// Revision History
-//  06 Feb 2006 - Initial Revision
-//  09 Nov 2006 - fixed variant and version bits for v4 guids
-//  13 Nov 2006 - added serialization
-//  17 Nov 2006 - added name-based guid creation
-//  20 Nov 2006 - add fixes for gcc (from Tim Blechmann)
-//  07 Mar 2007 - converted to header only
-//  10 May 2007 - removed need for Boost.Thread
-//              - added better seed - thanks Peter Dimov
-//              - removed null()
-//              - replaced byte_count() and output_bytes() with size() and begin() and end()
-//  11 May 2007 - fixed guid(ByteInputIterator first, ByteInputIterator last)
-//              - optimized operator>>
-//  14 May 2007 - converted from guid to uuid
-//  29 May 2007 - uses new implementation of sha1
-//  01 Jun 2007 - removed using namespace directives
-//  09 Nov 2007 - moved implementation to uuid.ipp file
-//  12 Nov 2007 - moved serialize code to uuid_serialize.hpp file
-//  25 Feb 2008 - moved to namespace boost::uuids
-//  19 Mar 2009 - changed to a POD, reorganized files
-//  28 Nov 2009 - disabled deprecated warnings for MSVC
-//  30 Nov 2009 - used BOOST_STATIC_CONSTANT
-//  02 Dec 2009 - removed BOOST_STATIC_CONSTANT - not all compilers like it
-
-#ifndef BOOST_UUID_HPP
-#define BOOST_UUID_HPP
-
-#include <boost/config.hpp>
-#include <stddef.h>
-#include <boost/cstdint.hpp>
-#include <algorithm>
-#include <boost/config.hpp> // for static assert
-#ifndef BOOST_UUID_NO_TYPE_TRAITS
-#include <boost/type_traits/is_pod.hpp>
-#include <boost/type_traits/integral_constant.hpp>
-#endif
-
-#if defined(_MSC_VER)
-#pragma warning(push) // Save warning settings.
-#pragma warning(disable : 4996) // Disable deprecated std::swap_ranges, std::equal
-#endif
-
-#ifdef BOOST_NO_STDC_NAMESPACE
-namespace std {
-    using ::size_t;
-    using ::ptrdiff_t;
-} //namespace std
-#endif //BOOST_NO_STDC_NAMESPACE
-
-namespace boost {
-namespace uuids {
-
-struct uuid
-{
-public:
-    typedef uint8_t value_type;
-    typedef uint8_t& reference;
-    typedef uint8_t const& const_reference;
-    typedef uint8_t* iterator;
-    typedef uint8_t const* const_iterator;
-    typedef std::size_t size_type;
-    typedef std::ptrdiff_t difference_type;
-
-    // This does not work on some compilers
-    // They seem to want the variable definec in 
-    // a cpp file
-    //BOOST_STATIC_CONSTANT(size_type, static_size = 16);
-    static size_type static_size() { return 16; }
-
-public:
-    iterator begin() { return data; } /* throw() */
-    const_iterator begin() const { return data; } /* throw() */
-    iterator end() { return data+size(); } /* throw() */
-    const_iterator end() const { return data+size(); } /* throw() */
-
-    size_type size() const { return static_size(); } /* throw() */
-
-    bool is_nil() const /* throw() */
-    {
-        for(size_t i=0; i<static_size(); i++) {
-            if (data[i] != 0U) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    enum variant_type
-    {
-        variant_ncs, // NCS backward compatibility
-        variant_rfc_4122, // defined in RFC 4122 document
-        variant_microsoft, // Microsoft Corporation backward compatibility
-        variant_future // future definition
-    };
-    variant_type variant() const /* throw() */
-    {
-        // variant is stored in octet 7
-        // which is index 8, since indexes count backwards
-        unsigned char octet7 = data[8]; // octet 7 is array index 8
-        if ( (octet7 & 0x80) == 0x00 ) { // 0b0xxxxxxx
-            return variant_ncs;
-        } else if ( (octet7 & 0xC0) == 0x80 ) { // 0b10xxxxxx
-            return variant_rfc_4122;
-        } else if ( (octet7 & 0xE0) == 0xC0 ) { // 0b110xxxxx
-            return variant_microsoft;
-        } else {
-            //assert( (octet7 & 0xE0) == 0xE0 ) // 0b111xxxx
-            return variant_future;
-        }
-    }
-    
-    enum version_type 
-    {
-        version_unknown = -1,
-        version_time_based = 1,
-        version_dce_security = 2,
-        version_name_based_md5 = 3,
-        version_random_number_based = 4,
-        version_name_based_sha1 = 5
-    };
-    version_type version() const /* throw() */
-    {
-        //version is stored in octet 9
-        // which is index 6, since indexes count backwards
-        unsigned char octet9 = data[6];
-        if ( (octet9 & 0xF0) == 0x10 ) {
-            return version_time_based;
-        } else if ( (octet9 & 0xF0) == 0x20 ) {
-            return version_dce_security;
-        } else if ( (octet9 & 0xF0) == 0x30 ) {
-            return version_name_based_md5;
-        } else if ( (octet9 & 0xF0) == 0x40 ) {
-            return version_random_number_based;
-        } else if ( (octet9 & 0xF0) == 0x50 ) {
-            return version_name_based_sha1;
-        } else {
-            return version_unknown;
-        }
-    }
-
-    // note: linear complexity
-    void swap(uuid& rhs) /* throw() */
-    {
-        std::swap_ranges(begin(), end(), rhs.begin());
-    }
-
-public:
-    // or should it be array<uint8_t, 16>
-    uint8_t data[16];
-};
-
-inline bool operator==(uuid const& lhs, uuid const& rhs) /* throw() */
-{
-    return std::equal(lhs.begin(), lhs.end(), rhs.begin());
-}
-
-inline bool operator!=(uuid const& lhs, uuid const& rhs) /* throw() */
-{
-    return !(lhs == rhs);
-}
-
-inline bool operator<(uuid const& lhs, uuid const& rhs) /* throw() */
-{
-    return std::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
-}
-
-inline bool operator>(uuid const& lhs, uuid const& rhs) /* throw() */
-{
-    return rhs < lhs;
-}
-inline bool operator<=(uuid const& lhs, uuid const& rhs) /* throw() */
-{
-    return !(rhs < lhs);
-}
-
-inline bool operator>=(uuid const& lhs, uuid const& rhs) /* throw() */
-{
-    return !(lhs < rhs);
-}
-
-inline void swap(uuid& lhs, uuid& rhs) /* throw() */
-{
-    lhs.swap(rhs);
-}
-
-// This is equivalent to boost::hash_range(u.begin(), u.end());
-inline std::size_t hash_value(uuid const& u) /* throw() */
-{
-    std::size_t seed = 0;
-    for(uuid::const_iterator i=u.begin(); i != u.end(); ++i)
-    {
-        seed ^= static_cast<std::size_t>(*i) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
-    }
-
-    return seed;
-}
-
-}} //namespace boost::uuids
-
-#ifndef BOOST_UUID_NO_TYPE_TRAITS
-// type traits specializations
-namespace boost {
-
-template <>
-struct is_pod<uuids::uuid> : true_type {};
-
-} // namespace boost
-#endif
-
-#if defined(_MSC_VER)
-#pragma warning(pop) // Restore warnings to previous state.
-#endif
-
-#endif // BOOST_UUID_HPP

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/boost_uuid/boost/uuid/uuid_generators.hpp
----------------------------------------------------------------------
diff --git a/thirdparty/boost_uuid/boost/uuid/uuid_generators.hpp b/thirdparty/boost_uuid/boost/uuid/uuid_generators.hpp
deleted file mode 100644
index 29d39cc..0000000
--- a/thirdparty/boost_uuid/boost/uuid/uuid_generators.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-// Boost uuid_generators.hpp header file  ----------------------------------------------//
-
-// Copyright 2006 Andy Tompkins.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// Revision History
-//  06 Feb 2006 - Initial Revision
-
-#ifndef BOOST_UUID_GENERATORS_HPP
-#define BOOST_UUID_GENERATORS_HPP
-
-#include <boost/uuid/nil_generator.hpp>
-#include <boost/uuid/string_generator.hpp>
-#include <boost/uuid/name_generator.hpp>
-#include <boost/uuid/random_generator.hpp>
-
-#endif //BOOST_UUID_GENERATORS_HPP

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/boost_uuid/boost/uuid/uuid_io.hpp
----------------------------------------------------------------------
diff --git a/thirdparty/boost_uuid/boost/uuid/uuid_io.hpp b/thirdparty/boost_uuid/boost/uuid/uuid_io.hpp
deleted file mode 100644
index 592a509..0000000
--- a/thirdparty/boost_uuid/boost/uuid/uuid_io.hpp
+++ /dev/null
@@ -1,198 +0,0 @@
-// Boost uuid_io.hpp header file  ----------------------------------------------//
-
-// Copyright 2009 Andy Tompkins.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// Revision History
-//  20 Mar 2009 - Initial Revision
-//  28 Nov 2009 - disabled deprecated warnings for MSVC
-
-#ifndef BOOST_UUID_IO_HPP
-#define BOOST_UUID_IO_HPP
-
-#include <boost/uuid/uuid.hpp>
-#include <ios>
-#include <ostream>
-#include <istream>
-#include <boost/io/ios_state.hpp>
-#include <locale>
-#include <algorithm>
-
-#if defined(_MSC_VER)
-#pragma warning(push) // Save warning settings.
-#pragma warning(disable : 4996) // Disable deprecated std::ctype<char>::widen, std::copy
-#endif
-
-namespace boost {
-namespace uuids {
-
-template <typename ch, typename char_traits>
-    std::basic_ostream<ch, char_traits>& operator<<(std::basic_ostream<ch, char_traits> &os, uuid const& u)
-{
-    io::ios_flags_saver flags_saver(os);
-    io::basic_ios_fill_saver<ch, char_traits> fill_saver(os);
-
-    const typename std::basic_ostream<ch, char_traits>::sentry ok(os);
-    if (ok) {
-        const std::streamsize width = os.width(0);
-        const std::streamsize uuid_width = 36;
-        const std::ios_base::fmtflags flags = os.flags();
-        const typename std::basic_ios<ch, char_traits>::char_type fill = os.fill();
-        if (flags & (std::ios_base::right | std::ios_base::internal)) {
-            for (std::streamsize i=uuid_width; i<width; i++) {
-                os << fill;
-            }
-        }
-
-        os << std::hex;
-        os.fill(os.widen('0'));
-
-        std::size_t i=0;
-        for (uuid::const_iterator i_data = u.begin(); i_data!=u.end(); ++i_data, ++i) {
-            os.width(2);
-            os << static_cast<unsigned int>(*i_data);
-            if (i == 3 || i == 5 || i == 7 || i == 9) {
-                os << os.widen('-');
-            }
-        }
-        
-        if (flags & std::ios_base::left) {
-            for (std::streamsize i=uuid_width; i<width; i++) {
-                os << fill;
-            }
-        }
-        
-        os.width(0); //used the width so reset it
-    }
-    return os;
-}
-
-template <typename ch, typename char_traits>
-    std::basic_istream<ch, char_traits>& operator>>(std::basic_istream<ch, char_traits> &is, uuid &u)
-{
-    const typename std::basic_istream<ch, char_traits>::sentry ok(is);
-    if (ok) {
-        unsigned char data[16];
-
-        typedef std::ctype<ch> ctype_t;
-        ctype_t const& ctype = std::use_facet<ctype_t>(is.getloc());
-
-        ch xdigits[16];
-        {
-            char szdigits[] = "0123456789ABCDEF";
-            ctype.widen(szdigits, szdigits+16, xdigits);
-        }
-        ch*const xdigits_end = xdigits+16;
-
-        ch c;
-        for (std::size_t i=0; i<u.size() && is; ++i) {
-            is >> c;
-            c = ctype.toupper(c);
-
-            ch* f = std::find(xdigits, xdigits_end, c);
-            if (f == xdigits_end) {
-                is.setstate(std::ios_base::failbit);
-                break;
-            }
-
-            unsigned char byte = static_cast<unsigned char>(std::distance(&xdigits[0], f));
-
-            is >> c;
-            c = ctype.toupper(c);
-            f = std::find(xdigits, xdigits_end, c);
-            if (f == xdigits_end) {
-                is.setstate(std::ios_base::failbit);
-                break;
-            }
-
-            byte <<= 4;
-            byte |= static_cast<unsigned char>(std::distance(&xdigits[0], f));
-
-            data[i] = byte;
-
-            if (is) {
-                if (i == 3 || i == 5 || i == 7 || i == 9) {
-                    is >> c;
-                    if (c != is.widen('-')) is.setstate(std::ios_base::failbit);
-                }
-            }
-        }
-
-        if (is) {
-            std::copy(data, data+16, u.begin());
-        }
-    }
-    return is;
-}
-
-namespace detail {
-inline char to_char(size_t i) {
-    if (i <= 9) {
-        return static_cast<char>('0' + i);
-    } else {
-        return static_cast<char>('a' + (i-10));
-    }
-}
-
-inline wchar_t to_wchar(size_t i) {
-    if (i <= 9) {
-        return static_cast<wchar_t>(L'0' + i);
-    } else {
-        return static_cast<wchar_t>(L'a' + (i-10));
-    }
-}
-
-} // namespace detail
-
-inline std::string to_string(uuid const& u)
-{
-    std::string result;
-    result.reserve(36);
-
-    std::size_t i=0;
-    for (uuid::const_iterator it_data = u.begin(); it_data!=u.end(); ++it_data, ++i) {
-        const size_t hi = ((*it_data) >> 4) & 0x0F;
-        result += detail::to_char(hi);
-
-        const size_t lo = (*it_data) & 0x0F;
-        result += detail::to_char(lo);
-
-        if (i == 3 || i == 5 || i == 7 || i == 9) {
-            result += '-';
-        }
-    }
-    return result;
-}
-
-#ifndef BOOST_NO_STD_WSTRING
-inline std::wstring to_wstring(uuid const& u)
-{
-    std::wstring result;
-    result.reserve(36);
-
-    std::size_t i=0;
-    for (uuid::const_iterator it_data = u.begin(); it_data!=u.end(); ++it_data, ++i) {
-        const size_t hi = ((*it_data) >> 4) & 0x0F;
-        result += detail::to_wchar(hi);
-
-        const size_t lo = (*it_data) & 0x0F;
-        result += detail::to_wchar(lo);
-
-        if (i == 3 || i == 5 || i == 7 || i == 9) {
-            result += L'-';
-        }
-    }
-    return result;
-}
-
-#endif
-
-}} //namespace boost::uuids
-
-#if defined(_MSC_VER)
-#pragma warning(pop) // Restore warnings to previous state.
-#endif
-
-#endif // BOOST_UUID_IO_HPP

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/boost_uuid/boost/uuid/uuid_serialize.hpp
----------------------------------------------------------------------
diff --git a/thirdparty/boost_uuid/boost/uuid/uuid_serialize.hpp b/thirdparty/boost_uuid/boost/uuid/uuid_serialize.hpp
deleted file mode 100644
index 3d8a608..0000000
--- a/thirdparty/boost_uuid/boost/uuid/uuid_serialize.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-// Boost uuid_serialize.hpp header file  ----------------------------------------------//
-
-// Copyright 2007 Andy Tompkins.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-
-// Revision History
-//  12 Nov 2007 - Initial Revision
-//  25 Feb 2008 - moved to namespace boost::uuids::detail
-
-#ifndef BOOST_UUID_SERIALIZE_HPP
-#define BOOST_UUID_SERIALIZE_HPP
-
-#include <boost/uuid/uuid.hpp>
-#include <boost/serialization/level.hpp>
-
-BOOST_CLASS_IMPLEMENTATION(boost::uuids::uuid, boost::serialization::primitive_type)
-
-#endif // BOOST_UUID_SERIALIZE_HPP

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/build-definitions.sh
----------------------------------------------------------------------
diff --git a/thirdparty/build-definitions.sh b/thirdparty/build-definitions.sh
index ae92700..9e6e970 100644
--- a/thirdparty/build-definitions.sh
+++ b/thirdparty/build-definitions.sh
@@ -288,14 +288,6 @@ build_crcutil() {
   make -j$PARALLEL install
 }
 
-build_boost_uuid() {
-  # Copy boost_uuid into the include directory.
-  # This is a header-only library which isn't present in some older versions of
-  # boost (eg the one on el6). So, we check it in and put it in our own include
-  # directory.
-  rsync -a $TP_DIR/boost_uuid/boost/ $PREFIX/include/boost/
-}
-
 build_cpplint() {
   # Copy cpplint tool into bin directory
   cp $GSG_DIR/cpplint/cpplint.py $PREFIX/bin/cpplint.py
@@ -329,3 +321,8 @@ build_nvml() {
     cp -a $NVML_DIR/src/nondebug/$LIB.{so*,a} $PREFIX/lib
   done
 }
+
+build_boost() {
+  # This is a header-only installation of Boost.
+  rsync -a $BOOST_DIR/boost $PREFIX/include
+}

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/build-thirdparty.sh
----------------------------------------------------------------------
diff --git a/thirdparty/build-thirdparty.sh b/thirdparty/build-thirdparty.sh
index e6dace7..9572f78 100755
--- a/thirdparty/build-thirdparty.sh
+++ b/thirdparty/build-thirdparty.sh
@@ -130,6 +130,7 @@ else
       "libstdcxx")  F_LIBSTDCXX=1 ;;
       "trace-viewer") F_TRACE_VIEWER=1 ;;
       "nvml")       F_NVML=1 ;;
+      "boost")      F_BOOST=1 ;;
       *)            echo "Unknown module: $arg"; exit 1 ;;
     esac
   done
@@ -204,8 +205,6 @@ if [ -n "$F_ALL" -o -n "$F_CURL" ]; then
   build_curl
 fi
 
-build_boost_uuid
-
 if [ -n "$F_ALL" -o -n "$F_GSG" ]; then
   build_cpplint
 fi
@@ -222,6 +221,10 @@ if [ -n "$OS_LINUX" ] && [ -n "$F_ALL" -o -n "$F_NVML" ]; then
   build_nvml
 fi
 
+if [ -n "$F_ALL" -o -n "$F_BOOST" ]; then
+  build_boost
+fi
+
 restore_env
 
 ### Build C++ dependencies

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/download-thirdparty.sh
----------------------------------------------------------------------
diff --git a/thirdparty/download-thirdparty.sh b/thirdparty/download-thirdparty.sh
index 5484cbc..84d6329 100755
--- a/thirdparty/download-thirdparty.sh
+++ b/thirdparty/download-thirdparty.sh
@@ -248,5 +248,16 @@ if [ -n "$OS_LINUX" -a ! -d $NVML_DIR ]; then
   fetch_and_expand nvml-${NVML_VERSION}.tar.gz
 fi
 
+BOOST_PATCHLEVEL=1
+delete_if_wrong_patchlevel $BOOST_DIR $BOOST_PATCHLEVEL
+if [ ! -d $BOOST_DIR ]; then
+  fetch_and_expand boost_${BOOST_VERSION}.tar.gz
+  pushd $BOOST_DIR
+  patch -p0 < $TP_DIR/patches/boost-issue-12179-fix-compilation-errors.patch
+  touch patchlevel-$BOOST_PATCHLEVEL
+  popd
+  echo
+fi
+
 echo "---------------"
 echo "Thirdparty dependencies downloaded successfully"

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/patches/boost-issue-12179-fix-compilation-errors.patch
----------------------------------------------------------------------
diff --git a/thirdparty/patches/boost-issue-12179-fix-compilation-errors.patch b/thirdparty/patches/boost-issue-12179-fix-compilation-errors.patch
new file mode 100644
index 0000000..6482abd
--- /dev/null
+++ b/thirdparty/patches/boost-issue-12179-fix-compilation-errors.patch
@@ -0,0 +1,11 @@
+--- boost/optional/optional_fwd.hpp	2016-05-05 14:13:30.000000000 -0700
++++ boost/optional/optional_fwd.hpp.new	2016-06-25 14:21:28.438835543 -0700
+@@ -16,7 +16,7 @@
+ #ifndef BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP
+ #define BOOST_OPTIONAL_OPTIONAL_FWD_FLC_19NOV2002_HPP
+ 
+-#include <boost/config/suffix.hpp>
++#include <boost/config.hpp>
+ 
+ namespace boost {
+ 

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/preflight.py
----------------------------------------------------------------------
diff --git a/thirdparty/preflight.py b/thirdparty/preflight.py
index 5a0b853..1f6ba15 100755
--- a/thirdparty/preflight.py
+++ b/thirdparty/preflight.py
@@ -117,21 +117,6 @@ def check_cxx11():
       flags=['--std=c++11']))
 
 
-def check_boost():
-  flags = ['-E']
-  if 'BOOST_ROOT' in os.environ:
-    flags += ['-I%s/include' % os.environ['BOOST_ROOT']]
-  try_do(
-    "Checking for boost_thread and boost_system headers",
-    ("Unable to compile a simple program that uses boost. " +
-     "Please check the boost dependencies are installed."),
-    lambda: compile("""
-      #include <boost/thread/locks.hpp>
-      #include <boost/system/config.hpp>
-      """,
-      flags=flags))
-
-
 def check_sasl():
   try_do(
     "Checking for cyrus-sasl headers",
@@ -154,7 +139,6 @@ def main():
   print "-------------------------"
   check_tools()
   check_cxx11()
-  check_boost()
   check_sasl()
   print "-------------"
   print "Pre-flight checks succeeded."

http://git-wip-us.apache.org/repos/asf/incubator-kudu/blob/5b83695b/thirdparty/vars.sh
----------------------------------------------------------------------
diff --git a/thirdparty/vars.sh b/thirdparty/vars.sh
index a88638c..0e3f379 100644
--- a/thirdparty/vars.sh
+++ b/thirdparty/vars.sh
@@ -141,3 +141,6 @@ TRACE_VIEWER_DIR=$TP_DIR/kudu-trace-viewer-${TRACE_VIEWER_VERSION}
 
 NVML_VERSION=1.0-b1
 NVML_DIR=$TP_DIR/nvml-$NVML_VERSION
+
+BOOST_VERSION=1_61_0
+BOOST_DIR=$TP_DIR/boost_$BOOST_VERSION