Remove support for pre-ANSI variadic function calls.

We've required support for ANSI C (ISO C 89) or better for quite a while.  Get
rid of the old varags.h, doprnt() stuff and simply assume ANSI C variadic
function capability and basic C runtime library support (vfprintf, vsprintf,
etc.)
This commit is contained in:
Paul Smith 2013-04-28 17:59:28 -04:00
parent 8b034b7d18
commit 441b643355
8 changed files with 21 additions and 135 deletions

View File

@ -1,5 +1,13 @@
2013-04-28 Paul Smith <psmith@gnu.org>
* configure.ac: Remove support for pre-ANSI variadic function calls.
* makeint.h: Ditto.
* misc.c: Ditto.
* config.ami.template: Ditto.
* config.h-vms.template: Ditto.
* config.h.W32.template: Ditto.
* configh.dos.template: Ditto.
Implement a "per-job" output synchronization option.
* main.c (decode_output_sync_flags): Recognize the new option.

View File

@ -53,9 +53,6 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
/* #undef HAVE_ALLOCA_H */
/* Define if you don't have vprintf but do have _doprnt. */
/* #undef HAVE_DOPRNT */
/* Define if your system has a working fnmatch function. */
/* #undef HAVE_FNMATCH */
@ -115,9 +112,6 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
/* Define if you have <vfork.h>. */
/* #undef HAVE_VFORK_H */
/* Define if you have the vprintf function. */
#define HAVE_VPRINTF 1
/* Define if you have the wait3 system call. */
/* #undef HAVE_WAIT3 */
@ -303,9 +297,6 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
/* Define if you have the <ndir.h> header file. */
/* #undef HAVE_NDIR_H */
/* Define to 1 if you have the <stdarg.h> header file. */
#define HAVE_STDARG_H 1
/* Define if you have the <stdlib.h> header file. */
/* #undef HAVE_STDLIB_H */

View File

@ -75,9 +75,6 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix). */
/* #undef HAVE_ALLOCA_H */
/* Define to 1 if you don't have vprintf but do have _doprnt. */
/* #undef HAVE_DOPRNT */
/* Define to 1 if you have the fdopen function. */
#define HAVE_FDOPEN 1
@ -144,9 +141,6 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if you have <vfork.h>. */
/* #undef HAVE_VFORK_H */
/* Define to 1 if you have the vprintf function. */
#define HAVE_VPRINTF 1
/* Define to 1 if you have the wait3 system call. */
/* #undef HAVE_WAIT3 */
@ -339,9 +333,6 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if your compiler conforms to the ANSI C standard. */
#define HAVE_ANSI_COMPILER 1
/* Define to 1 if you have the <stdarg.h> header file. */
#define HAVE_STDARG_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1

View File

@ -109,9 +109,6 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
# define HAVE_DIRECT_H 1
#endif
/* Define to 1 if you don't have 'vprintf' but do have '_doprnt.' */
/* #undef HAVE_DOPRNT */
/* Use platform specific coding */
#define HAVE_DOS_PATHS 1
@ -247,9 +244,6 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if you have the 'socket' function. */
/* #undef HAVE_SOCKET */
/* Define to 1 if you have the <stdarg.h> header file. */
#define HAVE_STDARG_H 1
/* Define to 1 if you have the <stdint.h> header file. */
#ifdef __MINGW32__
#define HAVE_STDINT_H 1
@ -348,19 +342,12 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#define HAVE_UNISTD_H 1
#endif
/* Define to 1 if you have the <varargs.h> header file. */
/* #undef HAVE_VARARGS_H */
/* Define to 1 if you have the 'vfork' function. */
/* #undef HAVE_VFORK */
/* Define to 1 if you have the <vfork.h> header file. */
/* #undef HAVE_VFORK_H */
/* Define to 1 if you have the 'vprintf' function. */
#define HAVE_VPRINTF 1
/* Define to 1 if you have the 'wait3' function. */
/* #undef HAVE_WAIT3 */

View File

@ -79,13 +79,6 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
/* Define to 1 if your compiler conforms to the ANSI C standard. */
#define HAVE_ANSI_COMPILER 1
/* Define to 1 if you have the <stdarg.h> header file. */
#define HAVE_STDARG_H 1
/* Define to 1 if you have the vprintf library function. */
#undef HAVE_VPRINTF
#define HAVE_VPRINTF 1
/* Define to 1 if you have the stricmp function. */
#define HAVE_STRICMP 1

View File

@ -70,10 +70,6 @@ AS_IF([test "$ac_cv_prog_cc_stdc" != no],
[Define to 1 if your compiler conforms to the ANSI C standard.])
])
# Determine what kind of variadic function calls we support
AC_CHECK_HEADERS([stdarg.h varargs.h], [break])
AM_PROG_CC_C_O
AC_C_CONST
AC_TYPE_SIGNAL
@ -164,7 +160,6 @@ AC_FUNC_STRCOLL
AC_FUNC_ALLOCA
AC_FUNC_FORK([])
AC_FUNC_VPRINTF
AC_FUNC_CLOSEDIR_VOID
# See if the user wants to add (or not) GNU Guile support

View File

@ -382,16 +382,6 @@ extern struct rlimit stack_limit;
#define STRING_SIZE_TUPLE(_s) (_s), CSTRLEN(_s)
/* We have to have stdarg.h or varargs.h AND v*printf or doprnt to use
variadic versions of these functions. */
#if HAVE_STDARG_H || HAVE_VARARGS_H
# if HAVE_VPRINTF || HAVE_DOPRNT
# define USE_VARIADIC 1
# endif
#endif
#if HAVE_ANSI_COMPILER && USE_VARIADIC && HAVE_STDARG_H
const char *concat (unsigned int, ...);
void message (int prefix, const char *fmt, ...)
__attribute__ ((__format__ (__printf__, 2, 3)));
@ -399,12 +389,6 @@ void error (const gmk_floc *flocp, const char *fmt, ...)
__attribute__ ((__format__ (__printf__, 2, 3)));
void fatal (const gmk_floc *flocp, const char *fmt, ...)
__attribute__ ((noreturn, __format__ (__printf__, 2, 3)));
#else
const char *concat ();
void message ();
void error ();
void fatal ();
#endif
void die (int) __attribute__ ((noreturn));
void log_working_directory (int, int);

89
misc.c
View File

@ -18,36 +18,9 @@ this program. If not, see <http://www.gnu.org/licenses/>. */
#include "dep.h"
#include "debug.h"
/* Variadic functions. We go through contortions to allow proper function
prototypes for both ANSI and pre-ANSI C compilers, and also for those
which support stdarg.h vs. varargs.h, and finally those which have
vfprintf(), etc. and those who have _doprnt... or nothing.
/* GNU make no longer supports pre-ANSI89 environments. */
This fancy stuff all came from GNU fileutils, except for the VA_PRINTF and
VA_END macros used here since we have multiple print functions. */
#if USE_VARIADIC
# if HAVE_STDARG_H
# include <stdarg.h>
# define VA_START(args, lastarg) va_start(args, lastarg)
# else
# include <varargs.h>
# define VA_START(args, lastarg) va_start(args)
# endif
# if HAVE_VPRINTF
# define VA_PRINTF(fp, lastarg, args) vfprintf((fp), (lastarg), (args))
# else
# define VA_PRINTF(fp, lastarg, args) _doprnt((lastarg), (args), (fp))
# endif
# define VA_END(args) va_end(args)
#else
/* We can't use any variadic interface! */
# define va_alist a1, a2, a3, a4, a5, a6, a7, a8
# define va_dcl char *a1, *a2, *a3, *a4, *a5, *a6, *a7, *a8;
# define VA_START(args, lastarg)
# define VA_PRINTF(fp, lastarg, args) fprintf((fp), (lastarg), va_alist)
# define VA_END(args)
#endif
#include <stdarg.h>
/* Compare strings *S1 and *S2.
@ -164,23 +137,14 @@ print_spaces (unsigned int n)
This string lives in static, re-used memory. */
const char *
#if HAVE_ANSI_COMPILER && USE_VARIADIC && HAVE_STDARG_H
concat (unsigned int num, ...)
#else
concat (num, va_alist)
unsigned int num;
va_dcl
#endif
{
static unsigned int rlen = 0;
static char *result = NULL;
unsigned int ri = 0;
#if USE_VARIADIC
va_list args;
#endif
VA_START (args, num);
va_start (args, num);
while (num-- > 0)
{
@ -200,7 +164,7 @@ concat (num, va_alist)
ri += l;
}
VA_END (args);
va_end (args);
/* Get some more memory if we don't have enough space for the
terminating '\0'. */
@ -218,18 +182,9 @@ concat (num, va_alist)
/* Print a message on stdout. */
void
#if HAVE_ANSI_COMPILER && USE_VARIADIC && HAVE_STDARG_H
message (int prefix, const char *fmt, ...)
#else
message (prefix, fmt, va_alist)
int prefix;
const char *fmt;
va_dcl
#endif
{
#if USE_VARIADIC
va_list args;
#endif
log_working_directory (1, 0);
@ -245,9 +200,9 @@ message (prefix, fmt, va_alist)
else
printf ("%s[%u]: ", program, makelevel);
}
VA_START (args, fmt);
VA_PRINTF (stdout, fmt, args);
VA_END (args);
va_start (args, fmt);
vfprintf (stdout, fmt, args);
va_end (args);
putchar ('\n');
if (output_sync)
@ -260,18 +215,9 @@ message (prefix, fmt, va_alist)
/* Print an error message. */
void
#if HAVE_ANSI_COMPILER && USE_VARIADIC && HAVE_STDARG_H
error (const gmk_floc *flocp, const char *fmt, ...)
#else
error (flocp, fmt, va_alist)
const gmk_floc *flocp;
const char *fmt;
va_dcl
#endif
{
#if USE_VARIADIC
va_list args;
#endif
if (output_sync)
log_working_directory (1, 1);
@ -285,9 +231,9 @@ error (flocp, fmt, va_alist)
else
fprintf (stderr, "%s[%u]: ", program, makelevel);
VA_START(args, fmt);
VA_PRINTF (stderr, fmt, args);
VA_END (args);
va_start (args, fmt);
vfprintf (stderr, fmt, args);
va_end (args);
putc ('\n', stderr);
fflush (stderr);
@ -299,18 +245,9 @@ error (flocp, fmt, va_alist)
/* Print an error message and exit. */
void
#if HAVE_ANSI_COMPILER && USE_VARIADIC && HAVE_STDARG_H
fatal (const gmk_floc *flocp, const char *fmt, ...)
#else
fatal (flocp, fmt, va_alist)
const gmk_floc *flocp;
const char *fmt;
va_dcl
#endif
{
#if USE_VARIADIC
va_list args;
#endif
if (output_sync)
log_working_directory (1, 1);
@ -324,9 +261,9 @@ fatal (flocp, fmt, va_alist)
else
fprintf (stderr, "%s[%u]: *** ", program, makelevel);
VA_START(args, fmt);
VA_PRINTF (stderr, fmt, args);
VA_END (args);
va_start (args, fmt);
vfprintf (stderr, fmt, args);
va_end (args);
fputs (_(". Stop.\n"), stderr);