/[make]/make/make.h
ViewVC logotype

Contents of /make/make.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.100 - (show annotations) (download)
Tue Mar 25 02:46:42 2003 UTC (21 years, 1 month ago) by psmith
Branch: MAIN
Changes since 1.99: +10 -1 lines
File MIME type: text/plain
Fix bug #2846.

1 /* Miscellaneous global declarations and portability cruft for GNU Make.
2 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999,
3 2002 Free Software Foundation, Inc.
4 This file is part of GNU Make.
5
6 GNU Make is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU Make is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU Make; see the file COPYING. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19 Boston, MA 02111-1307, USA. */
20
21 /* We use <config.h> instead of "config.h" so that a compilation
22 using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
23 (which it would do because make.h was found in $srcdir). */
24 #include <config.h>
25 #undef HAVE_CONFIG_H
26 #define HAVE_CONFIG_H 1
27
28 /* AIX requires this to be the first thing in the file. */
29 #ifndef __GNUC__
30 # if HAVE_ALLOCA_H
31 # include <alloca.h>
32 # else
33 # ifdef _AIX
34 #pragma alloca
35 # else
36 # ifndef alloca /* predefined by HP cc +Olibcalls */
37 char *alloca ();
38 # endif
39 # endif
40 # endif
41 #endif
42
43
44 /* Use prototypes if available. */
45 #if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
46 # undef PARAMS
47 # define PARAMS(protos) protos
48 #else /* Not C++ or ANSI C. */
49 # undef PARAMS
50 # define PARAMS(protos) ()
51 #endif /* C++ or ANSI C. */
52
53 /* Specify we want GNU source code. This must be defined before any
54 system headers are included. */
55
56 #define _GNU_SOURCE 1
57
58
59 #ifdef CRAY
60 /* This must happen before #include <signal.h> so
61 that the declaration therein is changed. */
62 # define signal bsdsignal
63 #endif
64
65 /* If we're compiling for the dmalloc debugger, turn off string inlining. */
66 #if defined(HAVE_DMALLOC_H) && defined(__GNUC__)
67 # define __NO_STRING_INLINES
68 #endif
69
70 #include <sys/types.h>
71 #include <sys/stat.h>
72 #include <signal.h>
73 #include <stdio.h>
74 #include <ctype.h>
75 #ifdef HAVE_SYS_TIMEB_H
76 /* SCO 3.2 "devsys 4.2" has a prototype for `ftime' in <time.h> that bombs
77 unless <sys/timeb.h> has been included first. Does every system have a
78 <sys/timeb.h>? If any does not, configure should check for it. */
79 # include <sys/timeb.h>
80 #endif
81
82 #if TIME_WITH_SYS_TIME
83 # include <sys/time.h>
84 # include <time.h>
85 #else
86 # if HAVE_SYS_TIME_H
87 # include <sys/time.h>
88 # else
89 # include <time.h>
90 # endif
91 #endif
92
93 #include <errno.h>
94
95 #ifndef errno
96 extern int errno;
97 #endif
98
99 #ifndef isblank
100 # define isblank(c) ((c) == ' ' || (c) == '\t')
101 #endif
102
103 #ifdef HAVE_UNISTD_H
104 # include <unistd.h>
105 /* Ultrix's unistd.h always defines _POSIX_VERSION, but you only get
106 POSIX.1 behavior with `cc -YPOSIX', which predefines POSIX itself! */
107 # if defined (_POSIX_VERSION) && !defined (ultrix) && !defined (VMS)
108 # define POSIX 1
109 # endif
110 #endif
111
112 /* Some systems define _POSIX_VERSION but are not really POSIX.1. */
113 #if (defined (butterfly) || defined (__arm) || (defined (__mips) && defined (_SYSTYPE_SVR3)) || (defined (sequent) && defined (i386)))
114 # undef POSIX
115 #endif
116
117 #if !defined (POSIX) && defined (_AIX) && defined (_POSIX_SOURCE)
118 # define POSIX 1
119 #endif
120
121 #ifndef RETSIGTYPE
122 # define RETSIGTYPE void
123 #endif
124
125 #ifndef sigmask
126 # define sigmask(sig) (1 << ((sig) - 1))
127 #endif
128
129 #ifndef HAVE_SA_RESTART
130 # define SA_RESTART 0
131 #endif
132
133 #ifdef HAVE_LIMITS_H
134 # include <limits.h>
135 #endif
136 #ifdef HAVE_SYS_PARAM_H
137 # include <sys/param.h>
138 #endif
139
140 #ifndef PATH_MAX
141 # ifndef POSIX
142 # define PATH_MAX MAXPATHLEN
143 # endif
144 #endif
145 #ifndef MAXPATHLEN
146 # define MAXPATHLEN 1024
147 #endif
148
149 #ifdef PATH_MAX
150 # define GET_PATH_MAX PATH_MAX
151 # define PATH_VAR(var) char var[PATH_MAX]
152 #else
153 # define NEED_GET_PATH_MAX 1
154 # define GET_PATH_MAX (get_path_max ())
155 # define PATH_VAR(var) char *var = (char *) alloca (GET_PATH_MAX)
156 extern unsigned int get_path_max PARAMS ((void));
157 #endif
158
159 #ifndef CHAR_BIT
160 # define CHAR_BIT 8
161 #endif
162
163 /* Nonzero if the integer type T is signed. */
164 #define INTEGER_TYPE_SIGNED(t) ((t) -1 < 0)
165
166 /* The minimum and maximum values for the integer type T.
167 Use ~ (t) 0, not -1, for portability to 1's complement hosts. */
168 #define INTEGER_TYPE_MINIMUM(t) \
169 (! INTEGER_TYPE_SIGNED (t) ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))
170 #define INTEGER_TYPE_MAXIMUM(t) (~ (t) 0 - INTEGER_TYPE_MINIMUM (t))
171
172 #ifndef CHAR_MAX
173 # define CHAR_MAX INTEGER_TYPE_MAXIMUM (char)
174 #endif
175
176 #ifdef STAT_MACROS_BROKEN
177 # ifdef S_ISREG
178 # undef S_ISREG
179 # endif
180 # ifdef S_ISDIR
181 # undef S_ISDIR
182 # endif
183 #endif /* STAT_MACROS_BROKEN. */
184
185 #ifndef S_ISREG
186 # define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
187 #endif
188 #ifndef S_ISDIR
189 # define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
190 #endif
191
192 #ifdef VMS
193 # include <types.h>
194 # include <unixlib.h>
195 # include <unixio.h>
196 # include <perror.h>
197 /* Needed to use alloca on VMS. */
198 # include <builtins.h>
199 #endif
200
201 #ifndef __attribute__
202 /* This feature is available in gcc versions 2.5 and later. */
203 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
204 # define __attribute__(x)
205 # endif
206 /* The __-protected variants of `format' and `printf' attributes
207 are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
208 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
209 # define __format__ format
210 # define __printf__ printf
211 # endif
212 #endif
213
214 #if defined (STDC_HEADERS) || defined (__GNU_LIBRARY__)
215 # include <stdlib.h>
216 # include <string.h>
217 # define ANSI_STRING 1
218 #else /* No standard headers. */
219 # ifdef HAVE_STRING_H
220 # include <string.h>
221 # define ANSI_STRING 1
222 # else
223 # include <strings.h>
224 # endif
225 # ifdef HAVE_MEMORY_H
226 # include <memory.h>
227 # endif
228 # ifdef HAVE_STDLIB_H
229 # include <stdlib.h>
230 # else
231 extern char *malloc PARAMS ((int));
232 extern char *realloc PARAMS ((char *, int));
233 extern void free PARAMS ((char *));
234
235 extern void abort PARAMS ((void)) __attribute__ ((noreturn));
236 extern void exit PARAMS ((int)) __attribute__ ((noreturn));
237 # endif /* HAVE_STDLIB_H. */
238
239 #endif /* Standard headers. */
240
241 /* These should be in stdlib.h. Make sure we have them. */
242 #ifndef EXIT_SUCCESS
243 # define EXIT_SUCCESS 0
244 #endif
245 #ifndef EXIT_FAILURE
246 # define EXIT_FAILURE 0
247 #endif
248
249 #ifdef ANSI_STRING
250
251 # ifndef bcmp
252 # define bcmp(s1, s2, n) memcmp ((s1), (s2), (n))
253 # endif
254 # ifndef bzero
255 # define bzero(s, n) memset ((s), 0, (n))
256 # endif
257 # if defined(HAVE_MEMMOVE) && !defined(bcopy)
258 # define bcopy(s, d, n) memmove ((d), (s), (n))
259 # endif
260
261 #else /* Not ANSI_STRING. */
262
263 # ifndef HAVE_STRCHR
264 # define strchr(s, c) index((s), (c))
265 # define strrchr(s, c) rindex((s), (c))
266 # endif
267
268 # ifndef bcmp
269 extern int bcmp PARAMS ((const char *, const char *, int));
270 # endif
271 # ifndef bzero
272 extern void bzero PARAMS ((char *, int));
273 #endif
274 # ifndef bcopy
275 extern void bcopy PARAMS ((const char *b1, char *b2, int));
276 # endif
277
278 #endif /* ANSI_STRING. */
279 #undef ANSI_STRING
280
281 /* SCO Xenix has a buggy macro definition in <string.h>. */
282 #undef strerror
283
284 #if !defined(ANSI_STRING) && !defined(__DECC)
285 extern char *strerror PARAMS ((int errnum));
286 #endif
287
288 #if HAVE_INTTYPES_H
289 # include <inttypes.h>
290 #endif
291 #define FILE_TIMESTAMP uintmax_t
292
293 #if !defined(HAVE_STRSIGNAL)
294 extern char *strsignal PARAMS ((int signum));
295 #endif
296
297 /* ISDIGIT offers the following features:
298 - Its arg may be any int or unsigned int; it need not be an unsigned char.
299 - It's guaranteed to evaluate its argument exactly once.
300 NOTE! Make relies on this behavior, don't change it!
301 - It's typically faster.
302 POSIX 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
303 only '0' through '9' are digits. Prefer ISDIGIT to isdigit() unless
304 it's important to use the locale's definition of `digit' even when the
305 host does not conform to POSIX. */
306 #define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
307
308 #ifndef iAPX286
309 # define streq(a, b) \
310 ((a) == (b) || \
311 (*(a) == *(b) && (*(a) == '\0' || !strcmp ((a) + 1, (b) + 1))))
312 # ifdef HAVE_CASE_INSENSITIVE_FS
313 /* This is only used on Windows/DOS platforms, so we assume strcmpi(). */
314 # define strieq(a, b) \
315 ((a) == (b) \
316 || (tolower((unsigned char)*(a)) == tolower((unsigned char)*(b)) \
317 && (*(a) == '\0' || !strcmpi ((a) + 1, (b) + 1))))
318 # else
319 # define strieq(a, b) streq(a, b)
320 # endif
321 #else
322 /* Buggy compiler can't handle this. */
323 # define streq(a, b) (strcmp ((a), (b)) == 0)
324 # define strieq(a, b) (strcmp ((a), (b)) == 0)
325 #endif
326 #define strneq(a, b, l) (strncmp ((a), (b), (l)) == 0)
327 #ifdef VMS
328 extern int strcmpi (const char *,const char *);
329 #endif
330
331 #if defined(__GNUC__) || defined(ENUM_BITFIELDS)
332 # define ENUM_BITFIELD(bits) :bits
333 #else
334 # define ENUM_BITFIELD(bits)
335 #endif
336
337 /* Handle gettext and locales. */
338
339 #if HAVE_LOCALE_H
340 # include <locale.h>
341 #else
342 # define setlocale(category, locale)
343 #endif
344
345 #include <gettext.h>
346
347 #define _(msgid) gettext (msgid)
348 #define N_(msgid) gettext_noop (msgid)
349 #define S_(msg1,msg2,num) ngettext (msg1,msg2,num)
350
351 /* Handle other OSs. */
352 #if defined(HAVE_DOS_PATHS)
353 # define PATH_SEPARATOR_CHAR ';'
354 #elif defined(VMS)
355 # define PATH_SEPARATOR_CHAR ','
356 #else
357 # define PATH_SEPARATOR_CHAR ':'
358 #endif
359
360 #ifdef WINDOWS32
361 # include <fcntl.h>
362 # include <malloc.h>
363 # define pipe(p) _pipe(p, 512, O_BINARY)
364 # define kill(pid,sig) w32_kill(pid,sig)
365
366 extern void sync_Path_environment(void);
367 extern int kill(int pid, int sig);
368 extern int safe_stat(char *file, struct stat *sb);
369 extern char *end_of_token_w32(char *s, char stopchar);
370 extern int find_and_set_default_shell(char *token);
371
372 /* indicates whether or not we have Bourne shell */
373 extern int no_default_sh_exe;
374
375 /* is default_shell unixy? */
376 extern int unixy_shell;
377 #endif /* WINDOWS32 */
378
379 struct floc
380 {
381 char *filenm;
382 unsigned long lineno;
383 };
384 #define NILF ((struct floc *)0)
385
386 #define STRING_SIZE_TUPLE(_s) (_s), (sizeof (_s)-1)
387
388
389 /* Fancy processing for variadic functions in both ANSI and pre-ANSI
390 compilers. */
391 #if defined __STDC__ && __STDC__
392 extern void message (int prefix, const char *fmt, ...)
393 __attribute__ ((__format__ (__printf__, 2, 3)));
394 extern void error (const struct floc *flocp, const char *fmt, ...)
395 __attribute__ ((__format__ (__printf__, 2, 3)));
396 extern void fatal (const struct floc *flocp, const char *fmt, ...)
397 __attribute__ ((noreturn, __format__ (__printf__, 2, 3)));
398 #else
399 extern void message ();
400 extern void error ();
401 extern void fatal ();
402 #endif
403
404 extern void die PARAMS ((int)) __attribute__ ((noreturn));
405 extern void log_working_directory PARAMS ((int));
406 extern void pfatal_with_name PARAMS ((const char *)) __attribute__ ((noreturn));
407 extern void perror_with_name PARAMS ((const char *, const char *));
408 extern char *savestring PARAMS ((const char *, unsigned int));
409 extern char *concat PARAMS ((const char *, const char *, const char *));
410 extern char *xmalloc PARAMS ((unsigned int));
411 extern char *xrealloc PARAMS ((char *, unsigned int));
412 extern char *xstrdup PARAMS ((const char *));
413 extern char *find_next_token PARAMS ((char **, unsigned int *));
414 extern char *next_token PARAMS ((const char *));
415 extern char *end_of_token PARAMS ((char *));
416 extern void collapse_continuations PARAMS ((char *));
417 extern void remove_comments PARAMS((char *));
418 extern char *sindex PARAMS ((const char *, unsigned int, \
419 const char *, unsigned int));
420 extern char *lindex PARAMS ((const char *, const char *, int));
421 extern int alpha_compare PARAMS ((const void *, const void *));
422 extern void print_spaces PARAMS ((unsigned int));
423 extern char *find_char_unquote PARAMS ((char *, int, int, int));
424 extern char *find_percent PARAMS ((char *));
425 extern FILE *open_tmpfile PARAMS ((char **, const char *));
426
427 #ifndef NO_ARCHIVES
428 extern int ar_name PARAMS ((char *));
429 extern void ar_parse_name PARAMS ((char *, char **, char **));
430 extern int ar_touch PARAMS ((char *));
431 extern time_t ar_member_date PARAMS ((char *));
432 #endif
433
434 extern int dir_file_exists_p PARAMS ((char *, char *));
435 extern int file_exists_p PARAMS ((char *));
436 extern int file_impossible_p PARAMS ((char *));
437 extern void file_impossible PARAMS ((char *));
438 extern char *dir_name PARAMS ((char *));
439 extern void hash_init_directories PARAMS ((void));
440
441 extern void define_default_variables PARAMS ((void));
442 extern void set_default_suffixes PARAMS ((void));
443 extern void install_default_suffix_rules PARAMS ((void));
444 extern void install_default_implicit_rules PARAMS ((void));
445
446 extern void build_vpath_lists PARAMS ((void));
447 extern void construct_vpath_list PARAMS ((char *pattern, char *dirpath));
448 extern int vpath_search PARAMS ((char **file, FILE_TIMESTAMP *mtime_ptr));
449 extern int gpath_search PARAMS ((char *file, int len));
450
451 extern void construct_include_path PARAMS ((char **arg_dirs));
452
453 extern void user_access PARAMS ((void));
454 extern void make_access PARAMS ((void));
455 extern void child_access PARAMS ((void));
456
457 #ifdef HAVE_VFORK_H
458 # include <vfork.h>
459 #endif
460
461 /* We omit these declarations on non-POSIX systems which define _POSIX_VERSION,
462 because such systems often declare them in header files anyway. */
463
464 #if !defined (__GNU_LIBRARY__) && !defined (POSIX) && !defined (_POSIX_VERSION) && !defined(WINDOWS32)
465
466 extern long int atol ();
467 # ifndef VMS
468 extern long int lseek ();
469 # endif
470
471 #endif /* Not GNU C library or POSIX. */
472
473 #ifdef HAVE_GETCWD
474 # if !defined(VMS) && !defined(__DECC)
475 extern char *getcwd ();
476 #endif
477 #else
478 extern char *getwd ();
479 # define getcwd(buf, len) getwd (buf)
480 #endif
481
482 extern const struct floc *reading_file;
483
484 extern char **environ;
485
486 extern int just_print_flag, silent_flag, ignore_errors_flag, keep_going_flag;
487 extern int print_data_base_flag, question_flag, touch_flag, always_make_flag;
488 extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag;
489 extern int print_version_flag, print_directory_flag;
490 extern int warn_undefined_variables_flag, posix_pedantic, not_parallel;
491 extern int clock_skew_detected;
492
493 /* can we run commands via 'sh -c xxx' or must we use batch files? */
494 extern int batch_mode_shell;
495
496 extern unsigned int job_slots;
497 extern int job_fds[2];
498 extern int job_rfd;
499 #ifndef NO_FLOAT
500 extern double max_load_average;
501 #else
502 extern int max_load_average;
503 #endif
504
505 extern char *program;
506 extern char *starting_directory;
507 extern unsigned int makelevel;
508 extern char *version_string, *remote_description;
509
510 extern unsigned int commands_started;
511
512 extern int handling_fatal_signal;
513
514
515 #ifndef MIN
516 #define MIN(_a,_b) ((_a)<(_b)?(_a):(_b))
517 #endif
518 #ifndef MAX
519 #define MAX(_a,_b) ((_a)>(_b)?(_a):(_b))
520 #endif
521
522 #ifdef VMS
523 # define MAKE_SUCCESS 1
524 # define MAKE_TROUBLE 2
525 # define MAKE_FAILURE 3
526 #else
527 # define MAKE_SUCCESS 0
528 # define MAKE_TROUBLE 1
529 # define MAKE_FAILURE 2
530 #endif
531
532 /* Set up heap debugging library dmalloc. */
533
534 #ifdef HAVE_DMALLOC_H
535 #include <dmalloc.h>
536 #endif
537
538 #ifndef initialize_main
539 # ifdef __EMX__
540 # define initialize_main(pargc, pargv) \
541 { _wildcard(pargc, pargv); _response(pargc, pargv); }
542 # else
543 # define initialize_main(pargc, pargv)
544 # endif
545 #endif
546
547
548 #ifdef __EMX__
549 # if !HAVE_STRCASECMP
550 # define strcasecmp stricmp
551 # endif
552
553 # if !defined chdir
554 # define chdir _chdir2
555 # endif
556 # if !defined getcwd
557 # define getcwd _getcwd2
558 # endif
559
560 /* NO_CHDIR2 causes make not to use _chdir2() and _getcwd2() instead of
561 chdir() and getcwd(). This avoids some error messages for the
562 make testsuite but restricts the drive letter support. */
563 # ifdef NO_CHDIR2
564 # warning NO_CHDIR2: usage of drive letters restricted
565 # undef chdir
566 # undef getcwd
567 # endif
568 #endif
569
570 #ifndef initialize_main
571 # define initialize_main(pargc, pargv)
572 #endif
573
574
575 /* Some systems (like Solaris, PTX, etc.) do not support the SA_RESTART flag
576 properly according to POSIX. So, we try to wrap common system calls with
577 checks for EINTR. Note that there are still plenty of system calls that
578 can fail with EINTR but this, reportedly, gets the vast majority of
579 failure cases. If you still experience failures you'll need to either get
580 a system where SA_RESTART works, or you need to avoid -j. */
581
582 #define EINTRLOOP(_v,_c) while (((_v)=_c)==-1 && errno==EINTR)
583
584 /* While system calls that return integers are pretty consistent about
585 returning -1 on failure and setting errno in that case, functions that
586 return pointers are not always so well behaved. Sometimes they return
587 NULL for expected behavior: one good example is readdir() which returns
588 NULL at the end of the directory--and _doesn't_ reset errno. So, we have
589 to do it ourselves here. */
590
591 #define ENULLLOOP(_v,_c) do{ errno = 0; \
592 while (((_v)=_c)==0 && errno==EINTR); }while(0)
593

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26