summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Help/release/dev/FindGTest-imported-targets.rst4
-rw-r--r--Modules/FindGTest.cmake160
-rw-r--r--Modules/FindProtobuf.cmake2
-rw-r--r--Modules/Platform/AIX-GNU.cmake12
-rw-r--r--Modules/Platform/AIX-XL.cmake12
-rw-r--r--Modules/Platform/HP-UX-GNU.cmake4
-rw-r--r--Modules/Platform/HP-UX-HP.cmake4
-rw-r--r--Source/CMakeVersion.cmake2
-rw-r--r--Tests/CMakeLists.txt5
-rw-r--r--Tests/FindGTest/CMakeLists.txt10
-rw-r--r--Tests/FindGTest/Test/CMakeLists.txt17
-rw-r--r--Tests/FindGTest/Test/main.cxx6
12 files changed, 180 insertions, 58 deletions
diff --git a/Help/release/dev/FindGTest-imported-targets.rst b/Help/release/dev/FindGTest-imported-targets.rst
new file mode 100644
index 0000000..3cb98da
--- /dev/null
+++ b/Help/release/dev/FindGTest-imported-targets.rst
@@ -0,0 +1,4 @@
+FindGTest-imported-targets
+--------------------------
+
+* The :module:`FindGTest` module now provides imported targets.
diff --git a/Modules/FindGTest.cmake b/Modules/FindGTest.cmake
index eb7abfd..ca49e4a 100644
--- a/Modules/FindGTest.cmake
+++ b/Modules/FindGTest.cmake
@@ -4,88 +4,89 @@
#
# Locate the Google C++ Testing Framework.
#
-# Defines the following variables:
+# Imported targets
+# ^^^^^^^^^^^^^^^^
#
-# ::
-#
-# GTEST_FOUND - Found the Google Testing framework
-# GTEST_INCLUDE_DIRS - Include directories
+# This module defines the following :prop_tgt:`IMPORTED` targets:
#
+# ``GTest::GTest``
+# The Google Test ``gtest`` library, if found; adds Thread::Thread
+# automatically
+# ``GTest::Main``
+# The Google Test ``gtest_main`` library, if found
#
#
-# Also defines the library variables below as normal variables. These
-# contain debug/optimized keywords when a debugging library is found.
-#
-# ::
+# Result variables
+# ^^^^^^^^^^^^^^^^
#
-# GTEST_BOTH_LIBRARIES - Both libgtest & libgtest-main
-# GTEST_LIBRARIES - libgtest
-# GTEST_MAIN_LIBRARIES - libgtest-main
+# This module will set the following variables in your project:
#
+# ``GTEST_FOUND``
+# Found the Google Testing framework
+# ``GTEST_INCLUDE_DIRS``
+# the directory containing the Google Test headers
#
+# The library variables below are set as normal variables. These
+# contain debug/optimized keywords when a debugging library is found.
#
-# Accepts the following variables as input:
-#
-# ::
-#
-# GTEST_ROOT - (as a CMake or environment variable)
-# The root directory of the gtest install prefix
-#
-#
+# ``GTEST_LIBRARIES``
+# The Google Test ``gtest`` library; note it also requires linking
+# with an appropriate thread library
+# ``GTEST_MAIN_LIBRARIES``
+# The Google Test ``gtest_main`` library
+# ``GTEST_BOTH_LIBRARIES``
+# Both ``gtest`` and ``gtest_main``
#
-# ::
+# Cache variables
+# ^^^^^^^^^^^^^^^
#
-# GTEST_MSVC_SEARCH - If compiling with MSVC, this variable can be set to
-# "MD" or "MT" to enable searching a GTest build tree
-# (defaults: "MD")
+# The following cache variables may also be set:
#
+# ``GTEST_ROOT``
+# The root directory of the Google Test installation (may also be
+# set as an environment variable)
+# ``GTEST_MSVC_SEARCH``
+# If compiling with MSVC, this variable can be set to ``MD`` or
+# ``MT`` (the default) to enable searching a GTest build tree
#
#
-# Example Usage:
+# Example usage
+# ^^^^^^^^^^^^^
#
# ::
#
# enable_testing()
# find_package(GTest REQUIRED)
-# include_directories(${GTEST_INCLUDE_DIRS})
-#
-#
-#
-# ::
#
# add_executable(foo foo.cc)
-# target_link_libraries(foo ${GTEST_BOTH_LIBRARIES})
-#
-#
-#
-# ::
+# target_link_libraries(foo GTest::GTest GTest::Main)
#
# add_test(AllTestsInFoo foo)
#
#
-#
-#
+# Deeper integration with CTest
+# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#
# If you would like each Google test to show up in CTest as a test you
-# may use the following macro. NOTE: It will slow down your tests by
-# running an executable for each test and test fixture. You will also
-# have to rerun CMake after adding or removing tests or test fixtures.
-#
-# GTEST_ADD_TESTS(executable extra_args ARGN)
-#
-# ::
+# may use the following macro::
#
-# executable = The path to the test executable
-# extra_args = Pass a list of extra arguments to be passed to
-# executable enclosed in quotes (or "" for none)
-# ARGN = A list of source files to search for tests & test
-# fixtures. Or AUTO to find them from executable target.
+# GTEST_ADD_TESTS(executable extra_args files...)
#
+# ``executable``
+# the path to the test executable
+# ``extra_args``
+# a list of extra arguments to be passed to executable enclosed in
+# quotes (or ``""`` for none)
+# ``files...``
+# a list of source files to search for tests and test fixtures. Or
+# ``AUTO`` to find them from executable target
#
+# However, note that this macro will slow down your tests by running
+# an executable for each test and test fixture. You will also have to
+# re-run CMake after adding or removing tests or test fixtures.
#
-# ::
+# Example usage::
#
-# Example:
# set(FooTestArgs --foo 1 --bar 2)
# add_executable(FooTest FooUnitTest.cc)
# GTEST_ADD_TESTS(FooTest "${FooTestArgs}" AUTO)
@@ -208,5 +209,60 @@ if(GTEST_FOUND)
_gtest_append_debugs(GTEST_LIBRARIES GTEST_LIBRARY)
_gtest_append_debugs(GTEST_MAIN_LIBRARIES GTEST_MAIN_LIBRARY)
set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})
-endif()
+ include(CMakeFindDependencyMacro)
+ find_dependency(Threads)
+
+ if(NOT TARGET GTest::GTest)
+ add_library(GTest::GTest UNKNOWN IMPORTED)
+ set_target_properties(GTest::GTest PROPERTIES
+ INTERFACE_LINK_LIBRARIES "Threads::Threads")
+ if(GTEST_INCLUDE_DIRS)
+ set_target_properties(GTest::GTest PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}")
+ endif()
+ if(EXISTS "${GTEST_LIBRARY}")
+ set_target_properties(GTest::GTest PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+ IMPORTED_LOCATION "${GTEST_LIBRARY}")
+ endif()
+ if(EXISTS "${GTEST_LIBRARY_DEBUG}")
+ set_property(TARGET GTest::GTest APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS DEBUG)
+ set_target_properties(GTest::GTest PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
+ IMPORTED_LOCATION_DEBUG "${GTEST_LIBRARY_DEBUG}")
+ endif()
+ if(EXISTS "${GTEST_LIBRARY_RELEASE}")
+ set_property(TARGET GTest::GTest APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS RELEASE)
+ set_target_properties(GTest::GTest PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
+ IMPORTED_LOCATION_RELEASE "${GTEST_LIBRARY_RELEASE}")
+ endif()
+ endif()
+ if(NOT TARGET GTest::Main)
+ add_library(GTest::Main UNKNOWN IMPORTED)
+ set_target_properties(GTest::Main PROPERTIES
+ INTERFACE_LINK_LIBRARIES "GTest::GTest")
+ if(EXISTS "${GTEST_MAIN_LIBRARY}")
+ set_target_properties(GTest::Main PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+ IMPORTED_LOCATION "${GTEST_MAIN_LIBRARY}")
+ endif()
+ if(EXISTS "${GTEST_MAIN_LIBRARY_DEBUG}")
+ set_property(TARGET GTest::Main APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS DEBUG)
+ set_target_properties(GTest::Main PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
+ IMPORTED_LOCATION_DEBUG "${GTEST_MAIN_LIBRARY_DEBUG}")
+ endif()
+ if(EXISTS "${GTEST_MAIN_LIBRARY_RELEASE}")
+ set_property(TARGET GTest::Main APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS RELEASE)
+ set_target_properties(GTest::Main PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
+ IMPORTED_LOCATION_RELEASE "${GTEST_MAIN_LIBRARY_RELEASE}")
+ endif()
+ endif()
+endif()
diff --git a/Modules/FindProtobuf.cmake b/Modules/FindProtobuf.cmake
index 4a68cd1..2f13b09 100644
--- a/Modules/FindProtobuf.cmake
+++ b/Modules/FindProtobuf.cmake
@@ -305,7 +305,7 @@ mark_as_advanced(PROTOBUF_PROTOC_EXECUTABLE)
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(PROTOBUF DEFAULT_MSG
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Protobuf DEFAULT_MSG
PROTOBUF_LIBRARY PROTOBUF_INCLUDE_DIR)
if(PROTOBUF_FOUND)
diff --git a/Modules/Platform/AIX-GNU.cmake b/Modules/Platform/AIX-GNU.cmake
index e5d9434..d6f5331 100644
--- a/Modules/Platform/AIX-GNU.cmake
+++ b/Modules/Platform/AIX-GNU.cmake
@@ -18,10 +18,20 @@ if(__AIX_COMPILER_GNU)
endif()
set(__AIX_COMPILER_GNU 1)
+#
+# By default, runtime linking is enabled. All shared objects specified on the command line
+# will be listed, even if there are no symbols referenced, in the output file.
+set (CMAKE_SHARED_LINKER_FLAGS_INIT "-Wl,-brtl")
+set (CMAKE_MODULE_LINKER_FLAGS_INIT "-Wl,-brtl")
+set (CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,-brtl")
+
+
macro(__aix_compiler_gnu lang)
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,-blibpath:")
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":")
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS} -Wl,-G,-bnoipath")
- set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,-brtl,-bnoipath,-bexpall") # +s, flag for exe link to use shared lib
+ set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,-bexpall")
set(CMAKE_${lang}_USE_IMPLICIT_LINK_DIRECTORIES_IN_RUNTIME_PATH 1)
+
+ set(CMAKE_${lang}_LINK_FLAGS "-Wl,-bnoipath")
endmacro()
diff --git a/Modules/Platform/AIX-XL.cmake b/Modules/Platform/AIX-XL.cmake
index abf3855..5470441 100644
--- a/Modules/Platform/AIX-XL.cmake
+++ b/Modules/Platform/AIX-XL.cmake
@@ -18,11 +18,21 @@ if(__AIX_COMPILER_XL)
endif()
set(__AIX_COMPILER_XL 1)
+#
+# By default, runtime linking is enabled. All shared objects specified on the command line
+# will be listed, even if there are no symbols referenced, in the output file.
+set(CMAKE_SHARED_LINKER_FLAGS_INIT "-Wl,-brtl")
+set(CMAKE_MODULE_LINKER_FLAGS_INIT "-Wl,-brtl")
+set(CMAKE_EXE_LINKER_FLAGS_INIT "-Wl,-brtl")
+
+
macro(__aix_compiler_xl lang)
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,-blibpath:")
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":")
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-G -Wl,-bnoipath") # -shared
- set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,-brtl,-bnoipath,-bexpall") # +s, flag for exe link to use shared lib
+ set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,-bexpall")
set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS " ")
set(CMAKE_SHARED_MODULE_${lang}_FLAGS " ")
+
+ set(CMAKE_${lang}_LINK_FLAGS "-Wl,-bnoipath")
endmacro()
diff --git a/Modules/Platform/HP-UX-GNU.cmake b/Modules/Platform/HP-UX-GNU.cmake
index eb909fe..6c71784 100644
--- a/Modules/Platform/HP-UX-GNU.cmake
+++ b/Modules/Platform/HP-UX-GNU.cmake
@@ -20,8 +20,10 @@ set(__HPUX_COMPILER_GNU 1)
macro(__hpux_compiler_gnu lang)
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS} -Wl,-E,-b,+nodefaultrpath")
- set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,+s,-E,+nodefaultrpath")
+ set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,-E")
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,+b")
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":")
set(CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG "-Wl,+h")
+
+ set(CMAKE_${lang}_LINK_FLAGS "-Wl,+s,+nodefaultrpath")
endmacro()
diff --git a/Modules/Platform/HP-UX-HP.cmake b/Modules/Platform/HP-UX-HP.cmake
index 871ea13..3935c31 100644
--- a/Modules/Platform/HP-UX-HP.cmake
+++ b/Modules/Platform/HP-UX-HP.cmake
@@ -22,10 +22,12 @@ macro(__hpux_compiler_hp lang)
set(CMAKE_${lang}_COMPILE_OPTIONS_PIC "+Z")
set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "+Z")
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "-Wl,-E,+nodefaultrpath -b -L/usr/lib")
- set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,+s,-E,+nodefaultrpath")
+ set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-Wl,-E")
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG "-Wl,+b")
set(CMAKE_SHARED_LIBRARY_RUNTIME_${lang}_FLAG_SEP ":")
set(CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG "-Wl,+h")
set(CMAKE_${lang}_FLAGS_INIT "")
+
+ set(CMAKE_${lang}_LINK_FLAGS "-Wl,+s,+nodefaultrpath")
endmacro()
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index 6c6ba32..8fe4618 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -1,5 +1,5 @@
# CMake version number components.
set(CMake_VERSION_MAJOR 3)
set(CMake_VERSION_MINOR 4)
-set(CMake_VERSION_PATCH 20151211)
+set(CMake_VERSION_PATCH 20151217)
#set(CMake_VERSION_RC 1)
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 5d492cf..65bfb77 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -1362,6 +1362,11 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
if(CMake_TEST_FindGSL)
add_subdirectory(FindGSL)
endif()
+
+ if(CMake_TEST_FindGTest)
+ add_subdirectory(FindGTest)
+ endif()
+
if(CMake_TEST_FindJsonCpp)
add_subdirectory(FindJsonCpp)
endif()
diff --git a/Tests/FindGTest/CMakeLists.txt b/Tests/FindGTest/CMakeLists.txt
new file mode 100644
index 0000000..cbc92b1
--- /dev/null
+++ b/Tests/FindGTest/CMakeLists.txt
@@ -0,0 +1,10 @@
+add_test(NAME FindGTest.Test COMMAND
+ ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
+ --build-and-test
+ "${CMake_SOURCE_DIR}/Tests/FindGTest/Test"
+ "${CMake_BINARY_DIR}/Tests/FindGTest/Test"
+ ${build_generator_args}
+ --build-project TestFindGTest
+ --build-options ${build_options}
+ --test-command ${CMAKE_CTEST_COMMAND} -V -C $<CONFIGURATION>
+ )
diff --git a/Tests/FindGTest/Test/CMakeLists.txt b/Tests/FindGTest/Test/CMakeLists.txt
new file mode 100644
index 0000000..99368ac
--- /dev/null
+++ b/Tests/FindGTest/Test/CMakeLists.txt
@@ -0,0 +1,17 @@
+cmake_minimum_required(VERSION 3.1)
+project(TestFindGTest CXX)
+include(CTest)
+
+# CMake does not actually provide FindGTest publicly.
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../Source/Modules)
+
+find_package(GTest REQUIRED)
+
+add_executable(test_gtest_tgt main.cxx)
+target_link_libraries(test_gtest_tgt GTest::Main)
+add_test(NAME test_gtest_tgt COMMAND test_gtest_tgt)
+
+add_executable(test_gtest_var main.cxx)
+target_include_directories(test_gtest_var PRIVATE ${GTEST_INCLUDE_DIRS})
+target_link_libraries(test_gtest_var PRIVATE ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+add_test(NAME test_gtest_var COMMAND test_gtest_var)
diff --git a/Tests/FindGTest/Test/main.cxx b/Tests/FindGTest/Test/main.cxx
new file mode 100644
index 0000000..0572a5d
--- /dev/null
+++ b/Tests/FindGTest/Test/main.cxx
@@ -0,0 +1,6 @@
+#include <gtest/gtest.h>
+
+TEST(FindCMake, LinksAndRuns)
+{
+ ASSERT_TRUE(true);
+}