* Ouch: found a bug where re-exec from changed makefiles turned off
[platform/upstream/make.git] / main.c
1 /* Argument parsing and main program of GNU Make.
2 Copyright (C) 1988,89,90,91,94,95,96,97,98,99 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
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2, or (at your option)
8 any later version.
9
10 GNU Make is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with GNU Make; see the file COPYING.  If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18 MA 02111-1307, USA.  */
19
20 #include "make.h"
21 #include "dep.h"
22 #include "filedef.h"
23 #include "variable.h"
24 #include "job.h"
25 #include "commands.h"
26 #include "rule.h"
27 #include "getopt.h"
28 #include <assert.h>
29 #ifdef _AMIGA
30 # include <dos/dos.h>
31 # include <proto/dos.h>
32 #endif
33 #ifdef WINDOWS32
34 #include <windows.h>
35 #include "pathstuff.h"
36 #endif
37 #if defined(MAKE_JOBSERVER) && defined(HAVE_FCNTL_H)
38 # include <fcntl.h>
39 #endif
40
41 #ifdef _AMIGA
42 int __stack = 20000; /* Make sure we have 20K of stack space */
43 #endif
44
45 extern void init_dir PARAMS ((void));
46 extern void remote_setup PARAMS ((void));
47 extern void remote_cleanup PARAMS ((void));
48 extern RETSIGTYPE fatal_error_signal PARAMS ((int sig));
49
50 extern void print_variable_data_base PARAMS ((void));
51 extern void print_dir_data_base PARAMS ((void));
52 extern void print_rule_data_base PARAMS ((void));
53 extern void print_file_data_base PARAMS ((void));
54 extern void print_vpath_data_base PARAMS ((void));
55
56 #if defined HAVE_WAITPID || defined HAVE_WAIT3
57 # define HAVE_WAIT_NOHANG
58 #endif
59
60 #ifndef HAVE_UNISTD_H
61 extern int chdir ();
62 #endif
63 #ifndef STDC_HEADERS
64 # ifndef sun                    /* Sun has an incorrect decl in a header.  */
65 extern void exit PARAMS ((int)) __attribute__ ((noreturn));
66 # endif
67 extern double atof ();
68 #endif
69 extern char *mktemp ();
70
71 static void print_data_base PARAMS ((void));
72 static void print_version PARAMS ((void));
73 static void decode_switches PARAMS ((int argc, char **argv, int env));
74 static void decode_env_switches PARAMS ((char *envar, unsigned int len));
75 static void define_makeflags PARAMS ((int all, int makefile));
76 static char *quote_as_word PARAMS ((char *out, char *in, int double_dollars));
77 \f
78 /* The structure that describes an accepted command switch.  */
79
80 struct command_switch
81   {
82     int c;                      /* The switch character.  */
83
84     enum                        /* Type of the value.  */
85       {
86         flag,                   /* Turn int flag on.  */
87         flag_off,               /* Turn int flag off.  */
88         string,                 /* One string per switch.  */
89         positive_int,           /* A positive integer.  */
90         floating,               /* A floating-point number (double).  */
91         ignore                  /* Ignored.  */
92       } type;
93
94     char *value_ptr;    /* Pointer to the value-holding variable.  */
95
96     unsigned int env:1;         /* Can come from MAKEFLAGS.  */
97     unsigned int toenv:1;       /* Should be put in MAKEFLAGS.  */
98     unsigned int no_makefile:1; /* Don't propagate when remaking makefiles.  */
99
100     char *noarg_value;  /* Pointer to value used if no argument is given.  */
101     char *default_value;/* Pointer to default value.  */
102
103     char *long_name;            /* Long option name.  */
104     char *argdesc;              /* Descriptive word for argument.  */
105     char *description;          /* Description for usage message.  */
106                                 /* 0 means internal; don't display help.  */
107   };
108
109 /* True if C is a switch value that corresponds to a short option.  */
110
111 #define short_option(c) ((c) <= CHAR_MAX)
112
113 /* The structure used to hold the list of strings given
114    in command switches of a type that takes string arguments.  */
115
116 struct stringlist
117   {
118     char **list;        /* Nil-terminated list of strings.  */
119     unsigned int idx;   /* Index into above.  */
120     unsigned int max;   /* Number of pointers allocated.  */
121   };
122
123
124 /* The recognized command switches.  */
125
126 /* Nonzero means do not print commands to be executed (-s).  */
127
128 int silent_flag;
129
130 /* Nonzero means just touch the files
131    that would appear to need remaking (-t)  */
132
133 int touch_flag;
134
135 /* Nonzero means just print what commands would need to be executed,
136    don't actually execute them (-n).  */
137
138 int just_print_flag;
139
140 /* Print debugging trace info (-d).  */
141
142 int debug_flag = 0;
143
144 #ifdef WINDOWS32
145 /* Suspend make in main for a short time to allow debugger to attach */
146
147 int suspend_flag = 0;
148 #endif
149
150 /* Environment variables override makefile definitions.  */
151
152 int env_overrides = 0;
153
154 /* Nonzero means ignore status codes returned by commands
155    executed to remake files.  Just treat them all as successful (-i).  */
156
157 int ignore_errors_flag = 0;
158
159 /* Nonzero means don't remake anything, just print the data base
160    that results from reading the makefile (-p).  */
161
162 int print_data_base_flag = 0;
163
164 /* Nonzero means don't remake anything; just return a nonzero status
165    if the specified targets are not up to date (-q).  */
166
167 int question_flag = 0;
168
169 /* Nonzero means do not use any of the builtin rules (-r) / variables (-R).  */
170
171 int no_builtin_rules_flag = 0;
172 int no_builtin_variables_flag = 0;
173
174 /* Nonzero means keep going even if remaking some file fails (-k).  */
175
176 int keep_going_flag;
177 int default_keep_going_flag = 0;
178
179 /* Nonzero means print directory before starting and when done (-w).  */
180
181 int print_directory_flag = 0;
182
183 /* Nonzero means ignore print_directory_flag and never print the directory.
184    This is necessary because print_directory_flag is set implicitly.  */
185
186 int inhibit_print_directory_flag = 0;
187
188 /* Nonzero means print version information.  */
189
190 int print_version_flag = 0;
191
192 /* List of makefiles given with -f switches.  */
193
194 static struct stringlist *makefiles = 0;
195
196 /* Number of job slots (commands that can be run at once).  */
197
198 unsigned int job_slots = 1;
199 unsigned int default_job_slots = 1;
200
201 /* Value of job_slots that means no limit.  */
202
203 static unsigned int inf_jobs = 0;
204
205 /* File descriptors for the jobs pipe.  */
206
207 static struct stringlist *jobserver_fds = 0;
208
209 int job_fds[2] = { -1, -1 };
210 int job_rfd = -1;
211
212 /* Maximum load average at which multiple jobs will be run.
213    Negative values mean unlimited, while zero means limit to
214    zero load (which could be useful to start infinite jobs remotely
215    but one at a time locally).  */
216 #ifndef NO_FLOAT
217 double max_load_average = -1.0;
218 double default_load_average = -1.0;
219 #else
220 int max_load_average = -1;
221 int default_load_average = -1;
222 #endif
223
224 /* List of directories given with -C switches.  */
225
226 static struct stringlist *directories = 0;
227
228 /* List of include directories given with -I switches.  */
229
230 static struct stringlist *include_directories = 0;
231
232 /* List of files given with -o switches.  */
233
234 static struct stringlist *old_files = 0;
235
236 /* List of files given with -W switches.  */
237
238 static struct stringlist *new_files = 0;
239
240 /* If nonzero, we should just print usage and exit.  */
241
242 static int print_usage_flag = 0;
243
244 /* If nonzero, we should print a warning message
245    for each reference to an undefined variable.  */
246
247 int warn_undefined_variables_flag;
248 \f
249 /* The table of command switches.  */
250
251 static const struct command_switch switches[] =
252   {
253     { 'b', ignore, 0, 0, 0, 0, 0, 0,
254         0, 0,
255         _("Ignored for compatibility") },
256     { 'C', string, (char *) &directories, 0, 0, 0, 0, 0,
257         "directory", _("DIRECTORY"),
258         _("Change to DIRECTORY before doing anything") },
259     { 'd', flag, (char *) &debug_flag, 1, 1, 0, 0, 0,
260         "debug", 0,
261         _("Print lots of debugging information") },
262 #ifdef WINDOWS32
263     { 'D', flag, (char *) &suspend_flag, 1, 1, 0, 0, 0,
264         "suspend-for-debug", 0,
265         _("Suspend process to allow a debugger to attach") },
266 #endif
267     { 'e', flag, (char *) &env_overrides, 1, 1, 0, 0, 0,
268         "environment-overrides", 0,
269         _("Environment variables override makefiles") },
270     { 'f', string, (char *) &makefiles, 0, 0, 0, 0, 0,
271         "file", _("FILE"),
272         _("Read FILE as a makefile") },
273     { 'h', flag, (char *) &print_usage_flag, 0, 0, 0, 0, 0,
274         "help", 0,
275         _("Print this message and exit") },
276     { 'i', flag, (char *) &ignore_errors_flag, 1, 1, 0, 0, 0,
277         "ignore-errors", 0,
278         _("Ignore errors from commands") },
279     { 'I', string, (char *) &include_directories, 1, 1, 0, 0, 0,
280         "include-dir", _("DIRECTORY"),
281         _("Search DIRECTORY for included makefiles") },
282     { 'j',
283         positive_int, (char *) &job_slots, 1, 1, 0,
284         (char *) &inf_jobs, (char *) &default_job_slots,
285         "jobs", "N",
286         _("Allow N jobs at once; infinite jobs with no arg") },
287     { CHAR_MAX+1, string, (char *) &jobserver_fds, 1, 1, 0, 0, 0,
288         "jobserver-fds", 0,
289         0 },
290     { 'k', flag, (char *) &keep_going_flag, 1, 1, 0,
291         0, (char *) &default_keep_going_flag,
292         "keep-going", 0,
293         _("Keep going when some targets can't be made") },
294 #ifndef NO_FLOAT
295     { 'l', floating, (char *) &max_load_average, 1, 1, 0,
296         (char *) &default_load_average, (char *) &default_load_average,
297         "load-average", "N",
298         _("Don't start multiple jobs unless load is below N") },
299 #else
300     { 'l', positive_int, (char *) &max_load_average, 1, 1, 0,
301         (char *) &default_load_average, (char *) &default_load_average,
302         "load-average", "N",
303         _("Don't start multiple jobs unless load is below N") },
304 #endif
305     { 'm', ignore, 0, 0, 0, 0, 0, 0,
306         0, 0,
307         "-b" },
308     { 'n', flag, (char *) &just_print_flag, 1, 1, 1, 0, 0,
309         "just-print", 0,
310         _("Don't actually run any commands; just print them") },
311     { 'o', string, (char *) &old_files, 0, 0, 0, 0, 0,
312         "old-file", _("FILE"),
313         _("Consider FILE to be very old and don't remake it") },
314     { 'p', flag, (char *) &print_data_base_flag, 1, 1, 0, 0, 0,
315         "print-data-base", 0,
316         _("Print make's internal database") },
317     { 'q', flag, (char *) &question_flag, 1, 1, 1, 0, 0,
318         "question", 0,
319         _("Run no commands; exit status says if up to date") },
320     { 'r', flag, (char *) &no_builtin_rules_flag, 1, 1, 0, 0, 0,
321         "no-builtin-rules", 0,
322         _("Disable the built-in implicit rules") },
323     { 'R', flag, (char *) &no_builtin_variables_flag, 1, 1, 0, 0, 0,
324         "no-builtin-variables", 0,
325         _("Disable the built-in variable settings") },
326     { 's', flag, (char *) &silent_flag, 1, 1, 0, 0, 0,
327         "silent", 0,
328         _("Don't echo commands") },
329     { 'S', flag_off, (char *) &keep_going_flag, 1, 1, 0,
330         0, (char *) &default_keep_going_flag,
331         "no-keep-going", 0,
332         _("Turns off -k") },
333     { 't', flag, (char *) &touch_flag, 1, 1, 1, 0, 0,
334         "touch", 0,
335         _("Touch targets instead of remaking them") },
336     { 'v', flag, (char *) &print_version_flag, 1, 1, 0, 0, 0,
337         "version", 0,
338         _("Print the version number of make and exit") },
339     { 'w', flag, (char *) &print_directory_flag, 1, 1, 0, 0, 0,
340         "print-directory", 0,
341         _("Print the current directory") },
342     { CHAR_MAX+2, flag, (char *) &inhibit_print_directory_flag, 1, 1, 0, 0, 0,
343         "no-print-directory", 0,
344         _("Turn off -w, even if it was turned on implicitly") },
345     { 'W', string, (char *) &new_files, 0, 0, 0, 0, 0,
346         "what-if", _("FILE"),
347         _("Consider FILE to be infinitely new") },
348     { CHAR_MAX+3, flag, (char *) &warn_undefined_variables_flag, 1, 1, 0, 0, 0,
349         "warn-undefined-variables", 0,
350         _("Warn when an undefined variable is referenced") },
351     { '\0', }
352   };
353
354 /* Secondary long names for options.  */
355
356 static struct option long_option_aliases[] =
357   {
358     { "quiet",          no_argument,            0, 's' },
359     { "stop",           no_argument,            0, 'S' },
360     { "new-file",       required_argument,      0, 'W' },
361     { "assume-new",     required_argument,      0, 'W' },
362     { "assume-old",     required_argument,      0, 'o' },
363     { "max-load",       optional_argument,      0, 'l' },
364     { "dry-run",        no_argument,            0, 'n' },
365     { "recon",          no_argument,            0, 'n' },
366     { "makefile",       required_argument,      0, 'f' },
367   };
368
369 /* The usage message prints the descriptions of options starting in
370    this column.  Make sure it leaves enough room for the longest
371    description to fit in less than 80 characters.  */
372
373 #define DESCRIPTION_COLUMN      30
374
375 /* List of goal targets.  */
376
377 static struct dep *goals, *lastgoal;
378
379 /* List of variables which were defined on the command line
380    (or, equivalently, in MAKEFLAGS).  */
381
382 struct command_variable
383   {
384     struct command_variable *next;
385     struct variable *variable;
386   };
387 static struct command_variable *command_variables;
388 \f
389 /* The name we were invoked with.  */
390
391 char *program;
392
393 /* Our current directory before processing any -C options.  */
394
395 char *directory_before_chdir;
396
397 /* Our current directory after processing all -C options.  */
398
399 char *starting_directory;
400
401 /* Value of the MAKELEVEL variable at startup (or 0).  */
402
403 unsigned int makelevel;
404
405 /* First file defined in the makefile whose name does not
406    start with `.'.  This is the default to remake if the
407    command line does not specify.  */
408
409 struct file *default_goal_file;
410
411 /* Pointer to structure for the file .DEFAULT
412    whose commands are used for any file that has none of its own.
413    This is zero if the makefiles do not define .DEFAULT.  */
414
415 struct file *default_file;
416
417 /* Nonzero if we have seen the magic `.POSIX' target.
418    This turns on pedantic compliance with POSIX.2.  */
419
420 int posix_pedantic;
421
422 /* Nonzero if some rule detected clock skew; we keep track so (a) we only
423    print one warning about it during the run, and (b) we can print a final
424    warning at the end of the run. */
425
426 int clock_skew_detected;
427 \f
428 /* Mask of signals that are being caught with fatal_error_signal.  */
429
430 #ifdef  POSIX
431 sigset_t fatal_signal_set;
432 #else
433 #ifdef  HAVE_SIGSETMASK
434 int fatal_signal_mask;
435 #endif
436 #endif
437
438 static struct file *
439 enter_command_line_file (name)
440      char *name;
441 {
442   if (name[0] == '\0')
443     fatal (NILF, _("empty string invalid as file name"));
444
445   if (name[0] == '~')
446     {
447       char *expanded = tilde_expand (name);
448       if (expanded != 0)
449         name = expanded;        /* Memory leak; I don't care.  */
450     }
451
452   /* This is also done in parse_file_seq, so this is redundant
453      for names read from makefiles.  It is here for names passed
454      on the command line.  */
455   while (name[0] == '.' && name[1] == '/' && name[2] != '\0')
456     {
457       name += 2;
458       while (*name == '/')
459         /* Skip following slashes: ".//foo" is "foo", not "/foo".  */
460         ++name;
461     }
462
463   if (*name == '\0')
464     {
465       /* It was all slashes!  Move back to the dot and truncate
466          it after the first slash, so it becomes just "./".  */
467       do
468         --name;
469       while (name[0] != '.');
470       name[2] = '\0';
471     }
472
473   return enter_file (xstrdup (name));
474 }
475
476 /* Toggle -d on receipt of SIGUSR1.  */
477
478 static RETSIGTYPE
479 debug_signal_handler (sig)
480      int sig;
481 {
482   debug_flag = ! debug_flag;
483 }
484
485 #ifdef WINDOWS32
486 /*
487  * HANDLE runtime exceptions by avoiding a requestor on the GUI. Capture
488  * exception and print it to stderr instead.
489  *
490  * If debug_flag not set, just print a simple message and exit.
491  * If debug_flag set, print a more verbose message.
492  * If compiled for DEBUG, let exception pass through to GUI so that
493  *   debuggers can attach.
494  */
495 LONG WINAPI
496 handle_runtime_exceptions( struct _EXCEPTION_POINTERS *exinfo )
497 {
498   PEXCEPTION_RECORD exrec = exinfo->ExceptionRecord;
499   LPSTR cmdline = GetCommandLine();
500   LPSTR prg = strtok(cmdline, " ");
501   CHAR errmsg[1024];
502 #ifdef USE_EVENT_LOG
503   HANDLE hEventSource;
504   LPTSTR lpszStrings[1];
505 #endif
506
507   if (!debug_flag)
508     {
509       sprintf(errmsg, _("%s: Interrupt/Exception caught "), prg);
510       sprintf(&errmsg[strlen(errmsg)],
511               "(code = 0x%x, addr = 0x%x)\r\n",
512               exrec->ExceptionCode, exrec->ExceptionAddress);
513       fprintf(stderr, errmsg);
514       exit(255);
515     }
516
517   sprintf(errmsg,
518           _("\r\nUnhandled exception filter called from program %s\r\n"), prg);
519   sprintf(&errmsg[strlen(errmsg)], "ExceptionCode = %x\r\n",
520           exrec->ExceptionCode);
521   sprintf(&errmsg[strlen(errmsg)], "ExceptionFlags = %x\r\n",
522           exrec->ExceptionFlags);
523   sprintf(&errmsg[strlen(errmsg)], "ExceptionAddress = %x\r\n",
524           exrec->ExceptionAddress);
525
526   if (exrec->ExceptionCode == EXCEPTION_ACCESS_VIOLATION
527       && exrec->NumberParameters >= 2)
528     sprintf(&errmsg[strlen(errmsg)],
529             _("Access violation: %s operation at address %x\r\n"),
530             exrec->ExceptionInformation[0] ? _("write"): _("read"),
531             exrec->ExceptionInformation[1]);
532
533   /* turn this on if we want to put stuff in the event log too */
534 #ifdef USE_EVENT_LOG
535   hEventSource = RegisterEventSource(NULL, "GNU Make");
536   lpszStrings[0] = errmsg;
537
538   if (hEventSource != NULL)
539     {
540       ReportEvent(hEventSource,         /* handle of event source */
541                   EVENTLOG_ERROR_TYPE,  /* event type */
542                   0,                    /* event category */
543                   0,                    /* event ID */
544                   NULL,                 /* current user's SID */
545                   1,                    /* strings in lpszStrings */
546                   0,                    /* no bytes of raw data */
547                   lpszStrings,          /* array of error strings */
548                   NULL);                /* no raw data */
549
550       (VOID) DeregisterEventSource(hEventSource);
551     }
552 #endif
553
554   /* Write the error to stderr too */
555   fprintf(stderr, errmsg);
556
557 #ifdef DEBUG
558   return EXCEPTION_CONTINUE_SEARCH;
559 #else
560   exit(255);
561   return (255); /* not reached */
562 #endif
563 }
564
565 /*
566  * On WIN32 systems we don't have the luxury of a /bin directory that
567  * is mapped globally to every drive mounted to the system. Since make could
568  * be invoked from any drive, and we don't want to propogate /bin/sh
569  * to every single drive. Allow ourselves a chance to search for
570  * a value for default shell here (if the default path does not exist).
571  */
572
573 int
574 find_and_set_default_shell(char *token)
575 {
576   int sh_found = 0;
577   char* search_token;
578   PATH_VAR(sh_path);
579   extern char *default_shell;
580
581   if (!token)
582     search_token = default_shell;
583   else
584     search_token = token;
585
586   if (!no_default_sh_exe &&
587       (token == NULL || !strcmp(search_token, default_shell))) {
588     /* no new information, path already set or known */
589     sh_found = 1;
590   } else if (file_exists_p(search_token)) {
591     /* search token path was found */
592     sprintf(sh_path, "%s", search_token);
593     default_shell = xstrdup(w32ify(sh_path,0));
594     if (debug_flag)
595       printf(_("find_and_set_shell setting default_shell = %s\n"), default_shell);
596     sh_found = 1;
597   } else {
598     char *p;
599     struct variable *v = lookup_variable ("Path", 4);
600
601     /*
602      * Search Path for shell
603      */
604     if (v && v->value) {
605       char *ep;
606
607       p  = v->value;
608       ep = strchr(p, PATH_SEPARATOR_CHAR);
609
610       while (ep && *ep) {
611         *ep = '\0';
612
613         if (dir_file_exists_p(p, search_token)) {
614           sprintf(sh_path, "%s/%s", p, search_token);
615           default_shell = xstrdup(w32ify(sh_path,0));
616           sh_found = 1;
617           *ep = PATH_SEPARATOR_CHAR;
618
619           /* terminate loop */
620           p += strlen(p);
621         } else {
622           *ep = PATH_SEPARATOR_CHAR;
623            p = ++ep;
624         }
625
626         ep = strchr(p, PATH_SEPARATOR_CHAR);
627       }
628
629       /* be sure to check last element of Path */
630       if (p && *p && dir_file_exists_p(p, search_token)) {
631           sprintf(sh_path, "%s/%s", p, search_token);
632           default_shell = xstrdup(w32ify(sh_path,0));
633           sh_found = 1;
634       }
635
636       if (debug_flag && sh_found)
637         printf(_("find_and_set_shell path search set default_shell = %s\n"), default_shell);
638     }
639   }
640
641   /* naive test */
642   if (!unixy_shell && sh_found &&
643       (strstr(default_shell, "sh") || strstr(default_shell, "SH"))) {
644     unixy_shell = 1;
645     batch_mode_shell = 0;
646   }
647
648 #ifdef BATCH_MODE_ONLY_SHELL
649   batch_mode_shell = 1;
650 #endif
651
652   return (sh_found);
653 }
654 #endif  /* WINDOWS32 */
655
656 #ifdef  __MSDOS__
657
658 static void
659 msdos_return_to_initial_directory ()
660 {
661   if (directory_before_chdir)
662     chdir (directory_before_chdir);
663 }
664 #endif
665
666 #ifndef _AMIGA
667 int
668 main (argc, argv, envp)
669      int argc;
670      char **argv;
671      char **envp;
672 #else
673 int main (int argc, char ** argv)
674 #endif
675 {
676   static char *stdin_nm = 0;
677   register struct file *f;
678   register unsigned int i;
679   char **p;
680   struct dep *read_makefiles;
681   PATH_VAR (current_directory);
682 #ifdef WINDOWS32
683   char *unix_path = NULL;
684   char *windows32_path = NULL;
685
686   SetUnhandledExceptionFilter(handle_runtime_exceptions);
687
688   /* start off assuming we have no shell */
689   unixy_shell = 0;
690   no_default_sh_exe = 1;
691 #endif
692
693   default_goal_file = 0;
694   reading_file = 0;
695
696 #if defined (__MSDOS__) && !defined (_POSIX_SOURCE)
697   /* Request the most powerful version of `system', to
698      make up for the dumb default shell.  */
699   __system_flags = (__system_redirect
700                     | __system_use_shell
701                     | __system_allow_multiple_cmds
702                     | __system_allow_long_cmds
703                     | __system_handle_null_commands
704                     | __system_emulate_chdir);
705
706 #endif
707
708 #if !defined (HAVE_STRSIGNAL) && !defined (HAVE_SYS_SIGLIST)
709   signame_init ();
710 #endif
711
712 #ifdef  POSIX
713   sigemptyset (&fatal_signal_set);
714 #define ADD_SIG(sig)    sigaddset (&fatal_signal_set, sig)
715 #else
716 #ifdef  HAVE_SIGSETMASK
717   fatal_signal_mask = 0;
718 #define ADD_SIG(sig)    fatal_signal_mask |= sigmask (sig)
719 #else
720 #define ADD_SIG(sig)
721 #endif
722 #endif
723
724 #define FATAL_SIG(sig)                                                        \
725   if (signal ((sig), fatal_error_signal) == SIG_IGN)                          \
726     (void) signal ((sig), SIG_IGN);                                           \
727   else                                                                        \
728     ADD_SIG (sig);
729
730 #ifdef SIGHUP
731   FATAL_SIG (SIGHUP);
732 #endif
733 #ifdef SIGQUIT
734   FATAL_SIG (SIGQUIT);
735 #endif
736   FATAL_SIG (SIGINT);
737   FATAL_SIG (SIGTERM);
738
739 #ifdef  SIGDANGER
740   FATAL_SIG (SIGDANGER);
741 #endif
742 #ifdef SIGXCPU
743   FATAL_SIG (SIGXCPU);
744 #endif
745 #ifdef SIGXFSZ
746   FATAL_SIG (SIGXFSZ);
747 #endif
748
749 #undef  FATAL_SIG
750
751   /* Do not ignore the child-death signal.  This must be done before
752      any children could possibly be created; otherwise, the wait
753      functions won't work on systems with the SVR4 ECHILD brain
754      damage, if our invoker is ignoring this signal.  */
755
756 #ifdef HAVE_WAIT_NOHANG
757 # if defined SIGCHLD
758   (void) signal (SIGCHLD, SIG_DFL);
759 # endif
760 # if defined SIGCLD && SIGCLD != SIGCHLD
761   (void) signal (SIGCLD, SIG_DFL);
762 # endif
763 #endif
764
765   /* Make sure stdout is line-buffered.  */
766
767 #ifdef  HAVE_SETLINEBUF
768   setlinebuf (stdout);
769 #else
770 #ifndef SETVBUF_REVERSED
771   setvbuf (stdout, (char *) 0, _IOLBF, BUFSIZ);
772 #else   /* setvbuf not reversed.  */
773   /* Some buggy systems lose if we pass 0 instead of allocating ourselves.  */
774   setvbuf (stdout, _IOLBF, xmalloc (BUFSIZ), BUFSIZ);
775 #endif  /* setvbuf reversed.  */
776 #endif  /* setlinebuf missing.  */
777
778   /* Figure out where this program lives.  */
779
780   if (argv[0] == 0)
781     argv[0] = "";
782   if (argv[0][0] == '\0')
783     program = "make";
784   else
785     {
786 #ifdef VMS
787       program = rindex (argv[0], ']');
788 #else
789       program = rindex (argv[0], '/');
790 #endif
791 #ifdef __MSDOS__
792       if (program == 0)
793         program = rindex (argv[0], '\\');
794       else
795         {
796           /* Some weird environments might pass us argv[0] with
797              both kinds of slashes; we must find the rightmost.  */
798           char *p = rindex (argv[0], '\\');
799           if (p && p > program)
800             program = p;
801         }
802       if (program == 0 && argv[0][1] == ':')
803         program = argv[0] + 1;
804 #endif
805       if (program == 0)
806         program = argv[0];
807       else
808         ++program;
809     }
810
811   /* Set up to access user data (files).  */
812   user_access ();
813
814   /* Figure out where we are.  */
815
816 #ifdef WINDOWS32
817   if (getcwd_fs (current_directory, GET_PATH_MAX) == 0)
818 #else
819   if (getcwd (current_directory, GET_PATH_MAX) == 0)
820 #endif
821     {
822 #ifdef  HAVE_GETCWD
823       perror_with_name ("getcwd: ", "");
824 #else
825       error (NILF, "getwd: %s", current_directory);
826 #endif
827       current_directory[0] = '\0';
828       directory_before_chdir = 0;
829     }
830   else
831     directory_before_chdir = xstrdup (current_directory);
832 #ifdef  __MSDOS__
833   /* Make sure we will return to the initial directory, come what may.  */
834   atexit (msdos_return_to_initial_directory);
835 #endif
836
837   /* Read in variables from the environment.  It is important that this be
838      done before $(MAKE) is figured out so its definitions will not be
839      from the environment.  */
840
841 #ifndef _AMIGA
842   for (i = 0; envp[i] != 0; ++i)
843     {
844       int do_not_define;
845       register char *ep = envp[i];
846
847       /* by default, everything gets defined and exported */
848       do_not_define = 0;
849
850       while (*ep != '=')
851         ++ep;
852 #ifdef WINDOWS32
853       if (!unix_path && strneq(envp[i], "PATH=", 5))
854         unix_path = ep+1;
855       else if (!windows32_path && !strnicmp(envp[i], "Path=", 5)) {
856         do_not_define = 1; /* it gets defined after loop exits */
857         windows32_path = ep+1;
858       }
859 #endif
860       /* The result of pointer arithmetic is cast to unsigned int for
861          machines where ptrdiff_t is a different size that doesn't widen
862          the same.  */
863       if (!do_not_define)
864         define_variable (envp[i], (unsigned int) (ep - envp[i]),
865                          ep + 1, o_env, 1)
866         /* Force exportation of every variable culled from the environment.
867            We used to rely on target_environment's v_default code to do this.
868            But that does not work for the case where an environment variable
869            is redefined in a makefile with `override'; it should then still
870            be exported, because it was originally in the environment.  */
871         ->export = v_export;
872     }
873 #ifdef WINDOWS32
874     /*
875      * Make sure that this particular spelling of 'Path' is available
876      */
877     if (windows32_path)
878       define_variable("Path", 4, windows32_path, o_env, 1)->export = v_export;
879     else if (unix_path)
880       define_variable("Path", 4, unix_path, o_env, 1)->export = v_export;
881     else
882       define_variable("Path", 4, "", o_env, 1)->export = v_export;
883
884     /*
885      * PATH defaults to Path iff PATH not found and Path is found.
886      */
887     if (!unix_path && windows32_path)
888       define_variable("PATH", 4, windows32_path, o_env, 1)->export = v_export;
889 #endif
890 #else /* For Amiga, read the ENV: device, ignoring all dirs */
891     {
892         BPTR env, file, old;
893         char buffer[1024];
894         int len;
895         __aligned struct FileInfoBlock fib;
896
897         env = Lock ("ENV:", ACCESS_READ);
898         if (env)
899         {
900             old = CurrentDir (DupLock(env));
901             Examine (env, &fib);
902
903             while (ExNext (env, &fib))
904             {
905                 if (fib.fib_DirEntryType < 0) /* File */
906                 {
907                     /* Define an empty variable. It will be filled in
908                         variable_lookup(). Makes startup quite a bit
909                         faster. */
910                         define_variable (fib.fib_FileName,
911                             strlen (fib.fib_FileName),
912                         "", o_env, 1)->export = v_export;
913                 }
914             }
915             UnLock (env);
916             UnLock(CurrentDir(old));
917         }
918     }
919 #endif
920
921   /* Decode the switches.  */
922
923   decode_env_switches ("MAKEFLAGS", 9);
924 #if 0
925   /* People write things like:
926         MFLAGS="CC=gcc -pipe" "CFLAGS=-g"
927      and we set the -p, -i and -e switches.  Doesn't seem quite right.  */
928   decode_env_switches ("MFLAGS", 6);
929 #endif
930   decode_switches (argc, argv, 0);
931 #ifdef WINDOWS32
932   if (suspend_flag) {
933         fprintf(stderr, "%s (pid = %d)\n", argv[0], GetCurrentProcessId());
934         fprintf(stderr, _("%s is suspending for 30 seconds..."), argv[0]);
935         Sleep(30 * 1000);
936         fprintf(stderr, _("done sleep(30). Continuing.\n"));
937   }
938 #endif
939
940   /* Print version information.  */
941
942   if (print_version_flag || print_data_base_flag || debug_flag)
943     print_version ();
944
945   /* `make --version' is supposed to just print the version and exit.  */
946   if (print_version_flag)
947     die (0);
948
949 #ifndef VMS
950   /* Set the "MAKE_COMMAND" variable to the name we were invoked with.
951      (If it is a relative pathname with a slash, prepend our directory name
952      so the result will run the same program regardless of the current dir.
953      If it is a name with no slash, we can only hope that PATH did not
954      find it in the current directory.)  */
955 #ifdef WINDOWS32
956   /*
957    * Convert from backslashes to forward slashes for
958    * programs like sh which don't like them. Shouldn't
959    * matter if the path is one way or the other for
960    * CreateProcess().
961    */
962   if (strpbrk(argv[0], "/:\\") ||
963       strstr(argv[0], "..") ||
964       strneq(argv[0], "//", 2))
965     argv[0] = xstrdup(w32ify(argv[0],1));
966 #else /* WINDOWS32 */
967 #ifdef __MSDOS__
968   if (strchr (argv[0], '\\'))
969     {
970       char *p;
971
972       argv[0] = xstrdup (argv[0]);
973       for (p = argv[0]; *p; p++)
974         if (*p == '\\')
975           *p = '/';
976     }
977   /* If argv[0] is not in absolute form, prepend the current
978      directory.  This can happen when Make is invoked by another DJGPP
979      program that uses a non-absolute name.  */
980   if (current_directory[0] != '\0'
981       && argv[0] != 0
982       && (argv[0][0] != '/' && (argv[0][0] == '\0' || argv[0][1] != ':')))
983     argv[0] = concat (current_directory, "/", argv[0]);
984 #else  /* !__MSDOS__ */
985   if (current_directory[0] != '\0'
986       && argv[0] != 0 && argv[0][0] != '/' && index (argv[0], '/') != 0)
987     argv[0] = concat (current_directory, "/", argv[0]);
988 #endif /* !__MSDOS__ */
989 #endif /* WINDOWS32 */
990 #endif
991
992   /* The extra indirection through $(MAKE_COMMAND) is done
993      for hysterical raisins.  */
994   (void) define_variable ("MAKE_COMMAND", 12, argv[0], o_default, 0);
995   (void) define_variable ("MAKE", 4, "$(MAKE_COMMAND)", o_default, 1);
996
997   if (command_variables != 0)
998     {
999       struct command_variable *cv;
1000       struct variable *v;
1001       unsigned int len = 0;
1002       char *value, *p;
1003
1004       /* Figure out how much space will be taken up by the command-line
1005          variable definitions.  */
1006       for (cv = command_variables; cv != 0; cv = cv->next)
1007         {
1008           v = cv->variable;
1009           len += 2 * strlen (v->name);
1010           if (! v->recursive)
1011             ++len;
1012           ++len;
1013           len += 3 * strlen (v->value);
1014         }
1015
1016       /* Now allocate a buffer big enough and fill it.  */
1017       p = value = (char *) alloca (len);
1018       for (cv = command_variables; cv != 0; cv = cv->next)
1019         {
1020           v = cv->variable;
1021           p = quote_as_word (p, v->name, 0);
1022           if (! v->recursive)
1023             *p++ = ':';
1024           *p++ = '=';
1025           p = quote_as_word (p, v->value, 0);
1026           *p++ = ' ';
1027         }
1028       p[-1] = '\0';             /* Kill the final space and terminate.  */
1029
1030       /* Define an unchangeable variable with a name that no POSIX.2
1031          makefile could validly use for its own variable.  */
1032       (void) define_variable ("-*-command-variables-*-", 23,
1033                               value, o_automatic, 0);
1034
1035       /* Define the variable; this will not override any user definition.
1036          Normally a reference to this variable is written into the value of
1037          MAKEFLAGS, allowing the user to override this value to affect the
1038          exported value of MAKEFLAGS.  In POSIX-pedantic mode, we cannot
1039          allow the user's setting of MAKEOVERRIDES to affect MAKEFLAGS, so
1040          a reference to this hidden variable is written instead. */
1041       (void) define_variable ("MAKEOVERRIDES", 13,
1042                               "${-*-command-variables-*-}", o_env, 1);
1043     }
1044
1045   /* If there were -C flags, move ourselves about.  */
1046   if (directories != 0)
1047     for (i = 0; directories->list[i] != 0; ++i)
1048       {
1049         char *dir = directories->list[i];
1050         if (dir[0] == '~')
1051           {
1052             char *expanded = tilde_expand (dir);
1053             if (expanded != 0)
1054               dir = expanded;
1055           }
1056         if (chdir (dir) < 0)
1057           pfatal_with_name (dir);
1058         if (dir != directories->list[i])
1059           free (dir);
1060       }
1061
1062 #ifdef WINDOWS32
1063   /*
1064    * THIS BLOCK OF CODE MUST COME AFTER chdir() CALL ABOVE IN ORDER
1065    * TO NOT CONFUSE THE DEPENDENCY CHECKING CODE IN implicit.c.
1066    *
1067    * The functions in dir.c can incorrectly cache information for "."
1068    * before we have changed directory and this can cause file
1069    * lookups to fail because the current directory (.) was pointing
1070    * at the wrong place when it was first evaluated.
1071    */
1072    no_default_sh_exe = !find_and_set_default_shell(NULL);
1073
1074 #endif /* WINDOWS32 */
1075   /* Figure out the level of recursion.  */
1076   {
1077     struct variable *v = lookup_variable ("MAKELEVEL", 9);
1078     if (v != 0 && *v->value != '\0' && *v->value != '-')
1079       makelevel = (unsigned int) atoi (v->value);
1080     else
1081       makelevel = 0;
1082   }
1083
1084   /* Except under -s, always do -w in sub-makes and under -C.  */
1085   if (!silent_flag && (directories != 0 || makelevel > 0))
1086     print_directory_flag = 1;
1087
1088   /* Let the user disable that with --no-print-directory.  */
1089   if (inhibit_print_directory_flag)
1090     print_directory_flag = 0;
1091
1092   /* If -R was given, set -r too (doesn't make sense otherwise!)  */
1093   if (no_builtin_variables_flag)
1094     no_builtin_rules_flag = 1;
1095
1096   /* Construct the list of include directories to search.  */
1097
1098   construct_include_path (include_directories == 0 ? (char **) 0
1099                           : include_directories->list);
1100
1101   /* Figure out where we are now, after chdir'ing.  */
1102   if (directories == 0)
1103     /* We didn't move, so we're still in the same place.  */
1104     starting_directory = current_directory;
1105   else
1106     {
1107 #ifdef WINDOWS32
1108       if (getcwd_fs (current_directory, GET_PATH_MAX) == 0)
1109 #else
1110       if (getcwd (current_directory, GET_PATH_MAX) == 0)
1111 #endif
1112         {
1113 #ifdef  HAVE_GETCWD
1114           perror_with_name ("getcwd: ", "");
1115 #else
1116           error (NILF, "getwd: %s", current_directory);
1117 #endif
1118           starting_directory = 0;
1119         }
1120       else
1121         starting_directory = current_directory;
1122     }
1123
1124   (void) define_variable ("CURDIR", 6, current_directory, o_default, 0);
1125
1126   /* Read any stdin makefiles into temporary files.  */
1127
1128   if (makefiles != 0)
1129     {
1130       register unsigned int i;
1131       for (i = 0; i < makefiles->idx; ++i)
1132         if (makefiles->list[i][0] == '-' && makefiles->list[i][1] == '\0')
1133           {
1134             /* This makefile is standard input.  Since we may re-exec
1135                and thus re-read the makefiles, we read standard input
1136                into a temporary file and read from that.  */
1137             FILE *outfile;
1138
1139             /* Make a unique filename.  */
1140 #ifdef HAVE_MKTEMP
1141
1142 #ifdef VMS
1143             static char name[] = "sys$scratch:GmXXXXXX";
1144 #else
1145             static char name[] = "/tmp/GmXXXXXX";
1146 #endif
1147             (void) mktemp (name);
1148 #else
1149             static char name[L_tmpnam];
1150             (void) tmpnam (name);
1151 #endif
1152
1153             if (stdin_nm)
1154               fatal (NILF, _("Makefile from standard input specified twice."));
1155
1156             outfile = fopen (name, "w");
1157             if (outfile == 0)
1158               pfatal_with_name (_("fopen (temporary file)"));
1159             while (!feof (stdin))
1160               {
1161                 char buf[2048];
1162                 unsigned int n = fread (buf, 1, sizeof (buf), stdin);
1163                 if (n > 0 && fwrite (buf, 1, n, outfile) != n)
1164                   pfatal_with_name (_("fwrite (temporary file)"));
1165               }
1166             (void) fclose (outfile);
1167
1168             /* Replace the name that read_all_makefiles will
1169                see with the name of the temporary file.  */
1170             {
1171               char *temp;
1172               /* SGI compiler requires alloca's result be assigned simply.  */
1173               temp = (char *) alloca (sizeof (name));
1174               bcopy (name, temp, sizeof (name));
1175               makefiles->list[i] = temp;
1176             }
1177
1178             /* Make sure the temporary file will not be remade.  */
1179             stdin_nm = savestring (name, sizeof (name) -1);
1180             f = enter_file (stdin_nm);
1181             f->updated = 1;
1182             f->update_status = 0;
1183             f->command_state = cs_finished;
1184             /* Can't be intermediate, or it'll be removed too early for
1185                make re-exec.  */
1186             f->intermediate = 0;
1187             f->dontcare = 0;
1188           }
1189     }
1190
1191 #if defined(MAKE_JOBSERVER) || !defined(HAVE_WAIT_NOHANG)
1192   /* Set up to handle children dying.  This must be done before
1193      reading in the makefiles so that `shell' function calls will work.
1194
1195      If we don't have a hanging wait we have to fall back to old, broken
1196      functionality here and rely on the signal handler and counting
1197      children.
1198
1199      If we're using the jobs pipe we need a signal handler so that
1200      SIGCHLD is not ignored; we need it to interrupt the read(2) of the
1201      jobserver pipe in job.c if we're waiting for a token.
1202
1203      If none of these are true, we don't need a signal handler at all.  */
1204   {
1205     extern RETSIGTYPE child_handler PARAMS ((int sig));
1206
1207 # if defined HAVE_SIGACTION
1208     struct sigaction sa;
1209
1210     bzero ((char *)&sa, sizeof (struct sigaction));
1211     sa.sa_handler = child_handler;
1212 #  if defined SA_INTERRUPT
1213     /* This is supposed to be the default, but what the heck... */
1214     sa.sa_flags = SA_INTERRUPT;
1215 #  endif
1216 #  define HANDLESIG(s) sigaction (s, &sa, NULL)
1217 # else
1218 #  define HANDLESIG(s) signal (s, child_handler)
1219 # endif
1220
1221     /* OK, now actually install the handlers.  */
1222 # if defined SIGCHLD
1223     (void) HANDLESIG (SIGCHLD);
1224 # endif
1225 # if defined SIGCLD && SIGCLD != SIGCHLD
1226     (void) HANDLESIG (SIGCLD);
1227 # endif
1228   }
1229 #endif
1230
1231   /* Let the user send us SIGUSR1 to toggle the -d flag during the run.  */
1232 #ifdef SIGUSR1
1233   (void) signal (SIGUSR1, debug_signal_handler);
1234 #endif
1235
1236   /* Define the initial list of suffixes for old-style rules.  */
1237
1238   set_default_suffixes ();
1239
1240   /* Define the file rules for the built-in suffix rules.  These will later
1241      be converted into pattern rules.  We used to do this in
1242      install_default_implicit_rules, but since that happens after reading
1243      makefiles, it results in the built-in pattern rules taking precedence
1244      over makefile-specified suffix rules, which is wrong.  */
1245
1246   install_default_suffix_rules ();
1247
1248   /* Define some internal and special variables.  */
1249
1250   define_automatic_variables ();
1251
1252   /* Set up the MAKEFLAGS and MFLAGS variables
1253      so makefiles can look at them.  */
1254
1255   define_makeflags (0, 0);
1256
1257   /* Define the default variables.  */
1258   define_default_variables ();
1259
1260   /* Read all the makefiles.  */
1261
1262   default_file = enter_file (".DEFAULT");
1263
1264   read_makefiles
1265     = read_all_makefiles (makefiles == 0 ? (char **) 0 : makefiles->list);
1266
1267 #ifdef WINDOWS32
1268   /* look one last time after reading all Makefiles */
1269   if (no_default_sh_exe)
1270     no_default_sh_exe = !find_and_set_default_shell(NULL);
1271
1272   if (no_default_sh_exe && job_slots != 1) {
1273     error (NILF, _("Do not specify -j or --jobs if sh.exe is not available."));
1274     error (NILF, _("Resetting make for single job mode."));
1275     job_slots = 1;
1276   }
1277 #endif /* WINDOWS32 */
1278
1279 #ifdef __MSDOS__
1280   /* We need to know what kind of shell we will be using.  */
1281   {
1282     extern int _is_unixy_shell (const char *_path);
1283     struct variable *shv = lookup_variable ("SHELL", 5);
1284     extern int unixy_shell;
1285     extern char *default_shell;
1286
1287     if (shv && *shv->value)
1288       {
1289         char *shell_path = recursively_expand(shv);
1290
1291         if (shell_path && _is_unixy_shell (shell_path))
1292           unixy_shell = 1;
1293         else
1294           unixy_shell = 0;
1295         if (shell_path)
1296           default_shell = shell_path;
1297       }
1298   }
1299 #endif /* __MSDOS__ */
1300
1301   /* Decode switches again, in case the variables were set by the makefile.  */
1302   decode_env_switches ("MAKEFLAGS", 9);
1303 #if 0
1304   decode_env_switches ("MFLAGS", 6);
1305 #endif
1306
1307 #ifdef __MSDOS__
1308   if (job_slots != 1)
1309     {
1310       error (NILF,
1311              _("Parallel jobs (-j) are not supported on this platform."));
1312       error (NILF, _("Resetting to single job (-j1) mode."));
1313       job_slots = 1;
1314     }
1315 #endif
1316
1317 #ifdef MAKE_JOBSERVER
1318   /* If the jobserver-fds option is seen, make sure that -j is reasonable.  */
1319
1320   if (jobserver_fds)
1321   {
1322     char *cp;
1323
1324     for (i=1; i < jobserver_fds->idx; ++i)
1325       if (!streq (jobserver_fds->list[0], jobserver_fds->list[i]))
1326         fatal (NILF, _("internal error: multiple --jobserver-fds options"));
1327
1328     /* Now parse the fds string and make sure it has the proper format.  */
1329
1330     cp = jobserver_fds->list[0];
1331
1332     if (sscanf (cp, "%d,%d", &job_fds[0], &job_fds[1]) != 2)
1333       fatal (NILF,
1334              _("internal error: invalid --jobserver-fds string `%s'"), cp);
1335
1336     /* The combination of a pipe + !job_slots means we're using the
1337        jobserver.  If !job_slots and we don't have a pipe, we can start
1338        infinite jobs.  If we see both a pipe and job_slots >0 that means the
1339        user set -j explicitly.  This is broken; in this case obey the user
1340        (ignore the jobserver pipe for this make) but print a message.  */
1341
1342     if (job_slots > 0)
1343       error (NILF,
1344              _("warning: -jN forced in submake: disabling jobserver mode."));
1345
1346     /* Create a duplicate pipe, that will be closed in the SIGCHLD
1347        handler.  If this fails with EBADF, the parent has closed the pipe
1348        on us because it didn't think we were a submake.  If so, print a
1349        warning then default to -j1.  */
1350
1351     else if ((job_rfd = dup (job_fds[0])) < 0)
1352       {
1353         if (errno != EBADF)
1354           pfatal_with_name (_("dup jobserver"));
1355
1356         error (NILF,
1357                _("warning: jobserver unavailable: using -j1.  Add `+' to parent make rule."));
1358         job_slots = 1;
1359       }
1360
1361     if (job_slots > 0)
1362       {
1363         close (job_fds[0]);
1364         close (job_fds[1]);
1365         job_fds[0] = job_fds[1] = -1;
1366         free (jobserver_fds->list);
1367         free (jobserver_fds);
1368         jobserver_fds = 0;
1369       }
1370   }
1371
1372   /* If we have >1 slot but no jobserver-fds, then we're a top-level make.
1373      Set up the pipe and install the fds option for our children.  */
1374
1375   if (job_slots > 1)
1376     {
1377       char c = '+';
1378
1379       if (pipe (job_fds) < 0 || (job_rfd = dup (job_fds[0])) < 0)
1380         pfatal_with_name (_("creating jobs pipe"));
1381
1382       /* Every make assumes that it always has one job it can run.  For the
1383          submakes it's the token they were given by their parent.  For the
1384          top make, we just subtract one from the number the user wants.  We
1385          want job_slots to be 0 to indicate we're using the jobserver.  */
1386
1387       while (--job_slots)
1388         while (write (job_fds[1], &c, 1) != 1)
1389           if (!EINTR_SET)
1390             pfatal_with_name (_("init jobserver pipe"));
1391
1392       /* Fill in the jobserver_fds struct for our children.  */
1393
1394       jobserver_fds = (struct stringlist *)
1395                         xmalloc (sizeof (struct stringlist));
1396       jobserver_fds->list = (char **) xmalloc (sizeof (char *));
1397       jobserver_fds->list[0] = xmalloc ((sizeof ("1024")*2)+1);
1398
1399       sprintf (jobserver_fds->list[0], "%d,%d", job_fds[0], job_fds[1]);
1400       jobserver_fds->idx = 1;
1401       jobserver_fds->max = 1;
1402     }
1403 #endif
1404
1405   /* Set up MAKEFLAGS and MFLAGS again, so they will be right.  */
1406
1407   define_makeflags (1, 0);
1408
1409   /* Make each `struct dep' point at the `struct file' for the file
1410      depended on.  Also do magic for special targets.  */
1411
1412   snap_deps ();
1413
1414   /* Convert old-style suffix rules to pattern rules.  It is important to
1415      do this before installing the built-in pattern rules below, so that
1416      makefile-specified suffix rules take precedence over built-in pattern
1417      rules.  */
1418
1419   convert_to_pattern ();
1420
1421   /* Install the default implicit pattern rules.
1422      This used to be done before reading the makefiles.
1423      But in that case, built-in pattern rules were in the chain
1424      before user-defined ones, so they matched first.  */
1425
1426   install_default_implicit_rules ();
1427
1428   /* Compute implicit rule limits.  */
1429
1430   count_implicit_rule_limits ();
1431
1432   /* Construct the listings of directories in VPATH lists.  */
1433
1434   build_vpath_lists ();
1435
1436   /* Mark files given with -o flags as very old (00:00:01.00 Jan 1, 1970)
1437      and as having been updated already, and files given with -W flags as
1438      brand new (time-stamp as far as possible into the future).  */
1439
1440   if (old_files != 0)
1441     for (p = old_files->list; *p != 0; ++p)
1442       {
1443         f = enter_command_line_file (*p);
1444         f->last_mtime = f->mtime_before_update = (FILE_TIMESTAMP) 1;
1445         f->updated = 1;
1446         f->update_status = 0;
1447         f->command_state = cs_finished;
1448       }
1449
1450   if (new_files != 0)
1451     {
1452       for (p = new_files->list; *p != 0; ++p)
1453         {
1454           f = enter_command_line_file (*p);
1455           f->last_mtime = f->mtime_before_update = NEW_MTIME;
1456         }
1457     }
1458
1459   /* Initialize the remote job module.  */
1460   remote_setup ();
1461
1462   if (read_makefiles != 0)
1463     {
1464       /* Update any makefiles if necessary.  */
1465
1466       FILE_TIMESTAMP *makefile_mtimes = 0;
1467       unsigned int mm_idx = 0;
1468       char **nargv = argv;
1469       int nargc = argc;
1470
1471       if (debug_flag)
1472         puts (_("Updating makefiles...."));
1473
1474       /* Remove any makefiles we don't want to try to update.
1475          Also record the current modtimes so we can compare them later.  */
1476       {
1477         register struct dep *d, *last;
1478         last = 0;
1479         d = read_makefiles;
1480         while (d != 0)
1481           {
1482             register struct file *f = d->file;
1483             if (f->double_colon)
1484               for (f = f->double_colon; f != NULL; f = f->prev)
1485                 {
1486                   if (f->deps == 0 && f->cmds != 0)
1487                     {
1488                       /* This makefile is a :: target with commands, but
1489                          no dependencies.  So, it will always be remade.
1490                          This might well cause an infinite loop, so don't
1491                          try to remake it.  (This will only happen if
1492                          your makefiles are written exceptionally
1493                          stupidly; but if you work for Athena, that's how
1494                          you write your makefiles.)  */
1495
1496                       if (debug_flag)
1497                         printf (_("Makefile `%s' might loop; not remaking it.\n"),
1498                                 f->name);
1499
1500                       if (last == 0)
1501                         read_makefiles = d->next;
1502                       else
1503                         last->next = d->next;
1504
1505                       /* Free the storage.  */
1506                       free ((char *) d);
1507
1508                       d = last == 0 ? read_makefiles : last->next;
1509
1510                       break;
1511                     }
1512                 }
1513             if (f == NULL || !f->double_colon)
1514               {
1515                 makefile_mtimes = (FILE_TIMESTAMP *)
1516                   xrealloc ((char *) makefile_mtimes,
1517                             (mm_idx + 1) * sizeof (FILE_TIMESTAMP));
1518                 makefile_mtimes[mm_idx++] = file_mtime_no_search (d->file);
1519                 last = d;
1520                 d = d->next;
1521               }
1522           }
1523       }
1524
1525       /* Set up `MAKEFLAGS' specially while remaking makefiles.  */
1526       define_makeflags (1, 1);
1527
1528       switch (update_goal_chain (read_makefiles, 1))
1529         {
1530         case 1:
1531         default:
1532 #define BOGUS_UPDATE_STATUS 0
1533           assert (BOGUS_UPDATE_STATUS);
1534           break;
1535
1536         case -1:
1537           /* Did nothing.  */
1538           break;
1539
1540         case 2:
1541           /* Failed to update.  Figure out if we care.  */
1542           {
1543             /* Nonzero if any makefile was successfully remade.  */
1544             int any_remade = 0;
1545             /* Nonzero if any makefile we care about failed
1546                in updating or could not be found at all.  */
1547             int any_failed = 0;
1548             register unsigned int i;
1549             struct dep *d;
1550
1551             for (i = 0, d = read_makefiles; d != 0; ++i, d = d->next)
1552               {
1553                 /* Reset the considered flag; we may need to look at the file
1554                    again to print an error.  */
1555                 d->file->considered = 0;
1556
1557                 if (d->file->updated)
1558                   {
1559                     /* This makefile was updated.  */
1560                     if (d->file->update_status == 0)
1561                       {
1562                         /* It was successfully updated.  */
1563                         any_remade |= (file_mtime_no_search (d->file)
1564                                        != makefile_mtimes[i]);
1565                       }
1566                     else if (! (d->changed & RM_DONTCARE))
1567                       {
1568                         FILE_TIMESTAMP mtime;
1569                         /* The update failed and this makefile was not
1570                            from the MAKEFILES variable, so we care.  */
1571                         error (NILF, _("Failed to remake makefile `%s'."),
1572                                d->file->name);
1573                         mtime = file_mtime_no_search (d->file);
1574                         any_remade |= (mtime != (FILE_TIMESTAMP) -1
1575                                        && mtime != makefile_mtimes[i]);
1576                       }
1577                   }
1578                 else
1579                   /* This makefile was not found at all.  */
1580                   if (! (d->changed & RM_DONTCARE))
1581                     {
1582                       /* This is a makefile we care about.  See how much.  */
1583                       if (d->changed & RM_INCLUDED)
1584                         /* An included makefile.  We don't need
1585                            to die, but we do want to complain.  */
1586                         error (NILF,
1587                                _("Included makefile `%s' was not found."),
1588                                dep_name (d));
1589                       else
1590                         {
1591                           /* A normal makefile.  We must die later.  */
1592                           error (NILF, _("Makefile `%s' was not found"),
1593                                  dep_name (d));
1594                           any_failed = 1;
1595                         }
1596                     }
1597               }
1598             /* Reset this to empty so we get the right error message below.  */
1599             read_makefiles = 0;
1600
1601             if (any_remade)
1602               goto re_exec;
1603             if (any_failed)
1604               die (2);
1605             break;
1606           }
1607
1608         case 0:
1609         re_exec:
1610           /* Updated successfully.  Re-exec ourselves.  */
1611
1612           remove_intermediates (0);
1613
1614           if (print_data_base_flag)
1615             print_data_base ();
1616
1617           log_working_directory (0);
1618
1619           if (makefiles != 0)
1620             {
1621               /* These names might have changed.  */
1622               register unsigned int i, j = 0;
1623               for (i = 1; i < argc; ++i)
1624                 if (strneq (argv[i], "-f", 2)) /* XXX */
1625                   {
1626                     char *p = &argv[i][2];
1627                     if (*p == '\0')
1628                       argv[++i] = makefiles->list[j];
1629                     else
1630                       argv[i] = concat ("-f", makefiles->list[j], "");
1631                     ++j;
1632                   }
1633             }
1634
1635           /* Add -o option for the stdin temporary file, if necessary.  */
1636           if (stdin_nm)
1637             {
1638               nargv = (char **) xmalloc ((nargc + 2) * sizeof (char *));
1639               bcopy ((char *) argv, (char *) nargv, argc * sizeof (char *));
1640               nargv[nargc++] = concat ("-o", stdin_nm, "");
1641               nargv[nargc] = 0;
1642             }
1643
1644           if (directories != 0 && directories->idx > 0)
1645             {
1646               char bad;
1647               if (directory_before_chdir != 0)
1648                 {
1649                   if (chdir (directory_before_chdir) < 0)
1650                     {
1651                       perror_with_name ("chdir", "");
1652                       bad = 1;
1653                     }
1654                   else
1655                     bad = 0;
1656                 }
1657               else
1658                 bad = 1;
1659               if (bad)
1660                 fatal (NILF, _("Couldn't change back to original directory."));
1661             }
1662
1663 #ifndef _AMIGA
1664           for (p = environ; *p != 0; ++p)
1665             if (strneq (*p, "MAKELEVEL=", 10))
1666               {
1667                 /* The SGI compiler apparently can't understand
1668                    the concept of storing the result of a function
1669                    in something other than a local variable.  */
1670                 char *sgi_loses;
1671                 sgi_loses = (char *) alloca (40);
1672                 *p = sgi_loses;
1673                 sprintf (*p, "MAKELEVEL=%u", makelevel);
1674                 break;
1675               }
1676 #else /* AMIGA */
1677           {
1678             char buffer[256];
1679             int len;
1680
1681             len = GetVar ("MAKELEVEL", buffer, sizeof (buffer), GVF_GLOBAL_ONLY);
1682
1683             if (len != -1)
1684             {
1685             sprintf (buffer, "%u", makelevel);
1686               SetVar ("MAKELEVEL", buffer, -1, GVF_GLOBAL_ONLY);
1687             }
1688           }
1689 #endif
1690
1691           if (debug_flag)
1692             {
1693               char **p;
1694               fputs (_("Re-executing:"), stdout);
1695               for (p = nargv; *p != 0; ++p)
1696                 printf (" %s", *p);
1697               puts ("");
1698             }
1699
1700           fflush (stdout);
1701           fflush (stderr);
1702
1703           /* Close the dup'd jobserver pipe if we opened one.  */
1704           if (job_rfd >= 0)
1705             close (job_rfd);
1706
1707 #ifndef _AMIGA
1708           exec_command (nargv, environ);
1709 #else
1710           exec_command (nargv);
1711           exit (0);
1712 #endif
1713           /* NOTREACHED */
1714         }
1715     }
1716
1717   /* Set up `MAKEFLAGS' again for the normal targets.  */
1718   define_makeflags (1, 0);
1719
1720   /* If there is a temp file from reading a makefile from stdin, get rid of
1721      it now.  */
1722   if (stdin_nm && unlink (stdin_nm) < 0 && errno != ENOENT)
1723     perror_with_name (_("unlink (temporary file): "), stdin_nm);
1724
1725   {
1726     int status;
1727
1728     /* If there were no command-line goals, use the default.  */
1729     if (goals == 0)
1730       {
1731         if (default_goal_file != 0)
1732           {
1733             goals = (struct dep *) xmalloc (sizeof (struct dep));
1734             goals->next = 0;
1735             goals->name = 0;
1736             goals->file = default_goal_file;
1737           }
1738       }
1739     else
1740       lastgoal->next = 0;
1741
1742     if (!goals)
1743       {
1744         if (read_makefiles == 0)
1745           fatal (NILF, _("No targets specified and no makefile found"));
1746
1747         fatal (NILF, _("No targets"));
1748       }
1749
1750     /* Update the goals.  */
1751
1752     if (debug_flag)
1753       puts (_("Updating goal targets...."));
1754
1755     switch (update_goal_chain (goals, 0))
1756     {
1757       case -1:
1758         /* Nothing happened.  */
1759       case 0:
1760         /* Updated successfully.  */
1761         status = EXIT_SUCCESS;
1762         break;
1763       case 2:
1764         /* Updating failed.  POSIX.2 specifies exit status >1 for this;
1765            but in VMS, there is only success and failure.  */
1766         status = EXIT_FAILURE ? 2 : EXIT_FAILURE;
1767         break;
1768       case 1:
1769         /* We are under -q and would run some commands.  */
1770         status = EXIT_FAILURE;
1771         break;
1772       default:
1773         abort ();
1774     }
1775
1776     /* If we detected some clock skew, generate one last warning */
1777     if (clock_skew_detected)
1778       error (NILF, _("*** Warning:  Clock skew detected.  Your build may be incomplete."));
1779
1780     /* Exit.  */
1781     die (status);
1782   }
1783
1784   return 0;
1785 }
1786 \f
1787 /* Parsing of arguments, decoding of switches.  */
1788
1789 static char options[1 + sizeof (switches) / sizeof (switches[0]) * 3];
1790 static struct option long_options[(sizeof (switches) / sizeof (switches[0])) +
1791                                   (sizeof (long_option_aliases) /
1792                                    sizeof (long_option_aliases[0]))];
1793
1794 /* Fill in the string and vector for getopt.  */
1795 static void
1796 init_switches ()
1797 {
1798   register char *p;
1799   register int c;
1800   register unsigned int i;
1801
1802   if (options[0] != '\0')
1803     /* Already done.  */
1804     return;
1805
1806   p = options;
1807
1808   /* Return switch and non-switch args in order, regardless of
1809      POSIXLY_CORRECT.  Non-switch args are returned as option 1.  */
1810   *p++ = '-';
1811
1812   for (i = 0; switches[i].c != '\0'; ++i)
1813     {
1814       long_options[i].name = (switches[i].long_name == 0 ? "" :
1815                               switches[i].long_name);
1816       long_options[i].flag = 0;
1817       long_options[i].val = switches[i].c;
1818       if (short_option (switches[i].c))
1819         *p++ = switches[i].c;
1820       switch (switches[i].type)
1821         {
1822         case flag:
1823         case flag_off:
1824         case ignore:
1825           long_options[i].has_arg = no_argument;
1826           break;
1827
1828         case string:
1829         case positive_int:
1830         case floating:
1831           if (short_option (switches[i].c))
1832             *p++ = ':';
1833           if (switches[i].noarg_value != 0)
1834             {
1835               if (short_option (switches[i].c))
1836                 *p++ = ':';
1837               long_options[i].has_arg = optional_argument;
1838             }
1839           else
1840             long_options[i].has_arg = required_argument;
1841           break;
1842         }
1843     }
1844   *p = '\0';
1845   for (c = 0; c < (sizeof (long_option_aliases) /
1846                    sizeof (long_option_aliases[0]));
1847        ++c)
1848     long_options[i++] = long_option_aliases[c];
1849   long_options[i].name = 0;
1850 }
1851
1852 static void
1853 handle_non_switch_argument (arg, env)
1854      char *arg;
1855      int env;
1856 {
1857   /* Non-option argument.  It might be a variable definition.  */
1858   struct variable *v;
1859   if (arg[0] == '-' && arg[1] == '\0')
1860     /* Ignore plain `-' for compatibility.  */
1861     return;
1862   v = try_variable_definition (0, arg, o_command);
1863   if (v != 0)
1864     {
1865       /* It is indeed a variable definition.  Record a pointer to
1866          the variable for later use in define_makeflags.  */
1867       struct command_variable *cv
1868         = (struct command_variable *) xmalloc (sizeof (*cv));
1869       cv->variable = v;
1870       cv->next = command_variables;
1871       command_variables = cv;
1872     }
1873   else if (! env)
1874     {
1875       /* Not an option or variable definition; it must be a goal
1876          target!  Enter it as a file and add it to the dep chain of
1877          goals.  */
1878       struct file *f = enter_command_line_file (arg);
1879       f->cmd_target = 1;
1880
1881       if (goals == 0)
1882         {
1883           goals = (struct dep *) xmalloc (sizeof (struct dep));
1884           lastgoal = goals;
1885         }
1886       else
1887         {
1888           lastgoal->next = (struct dep *) xmalloc (sizeof (struct dep));
1889           lastgoal = lastgoal->next;
1890         }
1891       lastgoal->name = 0;
1892       lastgoal->file = f;
1893
1894       {
1895         /* Add this target name to the MAKECMDGOALS variable. */
1896         struct variable *v;
1897         char *value;
1898
1899         v = lookup_variable ("MAKECMDGOALS", 12);
1900         if (v == 0)
1901           value = f->name;
1902         else
1903           {
1904             /* Paste the old and new values together */
1905             unsigned int oldlen, newlen;
1906
1907             oldlen = strlen (v->value);
1908             newlen = strlen (f->name);
1909             value = (char *) alloca (oldlen + 1 + newlen + 1);
1910             bcopy (v->value, value, oldlen);
1911             value[oldlen] = ' ';
1912             bcopy (f->name, &value[oldlen + 1], newlen + 1);
1913           }
1914         define_variable ("MAKECMDGOALS", 12, value, o_default, 0);
1915       }
1916     }
1917 }
1918
1919 /* Print a nice usage method.  */
1920
1921 static void
1922 print_usage (bad)
1923      int bad;
1924 {
1925   register const struct command_switch *cs;
1926   FILE *usageto;
1927
1928   if (print_version_flag)
1929     print_version ();
1930
1931   usageto = bad ? stderr : stdout;
1932
1933   fprintf (usageto, _("Usage: %s [options] [target] ...\n"), program);
1934
1935   fputs (_("Options:\n"), usageto);
1936   for (cs = switches; cs->c != '\0'; ++cs)
1937     {
1938       char buf[1024], shortarg[50], longarg[50], *p;
1939
1940       if (!cs->description || cs->description[0] == '-')
1941         continue;
1942
1943       switch (long_options[cs - switches].has_arg)
1944         {
1945         case no_argument:
1946           shortarg[0] = longarg[0] = '\0';
1947           break;
1948         case required_argument:
1949           sprintf (longarg, "=%s", cs->argdesc);
1950           sprintf (shortarg, " %s", cs->argdesc);
1951           break;
1952         case optional_argument:
1953           sprintf (longarg, "[=%s]", cs->argdesc);
1954           sprintf (shortarg, " [%s]", cs->argdesc);
1955           break;
1956         }
1957
1958       p = buf;
1959
1960       if (short_option (cs->c))
1961         {
1962           sprintf (buf, "  -%c%s", cs->c, shortarg);
1963           p += strlen (p);
1964         }
1965       if (cs->long_name != 0)
1966         {
1967           unsigned int i;
1968           sprintf (p, "%s--%s%s",
1969                    !short_option (cs->c) ? "  " : ", ",
1970                    cs->long_name, longarg);
1971           p += strlen (p);
1972           for (i = 0; i < (sizeof (long_option_aliases) /
1973                            sizeof (long_option_aliases[0]));
1974                ++i)
1975             if (long_option_aliases[i].val == cs->c)
1976               {
1977                 sprintf (p, ", --%s%s",
1978                          long_option_aliases[i].name, longarg);
1979                 p += strlen (p);
1980               }
1981         }
1982       {
1983         const struct command_switch *ncs = cs;
1984         while ((++ncs)->c != '\0')
1985           if (ncs->description
1986               && ncs->description[0] == '-'
1987               && ncs->description[1] == cs->c)
1988             {
1989               /* This is another switch that does the same
1990                  one as the one we are processing.  We want
1991                  to list them all together on one line.  */
1992               sprintf (p, ", -%c%s", ncs->c, shortarg);
1993               p += strlen (p);
1994               if (ncs->long_name != 0)
1995                 {
1996                   sprintf (p, ", --%s%s", ncs->long_name, longarg);
1997                   p += strlen (p);
1998                 }
1999             }
2000       }
2001
2002       if (p - buf > DESCRIPTION_COLUMN - 2)
2003         /* The list of option names is too long to fit on the same
2004            line with the description, leaving at least two spaces.
2005            Print it on its own line instead.  */
2006         {
2007           fprintf (usageto, "%s\n", buf);
2008           buf[0] = '\0';
2009         }
2010
2011       fprintf (usageto, "%*s%s.\n",
2012                - DESCRIPTION_COLUMN,
2013                buf, cs->description);
2014     }
2015 }
2016
2017 /* Decode switches from ARGC and ARGV.
2018    They came from the environment if ENV is nonzero.  */
2019
2020 static void
2021 decode_switches (argc, argv, env)
2022      int argc;
2023      char **argv;
2024      int env;
2025 {
2026   int bad = 0;
2027   register const struct command_switch *cs;
2028   register struct stringlist *sl;
2029   register int c;
2030
2031   /* getopt does most of the parsing for us.
2032      First, get its vectors set up.  */
2033
2034   init_switches ();
2035
2036   /* Let getopt produce error messages for the command line,
2037      but not for options from the environment.  */
2038   opterr = !env;
2039   /* Reset getopt's state.  */
2040   optind = 0;
2041
2042   while (optind < argc)
2043     {
2044       /* Parse the next argument.  */
2045       c = getopt_long (argc, argv, options, long_options, (int *) 0);
2046       if (c == EOF)
2047         /* End of arguments, or "--" marker seen.  */
2048         break;
2049       else if (c == 1)
2050         /* An argument not starting with a dash.  */
2051         handle_non_switch_argument (optarg, env);
2052       else if (c == '?')
2053         /* Bad option.  We will print a usage message and die later.
2054            But continue to parse the other options so the user can
2055            see all he did wrong.  */
2056         bad = 1;
2057       else
2058         for (cs = switches; cs->c != '\0'; ++cs)
2059           if (cs->c == c)
2060             {
2061               /* Whether or not we will actually do anything with
2062                  this switch.  We test this individually inside the
2063                  switch below rather than just once outside it, so that
2064                  options which are to be ignored still consume args.  */
2065               int doit = !env || cs->env;
2066
2067               switch (cs->type)
2068                 {
2069                 default:
2070                   abort ();
2071
2072                 case ignore:
2073                   break;
2074
2075                 case flag:
2076                 case flag_off:
2077                   if (doit)
2078                     *(int *) cs->value_ptr = cs->type == flag;
2079                   break;
2080
2081                 case string:
2082                   if (!doit)
2083                     break;
2084
2085                   if (optarg == 0)
2086                     optarg = cs->noarg_value;
2087
2088                   sl = *(struct stringlist **) cs->value_ptr;
2089                   if (sl == 0)
2090                     {
2091                       sl = (struct stringlist *)
2092                         xmalloc (sizeof (struct stringlist));
2093                       sl->max = 5;
2094                       sl->idx = 0;
2095                       sl->list = (char **) xmalloc (5 * sizeof (char *));
2096                       *(struct stringlist **) cs->value_ptr = sl;
2097                     }
2098                   else if (sl->idx == sl->max - 1)
2099                     {
2100                       sl->max += 5;
2101                       sl->list = (char **)
2102                         xrealloc ((char *) sl->list,
2103                                   sl->max * sizeof (char *));
2104                     }
2105                   sl->list[sl->idx++] = optarg;
2106                   sl->list[sl->idx] = 0;
2107                   break;
2108
2109                 case positive_int:
2110                   if (optarg == 0 && argc > optind
2111                       && ISDIGIT (argv[optind][0]))
2112                     optarg = argv[optind++];
2113
2114                   if (!doit)
2115                     break;
2116
2117                   if (optarg != 0)
2118                     {
2119                       int i = atoi (optarg);
2120                       if (i < 1)
2121                         {
2122                           if (doit)
2123                             error (NILF, _("the `-%c' option requires a positive integral argument"),
2124                                    cs->c);
2125                           bad = 1;
2126                         }
2127                       else
2128                         *(unsigned int *) cs->value_ptr = i;
2129                     }
2130                   else
2131                     *(unsigned int *) cs->value_ptr
2132                       = *(unsigned int *) cs->noarg_value;
2133                   break;
2134
2135 #ifndef NO_FLOAT
2136                 case floating:
2137                   if (optarg == 0 && optind < argc
2138                       && (ISDIGIT (argv[optind][0]) || argv[optind][0] == '.'))
2139                     optarg = argv[optind++];
2140
2141                   if (doit)
2142                     *(double *) cs->value_ptr
2143                       = (optarg != 0 ? atof (optarg)
2144                          : *(double *) cs->noarg_value);
2145
2146                   break;
2147 #endif
2148                 }
2149
2150               /* We've found the switch.  Stop looking.  */
2151               break;
2152             }
2153     }
2154
2155   /* There are no more options according to getting getopt, but there may
2156      be some arguments left.  Since we have asked for non-option arguments
2157      to be returned in order, this only happens when there is a "--"
2158      argument to prevent later arguments from being options.  */
2159   while (optind < argc)
2160     handle_non_switch_argument (argv[optind++], env);
2161
2162
2163   if (!env && (bad || print_usage_flag))
2164     {
2165       print_usage (bad);
2166       die (bad ? 2 : 0);
2167     }
2168 }
2169
2170 /* Decode switches from environment variable ENVAR (which is LEN chars long).
2171    We do this by chopping the value into a vector of words, prepending a
2172    dash to the first word if it lacks one, and passing the vector to
2173    decode_switches.  */
2174
2175 static void
2176 decode_env_switches (envar, len)
2177      char *envar;
2178      unsigned int len;
2179 {
2180   char *varref = (char *) alloca (2 + len + 2);
2181   char *value, *p;
2182   int argc;
2183   char **argv;
2184
2185   /* Get the variable's value.  */
2186   varref[0] = '$';
2187   varref[1] = '(';
2188   bcopy (envar, &varref[2], len);
2189   varref[2 + len] = ')';
2190   varref[2 + len + 1] = '\0';
2191   value = variable_expand (varref);
2192
2193   /* Skip whitespace, and check for an empty value.  */
2194   value = next_token (value);
2195   len = strlen (value);
2196   if (len == 0)
2197     return;
2198
2199   /* Allocate a vector that is definitely big enough.  */
2200   argv = (char **) alloca ((1 + len + 1) * sizeof (char *));
2201
2202   /* Allocate a buffer to copy the value into while we split it into words
2203      and unquote it.  We must use permanent storage for this because
2204      decode_switches may store pointers into the passed argument words.  */
2205   p = (char *) xmalloc (2 * len);
2206
2207   /* getopt will look at the arguments starting at ARGV[1].
2208      Prepend a spacer word.  */
2209   argv[0] = 0;
2210   argc = 1;
2211   argv[argc] = p;
2212   while (*value != '\0')
2213     {
2214       if (*value == '\\')
2215         ++value;                /* Skip the backslash.  */
2216       else if (isblank (*value))
2217         {
2218           /* End of the word.  */
2219           *p++ = '\0';
2220           argv[++argc] = p;
2221           do
2222             ++value;
2223           while (isblank (*value));
2224           continue;
2225         }
2226       *p++ = *value++;
2227     }
2228   *p = '\0';
2229   argv[++argc] = 0;
2230
2231   if (argv[1][0] != '-' && index (argv[1], '=') == 0)
2232     /* The first word doesn't start with a dash and isn't a variable
2233        definition.  Add a dash and pass it along to decode_switches.  We
2234        need permanent storage for this in case decode_switches saves
2235        pointers into the value.  */
2236     argv[1] = concat ("-", argv[1], "");
2237
2238   /* Parse those words.  */
2239   decode_switches (argc, argv, 1);
2240 }
2241 \f
2242 /* Quote the string IN so that it will be interpreted as a single word with
2243    no magic by the shell; if DOUBLE_DOLLARS is nonzero, also double dollar
2244    signs to avoid variable expansion in make itself.  Write the result into
2245    OUT, returning the address of the next character to be written.
2246    Allocating space for OUT twice the length of IN (thrice if
2247    DOUBLE_DOLLARS is nonzero) is always sufficient.  */
2248
2249 static char *
2250 quote_as_word (out, in, double_dollars)
2251      char *out, *in;
2252      int double_dollars;
2253 {
2254   while (*in != '\0')
2255     {
2256 #ifdef VMS
2257       if (index ("^;'\"*?$<>(){}|&~`\\ \t\r\n\f\v", *in) != 0)
2258 #else
2259       if (index ("^;'\"*?[]$<>(){}|&~`\\ \t\r\n\f\v", *in) != 0)
2260 #endif
2261         *out++ = '\\';
2262       if (double_dollars && *in == '$')
2263         *out++ = '$';
2264       *out++ = *in++;
2265     }
2266
2267   return out;
2268 }
2269
2270 /* Define the MAKEFLAGS and MFLAGS variables to reflect the settings of the
2271    command switches.  Include options with args if ALL is nonzero.
2272    Don't include options with the `no_makefile' flag set if MAKEFILE.  */
2273
2274 static void
2275 define_makeflags (all, makefile)
2276      int all, makefile;
2277 {
2278   static const char ref[] = "$(MAKEOVERRIDES)";
2279   static const char posixref[] = "$(-*-command-variables-*-)";
2280   register const struct command_switch *cs;
2281   char *flagstring;
2282   register char *p;
2283   unsigned int words;
2284   struct variable *v;
2285
2286   /* We will construct a linked list of `struct flag's describing
2287      all the flags which need to go in MAKEFLAGS.  Then, once we
2288      know how many there are and their lengths, we can put them all
2289      together in a string.  */
2290
2291   struct flag
2292     {
2293       struct flag *next;
2294       const struct command_switch *cs;
2295       char *arg;
2296     };
2297   struct flag *flags = 0;
2298   unsigned int flagslen = 0;
2299 #define ADD_FLAG(ARG, LEN) \
2300   do {                                                                        \
2301     struct flag *new = (struct flag *) alloca (sizeof (struct flag));         \
2302     new->cs = cs;                                                             \
2303     new->arg = (ARG);                                                         \
2304     new->next = flags;                                                        \
2305     flags = new;                                                              \
2306     if (new->arg == 0)                                                        \
2307       ++flagslen;               /* Just a single flag letter.  */             \
2308     else                                                                      \
2309       flagslen += 1 + 1 + 1 + 1 + 3 * (LEN); /* " -x foo" */                  \
2310     if (!short_option (cs->c))                                                \
2311       /* This switch has no single-letter version, so we use the long.  */    \
2312       flagslen += 2 + strlen (cs->long_name);                                 \
2313   } while (0)
2314
2315   for (cs = switches; cs->c != '\0'; ++cs)
2316     if (cs->toenv && (!makefile || !cs->no_makefile))
2317       switch (cs->type)
2318         {
2319         default:
2320           abort ();
2321
2322         case ignore:
2323           break;
2324
2325         case flag:
2326         case flag_off:
2327           if (!*(int *) cs->value_ptr == (cs->type == flag_off)
2328               && (cs->default_value == 0
2329                   || *(int *) cs->value_ptr != *(int *) cs->default_value))
2330             ADD_FLAG (0, 0);
2331           break;
2332
2333         case positive_int:
2334           if (all)
2335             {
2336               if ((cs->default_value != 0
2337                    && (*(unsigned int *) cs->value_ptr
2338                        == *(unsigned int *) cs->default_value)))
2339                 break;
2340               else if (cs->noarg_value != 0
2341                        && (*(unsigned int *) cs->value_ptr ==
2342                            *(unsigned int *) cs->noarg_value))
2343                 ADD_FLAG ("", 0); /* Optional value omitted; see below.  */
2344               else if (cs->c == 'j')
2345                 /* Special case for `-j'.  */
2346                 ADD_FLAG ("1", 1);
2347               else
2348                 {
2349                   char *buf = (char *) alloca (30);
2350                   sprintf (buf, "%u", *(unsigned int *) cs->value_ptr);
2351                   ADD_FLAG (buf, strlen (buf));
2352                 }
2353             }
2354           break;
2355
2356 #ifndef NO_FLOAT
2357         case floating:
2358           if (all)
2359             {
2360               if (cs->default_value != 0
2361                   && (*(double *) cs->value_ptr
2362                       == *(double *) cs->default_value))
2363                 break;
2364               else if (cs->noarg_value != 0
2365                        && (*(double *) cs->value_ptr
2366                            == *(double *) cs->noarg_value))
2367                 ADD_FLAG ("", 0); /* Optional value omitted; see below.  */
2368               else
2369                 {
2370                   char *buf = (char *) alloca (100);
2371                   sprintf (buf, "%g", *(double *) cs->value_ptr);
2372                   ADD_FLAG (buf, strlen (buf));
2373                 }
2374             }
2375           break;
2376 #endif
2377
2378         case string:
2379           if (all)
2380             {
2381               struct stringlist *sl = *(struct stringlist **) cs->value_ptr;
2382               if (sl != 0)
2383                 {
2384                   /* Add the elements in reverse order, because
2385                      all the flags get reversed below; and the order
2386                      matters for some switches (like -I).  */
2387                   register unsigned int i = sl->idx;
2388                   while (i-- > 0)
2389                     ADD_FLAG (sl->list[i], strlen (sl->list[i]));
2390                 }
2391             }
2392           break;
2393         }
2394
2395   flagslen += 4 + sizeof posixref; /* Four more for the possible " -- ".  */
2396
2397 #undef  ADD_FLAG
2398
2399   /* Construct the value in FLAGSTRING.
2400      We allocate enough space for a preceding dash and trailing null.  */
2401   flagstring = (char *) alloca (1 + flagslen + 1);
2402   bzero (flagstring, 1 + flagslen + 1);
2403   p = flagstring;
2404   words = 1;
2405   *p++ = '-';
2406   while (flags != 0)
2407     {
2408       /* Add the flag letter or name to the string.  */
2409       if (short_option (flags->cs->c))
2410         *p++ = flags->cs->c;
2411       else
2412         {
2413           if (*p != '-')
2414             {
2415               *p++ = ' ';
2416               *p++ = '-';
2417             }
2418           *p++ = '-';
2419           strcpy (p, flags->cs->long_name);
2420           p += strlen (p);
2421         }
2422       if (flags->arg != 0)
2423         {
2424           /* A flag that takes an optional argument which in this case is
2425              omitted is specified by ARG being "".  We must distinguish
2426              because a following flag appended without an intervening " -"
2427              is considered the arg for the first.  */
2428           if (flags->arg[0] != '\0')
2429             {
2430               /* Add its argument too.  */
2431               *p++ = !short_option (flags->cs->c) ? '=' : ' ';
2432               p = quote_as_word (p, flags->arg, 1);
2433             }
2434           ++words;
2435           /* Write a following space and dash, for the next flag.  */
2436           *p++ = ' ';
2437           *p++ = '-';
2438         }
2439       else if (!short_option (flags->cs->c))
2440         {
2441           ++words;
2442           /* Long options must each go in their own word,
2443              so we write the following space and dash.  */
2444           *p++ = ' ';
2445           *p++ = '-';
2446         }
2447       flags = flags->next;
2448     }
2449
2450   /* Define MFLAGS before appending variable definitions.  */
2451
2452   if (p == &flagstring[1])
2453     /* No flags.  */
2454     flagstring[0] = '\0';
2455   else if (p[-1] == '-')
2456     {
2457       /* Kill the final space and dash.  */
2458       p -= 2;
2459       *p = '\0';
2460     }
2461   else
2462     /* Terminate the string.  */
2463     *p = '\0';
2464
2465   /* Since MFLAGS is not parsed for flags, there is no reason to
2466      override any makefile redefinition.  */
2467   (void) define_variable ("MFLAGS", 6, flagstring, o_env, 1);
2468
2469   if (all && command_variables != 0)
2470     {
2471       /* Now write a reference to $(MAKEOVERRIDES), which contains all the
2472          command-line variable definitions.  */
2473
2474       if (p == &flagstring[1])
2475         /* No flags written, so elide the leading dash already written.  */
2476         p = flagstring;
2477       else
2478         {
2479           /* Separate the variables from the switches with a "--" arg.  */
2480           if (p[-1] != '-')
2481             {
2482               /* We did not already write a trailing " -".  */
2483               *p++ = ' ';
2484               *p++ = '-';
2485             }
2486           /* There is a trailing " -"; fill it out to " -- ".  */
2487           *p++ = '-';
2488           *p++ = ' ';
2489         }
2490
2491       /* Copy in the string.  */
2492       if (posix_pedantic)
2493         {
2494           bcopy (posixref, p, sizeof posixref - 1);
2495           p += sizeof posixref - 1;
2496         }
2497       else
2498         {
2499           bcopy (ref, p, sizeof ref - 1);
2500           p += sizeof ref - 1;
2501         }
2502     }
2503   else if (p == &flagstring[1])
2504     {
2505       words = 0;
2506       --p;
2507     }
2508   else if (p[-1] == '-')
2509     /* Kill the final space and dash.  */
2510     p -= 2;
2511   /* Terminate the string.  */
2512   *p = '\0';
2513
2514   v = define_variable ("MAKEFLAGS", 9,
2515                        /* If there are switches, omit the leading dash
2516                           unless it is a single long option with two
2517                           leading dashes.  */
2518                        &flagstring[(flagstring[0] == '-'
2519                                     && flagstring[1] != '-')
2520                                    ? 1 : 0],
2521                        /* This used to use o_env, but that lost when a
2522                           makefile defined MAKEFLAGS.  Makefiles set
2523                           MAKEFLAGS to add switches, but we still want
2524                           to redefine its value with the full set of
2525                           switches.  Of course, an override or command
2526                           definition will still take precedence.  */
2527                        o_file, 1);
2528   if (! all)
2529     /* The first time we are called, set MAKEFLAGS to always be exported.
2530        We should not do this again on the second call, because that is
2531        after reading makefiles which might have done `unexport MAKEFLAGS'. */
2532     v->export = v_export;
2533 }
2534 \f
2535 /* Print version information.  */
2536
2537 static void
2538 print_version ()
2539 {
2540   extern char *make_host;
2541   static int printed_version = 0;
2542
2543   char *precede = print_data_base_flag ? "# " : "";
2544
2545   if (printed_version)
2546     /* Do it only once.  */
2547     return;
2548
2549   printf ("%sGNU Make version %s", precede, version_string);
2550   if (remote_description != 0 && *remote_description != '\0')
2551     printf ("-%s", remote_description);
2552
2553   printf (_(", by Richard Stallman and Roland McGrath.\n\
2554 %sBuilt for %s\n\
2555 %sCopyright (C) 1988, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99\n\
2556 %s\tFree Software Foundation, Inc.\n\
2557 %sThis is free software; see the source for copying conditions.\n\
2558 %sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
2559 %sPARTICULAR PURPOSE.\n\n\
2560 %sReport bugs to <bug-make@gnu.org>.\n\n"),
2561           precede, make_host,
2562           precede, precede, precede, precede, precede, precede);
2563
2564   printed_version = 1;
2565
2566   /* Flush stdout so the user doesn't have to wait to see the
2567      version information while things are thought about.  */
2568   fflush (stdout);
2569 }
2570
2571 /* Print a bunch of information about this and that.  */
2572
2573 static void
2574 print_data_base ()
2575 {
2576   time_t when;
2577
2578   when = time ((time_t *) 0);
2579   printf (_("\n# Make data base, printed on %s"), ctime (&when));
2580
2581   print_variable_data_base ();
2582   print_dir_data_base ();
2583   print_rule_data_base ();
2584   print_file_data_base ();
2585   print_vpath_data_base ();
2586
2587   when = time ((time_t *) 0);
2588   printf (_("\n# Finished Make data base on %s\n"), ctime (&when));
2589 }
2590 \f
2591 /* Exit with STATUS, cleaning up as necessary.  */
2592
2593 void
2594 die (status)
2595      int status;
2596 {
2597   static char dying = 0;
2598
2599   if (!dying)
2600     {
2601       int err;
2602
2603       dying = 1;
2604
2605       if (print_version_flag)
2606         print_version ();
2607
2608       /* Wait for children to die.  */
2609       for (err = status != 0; job_slots_used > 0; err = 0)
2610         reap_children (1, err);
2611
2612       /* Let the remote job module clean up its state.  */
2613       remote_cleanup ();
2614
2615       /* Remove the intermediate files.  */
2616       remove_intermediates (0);
2617
2618       if (print_data_base_flag)
2619         print_data_base ();
2620
2621       /* Try to move back to the original directory.  This is essential on
2622          MS-DOS (where there is really only one process), and on Unix it
2623          puts core files in the original directory instead of the -C
2624          directory.  Must wait until after remove_intermediates(), or unlinks
2625          of relative pathnames fail.  */
2626       if (directory_before_chdir != 0)
2627         chdir (directory_before_chdir);
2628
2629       log_working_directory (0);
2630     }
2631
2632   exit (status);
2633 }
2634 \f
2635 /* Write a message indicating that we've just entered or
2636    left (according to ENTERING) the current directory.  */
2637
2638 void
2639 log_working_directory (entering)
2640      int entering;
2641 {
2642   static int entered = 0;
2643   char *msg = entering ? _("Entering") : _("Leaving");
2644
2645   /* Print nothing without the flag.  Don't print the entering message
2646      again if we already have.  Don't print the leaving message if we
2647      haven't printed the entering message.  */
2648   if (! print_directory_flag || entering == entered)
2649     return;
2650
2651   entered = entering;
2652
2653   if (print_data_base_flag)
2654     fputs ("# ", stdout);
2655
2656   if (makelevel == 0)
2657     printf ("%s: %s ", program, msg);
2658   else
2659     printf ("%s[%u]: %s ", program, makelevel, msg);
2660
2661   if (starting_directory == 0)
2662     puts (_("an unknown directory"));
2663   else
2664     printf (_("directory `%s'\n"), starting_directory);
2665 }