1 /* Miscellaneous global declarations and portability cruft for GNU Make.
2 Copyright (C) 1988-2013 Free Software Foundation, Inc.
3 This file is part of GNU Make.
5 GNU Make is free software; you can redistribute it and/or modify it under the
6 terms of the GNU General Public License as published by the Free Software
7 Foundation; either version 3 of the License, or (at your option) any later
10 GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
12 A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License along with
15 this program. If not, see <http://www.gnu.org/licenses/>. */
17 /* We use <config.h> instead of "config.h" so that a compilation
18 using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
19 (which it would do because makeint.h was found in $srcdir). */
22 #define HAVE_CONFIG_H 1
24 /* Specify we want GNU source code. This must be defined before any
25 system headers are included. */
29 /* AIX requires this to be the first thing in the file. */
36 # if !defined(__GNUC__) && !defined(WINDOWS32)
37 # ifndef alloca /* predefined by HP cc +Olibcalls */
44 /* Disable assert() unless we're a maintainer.
45 Some asserts are compute-intensive. */
46 #ifndef MAKE_MAINTAINER_MODE
50 /* Include the externally-visible content.
51 Be sure to use the local one, and not one installed on the system.
52 Define GMK_BUILDING_MAKE for proper selection of dllexport/dllimport
53 declarations for MS-Windows. */
55 # define GMK_BUILDING_MAKE
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>
76 #ifdef HAVE_SYS_TIMEB_H
77 /* SCO 3.2 "devsys 4.2" has a prototype for 'ftime' in <time.h> that bombs
78 unless <sys/timeb.h> has been included first. */
79 # include <sys/timeb.h>
81 #if TIME_WITH_SYS_TIME
82 # include <sys/time.h>
86 # include <sys/time.h>
99 # define isblank(c) ((c) == ' ' || (c) == '\t')
104 /* Ultrix's unistd.h always defines _POSIX_VERSION, but you only get
105 POSIX.1 behavior with 'cc -YPOSIX', which predefines POSIX itself! */
106 # if defined (_POSIX_VERSION) && !defined (ultrix) && !defined (VMS)
111 /* Some systems define _POSIX_VERSION but are not really POSIX.1. */
112 #if (defined (butterfly) || defined (__arm) || (defined (__mips) && defined (_SYSTYPE_SVR3)) || (defined (sequent) && defined (i386)))
116 #if !defined (POSIX) && defined (_AIX) && defined (_POSIX_SOURCE)
121 # define RETSIGTYPE void
125 # define sigmask(sig) (1 << ((sig) - 1))
128 #ifndef HAVE_SA_RESTART
129 # define SA_RESTART 0
135 #ifdef HAVE_SYS_PARAM_H
136 # include <sys/param.h>
141 # define PATH_MAX MAXPATHLEN
145 # define MAXPATHLEN 1024
149 # define GET_PATH_MAX PATH_MAX
150 # define PATH_VAR(var) char var[PATH_MAX]
152 # define NEED_GET_PATH_MAX 1
153 # define GET_PATH_MAX (get_path_max ())
154 # define PATH_VAR(var) char *var = alloca (GET_PATH_MAX)
155 unsigned int get_path_max (void);
163 # define USHRT_MAX 65535
166 /* Nonzero if the integer type T is signed.
167 Use <= to avoid GCC warnings about always-false expressions. */
168 #define INTEGER_TYPE_SIGNED(t) ((t) -1 <= 0)
170 /* The minimum and maximum values for the integer type T.
171 Use ~ (t) 0, not -1, for portability to 1's complement hosts. */
172 #define INTEGER_TYPE_MINIMUM(t) \
173 (! INTEGER_TYPE_SIGNED (t) ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))
174 #define INTEGER_TYPE_MAXIMUM(t) (~ (t) 0 - INTEGER_TYPE_MINIMUM (t))
176 /* The maximum number of digits needed to represent the largest integer. */
177 #define INTEGER_LENGTH sizeof("18446744073709551616")
180 # define CHAR_MAX INTEGER_TYPE_MAXIMUM (char)
183 #ifdef STAT_MACROS_BROKEN
190 #endif /* STAT_MACROS_BROKEN. */
193 # define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
196 # define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
202 # include <unixlib.h>
205 /* Needed to use alloca on VMS. */
206 # include <builtins.h>
209 #ifndef __attribute__
210 /* This feature is available in gcc versions 2.5 and later. */
211 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
212 # define __attribute__(x)
214 /* The __-protected variants of 'format' and 'printf' attributes
215 are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
216 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
217 # define __format__ format
218 # define __printf__ printf
221 #define UNUSED __attribute__ ((unused))
223 #if defined (STDC_HEADERS) || defined (__GNU_LIBRARY__)
226 # define ANSI_STRING 1
227 #else /* No standard headers. */
228 # ifdef HAVE_STRING_H
230 # define ANSI_STRING 1
232 # include <strings.h>
234 # ifdef HAVE_MEMORY_H
237 # ifdef HAVE_STDLIB_H
241 void *realloc (void *, int);
244 void abort (void) __attribute__ ((noreturn));
245 void exit (int) __attribute__ ((noreturn));
246 # endif /* HAVE_STDLIB_H. */
248 #endif /* Standard headers. */
250 /* These should be in stdlib.h. Make sure we have them. */
252 # define EXIT_SUCCESS 0
255 # define EXIT_FAILURE 1
260 /* SCO Xenix has a buggy macro definition in <string.h>. */
263 char *strerror (int errnum);
266 #endif /* !ANSI_STRING. */
270 # include <inttypes.h>
275 #define FILE_TIMESTAMP uintmax_t
277 #if !defined(HAVE_STRSIGNAL)
278 char *strsignal (int signum);
281 /* ISDIGIT offers the following features:
282 - Its arg may be any int or unsigned int; it need not be an unsigned char.
283 - It's guaranteed to evaluate its argument exactly once.
284 NOTE! Make relies on this behavior, don't change it!
285 - It's typically faster.
286 POSIX 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
287 only '0' through '9' are digits. Prefer ISDIGIT to isdigit() unless
288 it's important to use the locale's definition of 'digit' even when the
289 host does not conform to POSIX. */
290 #define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
292 /* Test if two strings are equal. Is this worthwhile? Should be profiled. */
293 #define streq(a, b) \
295 (*(a) == *(b) && (*(a) == '\0' || !strcmp ((a) + 1, (b) + 1))))
297 /* Test if two strings are equal, but match case-insensitively on systems
298 which have case-insensitive filesystems. Should only be used for
300 #ifdef HAVE_CASE_INSENSITIVE_FS
301 # define patheq(a, b) \
303 || (tolower((unsigned char)*(a)) == tolower((unsigned char)*(b)) \
304 && (*(a) == '\0' || !strcasecmp ((a) + 1, (b) + 1))))
306 # define patheq(a, b) streq(a, b)
309 #define strneq(a, b, l) (strncmp ((a), (b), (l)) == 0)
311 #if defined(__GNUC__) || defined(ENUM_BITFIELDS)
312 # define ENUM_BITFIELD(bits) :bits
314 # define ENUM_BITFIELD(bits)
317 /* Handle gettext and locales. */
322 # define setlocale(category, locale)
327 #define _(msgid) gettext (msgid)
328 #define N_(msgid) gettext_noop (msgid)
329 #define S_(msg1,msg2,num) ngettext (msg1,msg2,num)
332 To overcome an issue parsing paths in a DOS/Windows environment when
333 built in a unix based environment, override the PATH_SEPARATOR_CHAR
334 definition unless being built for Cygwin. */
335 #if defined(HAVE_DOS_PATHS) && !defined(__CYGWIN__)
336 # undef PATH_SEPARATOR_CHAR
337 # define PATH_SEPARATOR_CHAR ';'
338 #elif !defined(PATH_SEPARATOR_CHAR)
340 # define PATH_SEPARATOR_CHAR ','
342 # define PATH_SEPARATOR_CHAR ':'
346 /* This is needed for getcwd() and chdir(), on some W32 systems. */
347 #if defined(HAVE_DIRECT_H)
354 # define pipe(_p) _pipe((_p), 512, O_BINARY)
355 # define kill(_pid,_sig) w32_kill((_pid),(_sig))
356 /* MSVC doesn't have ftruncate. */
358 # define ftruncate(_fd,_len) _chsize(_fd,_len)
360 /* MinGW64 doesn't have _S_ISDIR. */
362 # define _S_ISDIR(m) S_ISDIR(m)
365 void sync_Path_environment (void);
366 int w32_kill (pid_t pid, int sig);
367 int find_and_set_default_shell (const char *token);
369 /* indicates whether or not we have Bourne shell */
370 extern int no_default_sh_exe;
372 /* is default_shell unixy? */
373 extern int unixy_shell;
375 /* We don't have a preferred fixed value for LOCALEDIR. */
377 # define LOCALEDIR NULL
380 /* Include only the minimal stuff from windows.h. */
381 #define WIN32_LEAN_AND_MEAN
382 #endif /* WINDOWS32 */
384 #define ANY_SET(_v,_m) (((_v)&(_m)) != 0)
385 #define NONE_SET(_v,_m) (! ANY_SET ((_v),(_m)))
387 #define MAP_NUL 0x0001
388 #define MAP_BLANK 0x0002
389 #define MAP_SPACE 0x0004
390 #define MAP_COMMENT 0x0008
391 #define MAP_SEMI 0x0010
392 #define MAP_EQUALS 0x0020
393 #define MAP_COLON 0x0040
394 #define MAP_PERCENT 0x0080
395 #define MAP_PIPE 0x0100
396 #define MAP_DOT 0x0200
397 #define MAP_COMMA 0x0400
399 /* These are the valid characters for a user-defined function. */
400 #define MAP_USERFUNC 0x2000
401 /* This means not only a '$', but skip the variable reference. */
402 #define MAP_VARIABLE 0x4000
403 /* The set of characters which are path separators is OS-specific. */
404 #define MAP_PATHSEP 0x8000
407 # define MAP_VMSCOMMA MAP_COMMA
409 # define MAP_VMSCOMMA 0x0000
412 #define STOP_SET(_v,_m) ANY_SET (stopchar_map[(int)(_v)],(_m))
414 #if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT)
415 # define SET_STACK_SIZE
417 #ifdef SET_STACK_SIZE
418 # include <sys/resource.h>
419 extern struct rlimit stack_limit;
422 #define NILF ((gmk_floc *)0)
424 #define CSTRLEN(_s) (sizeof (_s)-1)
425 #define STRING_SIZE_TUPLE(_s) (_s), CSTRLEN(_s)
428 const char *concat (unsigned int, ...);
429 void message (int prefix, const char *fmt, ...)
430 __attribute__ ((__format__ (__printf__, 2, 3)));
431 void error (const gmk_floc *flocp, const char *fmt, ...)
432 __attribute__ ((__format__ (__printf__, 2, 3)));
433 void fatal (const gmk_floc *flocp, const char *fmt, ...)
434 __attribute__ ((noreturn, __format__ (__printf__, 2, 3)));
436 void die (int) __attribute__ ((noreturn));
437 void pfatal_with_name (const char *) __attribute__ ((noreturn));
438 void perror_with_name (const char *, const char *);
439 #define xstrlen(_s) ((_s)==NULL ? 0 : strlen (_s))
440 void *xmalloc (unsigned int);
441 void *xcalloc (unsigned int);
442 void *xrealloc (void *, unsigned int);
443 char *xstrdup (const char *);
444 char *xstrndup (const char *, unsigned int);
445 char *find_next_token (const char **, unsigned int *);
446 char *next_token (const char *);
447 char *end_of_token (const char *);
448 void collapse_continuations (char *);
449 char *lindex (const char *, const char *, int);
450 int alpha_compare (const void *, const void *);
451 void print_spaces (unsigned int);
452 char *find_percent (char *);
453 const char *find_percent_cached (const char **);
456 int ar_name (const char *);
457 void ar_parse_name (const char *, char **, char **);
458 int ar_touch (const char *);
459 time_t ar_member_date (const char *);
461 typedef long int (*ar_member_func_t) (int desc, const char *mem, int truncated,
462 long int hdrpos, long int datapos,
463 long int size, long int date, int uid,
464 int gid, int mode, const void *arg);
466 long int ar_scan (const char *archive, ar_member_func_t function, const void *arg);
467 int ar_name_equal (const char *name, const char *mem, int truncated);
469 int ar_member_touch (const char *arname, const char *memname);
473 int dir_file_exists_p (const char *, const char *);
474 int file_exists_p (const char *);
475 int file_impossible_p (const char *);
476 void file_impossible (const char *);
477 const char *dir_name (const char *);
478 void hash_init_directories (void);
480 void define_default_variables (void);
481 void undefine_default_variables (void);
482 void set_default_suffixes (void);
483 void install_default_suffix_rules (void);
484 void install_default_implicit_rules (void);
486 void build_vpath_lists (void);
487 void construct_vpath_list (char *pattern, char *dirpath);
488 const char *vpath_search (const char *file, FILE_TIMESTAMP *mtime_ptr,
489 unsigned int* vpath_index, unsigned int* path_index);
490 int gpath_search (const char *file, unsigned int len);
492 void construct_include_path (const char **arg_dirs);
494 void user_access (void);
495 void make_access (void);
496 void child_access (void);
498 char *strip_whitespace (const char **begpp, const char **endpp);
501 void strcache_init (void);
502 void strcache_print_stats (const char *prefix);
503 int strcache_iscached (const char *str);
504 const char *strcache_add (const char *str);
505 const char *strcache_add_len (const char *str, unsigned int len);
506 int strcache_setbufsize (unsigned int size);
510 int guile_gmake_setup (const gmk_floc *flocp);
513 /* Loadable object support. Sets to the strcached name of the loaded file. */
514 typedef int (*load_func_t)(const gmk_floc *flocp);
515 int load_file (const gmk_floc *flocp, const char **filename, int noerror);
516 void unload_file (const char *name);
518 /* We omit these declarations on non-POSIX systems which define _POSIX_VERSION,
519 because such systems often declare them in header files anyway. */
521 #if !defined (__GNU_LIBRARY__) && !defined (POSIX) && !defined (_POSIX_VERSION) && !defined(WINDOWS32)
528 #endif /* Not GNU C library or POSIX. */
531 # if !defined(VMS) && !defined(__DECC)
536 # define getcwd(buf, len) getwd (buf)
541 # define strcasecmp stricmp
543 # define strcasecmp strcmpi
545 /* Create our own, in misc.c */
546 int strcasecmp (const char *s1, const char *s2);
550 #if !HAVE_STRNCASECMP
552 # define strncasecmp strnicmp
554 # define strncasecmp strncmpi
556 /* Create our own, in misc.c */
557 int strncasecmp (const char *s1, const char *s2, int n);
561 #define OUTPUT_SYNC_NONE 0
562 #define OUTPUT_SYNC_LINE 1
563 #define OUTPUT_SYNC_TARGET 2
564 #define OUTPUT_SYNC_RECURSE 3
566 extern const gmk_floc *reading_file;
567 extern const gmk_floc **expanding_var;
569 extern char **environ;
571 extern unsigned short stopchar_map[];
573 extern int just_print_flag, silent_flag, ignore_errors_flag, keep_going_flag;
574 extern int print_data_base_flag, question_flag, touch_flag, always_make_flag;
575 extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag;
576 extern int print_version_flag, print_directory_flag, check_symlink_flag;
577 extern int warn_undefined_variables_flag, trace_flag, posix_pedantic;
578 extern int not_parallel, second_expansion, clock_skew_detected;
579 extern int rebuilding_makefiles, one_shell, output_sync, verify_flag;
581 /* can we run commands via 'sh -c xxx' or must we use batch files? */
582 extern int batch_mode_shell;
584 /* Resetting the command script introduction prefix character. */
585 #define RECIPEPREFIX_NAME ".RECIPEPREFIX"
586 #define RECIPEPREFIX_DEFAULT '\t'
587 extern char cmd_prefix;
589 extern unsigned int job_slots;
590 extern int job_fds[2];
593 extern double max_load_average;
595 extern int max_load_average;
598 extern char *program;
599 extern char *starting_directory;
600 extern unsigned int makelevel;
601 extern char *version_string, *remote_description, *make_host;
603 extern unsigned int commands_started;
605 extern int handling_fatal_signal;
609 #define MIN(_a,_b) ((_a)<(_b)?(_a):(_b))
612 #define MAX(_a,_b) ((_a)>(_b)?(_a):(_b))
616 # define MAKE_SUCCESS 1
617 # define MAKE_TROUBLE 2
618 # define MAKE_FAILURE 3
620 # define MAKE_SUCCESS 0
621 # define MAKE_TROUBLE 1
622 # define MAKE_FAILURE 2
625 /* Set up heap debugging library dmalloc. */
627 #ifdef HAVE_DMALLOC_H
631 #ifndef initialize_main
633 # define initialize_main(pargc, pargv) \
634 { _wildcard(pargc, pargv); _response(pargc, pargv); }
636 # define initialize_main(pargc, pargv)
642 # define chdir _chdir2
645 # define getcwd _getcwd2
648 /* NO_CHDIR2 causes make not to use _chdir2() and _getcwd2() instead of
649 chdir() and getcwd(). This avoids some error messages for the
650 make testsuite but restricts the drive letter support. */
652 # warning NO_CHDIR2: usage of drive letters restricted
658 #ifndef initialize_main
659 # define initialize_main(pargc, pargv)
663 /* Some systems (like Solaris, PTX, etc.) do not support the SA_RESTART flag
664 properly according to POSIX. So, we try to wrap common system calls with
665 checks for EINTR. Note that there are still plenty of system calls that
666 can fail with EINTR but this, reportedly, gets the vast majority of
667 failure cases. If you still experience failures you'll need to either get
668 a system where SA_RESTART works, or you need to avoid -j. */
670 #define EINTRLOOP(_v,_c) while (((_v)=_c)==-1 && errno==EINTR)
672 /* While system calls that return integers are pretty consistent about
673 returning -1 on failure and setting errno in that case, functions that
674 return pointers are not always so well behaved. Sometimes they return
675 NULL for expected behavior: one good example is readdir() which returns
676 NULL at the end of the directory--and _doesn't_ reset errno. So, we have
677 to do it ourselves here. */
679 #define ENULLLOOP(_v,_c) do { errno = 0; (_v) = _c; } \
680 while((_v)==0 && errno==EINTR)