[dunfell,16/18] cmake: FindGTest: Add target for gmock library

Message ID 80ab29b962cea17a4f2486ad25577bc830cdd8d9.1638555254.git.steve@sakoman.com
State Accepted, archived
Commit 3b05fb01ec0e51c85d8ed62618467e57be91b928
Headers show
Series [dunfell,01/18] cve-extra-exclusions: add db CVEs to exclusion list | expand

Commit Message

Steve Sakoman Dec. 3, 2021, 6:19 p.m. UTC
From: Eero Aaltonen <eero.aaltonen@vaisala.com>

`googlemock` has been absorbed into the
[googletest](https://github.com/google/googletest) project and is built
and installed from the same source tree.

`googletest` has provided a CMake Config-file Package starting with
GTest 1.8.1. `find_package(GTest ...)` by default dispatches first to
CMake Find Module. Starting with CMake commit
2327b4330cce157d616ff8b611b3e77568d00351 in CMake v3.20.0 the module
dispatches onward to the Config-file Package so that the same targets
are available. In pre v3.20.0 versions of CMake however the Find Module
masks the targets provided by the upstream `GTest` package.

Update `Modules/FindGTest.cmake` to provide the same targets as the
CMake Config-file Package and backwards compatible targets and result
variables.

Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
---
 .../cmake/cmake-native_3.16.5.bb              |   1 +
 ...ndGTest-Add-target-for-gmock-library.patch | 255 ++++++++++++++++++
 2 files changed, 256 insertions(+)
 create mode 100644 meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-library.patch

Comments

Jasper Orschulko Dec. 9, 2021, 5:38 p.m. UTC | #1
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hi,

I can't provide any details yet, but I can say with certainty that this
patch breaks our build (using the parent commit
	746b301d37f9b7333f3d93e6fb7ea2808665df41 as refspec during the build worksasexpected):

[...] undefined reference to `testing::*

Can someone confirm this issue? Feel free to reach out for further
details.

- -- 
With best regards

Jasper Orschulko
DevOps Engineer

Tel. +49 30 58 58 14 265
Fax +49 30 58 58 14 999
Jasper.Orschulko@iris-sensing.com

• • • • • • • • • • • • • • • • • • • • • • • • • •

iris-GmbH
infrared & intelligent sensors
Schnellerstraße 1-5 | 12439 Berlin

https://iris-sensing.com/





On Fri, 2021-12-03 at 08:19 -1000, Steve Sakoman wrote:
> From: Eero Aaltonen <eero.aaltonen@vaisala.com>
> 
> `googlemock` has been absorbed into the
> [googletest](https://github.com/google/googletest) project and is
> built
> and installed from the same source tree.
> 
> `googletest` has provided a CMake Config-file Package starting with
> GTest 1.8.1. `find_package(GTest ...)` by default dispatches first to
> CMake Find Module. Starting with CMake commit
> 2327b4330cce157d616ff8b611b3e77568d00351 in CMake v3.20.0 the module
> dispatches onward to the Config-file Package so that the same targets
> are available. In pre v3.20.0 versions of CMake however the Find
> Module
> masks the targets provided by the upstream `GTest` package.
> 
> Update `Modules/FindGTest.cmake` to provide the same targets as the
> CMake Config-file Package and backwards compatible targets and result
> variables.
> 
> Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
> Signed-off-by: Steve Sakoman <steve@sakoman.com>
> ---
>  .../cmake/cmake-native_3.16.5.bb              |   1 +
>  ...ndGTest-Add-target-for-gmock-library.patch | 255
> ++++++++++++++++++
>  2 files changed, 256 insertions(+)
>  create mode 100644 meta/recipes-devtools/cmake/cmake/0006-cmake-
> FindGTest-Add-target-for-gmock-library.patch
> 
> diff --git a/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> b/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> index b2952ee5f5..96a7be6770 100644
> --- a/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> +++ b/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> @@ -7,6 +7,7 @@ SRC_URI += "file://OEToolchainConfig.cmake \
>              file://environment.d-cmake.sh \
>             
> file://0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch
>  \
>             
> file://0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch
>  \
> +           
> file://0006-cmake-FindGTest-Add-target-for-gmock-library.patch \
>              "
>  
>  
> diff --git a/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-
> Add-target-for-gmock-library.patch b/meta/recipes-
> devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-
> library.patch
> new file mode 100644
> index 0000000000..267f586a71
> --- /dev/null
> +++ b/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-
> target-for-gmock-library.patch
> @@ -0,0 +1,255 @@
> +From 39eae0d6c1b398f18761abac7f55944f0290f8a1 Mon Sep 17 00:00:00
> 2001
> +From: Eero Aaltonen <eero.aaltonen@iki.fi>
> +Date: Sun, 17 Oct 2021 17:13:07 +0300
> +Subject: [PATCH] FindGTest: Add target for gmock library
> +
> +`googlemock` has been absorbed into the
> +[googletest](https://github.com/google/googletest) project and is
> built
> +and installed from the same source tree.
> +
> +As GTest may be built with or without GMock, skip GMock if it is not
> +present.
> +
> +Do not provide result variables for GMock.  They are not provided by
> +upstream GTest's CMake Package Configuration File.
> +
> +Also update the test case to cover linking to `GTest::gmock`.
> +
> +The patch was imported from the Kitware git server
> +(git@gitlab.kitware.com:cmake/cmake.git) as of commit id
> +50bf457a0dd857cf976b22c5be7d333493233d1e
> +
> +Patch was modified to support upper case variable `GTEST_FOUND`.
> +
> +Upstream-Status: Accepted
> [https://gitlab.kitware.com/cmake/cmake/-/merge_requests/6632]
> +Milestone: 3.23.0
> +
> +Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
> +---
> + .../dev/FindGTest-target-for-gmock.rst        |   4 +
> + Modules/FindGTest.cmake                       | 133
> +++++++++++++++---
> + Tests/FindGTest/Test/CMakeLists.txt           |   4 +
> + 3 files changed, 121 insertions(+), 20 deletions(-)
> + create mode 100644 Help/release/dev/FindGTest-target-for-gmock.rst
> +
> +diff --git a/Help/release/dev/FindGTest-target-for-gmock.rst
> b/Help/release/dev/FindGTest-target-for-gmock.rst
> +new file mode 100644
> +index 0000000000..f78242c80e
> +--- /dev/null
> ++++ b/Help/release/dev/FindGTest-target-for-gmock.rst
> +@@ -0,0 +1,4 @@
> ++FindGTest-target-for-gmock
> ++--------------------------
> ++
> ++* The :module:`FindGTest` module now provides a target for GMock,
> if found.
> +diff --git a/Modules/FindGTest.cmake b/Modules/FindGTest.cmake
> +index e015a9840f..0331049594 100644
> +--- a/Modules/FindGTest.cmake
> ++++ b/Modules/FindGTest.cmake
> +@@ -7,10 +7,23 @@ FindGTest
> + 
> + Locate the Google C++ Testing Framework.
> + 
> ++.. versionadded:: 3.20
> ++  Upstream ``GTestConfig.cmake`` is used if possible.
> ++
> + Imported targets
> + ^^^^^^^^^^^^^^^^
> + 
> +-This module defines the following :prop_tgt:`IMPORTED` targets:
> ++  This module defines the following :prop_tgt:`IMPORTED` targets:
> ++
> ++``GTest::gtest``
> ++  The Google Test ``gtest`` library, if found; adds Thread::Thread
> ++  automatically
> ++``GTest::gtest_main``
> ++  The Google Test ``gtest_main`` library, if found
> ++
> ++.. deprecated:: 3.20
> ++  For backwards compatibility, this module defines additionally the
> ++  following deprecated :prop_tgt:`IMPORTED` targets (available
> since 3.5):
> + 
> + ``GTest::GTest``
> +   The Google Test ``gtest`` library, if found; adds Thread::Thread
> +@@ -18,7 +31,6 @@ This module defines the following
> :prop_tgt:`IMPORTED` targets:
> + ``GTest::Main``
> +   The Google Test ``gtest_main`` library, if found
> + 
> +-
> + Result variables
> + ^^^^^^^^^^^^^^^^
> + 
> +@@ -146,8 +158,42 @@ function(__gtest_import_library _target _var
> _config)
> +     endif()
> + endfunction()
> + 
> ++function(__gtest_define_backwards_compatible_library_targets)
> ++    set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES}
> ${GTEST_MAIN_LIBRARIES} PARENT_SCOPE)
> ++
> ++    # Add targets mapping the same library names as defined in
> ++    # older versions of CMake's FindGTest
> ++    if(NOT TARGET GTest::GTest)
> ++        add_library(GTest::GTest INTERFACE IMPORTED)
> ++        target_link_libraries(GTest::GTest INTERFACE GTest::gtest)
> ++    endif()
> ++    if(NOT TARGET GTest::Main)
> ++        add_library(GTest::Main INTERFACE IMPORTED)
> ++        target_link_libraries(GTest::Main INTERFACE
> GTest::gtest_main)
> ++    endif()
> ++endfunction()
> ++
> + #
> + 
> ++include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cma
> ke)
> ++
> ++# first specifically look for the CMake version of GTest
> ++find_package(GTest QUIET NO_MODULE)
> ++
> ++# if we found the GTest cmake package then we are done, and
> ++# can print what we found and return.
> ++if(GTest_FOUND)
> ++    set(GTEST_FOUND ${GTest_FOUND})
> ++    FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest HANDLE_COMPONENTS
> CONFIG_MODE)
> ++
> ++    set(GTEST_LIBRARIES      GTest::gtest)
> ++    set(GTEST_MAIN_LIBRARIES GTest::gtest_main)
> ++
> ++    __gtest_define_backwards_compatible_library_targets()
> ++
> ++    return()
> ++endif()
> ++
> + if(NOT DEFINED GTEST_MSVC_SEARCH)
> +     set(GTEST_MSVC_SEARCH MD)
> + endif()
> +@@ -194,50 +240,97 @@ if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD")
> +     __gtest_find_library(GTEST_LIBRARY_DEBUG      gtest-mdd gtestd)
> +     __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main-md 
> gtest_main)
> +     __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd
> gtest_maind)
> ++    __gtest_find_library(GMOCK_LIBRARY            gmock-md  gmock)
> ++    __gtest_find_library(GMOCK_LIBRARY_DEBUG      gmock-mdd gmockd)
> ++    __gtest_find_library(GMOCK_MAIN_LIBRARY       gmock_main-md 
> gmock_main)
> ++    __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_main-mdd
> gmock_maind)
> + else()
> +     __gtest_find_library(GTEST_LIBRARY            gtest)
> +     __gtest_find_library(GTEST_LIBRARY_DEBUG      gtestd)
> +     __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main)
> +     __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind)
> ++    __gtest_find_library(GMOCK_LIBRARY            gmock)
> ++    __gtest_find_library(GMOCK_LIBRARY_DEBUG      gmockd)
> ++    __gtest_find_library(GMOCK_MAIN_LIBRARY       gmock_main)
> ++    __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_maind)
> + endif()
> + 
> +-
> include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake
> )
> + FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY
> GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
> + 
> +-if(GTEST_FOUND)
> ++if(GMOCK_LIBRARY AND GMOCK_MAIN_LIBRARY)
> ++    set(GMock_FOUND True)
> ++else()
> ++    set(GMock_FOUND False)
> ++endif()
> ++
> ++if(GTest_FOUND)
> +     set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
> +     __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})
> + 
> +     find_package(Threads QUIET)
> + 
> +-    if(NOT TARGET GTest::GTest)
> ++    if(NOT TARGET GTest::gtest)
> +         __gtest_determine_library_type(GTEST_LIBRARY)
> +-        add_library(GTest::GTest ${GTEST_LIBRARY_TYPE} IMPORTED)
> ++        add_library(GTest::gtest ${GTEST_LIBRARY_TYPE} IMPORTED)
> +         if(TARGET Threads::Threads)
> +-            set_target_properties(GTest::GTest PROPERTIES
> ++            set_target_properties(GTest::gtest PROPERTIES
> +                 INTERFACE_LINK_LIBRARIES Threads::Threads)
> +         endif()
> +         if(GTEST_LIBRARY_TYPE STREQUAL "SHARED")
> +-            set_target_properties(GTest::GTest PROPERTIES
> ++            set_target_properties(GTest::gtest PROPERTIES
> +                 INTERFACE_COMPILE_DEFINITIONS
> "GTEST_LINKED_AS_SHARED_LIBRARY=1")
> +         endif()
> +         if(GTEST_INCLUDE_DIRS)
> +-            set_target_properties(GTest::GTest PROPERTIES
> ++            set_target_properties(GTest::gtest PROPERTIES
> +                 INTERFACE_INCLUDE_DIRECTORIES
> "${GTEST_INCLUDE_DIRS}")
> +         endif()
> +-        __gtest_import_library(GTest::GTest GTEST_LIBRARY "")
> +-        __gtest_import_library(GTest::GTest GTEST_LIBRARY
> "RELEASE")
> +-        __gtest_import_library(GTest::GTest GTEST_LIBRARY "DEBUG")
> ++        __gtest_import_library(GTest::gtest GTEST_LIBRARY "")
> ++        __gtest_import_library(GTest::gtest GTEST_LIBRARY
> "RELEASE")
> ++        __gtest_import_library(GTest::gtest GTEST_LIBRARY "DEBUG")
> +     endif()
> +-    if(NOT TARGET GTest::Main)
> ++    if(NOT TARGET GTest::gtest_main)
> +         __gtest_determine_library_type(GTEST_MAIN_LIBRARY)
> +-        add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE}
> IMPORTED)
> +-        set_target_properties(GTest::Main PROPERTIES
> +-            INTERFACE_LINK_LIBRARIES "GTest::GTest")
> +-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "")
> +-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY
> "RELEASE")
> +-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY
> "DEBUG")
> ++        add_library(GTest::gtest_main ${GTEST_MAIN_LIBRARY_TYPE}
> IMPORTED)
> ++        set_target_properties(GTest::gtest_main PROPERTIES
> ++            INTERFACE_LINK_LIBRARIES "GTest::gtest")
> ++        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY
> "")
> ++        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY
> "RELEASE")
> ++        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY
> "DEBUG")
> ++    endif()
> ++
> ++    __gtest_define_backwards_compatible_library_targets()
> ++endif()
> ++
> ++if(GMock_FOUND)
> ++    if(NOT TARGET GTest::gmock)
> ++        __gtest_determine_library_type(GMOCK_LIBRARY)
> ++        add_library(GTest::gmock ${GMOCK_LIBRARY_TYPE} IMPORTED)
> ++        set(_gmock_link_libraries "GTest::gtest")
> ++        if(TARGET Threads::Threads)
> ++            list(APPEND _gmock_link_libraries Threads::Threads)
> ++        endif()
> ++        set_target_properties(GTest::gmock PROPERTIES
> ++            INTERFACE_LINK_LIBRARIES "${_gmock_link_libraries}")
> ++        if(GMOCK_LIBRARY_TYPE STREQUAL "SHARED")
> ++            set_target_properties(GTest::gmock PROPERTIES
> ++                INTERFACE_COMPILE_DEFINITIONS
> "GMOCK_LINKED_AS_SHARED_LIBRARY=1")
> ++        endif()
> ++        if(GTEST_INCLUDE_DIRS)
> ++            set_target_properties(GTest::gmock PROPERTIES
> ++                INTERFACE_INCLUDE_DIRECTORIES
> "${GTEST_INCLUDE_DIRS}")
> ++        endif()
> ++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY "")
> ++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY
> "RELEASE")
> ++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY "DEBUG")
> ++    endif()
> ++    if(NOT TARGET GTest::gmock_main)
> ++        __gtest_determine_library_type(GMOCK_MAIN_LIBRARY)
> ++        add_library(GTest::gmock_main ${GMOCK_MAIN_LIBRARY_TYPE}
> IMPORTED)
> ++        set_target_properties(GTest::gmock_main PROPERTIES
> ++            INTERFACE_LINK_LIBRARIES "GTest::gmock")
> ++        __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY
> "")
> ++        __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY
> "RELEASE")
> ++        __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY
> "DEBUG")
> +     endif()
> + endif()
> +diff --git a/Tests/FindGTest/Test/CMakeLists.txt
> b/Tests/FindGTest/Test/CMakeLists.txt
> +index b65b9d28f6..7d3a378a65 100644
> +--- a/Tests/FindGTest/Test/CMakeLists.txt
> ++++ b/Tests/FindGTest/Test/CMakeLists.txt
> +@@ -12,3 +12,7 @@ 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)
> ++
> ++add_executable(test_gmock_tgt main.cxx)
> ++target_link_libraries(test_gmock_tgt GTest::gmock_main)
> ++add_test(NAME test_gmock_tgt COMMAND test_gmock_tgt)
> +-- 
> +2.17.1
> +
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEE4WyPMIC5Ap4+Ooo1Ygqew07VMNUFAmGyPwAACgkQYgqew07V
MNU+qwf/a6pDdacJlCGlNha+d2AbkAqiAlC/djP0i5h17mhRhvfZWwvm8DlyXUNL
oYjhi7y6PvO2H7TTsACey7bBcGBwyikTrpBrloxaa+KDKkG1OIvpzJBlRNGA/PUT
vZMmDtL6S4E3SuxwBT8P/ShH+RSijJDWVq+9UgNz6jyuNIx4lSVU9lVTACNpN4Mj
PI5YXl3g6HZA364UnEZ+KFKwoc5Ihm5U71KkKKekNaOVNf4rzkcwy8bQFc0WyH42
4N/sPDByu/8INnabZm04ypqIOAMGOKsLjuZqvy2PeFiBoXCRsxJD9SF6iFFVeuuc
/lP9iIFOIHxUFkeopGvLH7ol8YQtow==
=72K+
-----END PGP SIGNATURE-----
Steve Sakoman Dec. 9, 2021, 7:32 p.m. UTC | #2
On Thu, Dec 9, 2021 at 7:38 AM Jasper Orschulko
<Jasper.Orschulko@iris-sensing.com> wrote:
>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA256
>
> Hi,
>
> I can't provide any details yet, but I can say with certainty that this
> patch breaks our build (using the parent commit
>         746b301d37f9b7333f3d93e6fb7ea2808665df41 as refspec during the build worksasexpected):
>
> [...] undefined reference to `testing::*
>
> Can someone confirm this issue? Feel free to reach out for further
> details.

I've not seen any issues in either local or autobuilder testing, so I
think we need more details!

Steve

> On Fri, 2021-12-03 at 08:19 -1000, Steve Sakoman wrote:
> > From: Eero Aaltonen <eero.aaltonen@vaisala.com>
> >
> > `googlemock` has been absorbed into the
> > [googletest](https://github.com/google/googletest) project and is
> > built
> > and installed from the same source tree.
> >
> > `googletest` has provided a CMake Config-file Package starting with
> > GTest 1.8.1. `find_package(GTest ...)` by default dispatches first to
> > CMake Find Module. Starting with CMake commit
> > 2327b4330cce157d616ff8b611b3e77568d00351 in CMake v3.20.0 the module
> > dispatches onward to the Config-file Package so that the same targets
> > are available. In pre v3.20.0 versions of CMake however the Find
> > Module
> > masks the targets provided by the upstream `GTest` package.
> >
> > Update `Modules/FindGTest.cmake` to provide the same targets as the
> > CMake Config-file Package and backwards compatible targets and result
> > variables.
> >
> > Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
> > Signed-off-by: Steve Sakoman <steve@sakoman.com>
> > ---
> >  .../cmake/cmake-native_3.16.5.bb              |   1 +
> >  ...ndGTest-Add-target-for-gmock-library.patch | 255
> > ++++++++++++++++++
> >  2 files changed, 256 insertions(+)
> >  create mode 100644 meta/recipes-devtools/cmake/cmake/0006-cmake-
> > FindGTest-Add-target-for-gmock-library.patch
> >
> > diff --git a/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> > b/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> > index b2952ee5f5..96a7be6770 100644
> > --- a/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> > +++ b/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> > @@ -7,6 +7,7 @@ SRC_URI += "file://OEToolchainConfig.cmake \
> >              file://environment.d-cmake.sh \
> >
> > file://0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch
> >  \
> >
> > file://0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch
> >  \
> > +
> > file://0006-cmake-FindGTest-Add-target-for-gmock-library.patch \
> >              "
> >
> >
> > diff --git a/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-
> > Add-target-for-gmock-library.patch b/meta/recipes-
> > devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-
> > library.patch
> > new file mode 100644
> > index 0000000000..267f586a71
> > --- /dev/null
> > +++ b/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-
> > target-for-gmock-library.patch
> > @@ -0,0 +1,255 @@
> > +From 39eae0d6c1b398f18761abac7f55944f0290f8a1 Mon Sep 17 00:00:00
> > 2001
> > +From: Eero Aaltonen <eero.aaltonen@iki.fi>
> > +Date: Sun, 17 Oct 2021 17:13:07 +0300
> > +Subject: [PATCH] FindGTest: Add target for gmock library
> > +
> > +`googlemock` has been absorbed into the
> > +[googletest](https://github.com/google/googletest) project and is
> > built
> > +and installed from the same source tree.
> > +
> > +As GTest may be built with or without GMock, skip GMock if it is not
> > +present.
> > +
> > +Do not provide result variables for GMock.  They are not provided by
> > +upstream GTest's CMake Package Configuration File.
> > +
> > +Also update the test case to cover linking to `GTest::gmock`.
> > +
> > +The patch was imported from the Kitware git server
> > +(git@gitlab.kitware.com:cmake/cmake.git) as of commit id
> > +50bf457a0dd857cf976b22c5be7d333493233d1e
> > +
> > +Patch was modified to support upper case variable `GTEST_FOUND`.
> > +
> > +Upstream-Status: Accepted
> > [https://gitlab.kitware.com/cmake/cmake/-/merge_requests/6632]
> > +Milestone: 3.23.0
> > +
> > +Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
> > +---
> > + .../dev/FindGTest-target-for-gmock.rst        |   4 +
> > + Modules/FindGTest.cmake                       | 133
> > +++++++++++++++---
> > + Tests/FindGTest/Test/CMakeLists.txt           |   4 +
> > + 3 files changed, 121 insertions(+), 20 deletions(-)
> > + create mode 100644 Help/release/dev/FindGTest-target-for-gmock.rst
> > +
> > +diff --git a/Help/release/dev/FindGTest-target-for-gmock.rst
> > b/Help/release/dev/FindGTest-target-for-gmock.rst
> > +new file mode 100644
> > +index 0000000000..f78242c80e
> > +--- /dev/null
> > ++++ b/Help/release/dev/FindGTest-target-for-gmock.rst
> > +@@ -0,0 +1,4 @@
> > ++FindGTest-target-for-gmock
> > ++--------------------------
> > ++
> > ++* The :module:`FindGTest` module now provides a target for GMock,
> > if found.
> > +diff --git a/Modules/FindGTest.cmake b/Modules/FindGTest.cmake
> > +index e015a9840f..0331049594 100644
> > +--- a/Modules/FindGTest.cmake
> > ++++ b/Modules/FindGTest.cmake
> > +@@ -7,10 +7,23 @@ FindGTest
> > +
> > + Locate the Google C++ Testing Framework.
> > +
> > ++.. versionadded:: 3.20
> > ++  Upstream ``GTestConfig.cmake`` is used if possible.
> > ++
> > + Imported targets
> > + ^^^^^^^^^^^^^^^^
> > +
> > +-This module defines the following :prop_tgt:`IMPORTED` targets:
> > ++  This module defines the following :prop_tgt:`IMPORTED` targets:
> > ++
> > ++``GTest::gtest``
> > ++  The Google Test ``gtest`` library, if found; adds Thread::Thread
> > ++  automatically
> > ++``GTest::gtest_main``
> > ++  The Google Test ``gtest_main`` library, if found
> > ++
> > ++.. deprecated:: 3.20
> > ++  For backwards compatibility, this module defines additionally the
> > ++  following deprecated :prop_tgt:`IMPORTED` targets (available
> > since 3.5):
> > +
> > + ``GTest::GTest``
> > +   The Google Test ``gtest`` library, if found; adds Thread::Thread
> > +@@ -18,7 +31,6 @@ This module defines the following
> > :prop_tgt:`IMPORTED` targets:
> > + ``GTest::Main``
> > +   The Google Test ``gtest_main`` library, if found
> > +
> > +-
> > + Result variables
> > + ^^^^^^^^^^^^^^^^
> > +
> > +@@ -146,8 +158,42 @@ function(__gtest_import_library _target _var
> > _config)
> > +     endif()
> > + endfunction()
> > +
> > ++function(__gtest_define_backwards_compatible_library_targets)
> > ++    set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES}
> > ${GTEST_MAIN_LIBRARIES} PARENT_SCOPE)
> > ++
> > ++    # Add targets mapping the same library names as defined in
> > ++    # older versions of CMake's FindGTest
> > ++    if(NOT TARGET GTest::GTest)
> > ++        add_library(GTest::GTest INTERFACE IMPORTED)
> > ++        target_link_libraries(GTest::GTest INTERFACE GTest::gtest)
> > ++    endif()
> > ++    if(NOT TARGET GTest::Main)
> > ++        add_library(GTest::Main INTERFACE IMPORTED)
> > ++        target_link_libraries(GTest::Main INTERFACE
> > GTest::gtest_main)
> > ++    endif()
> > ++endfunction()
> > ++
> > + #
> > +
> > ++include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cma
> > ke)
> > ++
> > ++# first specifically look for the CMake version of GTest
> > ++find_package(GTest QUIET NO_MODULE)
> > ++
> > ++# if we found the GTest cmake package then we are done, and
> > ++# can print what we found and return.
> > ++if(GTest_FOUND)
> > ++    set(GTEST_FOUND ${GTest_FOUND})
> > ++    FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest HANDLE_COMPONENTS
> > CONFIG_MODE)
> > ++
> > ++    set(GTEST_LIBRARIES      GTest::gtest)
> > ++    set(GTEST_MAIN_LIBRARIES GTest::gtest_main)
> > ++
> > ++    __gtest_define_backwards_compatible_library_targets()
> > ++
> > ++    return()
> > ++endif()
> > ++
> > + if(NOT DEFINED GTEST_MSVC_SEARCH)
> > +     set(GTEST_MSVC_SEARCH MD)
> > + endif()
> > +@@ -194,50 +240,97 @@ if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD")
> > +     __gtest_find_library(GTEST_LIBRARY_DEBUG      gtest-mdd gtestd)
> > +     __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main-md
> > gtest_main)
> > +     __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd
> > gtest_maind)
> > ++    __gtest_find_library(GMOCK_LIBRARY            gmock-md  gmock)
> > ++    __gtest_find_library(GMOCK_LIBRARY_DEBUG      gmock-mdd gmockd)
> > ++    __gtest_find_library(GMOCK_MAIN_LIBRARY       gmock_main-md
> > gmock_main)
> > ++    __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_main-mdd
> > gmock_maind)
> > + else()
> > +     __gtest_find_library(GTEST_LIBRARY            gtest)
> > +     __gtest_find_library(GTEST_LIBRARY_DEBUG      gtestd)
> > +     __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main)
> > +     __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind)
> > ++    __gtest_find_library(GMOCK_LIBRARY            gmock)
> > ++    __gtest_find_library(GMOCK_LIBRARY_DEBUG      gmockd)
> > ++    __gtest_find_library(GMOCK_MAIN_LIBRARY       gmock_main)
> > ++    __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_maind)
> > + endif()
> > +
> > +-
> > include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake
> > )
> > + FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY
> > GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
> > +
> > +-if(GTEST_FOUND)
> > ++if(GMOCK_LIBRARY AND GMOCK_MAIN_LIBRARY)
> > ++    set(GMock_FOUND True)
> > ++else()
> > ++    set(GMock_FOUND False)
> > ++endif()
> > ++
> > ++if(GTest_FOUND)
> > +     set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
> > +     __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})
> > +
> > +     find_package(Threads QUIET)
> > +
> > +-    if(NOT TARGET GTest::GTest)
> > ++    if(NOT TARGET GTest::gtest)
> > +         __gtest_determine_library_type(GTEST_LIBRARY)
> > +-        add_library(GTest::GTest ${GTEST_LIBRARY_TYPE} IMPORTED)
> > ++        add_library(GTest::gtest ${GTEST_LIBRARY_TYPE} IMPORTED)
> > +         if(TARGET Threads::Threads)
> > +-            set_target_properties(GTest::GTest PROPERTIES
> > ++            set_target_properties(GTest::gtest PROPERTIES
> > +                 INTERFACE_LINK_LIBRARIES Threads::Threads)
> > +         endif()
> > +         if(GTEST_LIBRARY_TYPE STREQUAL "SHARED")
> > +-            set_target_properties(GTest::GTest PROPERTIES
> > ++            set_target_properties(GTest::gtest PROPERTIES
> > +                 INTERFACE_COMPILE_DEFINITIONS
> > "GTEST_LINKED_AS_SHARED_LIBRARY=1")
> > +         endif()
> > +         if(GTEST_INCLUDE_DIRS)
> > +-            set_target_properties(GTest::GTest PROPERTIES
> > ++            set_target_properties(GTest::gtest PROPERTIES
> > +                 INTERFACE_INCLUDE_DIRECTORIES
> > "${GTEST_INCLUDE_DIRS}")
> > +         endif()
> > +-        __gtest_import_library(GTest::GTest GTEST_LIBRARY "")
> > +-        __gtest_import_library(GTest::GTest GTEST_LIBRARY
> > "RELEASE")
> > +-        __gtest_import_library(GTest::GTest GTEST_LIBRARY "DEBUG")
> > ++        __gtest_import_library(GTest::gtest GTEST_LIBRARY "")
> > ++        __gtest_import_library(GTest::gtest GTEST_LIBRARY
> > "RELEASE")
> > ++        __gtest_import_library(GTest::gtest GTEST_LIBRARY "DEBUG")
> > +     endif()
> > +-    if(NOT TARGET GTest::Main)
> > ++    if(NOT TARGET GTest::gtest_main)
> > +         __gtest_determine_library_type(GTEST_MAIN_LIBRARY)
> > +-        add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE}
> > IMPORTED)
> > +-        set_target_properties(GTest::Main PROPERTIES
> > +-            INTERFACE_LINK_LIBRARIES "GTest::GTest")
> > +-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "")
> > +-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY
> > "RELEASE")
> > +-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY
> > "DEBUG")
> > ++        add_library(GTest::gtest_main ${GTEST_MAIN_LIBRARY_TYPE}
> > IMPORTED)
> > ++        set_target_properties(GTest::gtest_main PROPERTIES
> > ++            INTERFACE_LINK_LIBRARIES "GTest::gtest")
> > ++        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY
> > "")
> > ++        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY
> > "RELEASE")
> > ++        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY
> > "DEBUG")
> > ++    endif()
> > ++
> > ++    __gtest_define_backwards_compatible_library_targets()
> > ++endif()
> > ++
> > ++if(GMock_FOUND)
> > ++    if(NOT TARGET GTest::gmock)
> > ++        __gtest_determine_library_type(GMOCK_LIBRARY)
> > ++        add_library(GTest::gmock ${GMOCK_LIBRARY_TYPE} IMPORTED)
> > ++        set(_gmock_link_libraries "GTest::gtest")
> > ++        if(TARGET Threads::Threads)
> > ++            list(APPEND _gmock_link_libraries Threads::Threads)
> > ++        endif()
> > ++        set_target_properties(GTest::gmock PROPERTIES
> > ++            INTERFACE_LINK_LIBRARIES "${_gmock_link_libraries}")
> > ++        if(GMOCK_LIBRARY_TYPE STREQUAL "SHARED")
> > ++            set_target_properties(GTest::gmock PROPERTIES
> > ++                INTERFACE_COMPILE_DEFINITIONS
> > "GMOCK_LINKED_AS_SHARED_LIBRARY=1")
> > ++        endif()
> > ++        if(GTEST_INCLUDE_DIRS)
> > ++            set_target_properties(GTest::gmock PROPERTIES
> > ++                INTERFACE_INCLUDE_DIRECTORIES
> > "${GTEST_INCLUDE_DIRS}")
> > ++        endif()
> > ++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY "")
> > ++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY
> > "RELEASE")
> > ++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY "DEBUG")
> > ++    endif()
> > ++    if(NOT TARGET GTest::gmock_main)
> > ++        __gtest_determine_library_type(GMOCK_MAIN_LIBRARY)
> > ++        add_library(GTest::gmock_main ${GMOCK_MAIN_LIBRARY_TYPE}
> > IMPORTED)
> > ++        set_target_properties(GTest::gmock_main PROPERTIES
> > ++            INTERFACE_LINK_LIBRARIES "GTest::gmock")
> > ++        __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY
> > "")
> > ++        __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY
> > "RELEASE")
> > ++        __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY
> > "DEBUG")
> > +     endif()
> > + endif()
> > +diff --git a/Tests/FindGTest/Test/CMakeLists.txt
> > b/Tests/FindGTest/Test/CMakeLists.txt
> > +index b65b9d28f6..7d3a378a65 100644
> > +--- a/Tests/FindGTest/Test/CMakeLists.txt
> > ++++ b/Tests/FindGTest/Test/CMakeLists.txt
> > +@@ -12,3 +12,7 @@ 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)
> > ++
> > ++add_executable(test_gmock_tgt main.cxx)
> > ++target_link_libraries(test_gmock_tgt GTest::gmock_main)
> > ++add_test(NAME test_gmock_tgt COMMAND test_gmock_tgt)
> > +--
> > +2.17.1
> > +
> -----BEGIN PGP SIGNATURE-----
>
> iQEzBAEBCAAdFiEE4WyPMIC5Ap4+Ooo1Ygqew07VMNUFAmGyPwAACgkQYgqew07V
> MNU+qwf/a6pDdacJlCGlNha+d2AbkAqiAlC/djP0i5h17mhRhvfZWwvm8DlyXUNL
> oYjhi7y6PvO2H7TTsACey7bBcGBwyikTrpBrloxaa+KDKkG1OIvpzJBlRNGA/PUT
> vZMmDtL6S4E3SuxwBT8P/ShH+RSijJDWVq+9UgNz6jyuNIx4lSVU9lVTACNpN4Mj
> PI5YXl3g6HZA364UnEZ+KFKwoc5Ihm5U71KkKKekNaOVNf4rzkcwy8bQFc0WyH42
> 4N/sPDByu/8INnabZm04ypqIOAMGOKsLjuZqvy2PeFiBoXCRsxJD9SF6iFFVeuuc
> /lP9iIFOIHxUFkeopGvLH7ol8YQtow==
> =72K+
> -----END PGP SIGNATURE-----
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#159473): https://lists.openembedded.org/g/openembedded-core/message/159473
> Mute This Topic: https://lists.openembedded.org/mt/87483225/3617601
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [sakoman@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Jasper Orschulko Dec. 10, 2021, 6:49 p.m. UTC | #3
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hello everyone,

after some digging we identified the issue to be on our part.
We have been using "GTEST_LIBRARY" and "GTEST_MAIN_LIBRARY" in our
CMake scripts instead of "GTEST_LIBRARIES" and "GTEST_MAIN_LIBRARIES",
as described in the cmake docs:
https://cmake.org/cmake/help/v3.16/module/FindGTest.html#result-variables

So all good here! :)

- -- 
With best regards

Jasper Orschulko
DevOps Engineer

Tel. +49 30 58 58 14 265
Fax +49 30 58 58 14 999
Jasper.Orschulko@iris-sensing.com

• • • • • • • • • • • • • • • • • • • • • • • • • •

iris-GmbH
infrared & intelligent sensors
Schnellerstraße 1-5 | 12439 Berlin

https://iris-sensing.com/





On Thu, 2021-12-09 at 09:32 -1000, Steve Sakoman wrote:
> On Thu, Dec 9, 2021 at 7:38 AM Jasper Orschulko
> <Jasper.Orschulko@iris-sensing.com> wrote:
> > 
> > -----BEGIN PGP SIGNED MESSAGE-----
> > Hash: SHA256
> > 
> > Hi,
> > 
> > I can't provide any details yet, but I can say with certainty that
> > this
> > patch breaks our build (using the parent commit
> >         746b301d37f9b7333f3d93e6fb7ea2808665df41 as refspec during
> > the build worksasexpected):
> > 
> > [...] undefined reference to `testing::*
> > 
> > Can someone confirm this issue? Feel free to reach out for further
> > details.
> 
> I've not seen any issues in either local or autobuilder testing, so I
> think we need more details!
> 
> Steve
> 
> > On Fri, 2021-12-03 at 08:19 -1000, Steve Sakoman wrote:
> > > From: Eero Aaltonen <eero.aaltonen@vaisala.com>
> > > 
> > > `googlemock` has been absorbed into the
> > > [googletest](https://github.com/google/googletest) project and is
> > > built
> > > and installed from the same source tree.
> > > 
> > > `googletest` has provided a CMake Config-file Package starting
> > > with
> > > GTest 1.8.1. `find_package(GTest ...)` by default dispatches
> > > first to
> > > CMake Find Module. Starting with CMake commit
> > > 2327b4330cce157d616ff8b611b3e77568d00351 in CMake v3.20.0 the
> > > module
> > > dispatches onward to the Config-file Package so that the same
> > > targets
> > > are available. In pre v3.20.0 versions of CMake however the Find
> > > Module
> > > masks the targets provided by the upstream `GTest` package.
> > > 
> > > Update `Modules/FindGTest.cmake` to provide the same targets as
> > > the
> > > CMake Config-file Package and backwards compatible targets and
> > > result
> > > variables.
> > > 
> > > Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
> > > Signed-off-by: Steve Sakoman <steve@sakoman.com>
> > > ---
> > >  .../cmake/cmake-native_3.16.5.bb              |   1 +
> > >  ...ndGTest-Add-target-for-gmock-library.patch | 255
> > > ++++++++++++++++++
> > >  2 files changed, 256 insertions(+)
> > >  create mode 100644 meta/recipes-devtools/cmake/cmake/0006-cmake-
> > > FindGTest-Add-target-for-gmock-library.patch
> > > 
> > > diff --git a/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> > > b/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> > > index b2952ee5f5..96a7be6770 100644
> > > --- a/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> > > +++ b/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
> > > @@ -7,6 +7,7 @@ SRC_URI += "file://OEToolchainConfig.cmake \
> > >              file://environment.d-cmake.sh \
> > > 
> > > file://0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch
> > >  \
> > > 
> > > file://0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch
> > >  \
> > > +
> > > file://0006-cmake-FindGTest-Add-target-for-gmock-library.patch \
> > >              "
> > > 
> > > 
> > > diff --git a/meta/recipes-devtools/cmake/cmake/0006-cmake-
> > > FindGTest-
> > > Add-target-for-gmock-library.patch b/meta/recipes-
> > > devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-
> > > library.patch
> > > new file mode 100644
> > > index 0000000000..267f586a71
> > > --- /dev/null
> > > +++ b/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-
> > > target-for-gmock-library.patch
> > > @@ -0,0 +1,255 @@
> > > +From 39eae0d6c1b398f18761abac7f55944f0290f8a1 Mon Sep 17
> > > 00:00:00
> > > 2001
> > > +From: Eero Aaltonen <eero.aaltonen@iki.fi>
> > > +Date: Sun, 17 Oct 2021 17:13:07 +0300
> > > +Subject: [PATCH] FindGTest: Add target for gmock library
> > > +
> > > +`googlemock` has been absorbed into the
> > > +[googletest](https://github.com/google/googletest) project and
> > > is
> > > built
> > > +and installed from the same source tree.
> > > +
> > > +As GTest may be built with or without GMock, skip GMock if it is
> > > not
> > > +present.
> > > +
> > > +Do not provide result variables for GMock.  They are not
> > > provided by
> > > +upstream GTest's CMake Package Configuration File.
> > > +
> > > +Also update the test case to cover linking to `GTest::gmock`.
> > > +
> > > +The patch was imported from the Kitware git server
> > > +(git@gitlab.kitware.com:cmake/cmake.git) as of commit id
> > > +50bf457a0dd857cf976b22c5be7d333493233d1e
> > > +
> > > +Patch was modified to support upper case variable `GTEST_FOUND`.
> > > +
> > > +Upstream-Status: Accepted
> > > [https://gitlab.kitware.com/cmake/cmake/-/merge_requests/6632]
> > > +Milestone: 3.23.0
> > > +
> > > +Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
> > > +---
> > > + .../dev/FindGTest-target-for-gmock.rst        |   4 +
> > > + Modules/FindGTest.cmake                       | 133
> > > +++++++++++++++---
> > > + Tests/FindGTest/Test/CMakeLists.txt           |   4 +
> > > + 3 files changed, 121 insertions(+), 20 deletions(-)
> > > + create mode 100644 Help/release/dev/FindGTest-target-for-
> > > gmock.rst
> > > +
> > > +diff --git a/Help/release/dev/FindGTest-target-for-gmock.rst
> > > b/Help/release/dev/FindGTest-target-for-gmock.rst
> > > +new file mode 100644
> > > +index 0000000000..f78242c80e
> > > +--- /dev/null
> > > ++++ b/Help/release/dev/FindGTest-target-for-gmock.rst
> > > +@@ -0,0 +1,4 @@
> > > ++FindGTest-target-for-gmock
> > > ++--------------------------
> > > ++
> > > ++* The :module:`FindGTest` module now provides a target for
> > > GMock,
> > > if found.
> > > +diff --git a/Modules/FindGTest.cmake b/Modules/FindGTest.cmake
> > > +index e015a9840f..0331049594 100644
> > > +--- a/Modules/FindGTest.cmake
> > > ++++ b/Modules/FindGTest.cmake
> > > +@@ -7,10 +7,23 @@ FindGTest
> > > +
> > > + Locate the Google C++ Testing Framework.
> > > +
> > > ++.. versionadded:: 3.20
> > > ++  Upstream ``GTestConfig.cmake`` is used if possible.
> > > ++
> > > + Imported targets
> > > + ^^^^^^^^^^^^^^^^
> > > +
> > > +-This module defines the following :prop_tgt:`IMPORTED` targets:
> > > ++  This module defines the following :prop_tgt:`IMPORTED`
> > > targets:
> > > ++
> > > ++``GTest::gtest``
> > > ++  The Google Test ``gtest`` library, if found; adds
> > > Thread::Thread
> > > ++  automatically
> > > ++``GTest::gtest_main``
> > > ++  The Google Test ``gtest_main`` library, if found
> > > ++
> > > ++.. deprecated:: 3.20
> > > ++  For backwards compatibility, this module defines additionally
> > > the
> > > ++  following deprecated :prop_tgt:`IMPORTED` targets (available
> > > since 3.5):
> > > +
> > > + ``GTest::GTest``
> > > +   The Google Test ``gtest`` library, if found; adds
> > > Thread::Thread
> > > +@@ -18,7 +31,6 @@ This module defines the following
> > > :prop_tgt:`IMPORTED` targets:
> > > + ``GTest::Main``
> > > +   The Google Test ``gtest_main`` library, if found
> > > +
> > > +-
> > > + Result variables
> > > + ^^^^^^^^^^^^^^^^
> > > +
> > > +@@ -146,8 +158,42 @@ function(__gtest_import_library _target
> > > _var
> > > _config)
> > > +     endif()
> > > + endfunction()
> > > +
> > > ++function(__gtest_define_backwards_compatible_library_targets)
> > > ++    set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES}
> > > ${GTEST_MAIN_LIBRARIES} PARENT_SCOPE)
> > > ++
> > > ++    # Add targets mapping the same library names as defined in
> > > ++    # older versions of CMake's FindGTest
> > > ++    if(NOT TARGET GTest::GTest)
> > > ++        add_library(GTest::GTest INTERFACE IMPORTED)
> > > ++        target_link_libraries(GTest::GTest INTERFACE
> > > GTest::gtest)
> > > ++    endif()
> > > ++    if(NOT TARGET GTest::Main)
> > > ++        add_library(GTest::Main INTERFACE IMPORTED)
> > > ++        target_link_libraries(GTest::Main INTERFACE
> > > GTest::gtest_main)
> > > ++    endif()
> > > ++endfunction()
> > > ++
> > > + #
> > > +
> > > ++include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs
> > > .cma
> > > ke)
> > > ++
> > > ++# first specifically look for the CMake version of GTest
> > > ++find_package(GTest QUIET NO_MODULE)
> > > ++
> > > ++# if we found the GTest cmake package then we are done, and
> > > ++# can print what we found and return.
> > > ++if(GTest_FOUND)
> > > ++    set(GTEST_FOUND ${GTest_FOUND})
> > > ++    FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest HANDLE_COMPONENTS
> > > CONFIG_MODE)
> > > ++
> > > ++    set(GTEST_LIBRARIES      GTest::gtest)
> > > ++    set(GTEST_MAIN_LIBRARIES GTest::gtest_main)
> > > ++
> > > ++    __gtest_define_backwards_compatible_library_targets()
> > > ++
> > > ++    return()
> > > ++endif()
> > > ++
> > > + if(NOT DEFINED GTEST_MSVC_SEARCH)
> > > +     set(GTEST_MSVC_SEARCH MD)
> > > + endif()
> > > +@@ -194,50 +240,97 @@ if(MSVC AND GTEST_MSVC_SEARCH STREQUAL
> > > "MD")
> > > +     __gtest_find_library(GTEST_LIBRARY_DEBUG      gtest-mdd
> > > gtestd)
> > > +     __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main-md
> > > gtest_main)
> > > +     __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-
> > > mdd
> > > gtest_maind)
> > > ++    __gtest_find_library(GMOCK_LIBRARY            gmock-md 
> > > gmock)
> > > ++    __gtest_find_library(GMOCK_LIBRARY_DEBUG      gmock-mdd
> > > gmockd)
> > > ++    __gtest_find_library(GMOCK_MAIN_LIBRARY       gmock_main-md
> > > gmock_main)
> > > ++    __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_main-
> > > mdd
> > > gmock_maind)
> > > + else()
> > > +     __gtest_find_library(GTEST_LIBRARY            gtest)
> > > +     __gtest_find_library(GTEST_LIBRARY_DEBUG      gtestd)
> > > +     __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main)
> > > +     __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind)
> > > ++    __gtest_find_library(GMOCK_LIBRARY            gmock)
> > > ++    __gtest_find_library(GMOCK_LIBRARY_DEBUG      gmockd)
> > > ++    __gtest_find_library(GMOCK_MAIN_LIBRARY       gmock_main)
> > > ++    __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_maind)
> > > + endif()
> > > +
> > > +-
> > > include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.c
> > > make
> > > )
> > > + FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG
> > > GTEST_LIBRARY
> > > GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
> > > +
> > > +-if(GTEST_FOUND)
> > > ++if(GMOCK_LIBRARY AND GMOCK_MAIN_LIBRARY)
> > > ++    set(GMock_FOUND True)
> > > ++else()
> > > ++    set(GMock_FOUND False)
> > > ++endif()
> > > ++
> > > ++if(GTest_FOUND)
> > > +     set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
> > > +     __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})
> > > +
> > > +     find_package(Threads QUIET)
> > > +
> > > +-    if(NOT TARGET GTest::GTest)
> > > ++    if(NOT TARGET GTest::gtest)
> > > +         __gtest_determine_library_type(GTEST_LIBRARY)
> > > +-        add_library(GTest::GTest ${GTEST_LIBRARY_TYPE}
> > > IMPORTED)
> > > ++        add_library(GTest::gtest ${GTEST_LIBRARY_TYPE}
> > > IMPORTED)
> > > +         if(TARGET Threads::Threads)
> > > +-            set_target_properties(GTest::GTest PROPERTIES
> > > ++            set_target_properties(GTest::gtest PROPERTIES
> > > +                 INTERFACE_LINK_LIBRARIES Threads::Threads)
> > > +         endif()
> > > +         if(GTEST_LIBRARY_TYPE STREQUAL "SHARED")
> > > +-            set_target_properties(GTest::GTest PROPERTIES
> > > ++            set_target_properties(GTest::gtest PROPERTIES
> > > +                 INTERFACE_COMPILE_DEFINITIONS
> > > "GTEST_LINKED_AS_SHARED_LIBRARY=1")
> > > +         endif()
> > > +         if(GTEST_INCLUDE_DIRS)
> > > +-            set_target_properties(GTest::GTest PROPERTIES
> > > ++            set_target_properties(GTest::gtest PROPERTIES
> > > +                 INTERFACE_INCLUDE_DIRECTORIES
> > > "${GTEST_INCLUDE_DIRS}")
> > > +         endif()
> > > +-        __gtest_import_library(GTest::GTest GTEST_LIBRARY "")
> > > +-        __gtest_import_library(GTest::GTest GTEST_LIBRARY
> > > "RELEASE")
> > > +-        __gtest_import_library(GTest::GTest GTEST_LIBRARY
> > > "DEBUG")
> > > ++        __gtest_import_library(GTest::gtest GTEST_LIBRARY "")
> > > ++        __gtest_import_library(GTest::gtest GTEST_LIBRARY
> > > "RELEASE")
> > > ++        __gtest_import_library(GTest::gtest GTEST_LIBRARY
> > > "DEBUG")
> > > +     endif()
> > > +-    if(NOT TARGET GTest::Main)
> > > ++    if(NOT TARGET GTest::gtest_main)
> > > +         __gtest_determine_library_type(GTEST_MAIN_LIBRARY)
> > > +-        add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE}
> > > IMPORTED)
> > > +-        set_target_properties(GTest::Main PROPERTIES
> > > +-            INTERFACE_LINK_LIBRARIES "GTest::GTest")
> > > +-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY
> > > "")
> > > +-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY
> > > "RELEASE")
> > > +-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY
> > > "DEBUG")
> > > ++        add_library(GTest::gtest_main
> > > ${GTEST_MAIN_LIBRARY_TYPE}
> > > IMPORTED)
> > > ++        set_target_properties(GTest::gtest_main PROPERTIES
> > > ++            INTERFACE_LINK_LIBRARIES "GTest::gtest")
> > > ++        __gtest_import_library(GTest::gtest_main
> > > GTEST_MAIN_LIBRARY
> > > "")
> > > ++        __gtest_import_library(GTest::gtest_main
> > > GTEST_MAIN_LIBRARY
> > > "RELEASE")
> > > ++        __gtest_import_library(GTest::gtest_main
> > > GTEST_MAIN_LIBRARY
> > > "DEBUG")
> > > ++    endif()
> > > ++
> > > ++    __gtest_define_backwards_compatible_library_targets()
> > > ++endif()
> > > ++
> > > ++if(GMock_FOUND)
> > > ++    if(NOT TARGET GTest::gmock)
> > > ++        __gtest_determine_library_type(GMOCK_LIBRARY)
> > > ++        add_library(GTest::gmock ${GMOCK_LIBRARY_TYPE}
> > > IMPORTED)
> > > ++        set(_gmock_link_libraries "GTest::gtest")
> > > ++        if(TARGET Threads::Threads)
> > > ++            list(APPEND _gmock_link_libraries Threads::Threads)
> > > ++        endif()
> > > ++        set_target_properties(GTest::gmock PROPERTIES
> > > ++            INTERFACE_LINK_LIBRARIES
> > > "${_gmock_link_libraries}")
> > > ++        if(GMOCK_LIBRARY_TYPE STREQUAL "SHARED")
> > > ++            set_target_properties(GTest::gmock PROPERTIES
> > > ++                INTERFACE_COMPILE_DEFINITIONS
> > > "GMOCK_LINKED_AS_SHARED_LIBRARY=1")
> > > ++        endif()
> > > ++        if(GTEST_INCLUDE_DIRS)
> > > ++            set_target_properties(GTest::gmock PROPERTIES
> > > ++                INTERFACE_INCLUDE_DIRECTORIES
> > > "${GTEST_INCLUDE_DIRS}")
> > > ++        endif()
> > > ++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY "")
> > > ++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY
> > > "RELEASE")
> > > ++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY
> > > "DEBUG")
> > > ++    endif()
> > > ++    if(NOT TARGET GTest::gmock_main)
> > > ++        __gtest_determine_library_type(GMOCK_MAIN_LIBRARY)
> > > ++        add_library(GTest::gmock_main
> > > ${GMOCK_MAIN_LIBRARY_TYPE}
> > > IMPORTED)
> > > ++        set_target_properties(GTest::gmock_main PROPERTIES
> > > ++            INTERFACE_LINK_LIBRARIES "GTest::gmock")
> > > ++        __gtest_import_library(GTest::gmock_main
> > > GMOCK_MAIN_LIBRARY
> > > "")
> > > ++        __gtest_import_library(GTest::gmock_main
> > > GMOCK_MAIN_LIBRARY
> > > "RELEASE")
> > > ++        __gtest_import_library(GTest::gmock_main
> > > GMOCK_MAIN_LIBRARY
> > > "DEBUG")
> > > +     endif()
> > > + endif()
> > > +diff --git a/Tests/FindGTest/Test/CMakeLists.txt
> > > b/Tests/FindGTest/Test/CMakeLists.txt
> > > +index b65b9d28f6..7d3a378a65 100644
> > > +--- a/Tests/FindGTest/Test/CMakeLists.txt
> > > ++++ b/Tests/FindGTest/Test/CMakeLists.txt
> > > +@@ -12,3 +12,7 @@ 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)
> > > ++
> > > ++add_executable(test_gmock_tgt main.cxx)
> > > ++target_link_libraries(test_gmock_tgt GTest::gmock_main)
> > > ++add_test(NAME test_gmock_tgt COMMAND test_gmock_tgt)
> > > +--
> > > +2.17.1
> > > +
> > -----BEGIN PGP SIGNATURE-----
> > 
> > iQEzBAEBCAAdFiEE4WyPMIC5Ap4+Ooo1Ygqew07VMNUFAmGyPwAACgkQYgqew07V
> > MNU+qwf/a6pDdacJlCGlNha+d2AbkAqiAlC/djP0i5h17mhRhvfZWwvm8DlyXUNL
> > oYjhi7y6PvO2H7TTsACey7bBcGBwyikTrpBrloxaa+KDKkG1OIvpzJBlRNGA/PUT
> > vZMmDtL6S4E3SuxwBT8P/ShH+RSijJDWVq+9UgNz6jyuNIx4lSVU9lVTACNpN4Mj
> > PI5YXl3g6HZA364UnEZ+KFKwoc5Ihm5U71KkKKekNaOVNf4rzkcwy8bQFc0WyH42
> > 4N/sPDByu/8INnabZm04ypqIOAMGOKsLjuZqvy2PeFiBoXCRsxJD9SF6iFFVeuuc
> > /lP9iIFOIHxUFkeopGvLH7ol8YQtow==
> > =72K+
> > -----END PGP SIGNATURE-----
> > 
> > -=-=-=-=-=-=-=-=-=-=-=-
> > Links: You receive all messages sent to this group.
> > View/Reply Online (#159473):
> > https://lists.openembedded.org/g/openembedded-core/message/159473
> > Mute This Topic: https://lists.openembedded.org/mt/87483225/3617601
> > Group Owner: openembedded-core+owner@lists.openembedded.org
> > Unsubscribe:
> > https://lists.openembedded.org/g/openembedded-core/unsub [
> > sakoman@gmail.com]
> > -=-=-=-=-=-=-=-=-=-=-=-
> > 
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEE4WyPMIC5Ap4+Ooo1Ygqew07VMNUFAmGzoSAACgkQYgqew07V
MNUawAf/aoqsdt2f0at05sKUMQRvby+wwBdq+0MnSzQvnkalYZmqVWu9EmVobIaL
PgZyzhBFaCMhiKA80sirEqDwippgOyVMtydaXJBNhztCnsyg2pbmouaOZsmjeJ/L
bCbJhK+z3eaXzDivZ37/5oIs97hynTgeanJlpowsuE6FXEX8Q8hU7vPjhVjGTeIE
wKEGDqDJUMwrmaSmDf+pQcikE5TmsOZyGS006c6S6FmpifImzwM8J/sxmOWtTaN1
EmDGj7h7lsG3+v7XkOODTdDn0Teoe61x0uIfPqvK35ig8V6SP/ylwKF81zK248d/
TWMB7wqyaL6+9gkqvreG96h4eFY6JQ==
=+DGS
-----END PGP SIGNATURE-----
Aaltonen Eero Dec. 13, 2021, 1:03 p.m. UTC | #4
On Fri, 2021-12-10 at 18:49 +0000, Jasper Orschulko wrote:
> Hello everyone,
> 
> after some digging we identified the issue to be on our part.
> We have been using "GTEST_LIBRARY" and "GTEST_MAIN_LIBRARY" in our
> CMake scripts instead of "GTEST_LIBRARIES" and
> "GTEST_MAIN_LIBRARIES",
> as described in the cmake docs:
> 
https://cmake.org/cmake/help/v3.16/module/FindGTest.html#result-variables

Thank you for providing more details.

The gmock target can be backported to dunfell in an alternative way, by
leaving out the
    find_package(GTest QUIET NO_MODULE)

call and subsequent lines and letting the FindModule create all the
definitions. This would leave also the undocumented variables intact,
if that is desired.

This should be as simple as dropping the lines
----------------------------------------------
# first specifically look for the CMake version of GTest
find_package(GTest QUIET NO_MODULE)

# if we found the GTest cmake package then we are done, and
# can print what we found and return.
if(GTest_FOUND)
    set(GTEST_FOUND ${GTest_FOUND})
    FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest HANDLE_COMPONENTS
CONFIG_MODE)

    set(GTEST_LIBRARIES      GTest::gtest)
    set(GTEST_MAIN_LIBRARIES GTest::gtest_main)

    __gtest_define_backwards_compatible_library_targets()

    return()
endif()
----------------------------------------------
Jasper Orschulko Dec. 13, 2021, 5:41 p.m. UTC | #5
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Hi Eero,

my first reflex was to say, that I don't believe this to be necessary.
As you already said, these variables aren't documented and thus I'd
argue that you don't have to consider them for maintaining backwards
compatibility during backports. I personally see this as a bug on our
part and as a coincidence that our setup worked pre-patch.

However, I'm not sure WHY those two variables where actually used by us
or where they originated from. Going as far back as cmake 3.0, these
variables where never documented, however doing a quick search for
those reveals that they actually are used in other (older?) projects.
So I'm not quite sure how many other users might be affected by this.
Maybe we actually SHOULD keep supporting them for the LTS branch, just
in case?

- -- 
With best regards

Jasper Orschulko
DevOps Engineer

Tel. +49 30 58 58 14 265
Fax +49 30 58 58 14 999
Jasper.Orschulko@iris-sensing.com

• • • • • • • • • • • • • • • • • • • • • • • • • •

iris-GmbH
infrared & intelligent sensors
Schnellerstraße 1-5 | 12439 Berlin

https://iris-sensing.com/





On Mon, 2021-12-13 at 15:03 +0200, Eero Aaltonen wrote:
> On Fri, 2021-12-10 at 18:49 +0000, Jasper Orschulko wrote:
> > Hello everyone,
> > 
> > after some digging we identified the issue to be on our part.
> > We have been using "GTEST_LIBRARY" and "GTEST_MAIN_LIBRARY" in our
> > CMake scripts instead of "GTEST_LIBRARIES" and
> > "GTEST_MAIN_LIBRARIES",
> > as described in the cmake docs:
> > 
> https://cmake.org/cmake/help/v3.16/module/FindGTest.html#result-variables
> 
> Thank you for providing more details.
> 
> The gmock target can be backported to dunfell in an alternative way,
> by
> leaving out the
>     find_package(GTest QUIET NO_MODULE)
> 
> call and subsequent lines and letting the FindModule create all the
> definitions. This would leave also the undocumented variables intact,
> if that is desired.
> 
> This should be as simple as dropping the lines
> ----------------------------------------------
> # first specifically look for the CMake version of GTest
> find_package(GTest QUIET NO_MODULE)
> 
> # if we found the GTest cmake package then we are done, and
> # can print what we found and return.
> if(GTest_FOUND)
>     set(GTEST_FOUND ${GTest_FOUND})
>     FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest HANDLE_COMPONENTS
> CONFIG_MODE)
> 
>     set(GTEST_LIBRARIES      GTest::gtest)
>     set(GTEST_MAIN_LIBRARIES GTest::gtest_main)
> 
>     __gtest_define_backwards_compatible_library_targets()
> 
>     return()
> endif()
> ----------------------------------------------
> 
-----BEGIN PGP SIGNATURE-----

iQEzBAEBCAAdFiEE4WyPMIC5Ap4+Ooo1Ygqew07VMNUFAmG3hbsACgkQYgqew07V
MNW6Gwf8DcYj0KlqNSLpB3tlsplI4Wac9mfxAd/g2BoKcyekRK2IArMJKzNDEhi6
GqKar0z3QgRZQrF54X63/MnhaqIypHef+8YyUPVVYhq+HUZSXc+6c3SjIdVBBJn8
G04/pxmoLybBvqMmFcP67qhFlojo7yW2viK8stdVZ49VwfE3XIq3fSxrqE6xQq1V
nOoZw5DRLqgCGpeB41OebYXE1bOIX3WOgk5Pzkuf4Iq9bLDoWg5zXSxw0djYCMZS
2E6kHIwJavEVKhmQoC2IpiPrZ4cJQ57JZvIR95HsFkG/C/N6sKXlJu2VLId+5xdb
IwUexGr3vUCXGqrUTWOZE6kxhdo74Q==
=/Myf
-----END PGP SIGNATURE-----

Patch

diff --git a/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb b/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
index b2952ee5f5..96a7be6770 100644
--- a/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
+++ b/meta/recipes-devtools/cmake/cmake-native_3.16.5.bb
@@ -7,6 +7,7 @@  SRC_URI += "file://OEToolchainConfig.cmake \
             file://environment.d-cmake.sh \
             file://0001-CMakeDetermineSystem-use-oe-environment-vars-to-load.patch \
             file://0005-Disable-use-of-ext2fs-ext2_fs.h-by-cmake-s-internal-.patch \
+            file://0006-cmake-FindGTest-Add-target-for-gmock-library.patch \
             "
 
 
diff --git a/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-library.patch b/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-library.patch
new file mode 100644
index 0000000000..267f586a71
--- /dev/null
+++ b/meta/recipes-devtools/cmake/cmake/0006-cmake-FindGTest-Add-target-for-gmock-library.patch
@@ -0,0 +1,255 @@ 
+From 39eae0d6c1b398f18761abac7f55944f0290f8a1 Mon Sep 17 00:00:00 2001
+From: Eero Aaltonen <eero.aaltonen@iki.fi>
+Date: Sun, 17 Oct 2021 17:13:07 +0300
+Subject: [PATCH] FindGTest: Add target for gmock library
+
+`googlemock` has been absorbed into the
+[googletest](https://github.com/google/googletest) project and is built
+and installed from the same source tree.
+
+As GTest may be built with or without GMock, skip GMock if it is not
+present.
+
+Do not provide result variables for GMock.  They are not provided by
+upstream GTest's CMake Package Configuration File.
+
+Also update the test case to cover linking to `GTest::gmock`.
+
+The patch was imported from the Kitware git server
+(git@gitlab.kitware.com:cmake/cmake.git) as of commit id
+50bf457a0dd857cf976b22c5be7d333493233d1e
+
+Patch was modified to support upper case variable `GTEST_FOUND`.
+
+Upstream-Status: Accepted [https://gitlab.kitware.com/cmake/cmake/-/merge_requests/6632]
+Milestone: 3.23.0
+
+Signed-off-by: Eero Aaltonen <eero.aaltonen@vaisala.com>
+---
+ .../dev/FindGTest-target-for-gmock.rst        |   4 +
+ Modules/FindGTest.cmake                       | 133 +++++++++++++++---
+ Tests/FindGTest/Test/CMakeLists.txt           |   4 +
+ 3 files changed, 121 insertions(+), 20 deletions(-)
+ create mode 100644 Help/release/dev/FindGTest-target-for-gmock.rst
+
+diff --git a/Help/release/dev/FindGTest-target-for-gmock.rst b/Help/release/dev/FindGTest-target-for-gmock.rst
+new file mode 100644
+index 0000000000..f78242c80e
+--- /dev/null
++++ b/Help/release/dev/FindGTest-target-for-gmock.rst
+@@ -0,0 +1,4 @@
++FindGTest-target-for-gmock
++--------------------------
++
++* The :module:`FindGTest` module now provides a target for GMock, if found.
+diff --git a/Modules/FindGTest.cmake b/Modules/FindGTest.cmake
+index e015a9840f..0331049594 100644
+--- a/Modules/FindGTest.cmake
++++ b/Modules/FindGTest.cmake
+@@ -7,10 +7,23 @@ FindGTest
+ 
+ Locate the Google C++ Testing Framework.
+ 
++.. versionadded:: 3.20
++  Upstream ``GTestConfig.cmake`` is used if possible.
++
+ Imported targets
+ ^^^^^^^^^^^^^^^^
+ 
+-This module defines the following :prop_tgt:`IMPORTED` targets:
++  This module defines the following :prop_tgt:`IMPORTED` targets:
++
++``GTest::gtest``
++  The Google Test ``gtest`` library, if found; adds Thread::Thread
++  automatically
++``GTest::gtest_main``
++  The Google Test ``gtest_main`` library, if found
++
++.. deprecated:: 3.20
++  For backwards compatibility, this module defines additionally the
++  following deprecated :prop_tgt:`IMPORTED` targets (available since 3.5):
+ 
+ ``GTest::GTest``
+   The Google Test ``gtest`` library, if found; adds Thread::Thread
+@@ -18,7 +31,6 @@ This module defines the following :prop_tgt:`IMPORTED` targets:
+ ``GTest::Main``
+   The Google Test ``gtest_main`` library, if found
+ 
+-
+ Result variables
+ ^^^^^^^^^^^^^^^^
+ 
+@@ -146,8 +158,42 @@ function(__gtest_import_library _target _var _config)
+     endif()
+ endfunction()
+ 
++function(__gtest_define_backwards_compatible_library_targets)
++    set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} PARENT_SCOPE)
++
++    # Add targets mapping the same library names as defined in
++    # older versions of CMake's FindGTest
++    if(NOT TARGET GTest::GTest)
++        add_library(GTest::GTest INTERFACE IMPORTED)
++        target_link_libraries(GTest::GTest INTERFACE GTest::gtest)
++    endif()
++    if(NOT TARGET GTest::Main)
++        add_library(GTest::Main INTERFACE IMPORTED)
++        target_link_libraries(GTest::Main INTERFACE GTest::gtest_main)
++    endif()
++endfunction()
++
+ #
+ 
++include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
++
++# first specifically look for the CMake version of GTest
++find_package(GTest QUIET NO_MODULE)
++
++# if we found the GTest cmake package then we are done, and
++# can print what we found and return.
++if(GTest_FOUND)
++    set(GTEST_FOUND ${GTest_FOUND})
++    FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest HANDLE_COMPONENTS CONFIG_MODE)
++
++    set(GTEST_LIBRARIES      GTest::gtest)
++    set(GTEST_MAIN_LIBRARIES GTest::gtest_main)
++
++    __gtest_define_backwards_compatible_library_targets()
++
++    return()
++endif()
++
+ if(NOT DEFINED GTEST_MSVC_SEARCH)
+     set(GTEST_MSVC_SEARCH MD)
+ endif()
+@@ -194,50 +240,97 @@ if(MSVC AND GTEST_MSVC_SEARCH STREQUAL "MD")
+     __gtest_find_library(GTEST_LIBRARY_DEBUG      gtest-mdd gtestd)
+     __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main-md  gtest_main)
+     __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind)
++    __gtest_find_library(GMOCK_LIBRARY            gmock-md  gmock)
++    __gtest_find_library(GMOCK_LIBRARY_DEBUG      gmock-mdd gmockd)
++    __gtest_find_library(GMOCK_MAIN_LIBRARY       gmock_main-md  gmock_main)
++    __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_main-mdd gmock_maind)
+ else()
+     __gtest_find_library(GTEST_LIBRARY            gtest)
+     __gtest_find_library(GTEST_LIBRARY_DEBUG      gtestd)
+     __gtest_find_library(GTEST_MAIN_LIBRARY       gtest_main)
+     __gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind)
++    __gtest_find_library(GMOCK_LIBRARY            gmock)
++    __gtest_find_library(GMOCK_LIBRARY_DEBUG      gmockd)
++    __gtest_find_library(GMOCK_MAIN_LIBRARY       gmock_main)
++    __gtest_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_maind)
+ endif()
+ 
+-include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
+ 
+-if(GTEST_FOUND)
++if(GMOCK_LIBRARY AND GMOCK_MAIN_LIBRARY)
++    set(GMock_FOUND True)
++else()
++    set(GMock_FOUND False)
++endif()
++
++if(GTest_FOUND)
+     set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
+     __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})
+ 
+     find_package(Threads QUIET)
+ 
+-    if(NOT TARGET GTest::GTest)
++    if(NOT TARGET GTest::gtest)
+         __gtest_determine_library_type(GTEST_LIBRARY)
+-        add_library(GTest::GTest ${GTEST_LIBRARY_TYPE} IMPORTED)
++        add_library(GTest::gtest ${GTEST_LIBRARY_TYPE} IMPORTED)
+         if(TARGET Threads::Threads)
+-            set_target_properties(GTest::GTest PROPERTIES
++            set_target_properties(GTest::gtest PROPERTIES
+                 INTERFACE_LINK_LIBRARIES Threads::Threads)
+         endif()
+         if(GTEST_LIBRARY_TYPE STREQUAL "SHARED")
+-            set_target_properties(GTest::GTest PROPERTIES
++            set_target_properties(GTest::gtest PROPERTIES
+                 INTERFACE_COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
+         endif()
+         if(GTEST_INCLUDE_DIRS)
+-            set_target_properties(GTest::GTest PROPERTIES
++            set_target_properties(GTest::gtest PROPERTIES
+                 INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}")
+         endif()
+-        __gtest_import_library(GTest::GTest GTEST_LIBRARY "")
+-        __gtest_import_library(GTest::GTest GTEST_LIBRARY "RELEASE")
+-        __gtest_import_library(GTest::GTest GTEST_LIBRARY "DEBUG")
++        __gtest_import_library(GTest::gtest GTEST_LIBRARY "")
++        __gtest_import_library(GTest::gtest GTEST_LIBRARY "RELEASE")
++        __gtest_import_library(GTest::gtest GTEST_LIBRARY "DEBUG")
+     endif()
+-    if(NOT TARGET GTest::Main)
++    if(NOT TARGET GTest::gtest_main)
+         __gtest_determine_library_type(GTEST_MAIN_LIBRARY)
+-        add_library(GTest::Main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED)
+-        set_target_properties(GTest::Main PROPERTIES
+-            INTERFACE_LINK_LIBRARIES "GTest::GTest")
+-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "")
+-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "RELEASE")
+-        __gtest_import_library(GTest::Main GTEST_MAIN_LIBRARY "DEBUG")
++        add_library(GTest::gtest_main ${GTEST_MAIN_LIBRARY_TYPE} IMPORTED)
++        set_target_properties(GTest::gtest_main PROPERTIES
++            INTERFACE_LINK_LIBRARIES "GTest::gtest")
++        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY "")
++        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY "RELEASE")
++        __gtest_import_library(GTest::gtest_main GTEST_MAIN_LIBRARY "DEBUG")
++    endif()
++
++    __gtest_define_backwards_compatible_library_targets()
++endif()
++
++if(GMock_FOUND)
++    if(NOT TARGET GTest::gmock)
++        __gtest_determine_library_type(GMOCK_LIBRARY)
++        add_library(GTest::gmock ${GMOCK_LIBRARY_TYPE} IMPORTED)
++        set(_gmock_link_libraries "GTest::gtest")
++        if(TARGET Threads::Threads)
++            list(APPEND _gmock_link_libraries Threads::Threads)
++        endif()
++        set_target_properties(GTest::gmock PROPERTIES
++            INTERFACE_LINK_LIBRARIES "${_gmock_link_libraries}")
++        if(GMOCK_LIBRARY_TYPE STREQUAL "SHARED")
++            set_target_properties(GTest::gmock PROPERTIES
++                INTERFACE_COMPILE_DEFINITIONS "GMOCK_LINKED_AS_SHARED_LIBRARY=1")
++        endif()
++        if(GTEST_INCLUDE_DIRS)
++            set_target_properties(GTest::gmock PROPERTIES
++                INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIRS}")
++        endif()
++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY "")
++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY "RELEASE")
++        __gtest_import_library(GTest::gmock GMOCK_LIBRARY "DEBUG")
++    endif()
++    if(NOT TARGET GTest::gmock_main)
++        __gtest_determine_library_type(GMOCK_MAIN_LIBRARY)
++        add_library(GTest::gmock_main ${GMOCK_MAIN_LIBRARY_TYPE} IMPORTED)
++        set_target_properties(GTest::gmock_main PROPERTIES
++            INTERFACE_LINK_LIBRARIES "GTest::gmock")
++        __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY "")
++        __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY "RELEASE")
++        __gtest_import_library(GTest::gmock_main GMOCK_MAIN_LIBRARY "DEBUG")
+     endif()
+ endif()
+diff --git a/Tests/FindGTest/Test/CMakeLists.txt b/Tests/FindGTest/Test/CMakeLists.txt
+index b65b9d28f6..7d3a378a65 100644
+--- a/Tests/FindGTest/Test/CMakeLists.txt
++++ b/Tests/FindGTest/Test/CMakeLists.txt
+@@ -12,3 +12,7 @@ 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)
++
++add_executable(test_gmock_tgt main.cxx)
++target_link_libraries(test_gmock_tgt GTest::gmock_main)
++add_test(NAME test_gmock_tgt COMMAND test_gmock_tgt)
+-- 
+2.17.1
+