On 4/11/21 12:32 PM, Bruno Haible wrote:
Having two separate configure scripts is undesirable, because that would
increase the total configure time of the package (and people have already
complained about the configure time).
The same problem is seen also in GNU gettext and in GNU poke. I'm fixing it
through the attached patch set.
Unfortunately this broke getopt-gnu on Solaris 10, because it relies on
this line in modules/unistd:
-e
's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GNULIB_${gl_include_guard_prefix}_UNISTD_H_GETOPT)/g'
\
and substitution went awry in this line, resulting in:
-e
's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GL_GNULIB_GL_UNISTD_H_GETOPT)/g' \
This caused 'make check' to fail because test-getopt-gnu.c was testing
Solaris getopt rather than the Gnulib substitute.
I discovered the problem after updating GNU grep to use the latest
Gnulib, and after someone else's buildbots failed on Solaris 10 with
'grep' and I got notified of their failures:
https://buildfarm.opencsw.org/buildbot/builders/ggrep-solaris10-i386/builds/227
https://buildfarm.opencsw.org/buildbot/builders/ggrep-solaris10-sparc/builds/229
I installed the attached patch to work around the problem. The Python
patch is obviously a hack (and I haven't tested it); suggestions for
improvements are welcome.
I must say that I am starting to reach my limits in debugging this sort
of thing. We have quite a pyramid of hacks here, involving more than
just the usual multilevel combination of make, m4, sh, and sed along
with Git submodules etc., and now also a duplicate Python implementation
that I don't offhand know how to test. And 'gnulib-tool', 'configure'
and 'make check' are so verrryy slow; to find the commit that caused the
problem, I had to run 'git bisect' overnight because my circa-2005
Solaris 10 sparc machine is not as fast as modern machines. This is a
long way from my traditional way of developing where I edited a Makefile
and typed 'make' (and that was already too slow!).
I don't have a solution to this problem, and to some extent am just venting.
From 3dd3c04d9b5cf70fa454a19c90fa7d9ddd8b0d1c Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Sun, 13 Jun 2021 10:31:33 -0700
Subject: [PATCH] getopt-gnu: port back to Solaris 10
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* gnulib-tool (func_emit_lib_Makefile_am)
(func_emit_tests_Makefile_am): Don’t substitute things like
$(GNULIB_${gl_include_guard_prefix}_UNISTD_H_GETOPT),
as this mishandles unistd and getopt-gnu, which breaks
‘make check’ on Solaris 10 with getopt-gnu.
* pygnulib/GLEmiter.py (lib_Makefile_am, tests_Makefile_am):
Likewise, albeit hackier since I did not test this and
so went with a trivial hack instead.
---
ChangeLog | 12 ++++++++++++
gnulib-tool | 8 ++++----
pygnulib/GLEmiter.py | 12 ++++++++++++
3 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index b48760c6e..084c43017 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2021-06-13 Paul Eggert <egg...@cs.ucla.edu>
+
+ getopt-gnu: port back to Solaris 10
+ * gnulib-tool (func_emit_lib_Makefile_am)
+ (func_emit_tests_Makefile_am): Don’t substitute things like
+ $(GNULIB_${gl_include_guard_prefix}_UNISTD_H_GETOPT),
+ as this mishandles unistd and getopt-gnu, which breaks
+ ‘make check’ on Solaris 10 with getopt-gnu.
+ * pygnulib/GLEmiter.py (lib_Makefile_am, tests_Makefile_am):
+ Likewise, albeit hackier since I did not test this and
+ so went with a trivial hack instead.
+
2021-06-13 Bruno Haible <br...@clisp.org>
ialloc: Put appropriate license notice in source files.
diff --git a/gnulib-tool b/gnulib-tool
index 63a875d4a..1ea6580b3 100755
--- a/gnulib-tool
+++ b/gnulib-tool
@@ -3700,7 +3700,7 @@ func_emit_lib_Makefile_am ()
-e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \
-e "$sed_eliminate_LDFLAGS" \
-e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' \
- -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,' \
+ -e 's,\$(\(GNULIB_[A-Z]\),$('"${module_indicator_prefix}"'_\1,' \
-e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
-e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \
-e "$sed_transform_check_PROGRAMS" \
@@ -3714,7 +3714,7 @@ func_emit_lib_Makefile_am ()
func_get_automake_snippet_unconditional "$module" |
LC_ALL=C \
sed -e 's,lib_\([A-Z][A-Z]*\),'"${libname}_${libext}"'_\1,g' \
- -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,'
+ -e 's,\$(\(GNULIB_[A-Z]\),$('"${module_indicator_prefix}"'_\1,'
} > "$tmp"/amsnippet2
# Skip the contents if it's entirely empty.
if grep '[^ ]' "$tmp"/amsnippet1 "$tmp"/amsnippet2 > /dev/null ; then
@@ -4058,7 +4058,7 @@ func_emit_tests_Makefile_am ()
-e 's,lib_LTLIBRARIES,lib%_LTLIBRARIES,g' \
-e "$sed_eliminate_LDFLAGS" \
-e 's,lib_\([A-Z][A-Z]*\),libtests_a_\1,g' \
- -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,' \
+ -e 's,\$(\(GNULIB_[A-Z]\),$('"${module_indicator_prefix}"'_\1,' \
-e 's,lib%_LIBRARIES,lib_LIBRARIES,g' \
-e 's,lib%_LTLIBRARIES,lib_LTLIBRARIES,g' \
-e "$sed_transform_check_PROGRAMS" \
@@ -4072,7 +4072,7 @@ func_emit_tests_Makefile_am ()
func_get_automake_snippet_unconditional "$module" |
LC_ALL=C \
sed -e 's,lib_\([A-Z][A-Z]*\),libtests_a_\1,g' \
- -e 's,\$(GNULIB_,$('"${module_indicator_prefix}"'_GNULIB_,'
+ -e 's,\$(\(GNULIB_[A-Z]\),$('"${module_indicator_prefix}"'_\1,'
} > "$tmp"/amsnippet2
# Skip the contents if it's entirely empty.
if grep '[^ ]' "$tmp"/amsnippet1 "$tmp"/amsnippet2 > /dev/null ; then
diff --git a/pygnulib/GLEmiter.py b/pygnulib/GLEmiter.py
index e6b5a2a72..729862bc1 100644
--- a/pygnulib/GLEmiter.py
+++ b/pygnulib/GLEmiter.py
@@ -716,8 +716,12 @@ AC_DEFUN([%V1%_LIBSOURCES], [
pattern = compiler('lib_([A-Z][A-Z](?:.*?))', re.S | re.M)
amsnippet1 = pattern.sub('%s_%s_\\1' %
(libname, libext), amsnippet1)
+ # FIXME: Use regular expression substitution instead
+ # of this hack.
+ amsnippet1 = amsnippet1.replace('$(GNULIB_$', '$(GNULIB!@#$%')
amsnippet1 = amsnippet1.replace(
'$(GNULIB_', '$(' + module_indicator_prefix + '_GNULIB_')
+ amsnippet1 = amsnippet1.replace('$(GNULIB!@#$%', '$(GNULIB_$')
amsnippet1 = amsnippet1.replace(
'lib%_LIBRARIES', 'lib_LIBRARIES')
amsnippet1 = amsnippet1.replace(
@@ -741,8 +745,12 @@ AC_DEFUN([%V1%_LIBSOURCES], [
pattern = compiler('lib_([A-Z][A-Z](?:.*?))', re.S | re.M)
amsnippet2 = pattern.sub('%s_%s_\\1' %
(libname, libext), amsnippet2)
+ # FIXME: Use regular expression substitution instead
+ # of this hack.
+ amsnippet2 = amsnippet2.replace('$(GNULIB_$', '$(GNULIB!@#$%')
amsnippet2 = amsnippet2.replace(
'$(GNULIB_', '$(' + module_indicator_prefix + '_GNULIB_')
+ amsnippet1 = amsnippet2.replace('$(GNULIB!@#$%', '$(GNULIB_$')
if type(amsnippet1) is bytes:
amsnippet1 = amsnippet1.decode(ENCS['default'])
if type(amsnippet2) is bytes:
@@ -1011,8 +1019,12 @@ AC_DEFUN([%V1%_LIBSOURCES], [
snippet = pattern.sub('', snippet)
pattern = compiler('lib_([A-Z][A-Z](?:.*?))', re.S | re.M)
snippet = pattern.sub('libtests_a_\\1', snippet)
+ # FIXME: Use regular expression substitution instead
+ # of this hack.
+ snippet = snippet.replace('$(GNULIB_$', '$(GNULIB!@#$%')
snippet = snippet.replace(
'$(GNULIB_', '$(' + module_indicator_prefix + '_GNULIB_')
+ snippet = snippet.replace('$(GNULIB!@#$%', '$(GNULIB_$')
snippet = snippet.replace('lib%_LIBRARIES', 'lib_LIBRARIES')
snippet = snippet.replace(
'lib%_LTLIBRARIES', 'lib_LTLIBRARIES')
--
2.30.2