On 2024-07-18 09:40, Zack Weinberg wrote: > On Thu, Jul 18, 2024, at 5:09 AM, Tijl Coosemans wrote: >> Automake 1.17 produces a warning for the use of \# ... > > For reference, the construct in question is > > subst = sed \ > -e 's|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' \ > -e '1 s|^\#\!.*perl$$|\#\!$(PERL)|g' \ > -e 's|@localstatedir[@]|$(localstatedir)|g' \ > [etc] [...] > I could be wrong about this, but I don't think any implementation of Make > pays _any_ attention to shell quotation in commands. Therefore, no, this > is not portable.
Note that there is only any problem at all because the # characters are used in a make variable assignment. If it was written literally into a rule instead, for example: substitute: sed -e '1s|^#!.*perl$$|#!$(PERL)|g' ... there is no portability problem, as # does not introduce a make comment when it appears within the commands of a rule. If the only reason for using a make variable is just to reduce typing (because it's used in more than one rule) one simple option is to use a configure-time substitution instead (totally untested): configure.ac: AC_SUBST([blargh], ['sed -e '\''1s|^#!.*perl|#!$(PERL)|'\']) AM_SUBST_NOTMAKE([blargh]) Makefile.am: substitute: @blargh@ ... Cheers, Nick