Hi Steven,

On Thu, 16 Sep 2021 08:15:31 +0200 Timo Röhling <roehl...@debian.org> wrote:
One alternative solution would be to patch the upstream CMake files
and export GMock independently with their own GMockConfig.cmake and
GMockTargets.cmake.  Then, for backwards compatibility, you could
add something like

     find_package(GMock QUIET)
     if(NOT GMock_FOUND)
         message(STATUS "GMock not found, targets will not be imported")
     endif()

to the end of GTestConfig.cmake.
I have simplified and and improved this approach further and come up
with a working solution. I opened an MR in Salsa, which is probably
most convenient, but I'll attach the diff here for reference.

Cheers
Timo

--
⢀⣴⠾⠻⢶⣦⠀   ╭────────────────────────────────────────────────────╮
⣾⠁⢠⠒⠀⣿⡁   │ Timo Röhling                                       │
⢿⡄⠘⠷⠚⠋⠀   │ 9B03 EBB9 8300 DF97 C2B1  23BF CC8C 6BDD 1403 F4CA │
⠈⠳⣄⠀⠀⠀⠀   ╰────────────────────────────────────────────────────╯
diff --git a/debian/libgmock-dev.install b/debian/libgmock-dev.install
index 0c07049..b3fb3c0 100644
--- a/debian/libgmock-dev.install
+++ b/debian/libgmock-dev.install
@@ -1,4 +1,5 @@
 debian/tmp/usr/lib/*/libgmock*
+debian/tmp/usr/lib/*/cmake/GTest/GMock*
 debian/tmp/usr/lib/*/pkgconfig/gmock*pc
 debian/tmp/usr/include/gmock
 
diff --git a/debian/libgtest-dev.install b/debian/libgtest-dev.install
index a7b1bec..8d6cf75 100644
--- a/debian/libgtest-dev.install
+++ b/debian/libgtest-dev.install
@@ -1,4 +1,4 @@
 debian/tmp/usr/lib/*/libgtest*
-debian/tmp/usr/lib/*/cmake/GTest/*
+debian/tmp/usr/lib/*/cmake/GTest/GTest*
 debian/tmp/usr/lib/*/pkgconfig/gtest*pc
 debian/tmp/usr/include/gtest
diff --git a/debian/patches/0006-Separate-GTest-and-GMock-targets.patch b/debian/patches/0006-Separate-GTest-and-GMock-targets.patch
new file mode 100644
index 0000000..987033d
--- /dev/null
+++ b/debian/patches/0006-Separate-GTest-and-GMock-targets.patch
@@ -0,0 +1,85 @@
+From: =?utf-8?q?Timo_R=C3=B6hling?= <roehl...@debian.org>
+Date: Fri, 17 Sep 2021 08:55:38 +0200
+Subject: Separate GTest and GMock targets
+
+---
+ googlemock/CMakeLists.txt             | 9 ++++++++-
+ googletest/CMakeLists.txt             | 4 ++--
+ googletest/cmake/Config.cmake.in      | 3 ++-
+ googletest/cmake/internal_utils.cmake | 4 ++--
+ 4 files changed, 14 insertions(+), 6 deletions(-)
+
+diff --git a/googlemock/CMakeLists.txt b/googlemock/CMakeLists.txt
+index 5418731..f4f29cf 100644
+--- a/googlemock/CMakeLists.txt
++++ b/googlemock/CMakeLists.txt
+@@ -122,7 +122,14 @@ endif()
+ ########################################################################
+ #
+ # Install rules
+-install_project(gmock gmock_main)
++install_project(GMockTargets gmock gmock_main)
++
++if(INSTALL_GTEST)
++  set(cmake_files_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${cmake_package_name}")
++  install(EXPORT GMockTargets
++    NAMESPACE ${cmake_package_name}::
++    DESTINATION ${cmake_files_install_dir})
++endif()
+ 
+ ########################################################################
+ #
+diff --git a/googletest/CMakeLists.txt b/googletest/CMakeLists.txt
+index 58a0610..82d6de6 100644
+--- a/googletest/CMakeLists.txt
++++ b/googletest/CMakeLists.txt
+@@ -106,7 +106,7 @@ if (INSTALL_GTEST)
+   set(cmake_files_install_dir "${CMAKE_INSTALL_LIBDIR}/cmake/${cmake_package_name}")
+   set(version_file "${generated_dir}/${cmake_package_name}ConfigVersion.cmake")
+   write_basic_package_version_file(${version_file} VERSION ${GOOGLETEST_VERSION} COMPATIBILITY AnyNewerVersion)
+-  install(EXPORT ${targets_export_name}
++  install(EXPORT GTestTargets
+     NAMESPACE ${cmake_package_name}::
+     DESTINATION ${cmake_files_install_dir})
+   set(config_file "${generated_dir}/${cmake_package_name}Config.cmake")
+@@ -151,7 +151,7 @@ target_link_libraries(gtest_main PUBLIC gtest)
+ ########################################################################
+ #
+ # Install rules
+-install_project(gtest gtest_main)
++install_project(GTestTargets gtest gtest_main)
+ 
+ ########################################################################
+ #
+diff --git a/googletest/cmake/Config.cmake.in b/googletest/cmake/Config.cmake.in
+index 12be449..8e34592 100644
+--- a/googletest/cmake/Config.cmake.in
++++ b/googletest/cmake/Config.cmake.in
+@@ -5,5 +5,6 @@ if (@GTEST_HAS_PTHREAD@)
+   find_dependency(Threads)
+ endif()
+ 
+-include("${CMAKE_CURRENT_LIST_DIR}/@targets_export_name@.cmake")
++include("${CMAKE_CURRENT_LIST_DIR}/GTestTargets.cmake")
++include("${CMAKE_CURRENT_LIST_DIR}/GMockTargets.cmake" OPTIONAL)
+ check_required_components("@project_name@")
+diff --git a/googletest/cmake/internal_utils.cmake b/googletest/cmake/internal_utils.cmake
+index 483808c..c44c83d 100644
+--- a/googletest/cmake/internal_utils.cmake
++++ b/googletest/cmake/internal_utils.cmake
+@@ -316,13 +316,13 @@ endfunction()
+ # install_project(targets...)
+ #
+ # Installs the specified targets and configures the associated pkgconfig files.
+-function(install_project)
++function(install_project ExportName)
+   if(INSTALL_GTEST)
+     install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/"
+       DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
+     # Install the project targets.
+     install(TARGETS ${ARGN}
+-      EXPORT ${targets_export_name}
++      EXPORT ${ExportName}
+       RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
+       ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
+       LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
diff --git a/debian/patches/series b/debian/patches/series
index 0081b37..bfb4351 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -3,3 +3,4 @@
 0003-Remove-Werror-from-cxx_base_flags.patch
 0004-Use-python-3-for-installed-script-gmock_gen.patch
 0005-Add-GoogleTest-version-to-each-sub-project-to-allow-.patch
+0006-Separate-GTest-and-GMock-targets.patch

Attachment: signature.asc
Description: PGP signature

Reply via email to