Wire up CMake support for building and running Stout tests.

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


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

Branch: refs/heads/master
Commit: f0ee4aa3d169f195d6d348305711229f474fb39d
Parents: 8017e73
Author: Alex Clemmer <[email protected]>
Authored: Thu Jul 23 09:21:24 2015 -0700
Committer: Benjamin Hindman <[email protected]>
Committed: Thu Jul 23 09:21:24 2015 -0700

----------------------------------------------------------------------
 3rdparty/libprocess/3rdparty/CMakeLists.txt     | 90 ++++++++++++++------
 .../libprocess/cmake/ProcessConfigure.cmake     |  4 -
 .../cmake/ProcessTestsConfigure.cmake           | 39 ++++++++-
 3rdparty/libprocess/src/tests/CMakeLists.txt    | 43 ++++++----
 4 files changed, 129 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/f0ee4aa3/3rdparty/libprocess/3rdparty/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/CMakeLists.txt 
b/3rdparty/libprocess/3rdparty/CMakeLists.txt
index fc6125e..851ab94 100644
--- a/3rdparty/libprocess/3rdparty/CMakeLists.txt
+++ b/3rdparty/libprocess/3rdparty/CMakeLists.txt
@@ -13,6 +13,7 @@
 # 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
@@ -57,6 +58,22 @@ if (NOT WIN32)
   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)
+else (NOT WIN32)
+  # 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.
+  set(GLOG_CONFIG_CMD  "")
+  set(GLOG_BUILD_CMD   "")
+  set(GLOG_INSTALL_CMD "")
+  set(GLOG_PATCH_CMD   "")
+
+  set(RY_BUILD_CMD   "")
+  set(RY_INSTALL_CMD "")
+
+  set(LIBEV_CONFIG_CMD "")
+  set(LIBEV_BUILD_CMD  "")
+  set(LIBEV_PATCH_CMD  "")
 endif (NOT WIN32)
 
 # THIRD-PARTY LIBRARIES. Tell the build system how to pull in and build third-
@@ -68,21 +85,17 @@ ExternalProject_Add(
   CONFIGURE_COMMAND ""
   BUILD_COMMAND     ""
   INSTALL_COMMAND   ""
-  URL               "${BOOST_URL}"
+  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}"
+  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(
@@ -92,47 +105,74 @@ ExternalProject_Add(
   CONFIGURE_COMMAND ""
   BUILD_COMMAND     ""
   INSTALL_COMMAND   ""
-  URL               "${PICOJSON_URL}"
+  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}"
+  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}"
+  PATCH_COMMAND     ${LIBEV_PATCH_CMD}
+  CONFIGURE_COMMAND ${LIBEV_CONFIG_CMD}
+  BUILD_COMMAND     ${LIBEV_BUILD_CMD}
   INSTALL_COMMAND   ""
-  URL               "${LIBEV_URL}"
+  URL               ${LIBEV_URL}
   )
 
 # THIRD-PARTY LIBRARIES FOR TESTS.
 ##################################
 if (REBUNDLED)
-  set(GMOCK_URL       ${REBUNDLED_DIR}/gmock-${GMOCK_VERSION}.tar.gz)
+  set(GMOCK_URL    ${REBUNDLED_DIR}/gmock-${GMOCK_VERSION}.tar.gz)
+  set(PROTOBUF_URL ${REBUNDLED_DIR}/protobuf-${PROTOBUF_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)
+  set(GMOCK_URL    
https://github.com/apache/mesos/raw/master/3rdparty/libprocess/3rdparty/gmock-${GMOCK_VERSION}.tar.gz)
+  # TODO(hausdorff): depends on the github mirror, should remove when possible.
+  set(PROTOBUF_URL 
https://github.com/hausdorff/mesos/raw/test_cmake/3rdparty/libprocess/3rdparty/protobuf-${PROTOBUF_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)
+  set(GMOCK_CONFIG_CMD ${GMOCK_ROOT}/configure --prefix=${GMOCK_ROOT}-lib/lib)
+  set(GMOCK_BUILD_CMD  make)
+
+  set(PROTOBUF_CONFIG_CMD  ${PROTOBUF_ROOT}/src/../configure 
--prefix=${PROTOBUF_LIB})
+  set(PROTOBUF_BUILD_CMD   make)
+  set(PROTOBUF_INSTALL_CMD make install)
+
 endif (NOT WIN32)
 
 ExternalProject_Add(
   ${GMOCK_TARGET}
   PREFIX            ${GMOCK_CMAKE_ROOT}
-  CONFIGURE_COMMAND "${GMOCK_CONFIG_CMD}"
-  BUILD_COMMAND     "${GMOCK_BUILD_CMD}"
+  CONFIGURE_COMMAND ${GMOCK_CONFIG_CMD}
+  BUILD_COMMAND     ${GMOCK_BUILD_CMD}
   INSTALL_COMMAND   ""
-  URL               "${GMOCK_URL}"
+  URL               ${GMOCK_URL}
+  )
+
+ExternalProject_Add(
+  ${PROTOBUF_TARGET}
+  PREFIX            ${PROTOBUF_CMAKE_ROOT}
+  PATCH_COMMAND     ${PROTOBUF_PATCH_CMD}
+  CONFIGURE_COMMAND ${PROTOBUF_CONFIG_CMD}
+  BUILD_COMMAND     ${PROTOBUF_BUILD_CMD}
+  INSTALL_COMMAND   ${PROTOBUF_INSTALL_CMD}
+  URL               ${PROTOBUF_URL}
+  )
+
+# STOUT TESTING INFRASTRUCTURE.
+###############################
+list(
+  APPEND CMAKE_MODULE_PATH
+  ${CMAKE_SOURCE_DIR}/3rdparty/libprocess/3rdparty/stout/cmake
   )
+include(StoutTestsConfigure)
+add_subdirectory(stout/tests)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/mesos/blob/f0ee4aa3/3rdparty/libprocess/cmake/ProcessConfigure.cmake
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/cmake/ProcessConfigure.cmake 
b/3rdparty/libprocess/cmake/ProcessConfigure.cmake
index cb5fd1d..d6cdd05 100755
--- a/3rdparty/libprocess/cmake/ProcessConfigure.cmake
+++ b/3rdparty/libprocess/cmake/ProcessConfigure.cmake
@@ -44,10 +44,6 @@ 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/)

http://git-wip-us.apache.org/repos/asf/mesos/blob/f0ee4aa3/3rdparty/libprocess/cmake/ProcessTestsConfigure.cmake
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/cmake/ProcessTestsConfigure.cmake 
b/3rdparty/libprocess/cmake/ProcessTestsConfigure.cmake
index d349d2e..082489c 100644
--- a/3rdparty/libprocess/cmake/ProcessTestsConfigure.cmake
+++ b/3rdparty/libprocess/cmake/ProcessTestsConfigure.cmake
@@ -32,8 +32,9 @@
 #     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}")
+############################################################################
+EXTERNAL("gmock"    "1.6.0" "${PROCESS_3RD_BIN}")
+EXTERNAL("protobuf" "2.5.0" "${PROCESS_3RD_BIN}")
 
 set(GTEST_SRC          ${GMOCK_ROOT}/gtest)
 set(GPERFTOOLS_VERSION 2.0)
@@ -46,5 +47,39 @@ set(GPERFTOOLS         
${PROCESS_3RD_BIN}/gperftools-${GPERFTOOLS_VERSION})
 set(PROCESS_TEST_DEPENDENCIES
   ${PROCESS_TEST_DEPENDENCIES}
   ${PROCESS_DEPENDENCIES}
+  ${PROTOBUF_TARGET}
   ${GMOCK_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_TEST_INCLUDE_DIRS
+  ${PROCESS_TEST_INCLUDE_DIRS}
+  ../   # includes, e.g., decoder.hpp
+  ${PROCESS_INCLUDE_DIRS}
+  ${GMOCK_ROOT}/include
+  ${GTEST_SRC}/include
+  src
+  )
+
+# 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_TEST_LIB_DIRS
+  ${PROCESS_TEST_LIB_DIRS}
+  ${PROCESS_LIB_DIRS}
+  ${GMOCK_ROOT}-build/lib/.libs
+  ${GMOCK_ROOT}-build/gtest/lib/.libs
+  )
+
+# DEFINE THIRD-PARTY LIBS. Used to generate flags that the linker uses to
+# include our third-party libs (e.g., -lglog on Linux).
+#########################################################################
+set(PROCESS_TEST_LIBS
+  ${PROCESS_TEST_LIBS}
+  ${PROCESS_LIBS}
+  gmock
+  gtest
+  )

http://git-wip-us.apache.org/repos/asf/mesos/blob/f0ee4aa3/3rdparty/libprocess/src/tests/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/src/tests/CMakeLists.txt 
b/3rdparty/libprocess/src/tests/CMakeLists.txt
index 56b1861..b61ca1e 100644
--- a/3rdparty/libprocess/src/tests/CMakeLists.txt
+++ b/3rdparty/libprocess/src/tests/CMakeLists.txt
@@ -14,6 +14,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+set(PROCESS_TESTS_TARGET process_tests)
+
+# PROCESS TESTS.
+################
 set(PROCESS_TESTS_SRC
   ${PROCESS_TESTS_SRC}
   decoder_tests.cpp
@@ -37,21 +41,28 @@ set(PROCESS_TESTS_SRC
   time_tests.cpp
   )
 
-include_directories(
-  ../   # includes, e.g., decoder.hpp
-  ${PROCESS_INCLUDE_DIRS}
-  ${GMOCK_ROOT}/include
-  ${GTEST_SRC}/include
-  src
-  )
+# INCLUDE DIRECTIVES FOR PROCESS TEST BINARY (generates, e.g., -I/path/to/thing
+# on Linux).
+###############################################################################
+include_directories(${PROCESS_TEST_INCLUDE_DIRS})
 
-link_directories(
-  ${PROCESS_LIB_DIRS}
-  ${GMOCK_ROOT}-build/lib/.libs
-  ${GMOCK_ROOT}-build/gtest/lib/.libs
-  )
+# LINKING LIBRARIES BY DIRECTORY (might generate, e.g., -L/path/to/thing on
+# Linux).
+###########################################################################
+link_directories(${PROCESS_TEST_LIB_DIRS})
+
+# THE PROCESS TEST EXECUTABLE (generates, e.g., process_tests, etc., on Linux).
+###############################################################################
+add_executable(${PROCESS_TESTS_TARGET} ${PROCESS_TESTS_SRC})
+
+# ADD LINKER FLAGS (generates, e.g., -lglog on Linux).
+######################################################
+target_link_libraries(${PROCESS_TESTS_TARGET} ${PROCESS_TEST_LIBS})
+
+# ADD BINARY DEPENDENCIES (tells CMake what to compile/build first).
+####################################################################
+add_dependencies(${PROCESS_TESTS_TARGET} ${PROCESS_TEST_DEPENDENCIES})
 
-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
+# ADD TEST TARGET (runs when you do, e.g., `make check`).
+#########################################################
+add_test(NAME ProcessTests COMMAND ./${PROCESS_TESTS_TARGET})

Reply via email to