Hi Po Lu, > Gnulib generates non-portable shell constructs, which interferes with > configuring Emacs on Solaris 10 using /bin/sh. > > See > > https://lists.gnu.org/archive/html/bug-gnu-emacs/2023-04/msg01590.html
Indeed, the Autoconf manual <https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.71/html_node/Limitations-of-Builtins.html> lists 'if ! command' as not working on Solaris 10. > Would this be a sufficient solution? I've not had a chance to test it > yet. > > 2023-04-26 Po Lu <luang...@yahoo.com> > > * pygnulib/GLEmiter.py (GLEmiter.autoconfSnippets): Avoid > non-portable Bourne shell construct. For the Python rewrite of gnulib-tool, that is exactly the right fix; thanks. For the original gnulib-tool, which is the one still recommended for now, see https://www.gnu.org/software/gnulib/manual/html_node/Invoking-gnulib_002dtool.html , we need the same change. I'm committing this: 2023-04-26 Po Lu <luang...@yahoo.com> (tiny change) Bruno Haible <br...@clisp.org> gnulib-tool: For conditional dependencies, generate portable sh code. * gnulib-tool (func_emit_autoconf_snippets): Avoid sh syntax 'if ! variable', that does not work with Solaris /bin/sh. * pygnulib/GLEmiter.py (GLEmiter.autoconfSnippets): Likewise. diff --git a/gnulib-tool b/gnulib-tool index 5373333f74..74c395d9a4 100755 --- a/gnulib-tool +++ b/gnulib-tool @@ -4731,7 +4731,7 @@ func_emit_autoconf_snippets () func_module_shellvar_name "$module" echo " $shellfunc ()" echo ' {' - echo " if ! \$$shellvar; then" + echo " if \$$shellvar; then :; else" func_emit_autoconf_snippet " " echo " $shellvar=true" deps=`func_get_dependencies $module | sed -e "$sed_dependencies_without_conditions"` diff --git a/pygnulib/GLEmiter.py b/pygnulib/GLEmiter.py index 93f50b728c..dc46ba89e9 100644 --- a/pygnulib/GLEmiter.py +++ b/pygnulib/GLEmiter.py @@ -283,7 +283,7 @@ class GLEmiter(object): shellvar = module.getShellVar() emit += ' %s ()\n' % shellfunc emit += ' {\n' - emit += ' if ! $%s; then\n' % shellvar + emit += ' if $%s; then :; else\n' % shellvar emit += self.autoconfSnippet(module, toplevel, disable_libtool, disable_gettext, replace_auxdir, ' ') emit += ' %s=true\n' % shellvar