Allow building tests with our own copy of gtest/gmock, which will become mandatory when we depend on abseil-cpp and switch to C++17
This commit is contained in:
parent
41172ba5e1
commit
acc3813ea1
|
@ -5,3 +5,4 @@
|
||||||
/grpc-1.18.0.tar.gz
|
/grpc-1.18.0.tar.gz
|
||||||
/grpc-1.20.1.tar.gz
|
/grpc-1.20.1.tar.gz
|
||||||
/grpc-1.26.0.tar.gz
|
/grpc-1.26.0.tar.gz
|
||||||
|
/release-1.10.0.tar.gz
|
||||||
|
|
82
grpc.spec
82
grpc.spec
|
@ -1,3 +1,14 @@
|
||||||
|
# In gtest 1.36, we must link against the system abseil-cpp. We get linker
|
||||||
|
# errors here if we are not using C++17.
|
||||||
|
|
||||||
|
# However, gtest in Fedora uses the C++11 ABI, so we get linker errors building
|
||||||
|
# the tests if we use C++17. We must therefore bundle a copy of gtest in the
|
||||||
|
# source RPM rather than using the system copy. This is to be discouraged, but
|
||||||
|
# there is no alternative in this case. It is not treated as a bundled library
|
||||||
|
# because it is used only at build time, and is not installed.
|
||||||
|
%global gtest_version 1.10.0
|
||||||
|
%bcond_without system_gtest
|
||||||
|
|
||||||
# The CMake build works, except grpc_cli is only built with the tests.
|
# The CMake build works, except grpc_cli is only built with the tests.
|
||||||
%bcond_with cmake
|
%bcond_with cmake
|
||||||
|
|
||||||
|
@ -15,7 +26,6 @@
|
||||||
# collect2: error: ld returned 1 exit status
|
# collect2: error: ld returned 1 exit status
|
||||||
%bcond_with core_tests
|
%bcond_with core_tests
|
||||||
|
|
||||||
|
|
||||||
Name: grpc
|
Name: grpc
|
||||||
Version: 1.26.0
|
Version: 1.26.0
|
||||||
Release: 13%{?dist}
|
Release: 13%{?dist}
|
||||||
|
@ -64,6 +74,9 @@ License: ASL 2.0 and BSD
|
||||||
URL: https://www.%{name}.io
|
URL: https://www.%{name}.io
|
||||||
%global forgeurl https://github.com/%{name}/%{name}/
|
%global forgeurl https://github.com/%{name}/%{name}/
|
||||||
Source0: %{forgeurl}/archive/v%{version}/%{name}-%{version}.tar.gz
|
Source0: %{forgeurl}/archive/v%{version}/%{name}-%{version}.tar.gz
|
||||||
|
# Used only at build time (not a bundled library); see notes at definition of
|
||||||
|
# gtest_version macro for explanation and justification.
|
||||||
|
Source1: https://github.com/google/googletest/archive/release-%{gtest_version}.tar.gz
|
||||||
|
|
||||||
# ~~~~ C (core) and C++ (cpp) ~~~~
|
# ~~~~ C (core) and C++ (cpp) ~~~~
|
||||||
|
|
||||||
|
@ -88,10 +101,12 @@ BuildRequires: cmake(c-ares)
|
||||||
|
|
||||||
%if %{with core_tests}
|
%if %{with core_tests}
|
||||||
BuildRequires: cmake(benchmark)
|
BuildRequires: cmake(benchmark)
|
||||||
|
%if %{with system_gtest}
|
||||||
BuildRequires: cmake(gtest)
|
BuildRequires: cmake(gtest)
|
||||||
BuildRequires: pkgconfig(gmock)
|
BuildRequires: pkgconfig(gmock)
|
||||||
BuildRequires: pkgconfig(libprofiler)
|
BuildRequires: pkgconfig(libprofiler)
|
||||||
%endif
|
%endif
|
||||||
|
%endif
|
||||||
|
|
||||||
# ~~~~ Python ~~~~
|
# ~~~~ Python ~~~~
|
||||||
|
|
||||||
|
@ -391,6 +406,33 @@ sed -i \
|
||||||
-e 's:^GTEST_LIB =.*::' Makefile
|
-e 's:^GTEST_LIB =.*::' Makefile
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%if %{without system_gtest}
|
||||||
|
# Copy in the needed gtest/gmock implementations.
|
||||||
|
%setup -q -T -D -b 1
|
||||||
|
rm -rvf 'third_party/googletest'
|
||||||
|
mv '../googletest-release-%{gtest_version}' 'third_party/googletest'
|
||||||
|
%else
|
||||||
|
# Patch CMakeLists for external gtest/gmock.
|
||||||
|
#
|
||||||
|
# 1. Create dummy sources, adding a typedef so the translation unit is not
|
||||||
|
# empty, rather than removing references to these sources from
|
||||||
|
# CMakeLists.txt. This is so that we do not end up with executables with no
|
||||||
|
# sources, only libraries, which is a CMake error.
|
||||||
|
# 2. Either remove references to the corresponding include directories, or
|
||||||
|
# create the directories and leave them empty.
|
||||||
|
# 3. “Stuff” the external library into the target_link_libraries() for each
|
||||||
|
# test by noting that GMock/GTest/GFlags are always used together.
|
||||||
|
for gwhat in test mock
|
||||||
|
do
|
||||||
|
mkdir -p "third_party/googletest/google${gwhat}/src" \
|
||||||
|
"third_party/googletest/google${gwhat}/include"
|
||||||
|
echo "typedef int dummy_${gwhat}_type;" \
|
||||||
|
> "third_party/googletest/google${gwhat}/src/g${gwhat}-all.cc"
|
||||||
|
done
|
||||||
|
sed -r -i 's/^([[:blank:]]*)(\$\{_gRPC_GFLAGS_LIBRARIES\})/'\
|
||||||
|
'\1\2\n\1gtest\n\1gmock/' CMakeLists.txt
|
||||||
|
%endif
|
||||||
|
|
||||||
# Fix some of the weirdest accidentally-executable files
|
# Fix some of the weirdest accidentally-executable files
|
||||||
find . -type f -name '*.md' -perm /0111 -execdir chmod -v a-x '{}' '+'
|
find . -type f -name '*.md' -perm /0111 -execdir chmod -v a-x '{}' '+'
|
||||||
|
|
||||||
|
@ -444,29 +486,6 @@ dos2unix \
|
||||||
examples/cpp/helloworld/cmake_externalproject/CMakeLists.txt
|
examples/cpp/helloworld/cmake_externalproject/CMakeLists.txt
|
||||||
# We leave those under examples/csharp alone.
|
# We leave those under examples/csharp alone.
|
||||||
|
|
||||||
%if %{with cmake}
|
|
||||||
# Patch CMakeLists for external gtest/gmock.
|
|
||||||
#
|
|
||||||
# 1. Upstream expects single-source bundled copies, which are not distributed
|
|
||||||
# in the tarball. Create dummy sources, adding a typedef so the translation
|
|
||||||
# unit is not empty, rather than removing references to these sources from
|
|
||||||
# CMakeLists.txt. This is so that we do not end up with executables with no
|
|
||||||
# sources, only libraries, which is CMake error.
|
|
||||||
# 2. Either remove references to the corresponding include directories, or
|
|
||||||
# create the directories and leave them empty.
|
|
||||||
# 3. “Stuff” the external library into the target_link_libraries() for each
|
|
||||||
# test by noting that GMock/GTest/GFlags are always used together.
|
|
||||||
for gwhat in test mock
|
|
||||||
do
|
|
||||||
mkdir -p "third_party/googletest/google${gwhat}/src" \
|
|
||||||
"third_party/googletest/google${gwhat}/include"
|
|
||||||
echo "typedef int dummy_${gwhat}_type;" \
|
|
||||||
> "third_party/googletest/google${gwhat}/src/g${gwhat}-all.cc"
|
|
||||||
done
|
|
||||||
sed -r -i 's/^([[:blank:]]*)(\$\{_gRPC_GFLAGS_LIBRARIES\})/'\
|
|
||||||
'\1\2\n\1gtest\n\1gmock/' CMakeLists.txt
|
|
||||||
%endif
|
|
||||||
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
# ~~~~ C (core) and C++ (cpp) ~~~~
|
# ~~~~ C (core) and C++ (cpp) ~~~~
|
||||||
|
@ -656,6 +675,19 @@ env \
|
||||||
%{__python3} %{py_setup} %{?py_setup_args} test_lite || :
|
%{__python3} %{py_setup} %{?py_setup_args} test_lite || :
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
%if %{without system_gtest}
|
||||||
|
# As a sanity check for our claim that gtest/gmock are not bundled, check
|
||||||
|
# installed executables for symbols that appear to have come from gtest/gmock.
|
||||||
|
foundgtest=0
|
||||||
|
if find %{buildroot} -type f -perm /0111 \
|
||||||
|
-execdir objdump --syms --dynamic-syms --demangle '{}' '+' 2>/dev/null |
|
||||||
|
grep -E '[^:]testing::'
|
||||||
|
then
|
||||||
|
echo 'Found traces of gtest/gmock' 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%license LICENSE NOTICE.txt
|
%license LICENSE NOTICE.txt
|
||||||
|
@ -776,6 +808,8 @@ popd
|
||||||
* Drop explicit pkgconfig BR
|
* Drop explicit pkgconfig BR
|
||||||
- C (core) and C++ (cpp):
|
- C (core) and C++ (cpp):
|
||||||
* Let the -devel package require cmake-filesystem
|
* Let the -devel package require cmake-filesystem
|
||||||
|
* Allow building tests with our own copy of gtest/gmock, which will become
|
||||||
|
mandatory when we depend on abseil-cpp and switch to C++17
|
||||||
|
|
||||||
* Tue Feb 16 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1.26.0-12
|
* Tue Feb 16 2021 Benjamin A. Beasley <code@musicinmybrain.net> - 1.26.0-12
|
||||||
- C (core) and C++ (cpp):
|
- C (core) and C++ (cpp):
|
||||||
|
|
1
sources
1
sources
|
@ -1 +1,2 @@
|
||||||
SHA512 (grpc-1.26.0.tar.gz) = 4f7d067c582d0a9be7b7d4dd1e08acdbe6ff0686dfe92b5db5b7927f779410a4237acfd1c61d9f79eb2d00f86cf93cc7492fa372c1877e57c1aa23e9bb2648bb
|
SHA512 (grpc-1.26.0.tar.gz) = 4f7d067c582d0a9be7b7d4dd1e08acdbe6ff0686dfe92b5db5b7927f779410a4237acfd1c61d9f79eb2d00f86cf93cc7492fa372c1877e57c1aa23e9bb2648bb
|
||||||
|
SHA512 (release-1.10.0.tar.gz) = bd52abe938c3722adc2347afad52ea3a17ecc76730d8d16b065e165bc7477d762bce0997a427131866a89f1001e3f3315198204ffa5d643a9355f1f4d0d7b1a9
|
||||||
|
|
Loading…
Reference in New Issue