re PR other/17991 (Two-process fixincludes broken: pz_mn_name_pat undefined)

2004-08-14  Paolo Bonzini  <bonzini@gnu.org>

        PR other/17991

	* Makefile.in (ALLOBJ, TESTOBJ, FIXOBJ): Add fixopts.o.
	Update copyright year.
	* fixfixes.c (main): Call initialize_opts from fixopts.c.
	* fixincl.c (initialize): Call initialize_opts from fixopts.c,
	do not include code for parsing options (environment vars).
	(fix_with_system): Use a search path for applyfix, so that you
	can run the test suite with two-process fixincludes.
	* fixopts.c: New file.
	* configure.ac: Add --enable-twoprocess.  Export ac_exeext
	to config.h.  Default to --enable-twoprocess for MinGW32.
	* config.h.in: Regenerate.
	* configure: Regenerate.

From-SVN: r89087
This commit is contained in:
Paolo Bonzini 2004-10-15 07:58:38 +00:00 committed by Paolo Bonzini
parent e26ce7eddf
commit ad643a75f7
10 changed files with 169 additions and 69 deletions

View File

@ -1,3 +1,20 @@
2004-08-14 Paolo Bonzini <bonzini@gnu.org>
PR other/17991
* Makefile.in (ALLOBJ, TESTOBJ, FIXOBJ): Add fixopts.o.
Update copyright year.
* fixfixes.c (main): Call initialize_opts from fixopts.c.
* fixincl.c (initialize): Call initialize_opts from fixopts.c,
do not include code for parsing options (environment vars).
(fix_with_system): Use a search path for applyfix, so that you
can run the test suite with two-process fixincludes.
* fixopts.c: New file.
* configure.ac: Add --enable-twoprocess. Export ac_exeext
to config.h. Default to --enable-twoprocess for MinGW32.
* config.h.in: Regenerate.
* configure: Regenerate.
2004-10-04 Loren J. Rittle <ljrittle@acm.org>
* tests/base/sys/cdefs.h: Update from test area.

View File

@ -1,6 +1,7 @@
# Makefile for fixincludes.
#
# Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
# Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004
# Free Software Foundation, Inc.
#This file is part of fixincludes.
@ -60,10 +61,10 @@ default : all
LIBIBERTY=../libiberty/libiberty.a
ALLOBJ = fixincl.o fixtests.o fixfixes.o server.o procopen.o \
fixlib.o
fixlib.o fixopts.o
TESTOBJ = fixincl.o fixlib.o fixtests.o
FIXOBJ = fixfixes.o fixlib.o
TESTOBJ = fixincl.o fixlib.o fixtests.o fixopts.o
FIXOBJ = fixfixes.o fixlib.o fixopts.o
HDR = server.h fixlib.h
FI = fixincl@EXEEXT@

View File

@ -1,5 +1,8 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* Defined to the executable file extension on the host system */
#undef EXE_EXT
/* Define to 1 if you have the declaration of `abort', and to 0 if you don't.
*/
#undef HAVE_DECL_ABORT

36
fixincludes/configure vendored
View File

@ -847,6 +847,7 @@ if test -n "$ac_init_help"; then
Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-twoprocess Use a separate process to apply the fixes
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
@ -2343,19 +2344,39 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
# Choose one or two-process fix methodology. Systems that cannot handle
# bi-directional pipes must use the two process method.
#
case $host in
# Check whether --enable-twoprocess or --disable-twoprocess was given.
if test "${enable_twoprocess+set}" = set; then
enableval="$enable_twoprocess"
if test "x$enable_twoprocess" = yes; then
TARGET=twoprocess
else
TARGET=oneprocess
fi
else
case $host in
i?86-*-msdosdjgpp* | \
i?86-*-mingw32* | \
*-*-beos* )
TARGET=twoprocess
;;
* )
TARGET=oneprocess
;;
esac
fi;
if test $TARGET = twoprocess; then
cat >>confdefs.h <<\_ACEOF
#define SEPARATE_FIX_PROC 1
_ACEOF
;;
fi
case $host in
vax-dec-bsd* )
TARGET=oneprocess
cat >>confdefs.h <<\_ACEOF
#define exit xexit
@ -2367,13 +2388,14 @@ cat >>confdefs.h <<\_ACEOF
_ACEOF
;;
* )
TARGET=oneprocess
;;
esac
cat >>confdefs.h <<_ACEOF
#define EXE_EXT "$ac_exeext"
_ACEOF
# Checks for header files.
ac_ext=c

View File

@ -9,25 +9,41 @@ AC_PROG_CC
# Choose one or two-process fix methodology. Systems that cannot handle
# bi-directional pipes must use the two process method.
#
case $host in
AC_ARG_ENABLE([twoprocess],
[ --enable-twoprocess Use a separate process to apply the fixes],
[if test "x$enable_twoprocess" = yes; then
TARGET=twoprocess
else
TARGET=oneprocess
fi],
[case $host in
i?86-*-msdosdjgpp* | \
i?86-*-mingw32* | \
*-*-beos* )
TARGET=twoprocess
AC_DEFINE(SEPARATE_FIX_PROC, 1, [Define if testing and fixing are done by separate process])
;;
vax-dec-bsd* )
TARGET=oneprocess
AC_DEFINE(exit, xexit, [Define to xexit if the host system does not support atexit])
AC_DEFINE(atexit, xatexit, [Define to xatexit if the host system does not support atexit])
;;
* )
TARGET=oneprocess
;;
esac
esac])
AC_SUBST(TARGET)
if test $TARGET = twoprocess; then
AC_DEFINE(SEPARATE_FIX_PROC, 1,
[Define if testing and fixing are done by separate process])
fi
case $host in
vax-dec-bsd* )
AC_DEFINE(exit, xexit, [Define to xexit if the host system does not support atexit])
AC_DEFINE(atexit, xatexit, [Define to xatexit if the host system does not support atexit])
;;
esac
AC_DEFINE_UNQUOTED([EXE_EXT], "$ac_exeext",
[Defined to the executable file extension on the host system])
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([stddef.h stdlib.h strings.h unistd.h fcntl.h sys/file.h \

View File

@ -3,7 +3,7 @@
Test to see if a particular fix should be applied to a header file.
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004
Free Software Foundation, Inc.
= = = = = = = = = = = = = = = = = = = = = = = = =
@ -749,6 +749,8 @@ main( int argc, char** argv )
return EXIT_FAILURE;
}
initialize_opts ();
{
char* pz = argv[1];
long idx;

View File

@ -2,7 +2,7 @@
files which are fixed to work correctly with ANSI C and placed in a
directory that GCC will search.
Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
Copyright (C) 1997, 1998, 1999, 2000, 2004 Free Software Foundation, Inc.
This file is part of GCC.
@ -23,6 +23,8 @@ Boston, MA 02111-1307, USA. */
#include "fixlib.h"
#include <sys/stat.h>
#if defined( HAVE_MMAP_FILE )
#include <sys/mman.h>
#define BAD_ADDR ((void*)-1)
@ -49,12 +51,6 @@ static const char z_std_preamble[] =
This had to be done to correct non-standard usages in the\n\
original, manufacturer supplied header file. */\n\n";
/* Working environment strings. Essentially, invocation 'options'. */
#define _ENV_(v,m,n,t) tCC* v = NULL;
ENV_TABLE
#undef _ENV_
int find_base_len = 0;
typedef enum {
@ -214,18 +210,6 @@ do_version (void)
void
initialize ( int argc, char** argv )
{
static const char var_not_found[] =
#ifndef __STDC__
"fixincl ERROR: %s environment variable not defined\n"
#else
"fixincl ERROR: %s environment variable not defined\n"
"each of these must be defined:\n"
# define _ENV_(vv,mm,nn,tt) "\t" nn " - " tt "\n"
ENV_TABLE
# undef _ENV_
#endif
;
xmalloc_set_program_name (argv[0]);
switch (argc)
@ -255,14 +239,7 @@ initialize ( int argc, char** argv )
signal (SIGCHLD, SIG_DFL);
#endif
#define _ENV_(v,m,n,t) { tSCC var[] = n; \
v = getenv (var); if (m && (v == NULL)) { \
fprintf (stderr, var_not_found, var); \
exit (EXIT_FAILURE); } }
ENV_TABLE
#undef _ENV_
initialize_opts ();
if (ISDIGIT ( *pz_verbose ))
verbose_level = (te_verbose)atoi( pz_verbose );
@ -877,32 +854,41 @@ fix_with_system (tFixDesc* p_fixd,
char* pz_cmd;
char* pz_scan;
size_t argsize;
int i;
tSCC z_applyfix_prog[2] = {
"/../fixincludes/applyfix" EXE_EXT,
"/../../fixincludes/applyfix" EXE_EXT };
if (p_fixd->fd_flags & FD_SUBROUTINE)
{
tSCC z_applyfix_prog[] = "/fixinc/applyfix";
for (i = 0; i < 2; i++)
{
struct stat buf;
argsize = 32
+ strlen( pz_orig_dir )
+ sizeof( z_applyfix_prog )
+ strlen( pz_fix_file )
+ strlen( pz_file_source )
+ strlen( pz_temp_file );
argsize = 32
+ strlen( pz_orig_dir )
+ sizeof( z_applyfix_prog )
+ strlen( pz_fix_file )
+ strlen( pz_file_source )
+ strlen( pz_temp_file );
pz_cmd = xmalloc (argsize);
pz_cmd = xmalloc (argsize);
strcpy( pz_cmd, pz_orig_dir );
pz_scan = pz_cmd + strlen( pz_orig_dir );
strcpy( pz_scan, z_applyfix_prog );
pz_scan += sizeof( z_applyfix_prog ) - 1;
*(pz_scan++) = ' ';
strcpy( pz_cmd, pz_orig_dir );
pz_scan = pz_cmd + strlen( pz_orig_dir );
strcpy( pz_scan, z_applyfix_prog );
pz_scan += sizeof( z_applyfix_prog ) - 1;
/*
* Now add the fix number and file names that may be needed
*/
sprintf (pz_scan, "%ld \'%s\' \'%s\' \'%s\'", p_fixd - fixDescList,
pz_fix_file, pz_file_source, pz_temp_file);
}
if (stat (pz_scan, &buf) != -1)
{
*(pz_scan++) = ' ';
/*
* Now add the fix number and file names that may be needed
*/
sprintf (pz_scan, "%ld \'%s\' \'%s\' \'%s\'", p_fixd - fixDescList,
pz_fix_file, pz_file_source, pz_temp_file);
break;
}
}
else /* NOT an "internal" fix: */
{
size_t parg_size;

View File

@ -3,7 +3,7 @@
files which are fixed to work correctly with ANSI C and placed in a
directory that GCC will search.
Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
Copyright (C) 1999, 2000, 2001, 2004 Free Software Foundation, Inc.
This file is part of GCC.

View File

@ -224,4 +224,6 @@ char* make_raw_shell_str ( char* pz_d, tCC* pz_s, size_t smax );
#endif
t_bool mn_get_regexps ( regex_t** label_re, regex_t** name_re, tCC *who );
void initialize_opts ( void );
#endif /* ! GCC_FIXLIB_H */

51
fixincludes/fixopts.c Normal file
View File

@ -0,0 +1,51 @@
/* Handle options that are passed from environment variables.
Copyright (C) 2004 Free Software Foundation, Inc.
This file is part of GCC.
GCC 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 2, or (at your option)
any later version.
GCC 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 GCC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "fixlib.h"
#define _ENV_(v,m,n,t) tCC* v = NULL;
ENV_TABLE
#undef _ENV_
void
initialize_opts ()
{
static const char var_not_found[] =
#ifndef __STDC__
"fixincl ERROR: %s environment variable not defined\n"
#else
"fixincl ERROR: %s environment variable not defined\n"
"each of these must be defined:\n"
# define _ENV_(vv,mm,nn,tt) "\t" nn " - " tt "\n"
ENV_TABLE
# undef _ENV_
#endif
;
#define _ENV_(v,m,n,t) { tSCC var[] = n; \
v = getenv (var); if (m && (v == NULL)) { \
fprintf (stderr, var_not_found, var); \
exit (EXIT_FAILURE); } }
ENV_TABLE
#undef _ENV_
}