commit:     80dfd9952e4b140aa5b797b765f4d95fb65a7c98
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Wed Mar  8 09:04:47 2017 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Wed Mar  8 11:32:43 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=80dfd995

dev-python/pypy: Split translation and compile phases

Use the --source option to disable automatic compiling of generating C
sources, and build them manually afterwards. Most importantly, this
significantly reduces memory use because pypy failed to free memory that
was used for the translation, and that is no longer needed when
the compilation is started. Furthermore, it makes resuming compilation
possible.

 dev-python/pypy/pypy-5.6.0.ebuild | 25 ++++++++++++++++++-------
 dev-python/pypy/pypy-9999.ebuild  | 25 ++++++++++++++++++-------
 2 files changed, 36 insertions(+), 14 deletions(-)

diff --git a/dev-python/pypy/pypy-5.6.0.ebuild 
b/dev-python/pypy/pypy-5.6.0.ebuild
index ce1b1a3f764..34c1826c856 100644
--- a/dev-python/pypy/pypy-5.6.0.ebuild
+++ b/dev-python/pypy/pypy-5.6.0.ebuild
@@ -105,7 +105,7 @@ src_prepare() {
        epatch_user
 }
 
-src_compile() {
+src_configure() {
        tc-export CC
 
        local jit_backend
@@ -162,12 +162,22 @@ src_compile() {
                        "${PYTHON}" --jit loop_longevity=300 )
        fi
 
-       set -- "${interp[@]}" rpython/bin/rpython --batch "${args[@]}"
+       # translate into the C sources
+       # we're going to make them ourselves since otherwise pypy does not
+       # free up the unneeded memory before spawning the compiler
+       set -- "${interp[@]}" rpython/bin/rpython --batch --source "${args[@]}"
        echo -e "\033[1m${@}\033[0m"
-       "${@}" || die "compile error"
+       "${@}" || die "translation failed"
+}
+
+src_compile() {
+       emake -C "${T}"/usession*-current/testing_1
 
-       use doc && emake -C pypy/doc/ html
+       # copy back to make sys.prefix happy
+       cp -p "${T}"/usession*-current/testing_1/{pypy-c,libpypy-c.so} . || die
        pax-mark m pypy-c libpypy-c.so
+
+       use doc && emake -C pypy/doc html
 }
 
 src_test() {
@@ -180,10 +190,11 @@ src_test() {
 src_install() {
        local dest=/usr/$(get_libdir)/pypy
        einfo "Installing PyPy ..."
-       insinto "${dest}"
-       doins -r include lib_pypy lib-python pypy-c libpypy-c.so
-       fperms a+x ${dest}/pypy-c ${dest}/libpypy-c.so
+       exeinto "${dest}"
+       doexe pypy-c libpypy-c.so
        pax-mark m "${ED%/}${dest}/pypy-c" "${ED%/}${dest}/libpypy-c.so"
+       insinto "${dest}"
+       doins -r include lib_pypy lib-python
        dosym ../$(get_libdir)/pypy/pypy-c /usr/bin/pypy
        dodoc README.rst
 

diff --git a/dev-python/pypy/pypy-9999.ebuild b/dev-python/pypy/pypy-9999.ebuild
index de88fb98a5f..de566f88e80 100644
--- a/dev-python/pypy/pypy-9999.ebuild
+++ b/dev-python/pypy/pypy-9999.ebuild
@@ -111,7 +111,7 @@ src_prepare() {
        epatch_user
 }
 
-src_compile() {
+src_configure() {
        tc-export CC
 
        local jit_backend
@@ -168,12 +168,22 @@ src_compile() {
                        "${PYTHON}" --jit loop_longevity=300 )
        fi
 
-       set -- "${interp[@]}" rpython/bin/rpython --batch "${args[@]}"
+       # translate into the C sources
+       # we're going to make them ourselves since otherwise pypy does not
+       # free up the unneeded memory before spawning the compiler
+       set -- "${interp[@]}" rpython/bin/rpython --batch --source "${args[@]}"
        echo -e "\033[1m${@}\033[0m"
-       "${@}" || die "compile error"
+       "${@}" || die "translation failed"
+}
+
+src_compile() {
+       emake -C "${T}"/usession*-current/testing_1
 
-       use doc && emake -C pypy/doc/ html
+       # copy back to make sys.prefix happy
+       cp -p "${T}"/usession*-current/testing_1/{pypy-c,libpypy-c.so} . || die
        pax-mark m pypy-c libpypy-c.so
+
+       use doc && emake -C pypy/doc html
 }
 
 src_test() {
@@ -186,10 +196,11 @@ src_test() {
 src_install() {
        local dest=/usr/$(get_libdir)/pypy
        einfo "Installing PyPy ..."
-       insinto "${dest}"
-       doins -r include lib_pypy lib-python pypy-c libpypy-c.so
-       fperms a+x ${dest}/pypy-c ${dest}/libpypy-c.so
+       exeinto "${dest}"
+       doexe pypy-c libpypy-c.so
        pax-mark m "${ED%/}${dest}/pypy-c" "${ED%/}${dest}/libpypy-c.so"
+       insinto "${dest}"
+       doins -r include lib_pypy lib-python
        dosym ../$(get_libdir)/pypy/pypy-c /usr/bin/pypy
        dodoc README.rst
 

Reply via email to