Subject: bug#66902: closed (Re: bug#66902: 30.0.50; Recognize env -S/--split-string in shebangs)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 19 Nov 2023 09:11:02 +0000

Your bug report

#66902: 30.0.50; Recognize env -S/--split-string in shebangs

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

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

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

Subject: Re: bug#66902: 30.0.50; Recognize env -S/--split-string in shebangs
From: Eli Zaretskii <[email-masked]>
To: Kévin Le Gouguec <[email-masked]>
Cc: [email-masked]
Date: Sun, 19 Nov 2023 11:09:38 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

> From: Kévin Le Gouguec <[email-masked]>
> Cc: [email-masked]
> Date: Sat, 18 Nov 2023 18:44:06 +0100
> 
> Kévin Le Gouguec <[email-masked]> writes:
> 
> > Eli Zaretskii <[email-masked]> writes:
> >
> >> I'd prefer not to have rx required in files.el, so could you please
> >> rewrite those parts of your patch and resubmit?  Also, please add a
> >> NEWS entry about the change.  
> >
> > ACK; will get to it in the coming days.
> 
> s/days/hours/
> 
> I left a 'concat' in, because (a) it lets us interleave comments (b) the
> byte-compiler seems to smartly condense it all to one big string literal
> anyway.  (Though if files.el is preloaded, everything happens at
> build-time and the .elc does not matter much, IIUC?)
> 
> Let me know if we would prefer a plain raw string literal.
> 
> Added a NEWS entry (under § 'Changes in Emacs 30.1 / Miscellaneous',
> assuming 'master'); added a bug reference; squashed it all.

Thanks, installed on the master branch, and closing the bug.

Subject: 30.0.50; Recognize env -S/--split-string in shebangs
From: Kévin Le Gouguec <[email-masked]>
To: [email-masked]
Date: Thu, 02 Nov 2023 21:57:25 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello,

While Emacs correctly picks makefile-gmake-mode when visiting a file
with the following shebang:

  #!/usr/bin/make -f

It fails to do so for this shebang:

  #!/usr/bin/env -S make -f

env(1) suggests -S is the idiomatic way to pass arguments to programs in
shebangs:

>    -S/--split-string usage in scripts
>        The -S option allows specifying multiple parameters in a script.
>        Running a script named 1.pl containing the following first line:
> 
>               #!/usr/bin/env -S perl -w -T
>               ...
> 
>        Will execute perl -w -T 1.pl .
> 
>        Without the '-S' parameter the script will likely fail with:
> 
>               /usr/bin/env: 'perl -w -T': No such file or directory

I've poked at lisp/files.el; the attached diff seems sufficient to make
Emacs pick makefile-gmake-mode .

diff --git a/lisp/files.el b/lisp/files.el
index 3d838cd3b8c..97594ff8a13 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -3246,7 +3246,8 @@ inhibit-local-variables-p
 
 (defvar auto-mode-interpreter-regexp
   (purecopy "#![ \t]?\\([^ \t\n]*\
-/bin/env[ \t]\\)?\\([^ \t\n]+\\)")
+/bin/env[ \t]\\(?:\\(?:-S\\|--split-string\\)[ \t]\\)?\\)?\
+\\([^ \t\n]+\\)")
   "Regexp matching interpreters, for file mode determination.
 This regular expression is matched against the first line of a file
 to determine the file's mode in `set-auto-mode'.  If it matches, the file

Questions before proceeding to ChangeLog entries & regression tests:

1. Is this something we would like Emacs to recognize out of the box, or
is it too niche?

2. What about the more general forms shown in (info "(coreutils) env
invocation")?

  #!/usr/bin/env -[v]S[OPTION]... [NAME=VALUE]... COMMAND [ARGS]...

3. Assuming we do want to amend that regexp, would it be possible to use
rx here?  OT1H guessing "no" because files.el is pre-reloaded, whereas
rx.el is not; OTOH I see that files.el requires easy-mmode at
compile-time, and that package does not show up in loadup.el, so…
settling for "maybe?"

WDYT?

In GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version
 3.24.37, cairo version 1.16.0) of 2023-08-20 built on hirondell
Repository revision: 652e45b70d82e6f615febe00553dbded80557845
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101007
System Description: Debian GNU/Linux 12 (bookworm)

Configured using:
 'configure
 --cache-file=/home/peniblec/.cache/emacs/config,src,emacs,master
 --with-cairo --with-gconf --with-sqlite3 --with-xinput2'

Configured features:
ACL CAIRO DBUS FREETYPE GCONF GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ
JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES
NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF
TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix