> On Jul 23, 2015, at 9:21 AM, [email protected] wrote:
>
> Repository: mesos
> Updated Branches:
> refs/heads/master 34c6400f8 -> f0ee4aa3d
>
>
> Add CMake logic for building the Stout tests.
>
> This project is the first of two commits that will add support for
> building and running the Stout tests, using CMake. NOTE: This commit
> will be "wired up" into the Mesos project in the second commit. It is
> so split because of our strict requirements that the Stout source
> history remain separated from the rest of the Mesos project history,
> and it is not allowed to commit both these things at the same time.
>
> More particularly, this commit will introduce the core CMake logic for
> actually building the Stout tests from source, as well as the logic
> for finding a couple dependencies we expect to be on the system
> already (particularly SVN and APR).
>
> Review: https://reviews.apache.org/r/36689
>
>
> Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
> Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/8017e734
> Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/8017e734
> Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/8017e734
>
> Branch: refs/heads/master
> Commit: 8017e734bd15411b4b9e09c5ec3f0e6d45186616
> Parents: 34c6400
> Author: Alex Clemmer <[email protected]>
> Authored: Thu Jul 23 09:21:05 2015 -0700
> Committer: Benjamin Hindman <[email protected]>
> Committed: Thu Jul 23 09:21:05 2015 -0700
>
> ----------------------------------------------------------------------
> .../3rdparty/stout/cmake/FindApr.cmake | 195 +++++++++++++++++++
> .../3rdparty/stout/cmake/FindSvn.cmake | 124 ++++++++++++
> .../stout/cmake/StoutTestsConfigure.cmake | 93 +++++++++
> .../3rdparty/stout/tests/CMakeLists.txt | 86 ++++++++
> 4 files changed, 498 insertions(+)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/mesos/blob/8017e734/3rdparty/libprocess/3rdparty/stout/cmake/FindApr.cmake
> ----------------------------------------------------------------------
> diff --git a/3rdparty/libprocess/3rdparty/stout/cmake/FindApr.cmake
> b/3rdparty/libprocess/3rdparty/stout/cmake/FindApr.cmake
> new file mode 100644
> index 0000000..4b28aa1
> --- /dev/null
> +++ b/3rdparty/libprocess/3rdparty/stout/cmake/FindApr.cmake
> @@ -0,0 +1,195 @@
> +# 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.
> +
> +###############################################################
> +# IMPORTANT NOTE: I (hausdorff) have copied a *lot* of stuff in this file
> from
> +# code I found at in the Akumuli[1] project. The original
> version
> +# of this file was also released under the Apache 2.0
> license, and
> +# licensed to the ASF, making it fully compatible with the
> Mesos
> +# project.
> +# [1] https://github.com/akumuli/Akumuli/blob/master/cmake/FindAPR.cmake
> +
> +# This module helps to find the Apache Portable Runtime (APR) and APR-Util
> +# packages.
> +#
> +# USAGE: to use this module, add the following line to your CMake project:
> +# find_package(Apr)
> +#
> +# To make linking to APR simple, this module defines:
> +# * APR_FOUND and APRUTIL_FOUND (if false, linking build will
> fail)
> +# * APR_INCLUDE_DIR and APRUTIL_INCLUDE_DIR (defineswhere to find apr.h,
> etc.)
> +# * APR_LIBS and APRUTIL_LIBS (binaries for APR and friends)
> +#
> +# Also defined, but not for general use are:
> +# * APR_LIB and APRUTIL_LIB (where to find the APR library)
> +
> +# CONFIGURE THE APR SEARCH. Specify what we're looking for, and which
> directories
> +# we're going to look through to find them.
> +#############################################################################
> +set(POSSIBLE_APR_INCLUDE_DIRS
> + ${POSSIBLE_APR_INCLUDE_DIRS}
> + /opt/homebrew/opt/apr/include/apr-1
AFAIK you are supposed to detect this with %(apr-1-config --includes). This is
why Homebrew doesn't just stuff the headers into /usr/local/include.
> + /usr/local/include/apr-1
> + /usr/local/include/apr-1.0
> + /usr/include/apr-1
> + /usr/include/apr-1.0
> + /usr/local/apr/include/apr-1
> + )
> +
> +set(APR_LIB_NAMES ${APR_LIB_NAMES} apr-1)
> +
> +set(POSSIBLE_APR_LIB_DIRS
> + ${POSSIBLE_APR_LIB_DIRS}
> + /usr/lib
> + /usr/local/lib
> + /usr/local/apr/lib
> + /opt/homebrew/opt/apr/lib
> + )
> +
> +# SEARCH FOR APR LIBRARIES.
> +###########################
> +find_path(APR_INCLUDE_DIR apr.h ${POSSIBLE_APR_INCLUDE_DIRS})
> +
> +find_library(
> + APR_LIB
> + NAMES ${APR_LIB_NAMES}
> + PATHS ${POSSIBLE_APR_LIB_DIRS}
> + )
> +
> +# Did we find the include directory?
> +string(
> + COMPARE NOTEQUAL
> + "APR_INCLUDE_DIR-NOTFOUND"
> + ${APR_INCLUDE_DIR} # Value set to APR_INCLUDE_DIR-NOTFOUND if not found.
> + APR_INCLUDE_DIR_FOUND
> + )
> +
> +# Did we find the library?
> +string(
> + COMPARE NOTEQUAL
> + "APR_LIB-NOTFOUND"
> + ${APR_LIB} # Value set to `APR_LIB-NOTFOUND` if not found.
> + APR_LIB_FOUND
> + )
> +
> +# APR is considered "found" if we've both an include directory and an APR
> binary.
> +if ("${APR_LIB_FOUND}" AND "${APR_INCLUDE_DIR_FOUND}")
> + set(APR_LIBS ${APR_LIB})
> + set(APR_FOUND 1)
> +else ("${APR_LIB_FOUND}" AND "${APR_INCLUDE_DIR_FOUND}")
> + set(APR_FOUND 0)
> +endif ("${APR_LIB_FOUND}" AND "${APR_INCLUDE_DIR_FOUND}")
> +
> +# Results.
> +if (APR_FOUND)
> + if (NOT Apr_FIND_QUIETLY)
> + message(STATUS "Found APR headers: ${APR_INCLUDE_DIR}")
> + message(STATUS "Found APR library: ${APR_LIBS}")
> + endif (NOT Apr_FIND_QUIETLY)
> +else (APR_FOUND)
> + if (Apr_FIND_REQUIRED)
> + message(FATAL_ERROR "Could not find APR library")
> + endif (Apr_FIND_REQUIRED)
> +endif (APR_FOUND)
> +
> +# (Deprecated declarations.)
> +set(NATIVE_APR_INCLUDE_PATH ${APR_INCLUDE_DIR} )
> +get_filename_component(NATIVE_APR_LIB_PATH ${APR_LIB} PATH)
> +
> +# Export libraries variables.
> +mark_as_advanced(
> + APR_LIB
> + APR_INCLUDE_DIR
> + )
> +
> +# CONFIGURE THE APR-UTIL SEARCH. Specify what we're looking for, and which
> +# directories we're going to look through to find them.
> +#############################################################################
> +set(POSSIBLE_APRUTIL_INCLUDE_DIRS
> + ${POSSIBLE_APRUTIL_INCLUDE_DIRS}
> + /opt/homebrew/opt/apr-util/include/apr-1
> + /usr/local/include/apr-1
> + /usr/local/include/apr-1.0
> + /usr/include/apr-1
> + /usr/include/apr-1.0
> + /usr/local/apr/include/apr-1
> + )
> +
> +set(APRUTIL_LIB_NAMES ${APRUTIL_LIB_NAMES} aprutil-1)
> +
> +set(POSSIBLE_APRURIL_LIB_DIRS
> + ${POSSIBLE_APRURIL_LIB_DIRS}
> + /usr/lib
> + /usr/local/lib
> + /usr/local/apr/lib
> + /opt/homebrew/opt/apr-util/lib
> + )
> +
> +# SEARCH FOR APR-UTIL LIBRARIES.
> +################################
> +find_path(APRUTIL_INCLUDE_DIR apu.h ${POSSIBLE_APRUTIL_INCLUDE_DIRS})
> +
> +find_library(
> + APRUTIL_LIB
> + NAMES ${APRUTIL_LIB_NAMES}
> + PATHS ${POSSIBLE_APRUTIL_LIB_DIRS}
> + )
> +
> +# Did we find the include directory?
> +string(
> + COMPARE NOTEQUAL
> + "APRUTIL_INCLUDE_DIR-NOTFOUND"
> + ${APRUTIL_INCLUDE_DIR} # Value set to APR_INCLUDE_DIR-NOTFOUND if not
> found.
> + APRUTIL_INCLUDE_DIR_FOUND
> + )
> +
> +# Did we find the library?
> +string(
> + COMPARE NOTEQUAL
> + "APRUTIL_LIB-NOTFOUND"
> + ${APRUTIL_LIB} # Value set to `APR_LIB-NOTFOUND` if not found.
> + APRUTIL_LIB_FOUND
> + )
> +
> +# APR-UTIL is "found" if we've both an include directory and an APR-UTIL
> binary.
> +if ("${APRUTIL_LIB_FOUND}" AND "${APRUTIL_INCLUDE_DIR_FOUND}")
> + set(APRUTIL_LIBS ${APRUTIL_LIB})
> + set(APRUTIL_FOUND 1)
> +else ("${APRUTIL_LIB_FOUND}" AND "${APRUTIL_INCLUDE_DIR_FOUND}")
> + set(APRUTIL_FOUND 0)
> +endif ("${APRUTIL_LIB_FOUND}" AND "${APRUTIL_INCLUDE_DIR_FOUND}")
> +
> +# Results.
> +if (APRUTIL_FOUND)
> + if (NOT Apr_FIND_QUIETLY)
> + message(STATUS "Found APRUTIL headers: ${APRUTIL_INCLUDE_DIR}")
> + message(STATUS "Found APRUTIL library: ${APRUTIL_LIBS}")
> + endif (NOT Apr_FIND_QUIETLY)
> +else (APRUTIL_FOUND)
> + if (Apr_FIND_REQUIRED)
> + message(FATAL_ERROR "Could not find APRUTIL library")
> + endif (Apr_FIND_REQUIRED)
> +endif (APRUTIL_FOUND)
> +
> +# (Deprecated declarations.)
> +set(NATIVE_APRUTIL_INCLUDE_PATH ${APRUTIL_INCLUDE_DIR})
> +get_filename_component(NATIVE_APRUTIL_LIB_PATH ${APRUTIL_LIB} PATH)
> +
> +# Export libraries variables.
> +mark_as_advanced(
> + APRUTIL_LIB
> + APRUTIL_INCLUDE_DIR
> + )
> \ No newline at end of file
>
> http://git-wip-us.apache.org/repos/asf/mesos/blob/8017e734/3rdparty/libprocess/3rdparty/stout/cmake/FindSvn.cmake
> ----------------------------------------------------------------------
> diff --git a/3rdparty/libprocess/3rdparty/stout/cmake/FindSvn.cmake
> b/3rdparty/libprocess/3rdparty/stout/cmake/FindSvn.cmake
> new file mode 100644
> index 0000000..c0c0f34
> --- /dev/null
> +++ b/3rdparty/libprocess/3rdparty/stout/cmake/FindSvn.cmake
> @@ -0,0 +1,124 @@
> +# 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.
> +
> +###############################################################
> +# IMPORTANT NOTE: Much of this file is taken almost-directly from the
> +# FindApr.cmake file in this project. This file is itself
> taken
> +# from an external source; see comments for details.
> +
> +# This module helps to find the Subversion packages.
> +#
> +# USAGE: to use this module, add the following line to your CMake project:
> +# find_package(Svn)
> +#
> +# To make linking to Subversion simple, this module defines:
> +# * SVN_FOUND (if false, linking build will fail)
> +# * SVN_INCLUDE_DIR (defineswhere to find svn_client.h, etc.)
> +# * SVN_LIBS (binaries for SVN and friends)
> +#
> +# Also defined, but not for general use are:
> +# * SVN_LIB (where to find the APR library)
> +
> +# CONFIGURE OUR SEARCH. Specify what we're looking for, and which directories
> +# we're going to look through to find them.
> +#############################################################################
> +set(POSSIBLE_SVN_INCLUDE_DIRECTORIES
> + ${POSSIBLE_SVN_INCLUDE_DIRECTORIES}
> + /usr/local/include/subversion-1
> + /usr/include/subversion-1
> + )
> +
> +set(SVN_LIB_NAMES
> + ${SVN_LIB_NAMES}
> + svn_client-1
> + svn_delta-1
> + svn_diff-1
> + svn_fs-1
> + svn_fs_base-1
> + svn_fs_fs-1
> + svn_fs_util-1
> + svn_ra-1
> + svn_ra_local-1
> + svn_ra_serf-1
> + svn_ra_svn-1
> + svn_repos-1
> + svn_subr-1
> + svn_wc-1
> + )
> +
> +set(POSSIBLE_SVN_LIB_DIRECTORIES
> + ${POSSIBLE_SVN_LIB_DIRECTORIES}
> + /usr/lib
> + /usr/local/lib
> + )
> +
> +# SEARCH FOR SVN LIBRARIES.
> +###########################
> +find_path(SVN_INCLUDE_DIR svn_client.h ${POSSIBLE_SVN_INCLUDE_DIRECTORIES})
> +
> +# Did we find the include directory?
> +string(
> + COMPARE NOTEQUAL
> + "SVN_INCLUDE_DIR-NOTFOUND"
> + ${SVN_INCLUDE_DIR} # Value set to `SVN_INCLUDE_DIR-NOTFOUND` if not found.
> + SVN_INCLUDE_DIR_FOUND
> + )
> +
> +foreach (LIB_NAME ${SVN_LIB_NAMES})
> + find_library(
> + ${LIB_NAME}_PATH
> + NAMES ${LIB_NAME}
> + PATHS ${POSSIBLE_SVN_LIB_DIRECTORIES}
> + )
> +
> + # Did we find the library?
> + string(
> + COMPARE NOTEQUAL
> + "${LIB_NAME}_PATH-NOTFOUND"
> + ${${LIB_NAME}_PATH} # Value set to ${${LIB_NAME}_PATH}-NOTFOUND if not
> found.
> + ${LIB_NAME}_PATH_FOUND
> + )
> +
> + if ("${${LIB_NAME}_PATH_FOUND}")
> + message(STATUS "Found SVN lib: ${${LIB_NAME}_PATH}")
> + list(APPEND SVN_LIBS ${${LIB_NAME}_PATH})
> + else ("${${LIB_NAME}_PATH_FOUND}")
> + message(FATAL_ERROR "Could not find SVN library ${${LIB_NAME}_PATH}")
> + endif ("${${LIB_NAME}_PATH_FOUND}")
> +endforeach (LIB_NAME ${SVN_LIB_NAMES})
> +
> +list(LENGTH SVN_LIB_NAMES NUM_REQD_LIBS)
> +list(LENGTH SVN_LIBS NUM_FOUND_LIBS)
> +
> +# Results.
> +if ((NUM_FOUND_LIBS AND (NUM_REQD_LIBS EQUAL NUM_FOUND_LIBS)) AND
> + SVN_INCLUDE_DIR_FOUND)
> + if (NOT Svn_FIND_QUIETLY)
> + message(STATUS "Found SVN: ${SVN_LIBS}")
> + endif(NOT Svn_FIND_QUIETLY)
> +else ((NUM_FOUND_LIBS AND (NUM_REQD_LIBS EQUAL NUM_FOUND_LIBS)) AND
> + SVN_INCLUDE_DIR_FOUND)
> + if (Svn_FIND_REQUIRED)
> + message(FATAL_ERROR "Could not find SVN library")
> + endif (Svn_FIND_REQUIRED)
> +endif ((NUM_FOUND_LIBS AND (NUM_REQD_LIBS EQUAL NUM_FOUND_LIBS)) AND
> + SVN_INCLUDE_DIR_FOUND)
> +
> +# Export variables.
> +mark_as_advanced(
> + SVN_LIB
> + SVN_INCLUDE_DIR
> + )
> \ No newline at end of file
>
> http://git-wip-us.apache.org/repos/asf/mesos/blob/8017e734/3rdparty/libprocess/3rdparty/stout/cmake/StoutTestsConfigure.cmake
> ----------------------------------------------------------------------
> diff --git
> a/3rdparty/libprocess/3rdparty/stout/cmake/StoutTestsConfigure.cmake
> b/3rdparty/libprocess/3rdparty/stout/cmake/StoutTestsConfigure.cmake
> new file mode 100644
> index 0000000..e9be4aa
> --- /dev/null
> +++ b/3rdparty/libprocess/3rdparty/stout/cmake/StoutTestsConfigure.cmake
> @@ -0,0 +1,93 @@
> +# 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.
> +
> +find_package(Apr REQUIRED)
> +find_package(Svn REQUIRED)
> +
> +# DEFINE PROCESS LIBRARY DEPENDENCIES. Tells the process library build
> targets
> +# download/configure/build all third-party libraries before attempting to
> build.
> +################################################################################
> +set(STOUT_TEST_DEPENDENCIES
> + ${GMOCK_TARGET}
> + ${GTEST_TARGET}
> + ${PROTOBUF_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(STOUT_TEST_INCLUDE_DIRS
> + ${STOUT_TEST_INCLUDE_DIRS}
> + ${STOUT}/include
> + ${BOOST_ROOT}
> + ${PICOJSON_ROOT}
> + ${APR_INCLUDE_DIR}
> + ${SVN_INCLUDE_DIR}
> + ${GMOCK_ROOT}/include
> + ${GTEST_SRC}/include
> + ${PROTOBUF_LIB}/include
> + src
> + )
> +
> +if (WIN32)
> + set(STOUT_TEST_INCLUDE_DIRS
> + ${STOUT_TEST_INCLUDE_DIRS}
> + ${GLOG_ROOT}/src/windows
> + )
> +else (WIN32)
> + set(STOUT_TEST_INCLUDE_DIRS
> + ${STOUT_TEST_INCLUDE_DIRS}
> + ${GLOG_LIB}/include
> + )
> +endif (WIN32)
> +
> +# 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(STOUT_TEST_LIB_DIRS
> + ${STOUT_TEST_LIB_DIRS}
> + ${GLOG_LIB}/lib
> + ${APR_LIBS}
> + ${SVN_LIBS}
> + ${GMOCK_ROOT}-build/lib/.libs
> + ${GMOCK_ROOT}-build/gtest/lib/.libs
> + ${PROTOBUF_LIB}/lib
> + )
> +
> +# DEFINE THIRD-PARTY LIBS. Used to generate flags that the linker uses to
> +# include our third-party libs (e.g., -lglog on Linux).
> +#########################################################################
> +set(STOUT_TEST_LIBS
> + ${STOUT_TEST_LIBS}
> + ${CMAKE_THREAD_LIBS_INIT}
> + glog
> + dl
> + apr-1
> + protobuf
> + gtest
> + gmock
> + ${SVN_LIBS}
> + )
> +
> +if (NOT WIN32)
> + find_library(LIBRT_LIBRARIES rt REQUIRED)
> +
> + set(STOUT_TEST_LIBS
> + ${STOUT_TEST_LIBS}
> + ${LIBRT_LIBRARIES}
> + )
> +endif (NOT WIN32)
>
> http://git-wip-us.apache.org/repos/asf/mesos/blob/8017e734/3rdparty/libprocess/3rdparty/stout/tests/CMakeLists.txt
> ----------------------------------------------------------------------
> diff --git a/3rdparty/libprocess/3rdparty/stout/tests/CMakeLists.txt
> b/3rdparty/libprocess/3rdparty/stout/tests/CMakeLists.txt
> new file mode 100644
> index 0000000..b1a5190
> --- /dev/null
> +++ b/3rdparty/libprocess/3rdparty/stout/tests/CMakeLists.txt
> @@ -0,0 +1,86 @@
> +# 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(STOUT_TESTS_TARGET stout_tests)
> +
> +# STOUT TESTS.
> +##############
> +set(STOUT_TESTS_SRC
> + ${STOUT_TESTS_SRC}
> + base64_tests.cpp
> + bits_tests.cpp
> + bytes_tests.cpp
> + cache_tests.cpp
> + svn_tests.cpp
> + duration_tests.cpp
> + dynamiclibrary_tests.cpp
> + error_tests.cpp
> + flags_tests.cpp
> + gzip_tests.cpp
> + hashmap_tests.cpp
> + hashset_tests.cpp
> + interval_tests.cpp
> + ip_tests.cpp
> + json_tests.cpp
> + linkedhashmap_tests.cpp
> + mac_tests.cpp
> + main.cpp
> + multimap_tests.cpp
> + none_tests.cpp
> + option_tests.cpp
> + os_tests.cpp
> + path_tests.cpp
> + protobuf_tests.cpp
> + protobuf_tests.pb.cc
> + protobuf_tests.pb.h
> + protobuf_tests.proto
> + result_tests.cpp
> + os/sendfile_tests.cpp
> + os/signals_tests.cpp
> + set_tests.cpp
> + some_tests.cpp
> + strings_tests.cpp
> + subcommand_tests.cpp
> + thread_tests.cpp
> + uuid_tests.cpp
> + version_tests.cpp
> + )
> +
> +# INCLUDE DIRECTIVES FOR STOUT TEST BINARY (generates, e.g., -I/path/to/thing
> +# on Linux).
> +#############################################################################
> +include_directories(${STOUT_TEST_INCLUDE_DIRS})
> +
> +# LINKING LIBRARIES BY DIRECTORY (might generate, e.g., -L/path/to/thing on
> +# Linux).
> +###########################################################################
> +link_directories(${STOUT_TEST_LIB_DIRS})
> +
> +# THE STOUT TEST EXECUTABLE (generates, e.g., stout_tests, etc., on Linux).
> +###########################################################################
> +add_executable(${STOUT_TESTS_TARGET} ${STOUT_TESTS_SRC})
> +
> +# ADD LINKER FLAGS (generates, e.g., -lglog on Linux).
> +######################################################
> +target_link_libraries(${STOUT_TESTS_TARGET} ${STOUT_TEST_LIBS})
> +
> +# ADD BINARY DEPENDENCIES (tells CMake what to compile/build first).
> +####################################################################
> +add_dependencies(${STOUT_TESTS_TARGET} ${STOUT_TEST_DEPENDENCIES})
> +
> +# ADD TEST TARGET (runs when you do, e.g., `make check`).
> +#########################################################
> +add_test(NAME StoutTests COMMAND ./${STOUT_TESTS_TARGET})
> \ No newline at end of file
>