Regarding the FILESEXTRAPATHS:prepend  i was convinced that ${THISDIR}/files was not automatically added and was needed for the test.awk file. I guess I have been cargo culting for some time on this. Will remove it.

This is a recipe for a test and if i add a license different than CLOSED than i need to add a license file, which seems a bit overkill for a one line. Am I wrong? What license should it even be? Dont Panic is a common string used in awk docs.

Paulo Neves

On 6/14/22 15:39, Martin Jansa wrote:
FILESEXTRAPATHS:prepend doesn't seem to be needed and LICENSE is really CLOSED?

On Tue, Jun 14, 2022 at 3:17 PM Paulo Neves <[email protected]> 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
    <http://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
    <http://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
    <http://cmdline-shebang-wrapper-test.bb>
    b/meta-selftest/recipes-test/wrapper/cmdline-shebang-wrapper-test.bb
    <http://cmdline-shebang-wrapper-test.bb>
    new file mode 100644
    index 0000000000..302eea8901
    --- /dev/null
    +++
    b/meta-selftest/recipes-test/wrapper/cmdline-shebang-wrapper-test.bb
    <http://cmdline-shebang-wrapper-test.bb>
    @@ -0,0 +1,21 @@
    +FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
    +SUMMARY = "Check that create_cmdline_shebang works"
    +LICENSE = "CLOSED"
    +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..b617632d9f 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="$(basename "$(head -n1 $cmd | sed -e 's|#![ ]*||g' )")"
    +  # 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
    +}
    +
     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 <[email protected]>
    +        """
    +        res = bitbake("cmdline-shebang-wrapper-test -c install",
    ignore_status=False)
-- 2.25.1


-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#166890): 
https://lists.openembedded.org/g/openembedded-core/message/166890
Mute This Topic: https://lists.openembedded.org/mt/91748692/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to