summaryrefslogtreecommitdiff
blob: ade6ac7945518fd6802a7a224cea0d326baf82a2 (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
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

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 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/"
SRC_URI="https://protobuf.googlecode.com/files/${P}.tar.bz2"

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

CDEPEND="emacs? ( virtual/emacs )
	python? ( ${PYTHON_DEPS} )"
DEPEND="${CDEPEND}
	java? ( >=virtual/jdk-1.5 )
	python? ( dev-python/setuptools[${PYTHON_USEDEP}] )"
RDEPEND="${CDEPEND}
	java? ( >=virtual/jre-1.5 )"

src_prepare() {
	append-cxxflags -DGOOGLE_PROTOBUF_NO_RTTI

	epatch "${FILESDIR}"/${P}-x32.patch

	# 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}"/${P}-emacs-24.4.patch

	autotools-multilib_src_prepare

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

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() {
	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.txt

	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
}