From a05d5d121b10f24fc33e1820db436507bd6c58f0 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Sat, 15 Jun 2019 13:03:58 +0200 Subject: Fix scripts to have valid executable format on Alpine Linux. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported by Tim Rühsen . Idea by Paul Eggert. * build-aux/useless-if-before-free: Use a prologue that starts with '#!/bin/sh'. * build-aux/announce-gen: Likewise. * build-aux/gitlog-to-changelog: Likewise. * build-aux/prefix-gnulib-mk: Likewise. * build-aux/update-copyright: Likewise. * tests/test-update-copyright.sh: Update test program accordingly. --- ChangeLog | 13 +++++++++++++ build-aux/announce-gen | 20 +++++++++++++++++--- build-aux/gitlog-to-changelog | 20 +++++++++++++++++--- build-aux/prefix-gnulib-mk | 19 ++++++++++++++++--- build-aux/update-copyright | 20 +++++++++++++++++--- build-aux/useless-if-before-free | 20 +++++++++++++++++--- tests/test-update-copyright.sh | 20 +++++++++++++++++--- 7 files changed, 114 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 18aecf7d2d..a0d2f415fe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2019-06-15 Bruno Haible + + Fix scripts to have valid executable format on Alpine Linux. + Reported by Tim Rühsen . + Idea by Paul Eggert. + * build-aux/useless-if-before-free: Use a prologue that starts with + '#!/bin/sh'. + * build-aux/announce-gen: Likewise. + * build-aux/gitlog-to-changelog: Likewise. + * build-aux/prefix-gnulib-mk: Likewise. + * build-aux/update-copyright: Likewise. + * tests/test-update-copyright.sh: Update test program accordingly. + 2019-06-10 Bruno Haible nproc: Ensure nproc(NPROC_ALL) ≥ nproc(NPROC_CURRENT) with glibc ≥ 2.26. diff --git a/build-aux/announce-gen b/build-aux/announce-gen index 0174f5c8d1..b5728338c7 100755 --- a/build-aux/announce-gen +++ b/build-aux/announce-gen @@ -1,6 +1,20 @@ -eval '(exit $?0)' && eval 'exec perl -wS "$0" "$@"' - & eval 'exec perl -wS "$0" $argv:q' - if 0; +#!/bin/sh +#! -*-perl-*- +# This is a prologue that allows to run a perl script as an executable +# on systems that are compliant to a POSIX version before POSIX:2017. +# On such systems, the usual invocation of an executable through execlp() +# or execvp() fails with ENOEXEC if it is a script that does not start +# with a #! line. The script interpreter mentioned in the #! line has +# to be /bin/sh, because on GuixSD systems that is the only program that +# has a fixed file name. The second line is for editing this file in +# Emacs. The next two lines below are valid code in both sh and perl. +# When executed by sh, they re-execute the script through the perl +# program found in $PATH. The '-x' option is essential; without it, +# perl would re-execute the script through /bin/sh. When executed by +# perl, the next two lines are a no-op. +eval 'exec perl -wSx "$0" "$@"' + if 0; + # Generate a release announcement message. my $VERSION = '2018-03-07 03:46'; # UTC diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog index deddef2446..a616b82343 100755 --- a/build-aux/gitlog-to-changelog +++ b/build-aux/gitlog-to-changelog @@ -1,6 +1,20 @@ -eval '(exit $?0)' && eval 'exec perl -wS "$0" "$@"' - & eval 'exec perl -wS "$0" $argv:q' - if 0; +#!/bin/sh +#! -*-perl-*- +# This is a prologue that allows to run a perl script as an executable +# on systems that are compliant to a POSIX version before POSIX:2017. +# On such systems, the usual invocation of an executable through execlp() +# or execvp() fails with ENOEXEC if it is a script that does not start +# with a #! line. The script interpreter mentioned in the #! line has +# to be /bin/sh, because on GuixSD systems that is the only program that +# has a fixed file name. The second line is for editing this file in +# Emacs. The next two lines below are valid code in both sh and perl. +# When executed by sh, they re-execute the script through the perl +# program found in $PATH. The '-x' option is essential; without it, +# perl would re-execute the script through /bin/sh. When executed by +# perl, the next two lines are a no-op. +eval 'exec perl -wSx "$0" "$@"' + if 0; + # Convert git log output to ChangeLog format. my $VERSION = '2018-03-07 03:47'; # UTC diff --git a/build-aux/prefix-gnulib-mk b/build-aux/prefix-gnulib-mk index bef726f6bb..66e138b46f 100755 --- a/build-aux/prefix-gnulib-mk +++ b/build-aux/prefix-gnulib-mk @@ -1,6 +1,19 @@ -eval '(exit $?0)' && eval 'exec perl -wS "$0" "$@"' - & eval 'exec perl -wS "$0" $argv:q' - if 0; +#!/bin/sh +#! -*-perl-*- +# This is a prologue that allows to run a perl script as an executable +# on systems that are compliant to a POSIX version before POSIX:2017. +# On such systems, the usual invocation of an executable through execlp() +# or execvp() fails with ENOEXEC if it is a script that does not start +# with a #! line. The script interpreter mentioned in the #! line has +# to be /bin/sh, because on GuixSD systems that is the only program that +# has a fixed file name. The second line is for editing this file in +# Emacs. The next two lines below are valid code in both sh and perl. +# When executed by sh, they re-execute the script through the perl +# program found in $PATH. The '-x' option is essential; without it, +# perl would re-execute the script through /bin/sh. When executed by +# perl, the next two lines are a no-op. +eval 'exec perl -wSx "$0" "$@"' + if 0; use strict; use IO::File; diff --git a/build-aux/update-copyright b/build-aux/update-copyright index d80549ea8d..fa9d427e92 100755 --- a/build-aux/update-copyright +++ b/build-aux/update-copyright @@ -1,6 +1,20 @@ -eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" "$@"' - & eval 'exec perl -wS -0777 -pi "$0" $argv:q' - if 0; +#!/bin/sh +#! -*-perl-*- +# This is a prologue that allows to run a perl script as an executable +# on systems that are compliant to a POSIX version before POSIX:2017. +# On such systems, the usual invocation of an executable through execlp() +# or execvp() fails with ENOEXEC if it is a script that does not start +# with a #! line. The script interpreter mentioned in the #! line has +# to be /bin/sh, because on GuixSD systems that is the only program that +# has a fixed file name. The second line is for editing this file in +# Emacs. The next two lines below are valid code in both sh and perl. +# When executed by sh, they re-execute the script through the perl +# program found in $PATH. The '-x' option is essential; without it, +# perl would re-execute the script through /bin/sh. When executed by +# perl, the next two lines are a no-op. +eval 'exec perl -wSx "$0" "$@"' + if 0; + # Update an FSF copyright year list to include the current year. my $VERSION = '2018-03-07.03:47'; # UTC diff --git a/build-aux/useless-if-before-free b/build-aux/useless-if-before-free index 6d6b8d4199..0701e7b20b 100755 --- a/build-aux/useless-if-before-free +++ b/build-aux/useless-if-before-free @@ -1,6 +1,20 @@ -eval '(exit $?0)' && eval 'exec perl -wST "$0" "$@"' - & eval 'exec perl -wST "$0" $argv:q' - if 0; +#!/bin/sh +#! -*-perl-*- +# This is a prologue that allows to run a perl script as an executable +# on systems that are compliant to a POSIX version before POSIX:2017. +# On such systems, the usual invocation of an executable through execlp() +# or execvp() fails with ENOEXEC if it is a script that does not start +# with a #! line. The script interpreter mentioned in the #! line has +# to be /bin/sh, because on GuixSD systems that is the only program that +# has a fixed file name. The second line is for editing this file in +# Emacs. The next two lines below are valid code in both sh and perl. +# When executed by sh, they re-execute the script through the perl +# program found in $PATH. The '-x' option is essential; without it, +# perl would re-execute the script through /bin/sh. When executed by +# perl, the next two lines are a no-op. +eval 'exec perl -wSx "$0" "$@"' + if 0; + # Detect instances of "if (p) free (p);". # Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces. diff --git a/tests/test-update-copyright.sh b/tests/test-update-copyright.sh index f270db5d3b..9ef5344ead 100755 --- a/tests/test-update-copyright.sh +++ b/tests/test-update-copyright.sh @@ -37,9 +37,23 @@ trap 'rm -f $TMP_BASE*' 0 1 2 3 15 TMP=$TMP_BASE s=$TMP-script cat <<\EOF > $s -eval '(exit $?0)' && eval 'exec perl -wS -0777 -pi "$0" "$@"' - & eval 'exec perl -wS -0777 -pi "$0" $argv:q' - if 0; +#!/bin/sh +#! -*-perl-*- +# This is a prologue that allows to run a perl script as an executable +# on systems that are compliant to a POSIX version before POSIX:2017. +# On such systems, the usual invocation of an executable through execlp() +# or execvp() fails with ENOEXEC if it is a script that does not start +# with a #! line. The script interpreter mentioned in the #! line has +# to be /bin/sh, because on GuixSD systems that is the only program that +# has a fixed file name. The second line is for editing this file in +# Emacs. The next two lines below are valid code in both sh and perl. +# When executed by sh, they re-execute the script through the perl +# program found in $PATH. The '-x' option is essential; without it, +# perl would re-execute the script through /bin/sh. When executed by +# perl, the next two lines are a no-op. +eval 'exec perl -wSx "$0" "$@"' + if 0; + s/a/b/ EOF chmod a+x $s -- cgit v1.2.1