public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
From: Jasper Orschulko <Jasper.Orschulko@iris-sensing.com>
To: "openembedded-core@lists.openembedded.org"
	<openembedded-core@lists.openembedded.org>,
	"eero.aaltonen@vaisala.com" <eero.aaltonen@vaisala.com>,
	"steve@sakoman.com" <steve@sakoman.com>
Cc: "martin@mko.dev" <martin@mko.dev>,
	Daniel Baumgart <Daniel.Baumgart@iris-sensing.com>
Subject: Re: [OE-core][dunfell 16/18] cmake: FindGTest: Add target for gmock library
Date: Thu, 9 Dec 2021 17:38:08 +0000	[thread overview]
Message-ID: <929bdc2257cb8de09bec15e256db812bd83df309.camel@iris-sensing.com> (raw)
In-Reply-To: <80ab29b962cea17a4f2486ad25577bc830cdd8d9.1638555254.git.steve@sakoman.com>

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

  reply	other threads:[~2021-12-09 17:38 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-03 18:18 [OE-core][dunfell 00/18] Patch review Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 01/18] cve-extra-exclusions: add db CVEs to exclusion list Steve Sakoman
2021-12-05 12:39   ` Richard Purdie
2021-12-05 14:05     ` Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 02/18] glib-2.0: Add security fixes Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 03/18] busybox: Fix for CVE-2021-42374 Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 04/18] busybox: Fix for CVE-2021-42376 Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 05/18] vim: fix CVE-2021-3968 and CVE-2021-3973 Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 06/18] ncurses: Fix for CVE-2021-39537 Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 07/18] libsolv: update tag for missing CVEs Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 08/18] bind: update to 9.11.33 Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 09/18] bind: update to 9.11.34 Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 10/18] bind: update to 9.11.35 Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 11/18] libdnf: Backport bugfix for upgrade calc Steve Sakoman
2021-12-03 18:18 ` [OE-core][dunfell 12/18] dnf: Backport bugfix for upgrade Steve Sakoman
2021-12-03 18:19 ` [OE-core][dunfell 13/18] libunwind: Backport a fix for -fno-common option to compile Steve Sakoman
2021-12-03 18:19 ` [OE-core][dunfell 14/18] buildhistory: Fix srcrevs output Steve Sakoman
2021-12-03 18:19 ` [OE-core][dunfell 15/18] oeqa/parselogs: Fix quoting Steve Sakoman
2021-12-03 18:19 ` [OE-core][dunfell 16/18] cmake: FindGTest: Add target for gmock library Steve Sakoman
2021-12-09 17:38   ` Jasper Orschulko [this message]
2021-12-09 19:32     ` Steve Sakoman
2021-12-10 18:49       ` Jasper Orschulko
2021-12-13 13:03         ` Eero Aaltonen
2021-12-13 17:41           ` Jasper Orschulko
2021-12-03 18:19 ` [OE-core][dunfell 17/18] scripts/checklayer/common.py: Fixed a minor grammatical error Steve Sakoman
2021-12-03 18:19 ` [OE-core][dunfell 18/18] README.OE-Core.md: update URLs Steve Sakoman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=929bdc2257cb8de09bec15e256db812bd83df309.camel@iris-sensing.com \
    --to=jasper.orschulko@iris-sensing.com \
    --cc=Daniel.Baumgart@iris-sensing.com \
    --cc=eero.aaltonen@vaisala.com \
    --cc=martin@mko.dev \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=steve@sakoman.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox