files which are fixed to work correctly with ANSI C and placed in a
directory that GNU C will search.
- Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
#include "system.h"
#include "gnu-regex.h"
+#include "machname.h"
+#include "libiberty.h"
+
+#include "tm.h"
#ifndef STDIN_FILENO
# define STDIN_FILENO 0
# define EXIT_FAILURE 1
#endif
+#define EXIT_BROKEN 3
+
#define NUL '\0'
#ifndef NOPROCESS
#define EXIT_PANIC 99
+#ifndef HAVE_T_BOOL_ENUM
+#define HAVE_T_BOOL_ENUM
typedef enum
{
BOOL_FALSE, BOOL_TRUE
} t_bool;
+#endif
+
+typedef int apply_fix_p_t; /* Apply Fix Predicate Type */
+
+#define APPLY_FIX 0
+#define SKIP_FIX 1
#define _P_(p) ()
#endif
+#define ENV_TABLE \
+ _ENV_( pz_machine, BOOL_TRUE, "TARGET_MACHINE", \
+ "output from config.guess" ) \
+ \
+ _ENV_( pz_src_dir, BOOL_TRUE, "SRCDIR", \
+ "directory of original files" ) \
+ \
+ _ENV_( pz_input_dir, BOOL_TRUE, "INPUT", \
+ "current directory for fixincl" ) \
+ \
+ _ENV_( pz_dest_dir, BOOL_TRUE, "DESTDIR", \
+ "output directory" ) \
+ \
+ _ENV_( pz_verbose, BOOL_FALSE, "VERBOSE", \
+ "amount of user entertainment" ) \
+ \
+ _ENV_( pz_find_base, BOOL_TRUE, "FIND_BASE", \
+ "leader to trim from file names" )
+
+/* Test Descriptor
+
+ Each fix may have associated tests that determine
+ whether the fix needs to be applied or not.
+ Each test has a type (from the te_test_type enumeration);
+ associated test text; and, if the test is TT_EGREP or
+ the negated form TT_NEGREP, a pointer to the compiled
+ version of the text string.
+
+ */
+typedef enum
+{
+ TT_TEST, TT_EGREP, TT_NEGREP, TT_FUNCTION
+} te_test_type;
+
+typedef struct test_desc tTestDesc;
+
+struct test_desc
+{
+ te_test_type type;
+ const char *pz_test_text;
+ regex_t *p_test_regex;
+};
+
+typedef struct patch_desc tPatchDesc;
+
+/* Fix Descriptor
+
+ Everything you ever wanted to know about how to apply
+ a particular fix (which files, how to qualify them,
+ how to actually make the fix, etc...)
+
+ NB: the FD_ defines are BIT FLAGS
+
+ */
+#define FD_MACH_ONLY 0x0000
+#define FD_MACH_IFNOT 0x0001
+#define FD_SHELL_SCRIPT 0x0002
+#define FD_SUBROUTINE 0x0004
+#define FD_REPLACEMENT 0x0008
+#define FD_SKIP_TEST 0x8000
+
+typedef struct fix_desc tFixDesc;
+struct fix_desc
+{
+ tCC* fix_name; /* Name of the fix */
+ tCC* file_list; /* List of files it applies to */
+ tCC** papz_machs; /* List of machine/os-es it applies to */
+ int test_ct;
+ int fd_flags;
+ tTestDesc* p_test_desc;
+ tCC** patch_args;
+ long unused;
+};
+
+typedef struct {
+ int type_name_len;
+ tCC* pz_type;
+ tCC* pz_TYPE;
+ tCC* pz_gtype;
+} t_gnu_type_map;
+
+extern int gnu_type_map_ct;
+
+#ifdef HAVE_MMAP_FILE
+#define UNLOAD_DATA() do { if (curr_data_mapped) { \
+ munmap ((void*)pz_curr_data, data_map_size); close (data_map_fd); } \
+ else free ((void*)pz_curr_data); } while(0)
+#else
+#define UNLOAD_DATA() free ((void*)pz_curr_data)
+#endif
+
/*
* Exported procedures
*/
char * load_file_data _P_(( FILE* fp ));
+#ifdef IS_CXX_HEADER_NEEDED
+t_bool is_cxx_header _P_(( tCC* filename, tCC* filetext ));
+#endif /* IS_CXX_HEADER_NEEDED */
+#ifdef SKIP_QUOTE_NEEDED
+tCC* skip_quote _P_(( char q, char* text ));
+#endif
+void compile_re _P_(( tCC* pat, regex_t* re, int match,
+ tCC *e1, tCC *e2 ));
+void apply_fix _P_(( tFixDesc* p_fixd, tCC* filname ));
+apply_fix_p_t run_test _P_((tCC* t_name, tCC* f_name, tCC* text ));
+
+#ifdef MN_NAME_PAT
+void mn_get_regexps _P_(( regex_t** label_re, regex_t** name_re,
+ tCC *who ));
+#endif
#endif /* FIXINCLUDES_FIXLIB_H */