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.
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)
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.
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. */
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). */
26 #define HAVE_CONFIG_H 1
28 /* AIX requires this to be the first thing in the file. */
36 # ifndef alloca /* predefined by HP cc +Olibcalls */
44 /* Use prototypes if available. */
45 #if defined (__cplusplus) || (defined (__STDC__) && __STDC__)
47 # define PARAMS(protos) protos
48 #else /* Not C++ or ANSI C. */
50 # define PARAMS(protos) ()
51 #endif /* C++ or ANSI C. */
53 /* Specify we want GNU source code. This must be defined before any
54 system headers are included. */
60 /* This must happen before #include <signal.h> so
61 that the declaration therein is changed. */
62 # define signal bsdsignal
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
70 #include <sys/types.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>
82 #if TIME_WITH_SYS_TIME
83 # include <sys/time.h>
87 # include <sys/time.h>
100 # define isblank(c) ((c) == ' ' || (c) == '\t')
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)
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)))
117 #if !defined (POSIX) && defined (_AIX) && defined (_POSIX_SOURCE)
122 # define RETSIGTYPE void
126 # define sigmask(sig) (1 << ((sig) - 1))
129 #ifndef HAVE_SA_RESTART
130 # define SA_RESTART 0
136 #ifdef HAVE_SYS_PARAM_H
137 # include <sys/param.h>
142 # define PATH_MAX MAXPATHLEN
146 # define MAXPATHLEN 1024
150 # define GET_PATH_MAX PATH_MAX
151 # define PATH_VAR(var) char var[PATH_MAX]
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));
163 /* Nonzero if the integer type T is signed. */
164 #define INTEGER_TYPE_SIGNED(t) ((t) -1 < 0)
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))
173 # define CHAR_MAX INTEGER_TYPE_MAXIMUM (char)
176 #ifdef STAT_MACROS_BROKEN
183 #endif /* STAT_MACROS_BROKEN. */
186 # define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
189 # define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
194 # include <unixlib.h>
197 /* Needed to use alloca on VMS. */
198 # include <builtins.h>
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)
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
214 #if defined (STDC_HEADERS) || defined (__GNU_LIBRARY__)
217 # define ANSI_STRING 1
218 #else /* No standard headers. */
219 # ifdef HAVE_STRING_H
221 # define ANSI_STRING 1
223 # include <strings.h>
225 # ifdef HAVE_MEMORY_H
228 # ifdef HAVE_STDLIB_H
231 extern char *malloc
PARAMS ((int));
232 extern char *realloc
PARAMS ((char *, int));
233 extern void free
PARAMS ((char *));
235 extern void abort
PARAMS ((void)) __attribute__ ((noreturn
));
236 extern void exit
PARAMS ((int)) __attribute__ ((noreturn
));
237 # endif /* HAVE_STDLIB_H. */
239 #endif /* Standard headers. */
241 /* These should be in stdlib.h. Make sure we have them. */
243 # define EXIT_SUCCESS 0
246 # define EXIT_FAILURE 0
252 # define bcmp(s1, s2, n) memcmp ((s1), (s2), (n))
255 # define bzero(s, n) memset ((s), 0, (n))
257 # if defined(HAVE_MEMMOVE) && !defined(bcopy)
258 # define bcopy(s, d, n) memmove ((d), (s), (n))
261 #else /* Not ANSI_STRING. */
264 # define strchr(s, c) index((s), (c))
265 # define strrchr(s, c) rindex((s), (c))
269 extern int bcmp
PARAMS ((const char *, const char *, int));
272 extern void bzero
PARAMS ((char *, int));
275 extern void bcopy
PARAMS ((const char *b1
, char *b2
, int));
278 #endif /* ANSI_STRING. */
281 /* SCO Xenix has a buggy macro definition in <string.h>. */
284 #if !defined(ANSI_STRING) && !defined(__DECC)
285 extern char *strerror
PARAMS ((int errnum
));
289 # include <inttypes.h>
291 #define FILE_TIMESTAMP uintmax_t
293 #if !defined(HAVE_STRSIGNAL)
294 extern char *strsignal
PARAMS ((int signum
));
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)
309 # define streq(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) \
316 || (tolower((unsigned char)*(a)) == tolower((unsigned char)*(b)) \
317 && (*(a) == '\0' || !strcmpi ((a) + 1, (b) + 1))))
319 # define strieq(a, b) streq(a, b)
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)
326 #define strneq(a, b, l) (strncmp ((a), (b), (l)) == 0)
328 extern int strcmpi (const char *,const char *);
331 #if defined(__GNUC__) || defined(ENUM_BITFIELDS)
332 # define ENUM_BITFIELD(bits) :bits
334 # define ENUM_BITFIELD(bits)
337 /* Handle gettext and locales. */
342 # define setlocale(category, locale)
347 #define _(msgid) gettext (msgid)
348 #define N_(msgid) gettext_noop (msgid)
349 #define S_(msg1,msg2,num) ngettext (msg1,msg2,num)
351 /* Handle other OSs. */
353 #if defined(__MSDOS__) || defined(WINDOWS32)
354 # define PATH_SEPARATOR_CHAR ';'
357 # define PATH_SEPARATOR_CHAR ','
359 # define PATH_SEPARATOR_CHAR ':'
366 # define pipe(p) _pipe(p, 512, O_BINARY)
367 # define kill(pid,sig) w32_kill(pid,sig)
369 extern void sync_Path_environment(void);
370 extern int kill(int pid
, int sig
);
371 extern int safe_stat(char *file
, struct stat
*sb
);
372 extern char *end_of_token_w32(char *s
, char stopchar
);
373 extern int find_and_set_default_shell(char *token
);
375 /* indicates whether or not we have Bourne shell */
376 extern int no_default_sh_exe
;
378 /* is default_shell unixy? */
379 extern int unixy_shell
;
380 #endif /* WINDOWS32 */
385 unsigned long lineno
;
387 #define NILF ((struct floc *)0)
389 #define STRING_SIZE_TUPLE(_s) (_s), (sizeof (_s)-1)
392 /* Fancy processing for variadic functions in both ANSI and pre-ANSI
394 #if defined __STDC__ && __STDC__
395 extern void message (int prefix
, const char *fmt
, ...)
396 __attribute__ ((__format__ (__printf__
, 2, 3)));
397 extern void error (const struct floc
*flocp
, const char *fmt
, ...)
398 __attribute__ ((__format__ (__printf__
, 2, 3)));
399 extern void fatal (const struct floc
*flocp
, const char *fmt
, ...)
400 __attribute__ ((noreturn
, __format__ (__printf__
, 2, 3)));
402 extern void message ();
403 extern void error ();
404 extern void fatal ();
407 extern void die
PARAMS ((int)) __attribute__ ((noreturn
));
408 extern void log_working_directory
PARAMS ((int));
409 extern void pfatal_with_name
PARAMS ((const char *)) __attribute__ ((noreturn
));
410 extern void perror_with_name
PARAMS ((const char *, const char *));
411 extern char *savestring
PARAMS ((const char *, unsigned int));
412 extern char *concat
PARAMS ((const char *, const char *, const char *));
413 extern char *xmalloc
PARAMS ((unsigned int));
414 extern char *xrealloc
PARAMS ((char *, unsigned int));
415 extern char *xstrdup
PARAMS ((const char *));
416 extern char *find_next_token
PARAMS ((char **, unsigned int *));
417 extern char *next_token
PARAMS ((const char *));
418 extern char *end_of_token
PARAMS ((char *));
419 extern void collapse_continuations
PARAMS ((char *));
420 extern void remove_comments
PARAMS((char *));
421 extern char *sindex
PARAMS ((const char *, unsigned int, \
422 const char *, unsigned int));
423 extern char *lindex
PARAMS ((const char *, const char *, int));
424 extern int alpha_compare
PARAMS ((const void *, const void *));
425 extern void print_spaces
PARAMS ((unsigned int));
426 extern char *find_char_unquote
PARAMS ((char *, int, int, int));
427 extern char *find_percent
PARAMS ((char *));
428 extern FILE *open_tmpfile
PARAMS ((char **, const char *));
431 extern int ar_name
PARAMS ((char *));
432 extern void ar_parse_name
PARAMS ((char *, char **, char **));
433 extern int ar_touch
PARAMS ((char *));
434 extern time_t ar_member_date
PARAMS ((char *));
437 extern int dir_file_exists_p
PARAMS ((char *, char *));
438 extern int file_exists_p
PARAMS ((char *));
439 extern int file_impossible_p
PARAMS ((char *));
440 extern void file_impossible
PARAMS ((char *));
441 extern char *dir_name
PARAMS ((char *));
442 extern void hash_init_directories
PARAMS ((void));
444 extern void define_default_variables
PARAMS ((void));
445 extern void set_default_suffixes
PARAMS ((void));
446 extern void install_default_suffix_rules
PARAMS ((void));
447 extern void install_default_implicit_rules
PARAMS ((void));
449 extern void build_vpath_lists
PARAMS ((void));
450 extern void construct_vpath_list
PARAMS ((char *pattern
, char *dirpath
));
451 extern int vpath_search
PARAMS ((char **file
, FILE_TIMESTAMP
*mtime_ptr
));
452 extern int gpath_search
PARAMS ((char *file
, int len
));
454 extern void construct_include_path
PARAMS ((char **arg_dirs
));
456 extern void user_access
PARAMS ((void));
457 extern void make_access
PARAMS ((void));
458 extern void child_access
PARAMS ((void));
464 /* We omit these declarations on non-POSIX systems which define _POSIX_VERSION,
465 because such systems often declare them in header files anyway. */
467 #if !defined (__GNU_LIBRARY__) && !defined (POSIX) && !defined (_POSIX_VERSION) && !defined(WINDOWS32)
469 extern long int atol ();
471 extern long int lseek ();
474 #endif /* Not GNU C library or POSIX. */
477 # if !defined(VMS) && !defined(__DECC)
478 extern char *getcwd ();
481 extern char *getwd ();
482 # define getcwd(buf, len) getwd (buf)
485 extern const struct floc
*reading_file
;
487 extern char **environ
;
489 extern int just_print_flag
, silent_flag
, ignore_errors_flag
, keep_going_flag
;
490 extern int print_data_base_flag
, question_flag
, touch_flag
, always_make_flag
;
491 extern int env_overrides
, no_builtin_rules_flag
, no_builtin_variables_flag
;
492 extern int print_version_flag
, print_directory_flag
;
493 extern int warn_undefined_variables_flag
, posix_pedantic
, not_parallel
;
494 extern int clock_skew_detected
;
496 /* can we run commands via 'sh -c xxx' or must we use batch files? */
497 extern int batch_mode_shell
;
499 extern unsigned int job_slots
;
500 extern int job_fds
[2];
503 extern double max_load_average
;
505 extern int max_load_average
;
508 extern char *program
;
509 extern char *starting_directory
;
510 extern unsigned int makelevel
;
511 extern char *version_string
, *remote_description
;
513 extern unsigned int commands_started
;
515 extern int handling_fatal_signal
;
519 #define MIN(_a,_b) ((_a)<(_b)?(_a):(_b))
522 #define MAX(_a,_b) ((_a)>(_b)?(_a):(_b))
526 # define MAKE_SUCCESS 1
527 # define MAKE_TROUBLE 2
528 # define MAKE_FAILURE 3
530 # define MAKE_SUCCESS 0
531 # define MAKE_TROUBLE 1
532 # define MAKE_FAILURE 2
535 /* Set up heap debugging library dmalloc. */
537 #ifdef HAVE_DMALLOC_H
542 /* If we have broken SA_RESTART support, then wrap stat() and readdir() with
543 versions that handle EINTR. Note that there are still plenty of system
544 calls that can fail with EINTR but this, reportedly, gets the vast
545 majority of failure cases. If you still experience failures you'll need
546 to either get a system where SA_RESTART works, or you need to avoid -j. */
548 #ifdef HAVE_BROKEN_RESTART
550 #define stat(_f,_b) atomic_stat ((_f), (_b))
551 #define readdir(_d) atomic_readdir (_d)