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})
