All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jacob Kroon <jacob.kroon@gmail.com>
To: Paulo Neves <ptsneves@gmail.com>,
	openembedded-core@lists.openembedded.org
Subject: Re: [OE-core] [PATCH v6 6/7] utils: Add cmdline_shebang_wrapper util.
Date: Tue, 5 Jul 2022 06:50:28 +0200	[thread overview]
Message-ID: <4d50da0a-0e08-1cdd-8067-a587cc06bfd5@gmail.com> (raw)
In-Reply-To: <20220619192041.1113263-6-ptsneves@gmail.com>

On 6/19/22 21:20, Paulo Neves wrote:
> Useful to work around shebang relocation issues, where
> shebangs are too long or have arguments in them, thus preventing them
> from using the /usr/bin/env shebang.
> ---
>   .../wrapper/cmdline-shebang-wrapper-test.bb   | 21 ++++++++++++
>   .../recipes-test/wrapper/files/test.awk       |  2 ++
>   meta/classes/utils.bbclass                    | 34 +++++++++++++++++++
>   meta/lib/oeqa/selftest/cases/wrapper.py       | 11 ++++++
>   4 files changed, 68 insertions(+)
>   create mode 100644 meta-selftest/recipes-test/wrapper/cmdline-shebang-wrapper-test.bb
>   create mode 100644 meta-selftest/recipes-test/wrapper/files/test.awk
>   create mode 100644 meta/lib/oeqa/selftest/cases/wrapper.py
> 
> diff --git a/meta-selftest/recipes-test/wrapper/cmdline-shebang-wrapper-test.bb b/meta-selftest/recipes-test/wrapper/cmdline-shebang-wrapper-test.bb
> new file mode 100644
> index 0000000000..c4126a41fc
> --- /dev/null
> +++ b/meta-selftest/recipes-test/wrapper/cmdline-shebang-wrapper-test.bb
> @@ -0,0 +1,21 @@
> +SUMMARY = "Check that create_cmdline_shebang works"
> +LICENSE = "MIT"
> +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
> +INHIBIT_DEFAULT_DEPS = "1"
> +
> +SRC_URI += "file://test.awk"
> +
> +EXCLUDE_FROM_WORLD = "1"
> +do_install() {
> +    install -d ${D}${bindir}
> +    install -m 0755 ${WORKDIR}/test.awk ${D}${bindir}/test
> +    sed -i -e 's|@AWK_BIN@|${bindir}/awk|g' ${D}${bindir}/test
> +    create_cmdline_shebang_wrapper ${D}${bindir}/test
> +    if [ $(${D}${bindir}/test) != "Don't Panic!" ]; then
> +        bbfatal "Wrapper is broken"
> +    else
> +        bbnote "Wrapper is good"
> +    fi
> +}
> +
> +BBCLASSEXTEND = "native"
> diff --git a/meta-selftest/recipes-test/wrapper/files/test.awk b/meta-selftest/recipes-test/wrapper/files/test.awk
> new file mode 100644
> index 0000000000..91429197b1
> --- /dev/null
> +++ b/meta-selftest/recipes-test/wrapper/files/test.awk
> @@ -0,0 +1,2 @@
> +#! @AWK_BIN@ -f
> +BEGIN { print "Don't Panic!" }
> diff --git a/meta/classes/utils.bbclass b/meta/classes/utils.bbclass
> index b4eb3d38ab..b58c22771f 100644
> --- a/meta/classes/utils.bbclass
> +++ b/meta/classes/utils.bbclass
> @@ -184,6 +184,40 @@ END
>   	chmod +x $cmd
>   }
>   
> +create_cmdline_shebang_wrapper () {
> +	# Create a wrapper script where commandline options are needed
> +	#
> +	# These are useful to work around shebang relocation issues, where shebangs are too
> +	# long or have arguments in them, thus preventing them from using the /usr/bin/env
> +	# shebang
> +	#
> +	# Usage: create_cmdline_wrapper FILENAME <extra-options>
> +
> +	cmd=$1
> +	shift
> +
> +	echo "Generating wrapper script for $cmd"
> +
> +	# Strip #! and get remaining interpreter + arg
> +	argument="$(sed -ne 's/^#! *//p;q' $cmd)"
> +	# strip the shebang from the real script as we do not want it to be usable anyway
> +	tail -n +2 $cmd > $cmd.real
> +	cmdname=$(basename $cmd)
> +	dirname=$(dirname $cmd)
> +	cmdoptions=$@
> +	if [ "${base_prefix}" != "" ]; then
> +		relpath=`python3 -c "import os; print(os.path.relpath('${D}${base_prefix}', '$dirname'))"`
> +		cmdoptions=`echo $@ | sed -e "s:${base_prefix}:\\$realdir/$relpath:g"`
> +	fi
> +	cat <<END >$cmd
> +#!/usr/bin/env bash
> +realpath=\`readlink -fn \$0\`
> +realdir=\`dirname \$realpath\`
> +exec -a \$realdir/$cmdname $argument \$realdir/$cmdname.real $cmdoptions "\$@"
> +END
> +	chmod +x $cmd
> +}
> +

Maybe this has already been raised before, but the wrapper above does a 
couple of addtitional forks, which could be avoided if we use a python 
wrapper script instead.

Jacob

>   create_wrapper () {
>   	# Create a wrapper script where extra environment variables are needed
>   	#
> diff --git a/meta/lib/oeqa/selftest/cases/wrapper.py b/meta/lib/oeqa/selftest/cases/wrapper.py
> new file mode 100644
> index 0000000000..6de63310c0
> --- /dev/null
> +++ b/meta/lib/oeqa/selftest/cases/wrapper.py
> @@ -0,0 +1,11 @@
> +from oeqa.selftest.case import OESelftestTestCase
> +from oeqa.utils.commands import bitbake
> +
> +class WrapperTests(OESelftestTestCase):
> +    def test_shebang_wrapper(self):
> +        """
> +        Summary:   Build a recipe which will fail if the cmdline_shebang_wrapper function is defective.
> +        Expected:  Exit status to be 0.
> +        Author:    Paulo Neves <ptsneves@gmail.com>
> +        """
> +        res = bitbake("cmdline-shebang-wrapper-test -c install", ignore_status=False)
> 
> 
> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#167044): https://lists.openembedded.org/g/openembedded-core/message/167044
> Mute This Topic: https://lists.openembedded.org/mt/91863579/4454410
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [jacob.kroon@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
> 


  reply	other threads:[~2022-07-05  4:50 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-06 15:58 [PATCH 1/3] insane.bbclass: Make do_qa_staging check shebangs Paulo Neves
2022-06-06 15:58 ` [PATCH 2/3] oeqa/selftest: Add test for shebang overflow Paulo Neves
2022-06-06 15:58 ` [PATCH 3/3] oeqa/selftest: Test staged .la and .pc files Paulo Neves
2022-06-07 15:11 ` [PATCH v2 1/5] python: Avoid shebang overflow on python-config.py Paulo Neves
2022-06-07 15:11   ` [PATCH v2 2/5] gtk-doc: Fix potential shebang overflow on gtkdoc-mkhtml2 Paulo Neves
2022-06-07 15:11   ` [PATCH v2 3/5] insane.bbclass: Make do_qa_staging check shebangs Paulo Neves
2022-06-07 15:11   ` [PATCH v2 4/5] oeqa/selftest: Add test for shebang overflow Paulo Neves
2022-06-08 12:53     ` [OE-core] " Luca Ceresoli
2022-06-08 14:45       ` Paulo Neves
2022-06-08 15:02         ` Luca Ceresoli
     [not found]     ` <16F6A653C457F871.26104@lists.openembedded.org>
2022-06-08 15:06       ` Luca Ceresoli
2022-06-13 11:20         ` Paulo Neves
2022-06-15 11:04     ` Ross Burton
2022-06-07 15:11   ` [PATCH v2 5/5] oeqa/selftest: Test staged .la and .pc files Paulo Neves
2022-06-07 16:53   ` [OE-core] [PATCH v2 1/5] python: Avoid shebang overflow on python-config.py Alexander Kanavin
2022-06-07 20:03     ` Paulo Neves
2022-06-07 22:09       ` Alexander Kanavin
2022-06-10 21:43 ` [PATCH v3 1/7] " Paulo Neves
2022-06-10 21:43   ` [PATCH v3 2/7] gtk-doc: Fix potential shebang overflow on gtkdoc-mkhtml2 Paulo Neves
2022-06-10 21:43   ` [PATCH v3 3/7] insane.bbclass: Make do_qa_staging check shebangs Paulo Neves
2022-06-10 21:43   ` [PATCH v3 4/7] oeqa/selftest: Add test for shebang overflow Paulo Neves
2022-06-10 21:43   ` [PATCH v3 5/7] oeqa/selftest: Test staged .la and .pc files Paulo Neves
2022-06-10 21:43   ` [PATCH v3 6/7] utils: Add cmdline_shebang_wrapper util Paulo Neves
2022-06-10 21:43   ` [PATCH v3 7/7] libcheck: Fix too long shebang for native case Paulo Neves
2022-06-13  7:30   ` [OE-core] [PATCH v3 1/7] python: Avoid shebang overflow on python-config.py Alexander Kanavin
2022-06-13 10:32     ` Paulo Neves
2022-06-13 12:36       ` Alexander Kanavin
2022-06-14 13:16 ` [PATCH v4 " Paulo Neves
2022-06-14 13:16   ` [PATCH v4 2/7] gtk-doc: Fix potential shebang overflow on gtkdoc-mkhtml2 Paulo Neves
2022-06-14 13:16   ` [PATCH v4 3/7] insane.bbclass: Make do_qa_staging check shebangs Paulo Neves
2022-06-14 13:16   ` [PATCH v4 4/7] oeqa/selftest: Add test for shebang overflow Paulo Neves
2022-06-14 13:16   ` [PATCH v4 5/7] oeqa/selftest: Test staged .la and .pc files Paulo Neves
2022-06-14 13:16   ` [PATCH v4 6/7] utils: Add cmdline_shebang_wrapper util Paulo Neves
2022-06-14 13:39     ` [OE-core] " Martin Jansa
2022-06-14 13:46       ` Paulo Neves
2022-06-14 14:17         ` Martin Jansa
2022-06-14 15:12           ` Paulo Neves
2022-06-14 13:16   ` [PATCH v4 7/7] libcheck: Fix too long shebang for native case Paulo Neves
2022-06-14 15:10 ` [PATCH v5 1/7] python: Avoid shebang overflow on python-config.py Paulo Neves
2022-06-14 15:11   ` [PATCH v5 2/7] gtk-doc: Fix potential shebang overflow on gtkdoc-mkhtml2 Paulo Neves
2022-06-14 15:11   ` [PATCH v5 3/7] insane.bbclass: Make do_qa_staging check shebangs Paulo Neves
2022-06-17 16:50     ` [OE-core] " Richard Purdie
2022-06-19 10:53       ` Paulo Neves
     [not found]     ` <16F97685B484595E.1329@lists.openembedded.org>
2022-07-01 12:53       ` Richard Purdie
2022-06-14 15:11   ` [PATCH v5 4/7] oeqa/selftest: Add test for shebang overflow Paulo Neves
2022-06-14 15:11   ` [PATCH v5 5/7] oeqa/selftest: Test staged .la and .pc files Paulo Neves
2022-06-14 15:11   ` [PATCH v5 6/7] utils: Add cmdline_shebang_wrapper util Paulo Neves
2022-06-15 10:52     ` [OE-core] " Ross Burton
2022-06-15 13:11       ` Peter Kjellerstedt
2022-06-15 13:50         ` Paulo Neves
2022-06-15 22:16           ` Peter Kjellerstedt
2022-06-19 19:03             ` Paulo Neves
2022-06-14 15:11   ` [PATCH v5 7/7] libcheck: Fix too long shebang for native case Paulo Neves
2022-06-15 11:07 ` [OE-core] [PATCH 1/3] insane.bbclass: Make do_qa_staging check shebangs Ross Burton
2022-06-15 11:08   ` Ross Burton
2022-06-15 11:09     ` Paulo Neves
2022-06-19 19:20 ` [PATCH v6 1/7] python: Avoid shebang overflow on python-config.py Paulo Neves
2022-06-19 19:20   ` [PATCH v6 2/7] gtk-doc: Fix potential shebang overflow on gtkdoc-mkhtml2 Paulo Neves
2022-06-19 19:20   ` [PATCH v6 3/7] insane.bbclass: Make do_qa_staging check shebangs Paulo Neves
2022-06-19 19:20   ` [PATCH v6 4/7] oeqa/selftest: Add test for shebang overflow Paulo Neves
2022-06-19 19:20   ` [PATCH v6 5/7] oeqa/selftest: Test staged .la and .pc files Paulo Neves
2022-06-19 19:20   ` [PATCH v6 6/7] utils: Add cmdline_shebang_wrapper util Paulo Neves
2022-07-05  4:50     ` Jacob Kroon [this message]
2022-06-19 19:20   ` [PATCH v6 7/7] libcheck: Fix too long shebang for native case Paulo Neves

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4d50da0a-0e08-1cdd-8067-a587cc06bfd5@gmail.com \
    --to=jacob.kroon@gmail.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=ptsneves@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.