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> 2004-10-04 Loren J. Rittle <ljrittle@acm.org>
* tests/base/sys/cdefs.h: Update from test area. * tests/base/sys/cdefs.h: Update from test area.

View File

@ -1,6 +1,7 @@
# Makefile for fixincludes. # 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. #This file is part of fixincludes.
@ -60,10 +61,10 @@ default : all
LIBIBERTY=../libiberty/libiberty.a LIBIBERTY=../libiberty/libiberty.a
ALLOBJ = fixincl.o fixtests.o fixfixes.o server.o procopen.o \ ALLOBJ = fixincl.o fixtests.o fixfixes.o server.o procopen.o \
fixlib.o fixlib.o fixopts.o
TESTOBJ = fixincl.o fixlib.o fixtests.o TESTOBJ = fixincl.o fixlib.o fixtests.o fixopts.o
FIXOBJ = fixfixes.o fixlib.o FIXOBJ = fixfixes.o fixlib.o fixopts.o
HDR = server.h fixlib.h HDR = server.h fixlib.h
FI = fixincl@EXEEXT@ FI = fixincl@EXEEXT@

View File

@ -1,5 +1,8 @@
/* config.h.in. Generated from configure.ac by autoheader. */ /* 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. /* Define to 1 if you have the declaration of `abort', and to 0 if you don't.
*/ */
#undef HAVE_DECL_ABORT #undef HAVE_DECL_ABORT

36
fixincludes/configure vendored
View File

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

View File

@ -9,25 +9,41 @@ AC_PROG_CC
# Choose one or two-process fix methodology. Systems that cannot handle # Choose one or two-process fix methodology. Systems that cannot handle
# bi-directional pipes must use the two process method. # 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-*-msdosdjgpp* | \
i?86-*-mingw32* | \
*-*-beos* ) *-*-beos* )
TARGET=twoprocess 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 TARGET=oneprocess
;; ;;
esac esac])
AC_SUBST(TARGET) 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. # Checks for header files.
AC_HEADER_STDC AC_HEADER_STDC
AC_CHECK_HEADERS([stddef.h stdlib.h strings.h unistd.h fcntl.h sys/file.h \ 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. 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. Free Software Foundation, Inc.
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
@ -749,6 +749,8 @@ main( int argc, char** argv )
return EXIT_FAILURE; return EXIT_FAILURE;
} }
initialize_opts ();
{ {
char* pz = argv[1]; char* pz = argv[1];
long idx; long idx;

View File

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

View File

@ -3,7 +3,7 @@
files which are fixed to work correctly with ANSI C and placed in a files which are fixed to work correctly with ANSI C and placed in a
directory that GCC will search. 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. 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 #endif
t_bool mn_get_regexps ( regex_t** label_re, regex_t** name_re, tCC *who ); t_bool mn_get_regexps ( regex_t** label_re, regex_t** name_re, tCC *who );
void initialize_opts ( void );
#endif /* ! GCC_FIXLIB_H */ #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_
}