dev-python/pypy: Split translation and compile phases
authorMichał Górny <mgorny@gentoo.org>
Wed, 8 Mar 2017 09:04:47 +0000 (10:04 +0100)
committerMichał Górny <mgorny@gentoo.org>
Wed, 8 Mar 2017 11:32:43 +0000 (12:32 +0100)
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
dev-python/pypy/pypy-9999.ebuild

index ce1b1a3f76415ce430bbca53cca8818fb09246d5..34c1826c856f74bba5eb3ae4ba76450c18cb5626 100644 (file)
@@ -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
 
index de88fb98a5f10ee296b599ac3be4e1b02640d7da..de566f88e80d38d662dc4f1d89b17f4d32332835 100644 (file)
@@ -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