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

EAPI="5"

PYTHON_COMPAT=( python2_7 python3_{4,5} )
PYTHON_REQ_USE='threads(+)'

inherit eutils python-r1 waf-utils toolchain-funcs

PYCAIRO_PYTHON2_VERSION="${PV}"
PYCAIRO_PYTHON3_VERSION="${PV}"

DESCRIPTION="Python bindings for the cairo library"
HOMEPAGE="http://cairographics.org/pycairo/ https://pypi.python.org/pypi/pycairo"
SRC_URI="
	http://cairographics.org/releases/py2cairo-${PYCAIRO_PYTHON2_VERSION}.tar.bz2
	http://cairographics.org/releases/pycairo-${PYCAIRO_PYTHON3_VERSION}.tar.bz2"

# LGPL-3 for pycairo 1.10.0.
# || ( LGPL-2.1 MPL-1.1 ) for pycairo 1.8.10.
LICENSE="LGPL-3 || ( LGPL-2.1 MPL-1.1 )"
SLOT="0"
KEYWORDS="alpha amd64 arm ~arm64 hppa ia64 ~mips ppc ppc64 ~s390 ~sh sparc x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos"
IUSE="doc examples +svg test xcb"

REQUIRED_USE="${PYTHON_REQUIRED_USE}"

# Note: xpyb is used as the C header, not Python modules
RDEPEND="${PYTHON_DEPS}
	>=x11-libs/cairo-1.10.0[svg?,xcb?]
	xcb? ( x11-libs/xpyb )"
DEPEND="${RDEPEND}
	virtual/pkgconfig
	test? ( dev-python/pytest[${PYTHON_USEDEP}] )
"

src_prepare() {
	pushd "${WORKDIR}/pycairo-${PYCAIRO_PYTHON3_VERSION}" > /dev/null || die
	rm -f src/config.h || die
	epatch \
		"${FILESDIR}/${PN}-1.10.0-svg_check.patch" \
		"${FILESDIR}/${PN}-1.10.0-xpyb.patch" \
		"${FILESDIR}/${PN}-1.10.0-waf-unpack.patch" \
		"${FILESDIR}"/py2cairo-1.10.0-ppc-darwin.patch \
		"${FILESDIR}"/pycairo-1.10.0-101_pycairo-region.patch
	popd > /dev/null

	pushd "${WORKDIR}/py2cairo-${PYCAIRO_PYTHON2_VERSION}" > /dev/null || die
	rm -f src/config.h || die
	epatch \
		"${FILESDIR}/py2cairo-1.10.0-svg_check.patch" \
		"${FILESDIR}/py2cairo-1.10.0-xpyb.patch" \
		"${FILESDIR}"/py2cairo-1.10.0-ppc-darwin.patch
	popd > /dev/null

	preparation() {
		if python_is_python3; then
			cp -r -l "${WORKDIR}/pycairo-${PYCAIRO_PYTHON3_VERSION}" "${BUILD_DIR}" || die
			pushd "${BUILD_DIR}" > /dev/null || die
			wafdir="$(./waf unpack)"
			pushd "${wafdir}" > /dev/null || die
			epatch \
				"${FILESDIR}/${PN}-1.10.0-waf-py3_4.patch" \
				"${FILESDIR}"/pycairo-1.10.0-50_specify-encoding-in-waf.patch \
				"${FILESDIR}"/pycairo-1.10.0-80_fix-pickle.patch \
				"${FILESDIR}"/pycairo-1.10.0-81_pickling-again.patch

			popd > /dev/null
			popd > /dev/null
		else
			cp -r -l "${WORKDIR}/py2cairo-${PYCAIRO_PYTHON2_VERSION}" "${BUILD_DIR}" || die
		fi
	}
	python_foreach_impl preparation
}

src_configure() {
	if ! use svg; then
		export PYCAIRO_DISABLE_SVG=1
	fi

	if ! use xcb; then
		export PYCAIRO_DISABLE_XPYB=1
	fi

	tc-export PKG_CONFIG
	# Also export the var with the slightly diff name that waf uses for no good reason.
	export PKGCONFIG=${PKG_CONFIG}

	# Added by grobian:
	# If WAF_BINARY is an absolute path, the configure is different and fails to
	# find Python.h due to a compiler misconfiguration.  If WAF_BINARY is just
	# ./waf or python waf, it works fine.  Hooray for reinvented buildsystems

	# floppym:
	# pycairo and py2cairo bundle different versions of waf (bug 447856)
	WAF_BINARY="./waf"
	python_foreach_impl run_in_build_dir waf-utils_src_configure --nopyc --nopyo
}

src_compile() {
	python_foreach_impl run_in_build_dir waf-utils_src_compile
}

src_test() {
	test_installation() {
		./waf install --destdir="${T}/tests/${BUILD_DIR}"
		PYTHONPATH="${T}/tests/${BUILD_DIR}$(python_get_sitedir)" py.test -v
	}
	python_foreach_impl run_in_build_dir test_installation
}

src_install() {
	python_foreach_impl run_in_build_dir waf-utils_src_install

	dodoc AUTHORS NEWS README

	if use doc; then
		pushd doc/_build/html > /dev/null || die
		dohtml -r [a-z]* _static
		popd > /dev/null || die
	fi

	if use examples; then
		insinto /usr/share/doc/${PF}/examples
		doins -r examples/*
	fi

	if [[ ${CHOST} == *-darwin* ]] ; then
		# fix install_names; next to waf producing dylibs (not bundles) and
		# calling them .bundle, it also has no idea what it should do to create
		# proper ones (dylibs)
		fix_darwin_install_names() {
			local suffix=$("${PYTHON}" -c 'import sysconfig; print(sysconfig.get_config_var("EXT_SUFFIX"))')
			[[ -z ${suffix} || ${suffix} == "None" ]] && suffix=".bundle"
			local x="$(python_get_sitedir)/cairo/_cairo${suffix}"
			install_name_tool -id "${x}" "${D}${x}"
		}
		python_foreach_impl fix_darwin_install_names
	fi
}

run_in_build_dir() {
	pushd "${BUILD_DIR}" > /dev/null || die
	"$@"
	popd > /dev/null || die
}