blob: 6391fd499f348d9c5fa2613e1c88df41900b1b4b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
# Copyright 2008-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI="7"
inherit autotools elisp-common flag-o-matic multilib-minimal toolchain-funcs
if [[ "${PV}" == "9999" ]]; then
inherit git-r3
EGIT_REPO_URI="https://github.com/protocolbuffers/protobuf"
EGIT_SUBMODULES=()
fi
DESCRIPTION="Google's Protocol Buffers - Extensible mechanism for serializing structured data"
HOMEPAGE="https://developers.google.com/protocol-buffers/ https://github.com/protocolbuffers/protobuf"
if [[ "${PV}" == "9999" ]]; then
SRC_URI=""
else
SRC_URI="https://github.com/protocolbuffers/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
fi
LICENSE="BSD"
SLOT="0/28"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~x64-macos"
IUSE="emacs examples static-libs test zlib"
RESTRICT="!test? ( test )"
BDEPEND="emacs? ( app-editors/emacs:* )"
DEPEND="test? ( >=dev-cpp/gtest-1.9[${MULTILIB_USEDEP}] )
zlib? ( sys-libs/zlib[${MULTILIB_USEDEP}] )"
RDEPEND="emacs? ( app-editors/emacs:* )
zlib? ( sys-libs/zlib[${MULTILIB_USEDEP}] )"
PATCHES=(
"${FILESDIR}/${PN}-3.17.0-disable_no-warning-test.patch"
"${FILESDIR}/${PN}-3.17.0-system_libraries.patch"
"${FILESDIR}/${PN}-3.16.0-protoc_input_output_files.patch"
)
DOCS=(CHANGES.txt CONTRIBUTORS.txt README.md)
src_prepare() {
default
# https://github.com/protocolbuffers/protobuf/issues/7413
sed -e "/^AC_PROG_CXX_FOR_BUILD$/d" -i configure.ac || die
# https://github.com/protocolbuffers/protobuf/issues/8082
sed -e "/^TEST_F(IoTest, LargeOutput) {$/,/^}$/d" -i src/google/protobuf/io/zero_copy_stream_unittest.cc || die
# https://github.com/protocolbuffers/protobuf/issues/8459
sed \
-e "/^TEST(ArenaTest, BlockSizeSmallerThanAllocation) {$/a\\ if (sizeof(void*) == 4) {\n GTEST_SKIP();\n }" \
-e "/^TEST(ArenaTest, SpaceAllocated_and_Used) {$/a\\ if (sizeof(void*) == 4) {\n GTEST_SKIP();\n }" \
-i src/google/protobuf/arena_unittest.cc || die
# https://github.com/protocolbuffers/protobuf/issues/8460
sed -e "/^TEST(AnyTest, TestPackFromSerializationExceedsSizeLimit) {$/a\\ if (sizeof(void*) == 4) {\n GTEST_SKIP();\n }" -i src/google/protobuf/any_test.cc || die
eautoreconf
}
src_configure() {
append-cppflags -DGOOGLE_PROTOBUF_NO_RTTI
if tc-ld-is-gold; then
# https://sourceware.org/bugzilla/show_bug.cgi?id=24527
tc-ld-disable-gold
fi
multilib-minimal_src_configure
}
multilib_src_configure() {
local options=(
$(use_enable static-libs static)
$(use_with zlib)
)
if tc-is-cross-compiler; then
# Build system uses protoc when building, so protoc copy runnable on host is needed.
mkdir -p "${WORKDIR}/build" || die
pushd "${WORKDIR}/build" > /dev/null || die
ECONF_SOURCE="${S}" econf_build "${options[@]}"
options+=(--with-protoc="$(pwd)/src/protoc")
popd > /dev/null || die
fi
ECONF_SOURCE="${S}" econf "${options[@]}"
}
src_compile() {
multilib-minimal_src_compile
if use emacs; then
elisp-compile editors/protobuf-mode.el
fi
}
multilib_src_compile() {
if tc-is-cross-compiler; then
emake -C "${WORKDIR}/build/src" protoc
fi
default
}
multilib_src_test() {
emake check
}
multilib_src_install_all() {
find "${ED}" -name "*.la" -delete || die
insinto /usr/share/vim/vimfiles/syntax
doins editors/proto.vim
insinto /usr/share/vim/vimfiles/ftdetect
doins "${FILESDIR}/proto.vim"
if use emacs; then
elisp-install ${PN} editors/protobuf-mode.el*
elisp-site-file-install "${FILESDIR}/70${PN}-gentoo.el"
fi
if use examples; then
DOCS+=(examples)
docompress -x /usr/share/doc/${PF}/examples
fi
einstalldocs
}
pkg_postinst() {
use emacs && elisp-site-regen
}
pkg_postrm() {
use emacs && elisp-site-regen
}
|