2004-08-14 Paolo Bonzini * 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. * config.h.in: Regenerate. * configure: Regenerate. Index: Makefile.in =================================================================== RCS file: /cvs/gcc/gcc/fixincludes/Makefile.in,v retrieving revision 1.1 diff -u -r1.1 Makefile.in --- Makefile.in 31 Aug 2004 09:26:05 -0000 1.1 +++ Makefile.in 14 Oct 2004 08:50:26 -0000 @@ -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 @@ 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@ Index: config.h.in =================================================================== RCS file: /cvs/gcc/gcc/fixincludes/config.h.in,v retrieving revision 1.1 diff -u -r1.1 config.h.in --- config.h.in 31 Aug 2004 09:26:05 -0000 1.1 +++ config.h.in 14 Oct 2004 08:50:26 -0000 @@ -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 Index: configure =================================================================== RCS file: /cvs/gcc/gcc/fixincludes/configure,v retrieving revision 1.1 diff -u -r1.1 configure --- configure 31 Aug 2004 09:26:05 -0000 1.1 +++ configure 14 Oct 2004 08:50:27 -0000 @@ -847,6 +847,7 @@ 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,38 @@ # 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* | \ *-*-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 +2387,14 @@ _ACEOF ;; - - * ) - TARGET=oneprocess - ;; esac +cat >>confdefs.h <<_ACEOF +#define EXE_EXT "$ac_exeext" +_ACEOF + + # Checks for header files. ac_ext=c Index: configure.ac =================================================================== RCS file: /cvs/gcc/gcc/fixincludes/configure.ac,v retrieving revision 1.1 diff -u -r1.1 configure.ac --- configure.ac 31 Aug 2004 09:26:05 -0000 1.1 +++ configure.ac 14 Oct 2004 08:50:27 -0000 @@ -9,24 +9,39 @@ # 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* | \ *-*-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 Index: fixfixes.c =================================================================== RCS file: /cvs/gcc/gcc/fixincludes/fixfixes.c,v retrieving revision 1.1 diff -u -r1.1 fixfixes.c --- fixfixes.c 31 Aug 2004 09:26:05 -0000 1.1 +++ fixfixes.c 14 Oct 2004 08:50:27 -0000 @@ -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 @@ return EXIT_FAILURE; } + initialize_opts (); + { char* pz = argv[1]; long idx; Index: fixincl.c =================================================================== RCS file: /cvs/gcc/gcc/fixincludes/fixincl.c,v retrieving revision 1.1 diff -u -r1.1 fixincl.c --- fixincl.c 31 Aug 2004 09:26:05 -0000 1.1 +++ fixincl.c 14 Oct 2004 08:50:27 -0000 @@ -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. @@ -49,12 +51,6 @@ 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 @@ 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 @@ 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 @@ char* pz_cmd; char* pz_scan; size_t argsize; + int i; + tSCC z_applyfix_prog[2] = { + "/../fixincludes/applyfix" EXE_EXT, + "/../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; Index: fixopts.c =================================================================== RCS file: fixopts.c diff -N fixopts.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ fixopts.c 14 Oct 2004 08:50:27 -0000 @@ -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_ +} Index: fixlib.h =================================================================== RCS file: /cvs/gcc/gcc/fixincludes/fixlib.h,v retrieving revision 1.1 diff -u -r1.1 fixlib.h --- fixlib.h 31 Aug 2004 09:26:05 -0000 1.1 +++ fixlib.h 14 Oct 2004 08:57:16 -0000 @@ -224,4 +224,6 @@ #endif t_bool mn_get_regexps ( regex_t** label_re, regex_t** name_re, tCC *who ); + +void initialize_opts ( void ); #endif /* ! GCC_FIXLIB_H */