]> git.ipfire.org Git - thirdparty/gcc.git/blame - fixincludes/fixlib.h
Made fixincludes a toplevel build module.
[thirdparty/gcc.git] / fixincludes / fixlib.h
CommitLineData
5daf7ede 1
2/* Install modified versions of certain ANSI-incompatible system header
3 files which are fixed to work correctly with ANSI C and placed in a
fef0883b 4 directory that GCC will search.
5daf7ede 5
fef0883b 6 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002
7 Free Software Foundation, Inc.
5daf7ede 8
fef0883b 9This file is part of GCC.
5daf7ede 10
fef0883b 11GCC is free software; you can redistribute it and/or modify
5daf7ede 12it under the terms of the GNU General Public License as published by
13the Free Software Foundation; either version 2, or (at your option)
14any later version.
15
fef0883b 16GCC is distributed in the hope that it will be useful,
5daf7ede 17but WITHOUT ANY WARRANTY; without even the implied warranty of
18MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19GNU General Public License for more details.
20
21You should have received a copy of the GNU General Public License
fef0883b 22along with GCC; see the file COPYING. If not, write to
5daf7ede 23the Free Software Foundation, 59 Temple Place - Suite 330,
24Boston, MA 02111-1307, USA. */
25
2a281353 26#ifndef GCC_FIXLIB_H
27#define GCC_FIXLIB_H
5daf7ede 28
9aac3497 29#include "config.h"
5daf7ede 30#include "system.h"
ca58af19 31#include <signal.h>
5daf7ede 32
30f9dc1c 33#include "xregex.h"
7cd86c4d 34#include "libiberty.h"
5daf7ede 35
36#ifndef STDIN_FILENO
37# define STDIN_FILENO 0
38#endif
39#ifndef STDOUT_FILENO
40# define STDOUT_FILENO 1
41#endif
42
43typedef int t_success;
44
45#define FAILURE (-1)
46#define SUCCESS 0
47#define PROBLEM 1
48
49#define SUCCEEDED(p) ((p) == SUCCESS)
50#define SUCCESSFUL(p) SUCCEEDED (p)
51#define FAILED(p) ((p) < SUCCESS)
52#define HADGLITCH(p) ((p) > SUCCESS)
53
5beb4ba0 54#ifndef DEBUG
55# define STATIC static
56#else
57# define STATIC
58#endif
5daf7ede 59
60#define tSCC static const char
61#define tCC const char
62#define tSC static char
63
64/* If this particular system's header files define the macro `MAXPATHLEN',
65 we happily take advantage of it; otherwise we use a value which ought
66 to be large enough. */
67#ifndef MAXPATHLEN
68# define MAXPATHLEN 4096
69#endif
70
71#ifndef EXIT_SUCCESS
72# define EXIT_SUCCESS 0
73#endif
74#ifndef EXIT_FAILURE
75# define EXIT_FAILURE 1
76#endif
77
6c013a2f 78#define EXIT_BROKEN 3
79
5daf7ede 80#define NUL '\0'
81
82#ifndef NOPROCESS
83#define NOPROCESS ((pid_t) -1)
84#define NULLPROCESS ((pid_t)0)
85
86#define EXIT_PANIC 99
2548396b 87#endif /* NOPROCESS */
5daf7ede 88
5beb4ba0 89#define IGNORE_ARG(a) ((void)(a))
90
e6c3d97b 91typedef enum t_bool
5daf7ede 92{
93 BOOL_FALSE, BOOL_TRUE
94} t_bool;
95
a98784e9 96typedef int apply_fix_p_t; /* Apply Fix Predicate Type */
97
98#define APPLY_FIX 0
99#define SKIP_FIX 1
100
cc42f3d4 101#define ENV_TABLE \
102 _ENV_( pz_machine, BOOL_TRUE, "TARGET_MACHINE", \
103 "output from config.guess" ) \
104 \
70ba55fd 105 _ENV_( pz_orig_dir, BOOL_TRUE, "ORIGDIR", \
106 "directory of fixincl and applyfix" ) \
107 \
cc42f3d4 108 _ENV_( pz_src_dir, BOOL_TRUE, "SRCDIR", \
109 "directory of original files" ) \
110 \
111 _ENV_( pz_input_dir, BOOL_TRUE, "INPUT", \
112 "current directory for fixincl" ) \
113 \
114 _ENV_( pz_dest_dir, BOOL_TRUE, "DESTDIR", \
115 "output directory" ) \
116 \
31b04dee 117 _ENV_( pz_mn_name_pat, BOOL_FALSE, "MN_NAME_PAT", \
118 "regex matching forbidden identifiers" ) \
119 \
cc42f3d4 120 _ENV_( pz_verbose, BOOL_FALSE, "VERBOSE", \
121 "amount of user entertainment" ) \
122 \
123 _ENV_( pz_find_base, BOOL_TRUE, "FIND_BASE", \
124 "leader to trim from file names" )
125
31b04dee 126#define _ENV_(v,m,n,t) extern tCC* v;
127ENV_TABLE
128#undef _ENV_
129
09fe1d5c 130/* Test Descriptor
131
132 Each fix may have associated tests that determine
133 whether the fix needs to be applied or not.
134 Each test has a type (from the te_test_type enumeration);
135 associated test text; and, if the test is TT_EGREP or
136 the negated form TT_NEGREP, a pointer to the compiled
137 version of the text string.
138
139 */
140typedef enum
141{
142 TT_TEST, TT_EGREP, TT_NEGREP, TT_FUNCTION
143} te_test_type;
144
145typedef struct test_desc tTestDesc;
146
147struct test_desc
148{
149 te_test_type type;
150 const char *pz_test_text;
151 regex_t *p_test_regex;
152};
153
154typedef struct patch_desc tPatchDesc;
155
156/* Fix Descriptor
157
158 Everything you ever wanted to know about how to apply
159 a particular fix (which files, how to qualify them,
160 how to actually make the fix, etc...)
161
94f426d1 162 NB: the FD_ defines are BIT FLAGS, even though
163 some are mutually exclusive
09fe1d5c 164
165 */
166#define FD_MACH_ONLY 0x0000
167#define FD_MACH_IFNOT 0x0001
168#define FD_SHELL_SCRIPT 0x0002
169#define FD_SUBROUTINE 0x0004
170#define FD_REPLACEMENT 0x0008
171#define FD_SKIP_TEST 0x8000
172
173typedef struct fix_desc tFixDesc;
174struct fix_desc
175{
e6650807 176 tCC* fix_name; /* Name of the fix */
177 tCC* file_list; /* List of files it applies to */
178 tCC** papz_machs; /* List of machine/os-es it applies to */
179 int test_ct;
180 int fd_flags;
181 tTestDesc* p_test_desc;
182 tCC** patch_args;
183 long unused;
09fe1d5c 184};
185
6c013a2f 186typedef struct {
187 int type_name_len;
188 tCC* pz_type;
189 tCC* pz_TYPE;
190 tCC* pz_gtype;
6c013a2f 191} t_gnu_type_map;
192
193extern int gnu_type_map_ct;
194
cc42f3d4 195#ifdef HAVE_MMAP_FILE
196#define UNLOAD_DATA() do { if (curr_data_mapped) { \
197 munmap ((void*)pz_curr_data, data_map_size); close (data_map_fd); } \
198 else free ((void*)pz_curr_data); } while(0)
199#else
200#define UNLOAD_DATA() free ((void*)pz_curr_data)
201#endif
202
5daf7ede 203/*
204 * Exported procedures
205 */
a95bcb36 206char * load_file_data ( FILE* fp );
2548396b 207
7cd86c4d 208#ifdef IS_CXX_HEADER_NEEDED
a95bcb36 209t_bool is_cxx_header ( tCC* filename, tCC* filetext );
7cd86c4d 210#endif /* IS_CXX_HEADER_NEEDED */
2548396b 211
7cd86c4d 212#ifdef SKIP_QUOTE_NEEDED
a95bcb36 213tCC* skip_quote ( char q, char* text );
7cd86c4d 214#endif
09fe1d5c 215
a95bcb36 216void compile_re ( tCC* pat, regex_t* re, int match, tCC *e1, tCC *e2 );
2548396b 217
a95bcb36 218void apply_fix ( tFixDesc* p_fixd, tCC* filname );
2548396b 219apply_fix_p_t
a95bcb36 220 run_test ( tCC* t_name, tCC* f_name, tCC* text );
09fe1d5c 221
d3aacc3b 222#ifdef SEPARATE_FIX_PROC
a95bcb36 223char* make_raw_shell_str ( char* pz_d, tCC* pz_s, size_t smax );
70ba55fd 224#endif
225
31b04dee 226t_bool mn_get_regexps ( regex_t** label_re, regex_t** name_re, tCC *who );
2a281353 227#endif /* ! GCC_FIXLIB_H */