Tagging 0.1.5-p2 (again)
[kbuild-mirror.git] / src / kmk / make.h
blob38b511fdb12c73db3cfefb1a0c820ba491412fe9
1 /* Miscellaneous global declarations and portability cruft for GNU Make.
2 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
4 Foundation, Inc.
5 This file is part of GNU Make.
7 GNU Make is free software; you can redistribute it and/or modify it under the
8 terms of the GNU General Public License as published by the Free Software
9 Foundation; either version 3 of the License, or (at your option) any later
10 version.
12 GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License along with
17 this program. If not, see <http://www.gnu.org/licenses/>. */
19 /* We use <config.h> instead of "config.h" so that a compilation
20 using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
21 (which it would do because make.h was found in $srcdir). */
22 #include <config.h>
23 #undef HAVE_CONFIG_H
24 #define HAVE_CONFIG_H 1
26 /* AIX requires this to be the first thing in the file. */
27 #ifndef __GNUC__
28 # if HAVE_ALLOCA_H
29 # include <alloca.h>
30 # else
31 # ifdef _AIX
32 #pragma alloca
33 # else
34 # ifndef alloca /* predefined by HP cc +Olibcalls */
35 char *alloca ();
36 # endif
37 # endif
38 # endif
39 #elif defined(__sun__) && defined (HAVE_ALLOCA_H) /* bird: kill warnings. */
40 # include <alloca.h>
41 #endif
44 /* Specify we want GNU source code. This must be defined before any
45 system headers are included. */
47 #define _GNU_SOURCE 1
50 #ifdef CRAY
51 /* This must happen before #include <signal.h> so
52 that the declaration therein is changed. */
53 # define signal bsdsignal
54 #endif
56 /* If we're compiling for the dmalloc debugger, turn off string inlining. */
57 #if defined(HAVE_DMALLOC_H) && defined(__GNUC__)
58 # define __NO_STRING_INLINES
59 #endif
61 #include <sys/types.h>
62 #include <sys/stat.h>
63 #include <signal.h>
64 #include <stdio.h>
65 #include <ctype.h>
66 #ifdef HAVE_SYS_TIMEB_H
67 /* SCO 3.2 "devsys 4.2" has a prototype for `ftime' in <time.h> that bombs
68 unless <sys/timeb.h> has been included first. Does every system have a
69 <sys/timeb.h>? If any does not, configure should check for it. */
70 # include <sys/timeb.h>
71 #endif
73 #if TIME_WITH_SYS_TIME
74 # include <sys/time.h>
75 # include <time.h>
76 #else
77 # if HAVE_SYS_TIME_H
78 # include <sys/time.h>
79 # else
80 # include <time.h>
81 # endif
82 #endif
84 #include <errno.h>
86 #ifndef errno
87 extern int errno;
88 #endif
90 #ifndef isblank
91 # define isblank(c) ((c) == ' ' || (c) == '\t')
92 #endif
94 #ifdef HAVE_UNISTD_H
95 # include <unistd.h>
96 /* Ultrix's unistd.h always defines _POSIX_VERSION, but you only get
97 POSIX.1 behavior with `cc -YPOSIX', which predefines POSIX itself! */
98 # if defined (_POSIX_VERSION) && !defined (ultrix) && !defined (VMS)
99 # define POSIX 1
100 # endif
101 #endif
103 /* Some systems define _POSIX_VERSION but are not really POSIX.1. */
104 #if (defined (butterfly) || defined (__arm) || (defined (__mips) && defined (_SYSTYPE_SVR3)) || (defined (sequent) && defined (i386)))
105 # undef POSIX
106 #endif
108 #if !defined (POSIX) && defined (_AIX) && defined (_POSIX_SOURCE)
109 # define POSIX 1
110 #endif
112 #ifndef RETSIGTYPE
113 # define RETSIGTYPE void
114 #endif
116 #ifndef sigmask
117 # define sigmask(sig) (1 << ((sig) - 1))
118 #endif
120 #ifndef HAVE_SA_RESTART
121 # define SA_RESTART 0
122 #endif
124 #ifdef HAVE_LIMITS_H
125 # include <limits.h>
126 #endif
127 #ifdef HAVE_SYS_PARAM_H
128 # include <sys/param.h>
129 #endif
131 #ifndef PATH_MAX
132 # ifndef POSIX
133 # define PATH_MAX MAXPATHLEN
134 # endif
135 #endif
136 #ifndef MAXPATHLEN
137 # define MAXPATHLEN 1024
138 #endif
140 #ifdef PATH_MAX
141 # define GET_PATH_MAX PATH_MAX
142 # define PATH_VAR(var) char var[PATH_MAX]
143 #else
144 # define NEED_GET_PATH_MAX 1
145 # define GET_PATH_MAX (get_path_max ())
146 # define PATH_VAR(var) char *var = alloca (GET_PATH_MAX)
147 unsigned int get_path_max (void);
148 #endif
150 #if defined (KMK) || defined (CONFIG_WITH_VALUE_LENGTH) \
151 || defined (CONFIG_WITH_ALLOC_CACHES) \
152 || defined (CONFIG_WITH_STRCACHE2)
153 # ifdef _MSC_VER
154 # define MY_INLINE _inline static
155 # elif defined(__GNUC__)
156 # define MY_INLINE static __inline__
157 # else
158 # define MY_INLINE static
159 # endif
161 # ifdef __GNUC__
162 # define MY_PREDICT_TRUE(expr) __builtin_expect(!!(expr), 1)
163 # define MY_PREDICT_FALSE(expr) __builtin_expect(!!(expr), 0)
164 # else
165 # define MY_PREDICT_TRUE(expr) (expr)
166 # define MY_PREDICT_FALSE(expr) (expr)
167 # endif
168 #endif
170 #if defined (KMK) || defined (CONFIG_WITH_VALUE_LENGTH) \
171 || defined (CONFIG_WITH_STRCACHE2)
172 # ifdef _MSC_VER
173 # define MY_DBGBREAK __debugbreak()
174 # elif defined(__GNUC__)
175 # if defined(__i386__) || defined(__x86_64__)
176 # define MY_DBGBREAK __asm__ __volatile__ ("int3")
177 # else
178 # define MY_DBGBREAK assert(0)
179 # endif
180 # else
181 # define MY_DBGBREAK assert(0)
182 # endif
183 # ifndef NDEBUG
184 # define MY_ASSERT_MSG(expr, printfargs) \
185 do { if (!(expr)) { printf printfargs; MY_DBGBREAK; } } while (0)
186 # else
187 # define MY_ASSERT_MSG(expr, printfargs) do { } while (0)
188 # endif
189 #endif
191 #ifdef KMK
192 # include <ctype.h>
193 # if 1 /* See if this speeds things up (Windows is doing this anyway, so,
194 we might as well try be consistent in speed + features). */
195 # if 1
196 # define MY_IS_BLANK(ch) ((ch) == ' ' || (ch) == '\t')
197 # define MY_IS_BLANK_OR_EOS(ch) ((ch) == ' ' || (ch) == '\t' || (ch) == '\0')
198 # else
199 # define MY_IS_BLANK(ch) (((ch) == ' ') | ((ch) == '\t'))
200 # define MY_IS_BLANK_OR_EOS(ch) (((ch) == ' ') | ((ch) == '\t') | ((ch) == '\0'))
201 # endif
202 # undef isblank
203 # define isblank(ch) MY_IS_BLANK(ch)
204 # else
205 # define MY_IS_BLANK(ch) isblank ((unsigned char)(ch))
206 # define MY_IS_BLANK_OR_EOS(ch) (isblank ((unsigned char)(ch)) || (ch) == '\0')
207 # endif
208 #endif
210 #ifdef CONFIG_WITH_MAKE_STATS
211 extern long make_stats_allocations;
212 extern long make_stats_reallocations;
213 extern unsigned long make_stats_allocated;
214 extern unsigned long make_stats_ht_lookups;
215 extern unsigned long make_stats_ht_collisions;
217 # ifdef __APPLE__
218 # include <malloc/malloc.h>
219 # define SIZE_OF_HEAP_BLOCK(ptr) malloc_good_size(ptr)
221 # elif defined(__linux__) /* glibc */
222 # include <malloc.h>
223 # define SIZE_OF_HEAP_BLOCK(ptr) malloc_usable_size(ptr)
225 # elif defined(_MSC_VER) || defined(__OS2__)
226 # define SIZE_OF_HEAP_BLOCK(ptr) _msize(ptr)
228 # else
229 # include <stdlib.h>
230 # define SIZE_OF_HEAP_BLOCK(ptr) 0
231 #endif
233 # define MAKE_STATS_3(expr) do { expr; } while (0)
234 # define MAKE_STATS_2(expr) do { expr; } while (0)
235 # define MAKE_STATS(expr) do { expr; } while (0)
236 #else
237 # define MAKE_STATS_3(expr) do { } while (0)
238 # define MAKE_STATS_2(expr) do { } while (0)
239 # define MAKE_STATS(expr) do { } while (0)
240 #endif
243 #ifndef CHAR_BIT
244 # define CHAR_BIT 8
245 #endif
247 /* Nonzero if the integer type T is signed. */
248 #define INTEGER_TYPE_SIGNED(t) ((t) -1 < 0)
250 /* The minimum and maximum values for the integer type T.
251 Use ~ (t) 0, not -1, for portability to 1's complement hosts. */
252 #define INTEGER_TYPE_MINIMUM(t) \
253 (! INTEGER_TYPE_SIGNED (t) ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))
254 #define INTEGER_TYPE_MAXIMUM(t) (~ (t) 0 - INTEGER_TYPE_MINIMUM (t))
256 #ifndef CHAR_MAX
257 # define CHAR_MAX INTEGER_TYPE_MAXIMUM (char)
258 #endif
260 #ifdef STAT_MACROS_BROKEN
261 # ifdef S_ISREG
262 # undef S_ISREG
263 # endif
264 # ifdef S_ISDIR
265 # undef S_ISDIR
266 # endif
267 #endif /* STAT_MACROS_BROKEN. */
269 #ifndef S_ISREG
270 # define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
271 #endif
272 #ifndef S_ISDIR
273 # define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR)
274 #endif
276 #ifdef VMS
277 # include <types.h>
278 # include <unixlib.h>
279 # include <unixio.h>
280 # include <perror.h>
281 /* Needed to use alloca on VMS. */
282 # include <builtins.h>
283 #endif
285 #ifndef __attribute__
286 /* This feature is available in gcc versions 2.5 and later. */
287 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
288 # define __attribute__(x)
289 # endif
290 /* The __-protected variants of `format' and `printf' attributes
291 are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
292 # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
293 # define __format__ format
294 # define __printf__ printf
295 # endif
296 #endif
297 #define UNUSED __attribute__ ((unused))
299 #if defined (STDC_HEADERS) || defined (__GNU_LIBRARY__)
300 # include <stdlib.h>
301 # include <string.h>
302 # define ANSI_STRING 1
303 #else /* No standard headers. */
304 # ifdef HAVE_STRING_H
305 # include <string.h>
306 # define ANSI_STRING 1
307 # else
308 # include <strings.h>
309 # endif
310 # ifdef HAVE_MEMORY_H
311 # include <memory.h>
312 # endif
313 # ifdef HAVE_STDLIB_H
314 # include <stdlib.h>
315 # else
316 void *malloc (int);
317 void *realloc (void *, int);
318 void free (void *);
320 void abort (void) __attribute__ ((noreturn));
321 void exit (int) __attribute__ ((noreturn));
322 # endif /* HAVE_STDLIB_H. */
324 #endif /* Standard headers. */
326 /* These should be in stdlib.h. Make sure we have them. */
327 #ifndef EXIT_SUCCESS
328 # define EXIT_SUCCESS 0
329 #endif
330 #ifndef EXIT_FAILURE
331 # define EXIT_FAILURE 1
332 #endif
334 #ifndef ANSI_STRING
336 /* SCO Xenix has a buggy macro definition in <string.h>. */
337 #undef strerror
338 #if !defined(__DECC)
339 char *strerror (int errnum);
340 #endif
342 #endif /* !ANSI_STRING. */
343 #undef ANSI_STRING
345 #if HAVE_INTTYPES_H
346 # include <inttypes.h>
347 #endif
348 #define FILE_TIMESTAMP uintmax_t
350 #if !defined(HAVE_STRSIGNAL)
351 char *strsignal (int signum);
352 #endif
354 /* ISDIGIT offers the following features:
355 - Its arg may be any int or unsigned int; it need not be an unsigned char.
356 - It's guaranteed to evaluate its argument exactly once.
357 NOTE! Make relies on this behavior, don't change it!
358 - It's typically faster.
359 POSIX 1003.2-1992 section 2.5.2.1 page 50 lines 1556-1558 says that
360 only '0' through '9' are digits. Prefer ISDIGIT to isdigit() unless
361 it's important to use the locale's definition of `digit' even when the
362 host does not conform to POSIX. */
363 #define ISDIGIT(c) ((unsigned) (c) - '0' <= 9)
365 #ifndef iAPX286
366 # define streq(a, b) \
367 ((a) == (b) || \
368 (*(a) == *(b) && (*(a) == '\0' || !strcmp ((a) + 1, (b) + 1))))
369 # ifdef HAVE_CASE_INSENSITIVE_FS
370 # define strieq(a, b) \
371 ((a) == (b) \
372 || (tolower((unsigned char)*(a)) == tolower((unsigned char)*(b)) \
373 && (*(a) == '\0' || !strcasecmp ((a) + 1, (b) + 1))))
374 # else
375 # define strieq(a, b) streq(a, b)
376 # endif
377 #else
378 /* Buggy compiler can't handle this. */
379 # define streq(a, b) (strcmp ((a), (b)) == 0)
380 # define strieq(a, b) (strcmp ((a), (b)) == 0)
381 #endif
382 #define strneq(a, b, l) (strncmp ((a), (b), (l)) == 0)
384 #if (defined(__GNUC__) || defined(ENUM_BITFIELDS)) && !defined(NO_ENUM_BITFIELDS)
385 # define ENUM_BITFIELD(bits) :bits
386 #else
387 # define ENUM_BITFIELD(bits)
388 #endif
390 /* Handle gettext and locales. */
392 #if HAVE_LOCALE_H
393 # include <locale.h>
394 #else
395 # define setlocale(category, locale)
396 #endif
398 #include <gettext.h>
400 #define _(msgid) gettext (msgid)
401 #define N_(msgid) gettext_noop (msgid)
402 #define S_(msg1,msg2,num) ngettext (msg1,msg2,num)
404 /* Handle other OSs. */
405 #ifndef PATH_SEPARATOR_CHAR
406 # if defined(HAVE_DOS_PATHS)
407 # define PATH_SEPARATOR_CHAR ';'
408 # elif defined(VMS)
409 # define PATH_SEPARATOR_CHAR ','
410 # else
411 # define PATH_SEPARATOR_CHAR ':'
412 # endif
413 #endif
415 /* This is needed for getcwd() and chdir(), on some W32 systems. */
416 #if defined(HAVE_DIRECT_H)
417 # include <direct.h>
418 #endif
420 #ifdef WINDOWS32
421 # include <fcntl.h>
422 # include <malloc.h>
423 # define pipe(_p) _pipe((_p), 512, O_BINARY)
424 # define kill(_pid,_sig) w32_kill((_pid),(_sig))
426 void sync_Path_environment (void);
427 int w32_kill (int pid, int sig);
428 char *end_of_token_w32 (const char *s, char stopchar);
429 int find_and_set_default_shell (const char *token);
431 /* indicates whether or not we have Bourne shell */
432 extern int no_default_sh_exe;
434 /* is default_shell unixy? */
435 extern int unixy_shell;
436 #endif /* WINDOWS32 */
438 struct floc
440 const char *filenm;
441 unsigned long lineno;
443 #define NILF ((struct floc *)0)
445 #define STRING_SIZE_TUPLE(_s) (_s), (sizeof (_s)-1)
447 #if defined (CONFIG_WITH_MATH) \
448 || defined (CONFIG_WITH_NANOTS) \
449 || defined (CONFIG_WITH_FILE_SIZE) \
450 || defined (CONFIG_WITH_PRINT_TIME_SWITCH) /* bird */
451 # ifdef _MSC_VER
452 typedef __int64 big_int;
453 # define BIG_INT_C(c) (c ## LL)
454 typedef unsigned __int64 big_uint;
455 # define BIG_UINT_C(c) (c ## ULL)
456 # else
457 # include <stdint.h>
458 typedef int64_t big_int;
459 # define BIG_INT_C(c) INT64_C(c)
460 typedef uint64_t big_uint;
461 # define BIG_UINT_C(c) UINT64_C(c)
462 # endif
463 #endif
466 /* We have to have stdarg.h or varargs.h AND v*printf or doprnt to use
467 variadic versions of these functions. */
469 #if HAVE_STDARG_H || HAVE_VARARGS_H
470 # if HAVE_VPRINTF || HAVE_DOPRNT
471 # define USE_VARIADIC 1
472 # endif
473 #endif
475 #if HAVE_ANSI_COMPILER && USE_VARIADIC && HAVE_STDARG_H
476 void message (int prefix, const char *fmt, ...)
477 __attribute__ ((__format__ (__printf__, 2, 3)));
478 void error (const struct floc *flocp, const char *fmt, ...)
479 __attribute__ ((__format__ (__printf__, 2, 3)));
480 void fatal (const struct floc *flocp, const char *fmt, ...)
481 __attribute__ ((noreturn, __format__ (__printf__, 2, 3)));
482 #else
483 void message ();
484 void error ();
485 void fatal ();
486 #endif
488 void die (int) __attribute__ ((noreturn));
489 void log_working_directory (int);
490 void pfatal_with_name (const char *) __attribute__ ((noreturn));
491 void perror_with_name (const char *, const char *);
492 char *savestring (const char *, unsigned int);
493 char *concat (const char *, const char *, const char *);
494 void *xmalloc (unsigned int);
495 void *xrealloc (void *, unsigned int);
496 char *xstrdup (const char *);
497 #ifdef CONFIG_WITH_PRINT_STATS_SWITCH
498 void print_heap_stats (void);
499 #endif
500 char *find_next_token (const char **, unsigned int *);
501 char *next_token (const char *);
502 char *end_of_token (const char *);
503 #ifndef CONFIG_WITH_VALUE_LENGTH
504 void collapse_continuations (char *);
505 #else
506 char *collapse_continuations (char *, unsigned int);
507 #endif
508 #ifdef CONFIG_WITH_OPTIMIZATION_HACKS /* memchr is usually compiler intrinsic, thus faster. */
509 # define lindex(s, limit, c) ((char *)memchr((s), (c), (limit) - (s)))
510 #else
511 char *lindex (const char *, const char *, int);
512 #endif
513 int alpha_compare (const void *, const void *);
514 void print_spaces (unsigned int);
515 char *find_percent (char *);
516 const char *find_percent_cached (const char **);
517 FILE *open_tmpfile (char **, const char *);
519 #ifndef NO_ARCHIVES
520 int ar_name (const char *);
521 void ar_parse_name (const char *, char **, char **);
522 int ar_touch (const char *);
523 time_t ar_member_date (const char *);
525 typedef long int (*ar_member_func_t) (int desc, const char *mem, int truncated,
526 long int hdrpos, long int datapos,
527 long int size, long int date, int uid,
528 int gid, int mode, const void *arg);
530 long int ar_scan (const char *archive, ar_member_func_t function, const void *arg);
531 int ar_name_equal (const char *name, const char *mem, int truncated);
532 #ifndef VMS
533 int ar_member_touch (const char *arname, const char *memname);
534 #endif
535 #endif
537 int dir_file_exists_p (const char *, const char *);
538 int file_exists_p (const char *);
539 int file_impossible_p (const char *);
540 void file_impossible (const char *);
541 const char *dir_name (const char *);
542 void hash_init_directories (void);
544 void define_default_variables (void);
545 void set_default_suffixes (void);
546 void install_default_suffix_rules (void);
547 void install_default_implicit_rules (void);
549 void build_vpath_lists (void);
550 void construct_vpath_list (char *pattern, char *dirpath);
551 const char *vpath_search (const char *file, FILE_TIMESTAMP *mtime_ptr);
552 int gpath_search (const char *file, unsigned int len);
554 void construct_include_path (const char **arg_dirs);
556 void user_access (void);
557 void make_access (void);
558 void child_access (void);
560 void close_stdout (void);
562 char *strip_whitespace (const char **begpp, const char **endpp);
564 #ifdef CONFIG_WITH_ALLOC_CACHES
565 /* alloccache (misc.c) */
567 struct alloccache_free_ent
569 struct alloccache_free_ent *next;
572 struct alloccache
574 char *free_start;
575 char *free_end;
576 struct alloccache_free_ent *free_head;
577 unsigned int size;
578 unsigned int total_count;
579 unsigned long alloc_count;
580 unsigned long free_count;
581 const char *name;
582 struct alloccache *next;
583 void *grow_arg;
584 void *(*grow_alloc)(void *grow_arg, unsigned int size);
587 void alloccache_init (struct alloccache *cache, unsigned int size, const char *name,
588 void *(*grow_alloc)(void *grow_arg, unsigned int size), void *grow_arg);
589 void alloccache_term (struct alloccache *cache,
590 void (*term_free)(void *term_arg, void *ptr, unsigned int size), void *term_arg);
591 void alloccache_join (struct alloccache *cache, struct alloccache *eat);
592 void alloccache_print (struct alloccache *cache);
593 void alloccache_print_all (void);
594 struct alloccache_free_ent *alloccache_alloc_grow (struct alloccache *cache);
595 void alloccache_free (struct alloccache *cache, void *item);
597 /* Allocate an item. */
598 MY_INLINE void *
599 alloccache_alloc (struct alloccache *cache)
601 struct alloccache_free_ent *f = cache->free_head;
602 if (f)
603 cache->free_head = f->next;
604 else if (cache->free_start != cache->free_end)
606 f = (struct alloccache_free_ent *)cache->free_start;
607 cache->free_start += cache->size;
609 else
610 f = alloccache_alloc_grow (cache);
611 MAKE_STATS(cache->alloc_count++;);
612 return f;
615 /* Allocate a cleared item. */
616 MY_INLINE void *
617 alloccache_calloc (struct alloccache *cache)
619 void *item = alloccache_alloc (cache);
620 memset (item, '\0', cache->size);
621 return item;
625 /* the alloc caches */
626 extern struct alloccache dep_cache;
627 extern struct alloccache file_cache;
628 extern struct alloccache commands_cache;
629 extern struct alloccache nameseq_cache;
630 extern struct alloccache variable_cache;
631 extern struct alloccache variable_set_cache;
632 extern struct alloccache variable_set_list_cache;
634 #endif /* CONFIG_WITH_ALLOC_CACHES */
637 /* String caching */
638 void strcache_init (void);
639 void strcache_print_stats (const char *prefix);
640 #ifndef CONFIG_WITH_STRCACHE2
641 int strcache_iscached (const char *str);
642 const char *strcache_add (const char *str);
643 const char *strcache_add_len (const char *str, int len);
644 int strcache_setbufsize (int size);
645 #else /* CONFIG_WITH_STRCACHE2 */
647 # include "strcache2.h"
648 extern struct strcache2 file_strcache;
649 extern const char *suffixes_strcached;
651 # define strcache_iscached(str) strcache2_is_cached(&file_strcache, str)
652 # define strcache_add(str) strcache2_add_file(&file_strcache, str, strlen (str))
653 # define strcache_add_len(str, len) strcache2_add_file(&file_strcache, str, len)
654 # define strcache_get_len(str) strcache2_get_len(&file_strcache, str) /* FIXME: replace this and related checks ... */
656 #endif /* CONFIG_WITH_STRCACHE2 */
658 #ifdef HAVE_VFORK_H
659 # include <vfork.h>
660 #endif
662 /* We omit these declarations on non-POSIX systems which define _POSIX_VERSION,
663 because such systems often declare them in header files anyway. */
665 #if !defined (__GNU_LIBRARY__) && !defined (POSIX) && !defined (_POSIX_VERSION) && !defined(WINDOWS32)
667 long int atol ();
668 # ifndef VMS
669 long int lseek ();
670 # endif
672 #endif /* Not GNU C library or POSIX. */
674 #ifdef HAVE_GETCWD
675 # if !defined(VMS) && !defined(__DECC) && !defined(_MSC_VER) /* bird: MSC */
676 char *getcwd ();
677 # endif
678 #else
679 char *getwd ();
680 # define getcwd(buf, len) getwd (buf)
681 #endif
683 #if !HAVE_STRCASECMP
684 # if HAVE_STRICMP
685 # define strcasecmp stricmp
686 # elif HAVE_STRCMPI
687 # define strcasecmp strcmpi
688 # else
689 /* Create our own, in misc.c */
690 int strcasecmp (const char *s1, const char *s2);
691 # endif
692 #endif
694 extern const struct floc *reading_file;
695 extern const struct floc **expanding_var;
697 #if !defined(_MSC_VER) /* bird */
698 extern char **environ;
699 #endif
701 extern int just_print_flag, silent_flag, ignore_errors_flag, keep_going_flag;
702 extern int print_data_base_flag, question_flag, touch_flag, always_make_flag;
703 extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag;
704 extern int print_version_flag, print_directory_flag, check_symlink_flag;
705 extern int warn_undefined_variables_flag, posix_pedantic, not_parallel;
706 extern int second_expansion, clock_skew_detected, rebuilding_makefiles;
707 #ifdef CONFIG_WITH_2ND_TARGET_EXPANSION
708 extern int second_target_expansion;
709 #endif
710 #ifdef CONFIG_PRETTY_COMMAND_PRINTING
711 extern int pretty_command_printing;
712 #endif
713 #ifdef CONFIG_WITH_PRINT_TIME_SWITCH
714 extern int print_time_min, print_time_width;
715 #endif
716 #if defined (CONFIG_WITH_MAKE_STATS) || defined (CONFIG_WITH_MINIMAL_STATS)
717 extern int make_expensive_statistics;
718 #endif
721 /* can we run commands via 'sh -c xxx' or must we use batch files? */
722 extern int batch_mode_shell;
724 /* Resetting the command script introduction prefix character. */
725 #define RECIPEPREFIX_NAME ".RECIPEPREFIX"
726 #define RECIPEPREFIX_DEFAULT '\t'
727 extern char cmd_prefix;
729 extern unsigned int job_slots;
730 extern int job_fds[2];
731 extern int job_rfd;
732 #ifndef NO_FLOAT
733 extern double max_load_average;
734 #else
735 extern int max_load_average;
736 #endif
738 extern char *program;
739 extern char *starting_directory;
740 extern unsigned int makelevel;
741 extern char *version_string, *remote_description, *make_host;
743 extern unsigned int commands_started;
745 extern int handling_fatal_signal;
748 #ifndef MIN
749 #define MIN(_a,_b) ((_a)<(_b)?(_a):(_b))
750 #endif
751 #ifndef MAX
752 #define MAX(_a,_b) ((_a)>(_b)?(_a):(_b))
753 #endif
755 #ifdef VMS
756 # define MAKE_SUCCESS 1
757 # define MAKE_TROUBLE 2
758 # define MAKE_FAILURE 3
759 #else
760 # define MAKE_SUCCESS 0
761 # define MAKE_TROUBLE 1
762 # define MAKE_FAILURE 2
763 #endif
765 /* Set up heap debugging library dmalloc. */
767 #ifdef HAVE_DMALLOC_H
768 #include <dmalloc.h>
769 #endif
771 #ifndef initialize_main
772 # ifdef __EMX__
773 # define initialize_main(pargc, pargv) \
774 { _wildcard(pargc, pargv); _response(pargc, pargv); }
775 # else
776 # define initialize_main(pargc, pargv)
777 # endif
778 #endif
780 #ifdef __EMX__
781 # if !defined chdir
782 # define chdir _chdir2
783 # endif
784 # if !defined getcwd
785 # define getcwd _getcwd2
786 # endif
788 /* NO_CHDIR2 causes make not to use _chdir2() and _getcwd2() instead of
789 chdir() and getcwd(). This avoids some error messages for the
790 make testsuite but restricts the drive letter support. */
791 # ifdef NO_CHDIR2
792 # warning NO_CHDIR2: usage of drive letters restricted
793 # undef chdir
794 # undef getcwd
795 # endif
796 #endif
798 #ifndef initialize_main
799 # define initialize_main(pargc, pargv)
800 #endif
803 /* Some systems (like Solaris, PTX, etc.) do not support the SA_RESTART flag
804 properly according to POSIX. So, we try to wrap common system calls with
805 checks for EINTR. Note that there are still plenty of system calls that
806 can fail with EINTR but this, reportedly, gets the vast majority of
807 failure cases. If you still experience failures you'll need to either get
808 a system where SA_RESTART works, or you need to avoid -j. */
810 #define EINTRLOOP(_v,_c) while (((_v)=_c)==-1 && errno==EINTR)
812 /* While system calls that return integers are pretty consistent about
813 returning -1 on failure and setting errno in that case, functions that
814 return pointers are not always so well behaved. Sometimes they return
815 NULL for expected behavior: one good example is readdir() which returns
816 NULL at the end of the directory--and _doesn't_ reset errno. So, we have
817 to do it ourselves here. */
819 #define ENULLLOOP(_v,_c) do { errno = 0; (_v) = _c; } \
820 while((_v)==0 && errno==EINTR)
823 #if defined(__EMX__) && defined(CONFIG_WITH_OPTIMIZATION_HACKS) /* bird: saves 40-100ms on libc. */
824 static inline void *__my_rawmemchr (const void *__s, int __c);
825 #undef strchr
826 #define strchr(s, c) \
827 (__extension__ (__builtin_constant_p (c) \
828 ? ((c) == '\0' \
829 ? (char *) __my_rawmemchr ((s), (c)) \
830 : __my_strchr_c ((s), ((c) & 0xff) << 8)) \
831 : __my_strchr_g ((s), (c))))
832 static inline char *__my_strchr_c (const char *__s, int __c)
834 register unsigned long int __d0;
835 register char *__res;
836 __asm__ __volatile__
837 ("1:\n\t"
838 "movb (%0),%%al\n\t"
839 "cmpb %%ah,%%al\n\t"
840 "je 2f\n\t"
841 "leal 1(%0),%0\n\t"
842 "testb %%al,%%al\n\t"
843 "jne 1b\n\t"
844 "xorl %0,%0\n"
845 "2:"
846 : "=r" (__res), "=&a" (__d0)
847 : "0" (__s), "1" (__c),
848 "m" ( *(struct { char __x[0xfffffff]; } *)__s)
849 : "cc");
850 return __res;
853 static inline char *__my_strchr_g (__const char *__s, int __c)
855 register unsigned long int __d0;
856 register char *__res;
857 __asm__ __volatile__
858 ("movb %%al,%%ah\n"
859 "1:\n\t"
860 "movb (%0),%%al\n\t"
861 "cmpb %%ah,%%al\n\t"
862 "je 2f\n\t"
863 "leal 1(%0),%0\n\t"
864 "testb %%al,%%al\n\t"
865 "jne 1b\n\t"
866 "xorl %0,%0\n"
867 "2:"
868 : "=r" (__res), "=&a" (__d0)
869 : "0" (__s), "1" (__c),
870 "m" ( *(struct { char __x[0xfffffff]; } *)__s)
871 : "cc");
872 return __res;
875 static inline void *__my_rawmemchr (const void *__s, int __c)
877 register unsigned long int __d0;
878 register unsigned char *__res;
879 __asm__ __volatile__
880 ("cld\n\t"
881 "repne; scasb\n\t"
882 : "=D" (__res), "=&c" (__d0)
883 : "a" (__c), "0" (__s), "1" (0xffffffff),
884 "m" ( *(struct { char __x[0xfffffff]; } *)__s)
885 : "cc");
886 return __res - 1;
889 #undef memchr
890 #define memchr(a,b,c) __my_memchr((a),(b),(c))
891 static inline void *__my_memchr (__const void *__s, int __c, size_t __n)
893 register unsigned long int __d0;
894 register unsigned char *__res;
895 if (__n == 0)
896 return NULL;
897 __asm__ __volatile__
898 ("repne; scasb\n\t"
899 "je 1f\n\t"
900 "movl $1,%0\n"
901 "1:"
902 : "=D" (__res), "=&c" (__d0)
903 : "a" (__c), "0" (__s), "1" (__n),
904 "m" ( *(struct { __extension__ char __x[__n]; } *)__s)
905 : "cc");
906 return __res - 1;
909 #endif /* __EMX__ (bird) */
911 #ifdef CONFIG_WITH_IF_CONDITIONALS
912 extern int expr_eval_if_conditionals(const char *line, const struct floc *flocp);
913 extern char *expr_eval_to_string(char *o, const char *expr);
914 #endif
916 #ifdef KMK
917 extern char *abspath(const char *name, char *apath);
918 extern char *func_breakpoint(char *o, char **argv, const char *funcname);
919 #endif
921 #if defined (CONFIG_WITH_NANOTS) || defined (CONFIG_WITH_PRINT_TIME_SWITCH)
922 /* misc.c */
923 extern big_int nano_timestamp (void);
924 extern int format_elapsed_nano (char *buf, size_t size, big_int ts);
925 #endif