Files
binutils-gdb/libsframe/testsuite/sframe-test.h
Rainer Orth 13793e3983 libsframe: testsuite: Fix testsuite build on Solaris [PR33168]
As reported in PR libsframe/33168, the libsframe tests don't build on
Solaris.  The failure is

In file included from libsframe/testsuite/libsframe.decode/be-flipping.c:28:
/usr/include/dejagnu.h:48:1: error: conflicting types for ‘wait’; have ‘void(void)’
   48 | wait (void)
      | ^~~~
In file included from /usr/include/stdlib.h:16,
                 from libsframe/testsuite/libsframe.decode/be-flipping.c:21:
/usr/include/sys/wait.h:85:14: note: previous declaration of ‘wait’ with type ‘pid_t(int *)’ {aka ‘long int(int *)’}
   85 | extern pid_t wait(int *);
      |              ^~~~

We have a combination of two factors here:

* Solaris <stdlib.h> has

  and configure.ac predefines __EXTENSIONS__ due to the use of
  AC_USE_SYSTEM_EXTENSIONS.

* This conflicts with <dejagnu.h>'s definition

void
wait (void)
{
...
}

While this version of wait was removed in upstream DejaGnu, the removal
only happened after the latest release, 1.6.3.

To avoid this, I've moved all testsuite includes into a new
sframe-test.h, adding a workaround for the wait conflict.

-Wall and -I$(srcdir) have been removed from AM_CPPFLAGS since they
don't seem to be needed.  To fix the Makefile fragment duplication, the
local.mk files now use $(testsuite_LDADD) and $(testsuite_CPPFLAGS)
throughout.

Tested on {i386,amd64}-pc-solaris2.11, {sparc,sparcv9}-sun-solaris2.11,
{x86_64,i686}-pc-linux-gnu, and amd64-pc-freebsd14.0.

Coauthored-By: Alan Modra <amodra@gmail.com>

2025-08-31  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
	    Alan Modra  <amodra@gmail.com>

	libsframe:
	PR libsframe/33168
	* testsuite/sframe-test.h: New file.
	* testsuite/libsframe.decode/be-flipping.c: Replace includes by
	sframe-test.h.
	* testsuite/libsframe.decode/frecnt-1.c: Likewise.
	* testsuite/libsframe.decode/frecnt-2.c: Likewise.
	* testsuite/libsframe.encode/encode-1.c: Likewise.
	* testsuite/libsframe.find/findfre-1.c: Likewise.
	* testsuite/libsframe.find/findfunc-1.c: Likewise.
	* testsuite/libsframe.find/plt-findfre-1.c: Likewise.
	* testsuite/libsframe.find/plt-findfre-2.c: Likewise.

	* Makefile.am (AM_CPPFLAGS): Remove -I$(srcdir).
	* Makefile.in: Regenerate.
	* testsuite/local.mk (testsuite_LDADD): New variable.
	(testsuite_CPPFLAGS): Likewise.
	* testsuite/libsframe.decode/local.mk: Use $(testsuite_LDADD),
	$(testsuite_CPPFLAGS).
	* testsuite/libsframe.encode/local.mk: Likewise.
	* testsuite/libsframe.find/local.mk: Likewise.
2025-09-12 09:50:34 +02:00

44 lines
1.3 KiB
C

/* sframe-test.h -- Common libsframe testsuite header.
Copyright (C) 2022-2025 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#ifndef _SFRAME_TEST_H
#define _SFRAME_TEST_H
#include "config.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "sframe-api.h"
/* DejaGnu should not use gnulib's vsnprintf replacement here. */
#undef vsnprintf
/* PR 33168: Solaris <sys/wait.h> with __EXTENSIONS__ defined gets a
declaration of wait(). This conflicts with <dejagnu.h>'s wait
definition that is only removed after DejaGnu 1.6.3. */
#define wait dg_wait
/* Add prototype to avoid warning. */
void wait (void);
#include <dejagnu.h>
#undef wait
#endif /* _SFRAME_TEST_H */