You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by be...@apache.org on 2015/07/22 02:50:06 UTC

[2/2] mesos git commit: Add CMake-based build system for the process library.

Add CMake-based build system for the process library.

See MESOS-898.

This commit is the second in a series of two commits that will introduce
a CMake-based build system for Mesos. The first introduced the build
system for the "core Mesos" project; this one will introduce a similar
system for the process library.

For more details see the "core Mesos" commit.

Review: https://reviews.apache.org/r/36514


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/619f45f0
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/619f45f0
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/619f45f0

Branch: refs/heads/master
Commit: 619f45f0f72381372fc31e824aec2aa5d27de467
Parents: 4c1aa47
Author: Alex Clemmer <cl...@gmail.com>
Authored: Tue Jul 21 17:24:26 2015 -0700
Committer: Benjamin Hindman <be...@gmail.com>
Committed: Tue Jul 21 17:49:53 2015 -0700

----------------------------------------------------------------------
 3rdparty/libprocess/3rdparty/CMakeLists.txt     | 138 +++++++++++++++++
 3rdparty/libprocess/CMakeLists.txt              |  28 ++++
 .../libprocess/cmake/ProcessConfigure.cmake     | 148 +++++++++++++++++++
 .../cmake/ProcessTestsConfigure.cmake           |  50 +++++++
 3rdparty/libprocess/cmake/macros/External.cmake |  80 ++++++++++
 .../libprocess/cmake/macros/PatchCommand.cmake  |  29 ++++
 3rdparty/libprocess/src/CMakeLists.txt          |  74 ++++++++++
 3rdparty/libprocess/src/tests/CMakeLists.txt    |  57 +++++++
 8 files changed, 604 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/619f45f0/3rdparty/libprocess/3rdparty/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/CMakeLists.txt b/3rdparty/libprocess/3rdparty/CMakeLists.txt
new file mode 100644
index 0000000..fc6125e
--- /dev/null
+++ b/3rdparty/libprocess/3rdparty/CMakeLists.txt
@@ -0,0 +1,138 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+include(ExternalProject)
+
+# Downloads, configures, and compiles the third party libraries for the process
+# library (i.e., 3rdparty/libprocess/3rdparty).
+
+# DEFINE SOURCES OF THIRD_PARTY DEPENDENCIES.
+#############################################
+set(REBUNDLED_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+if (REBUNDLED)
+  set(BOOST_URL       ${REBUNDLED_DIR}/boost-${BOOST_VERSION}.tar.gz)
+  set(GLOG_URL        ${REBUNDLED_DIR}/glog-${GLOG_VERSION}.tar.gz)
+  set(PICOJSON_URL    ${REBUNDLED_DIR}/picojson-${PICOJSON_VERSION}.tar.gz)
+  set(HTTP_PARSER_URL ${REBUNDLED_DIR}/ry-http-parser-${HTTP_PARSER_VERSION}.tar.gz)
+  set(LIBEV_URL       ${REBUNDLED_DIR}/libev-${LIBEV_VERSION}.tar.gz)
+else (REBUNDLED)
+  # TODO(hausdorff): depends on the github mirror, should remove when possible.
+  set(BOOST_URL       https://github.com/apache/mesos/raw/master/3rdparty/libprocess/3rdparty/boost-${BOOST_VERSION}.tar.gz)
+  set(GLOG_URL        https://google-glog.googlecode.com/files/glog-${GLOG_VERSION}.tar.gz)
+  # NOTE: This url can't be versioned like the others, because it depends on
+  #       specific commit, and isn't in our upstream.
+  set(PICOJSON_URL    https://github.com/kazuho/picojson/tarball/4f93734ade33ea0f5e5b4de35fc6b2c324a8dca6)
+  # TODO(hausdorff): depends on the github mirror, should remove when possible.
+  set(HTTP_PARSER_URL https://github.com/apache/mesos/raw/master/3rdparty/libprocess/3rdparty/ry-http-parser-${HTTP_PARSER_VERSION}.tar.gz)
+  # TODO(hausdorff): depends on the github mirror, should remove when possible.
+  set(LIBEV_URL       https://github.com/apache/mesos/raw/master/3rdparty/libprocess/3rdparty/libev-${LIBEV_VERSION}.tar.gz)
+endif (REBUNDLED)
+
+# DEFINE BUILD/PATCH/CONFIGURE COMMANDS FOR THIRD-PARTY LIBS.
+#############################################################
+if (NOT WIN32)
+  set(GLOG_CONFIG_CMD  ${GLOG_ROOT}/src/../configure --prefix=${GLOG_LIB})
+  set(GLOG_BUILD_CMD   make)
+  set(GLOG_INSTALL_CMD make install)
+  # Patch glog to deal with a problem that appears when compiling on clang
+  # under the C++11 standard. cf. MESOS-860, MESOS-966.
+  PATCH_CMD(${PROCESS_3RD_SRC}/glog-0.3.3.patch GLOG_PATCH_CMD)
+
+  set(RY_BUILD_CMD   make -C ${HTTP_PARSER_ROOT})
+  set(RY_INSTALL_CMD ar -rv libhttp_parser.a ${HTTP_PARSER_ROOT}/http_parser_g.o)
+
+  set(LIBEV_CONFIG_CMD ${LIBEV_ROOT}/configure)
+  set(LIBEV_BUILD_CMD  make)
+  # Patch libev to keep it from reaping child processes.
+  PATCH_CMD(${PROCESS_3RD_SRC}/libev-4.15.patch LIBEV_PATCH_CMD)
+endif (NOT WIN32)
+
+# THIRD-PARTY LIBRARIES. Tell the build system how to pull in and build third-
+# party libraries at compile time, using the ExternalProject_Add macro.
+##############################################################################
+ExternalProject_Add(
+  ${BOOST_TARGET}
+  PREFIX            ${BOOST_CMAKE_ROOT}
+  CONFIGURE_COMMAND ""
+  BUILD_COMMAND     ""
+  INSTALL_COMMAND   ""
+  URL               "${BOOST_URL}"
+  )
+
+ExternalProject_Add(
+  ${GLOG_TARGET}
+  PREFIX            ${GLOG_CMAKE_ROOT}
+  # Quotes are important in the following commands. Building glog on WIN32
+  # must be done in Visual Studio, and in that case, these commands must be
+  # nops. But if you take out the quote marks, CMake will treat this as an
+  # empty build command, and will attempt to build glog as a CMake project.
+  PATCH_COMMAND     "${GLOG_PATCH_CMD}"
+  CONFIGURE_COMMAND "${GLOG_CONFIG_CMD}"
+  BUILD_COMMAND     "${GLOG_BUILD_CMD}"
+  INSTALL_COMMAND   "${GLOG_INSTALL_CMD}"
+  URL               "${GLOG_URL}"
+  )
+
+ExternalProject_Add(
+  ${PICOJSON_TARGET}
+  PREFIX            ${PICOJSON_CMAKE_ROOT}
+  DOWNLOAD_NAME     ${PICOJSON_TARGET}.tar.gz
+  CONFIGURE_COMMAND ""
+  BUILD_COMMAND     ""
+  INSTALL_COMMAND   ""
+  URL               "${PICOJSON_URL}"
+  )
+
+ExternalProject_Add(
+  ${HTTP_PARSER_TARGET}
+  PREFIX            ${HTTP_PARSER_CMAKE_ROOT}
+  CONFIGURE_COMMAND ""
+  BUILD_COMMAND     "${RY_BUILD_CMD}"
+  INSTALL_COMMAND   "${RY_INSTALL_CMD}"
+  URL               "${HTTP_PARSER_URL}"
+  )
+
+ExternalProject_Add(
+  ${LIBEV_TARGET}
+  PREFIX            ${LIBEV_CMAKE_ROOT}
+  PATCH_COMMAND     "${LIBEV_PATCH_CMD}"
+  CONFIGURE_COMMAND "${LIBEV_CONFIG_CMD}"
+  BUILD_COMMAND     "${LIBEV_BUILD_CMD}"
+  INSTALL_COMMAND   ""
+  URL               "${LIBEV_URL}"
+  )
+
+# THIRD-PARTY LIBRARIES FOR TESTS.
+##################################
+if (REBUNDLED)
+  set(GMOCK_URL       ${REBUNDLED_DIR}/gmock-${GMOCK_VERSION}.tar.gz)
+else (REBUNDLED)
+  # TODO(hausdorff): depends on the github mirror, should remove when possible.
+  set(GMOCK_URL       https://github.com/apache/mesos/raw/master/3rdparty/libprocess/3rdparty/gmock-${GMOCK_VERSION}.tar.gz)
+endif (REBUNDLED)
+
+if (NOT WIN32)
+  set(GMOCK_CONFIG_CMD  ${GMOCK_ROOT}/configure --prefix=${GMOCK_ROOT}-lib/lib)
+  set(GMOCK_BUILD_CMD   make)
+endif (NOT WIN32)
+
+ExternalProject_Add(
+  ${GMOCK_TARGET}
+  PREFIX            ${GMOCK_CMAKE_ROOT}
+  CONFIGURE_COMMAND "${GMOCK_CONFIG_CMD}"
+  BUILD_COMMAND     "${GMOCK_BUILD_CMD}"
+  INSTALL_COMMAND   ""
+  URL               "${GMOCK_URL}"
+  )

http://git-wip-us.apache.org/repos/asf/mesos/blob/619f45f0/3rdparty/libprocess/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/CMakeLists.txt b/3rdparty/libprocess/CMakeLists.txt
new file mode 100755
index 0000000..6bc5a68
--- /dev/null
+++ b/3rdparty/libprocess/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+include(ProcessTestsConfigure)
+
+# BUILD THIRD-PARTY DEPENDENCIES FIRST.
+#######################################
+add_subdirectory(3rdparty)
+
+# BUILD THE PROCESS LIBRARY.
+############################
+add_subdirectory(src)
+
+# PROCESS TESTING INFRASTRUCTURE.
+#################################
+add_subdirectory(src/tests)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/mesos/blob/619f45f0/3rdparty/libprocess/cmake/ProcessConfigure.cmake
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/cmake/ProcessConfigure.cmake b/3rdparty/libprocess/cmake/ProcessConfigure.cmake
new file mode 100755
index 0000000..cb5fd1d
--- /dev/null
+++ b/3rdparty/libprocess/cmake/ProcessConfigure.cmake
@@ -0,0 +1,148 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+###############################################################
+# EXPORTS VARIABLES NEEDED TO LINK TO THIRD-PARTY LIBS. These are used
+# throughout the Mesos project.
+#
+# THIS INCLUDES things like:
+#   * "Public interface" stuff, like which headers we need in order to link to
+#     libprocess.
+#   * Where to look to find built libraries.
+#   * Version information of the third-party libraries in use.
+#
+# This DOES NOT include:
+#   * Where to find include headers for tests -- the rest of Mesos does not
+#     need this information.
+#   * Any information about how to build these libraries. That's in
+#     libprocess/CMakeLists.txt
+#   * Information required to build third-party libraries, wuch as what source
+#     files we need to compile libprocess.
+#   * Build commands actually used to compile (e.g.) libprocess.
+#
+# RATIONALE: Autoconf makes linking to third party dependencies as simple as
+# pointing at the underlying makefile. In CMake, this is harder because we do
+# not assume there are Makefiles at all. Thus, it is useful to export variables
+# with things like which header files you need to include to link to third
+# party libraries, and where in the directory tree you need to look to get the
+# actual libraries.
+
+set(PROCESS_PACKAGE_VERSION 0.0.1)
+set(PROCESS_PACKAGE_SOVERSION 0)
+set(PROCESS_TARGET process-${PROCESS_PACKAGE_VERSION})
+
+# VARIABLES REQUIRED TO RUN CONFIG SCRIPTS.
+###########################################
+set(PROTOBUF_VERSION       2.5.0)
+
+# DEFINE DIRECTORY STRUCTURE FOR THIRD-PARTY LIBS.
+##################################################
+set(PROCESS_3RD_SRC ${CMAKE_SOURCE_DIR}/3rdparty/libprocess/3rdparty/)
+set(PROCESS_3RD_BIN ${CMAKE_BINARY_DIR}/3rdparty/libprocess/3rdparty/)
+
+set(STOUT ${PROCESS_3RD_SRC}/stout)
+
+EXTERNAL("boost"       "1.53.0"  "${PROCESS_3RD_BIN}")
+EXTERNAL("glog"        "0.3.3"   "${PROCESS_3RD_BIN}")
+EXTERNAL("picojson"    "4f93734" "${PROCESS_3RD_BIN}")
+EXTERNAL("http_parser" "1c3624a" "${PROCESS_3RD_BIN}")
+EXTERNAL("libev"       "4.15"    "${PROCESS_3RD_BIN}")
+
+set(GLOG_LIB ${GLOG_ROOT}-lib/lib)
+
+# DEFINE PROCESS LIBRARY DEPENDENCIES. Tells the process library build targets
+# download/configure/build all third-party libraries before attempting to build.
+################################################################################
+set(PROCESS_DEPENDENCIES
+  ${PROCESS_DEPENDENCIES}
+  ${BOOST_TARGET}
+  ${GLOG_TARGET}
+  ${PICOJSON_TARGET}
+  ${HTTP_PARSER_TARGET}
+  ${LIBEV_TARGET}
+  )
+
+# DEFINE THIRD-PARTY INCLUDE DIRECTORIES. Tells compiler toolchain where to get
+# headers for our third party libs (e.g., -I/path/to/glog on Linux).
+###############################################################################
+set(PROCESS_INCLUDE_DIRS
+  ${PROCESS_INCLUDE_DIRS}
+  ${PROCESS_3RD_SRC}/../include
+  ${STOUT}/include
+  ${BOOST_ROOT}
+  ${LIBEV_ROOT}
+  ${PICOJSON_ROOT}
+  )
+
+if (WIN32)
+  set(PROCESS_INCLUDE_DIRS
+    ${PROCESS_INCLUDE_DIRS}
+    ${GLOG_ROOT}/src/windows
+    )
+else (WIN32)
+  set(PROCESS_INCLUDE_DIRS
+    ${PROCESS_INCLUDE_DIRS}
+    ${GLOG_LIB}/include
+    )
+endif (WIN32)
+
+set(PROCESS_INCLUDE_DIRS
+  ${PROCESS_INCLUDE_DIRS}
+  ${HTTP_PARSER_ROOT}
+  )
+
+if (HAS_GPERFTOOLS)
+  set(PROCESS_INCLUDE_DIRS
+    ${PROCESS_INCLUDE_DIRS}
+    ${GPERFTOOLS}/src
+    )
+endif (HAS_GPERFTOOLS)
+
+# DEFINE THIRD-PARTY LIB INSTALL DIRECTORIES. Used to tell the compiler
+# toolchain where to find our third party libs (e.g., -L/path/to/glog on
+# Linux).
+########################################################################
+set(PROCESS_LIB_DIRS
+  ${PROCESS_LIB_DIRS}
+  ${GLOG_LIB}/lib
+  ${LIBEV_ROOT}-build/.libs
+  ${HTTP_PARSER_ROOT}-build
+  )
+
+# DEFINE THIRD-PARTY LIBS. Used to generate flags that the linker uses to
+# include our third-party libs (e.g., -lglog on Linux).
+#########################################################################
+find_package(Threads REQUIRED)
+
+set(PROCESS_LIBS
+  ${PROCESS_LIBS}
+  ${PROCESS_TARGET}
+  glog
+  ev
+  http_parser
+  ${CMAKE_THREAD_LIBS_INIT}
+  )
+
+if (NOT WIN32)
+  find_package(ZLIB REQUIRED)
+  find_library(LIBRT_LIBRARIES rt REQUIRED)
+
+  set(PROCESS_LIBS
+    ${PROCESS_LIBS}
+    ${ZLIB_LIBRARIES}
+    ${LIBRT_LIBRARIES}
+    )
+endif (NOT WIN32)

http://git-wip-us.apache.org/repos/asf/mesos/blob/619f45f0/3rdparty/libprocess/cmake/ProcessTestsConfigure.cmake
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/cmake/ProcessTestsConfigure.cmake b/3rdparty/libprocess/cmake/ProcessTestsConfigure.cmake
new file mode 100644
index 0000000..d349d2e
--- /dev/null
+++ b/3rdparty/libprocess/cmake/ProcessTestsConfigure.cmake
@@ -0,0 +1,50 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+###############################################################
+# Defines the variables useful for tests, and exports them to the scope of
+# whatever file includes this file. There are a few important consequence of this:
+#
+#   * This file MUST be included before the third-party dependencies like gmock
+#     are configured/built/downloaded (if you're doing this). If this code isn't
+#     run first, then we won't know (e.g.) what folders to unpack the code to.
+#   * This file ONLY defines and exports variables for third-party dependencies
+#     that are required by the test suite, but are not a dependency that
+#     libprocess core takes. That is, this file handles the gmock dependency,
+#     but not the glog dependency (which the process library itself takes a
+#     dependency on).
+#   * This file and the config file for the libprocess "core" dependencies (e.g.,
+#     glog, boost, etc.) so that we can export the variables for the core
+#     dependencies (e.g., where to find the .so/.dll files) without having to also
+#     export the variables for the dependencies that only the test package has.
+
+# DIRECTORY STRUCTURE FOR THIRD-PARTY LIBS REQUIRED FOR TEST INFRASTRUCTURE.
+###########################################################################
+EXTERNAL("gmock" "1.6.0" "${PROCESS_3RD_BIN}")
+
+set(GTEST_SRC          ${GMOCK_ROOT}/gtest)
+set(GPERFTOOLS_VERSION 2.0)
+set(GPERFTOOLS         ${PROCESS_3RD_BIN}/gperftools-${GPERFTOOLS_VERSION})
+
+# DEFINE PROCESS TEST LIBRARY DEPENDENCIES. Tells the process library build
+# tests target download/configure/build all third-party libraries before
+# attempting to build.
+###########################################################################
+set(PROCESS_TEST_DEPENDENCIES
+  ${PROCESS_TEST_DEPENDENCIES}
+  ${PROCESS_DEPENDENCIES}
+  ${GMOCK_TARGET}
+  )

http://git-wip-us.apache.org/repos/asf/mesos/blob/619f45f0/3rdparty/libprocess/cmake/macros/External.cmake
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/cmake/macros/External.cmake b/3rdparty/libprocess/cmake/macros/External.cmake
new file mode 100644
index 0000000..e3901b6
--- /dev/null
+++ b/3rdparty/libprocess/cmake/macros/External.cmake
@@ -0,0 +1,80 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+###############################################################
+# EXTERNAL defines a few variables that make it easy for us to track the
+# directory structure of a dependency. In particular, if our library's name is
+# boost, we will define the following variables:
+#
+#   BOOST_VERSION    (e.g., 1.53.0)
+#   BOOST_TARGET     (a target folder name to put dep in e.g., boost-1.53.0)
+#   BOOST_CMAKE_ROOT (where to have CMake put the uncompressed source, e.g.,
+#                     build/3rdparty/libprocess/3rdparty/boost-1.53.0)
+#   BOOST_ROOT       (where the code goes in various stages of build, e.g.,
+#                     build/.../boost-1.53.0/src, which might contain folders
+#                     build-1.53.0-build, -lib, and so on, for each build step
+#                     that dependency has)
+function(EXTERNAL
+  LIB_NAME
+  LIB_VERSION
+  BIN_ROOT)
+
+  string(TOUPPER ${LIB_NAME} LIB_NAME_UPPER)
+
+  # Names of variables we will set in this function.
+  set(VERSION_VAR    ${LIB_NAME_UPPER}_VERSION)    # e.g., BOOST_VERSION
+  set(TARGET_VAR     ${LIB_NAME_UPPER}_TARGET)     # e.g., BOOST_TARGET
+  set(CMAKE_ROOT_VAR ${LIB_NAME_UPPER}_CMAKE_ROOT) # e.g., BOOST_CMAKE_ROOT
+  set(ROOT_VAR       ${LIB_NAME_UPPER}_ROOT)       # e.g., BOOST_ROOT
+
+  # Generate data that we will put in the above variables.
+  # NOTE: bundled packages are untar'd into the BIN_ROOT, which is why we're
+  #       pointing the source root into BIN_ROOT rather than SRC_ROOT.
+  # TODO(hausdorff): SRC_DATA doesn't work for HTTP, LIBEV, GMOCK, or GTEST.
+  set(VERSION_DATA    ${LIB_VERSION})
+  set(TARGET_DATA     ${LIB_NAME}-${VERSION_DATA})
+  set(CMAKE_ROOT_DATA ${BIN_ROOT}/${TARGET_DATA})
+  set(ROOT_DATA       ${CMAKE_ROOT_DATA}/src/${TARGET_DATA})
+
+  # Finally, EXPORT THE ABOVE VARIABLES. We take the data variables we just
+  # defined, and export them to variables in the parent scope.
+  #
+  # NOTE: The "export" step is different from the "define the data vars" step
+  #       because an expression like ${VERSION_VAR} will evaluate to
+  #       something like "BOOST_VERSION", not something like "1.53.0". That
+  #       is: to get the version in the parent scope we would do something
+  #       like ${BOOST_VERSION}, which might evaluate to something like
+  #       "1.53.0". So in this function, if you wanted to generate (e.g.) the
+  #       target variable, it is not sufficient to write
+  #       "${LIB_NAME}-${VERSION_VAR}", because this would result in
+  #       something like "boost-BOOST_VERSION" when what we really wanted was
+  #       "boost-1.53.0". Hence, these two steps are different.
+  set(${VERSION_VAR}    # e.g., 1.53.0
+    ${VERSION_DATA}
+    PARENT_SCOPE)
+
+  set(${TARGET_VAR}     # e.g., boost-1.53.0
+    ${TARGET_DATA}
+    PARENT_SCOPE)
+
+  set(${CMAKE_ROOT_VAR} # e.g., build/3rdparty/libprocess/3rdparty/boost-1.53.0
+    ${CMAKE_ROOT_DATA}
+    PARENT_SCOPE)
+
+  set(${ROOT_VAR}       # e.g., build/.../boost-1.53.0/src
+    ${ROOT_DATA}
+    PARENT_SCOPE)
+endfunction()

http://git-wip-us.apache.org/repos/asf/mesos/blob/619f45f0/3rdparty/libprocess/cmake/macros/PatchCommand.cmake
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/cmake/macros/PatchCommand.cmake b/3rdparty/libprocess/cmake/macros/PatchCommand.cmake
new file mode 100644
index 0000000..12ee3f1
--- /dev/null
+++ b/3rdparty/libprocess/cmake/macros/PatchCommand.cmake
@@ -0,0 +1,29 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+##############################################################
+# PATCH_CMD generates a patch command for those dependencies that need it. For
+# example, when the rebundled version of GLOG needs to be patched, we would run
+# this command.
+function(PATCH_CMD patch_filename patch_cmd_varname)
+  # CMake does not appear to have a good way for macro functions to return
+  # values, so here we assign the patch command to a variable in the
+  # PARENT_SCOPE. (The name of the variable to assign to in the parent scope
+  # is passed in as a parameter to the macro function.)
+  set (${patch_cmd_varname}
+    test ! -e ${patch_filename} || patch -p1 < ${patch_filename}
+    PARENT_SCOPE)
+endfunction()
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/mesos/blob/619f45f0/3rdparty/libprocess/src/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/CMakeLists.txt b/3rdparty/libprocess/src/CMakeLists.txt
new file mode 100644
index 0000000..9d1b1f5
--- /dev/null
+++ b/3rdparty/libprocess/src/CMakeLists.txt
@@ -0,0 +1,74 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# SOURCE FILES FOR THE PROCESS LIBRARY.
+#######################################
+set(PROCESS_SRC
+  ${PROCESS_SRC}
+  clock.cpp
+  config.hpp
+  decoder.hpp
+  encoder.hpp
+  event_loop.hpp
+  gate.hpp
+  help.cpp
+  http.cpp
+  io.cpp
+  latch.cpp
+  logging.cpp
+  metrics/metrics.cpp
+  pid.cpp
+  poll_socket.cpp
+  poll_socket.hpp
+  profiler.cpp
+  process.cpp
+  process_reference.hpp
+  reap.cpp
+  socket.cpp
+  subprocess.cpp
+  time.cpp
+  timeseries.cpp
+  )
+
+if (ENABLE_LIBEVENT)
+  set(PROCESS_SRC
+    ${PROCESS_SRC}
+    libevent.hpp
+    libevent.cpp
+    libevent_poll.cpp)
+else (ENABLE_LIBEVENT)
+  set(PROCESS_SRC
+    ${PROCESS_SRC}
+    libev.hpp
+    libev.cpp
+    libev_poll.cpp
+    )
+endif (ENABLE_LIBEVENT)
+
+# INCLUDE DIRECTIVES FOR PROCESS LIBRARY (generates, e.g., -I/path/to/thing
+# on Linux).
+###########################################################################
+include_directories(${PROCESS_INCLUDE_DIRS})
+
+# THE PROCESS LIBRARY (generates, e.g., libprocess.so, etc., on Linux).
+#######################################################################
+add_library(${PROCESS_TARGET} ${PROCESS_SRC})
+set_target_properties(
+  ${PROCESS_TARGET} PROPERTIES
+  VERSION ${PROCESS_PACKAGE_VERSION}
+  SOVERSION ${PROCESS_PACKAGE_SOVERSION}
+  )
+add_dependencies(${PROCESS_TARGET} ${PROCESS_DEPENDENCIES})

http://git-wip-us.apache.org/repos/asf/mesos/blob/619f45f0/3rdparty/libprocess/src/tests/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/tests/CMakeLists.txt b/3rdparty/libprocess/src/tests/CMakeLists.txt
new file mode 100644
index 0000000..56b1861
--- /dev/null
+++ b/3rdparty/libprocess/src/tests/CMakeLists.txt
@@ -0,0 +1,57 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set(PROCESS_TESTS_SRC
+  ${PROCESS_TESTS_SRC}
+  decoder_tests.cpp
+  encoder_tests.cpp
+  http_tests.cpp
+  io_tests.cpp
+  limiter_tests.cpp
+  main.cpp
+  mutex_tests.cpp
+  metrics_tests.cpp
+  owned_tests.cpp
+  process_tests.cpp
+  queue_tests.cpp
+  reap_tests.cpp
+  sequence_tests.cpp
+  shared_tests.cpp
+  statistics_tests.cpp
+  subprocess_tests.cpp
+  system_tests.cpp
+  timeseries_tests.cpp
+  time_tests.cpp
+  )
+
+include_directories(
+  ../   # includes, e.g., decoder.hpp
+  ${PROCESS_INCLUDE_DIRS}
+  ${GMOCK_ROOT}/include
+  ${GTEST_SRC}/include
+  src
+  )
+
+link_directories(
+  ${PROCESS_LIB_DIRS}
+  ${GMOCK_ROOT}-build/lib/.libs
+  ${GMOCK_ROOT}-build/gtest/lib/.libs
+  )
+
+add_executable(tests ${PROCESS_TESTS_SRC})
+target_link_libraries(tests ${PROCESS_LIBS} gmock gtest)
+add_dependencies(tests ${PROCESS_TEST_DEPENDENCIES})
+add_test(NAME ProcessTests COMMAND ./tests)
\ No newline at end of file