Subject: bug#34151: closed (Re: bug#31126: GNU Automake 1.16.1 fails 21 tests on Solaris 10 sparcv9)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 09 Jul 2023 16:58:03 +0000

Your bug report

#34151: v1.16.1 FAIL t/lex-clean-cxx & t/lex-depend-cxx on Solaris 10 SPARC

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

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

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

Subject: Re: bug#31126: GNU Automake 1.16.1 fails 21 tests on Solaris 10 sparcv9
From: Karl Berry <[email-masked]>
To: [email-masked], [email-masked], [email-masked]
Cc: [email-masked], [email-masked], [email-masked], [email-masked], [email-masked], [email-masked], [email-masked], [email-masked], [email-masked], [email-masked]
Date: Sun, 9 Jul 2023 10:57:42 -0600
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi - you have each reported Automake test failures on Solaris.

I've just pushed a fix from Bogdan (thanks Bogdan!) for some of these,
which (sometimes with other fixes already made) closes some bugs.
Bogdan explains the details of the latest:
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#13

Other problems remain and still need debugging, as Bogdan explains in:
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#16

If anyone has time and interest to try bootstrapping current automake,
run the test suite, and find what still fails and why, that would be
great. --thanks, karl.

Bugs closed (with fingers crossed): 15256 30612 34151 42393 44795 49755.
Bugs still open: 31126 45205 55073.

2023-07-09  Bogdan  <[email-masked]>

tests: avoid some SunOS declaration conflicts.

This change: finishes fixing https://bugs.gnu.org/34151
  and https://bugs.gnu.org/30612 and https://bugs.gnu.org/42393;
fixes https://bugs.gnu.org/44795 and https://bugs.gnu.org/49755;
partially fixes https://bugs.gnu.org/45205
  and https://bugs.gnu.org/55073.
Still open: https://bugs.gnu.org/15256;

* t/lex-clean-cxx.sh: test __cplusplus, __sun, and __EXTERN_C__
before using extern "C" for the yylex decl, as explained at
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#13.
* t/lex-depend-cxx.sh: likewise.

* t/yacc-cxx.sh: "using" std::exit, std::free, std::malloc.
* t/yacc-d-cxx.sh: likewise.
* t/yacc-mix-c-cxx.sh: likewise.

* NEWS: mention this.
diff --git a/NEWS b/NEWS
index 61d631ba0..23b2cc50a 100644
--- a/NEWS
+++ b/NEWS
@@ -46,6 +46,8 @@ New in 1.17:
   - distcleancheck ignores "silly rename" files (.nfs* .smb* .__afs*)
     that can show up on network file systems.

+  - tests: avoid some declaration conflicts for lex et al. on SunOS.
+
 * Obsolescent features:

   - py-compile no longer supports Python 0.x or 1.x versions.  Python 2.0,
diff --git a/t/lex-clean-cxx.sh b/t/lex-clean-cxx.sh
index 3632d5c87..8a086304f 100644
--- a/t/lex-clean-cxx.sh
+++ b/t/lex-clean-cxx.sh
@@ -51,10 +51,15 @@ CLEANFILES = parsebaz.l++ parsequx.lpp
 LDADD = $(LEXLIB)
 END

+# For the explanation of the conditionals on using extern "C",
+# see https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#13.
 cat > parsefoo.lxx << 'END'
 %{
 #define YY_DECL int yylex (void)
-extern "C" YY_DECL;
+#if (defined __cplusplus) && ((!defined __sun) || (defined __EXTERN_C__))
+extern "C"
+#endif
+YY_DECL;
 #define YY_NO_UNISTD_H 1
 int isatty (int fd) { return 0; }
 %}
@@ -71,7 +76,10 @@ cp parsefoo.lxx parsebar.ll

 cat > mainfoo.cc << 'END'
 // This file should contain valid C++ but invalid C.
-extern "C" int yylex (void);
+#if (defined __cplusplus) && ((!defined __sun) || (defined __EXTERN_C__))
+extern "C"
+#endif
+int yylex (void);
 using namespace std;
 int main (int argc, char **argv)
 {
diff --git a/t/lex-depend-cxx.sh b/t/lex-depend-cxx.sh
index 60615a54e..682b2ccc5 100644
--- a/t/lex-depend-cxx.sh
+++ b/t/lex-depend-cxx.sh
@@ -44,10 +44,15 @@ test-obj-updated: joe.$(OBJEXT) moe.$(OBJEXT)
 	is_newest moe.$(OBJEXT) my-hdr.hxx
 END

+# For the explanation of the conditionals on using extern "C",
+# see https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45205#13.
 cat > joe.ll << 'END'
 %{
 #define YY_DECL int yylex (void)
-extern "C" YY_DECL;
+#if (defined __cplusplus) && ((!defined __sun) || (defined __EXTERN_C__))
+extern "C"
+#endif
+YY_DECL;
 #define YY_NO_UNISTD_H 1
 int isatty (int fd) { return 0; }
 %}
diff --git a/t/yacc-cxx.sh b/t/yacc-cxx.sh
index 1bf75a975..5b385870c 100644
--- a/t/yacc-cxx.sh
+++ b/t/yacc-cxx.sh
@@ -49,6 +49,9 @@ cat > parse1.yy << 'END'
 // Valid C++, but deliberately invalid C.
 #include <cstdio>
 #include <cstdlib>
+using std::exit;
+using std::free;
+using std::malloc;
 // "std::" qualification required by Sun C++ 5.9.
 int yylex (void) { return std::getchar (); }
 void yyerror (const char *s) {}
diff --git a/t/yacc-d-cxx.sh b/t/yacc-d-cxx.sh
index 56f43c940..576e8e2aa 100644
--- a/t/yacc-d-cxx.sh
+++ b/t/yacc-d-cxx.sh
@@ -31,6 +31,9 @@ write_parse ()
     #include <stdlib.h>
     // Valid C++, but deliberately invalid C.
     #include <cstdlib>
+    using std::exit;
+    using std::free;
+    using std::malloc;
     #include "$header"
     int yylex (void) { return 0; }
     void yyerror (const char *s) {}
diff --git a/t/yacc-mix-c-cxx.sh b/t/yacc-mix-c-cxx.sh
index a73935c39..7c44e0926 100644
--- a/t/yacc-mix-c-cxx.sh
+++ b/t/yacc-mix-c-cxx.sh
@@ -86,6 +86,9 @@ cat > parse.yy <<'END'
 // https://bugs.gnu.org/20031
 #include <stdlib.h>
 // Valid C++, but deliberately invalid C.
+using std::exit;
+using std::free;
+using std::malloc;
 #include <cstdlib>
 #include "parse.hh"
 int yylex (void) { return 0; }

compile finished at Sun Jul  9 09:56:41 2023

Subject: GNU Automake 1.16.1 FAIL: 4 on Solaris 10 SPARC
From: Dennis Clarke <[email-masked]>
To: [email-masked]
Date: Sun, 20 Jan 2019 22:00:20 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

The usual. Nothing new here.  Four failed tests on ye old Solaris 10 
sparc with Oracle Studio 12.6 compiler tools.

test-suite.log attached.

Dennis