diff options
author | Paolo Bonzini <bonzini@gnu.org> | 2004-10-15 07:58:38 +0000 |
---|---|---|
committer | Paolo Bonzini <bonzini@gcc.gnu.org> | 2004-10-15 07:58:38 +0000 |
commit | ad643a75f71cefbfe50788933c5c847211a09fe4 (patch) | |
tree | 0988a96569fcf89616a90abf081927a8c8328cf8 | |
parent | e26ce7eddf63a239c48619d4ed8f2e635dc6d8d9 (diff) | |
download | gcc-ad643a75f71cefbfe50788933c5c847211a09fe4.tar.gz |
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
-rw-r--r-- | fixincludes/ChangeLog | 17 | ||||
-rw-r--r-- | fixincludes/Makefile.in | 9 | ||||
-rw-r--r-- | fixincludes/config.h.in | 3 | ||||
-rwxr-xr-x | fixincludes/configure | 36 | ||||
-rw-r--r-- | fixincludes/configure.ac | 32 | ||||
-rw-r--r-- | fixincludes/fixfixes.c | 4 | ||||
-rw-r--r-- | fixincludes/fixincl.c | 88 | ||||
-rw-r--r-- | fixincludes/fixlib.c | 2 | ||||
-rw-r--r-- | fixincludes/fixlib.h | 2 | ||||
-rw-r--r-- | fixincludes/fixopts.c | 51 |
10 files changed, 172 insertions, 72 deletions
diff --git a/fixincludes/ChangeLog b/fixincludes/ChangeLog index b983a18e7fb..f3573b11039 100644 --- a/fixincludes/ChangeLog +++ b/fixincludes/ChangeLog @@ -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. diff --git a/fixincludes/Makefile.in b/fixincludes/Makefile.in index 68e1e232a05..c067d84a3cc 100644 --- a/fixincludes/Makefile.in +++ b/fixincludes/Makefile.in @@ -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@ diff --git a/fixincludes/config.h.in b/fixincludes/config.h.in index 6d22ee5bdee..47d5173c4a2 100644 --- a/fixincludes/config.h.in +++ b/fixincludes/config.h.in @@ -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 diff --git a/fixincludes/configure b/fixincludes/configure index 8e9f630a06f..d5da756ada8 100755 --- a/fixincludes/configure +++ b/fixincludes/configure @@ -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 diff --git a/fixincludes/configure.ac b/fixincludes/configure.ac index e0058b11640..8499032db81 100644 --- a/fixincludes/configure.ac +++ b/fixincludes/configure.ac @@ -9,24 +9,40 @@ 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]) ;; +esac]) +AC_SUBST(TARGET) - * ) - TARGET=oneprocess +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_SUBST(TARGET) + +AC_DEFINE_UNQUOTED([EXE_EXT], "$ac_exeext", + [Defined to the executable file extension on the host system]) # Checks for header files. AC_HEADER_STDC diff --git a/fixincludes/fixfixes.c b/fixincludes/fixfixes.c index 19fa27ed121..ade3c4dc5bf 100644 --- a/fixincludes/fixfixes.c +++ b/fixincludes/fixfixes.c @@ -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; diff --git a/fixincludes/fixincl.c b/fixincludes/fixincl.c index 690184b8ad7..a153a777a54 100644 --- a/fixincludes/fixincl.c +++ b/fixincludes/fixincl.c @@ -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"; - - 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); - - 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++) = ' '; - - /* - * 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); - } + 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 ); + + 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; + + 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; diff --git a/fixincludes/fixlib.c b/fixincludes/fixlib.c index e0fa94a14ba..e56328b1621 100644 --- a/fixincludes/fixlib.c +++ b/fixincludes/fixlib.c @@ -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. diff --git a/fixincludes/fixlib.h b/fixincludes/fixlib.h index 4993d1bd654..0ceb60b7626 100644 --- a/fixincludes/fixlib.h +++ b/fixincludes/fixlib.h @@ -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 */ diff --git a/fixincludes/fixopts.c b/fixincludes/fixopts.c new file mode 100644 index 00000000000..55a85e9b6f4 --- /dev/null +++ b/fixincludes/fixopts.c @@ -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_ +} |