summaryrefslogtreecommitdiff
blob: 8a44d989ccf41d14e96e9ebb8392bb0f698dce0f (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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=5
AUTOTOOLS_AUTORECONF=1
AUTOTOOLS_PRUNE_LIBTOOL_FILES=all
JAVA_PKG_IUSE="source"
PYTHON_COMPAT=( python2_7 )
DISTUTILS_OPTIONAL=1

inherit autotools-multilib eutils flag-o-matic toolchain-funcs distutils-r1 java-pkg-opt-2 elisp-common

DESCRIPTION="Google's Protocol Buffers -- an efficient method of encoding structured data"
HOMEPAGE="https://code.google.com/p/protobuf/ https://github.com/google/protobuf/"
SRC_URI="https://github.com/google/${PN}/releases/download/v${PV}/${P}.tar.bz2"

LICENSE="Apache-2.0"
SLOT="0/9" # subslot = soname major version
KEYWORDS="alpha amd64 arm arm64 hppa ia64 ~mips ppc ppc64 sh sparc x86 ~amd64-linux ~arm-linux ~x86-linux ~x64-macos ~x86-macos"
IUSE="emacs examples java python static-libs vim-syntax zlib"

CDEPEND="emacs? ( virtual/emacs )
	python? ( ${PYTHON_DEPS} )
	zlib? ( >=sys-libs/zlib-1.2.8-r1[${MULTILIB_USEDEP}] )"
DEPEND="${CDEPEND}
	java? ( >=virtual/jdk-1.5 )
	python? (
		dev-python/google-apputils[${PYTHON_USEDEP}]
		dev-python/setuptools[${PYTHON_USEDEP}]
	)"
RDEPEND="${CDEPEND}
	java? ( >=virtual/jre-1.5 )"

src_prepare() {
	append-cxxflags -DGOOGLE_PROTOBUF_NO_RTTI

	# breaks Darwin, bug #472514
	[[ ${CHOST} != *-darwin* ]] && epatch "${FILESDIR}"/${PN}-2.3.0-asneeded-2.patch

	# fix build with emacs-24.4 (bug #524100)
	epatch "${FILESDIR}"/${PN}-2.5.0-emacs-24.4.patch
	epatch "${FILESDIR}"/${PN}-2.6.1-protoc-cmdline.patch

	autotools-multilib_src_prepare

	if use python; then
		cd python && distutils-r1_src_prepare
	fi
}

src_configure() {
	local myeconfargs=(
		$(use_with zlib)
	)

	if tc-is-cross-compiler; then
		# The build system wants `protoc` when building, so we need a copy that
		# runs on the host.  This is more hermetic than relying on the version
		# installed in the host being the exact same version.
		mkdir -p "${WORKDIR}"/build || die
		pushd "${WORKDIR}"/build >/dev/null
		ECONF_SOURCE=${S} econf_build "${myeconfargs[@]}"
		myeconfargs+=( --with-protoc="${PWD}"/src/protoc )
		popd >/dev/null
	fi

	autotools-multilib_src_configure
}

multilib_src_compile() {
	default

	if multilib_is_native_abi; then
		if use python; then
			einfo "Compiling Python library ..."
			pushd "${S}"/python >/dev/null
			PROTOC="${BUILD_DIR}"/src/protoc distutils-r1_src_compile
			popd >/dev/null
		fi

		if use java; then
			einfo "Compiling Java library ..."
			pushd "${S}" >/dev/null
			"${BUILD_DIR}"/src/protoc --java_out=java/src/main/java --proto_path=src src/google/protobuf/descriptor.proto
			mkdir java/build
			pushd java/src/main/java >/dev/null
			ejavac -d ../../../build $(find . -name '*.java') || die "java compilation failed"
			popd >/dev/null
			jar cf ${PN}.jar -C java/build . || die "jar failed"
			popd >/dev/null
		fi
	fi
}

src_compile() {
	if tc-is-cross-compiler; then
		emake -C "${WORKDIR}"/build/src protoc
	fi

	autotools-multilib_src_compile

	if use emacs; then
		elisp-compile "${S}"/editors/protobuf-mode.el
	fi
}

src_test() {
	autotools-multilib_src_test check

	if use python; then
		pushd python >/dev/null
		distutils-r1_src_test
		popd >/dev/null
	fi
}

src_install() {
	autotools-multilib_src_install

	dodoc CHANGES.txt CONTRIBUTORS.txt README.md

	if use python; then
		pushd python >/dev/null
		distutils-r1_src_install
		popd >/dev/null
	fi

	if use java; then
		java-pkg_dojar ${PN}.jar
		use source && java-pkg_dosrc java/src/main/java/*
	fi

	if use vim-syntax; then
		insinto /usr/share/vim/vimfiles/syntax
		doins editors/proto.vim
		insinto /usr/share/vim/vimfiles/ftdetect/
		doins "${FILESDIR}"/proto.vim
	fi

	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
		dodoc -r examples
		docompress -x /usr/share/doc/${PF}/examples
	fi
}

pkg_postinst() {
	use emacs && elisp-site-regen
}

pkg_postrm() {
	use emacs && elisp-site-regen
}