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