Subject: bug#79044: closed (Re: Autoconf-bundled macro uses /bin/sh, breaking builds that do autoreconf)

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 18 Jul 2025 14:22:02 +0000

Your bug report

#79044: Autoconf-bundled macro uses /bin/sh, breaking builds that do autoreconf

which was filed against the guix package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
79044: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=79044
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: Autoconf-bundled macro uses /bin/sh, breaking builds that do autoreconf
From: "W. Kosior" <[email-masked]>
To: [email-masked]
Date: Fri, 18 Jul 2025 16:21:29 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Oops, I was pretty lame today.  In a recipe, this is actually more
simply fixable with

--8<---------------cut here---------------start------------->8---
(add-before 'configure 'avoid-/bin/sh
  (lambda _
    (substitute* "configure" (("#!/bin/sh") ""))))
--8<---------------cut here---------------end--------------->8---

and one package seems to already be doing sth similar.  I am not sure
this warrants a bug report, then.  Sorry for the nuisance :)

Best,
Wojtek

Subject: Autoconf-bundled macro uses /bin/sh, breaking builds that do autoreconf
From: "W. Kosior" <[email-masked]>
To: [email-masked]
Date: Fri, 18 Jul 2025 13:43:10 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi Guix,

file `share/autoconf/autoconf/erlang.m4' in Autoconf package contains
definitions allowing configure-time tests using Erlang.  The piece of
code responsible for generating a `conftest' script adds a shebang with
`#!/bin/sh':

--8<---------------cut here---------------start------------->8---
# AC_LANG(Erlang)
# ---------------
AC_LANG_DEFINE([Erlang], [erl], [ERL], [ERLC], [],
[ac_ext=erl
: ${ac_objext=o}
ac_compile='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&AS_MESSAGE_LOG_FD && ln -sf conftest.beam conftest.$ac_objext'
ac_link='$ERLC $ERLCFLAGS -b beam conftest.$ac_ext >&AS_MESSAGE_LOG_FD && echo "[#]!/bin/sh" > conftest$ac_exeext && AS_ECHO(["\"$ERL\" -run conftest start -run init stop -noshell"]) >> conftest$ac_exeext && chmod +x conftest$ac_exeext'
])
--8<---------------cut here---------------end--------------->8---

This could make sense if the Autoconf from Guix were to be used for
generating a `configure' script to be run on other system.  But if
a script with `#!/bin/sh' is created during a Guix package build, this
is wrong.

Here's an error I got due to this when working on a recipe for Erlang
HTTP server, Yaws:

--8<---------------cut here---------------start------------->8---
[...]
checking for ct_run... /gnu/store/briw8s44c7w2lj3qwz3w2x4c0gpgpkn8-erlang-27.3.4/bin/ct_run
checking for erlc... /gnu/store/briw8s44c7w2lj3qwz3w2x4c0gpgpkn8-erlang-27.3.4/bin/erlc
checking for erl... /gnu/store/briw8s44c7w2lj3qwz3w2x4c0gpgpkn8-erlang-27.3.4/bin/erl
checking for Erlang/OTP root directory... configure: error: in `/tmp/guix-build-erlang-yaws-2.2.0.drv-0/source':                                   
configure: error: test Erlang program execution failed
See `config.log' for more details
error: in phase 'configure': uncaught exception:
%exception #<&invoke-error program: "/gnu/store/3jhfhxdf6v5ms10x5zmnl166dh3yhbr1-bash-minimal-5.1.16/bin/bash" arguments: ("./configure" "CONFIG_SHELL=/gnu/store/3jhfhxdf6v5ms10x5zmnl166dh3yhbr1-bash-minimal-5.1.16/bin/bash" "SHELL=/gnu/store/3jhfhxdf6v5ms10x5zmnl166dh3yhbr1-bash-minimal-5.1.16/bin/bash" "--prefix=/gnu/store/12731cvmcwr0f2cgjy87bx6k1cg5nlqb-erlang-yaws-2.2.0" "--enable-fast-install" "--build=x86_64-unknown-linux-gnu" "--enable-deterministic-build") exit-status: 1 term-signal: #f stop-signal: #f> 
phase `configure' failed after 4.1 seconds
command "/gnu/store/3jhfhxdf6v5ms10x5zmnl166dh3yhbr1-bash-minimal-5.1.16/bin/bash" "./configure" "CONFIG_SHELL=/gnu/store/3jhfhxdf6v5ms10x5zmnl166dh3yhbr1-bash-minimal-5.1.16/bin/bash" "SHELL=/gnu/store/3jhfhxdf6v5ms10x5zmnl166dh3yhbr1-bash-minimal-5.1.16/bin/bash" "--prefix=/gnu/store/12731cvmcwr0f2cgjy87bx6k1cg5nlqb-erlang-yaws-2.2.0" "--enable-fast-install" "--build=x86_64-unknown-linux-gnu" "--enable-deterministic-build" failed with status 1
build process 4 exited with status 256
--8<---------------cut here---------------end--------------->8---

Btw, until someone fixes it, here's a hackish workaround for any1 who
hits this issue while working on some Erlang software recipe:

--8<---------------cut here---------------start------------->8---
;; Copyright 2025 W. Kosior <[email-masked]>
;; SPDX-License-Identifier: CC0-1.0
(add-before 'configure 'hack-to-avoid-/bin/sh
  (lambda _
    (mkdir-p "/tmp/hack-to-avoid-bin-sh")
    (with-output-to-file "/tmp/hack-to-avoid-bin-sh/chmod"
      (lambda _
        (display "
if [ \"$1\" = +x ] &&
   [ -f \"$2\" ] &&
   [ \"$(head -1 \"$2\")\" = '#!/bin/sh' ]; then
    sed -i 's,^#!/bin/sh,,' \"$2\"
fi
exec $(command -v chown | sed 's,chown$,chmod,') \"$@\"
")
        (chmod (current-output-port) #o777)))
    (setenv "PATH" (format #f "/tmp/hack-to-avoid-bin-sh:~a"
                           (getenv "PATH")))))
--8<---------------cut here---------------end--------------->8---

Best!
Wojtek

--
W. Kosior

website: https://koszko.org/koszko.html
fediverse: https://friendica.me/profile/koszko/profile
PGP fingerprint: E972 7060 E3C5 637C 8A4F  4B42 4BC5 221C 5A79 FD1A