diff options
author | Michał Górny <mgorny@gentoo.org> | 2014-11-06 00:12:38 +0100 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2014-11-06 00:12:38 +0100 |
commit | ad10dd3863b2d2cb20f19692418eb5402267129d (patch) | |
tree | 828dd35600b35d252c8fec7e2602016dfc1f9b20 /dev-python | |
parent | dev-python/pypy-binpackage: Remove mistakenly added "use doc" code. (diff) | |
download | mgorny-ad10dd3863b2d2cb20f19692418eb5402267129d.tar.gz mgorny-ad10dd3863b2d2cb20f19692418eb5402267129d.tar.bz2 mgorny-ad10dd3863b2d2cb20f19692418eb5402267129d.zip |
dev-python/pypy3-binpackage: Introduce initial ebuild for PyPy3 binpkg creation.
Package-Manager: portage-2.2.14
Diffstat (limited to 'dev-python')
6 files changed, 234 insertions, 0 deletions
diff --git a/dev-python/pypy3-binpackage/Manifest b/dev-python/pypy3-binpackage/Manifest new file mode 100644 index 0000000..1543f05 --- /dev/null +++ b/dev-python/pypy3-binpackage/Manifest @@ -0,0 +1 @@ +DIST pypy3-2.4.0-src.tar.bz2 14693194 SHA256 d9ba207d6eecf8a0dc4414e9f4e92db1abd143e8cc6ec4a6bdcac75b29f104f3 SHA512 7e2b0c21f1833b8cd61251c2d58c6a9f99207e5d582618f0036886ff28dcb313541dce1c36bd1b57b332a36a94b13e416bb7b67110be7c8ece8283749ba712be WHIRLPOOL bd02009c828b7b491b46b260d687d268561e5372766adccbcb58e87a3f1c545f293c54e5cdd6e6b7fb95feb678677137211ee890f106140ce1bc256f8563d2cd diff --git a/dev-python/pypy3-binpackage/files/1.9-distutils.unixccompiler.UnixCCompiler.runtime_library_dir_option.patch b/dev-python/pypy3-binpackage/files/1.9-distutils.unixccompiler.UnixCCompiler.runtime_library_dir_option.patch new file mode 100644 index 0000000..29d99dc --- /dev/null +++ b/dev-python/pypy3-binpackage/files/1.9-distutils.unixccompiler.UnixCCompiler.runtime_library_dir_option.patch @@ -0,0 +1,11 @@ +--- a/lib-python/3/distutils/unixccompiler.py ++++ b/lib-python/3/distutils/unixccompiler.py +@@ -297,7 +297,7 @@ + # this time, there's no way to determine this information from + # the configuration data stored in the Python installation, so + # we use this hack. +- compiler = os.path.basename(sysconfig.get_config_var("CC")) ++ compiler = os.path.basename(self.compiler[0]) + if sys.platform[:6] == "darwin": + # MacOSX's linker doesn't understand the -R flag at all + return "-L" + dir diff --git a/dev-python/pypy3-binpackage/files/1.9-scripts-location.patch b/dev-python/pypy3-binpackage/files/1.9-scripts-location.patch new file mode 100644 index 0000000..6ed1285 --- /dev/null +++ b/dev-python/pypy3-binpackage/files/1.9-scripts-location.patch @@ -0,0 +1,11 @@ +--- a/lib-python/3/distutils/command/install.py ++++ b/lib-python/3/distutils/command/install.py +@@ -87,7 +87,7 @@ + 'purelib': '$base/site-packages', + 'platlib': '$base/site-packages', + 'headers': '$base/include', +- 'scripts': '$base/bin', ++ 'scripts': '/usr/bin', + 'data' : '$base', + }, + } diff --git a/dev-python/pypy3-binpackage/files/2.3.1-shared-lib.patch b/dev-python/pypy3-binpackage/files/2.3.1-shared-lib.patch new file mode 100644 index 0000000..ae1139f --- /dev/null +++ b/dev-python/pypy3-binpackage/files/2.3.1-shared-lib.patch @@ -0,0 +1,11 @@ +--- rpython/translator/platform/posix.py ++++ rpython/translator/platform/posix.py +@@ -180,7 +180,7 @@ + 'int main(int argc, char* argv[]) ' + '{ return $(PYPY_MAIN_FUNCTION)(argc, argv); }" > $@') + m.rule('$(DEFAULT_TARGET)', ['$(TARGET)', 'main.o'], +- '$(CC_LINK) $(LDFLAGS_LINK) main.o -L. -l$(SHARED_IMPORT_LIB) -o $@') ++ '$(CC_LINK) $(LDFLAGS_LINK) main.o -L. -l$(SHARED_IMPORT_LIB) \'-Wl,-rpath,$$ORIGIN\' -o $@') + + return m + diff --git a/dev-python/pypy3-binpackage/metadata.xml b/dev-python/pypy3-binpackage/metadata.xml new file mode 100644 index 0000000..675ce03 --- /dev/null +++ b/dev-python/pypy3-binpackage/metadata.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <herd>python</herd> + <maintainer> + <email>mgorny@gentoo.org</email> + <name>Michał Górny</name> + </maintainer> + <use> + <flag name="low-memory">Build using PyPy with the engine configured towards low memory footprint. This makes it possible to build PyPy using ~3.5G of RAM on amd64 and ~half of that on x86, at the cost of lengthened build time. Please note that you will need an extra ~1G of extra RAM or swap since the translation memory (unused at the time) is not freed when the C compiler is spawned.</flag> + <flag name="sandbox">Enable sandboxing functionality</flag> + <flag name="shadowstack">Use a shadow stack for finding GC roots</flag> + </use> +</pkgmetadata> diff --git a/dev-python/pypy3-binpackage/pypy3-binpackage-2.4.0.ebuild b/dev-python/pypy3-binpackage/pypy3-binpackage-2.4.0.ebuild new file mode 100644 index 0000000..a505b12 --- /dev/null +++ b/dev-python/pypy3-binpackage/pypy3-binpackage-2.4.0.ebuild @@ -0,0 +1,186 @@ +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/dev-python/pypy/pypy-2.2.1.ebuild,v 1.2 2014/03/12 09:14:21 mgorny Exp $ + +EAPI=5 + +# pypy3 needs to be built using python 2 +PYTHON_COMPAT=( python2_7 pypy ) +inherit check-reqs eutils multilib multiprocessing pax-utils \ + python-any-r1 toolchain-funcs versionator +MY_P=pypy3-${PV} + +DESCRIPTION="A fast, compliant alternative implementation of the Python language" +HOMEPAGE="http://pypy.org/" +SRC_URI="https://bitbucket.org/pypy/pypy/downloads/${MY_P}-src.tar.bz2" + +LICENSE="MIT" +SLOT="0/$(get_version_component_range 1-2 ${PV})" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" +IUSE="bzip2 +jit low-memory ncurses sandbox shadowstack sse2" + +DEPEND=">=sys-libs/zlib-1.1.3 + virtual/libffi + virtual/libintl + dev-libs/expat + dev-libs/openssl + bzip2? ( app-arch/bzip2 ) + ncurses? ( sys-libs/ncurses[-tinfo] ) + app-arch/xz-utils + low-memory? ( virtual/pypy:0 ) + !low-memory? ( ${PYTHON_DEPS} )" + +S="${WORKDIR}/${MY_P}-src" + +pkg_pretend() { + if use low-memory; then + CHECKREQS_MEMORY="1750M" + use amd64 && CHECKREQS_MEMORY="3500M" + else + CHECKREQS_MEMORY="3G" + use amd64 && CHECKREQS_MEMORY="6G" + fi + + check-reqs_pkg_pretend +} + +pkg_setup() { + local force_pypy + + pkg_pretend + + use low-memory && local EPYTHON + if has_version virtual/pypy && [[ ! ${EPYTHON} ]]; then + einfo "Using PyPy to perform the translation." + local EPYTHON=pypy + else + einfo "Using ${EPYTHON:-python2} to perform the translation. Please note that upstream" + einfo "recommends using PyPy for that. If you wish to do so, please install" + einfo "virtual/pypy and ensure that EPYTHON variable is unset." + fi + + python-any-r1_pkg_setup + + local cpu + if use amd64; then + # common denominator between Intel & AMD + cpu='x86-64' + elif use x86; then + if use sse2; then + # lowest with SSE2 + cpu='pentium-m' + else + # lowest with SSE, compat. with athlon-xp + # TODO: do we want to support something older? + cpu='pentium3' + fi + else + die "Unsupported arch ${ARCH}" + fi + + export CFLAGS="-march=${cpu} -mtune=generic -O2 -pipe" + export CXXFLAGS=${CFLAGS} + + elog "CFLAGS: ${CFLAGS}" +} + +src_prepare() { + epatch "${FILESDIR}/1.9-scripts-location.patch" \ + "${FILESDIR}/1.9-distutils.unixccompiler.UnixCCompiler.runtime_library_dir_option.patch" \ + "${FILESDIR}"/2.3.1-shared-lib.patch # 517002 + + epatch_user +} + +src_compile() { + tc-export CC + + local jit_backend + if use jit; then + jit_backend='--jit-backend=' + + # We only need the explicit sse2 switch for x86. + # On other arches we can rely on autodetection which uses + # compiler macros. Plus, --jit-backend= doesn't accept all + # the modern values... + + if use x86; then + if use sse2; then + jit_backend+=x86 + else + jit_backend+=x86-without-sse2 + fi + else + jit_backend+=auto + fi + fi + + local args=( + --shared + $(usex jit -Ojit -O2) + $(usex shadowstack --gcrootfinder=shadowstack '') + $(usex sandbox --sandbox '') + + ${jit_backend} + --make-jobs=$(makeopts_jobs) + + pypy/goal/targetpypystandalone + ) + + # Avoid linking against libraries disabled by use flags + local opts=( + bzip2:bz2 + ncurses:_minimal_curses + ) + + local opt + for opt in "${opts[@]}"; do + local flag=${opt%:*} + local mod=${opt#*:} + + args+=( + $(usex ${flag} --withmod --withoutmod)-${mod} + ) + done + + local interp=( "${PYTHON}" ) + if use low-memory; then + interp=( env PYPY_GC_MAX_DELTA=200MB + "${PYTHON}" --jit loop_longevity=300 ) + fi + + set -- "${interp[@]}" rpython/bin/rpython --batch "${args[@]}" + echo -e "\033[1m${@}\033[0m" + "${@}" || die "compile error" + + pax-mark m "${ED%/}${INSDESTTREE}/pypy-c" +} + +src_install() { + local flags=( bzip2 jit ncurses sandbox shadowstack ) + use x86 && flags+=( sse2 ) + local f suffix="-${ARCH}" + + for f in ${flags[@]}; do + use ${f} && suffix+="+${f}" + done + + local BIN_P=pypy3-bin-${PV} + + einfo "Zipping PyPy ..." + mkdir "${BIN_P}${suffix}"{,/include} || die + mv pypy-c libpypy-c.so "${BIN_P}${suffix}"/ || die + mv include/pypy_* "${BIN_P}${suffix}"/include/ || die + chmod +x "${BIN_P}${suffix}"/pypy-c || die + + tar -cf "${BIN_P}${suffix}.tar" "${BIN_P}${suffix}" || die + xz -vz9e "${BIN_P}${suffix}.tar" || die +} + +# Yup, very hacky. +pkg_preinst() { + # integrity check. + [[ ${PYPY_BINPKG_STORE} ]] || die 'PYPY_BINPKG_STORE unset, wtf?!' + mkdir -p "${ROOT%/}${PYPY_BINPKG_STORE}" || die + mv "${S}"/*.tar.xz "${ROOT%/}${PYPY_BINPKG_STORE}" || die +} |