bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Portability problem


From: Bruno Haible
Subject: Re: Portability problem
Date: Wed, 26 Apr 2023 05:01:46 +0200

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  <luangruo@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  <luangruo@yahoo.com>  (tiny change)
            Bruno Haible  <bruno@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






reply via email to

[Prev in Thread] Current Thread [Next in Thread]