Don't use create_wrapper to short-circuit interpretters
cover Don't use create_wrapper to short-circuit interpretters
Hi,
create_wrapper was previously abused to invoke the Python/Perl interpretters directly instead of relying on #! parsing, which is read into a 128 byte buffer so breaks with deep build directories.
The new create_wrapper is stricter about it's input so this trick doesn't work anymore. Luckily there's already a "nativeperl" binary in the sysroot's /usr/bin, so by adding a "nativepython" alongside it[1] recipes that used create_wrapper can be changed to munge the #! line to e.g. /usr/bin/env nativeperl.
(this series obsoletes 3 of the patches that Saul sent earlier involve create_wrapper)
Ross
[1] The existing nativeperl is a wrapper, the new nativepython is a symlink. Both seem to work and I can't see a good reason for a wrapper instead of a relative symlink.
The following changes since commit b87429fdb45f82ebe4060fea8c4ecd6e4bc1ae52:
bitbake: Add missing file that went out of sync (2013-06-12 13:13:21 +0100)
are available in the git repository at:
git://git.yoctoproject.org/poky-contrib ross/wrap
for you to fetch changes up to 8237763ebcc3cfe4388690056a7c0fed8d65a6c2:
gnome-doc-utils: drop the usage of create_wrapper (2013-06-12 17:44:39 +0100)
----------------------------------------------------------------
Ross Burton (4):
dpkg: drop the usage of create_wrapper
python-native: add nativepython symlink
createrepo: drop the usage of create_wrapper
gnome-doc-utils: drop the usage of create_wrapper
meta/recipes-devtools/dpkg/dpkg.inc | 10 +--------- meta/recipes-devtools/python/python-native_2.7.3.bb | 6 ++++++ meta/recipes-gnome/gnome/gnome-doc-utils.inc | 2 +- meta/recipes-support/createrepo/createrepo_0.4.11.bb | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-)
Ross Burton (4):
dpkg: drop the usage of create_wrapper
python-native: add nativepython symlink
createrepo: drop the usage of create_wrapper
gnome-doc-utils: drop the usage of create_wrapper
meta/recipes-devtools/dpkg/dpkg.inc | 10 +--------- meta/recipes-devtools/python/python-native_2.7.3.bb | 6 ++++++ meta/recipes-gnome/gnome/gnome-doc-utils.inc | 2 +- meta/recipes-support/createrepo/createrepo_0.4.11.bb | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-)
Signature · 1 line
1.7.10.4
PATCH 1/4 dpkg: drop the usage of create_wrapper
create_wrapper was previously abused to invoke the Perl interpretter directly instead of relying on #! parsing, which is read into a 128 byte buffer so breaks with deep build directories.
However we already install a "nativeperl" binary into the native sysroot, so use sed to change the #! line to /usr/bin/env nativeperl.
--- meta/recipes-devtools/dpkg/dpkg.inc | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)
meta/recipes-devtools/dpkg/dpkg.inc +1 -9
@@ -45,21 +45,13 @@ do_install_append () { if [ "${PN}" = "dpkg-native" ]; then # update-alternatives doesn't have an offline mode rm ${D}${bindir}/update-alternatives + sed -i -e 's|^#!.*${bindir}/perl-native.*/perl|#!/usr/bin/env nativeperl|' ${D}${bindir}/dpkg-* else mv ${D}${bindir}/update-alternatives ${D}${sbindir} sed -i -e 's|^#!.*${bindir}/perl-native.*/perl|#!/usr/bin/env perl|' ${D}${bindir}/dpkg-* fi } -# Create a wrapper for the perl script to avoid the "bad interpreter" -# error when the tmpdir is longer than 150. -do_install_append_class-native () { - tmp=`find ${D}${bindir} -type f -exec grep -m 1 -l '#!/.*/perl-native/perl' {} \;` - for i in $tmp; do - create_wrapper $i ${STAGING_BINDIR_NATIVE}/perl-native/perl - done -} - pkg_postinst_${PN} () { #!/bin/sh if [ "x$D" != "x" ] && [ -f $D/var/lib/dpkg/status ]; then
Signature · 1 line
1.7.10.4
PATCH 2/4 python-native: add nativepython symlink
In reply to Ross BurtonAdd a symlink to the native Python so that scripts can just invoke "nativepython" and get the right one without needing absolute paths (these often end up too long for the #! parser in the kernel as the buffer is 128 bytes long).
The name "nativepython" was chosen to match the existing "nativeperl" which serves the same purpose.
--- meta/recipes-devtools/python/python-native_2.7.3.bb | 6 ++++++ 1 file changed, 6 insertions(+)
meta/recipes-devtools/python/python-native_2.7.3.bb +6 -0
@@ -48,4 +48,10 @@ do_install() { for PYTHSCRIPT in `grep -rIl ${bindir}/${PN}/python ${D}${bindir}/${PN}`; do sed -i -e '1s|^#!.*|#!/usr/bin/env python|' $PYTHSCRIPT done + + # Add a symlink to the native Python so that scripts can just invoke + # "nativepython" and get the right one without needing absolute paths + # (these often end up too long for the #! parser in the kernel as the + # buffer is 128 bytes long). + ln -s python-native/python ${D}${bindir}/nativepython }
Signature · 1 line
1.7.10.4
PATCH 3/4 createrepo: drop the usage of create_wrapper
In reply to Ross Burtoncreate_wrapper was previously abused to invoke the Python interpretter directly instead of relying on #! parsing, which is read into a 128 byte buffer so breaks with deep build directories.
However now that we already install a "nativepython" binary into the native sysroot, use sed to change the #! line to /usr/bin/env nativepython.
--- meta/recipes-support/createrepo/createrepo_0.4.11.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
meta/recipes-support/createrepo/createrepo_0.4.11.bb +1 -1
@@ -35,7 +35,7 @@ do_install_append_class-native () { for i in ${D}${datadir}/createrepo/genpkgmetadata.py \ ${D}${datadir}/createrepo/modifyrepo.py \ ${D}${bindir}/rpm-createsolvedb.py ; do - create_wrapper $i ${STAGING_BINDIR_NATIVE}/python-native/python + sed -i -e 's|^#!.*/usr/bin/env python|#! /usr/bin/env nativepython|' $i done create_wrapper ${D}/${bindir}/createrepo \
Signature · 1 line
1.7.10.4
PATCH 4/4 gnome-doc-utils: drop the usage of create_wrapper
In reply to Ross Burtoncreate_wrapper was previously abused to invoke the Python interpretter directly instead of relying on #! parsing, which is read into a 128 byte buffer so breaks with deep build directories.
However now that we already install a "nativepython" binary into the native sysroot, use sed to change the #! line to /usr/bin/env nativepython.
--- meta/recipes-gnome/gnome/gnome-doc-utils.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
meta/recipes-gnome/gnome/gnome-doc-utils.inc +1 -1
@@ -20,7 +20,7 @@ do_install_append() { } do_install_append_class-native () { - create_wrapper ${D}${bindir}/xml2po ${STAGING_BINDIR_NATIVE}/python-native/python + sed -i -e 's|^#!.*/usr/bin/env python|#! /usr/bin/env nativepython|' ${D}${bindir}/xml2po } FILES_${PN} += "${datadir}/xml* ${PYTHON_SITEPACKAGES_DIR}/*"
Signature · 1 line
1.7.10.4