1 /* Miscellaneous global declarations and portability cruft for GNU Make.
2 Copyright (C) 1988-2020 Free Software Foundation, Inc.
3 This file is part of GNU Make.
4 
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
8 version.
9 
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.
13 
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/>.  */
16 
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).  */
20 
21 #ifndef REMAKE_MAKEINT_H
22 #define REMAKE_MAKEINT_H
23 
24 #include <config.h>
25 #undef  HAVE_CONFIG_H
26 #define HAVE_CONFIG_H 1
27 
28 /* Specify we want GNU source code.  This must be defined before any
29    system headers are included.  */
30 
31 #define _GNU_SOURCE 1
32 
33 /* AIX requires this to be the first thing in the file.  */
34 #if HAVE_ALLOCA_H
35 # include <alloca.h>
36 #else
37 # ifdef _AIX
38  #pragma alloca
39 # else
40 #  if !defined(__GNUC__) && !defined(WINDOWS32)
41 #   ifndef alloca /* predefined by HP cc +Olibcalls */
42 char *alloca ();
43 #   endif
44 #  endif
45 # endif
46 #endif
47 
48 /* Disable assert() unless we're a maintainer.
49    Some asserts are compute-intensive.  */
50 #ifndef MAKE_MAINTAINER_MODE
51 # define NDEBUG 1
52 #endif
53 
54 /* Include the externally-visible content.
55    Be sure to use the local one, and not one installed on the system.
56    Define GMK_BUILDING_MAKE for proper selection of dllexport/dllimport
57    declarations for MS-Windows.  */
58 #ifdef WINDOWS32
59 # define GMK_BUILDING_MAKE
60 #endif
61 #include "gnuremake.h"
62 
63 #ifdef  CRAY
64 /* This must happen before #include <signal.h> so
65    that the declaration therein is changed.  */
66 # define signal bsdsignal
67 #endif
68 
69 /* If we're compiling for the dmalloc debugger, turn off string inlining.  */
70 #if defined(HAVE_DMALLOC_H) && defined(__GNUC__)
71 # define __NO_STRING_INLINES
72 #endif
73 
74 #include <stddef.h>
75 #include <sys/types.h>
76 #include <sys/stat.h>
77 #include <signal.h>
78 #include <stdio.h>
79 #include <ctype.h>
80 
81 #ifdef HAVE_SYS_TIMEB_H
82 /* SCO 3.2 "devsys 4.2" has a prototype for 'ftime' in <time.h> that bombs
83    unless <sys/timeb.h> has been included first.  */
84 # include <sys/timeb.h>
85 #endif
86 #if TIME_WITH_SYS_TIME
87 # include <sys/time.h>
88 # include <time.h>
89 #else
90 # if HAVE_SYS_TIME_H
91 #  include <sys/time.h>
92 # else
93 #  include <time.h>
94 # endif
95 #endif
96 
97 #include <errno.h>
98 
99 #ifndef errno
100 extern int errno;
101 #endif
102 
103 #ifndef isblank
104 # define isblank(c)     ((c) == ' ' || (c) == '\t')
105 #endif
106 
107 #ifdef  HAVE_UNISTD_H
108 # include <unistd.h>
109 /* Ultrix's unistd.h always defines _POSIX_VERSION, but you only get
110    POSIX.1 behavior with 'cc -YPOSIX', which predefines POSIX itself!  */
111 # if defined (_POSIX_VERSION) && !defined (ultrix) && !defined (VMS)
112 #  define POSIX 1
113 # endif
114 #endif
115 
116 /* Some systems define _POSIX_VERSION but are not really POSIX.1.  */
117 #if (defined (butterfly) || defined (__arm) || (defined (__mips) && defined (_SYSTYPE_SVR3)) || (defined (sequent) && defined (i386)))
118 # undef POSIX
119 #endif
120 
121 #if !defined (POSIX) && defined (_AIX) && defined (_POSIX_SOURCE)
122 # define POSIX 1
123 #endif
124 
125 #ifndef RETSIGTYPE
126 # define RETSIGTYPE     void
127 #endif
128 
129 #ifndef sigmask
130 # define sigmask(sig)   (1 << ((sig) - 1))
131 #endif
132 
133 #ifndef HAVE_SA_RESTART
134 # define SA_RESTART 0
135 #endif
136 
137 #ifdef HAVE_VFORK_H
138 # include <vfork.h>
139 #endif
140 
141 #ifdef  HAVE_LIMITS_H
142 # include <limits.h>
143 #endif
144 #ifdef  HAVE_SYS_PARAM_H
145 # include <sys/param.h>
146 #endif
147 
148 #ifndef PATH_MAX
149 # ifndef POSIX
150 #  define PATH_MAX      MAXPATHLEN
151 # endif
152 #endif
153 #ifndef MAXPATHLEN
154 # define MAXPATHLEN 1024
155 #endif
156 
157 #ifdef  PATH_MAX
158 # define GET_PATH_MAX   PATH_MAX
159 # define PATH_VAR(var)  char var[PATH_MAX+1]
160 #else
161 # define NEED_GET_PATH_MAX 1
162 # define GET_PATH_MAX   (get_path_max ())
163 # define PATH_VAR(var)  char *var = alloca (GET_PATH_MAX+1)
164 unsigned int get_path_max (void);
165 #endif
166 
167 #ifndef CHAR_BIT
168 # define CHAR_BIT 8
169 #endif
170 
171 #ifndef USHRT_MAX
172 # define USHRT_MAX 65535
173 #endif
174 
175 /* Nonzero if the integer type T is signed.
176    Use <= to avoid GCC warnings about always-false expressions.  */
177 #define INTEGER_TYPE_SIGNED(t) ((t) -1 <= 0)
178 
179 /* The minimum and maximum values for the integer type T.
180    Use ~ (t) 0, not -1, for portability to 1's complement hosts.  */
181 #define INTEGER_TYPE_MINIMUM(t) \
182   (! INTEGER_TYPE_SIGNED (t) ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))
183 #define INTEGER_TYPE_MAXIMUM(t) (~ (t) 0 - INTEGER_TYPE_MINIMUM (t))
184 
185 #ifndef CHAR_MAX
186 # define CHAR_MAX INTEGER_TYPE_MAXIMUM (char)
187 #endif
188 
189 #ifdef STAT_MACROS_BROKEN
190 # ifdef S_ISREG
191 #  undef S_ISREG
192 # endif
193 # ifdef S_ISDIR
194 #  undef S_ISDIR
195 # endif
196 #endif  /* STAT_MACROS_BROKEN.  */
197 
198 #ifndef S_ISREG
199 # define S_ISREG(mode)  (((mode) & S_IFMT) == S_IFREG)
200 #endif
201 #ifndef S_ISDIR
202 # define S_ISDIR(mode)  (((mode) & S_IFMT) == S_IFDIR)
203 #endif
204 
205 #ifdef VMS
206 # include <fcntl.h>
207 # include <types.h>
208 # include <unixlib.h>
209 # include <unixio.h>
210 # include <perror.h>
211 /* Needed to use alloca on VMS.  */
212 # include <builtins.h>
213 #endif
214 
215 #if !defined(__attribute__) && (__GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__)
216 /* Don't use __attribute__ if it's not supported.  */
217 # define ATTRIBUTE(x)
218 #else
219 # define ATTRIBUTE(x) __attribute__ (x)
220 #endif
221 
222 /* The __-protected variants of 'format' and 'printf' attributes
223    are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
224 #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
225 # define __format__ format
226 # define __printf__ printf
227 #endif
228 
229 #define UNUSED   ATTRIBUTE ((unused))
230 #define NORETURN ATTRIBUTE ((noreturn))
231 
232 #if defined (STDC_HEADERS) || defined (__GNU_LIBRARY__)
233 # include <stdlib.h>
234 # include <string.h>
235 # define ANSI_STRING 1
236 #else   /* No standard headers.  */
237 # ifdef HAVE_STRING_H
238 #  include <string.h>
239 #  define ANSI_STRING 1
240 # else
241 #  include <strings.h>
242 # endif
243 # ifdef HAVE_MEMORY_H
244 #  include <memory.h>
245 # endif
246 # ifdef HAVE_STDLIB_H
247 #  include <stdlib.h>
248 # else
249 void *malloc (int);
250 void *realloc (void *, int);
251 void free (void *);
252 
253 void abort (void) NORETURN;
254 void exit (int) NORETURN;
255 # endif /* HAVE_STDLIB_H.  */
256 
257 #endif /* Standard headers.  */
258 
259 /* These should be in stdlib.h.  Make sure we have them.  */
260 #ifndef EXIT_SUCCESS
261 # define EXIT_SUCCESS 0
262 #endif
263 #ifndef EXIT_FAILURE
264 # define EXIT_FAILURE 1
265 #endif
266 
267 #ifndef  ANSI_STRING
268 
269 /* SCO Xenix has a buggy macro definition in <string.h>.  */
270 #undef  strerror
271 #if !defined(__DECC)
272 char *strerror (int errnum);
273 #endif
274 
275 #endif  /* !ANSI_STRING.  */
276 #undef  ANSI_STRING
277 
278 #if HAVE_INTTYPES_H
279 # include <inttypes.h>
280 #endif
281 #if HAVE_STDINT_H
282 # include <stdint.h>
283 #endif
284 #define FILE_TIMESTAMP uintmax_t
285 
286 #if !defined(HAVE_STRSIGNAL)
287 char *strsignal (int signum);
288 #endif
289 
290 #if !defined(HAVE_UMASK)
291 typedef int mode_t;
292 extern mode_t umask (mode_t);
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 /* Test if two strings are equal. Is this worthwhile?  Should be profiled.  */
307 #define streq(a, b) \
308    ((a) == (b) || \
309     (*(a) == *(b) && (*(a) == '\0' || !strcmp ((a) + 1, (b) + 1))))
310 
311 /* Test if two strings are equal, but match case-insensitively on systems
312    which have case-insensitive filesystems.  Should only be used for
313    filenames!  */
314 #ifdef HAVE_CASE_INSENSITIVE_FS
315 # define patheq(a, b) \
316     ((a) == (b) \
317      || (tolower((unsigned char)*(a)) == tolower((unsigned char)*(b)) \
318          && (*(a) == '\0' || !strcasecmp ((a) + 1, (b) + 1))))
319 #else
320 # define patheq(a, b) streq(a, b)
321 #endif
322 
323 #define strneq(a, b, l) (strncmp ((a), (b), (l)) == 0)
324 
325 #if defined(ENUM_BITFIELDS) || (defined(__GNUC__) && !defined(__STRICT_ANSI__))
326 # define ENUM_BITFIELD(bits)    :bits
327 #else
328 # define ENUM_BITFIELD(bits)
329 #endif
330 
331 /* Handle gettext and locales.  */
332 
333 #if HAVE_LOCALE_H
334 # include <locale.h>
335 #else
336 # define setlocale(category, locale)
337 #endif
338 
339 #include <gettext.h>
340 
341 #define _(msgid)            gettext (msgid)
342 #define N_(msgid)           gettext_noop (msgid)
343 #define S_(msg1,msg2,num)   ngettext (msg1,msg2,num)
344 
345 /* Handle other OSs.
346    To overcome an issue parsing paths in a DOS/Windows environment when
347    built in a unix based environment, override the PATH_SEPARATOR_CHAR
348    definition unless being built for Cygwin. */
349 #if defined(HAVE_DOS_PATHS) && !defined(__CYGWIN__)
350 # undef PATH_SEPARATOR_CHAR
351 # define PATH_SEPARATOR_CHAR ';'
352 #elif !defined(PATH_SEPARATOR_CHAR)
353 # if defined (VMS)
354 #  define PATH_SEPARATOR_CHAR ','
355 # else
356 #  define PATH_SEPARATOR_CHAR ':'
357 # endif
358 #endif
359 
360 /* This is needed for getcwd() and chdir(), on some W32 systems.  */
361 #if defined(HAVE_DIRECT_H)
362 # include <direct.h>
363 #endif
364 
365 #ifdef WINDOWS32
366 # include <fcntl.h>
367 # include <malloc.h>
368 # define pipe(_p)        _pipe((_p), 512, O_BINARY)
369 # define kill(_pid,_sig) w32_kill((_pid),(_sig))
370 /* MSVC and Watcom C don't have ftruncate.  */
371 # if defined(_MSC_VER) || defined(__WATCOMC__)
372 #  define ftruncate(_fd,_len) _chsize(_fd,_len)
373 # endif
374 /* MinGW64 doesn't have _S_ISDIR.  */
375 # ifndef _S_ISDIR
376 #  define _S_ISDIR(m)  S_ISDIR(m)
377 # endif
378 
379 void sync_Path_environment (void);
380 int w32_kill (pid_t pid, int sig);
381 int find_and_set_default_shell (const char *token);
382 
383 /* indicates whether or not we have Bourne shell */
384 extern int no_default_sh_exe;
385 
386 /* is default_shell unixy? */
387 extern int unixy_shell;
388 
389 /* We don't have a preferred fixed value for LOCALEDIR.  */
390 # ifndef LOCALEDIR
391 #  define LOCALEDIR NULL
392 # endif
393 
394 /* Include only the minimal stuff from windows.h.   */
395 # define WIN32_LEAN_AND_MEAN
396 #endif  /* WINDOWS32 */
397 
398 #define ANY_SET(_v,_m)  (((_v)&(_m)) != 0)
399 #define NONE_SET(_v,_m) (! ANY_SET ((_v),(_m)))
400 
401 #define MAP_NUL         0x0001
402 #define MAP_BLANK       0x0002
403 #define MAP_NEWLINE     0x0004
404 #define MAP_COMMENT     0x0008
405 #define MAP_SEMI        0x0010
406 #define MAP_EQUALS      0x0020
407 #define MAP_COLON       0x0040
408 #define MAP_VARSEP      0x0080
409 #define MAP_PIPE        0x0100
410 #define MAP_DOT         0x0200
411 #define MAP_COMMA       0x0400
412 
413 /* These are the valid characters for a user-defined function.  */
414 #define MAP_USERFUNC    0x2000
415 /* This means not only a '$', but skip the variable reference.  */
416 #define MAP_VARIABLE    0x4000
417 /* The set of characters which are directory separators is OS-specific.  */
418 #define MAP_DIRSEP      0x8000
419 
420 #define MAP_SPACE       (MAP_BLANK|MAP_NEWLINE)
421 
422 /* Handle other OSs.
423    To overcome an issue parsing paths in a DOS/Windows environment when
424    built in a unix based environment, override the PATH_SEPARATOR_CHAR
425    definition unless being built for Cygwin. */
426 #if defined(HAVE_DOS_PATHS) && !defined(__CYGWIN__)
427 # undef PATH_SEPARATOR_CHAR
428 # define PATH_SEPARATOR_CHAR ';'
429 # define MAP_PATHSEP    MAP_SEMI
430 #elif !defined(PATH_SEPARATOR_CHAR)
431 #define PATH_SEPARATOR_CHAR ':'
432 #define MAP_PATHSEP    MAP_COLON
433 #elif PATH_SEPARATOR_CHAR == ':'
434 # define MAP_PATHSEP     MAP_COLON
435 #elif PATH_SEPARATOR_CHAR == ';'
436 # define MAP_PATHSEP     MAP_SEMI
437 #elif PATH_SEPARATOR_CHAR == ','
438 # define MAP_PATHSEP     MAP_COMMA
439 #else
440 # error "Unknown PATH_SEPARATOR_CHAR"
441 #endif
442 
443 #define STOP_SET(_v,_m) ANY_SET(stopchar_map[(unsigned char)(_v)],(_m))
444 
445 #define ISBLANK(c)      STOP_SET((c),MAP_BLANK)
446 #define ISSPACE(c)      STOP_SET((c),MAP_SPACE)
447 #define NEXT_TOKEN(s)   while (ISSPACE (*(s))) ++(s)
448 #define END_OF_TOKEN(s) while (! STOP_SET (*(s), MAP_SPACE|MAP_NUL)) ++(s)
449 
450 /* We can't run setrlimit when using posix_spawn.  */
451 #if defined(HAVE_SYS_RESOURCE_H) && defined(HAVE_GETRLIMIT) && defined(HAVE_SETRLIMIT) && !defined(USE_POSIX_SPAWN)
452 # define SET_STACK_SIZE
453 #endif
454 #ifdef SET_STACK_SIZE
455 # include <sys/resource.h>
456 extern struct rlimit stack_limit;
457 #endif
458 
459 #include <glob.h>
460 
461 #define NILF ((gmk_floc *)0)
462 
463 #define CSTRLEN(_s)           (sizeof (_s)-1)
464 #define STRING_SIZE_TUPLE(_s) (_s), CSTRLEN(_s)
465 
466 /* The number of bytes needed to represent the largest integer as a string.  */
467 #define INTSTR_LENGTH         CSTRLEN ("18446744073709551616")
468 
469 #define DEFAULT_TTYNAME "true"
470 #ifdef HAVE_TTYNAME
471 # define TTYNAME(_f) ttyname (_f)
472 #else
473 # define TTYNAME(_f) DEFAULT_TTYNAME
474 #endif
475 
476 
477 const char *concat (unsigned int, ...);
478 void message (int prefix, size_t length, const char *fmt, ...)
479               ATTRIBUTE ((__format__ (__printf__, 3, 4)));
480 void error (const gmk_floc *flocp, size_t length, const char *fmt, ...)
481             ATTRIBUTE ((__format__ (__printf__, 3, 4)));
482 void fatal (const gmk_floc *flocp, size_t length, const char *fmt, ...)
483             ATTRIBUTE ((noreturn, __format__ (__printf__, 3, 4)));
484 void out_of_memory () NORETURN;
485 
486 /* When adding macros to this list be sure to update the value of
487    XGETTEXT_OPTIONS in the po/Makevars file.  */
488 #define O(_t,_a,_f)           _t((_a), 0, (_f))
489 #define OS(_t,_a,_f,_s)       _t((_a), strlen (_s), (_f), (_s))
490 #define OSS(_t,_a,_f,_s1,_s2) _t((_a), strlen (_s1) + strlen (_s2), \
491                                  (_f), (_s1), (_s2))
492 #define OSSS(_t,_a,_f,_s1,_s2,_s3) _t((_a), strlen (_s1) + strlen (_s2) + strlen (_s3), \
493                                       (_f), (_s1), (_s2), (_s3))
494 #define ON(_t,_a,_f,_n)       _t((_a), INTSTR_LENGTH, (_f), (_n))
495 #define ONN(_t,_a,_f,_n1,_n2) _t((_a), INTSTR_LENGTH*2, (_f), (_n1), (_n2))
496 
497 #define OSN(_t,_a,_f,_s,_n)   _t((_a), strlen (_s) + INTSTR_LENGTH, \
498                                  (_f), (_s), (_n))
499 #define ONS(_t,_a,_f,_n,_s)   _t((_a), INTSTR_LENGTH + strlen (_s), \
500                                  (_f), (_n), (_s))
501 
502 #define OUT_OF_MEM() O (fatal, NILF, _("virtual memory exhausted"))
503 
504 void die (int) NORETURN;
505 void pfatal_with_name (const char *) NORETURN;
506 void perror_with_name (const char *, const char *);
507 #define xstrlen(_s) ((_s)==NULL ? 0 : strlen (_s))
508 void *xmalloc (size_t);
509 void *xcalloc (size_t);
510 void *xrealloc (void *, size_t);
511 char *xstrdup (const char *);
512 char *xstrndup (const char *, size_t);
513 char *find_next_token (const char **, size_t *);
514 char *next_token (const char *);
515 char *end_of_token (const char *);
516 void collapse_continuations (char *);
517 char *lindex (const char *, const char *, int);
518 int alpha_compare (const void *, const void *);
519 void print_spaces (unsigned int);
520 char *find_percent (char *);
521 const char *find_percent_cached (const char **);
522 FILE *get_tmpfile (char **, const char *);
523 ssize_t writebuf (int, const void *, size_t);
524 ssize_t readbuf (int, void *, size_t);
525 
526 #ifndef HAVE_MEMRCHR
527 void *memrchr(const void *, int, size_t);
528 #endif
529 
530 #ifndef NO_ARCHIVES
531 int ar_name (const char *);
532 void ar_parse_name (const char *, char **, char **);
533 int ar_touch (const char *);
534 int ar_member_date (const char *, time_t *);
535 
536 typedef long int (*ar_member_func_t) (int desc, const char *mem, int truncated,
537                                       long int hdrpos, long int datapos,
538                                       long int size, long int date, int uid,
539                                       int gid, unsigned int mode,
540                                       const void *arg);
541 
542 long int ar_scan (const char *archive, ar_member_func_t function, const void *arg);
543 int ar_name_equal (const char *name, const char *mem, int truncated);
544 int ar_member_touch (const char *arname, const char *memname);
545 #endif
546 
547 int dir_file_exists_p (const char *, const char *);
548 int file_exists_p (const char *);
549 int file_impossible_p (const char *);
550 void file_impossible (const char *);
551 const char *dir_name (const char *);
552 void print_dir_data_base (void);
553 void dir_setup_glob (glob_t *);
554 void hash_init_directories (void);
555 
556 void define_default_variables (void);
557 void undefine_default_variables (void);
558 void set_default_suffixes (void);
559 void install_default_suffix_rules (void);
560 void install_default_implicit_rules (void);
561 
562 void build_vpath_lists (void);
563 void construct_vpath_list (char *pattern, char *dirpath);
564 const char *vpath_search (const char *file, FILE_TIMESTAMP *mtime_ptr,
565                           unsigned int* vpath_index, unsigned int* path_index);
566 //int gpath_search (const char *file, size_t len);
567 
568 void construct_include_path (const char **arg_dirs);
569 
570 void user_access (void);
571 void make_access (void);
572 void child_access (void);
573 
574 char *strip_whitespace (const char **begpp, const char **endpp);
575 
576 void show_goal_error (void);
577 
578 /* String caching  */
579 void strcache_init (void);
580 void strcache_print_stats (const char *prefix);
581 int strcache_iscached (const char *str);
582 const char *strcache_add (const char *str);
583 const char *strcache_add_len (const char *str, size_t len);
584 int strcache_setbufsize (unsigned int size);
585 
586 /* Guile support  */
587 int guile_gmake_setup (const gmk_floc *flocp);
588 
589 /* Loadable object support.  Sets to the strcached name of the loaded file.  */
590 typedef int (*load_func_t)(const gmk_floc *flocp);
591 int load_file (const gmk_floc *flocp, const char **filename, int noerror);
592 void unload_file (const char *name);
593 
594 /* Maintainer mode support */
595 #ifdef MAKE_MAINTAINER_MODE
596 # define SPIN(_s) spin (_s)
597 void spin (const char* suffix);
598 #else
599 # define SPIN(_s)
600 #endif
601 
602 /* We omit these declarations on non-POSIX systems which define _POSIX_VERSION,
603    because such systems often declare them in header files anyway.  */
604 
605 #if !defined (__GNU_LIBRARY__) && !defined (POSIX) && !defined (_POSIX_VERSION) && !defined(WINDOWS32)
606 
607 long int atol ();
608 # ifndef VMS
609 long int lseek ();
610 # endif
611 
612 #endif  /* Not GNU C library or POSIX.  */
613 
614 #ifdef  HAVE_GETCWD
615 # if !defined(VMS) && !defined(__DECC)
616 char *getcwd ();
617 # endif
618 #else
619 char *getwd ();
620 # define getcwd(buf, len)       getwd (buf)
621 #endif
622 
623 #if !HAVE_STRCASECMP
624 # if HAVE_STRICMP
625 #  define strcasecmp stricmp
626 # elif HAVE_STRCMPI
627 #  define strcasecmp strcmpi
628 # else
629 /* Create our own, in misc.c */
630 int strcasecmp (const char *s1, const char *s2);
631 # endif
632 #endif
633 
634 #if !HAVE_STRNCASECMP
635 # if HAVE_STRNICMP
636 #  define strncasecmp strnicmp
637 # elif HAVE_STRNCMPI
638 #  define strncasecmp strncmpi
639 # else
640 /* Create our own, in misc.c */
641 int strncasecmp (const char *s1, const char *s2, int n);
642 # endif
643 #endif
644 
645 extern const gmk_floc *reading_file;
646 extern const gmk_floc **expanding_var;
647 
648 extern char **environ;
649 
650 extern unsigned short stopchar_map[];
651 
652 extern int just_print_flag, run_silent, ignore_errors_flag, keep_going_flag;
653 extern int print_data_base_flag, question_flag, touch_flag, always_make_flag;
654 extern int env_overrides, no_builtin_rules_flag, no_builtin_variables_flag;
655 extern int print_version_flag, print_directory_flag, check_symlink_flag;
656 extern int warn_undefined_variables_flag, trace_flag, posix_pedantic;
657 extern int not_parallel, second_expansion, clock_skew_detected;
658 extern int rebuilding_makefiles, one_shell, output_sync, verify_flag;
659 
660 /* can we run commands via 'sh -c xxx' or must we use batch files? */
661 extern int batch_mode_shell;
662 
663 /* Resetting the command script introduction prefix character.  */
664 #define RECIPEPREFIX_NAME          ".RECIPEPREFIX"
665 #define RECIPEPREFIX_DEFAULT       '\t'
666 extern char cmd_prefix;
667 
668 extern unsigned int job_slots;
669 extern int job_fds[2];
670 extern int job_rfd;
671 extern double max_load_average;
672 
673 extern const char *program;
674 
675 void remote_setup (void);
676 void remote_cleanup (void);
677 int start_remote_job_p (int);
678 int start_remote_job (char **, char **, int, int *, pid_t *, int *);
679 int remote_status (int *, int *, int *, int);
680 void block_remote_children (void);
681 void unblock_remote_children (void);
682 int remote_kill (pid_t id, int sig);
683 void print_variable_data_base (void);
684 void print_vpath_data_base (void);
685 
686 extern char *starting_directory;
687 extern unsigned int makelevel;
688 extern char *version_string, *remote_description, *make_host;
689 
690 extern unsigned int commands_started;
691 
692 extern int handling_fatal_signal;
693 
694 #ifndef MIN
695 #define MIN(_a,_b) ((_a)<(_b)?(_a):(_b))
696 #endif
697 #ifndef MAX
698 #define MAX(_a,_b) ((_a)>(_b)?(_a):(_b))
699 #endif
700 
701 #define MAKE_SUCCESS 0
702 #define MAKE_TROUBLE 1
703 #define MAKE_FAILURE 2
704 
705 /* Set up heap debugging library dmalloc.  */
706 
707 #ifdef HAVE_DMALLOC_H
708 #include <dmalloc.h>
709 #endif
710 
711 #ifndef initialize_main
712 # ifdef __EMX__
713 #  define initialize_main(pargc, pargv) \
714                           { _wildcard(pargc, pargv); _response(pargc, pargv); }
715 # else
716 #  define initialize_main(pargc, pargv)
717 # endif
718 #endif
719 
720 #ifdef __EMX__
721 # if !defined chdir
722 #  define chdir _chdir2
723 # endif
724 # if !defined getcwd
725 #  define getcwd _getcwd2
726 # endif
727 
728 /* NO_CHDIR2 causes make not to use _chdir2() and _getcwd2() instead of
729    chdir() and getcwd(). This avoids some error messages for the
730    make testsuite but restricts the drive letter support. */
731 # ifdef NO_CHDIR2
732 #  warning NO_CHDIR2: usage of drive letters restricted
733 #  undef chdir
734 #  undef getcwd
735 # endif
736 #endif
737 
738 #ifndef initialize_main
739 # define initialize_main(pargc, pargv)
740 #endif
741 
742 
743 /* Some systems (like Solaris, PTX, etc.) do not support the SA_RESTART flag
744    properly according to POSIX.  So, we try to wrap common system calls with
745    checks for EINTR.  Note that there are still plenty of system calls that
746    can fail with EINTR but this, reportedly, gets the vast majority of
747    failure cases.  If you still experience failures you'll need to either get
748    a system where SA_RESTART works, or you need to avoid -j.  */
749 
750 #define EINTRLOOP(_v,_c)   while (((_v)=_c)==-1 && errno==EINTR)
751 
752 /* While system calls that return integers are pretty consistent about
753    returning -1 on failure and setting errno in that case, functions that
754    return pointers are not always so well behaved.  Sometimes they return
755    NULL for expected behavior: one good example is readdir() which returns
756    NULL at the end of the directory--and _doesn't_ reset errno.  So, we have
757    to do it ourselves here.  */
758 
759 #define ENULLLOOP(_v,_c)   do { errno = 0; (_v) = _c; } \
760                            while((_v)==0 && errno==EINTR)
761 
762 #endif /* REMAKE_MAKEINT_H */
763