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 <bogdro_...@gmx.us> 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