Major updates in preparation for 3.80.
[make.git] / main.c
blob798bde9dc026a40856ed42625ef82ae9a3d83a38
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.
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.
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.
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. */
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 "debug.h"
28 #include "getopt.h"
30 #include <assert.h>
31 #ifdef _AMIGA
32 # include <dos/dos.h>
33 # include <proto/dos.h>
34 #endif
35 #ifdef WINDOWS32
36 #include <windows.h>
37 #include "pathstuff.h"
38 #endif
39 #if defined(MAKE_JOBSERVER) && defined(HAVE_FCNTL_H)
40 # include <fcntl.h>
41 #endif
43 #ifdef _AMIGA
44 int __stack = 20000; /* Make sure we have 20K of stack space */
45 #endif
47 extern void init_dir PARAMS ((void));
48 extern void remote_setup PARAMS ((void));
49 extern void remote_cleanup PARAMS ((void));
50 extern RETSIGTYPE fatal_error_signal PARAMS ((int sig));
52 extern void print_variable_data_base PARAMS ((void));
53 extern void print_dir_data_base PARAMS ((void));
54 extern void print_rule_data_base PARAMS ((void));
55 extern void print_file_data_base PARAMS ((void));
56 extern void print_vpath_data_base PARAMS ((void));
58 #if defined HAVE_WAITPID || defined HAVE_WAIT3
59 # define HAVE_WAIT_NOHANG
60 #endif
62 #ifndef HAVE_UNISTD_H
63 extern int chdir ();
64 #endif
65 #ifndef STDC_HEADERS
66 # ifndef sun /* Sun has an incorrect decl in a header. */
67 extern void exit PARAMS ((int)) __attribute__ ((noreturn));
68 # endif
69 extern double atof ();
70 #endif
72 static void print_data_base PARAMS ((void));
73 static void print_version PARAMS ((void));
74 static void decode_switches PARAMS ((int argc, char **argv, int env));
75 static void decode_env_switches PARAMS ((char *envar, unsigned int len));
76 static void define_makeflags PARAMS ((int all, int makefile));
77 static char *quote_for_env PARAMS ((char *out, char *in));
79 /* The structure that describes an accepted command switch. */
81 struct command_switch
83 int c; /* The switch character. */
85 enum /* Type of the value. */
87 flag, /* Turn int flag on. */
88 flag_off, /* Turn int flag off. */
89 string, /* One string per switch. */
90 positive_int, /* A positive integer. */
91 floating, /* A floating-point number (double). */
92 ignore /* Ignored. */
93 } type;
95 char *value_ptr; /* Pointer to the value-holding variable. */
97 unsigned int env:1; /* Can come from MAKEFLAGS. */
98 unsigned int toenv:1; /* Should be put in MAKEFLAGS. */
99 unsigned int no_makefile:1; /* Don't propagate when remaking makefiles. */
101 char *noarg_value; /* Pointer to value used if no argument is given. */
102 char *default_value;/* Pointer to default value. */
104 char *long_name; /* Long option name. */
105 char *argdesc; /* Descriptive word for argument. */
106 char *description; /* Description for usage message. */
107 /* 0 means internal; don't display help. */
110 /* True if C is a switch value that corresponds to a short option. */
112 #define short_option(c) ((c) <= CHAR_MAX)
114 /* The structure used to hold the list of strings given
115 in command switches of a type that takes string arguments. */
117 struct stringlist
119 char **list; /* Nil-terminated list of strings. */
120 unsigned int idx; /* Index into above. */
121 unsigned int max; /* Number of pointers allocated. */
125 /* The recognized command switches. */
127 /* Nonzero means do not print commands to be executed (-s). */
129 int silent_flag;
131 /* Nonzero means just touch the files
132 that would appear to need remaking (-t) */
134 int touch_flag;
136 /* Nonzero means just print what commands would need to be executed,
137 don't actually execute them (-n). */
139 int just_print_flag;
141 /* Print debugging info (--debug). */
143 static struct stringlist *db_flags;
144 static int debug_flag = 0;
146 int db_level = 0;
148 #ifdef WINDOWS32
149 /* Suspend make in main for a short time to allow debugger to attach */
151 int suspend_flag = 0;
152 #endif
154 /* Environment variables override makefile definitions. */
156 int env_overrides = 0;
158 /* Nonzero means ignore status codes returned by commands
159 executed to remake files. Just treat them all as successful (-i). */
161 int ignore_errors_flag = 0;
163 /* Nonzero means don't remake anything, just print the data base
164 that results from reading the makefile (-p). */
166 int print_data_base_flag = 0;
168 /* Nonzero means don't remake anything; just return a nonzero status
169 if the specified targets are not up to date (-q). */
171 int question_flag = 0;
173 /* Nonzero means do not use any of the builtin rules (-r) / variables (-R). */
175 int no_builtin_rules_flag = 0;
176 int no_builtin_variables_flag = 0;
178 /* Nonzero means keep going even if remaking some file fails (-k). */
180 int keep_going_flag;
181 int default_keep_going_flag = 0;
183 /* Nonzero means print directory before starting and when done (-w). */
185 int print_directory_flag = 0;
187 /* Nonzero means ignore print_directory_flag and never print the directory.
188 This is necessary because print_directory_flag is set implicitly. */
190 int inhibit_print_directory_flag = 0;
192 /* Nonzero means print version information. */
194 int print_version_flag = 0;
196 /* List of makefiles given with -f switches. */
198 static struct stringlist *makefiles = 0;
200 /* Number of job slots (commands that can be run at once). */
202 unsigned int job_slots = 1;
203 unsigned int default_job_slots = 1;
205 /* Value of job_slots that means no limit. */
207 static unsigned int inf_jobs = 0;
209 /* File descriptors for the jobs pipe. */
211 static struct stringlist *jobserver_fds = 0;
213 int job_fds[2] = { -1, -1 };
214 int job_rfd = -1;
216 /* Maximum load average at which multiple jobs will be run.
217 Negative values mean unlimited, while zero means limit to
218 zero load (which could be useful to start infinite jobs remotely
219 but one at a time locally). */
220 #ifndef NO_FLOAT
221 double max_load_average = -1.0;
222 double default_load_average = -1.0;
223 #else
224 int max_load_average = -1;
225 int default_load_average = -1;
226 #endif
228 /* List of directories given with -C switches. */
230 static struct stringlist *directories = 0;
232 /* List of include directories given with -I switches. */
234 static struct stringlist *include_directories = 0;
236 /* List of files given with -o switches. */
238 static struct stringlist *old_files = 0;
240 /* List of files given with -W switches. */
242 static struct stringlist *new_files = 0;
244 /* If nonzero, we should just print usage and exit. */
246 static int print_usage_flag = 0;
248 /* If nonzero, we should print a warning message
249 for each reference to an undefined variable. */
251 int warn_undefined_variables_flag;
253 /* The table of command switches. */
255 static const struct command_switch switches[] =
257 { 'b', ignore, 0, 0, 0, 0, 0, 0,
258 0, 0,
259 N_("Ignored for compatibility") },
260 { 'C', string, (char *) &directories, 0, 0, 0, 0, 0,
261 "directory", N_("DIRECTORY"),
262 N_("Change to DIRECTORY before doing anything") },
263 { 'd', flag, (char *) &debug_flag, 1, 1, 0, 0, 0,
264 0, 0,
265 N_("Print lots of debugging information") },
266 { CHAR_MAX+1, string, (char *) &db_flags, 1, 1, 0,
267 "basic", 0,
268 "debug", N_("FLAGS"),
269 N_("Print various types of debugging information") },
270 #ifdef WINDOWS32
271 { 'D', flag, (char *) &suspend_flag, 1, 1, 0, 0, 0,
272 "suspend-for-debug", 0,
273 N_("Suspend process to allow a debugger to attach") },
274 #endif
275 { 'e', flag, (char *) &env_overrides, 1, 1, 0, 0, 0,
276 "environment-overrides", 0,
277 N_("Environment variables override makefiles") },
278 { 'f', string, (char *) &makefiles, 0, 0, 0, 0, 0,
279 "file", N_("FILE"),
280 N_("Read FILE as a makefile") },
281 { 'h', flag, (char *) &print_usage_flag, 0, 0, 0, 0, 0,
282 "help", 0,
283 N_("Print this message and exit") },
284 { 'i', flag, (char *) &ignore_errors_flag, 1, 1, 0, 0, 0,
285 "ignore-errors", 0,
286 N_("Ignore errors from commands") },
287 { 'I', string, (char *) &include_directories, 1, 1, 0, 0, 0,
288 "include-dir", N_("DIRECTORY"),
289 N_("Search DIRECTORY for included makefiles") },
290 { 'j',
291 positive_int, (char *) &job_slots, 1, 1, 0,
292 (char *) &inf_jobs, (char *) &default_job_slots,
293 "jobs", "N",
294 N_("Allow N jobs at once; infinite jobs with no arg") },
295 { CHAR_MAX+2, string, (char *) &jobserver_fds, 1, 1, 0, 0, 0,
296 "jobserver-fds", 0,
297 0 },
298 { 'k', flag, (char *) &keep_going_flag, 1, 1, 0,
299 0, (char *) &default_keep_going_flag,
300 "keep-going", 0,
301 N_("Keep going when some targets can't be made") },
302 #ifndef NO_FLOAT
303 { 'l', floating, (char *) &max_load_average, 1, 1, 0,
304 (char *) &default_load_average, (char *) &default_load_average,
305 "load-average", "N",
306 N_("Don't start multiple jobs unless load is below N") },
307 #else
308 { 'l', positive_int, (char *) &max_load_average, 1, 1, 0,
309 (char *) &default_load_average, (char *) &default_load_average,
310 "load-average", "N",
311 N_("Don't start multiple jobs unless load is below N") },
312 #endif
313 { 'm', ignore, 0, 0, 0, 0, 0, 0,
314 0, 0,
315 "-b" },
316 { 'n', flag, (char *) &just_print_flag, 1, 1, 1, 0, 0,
317 "just-print", 0,
318 N_("Don't actually run any commands; just print them") },
319 { 'o', string, (char *) &old_files, 0, 0, 0, 0, 0,
320 "old-file", N_("FILE"),
321 N_("Consider FILE to be very old and don't remake it") },
322 { 'p', flag, (char *) &print_data_base_flag, 1, 1, 0, 0, 0,
323 "print-data-base", 0,
324 N_("Print make's internal database") },
325 { 'q', flag, (char *) &question_flag, 1, 1, 1, 0, 0,
326 "question", 0,
327 N_("Run no commands; exit status says if up to date") },
328 { 'r', flag, (char *) &no_builtin_rules_flag, 1, 1, 0, 0, 0,
329 "no-builtin-rules", 0,
330 N_("Disable the built-in implicit rules") },
331 { 'R', flag, (char *) &no_builtin_variables_flag, 1, 1, 0, 0, 0,
332 "no-builtin-variables", 0,
333 N_("Disable the built-in variable settings") },
334 { 's', flag, (char *) &silent_flag, 1, 1, 0, 0, 0,
335 "silent", 0,
336 N_("Don't echo commands") },
337 { 'S', flag_off, (char *) &keep_going_flag, 1, 1, 0,
338 0, (char *) &default_keep_going_flag,
339 "no-keep-going", 0,
340 N_("Turns off -k") },
341 { 't', flag, (char *) &touch_flag, 1, 1, 1, 0, 0,
342 "touch", 0,
343 N_("Touch targets instead of remaking them") },
344 { 'v', flag, (char *) &print_version_flag, 1, 1, 0, 0, 0,
345 "version", 0,
346 N_("Print the version number of make and exit") },
347 { 'w', flag, (char *) &print_directory_flag, 1, 1, 0, 0, 0,
348 "print-directory", 0,
349 N_("Print the current directory") },
350 { CHAR_MAX+3, flag, (char *) &inhibit_print_directory_flag, 1, 1, 0, 0, 0,
351 "no-print-directory", 0,
352 N_("Turn off -w, even if it was turned on implicitly") },
353 { 'W', string, (char *) &new_files, 0, 0, 0, 0, 0,
354 "what-if", N_("FILE"),
355 N_("Consider FILE to be infinitely new") },
356 { CHAR_MAX+4, flag, (char *) &warn_undefined_variables_flag, 1, 1, 0, 0, 0,
357 "warn-undefined-variables", 0,
358 N_("Warn when an undefined variable is referenced") },
359 { '\0', }
362 /* Secondary long names for options. */
364 static struct option long_option_aliases[] =
366 { "quiet", no_argument, 0, 's' },
367 { "stop", no_argument, 0, 'S' },
368 { "new-file", required_argument, 0, 'W' },
369 { "assume-new", required_argument, 0, 'W' },
370 { "assume-old", required_argument, 0, 'o' },
371 { "max-load", optional_argument, 0, 'l' },
372 { "dry-run", no_argument, 0, 'n' },
373 { "recon", no_argument, 0, 'n' },
374 { "makefile", required_argument, 0, 'f' },
377 /* The usage message prints the descriptions of options starting in
378 this column. Make sure it leaves enough room for the longest
379 description to fit in less than 80 characters. */
381 #define DESCRIPTION_COLUMN 30
383 /* List of goal targets. */
385 static struct dep *goals, *lastgoal;
387 /* List of variables which were defined on the command line
388 (or, equivalently, in MAKEFLAGS). */
390 struct command_variable
392 struct command_variable *next;
393 struct variable *variable;
395 static struct command_variable *command_variables;
397 /* The name we were invoked with. */
399 char *program;
401 /* Our current directory before processing any -C options. */
403 char *directory_before_chdir;
405 /* Our current directory after processing all -C options. */
407 char *starting_directory;
409 /* Value of the MAKELEVEL variable at startup (or 0). */
411 unsigned int makelevel;
413 /* First file defined in the makefile whose name does not
414 start with `.'. This is the default to remake if the
415 command line does not specify. */
417 struct file *default_goal_file;
419 /* Pointer to structure for the file .DEFAULT
420 whose commands are used for any file that has none of its own.
421 This is zero if the makefiles do not define .DEFAULT. */
423 struct file *default_file;
425 /* Nonzero if we have seen the magic `.POSIX' target.
426 This turns on pedantic compliance with POSIX.2. */
428 int posix_pedantic;
430 /* Nonzero if we have seen the `.NOTPARALLEL' target.
431 This turns off parallel builds for this invocation of make. */
433 int not_parallel;
435 /* Nonzero if some rule detected clock skew; we keep track so (a) we only
436 print one warning about it during the run, and (b) we can print a final
437 warning at the end of the run. */
439 int clock_skew_detected;
441 /* Mask of signals that are being caught with fatal_error_signal. */
443 #ifdef POSIX
444 sigset_t fatal_signal_set;
445 #else
446 # ifdef HAVE_SIGSETMASK
447 int fatal_signal_mask;
448 # endif
449 #endif
451 #if !defined HAVE_BSD_SIGNAL && !defined bsd_signal
452 # if !defined HAVE_SIGACTION
453 # define bsd_signal signal
454 # else
455 typedef RETSIGTYPE (*bsd_signal_ret_t) ();
457 static bsd_signal_ret_t
458 bsd_signal (sig, func)
459 int sig;
460 bsd_signal_ret_t func;
462 struct sigaction act, oact;
463 act.sa_handler = func;
464 act.sa_flags = SA_RESTART;
465 sigemptyset (&act.sa_mask);
466 sigaddset (&act.sa_mask, sig);
467 if (sigaction (sig, &act, &oact) != 0)
468 return SIG_ERR;
469 return oact.sa_handler;
471 # endif
472 #endif
474 static struct file *
475 enter_command_line_file (name)
476 char *name;
478 if (name[0] == '\0')
479 fatal (NILF, _("empty string invalid as file name"));
481 if (name[0] == '~')
483 char *expanded = tilde_expand (name);
484 if (expanded != 0)
485 name = expanded; /* Memory leak; I don't care. */
488 /* This is also done in parse_file_seq, so this is redundant
489 for names read from makefiles. It is here for names passed
490 on the command line. */
491 while (name[0] == '.' && name[1] == '/' && name[2] != '\0')
493 name += 2;
494 while (*name == '/')
495 /* Skip following slashes: ".//foo" is "foo", not "/foo". */
496 ++name;
499 if (*name == '\0')
501 /* It was all slashes! Move back to the dot and truncate
502 it after the first slash, so it becomes just "./". */
504 --name;
505 while (name[0] != '.');
506 name[2] = '\0';
509 return enter_file (xstrdup (name));
512 /* Toggle -d on receipt of SIGUSR1. */
514 static RETSIGTYPE
515 debug_signal_handler (sig)
516 int sig;
518 db_level = db_level ? DB_NONE : DB_BASIC;
521 static void
522 decode_debug_flags ()
524 char **pp;
526 if (debug_flag)
527 db_level = DB_ALL;
529 if (!db_flags)
530 return;
532 for (pp=db_flags->list; *pp; ++pp)
534 const char *p = *pp;
536 while (1)
538 switch (tolower (p[0]))
540 case 'a':
541 db_level |= DB_ALL;
542 break;
543 case 'b':
544 db_level |= DB_BASIC;
545 break;
546 case 'i':
547 db_level |= DB_BASIC | DB_IMPLICIT;
548 break;
549 case 'j':
550 db_level |= DB_JOBS;
551 break;
552 case 'm':
553 db_level |= DB_BASIC | DB_MAKEFILES;
554 break;
555 case 'v':
556 db_level |= DB_BASIC | DB_VERBOSE;
557 break;
558 default:
559 fatal (NILF, _("unknown debug level specification `%s'"), p);
562 while (*(++p) != '\0')
563 if (*p == ',' || *p == ' ')
564 break;
566 if (*p == '\0')
567 break;
569 ++p;
574 #ifdef WINDOWS32
576 * HANDLE runtime exceptions by avoiding a requestor on the GUI. Capture
577 * exception and print it to stderr instead.
579 * If ! DB_VERBOSE, just print a simple message and exit.
580 * If DB_VERBOSE, print a more verbose message.
581 * If compiled for DEBUG, let exception pass through to GUI so that
582 * debuggers can attach.
584 LONG WINAPI
585 handle_runtime_exceptions( struct _EXCEPTION_POINTERS *exinfo )
587 PEXCEPTION_RECORD exrec = exinfo->ExceptionRecord;
588 LPSTR cmdline = GetCommandLine();
589 LPSTR prg = strtok(cmdline, " ");
590 CHAR errmsg[1024];
591 #ifdef USE_EVENT_LOG
592 HANDLE hEventSource;
593 LPTSTR lpszStrings[1];
594 #endif
596 if (! ISDB (DB_VERBOSE))
598 sprintf(errmsg,
599 _("%s: Interrupt/Exception caught (code = 0x%x, addr = 0x%x)\n"),
600 prg, exrec->ExceptionCode, exrec->ExceptionAddress);
601 fprintf(stderr, errmsg);
602 exit(255);
605 sprintf(errmsg,
606 _("\nUnhandled exception filter called from program %s\nExceptionCode = %x\nExceptionFlags = %x\nExceptionAddress = %x\n"),
607 prg, exrec->ExceptionCode, exrec->ExceptionFlags,
608 exrec->ExceptionAddress);
610 if (exrec->ExceptionCode == EXCEPTION_ACCESS_VIOLATION
611 && exrec->NumberParameters >= 2)
612 sprintf(&errmsg[strlen(errmsg)],
613 (exrec->ExceptionInformation[0]
614 ? _("Access violation: write operation at address %x\n")
615 : _("Access violation: read operation at address %x\n")),
616 exrec->ExceptionInformation[1]);
618 /* turn this on if we want to put stuff in the event log too */
619 #ifdef USE_EVENT_LOG
620 hEventSource = RegisterEventSource(NULL, "GNU Make");
621 lpszStrings[0] = errmsg;
623 if (hEventSource != NULL)
625 ReportEvent(hEventSource, /* handle of event source */
626 EVENTLOG_ERROR_TYPE, /* event type */
627 0, /* event category */
628 0, /* event ID */
629 NULL, /* current user's SID */
630 1, /* strings in lpszStrings */
631 0, /* no bytes of raw data */
632 lpszStrings, /* array of error strings */
633 NULL); /* no raw data */
635 (VOID) DeregisterEventSource(hEventSource);
637 #endif
639 /* Write the error to stderr too */
640 fprintf(stderr, errmsg);
642 #ifdef DEBUG
643 return EXCEPTION_CONTINUE_SEARCH;
644 #else
645 exit(255);
646 return (255); /* not reached */
647 #endif
651 * On WIN32 systems we don't have the luxury of a /bin directory that
652 * is mapped globally to every drive mounted to the system. Since make could
653 * be invoked from any drive, and we don't want to propogate /bin/sh
654 * to every single drive. Allow ourselves a chance to search for
655 * a value for default shell here (if the default path does not exist).
659 find_and_set_default_shell(char *token)
661 int sh_found = 0;
662 char* search_token;
663 PATH_VAR(sh_path);
664 extern char *default_shell;
666 if (!token)
667 search_token = default_shell;
668 else
669 search_token = token;
671 if (!no_default_sh_exe &&
672 (token == NULL || !strcmp(search_token, default_shell))) {
673 /* no new information, path already set or known */
674 sh_found = 1;
675 } else if (file_exists_p(search_token)) {
676 /* search token path was found */
677 sprintf(sh_path, "%s", search_token);
678 default_shell = xstrdup(w32ify(sh_path,0));
679 DB (DB_VERBOSE,
680 (_("find_and_set_shell setting default_shell = %s\n"), default_shell));
681 sh_found = 1;
682 } else {
683 char *p;
684 struct variable *v = lookup_variable ("Path", 4);
687 * Search Path for shell
689 if (v && v->value) {
690 char *ep;
692 p = v->value;
693 ep = strchr(p, PATH_SEPARATOR_CHAR);
695 while (ep && *ep) {
696 *ep = '\0';
698 if (dir_file_exists_p(p, search_token)) {
699 sprintf(sh_path, "%s/%s", p, search_token);
700 default_shell = xstrdup(w32ify(sh_path,0));
701 sh_found = 1;
702 *ep = PATH_SEPARATOR_CHAR;
704 /* terminate loop */
705 p += strlen(p);
706 } else {
707 *ep = PATH_SEPARATOR_CHAR;
708 p = ++ep;
711 ep = strchr(p, PATH_SEPARATOR_CHAR);
714 /* be sure to check last element of Path */
715 if (p && *p && dir_file_exists_p(p, search_token)) {
716 sprintf(sh_path, "%s/%s", p, search_token);
717 default_shell = xstrdup(w32ify(sh_path,0));
718 sh_found = 1;
721 if (sh_found)
722 DB (DB_VERBOSE,
723 (_("find_and_set_shell path search set default_shell = %s\n"),
724 default_shell));
728 /* naive test */
729 if (!unixy_shell && sh_found &&
730 (strstr(default_shell, "sh") || strstr(default_shell, "SH"))) {
731 unixy_shell = 1;
732 batch_mode_shell = 0;
735 #ifdef BATCH_MODE_ONLY_SHELL
736 batch_mode_shell = 1;
737 #endif
739 return (sh_found);
741 #endif /* WINDOWS32 */
743 #ifdef __MSDOS__
745 static void
746 msdos_return_to_initial_directory ()
748 if (directory_before_chdir)
749 chdir (directory_before_chdir);
751 #endif
753 extern char *mktemp ();
754 extern int mkstemp ();
756 FILE *
757 open_tmpfile(name, template)
758 char **name;
759 const char *template;
761 int fd;
763 #if defined HAVE_MKSTEMP || defined HAVE_MKTEMP
764 # define TEMPLATE_LEN strlen (template)
765 #else
766 # define TEMPLATE_LEN L_tmpnam
767 #endif
768 *name = xmalloc (TEMPLATE_LEN + 1);
769 strcpy (*name, template);
771 #if defined HAVE_MKSTEMP && defined HAVE_FDOPEN
772 /* It's safest to use mkstemp(), if we can. */
773 fd = mkstemp (*name);
774 if (fd == -1)
775 return 0;
776 return fdopen (fd, "w");
777 #else
778 # ifdef HAVE_MKTEMP
779 (void) mktemp (*name);
780 # else
781 (void) tmpnam (*name);
782 # endif
784 # ifdef HAVE_FDOPEN
785 /* Can't use mkstemp(), but guard against a race condition. */
786 fd = open (*name, O_CREAT|O_EXCL|O_WRONLY, 0600);
787 if (fd == -1)
788 return 0;
789 return fdopen (fd, "w");
790 # else
791 /* Not secure, but what can we do? */
792 return fopen (*name, "w");
793 # endif
794 #endif
798 #ifndef _AMIGA
800 main (argc, argv, envp)
801 int argc;
802 char **argv;
803 char **envp;
804 #else
805 int main (int argc, char ** argv)
806 #endif
808 static char *stdin_nm = 0;
809 register struct file *f;
810 register unsigned int i;
811 char **p;
812 struct dep *read_makefiles;
813 PATH_VAR (current_directory);
814 #ifdef WINDOWS32
815 char *unix_path = NULL;
816 char *windows32_path = NULL;
818 SetUnhandledExceptionFilter(handle_runtime_exceptions);
820 /* start off assuming we have no shell */
821 unixy_shell = 0;
822 no_default_sh_exe = 1;
823 #endif
825 default_goal_file = 0;
826 reading_file = 0;
828 #if defined (__MSDOS__) && !defined (_POSIX_SOURCE)
829 /* Request the most powerful version of `system', to
830 make up for the dumb default shell. */
831 __system_flags = (__system_redirect
832 | __system_use_shell
833 | __system_allow_multiple_cmds
834 | __system_allow_long_cmds
835 | __system_handle_null_commands
836 | __system_emulate_chdir);
838 #endif
840 /* Set up gettext/internationalization support. */
841 setlocale (LC_ALL, "");
842 bindtextdomain (PACKAGE, LOCALEDIR);
843 textdomain (PACKAGE);
845 #ifdef POSIX
846 sigemptyset (&fatal_signal_set);
847 #define ADD_SIG(sig) sigaddset (&fatal_signal_set, sig)
848 #else
849 #ifdef HAVE_SIGSETMASK
850 fatal_signal_mask = 0;
851 #define ADD_SIG(sig) fatal_signal_mask |= sigmask (sig)
852 #else
853 #define ADD_SIG(sig)
854 #endif
855 #endif
857 #define FATAL_SIG(sig) \
858 if (bsd_signal (sig, fatal_error_signal) == SIG_IGN) \
859 bsd_signal (sig, SIG_IGN); \
860 else \
861 ADD_SIG (sig);
863 #ifdef SIGHUP
864 FATAL_SIG (SIGHUP);
865 #endif
866 #ifdef SIGQUIT
867 FATAL_SIG (SIGQUIT);
868 #endif
869 FATAL_SIG (SIGINT);
870 FATAL_SIG (SIGTERM);
872 #ifdef __MSDOS__
873 /* Windows 9X delivers FP exceptions in child programs to their
874 parent! We don't want Make to die when a child divides by zero,
875 so we work around that lossage by catching SIGFPE. */
876 FATAL_SIG (SIGFPE);
877 #endif
879 #ifdef SIGDANGER
880 FATAL_SIG (SIGDANGER);
881 #endif
882 #ifdef SIGXCPU
883 FATAL_SIG (SIGXCPU);
884 #endif
885 #ifdef SIGXFSZ
886 FATAL_SIG (SIGXFSZ);
887 #endif
889 #undef FATAL_SIG
891 /* Do not ignore the child-death signal. This must be done before
892 any children could possibly be created; otherwise, the wait
893 functions won't work on systems with the SVR4 ECHILD brain
894 damage, if our invoker is ignoring this signal. */
896 #ifdef HAVE_WAIT_NOHANG
897 # if defined SIGCHLD
898 (void) bsd_signal (SIGCHLD, SIG_DFL);
899 # endif
900 # if defined SIGCLD && SIGCLD != SIGCHLD
901 (void) bsd_signal (SIGCLD, SIG_DFL);
902 # endif
903 #endif
905 /* Make sure stdout is line-buffered. */
907 #ifdef HAVE_SETVBUF
908 # ifndef SETVBUF_REVERSED
909 setvbuf (stdout, _IOLBF, xmalloc (BUFSIZ), BUFSIZ);
910 _WAIT_NOHANG
911 # if defined SIGCHLD
912 (void) bsd_signal (SIGCHLD, SIG_DFL);
913 # endif
914 # if defined SIGCLD && SIGCLD != SIGCHLD
915 (void) bsd_signal (SIGCLD, SIG_DFL);
916 # endif
917 #endif
919 /* Make sure stdout is line-buffered. */
921 #ifdef HAVE_SETVBUF
922 # ifdef SETVBUF_REVERSED
923 setvbuf (stdout, _IOLBF, xmalloc (BUFSIZ), BUFSIZ);
924 # else /* setvbuf not reversed. */
925 /* Some buggy systems lose if we pass 0 instead of allocating ourselves. */
926 setvbuf (stdout, (char *) 0, _IOLBF, BUFSIZ);
927 # endif /* setvbuf reversed. */
928 #elif HAVE_SETLINEBUF
929 setlinebuf (stdout);
930 #endif /* setlinebuf missing. */
932 /* Figure out where this program lives. */
934 if (argv[0] == 0)
935 argv[0] = "";
936 if (argv[0][0] == '\0')
937 program = "make";
938 else
940 #ifdef VMS
941 program = strrchr (argv[0], ']');
942 #else
943 program = strrchr (argv[0], '/');
944 #endif
945 #ifdef __MSDOS__
946 if (program == 0)
947 program = strrchr (argv[0], '\\');
948 else
950 /* Some weird environments might pass us argv[0] with
951 both kinds of slashes; we must find the rightmost. */
952 char *p = strrchr (argv[0], '\\');
953 if (p && p > program)
954 program = p;
956 if (program == 0 && argv[0][1] == ':')
957 program = argv[0] + 1;
958 #endif
959 if (program == 0)
960 program = argv[0];
961 else
962 ++program;
965 /* Set up to access user data (files). */
966 user_access ();
968 /* Figure out where we are. */
970 #ifdef WINDOWS32
971 if (getcwd_fs (current_directory, GET_PATH_MAX) == 0)
972 #else
973 if (getcwd (current_directory, GET_PATH_MAX) == 0)
974 #endif
976 #ifdef HAVE_GETCWD
977 perror_with_name ("getcwd: ", "");
978 #else
979 error (NILF, "getwd: %s", current_directory);
980 #endif
981 current_directory[0] = '\0';
982 directory_before_chdir = 0;
984 else
985 directory_before_chdir = xstrdup (current_directory);
986 #ifdef __MSDOS__
987 /* Make sure we will return to the initial directory, come what may. */
988 atexit (msdos_return_to_initial_directory);
989 #endif
991 /* Read in variables from the environment. It is important that this be
992 done before $(MAKE) is figured out so its definitions will not be
993 from the environment. */
995 #ifndef _AMIGA
996 for (i = 0; envp[i] != 0; ++i)
998 int do_not_define;
999 register char *ep = envp[i];
1001 /* by default, everything gets defined and exported */
1002 do_not_define = 0;
1004 while (*ep != '=')
1005 ++ep;
1006 #ifdef WINDOWS32
1007 if (!unix_path && strneq(envp[i], "PATH=", 5))
1008 unix_path = ep+1;
1009 else if (!windows32_path && !strnicmp(envp[i], "Path=", 5)) {
1010 do_not_define = 1; /* it gets defined after loop exits */
1011 windows32_path = ep+1;
1013 #endif
1014 /* The result of pointer arithmetic is cast to unsigned int for
1015 machines where ptrdiff_t is a different size that doesn't widen
1016 the same. */
1017 if (!do_not_define)
1018 define_variable (envp[i], (unsigned int) (ep - envp[i]),
1019 ep + 1, o_env, 1)
1020 /* Force exportation of every variable culled from the environment.
1021 We used to rely on target_environment's v_default code to do this.
1022 But that does not work for the case where an environment variable
1023 is redefined in a makefile with `override'; it should then still
1024 be exported, because it was originally in the environment. */
1025 ->export = v_export;
1027 #ifdef WINDOWS32
1029 * Make sure that this particular spelling of 'Path' is available
1031 if (windows32_path)
1032 define_variable("Path", 4, windows32_path, o_env, 1)->export = v_export;
1033 else if (unix_path)
1034 define_variable("Path", 4, unix_path, o_env, 1)->export = v_export;
1035 else
1036 define_variable("Path", 4, "", o_env, 1)->export = v_export;
1039 * PATH defaults to Path iff PATH not found and Path is found.
1041 if (!unix_path && windows32_path)
1042 define_variable("PATH", 4, windows32_path, o_env, 1)->export = v_export;
1043 #endif
1044 #else /* For Amiga, read the ENV: device, ignoring all dirs */
1046 BPTR env, file, old;
1047 char buffer[1024];
1048 int len;
1049 __aligned struct FileInfoBlock fib;
1051 env = Lock ("ENV:", ACCESS_READ);
1052 if (env)
1054 old = CurrentDir (DupLock(env));
1055 Examine (env, &fib);
1057 while (ExNext (env, &fib))
1059 if (fib.fib_DirEntryType < 0) /* File */
1061 /* Define an empty variable. It will be filled in
1062 variable_lookup(). Makes startup quite a bit
1063 faster. */
1064 define_variable (fib.fib_FileName,
1065 strlen (fib.fib_FileName),
1066 "", o_env, 1)->export = v_export;
1069 UnLock (env);
1070 UnLock(CurrentDir(old));
1073 #endif
1075 /* Decode the switches. */
1077 decode_env_switches ("MAKEFLAGS", 9);
1078 #if 0
1079 /* People write things like:
1080 MFLAGS="CC=gcc -pipe" "CFLAGS=-g"
1081 and we set the -p, -i and -e switches. Doesn't seem quite right. */
1082 decode_env_switches ("MFLAGS", 6);
1083 #endif
1084 decode_switches (argc, argv, 0);
1085 #ifdef WINDOWS32
1086 if (suspend_flag) {
1087 fprintf(stderr, "%s (pid = %d)\n", argv[0], GetCurrentProcessId());
1088 fprintf(stderr, _("%s is suspending for 30 seconds..."), argv[0]);
1089 Sleep(30 * 1000);
1090 fprintf(stderr, _("done sleep(30). Continuing.\n"));
1092 #endif
1094 decode_debug_flags ();
1096 /* Print version information. */
1098 if (print_version_flag || print_data_base_flag || db_level)
1099 print_version ();
1101 /* `make --version' is supposed to just print the version and exit. */
1102 if (print_version_flag)
1103 die (0);
1105 #ifndef VMS
1106 /* Set the "MAKE_COMMAND" variable to the name we were invoked with.
1107 (If it is a relative pathname with a slash, prepend our directory name
1108 so the result will run the same program regardless of the current dir.
1109 If it is a name with no slash, we can only hope that PATH did not
1110 find it in the current directory.) */
1111 #ifdef WINDOWS32
1113 * Convert from backslashes to forward slashes for
1114 * programs like sh which don't like them. Shouldn't
1115 * matter if the path is one way or the other for
1116 * CreateProcess().
1118 if (strpbrk(argv[0], "/:\\") ||
1119 strstr(argv[0], "..") ||
1120 strneq(argv[0], "//", 2))
1121 argv[0] = xstrdup(w32ify(argv[0],1));
1122 #else /* WINDOWS32 */
1123 #ifdef __MSDOS__
1124 if (strchr (argv[0], '\\'))
1126 char *p;
1128 argv[0] = xstrdup (argv[0]);
1129 for (p = argv[0]; *p; p++)
1130 if (*p == '\\')
1131 *p = '/';
1133 /* If argv[0] is not in absolute form, prepend the current
1134 directory. This can happen when Make is invoked by another DJGPP
1135 program that uses a non-absolute name. */
1136 if (current_directory[0] != '\0'
1137 && argv[0] != 0
1138 && (argv[0][0] != '/' && (argv[0][0] == '\0' || argv[0][1] != ':')))
1139 argv[0] = concat (current_directory, "/", argv[0]);
1140 #else /* !__MSDOS__ */
1141 if (current_directory[0] != '\0'
1142 && argv[0] != 0 && argv[0][0] != '/' && strchr (argv[0], '/') != 0)
1143 argv[0] = concat (current_directory, "/", argv[0]);
1144 #endif /* !__MSDOS__ */
1145 #endif /* WINDOWS32 */
1146 #endif
1148 /* The extra indirection through $(MAKE_COMMAND) is done
1149 for hysterical raisins. */
1150 (void) define_variable ("MAKE_COMMAND", 12, argv[0], o_default, 0);
1151 (void) define_variable ("MAKE", 4, "$(MAKE_COMMAND)", o_default, 1);
1153 if (command_variables != 0)
1155 struct command_variable *cv;
1156 struct variable *v;
1157 unsigned int len = 0;
1158 char *value, *p;
1160 /* Figure out how much space will be taken up by the command-line
1161 variable definitions. */
1162 for (cv = command_variables; cv != 0; cv = cv->next)
1164 v = cv->variable;
1165 len += 2 * strlen (v->name);
1166 if (! v->recursive)
1167 ++len;
1168 ++len;
1169 len += 2 * strlen (v->value);
1170 ++len;
1173 /* Now allocate a buffer big enough and fill it. */
1174 p = value = (char *) alloca (len);
1175 for (cv = command_variables; cv != 0; cv = cv->next)
1177 v = cv->variable;
1178 p = quote_for_env (p, v->name);
1179 if (! v->recursive)
1180 *p++ = ':';
1181 *p++ = '=';
1182 p = quote_for_env (p, v->value);
1183 *p++ = ' ';
1185 p[-1] = '\0'; /* Kill the final space and terminate. */
1187 /* Define an unchangeable variable with a name that no POSIX.2
1188 makefile could validly use for its own variable. */
1189 (void) define_variable ("-*-command-variables-*-", 23,
1190 value, o_automatic, 0);
1192 /* Define the variable; this will not override any user definition.
1193 Normally a reference to this variable is written into the value of
1194 MAKEFLAGS, allowing the user to override this value to affect the
1195 exported value of MAKEFLAGS. In POSIX-pedantic mode, we cannot
1196 allow the user's setting of MAKEOVERRIDES to affect MAKEFLAGS, so
1197 a reference to this hidden variable is written instead. */
1198 (void) define_variable ("MAKEOVERRIDES", 13,
1199 "${-*-command-variables-*-}", o_env, 1);
1202 /* If there were -C flags, move ourselves about. */
1203 if (directories != 0)
1204 for (i = 0; directories->list[i] != 0; ++i)
1206 char *dir = directories->list[i];
1207 if (dir[0] == '~')
1209 char *expanded = tilde_expand (dir);
1210 if (expanded != 0)
1211 dir = expanded;
1213 if (chdir (dir) < 0)
1214 pfatal_with_name (dir);
1215 if (dir != directories->list[i])
1216 free (dir);
1219 #ifdef WINDOWS32
1221 * THIS BLOCK OF CODE MUST COME AFTER chdir() CALL ABOVE IN ORDER
1222 * TO NOT CONFUSE THE DEPENDENCY CHECKING CODE IN implicit.c.
1224 * The functions in dir.c can incorrectly cache information for "."
1225 * before we have changed directory and this can cause file
1226 * lookups to fail because the current directory (.) was pointing
1227 * at the wrong place when it was first evaluated.
1229 no_default_sh_exe = !find_and_set_default_shell(NULL);
1231 #endif /* WINDOWS32 */
1232 /* Figure out the level of recursion. */
1234 struct variable *v = lookup_variable ("MAKELEVEL", 9);
1235 if (v != 0 && v->value[0] != '\0' && v->value[0] != '-')
1236 makelevel = (unsigned int) atoi (v->value);
1237 else
1238 makelevel = 0;
1241 /* Except under -s, always do -w in sub-makes and under -C. */
1242 if (!silent_flag && (directories != 0 || makelevel > 0))
1243 print_directory_flag = 1;
1245 /* Let the user disable that with --no-print-directory. */
1246 if (inhibit_print_directory_flag)
1247 print_directory_flag = 0;
1249 /* If -R was given, set -r too (doesn't make sense otherwise!) */
1250 if (no_builtin_variables_flag)
1251 no_builtin_rules_flag = 1;
1253 /* Construct the list of include directories to search. */
1255 construct_include_path (include_directories == 0 ? (char **) 0
1256 : include_directories->list);
1258 /* Figure out where we are now, after chdir'ing. */
1259 if (directories == 0)
1260 /* We didn't move, so we're still in the same place. */
1261 starting_directory = current_directory;
1262 else
1264 #ifdef WINDOWS32
1265 if (getcwd_fs (current_directory, GET_PATH_MAX) == 0)
1266 #else
1267 if (getcwd (current_directory, GET_PATH_MAX) == 0)
1268 #endif
1270 #ifdef HAVE_GETCWD
1271 perror_with_name ("getcwd: ", "");
1272 #else
1273 error (NILF, "getwd: %s", current_directory);
1274 #endif
1275 starting_directory = 0;
1277 else
1278 starting_directory = current_directory;
1281 (void) define_variable ("CURDIR", 6, current_directory, o_default, 0);
1283 /* Read any stdin makefiles into temporary files. */
1285 if (makefiles != 0)
1287 register unsigned int i;
1288 for (i = 0; i < makefiles->idx; ++i)
1289 if (makefiles->list[i][0] == '-' && makefiles->list[i][1] == '\0')
1291 /* This makefile is standard input. Since we may re-exec
1292 and thus re-read the makefiles, we read standard input
1293 into a temporary file and read from that. */
1294 FILE *outfile;
1295 char *template, *tmpdir;
1297 if (stdin_nm)
1298 fatal (NILF, _("Makefile from standard input specified twice."));
1300 #ifdef VMS
1301 # define DEFAULT_TMPDIR "sys$scratch:"
1302 #else
1303 # ifdef P_tmpdir
1304 # define DEFAULT_TMPDIR P_tmpdir
1305 # else
1306 # define DEFAULT_TMPDIR "/tmp"
1307 # endif
1308 #endif
1309 #define DEFAULT_TMPFILE "GmXXXXXX"
1311 if (((tmpdir = getenv ("TMPDIR")) == NULL || *tmpdir == '\0')
1312 #if defined __MSDOS__ || defined(WINDOWS32)
1313 /* These are also used commonly on these platforms. */
1314 && ((tmpdir = getenv ("TEMP")) == NULL || *tmpdir == '\0')
1315 && ((tmpdir = getenv ("TMP")) == NULL || *tmpdir == '\0')
1316 #endif
1318 tmpdir = DEFAULT_TMPDIR;
1320 template = (char *) alloca (strlen (tmpdir)
1321 + sizeof (DEFAULT_TMPFILE) + 1);
1322 strcpy (template, tmpdir);
1324 #if defined __MSDOS__ || defined(WINDOWS32)
1325 if (strchr ("/\\", template[strlen (template) - 1]) == NULL)
1326 strcat (template, "/");
1327 #else
1328 #ifndef VMS
1329 if (template[strlen (template) - 1] != '/')
1330 strcat (template, "/");
1331 #endif /* !VMS */
1332 #endif /* __MSDOS__ || WINDOWS32 */
1334 strcat (template, DEFAULT_TMPFILE);
1335 outfile = open_tmpfile (&stdin_nm, template);
1336 if (outfile == 0)
1337 pfatal_with_name (_("fopen (temporary file)"));
1338 while (!feof (stdin))
1340 char buf[2048];
1341 unsigned int n = fread (buf, 1, sizeof (buf), stdin);
1342 if (n > 0 && fwrite (buf, 1, n, outfile) != n)
1343 pfatal_with_name (_("fwrite (temporary file)"));
1345 (void) fclose (outfile);
1347 /* Replace the name that read_all_makefiles will
1348 see with the name of the temporary file. */
1349 makefiles->list[i] = xstrdup (stdin_nm);
1351 /* Make sure the temporary file will not be remade. */
1352 f = enter_file (stdin_nm);
1353 f->updated = 1;
1354 f->update_status = 0;
1355 f->command_state = cs_finished;
1356 /* Can't be intermediate, or it'll be removed too early for
1357 make re-exec. */
1358 f->intermediate = 0;
1359 f->dontcare = 0;
1363 #if defined(MAKE_JOBSERVER) || !defined(HAVE_WAIT_NOHANG)
1364 /* Set up to handle children dying. This must be done before
1365 reading in the makefiles so that `shell' function calls will work.
1367 If we don't have a hanging wait we have to fall back to old, broken
1368 functionality here and rely on the signal handler and counting
1369 children.
1371 If we're using the jobs pipe we need a signal handler so that
1372 SIGCHLD is not ignored; we need it to interrupt the read(2) of the
1373 jobserver pipe in job.c if we're waiting for a token.
1375 If none of these are true, we don't need a signal handler at all. */
1377 extern RETSIGTYPE child_handler PARAMS ((int sig));
1378 # if defined SIGCHLD
1379 bsd_signal (SIGCHLD, child_handler);
1380 # endif
1381 # if defined SIGCLD && SIGCLD != SIGCHLD
1382 bsd_signal (SIGCLD, child_handler);
1383 # endif
1385 #endif
1387 /* Let the user send us SIGUSR1 to toggle the -d flag during the run. */
1388 #ifdef SIGUSR1
1389 bsd_signal (SIGUSR1, debug_signal_handler);
1390 #endif
1392 /* Define the initial list of suffixes for old-style rules. */
1394 set_default_suffixes ();
1396 /* Define the file rules for the built-in suffix rules. These will later
1397 be converted into pattern rules. We used to do this in
1398 install_default_implicit_rules, but since that happens after reading
1399 makefiles, it results in the built-in pattern rules taking precedence
1400 over makefile-specified suffix rules, which is wrong. */
1402 install_default_suffix_rules ();
1404 /* Define some internal and special variables. */
1406 define_automatic_variables ();
1408 /* Set up the MAKEFLAGS and MFLAGS variables
1409 so makefiles can look at them. */
1411 define_makeflags (0, 0);
1413 /* Define the default variables. */
1414 define_default_variables ();
1416 /* Read all the makefiles. */
1418 default_file = enter_file (".DEFAULT");
1420 read_makefiles
1421 = read_all_makefiles (makefiles == 0 ? (char **) 0 : makefiles->list);
1423 #ifdef WINDOWS32
1424 /* look one last time after reading all Makefiles */
1425 if (no_default_sh_exe)
1426 no_default_sh_exe = !find_and_set_default_shell(NULL);
1428 if (no_default_sh_exe && job_slots != 1) {
1429 error (NILF, _("Do not specify -j or --jobs if sh.exe is not available."));
1430 error (NILF, _("Resetting make for single job mode."));
1431 job_slots = 1;
1433 #endif /* WINDOWS32 */
1435 #ifdef __MSDOS__
1436 /* We need to know what kind of shell we will be using. */
1438 extern int _is_unixy_shell (const char *_path);
1439 struct variable *shv = lookup_variable ("SHELL", 5);
1440 extern int unixy_shell;
1441 extern char *default_shell;
1443 if (shv && *shv->value)
1445 char *shell_path = recursively_expand(shv);
1447 if (shell_path && _is_unixy_shell (shell_path))
1448 unixy_shell = 1;
1449 else
1450 unixy_shell = 0;
1451 if (shell_path)
1452 default_shell = shell_path;
1455 #endif /* __MSDOS__ */
1457 /* Decode switches again, in case the variables were set by the makefile. */
1458 decode_env_switches ("MAKEFLAGS", 9);
1459 #if 0
1460 decode_env_switches ("MFLAGS", 6);
1461 #endif
1463 #ifdef __MSDOS__
1464 if (job_slots != 1)
1466 error (NILF,
1467 _("Parallel jobs (-j) are not supported on this platform."));
1468 error (NILF, _("Resetting to single job (-j1) mode."));
1469 job_slots = 1;
1471 #endif
1473 #ifdef MAKE_JOBSERVER
1474 /* If the jobserver-fds option is seen, make sure that -j is reasonable. */
1476 if (jobserver_fds)
1478 char *cp;
1480 for (i=1; i < jobserver_fds->idx; ++i)
1481 if (!streq (jobserver_fds->list[0], jobserver_fds->list[i]))
1482 fatal (NILF, _("internal error: multiple --jobserver-fds options"));
1484 /* Now parse the fds string and make sure it has the proper format. */
1486 cp = jobserver_fds->list[0];
1488 if (sscanf (cp, "%d,%d", &job_fds[0], &job_fds[1]) != 2)
1489 fatal (NILF,
1490 _("internal error: invalid --jobserver-fds string `%s'"), cp);
1492 /* The combination of a pipe + !job_slots means we're using the
1493 jobserver. If !job_slots and we don't have a pipe, we can start
1494 infinite jobs. If we see both a pipe and job_slots >0 that means the
1495 user set -j explicitly. This is broken; in this case obey the user
1496 (ignore the jobserver pipe for this make) but print a message. */
1498 if (job_slots > 0)
1499 error (NILF,
1500 _("warning: -jN forced in submake: disabling jobserver mode."));
1502 /* Create a duplicate pipe, that will be closed in the SIGCHLD
1503 handler. If this fails with EBADF, the parent has closed the pipe
1504 on us because it didn't think we were a submake. If so, print a
1505 warning then default to -j1. */
1507 else if ((job_rfd = dup (job_fds[0])) < 0)
1509 if (errno != EBADF)
1510 pfatal_with_name (_("dup jobserver"));
1512 error (NILF,
1513 _("warning: jobserver unavailable: using -j1. Add `+' to parent make rule."));
1514 job_slots = 1;
1517 if (job_slots > 0)
1519 close (job_fds[0]);
1520 close (job_fds[1]);
1521 job_fds[0] = job_fds[1] = -1;
1522 free (jobserver_fds->list);
1523 free (jobserver_fds);
1524 jobserver_fds = 0;
1528 /* If we have >1 slot but no jobserver-fds, then we're a top-level make.
1529 Set up the pipe and install the fds option for our children. */
1531 if (job_slots > 1)
1533 char c = '+';
1535 if (pipe (job_fds) < 0 || (job_rfd = dup (job_fds[0])) < 0)
1536 pfatal_with_name (_("creating jobs pipe"));
1538 /* Every make assumes that it always has one job it can run. For the
1539 submakes it's the token they were given by their parent. For the
1540 top make, we just subtract one from the number the user wants. We
1541 want job_slots to be 0 to indicate we're using the jobserver. */
1543 while (--job_slots)
1544 if (write (job_fds[1], &c, 1) != 1)
1545 pfatal_with_name (_("init jobserver pipe"));
1547 /* Fill in the jobserver_fds struct for our children. */
1549 jobserver_fds = (struct stringlist *)
1550 xmalloc (sizeof (struct stringlist));
1551 jobserver_fds->list = (char **) xmalloc (sizeof (char *));
1552 jobserver_fds->list[0] = xmalloc ((sizeof ("1024")*2)+1);
1554 sprintf (jobserver_fds->list[0], "%d,%d", job_fds[0], job_fds[1]);
1555 jobserver_fds->idx = 1;
1556 jobserver_fds->max = 1;
1558 #endif
1560 /* Set up MAKEFLAGS and MFLAGS again, so they will be right. */
1562 define_makeflags (1, 0);
1564 /* Make each `struct dep' point at the `struct file' for the file
1565 depended on. Also do magic for special targets. */
1567 snap_deps ();
1569 /* Convert old-style suffix rules to pattern rules. It is important to
1570 do this before installing the built-in pattern rules below, so that
1571 makefile-specified suffix rules take precedence over built-in pattern
1572 rules. */
1574 convert_to_pattern ();
1576 /* Install the default implicit pattern rules.
1577 This used to be done before reading the makefiles.
1578 But in that case, built-in pattern rules were in the chain
1579 before user-defined ones, so they matched first. */
1581 install_default_implicit_rules ();
1583 /* Compute implicit rule limits. */
1585 count_implicit_rule_limits ();
1587 /* Construct the listings of directories in VPATH lists. */
1589 build_vpath_lists ();
1591 /* Mark files given with -o flags as very old
1592 and as having been updated already, and files given with -W flags as
1593 brand new (time-stamp as far as possible into the future). */
1595 if (old_files != 0)
1596 for (p = old_files->list; *p != 0; ++p)
1598 f = enter_command_line_file (*p);
1599 f->last_mtime = f->mtime_before_update = OLD_MTIME;
1600 f->updated = 1;
1601 f->update_status = 0;
1602 f->command_state = cs_finished;
1605 if (new_files != 0)
1607 for (p = new_files->list; *p != 0; ++p)
1609 f = enter_command_line_file (*p);
1610 f->last_mtime = f->mtime_before_update = NEW_MTIME;
1614 /* Initialize the remote job module. */
1615 remote_setup ();
1617 if (read_makefiles != 0)
1619 /* Update any makefiles if necessary. */
1621 FILE_TIMESTAMP *makefile_mtimes = 0;
1622 unsigned int mm_idx = 0;
1623 char **nargv = argv;
1624 int nargc = argc;
1625 int orig_db_level = db_level;
1627 if (! ISDB (DB_MAKEFILES))
1628 db_level = DB_NONE;
1630 DB (DB_BASIC, (_("Updating makefiles....\n")));
1632 /* Remove any makefiles we don't want to try to update.
1633 Also record the current modtimes so we can compare them later. */
1635 register struct dep *d, *last;
1636 last = 0;
1637 d = read_makefiles;
1638 while (d != 0)
1640 register struct file *f = d->file;
1641 if (f->double_colon)
1642 for (f = f->double_colon; f != NULL; f = f->prev)
1644 if (f->deps == 0 && f->cmds != 0)
1646 /* This makefile is a :: target with commands, but
1647 no dependencies. So, it will always be remade.
1648 This might well cause an infinite loop, so don't
1649 try to remake it. (This will only happen if
1650 your makefiles are written exceptionally
1651 stupidly; but if you work for Athena, that's how
1652 you write your makefiles.) */
1654 DB (DB_VERBOSE,
1655 (_("Makefile `%s' might loop; not remaking it.\n"),
1656 f->name));
1658 if (last == 0)
1659 read_makefiles = d->next;
1660 else
1661 last->next = d->next;
1663 /* Free the storage. */
1664 free ((char *) d);
1666 d = last == 0 ? read_makefiles : last->next;
1668 break;
1671 if (f == NULL || !f->double_colon)
1673 makefile_mtimes = (FILE_TIMESTAMP *)
1674 xrealloc ((char *) makefile_mtimes,
1675 (mm_idx + 1) * sizeof (FILE_TIMESTAMP));
1676 makefile_mtimes[mm_idx++] = file_mtime_no_search (d->file);
1677 last = d;
1678 d = d->next;
1683 /* Set up `MAKEFLAGS' specially while remaking makefiles. */
1684 define_makeflags (1, 1);
1686 switch (update_goal_chain (read_makefiles, 1))
1688 case 1:
1689 /* The only way this can happen is if the user specified -q and asked
1690 * for one of the makefiles to be remade as a target on the command
1691 * line. Since we're not actually updating anything with -q we can
1692 * treat this as "did nothing".
1695 case -1:
1696 /* Did nothing. */
1697 break;
1699 case 2:
1700 /* Failed to update. Figure out if we care. */
1702 /* Nonzero if any makefile was successfully remade. */
1703 int any_remade = 0;
1704 /* Nonzero if any makefile we care about failed
1705 in updating or could not be found at all. */
1706 int any_failed = 0;
1707 register unsigned int i;
1708 struct dep *d;
1710 for (i = 0, d = read_makefiles; d != 0; ++i, d = d->next)
1712 /* Reset the considered flag; we may need to look at the file
1713 again to print an error. */
1714 d->file->considered = 0;
1716 if (d->file->updated)
1718 /* This makefile was updated. */
1719 if (d->file->update_status == 0)
1721 /* It was successfully updated. */
1722 any_remade |= (file_mtime_no_search (d->file)
1723 != makefile_mtimes[i]);
1725 else if (! (d->changed & RM_DONTCARE))
1727 FILE_TIMESTAMP mtime;
1728 /* The update failed and this makefile was not
1729 from the MAKEFILES variable, so we care. */
1730 error (NILF, _("Failed to remake makefile `%s'."),
1731 d->file->name);
1732 mtime = file_mtime_no_search (d->file);
1733 any_remade |= (mtime != NONEXISTENT_MTIME
1734 && mtime != makefile_mtimes[i]);
1737 else
1738 /* This makefile was not found at all. */
1739 if (! (d->changed & RM_DONTCARE))
1741 /* This is a makefile we care about. See how much. */
1742 if (d->changed & RM_INCLUDED)
1743 /* An included makefile. We don't need
1744 to die, but we do want to complain. */
1745 error (NILF,
1746 _("Included makefile `%s' was not found."),
1747 dep_name (d));
1748 else
1750 /* A normal makefile. We must die later. */
1751 error (NILF, _("Makefile `%s' was not found"),
1752 dep_name (d));
1753 any_failed = 1;
1757 /* Reset this to empty so we get the right error message below. */
1758 read_makefiles = 0;
1760 if (any_remade)
1761 goto re_exec;
1762 if (any_failed)
1763 die (2);
1764 break;
1767 case 0:
1768 re_exec:
1769 /* Updated successfully. Re-exec ourselves. */
1771 remove_intermediates (0);
1773 if (print_data_base_flag)
1774 print_data_base ();
1776 log_working_directory (0);
1778 if (makefiles != 0)
1780 /* These names might have changed. */
1781 register unsigned int i, j = 0;
1782 for (i = 1; i < argc; ++i)
1783 if (strneq (argv[i], "-f", 2)) /* XXX */
1785 char *p = &argv[i][2];
1786 if (*p == '\0')
1787 argv[++i] = makefiles->list[j];
1788 else
1789 argv[i] = concat ("-f", makefiles->list[j], "");
1790 ++j;
1794 /* Add -o option for the stdin temporary file, if necessary. */
1795 if (stdin_nm)
1797 nargv = (char **) xmalloc ((nargc + 2) * sizeof (char *));
1798 bcopy ((char *) argv, (char *) nargv, argc * sizeof (char *));
1799 nargv[nargc++] = concat ("-o", stdin_nm, "");
1800 nargv[nargc] = 0;
1803 if (directories != 0 && directories->idx > 0)
1805 char bad;
1806 if (directory_before_chdir != 0)
1808 if (chdir (directory_before_chdir) < 0)
1810 perror_with_name ("chdir", "");
1811 bad = 1;
1813 else
1814 bad = 0;
1816 else
1817 bad = 1;
1818 if (bad)
1819 fatal (NILF, _("Couldn't change back to original directory."));
1822 #ifndef _AMIGA
1823 for (p = environ; *p != 0; ++p)
1824 if (strneq (*p, "MAKELEVEL=", 10))
1826 /* The SGI compiler apparently can't understand
1827 the concept of storing the result of a function
1828 in something other than a local variable. */
1829 char *sgi_loses;
1830 sgi_loses = (char *) alloca (40);
1831 *p = sgi_loses;
1832 sprintf (*p, "MAKELEVEL=%u", makelevel);
1833 break;
1835 #else /* AMIGA */
1837 char buffer[256];
1838 int len;
1840 len = GetVar ("MAKELEVEL", buffer, sizeof (buffer), GVF_GLOBAL_ONLY);
1842 if (len != -1)
1844 sprintf (buffer, "%u", makelevel);
1845 SetVar ("MAKELEVEL", buffer, -1, GVF_GLOBAL_ONLY);
1848 #endif
1850 if (ISDB (DB_BASIC))
1852 char **p;
1853 fputs (_("Re-executing:"), stdout);
1854 for (p = nargv; *p != 0; ++p)
1855 printf (" %s", *p);
1856 putchar ('\n');
1859 fflush (stdout);
1860 fflush (stderr);
1862 /* Close the dup'd jobserver pipe if we opened one. */
1863 if (job_rfd >= 0)
1864 close (job_rfd);
1866 #ifndef _AMIGA
1867 exec_command (nargv, environ);
1868 #else
1869 exec_command (nargv);
1870 exit (0);
1871 #endif
1872 /* NOTREACHED */
1874 default:
1875 #define BOGUS_UPDATE_STATUS 0
1876 assert (BOGUS_UPDATE_STATUS);
1877 break;
1880 db_level = orig_db_level;
1883 /* Set up `MAKEFLAGS' again for the normal targets. */
1884 define_makeflags (1, 0);
1886 /* If there is a temp file from reading a makefile from stdin, get rid of
1887 it now. */
1888 if (stdin_nm && unlink (stdin_nm) < 0 && errno != ENOENT)
1889 perror_with_name (_("unlink (temporary file): "), stdin_nm);
1892 int status;
1894 /* If there were no command-line goals, use the default. */
1895 if (goals == 0)
1897 if (default_goal_file != 0)
1899 goals = (struct dep *) xmalloc (sizeof (struct dep));
1900 goals->next = 0;
1901 goals->name = 0;
1902 goals->file = default_goal_file;
1905 else
1906 lastgoal->next = 0;
1908 if (!goals)
1910 if (read_makefiles == 0)
1911 fatal (NILF, _("No targets specified and no makefile found"));
1913 fatal (NILF, _("No targets"));
1916 /* Update the goals. */
1918 DB (DB_BASIC, (_("Updating goal targets....\n")));
1920 switch (update_goal_chain (goals, 0))
1922 case -1:
1923 /* Nothing happened. */
1924 case 0:
1925 /* Updated successfully. */
1926 status = MAKE_SUCCESS;
1927 break;
1928 case 1:
1929 /* We are under -q and would run some commands. */
1930 status = MAKE_TROUBLE;
1931 break;
1932 case 2:
1933 /* Updating failed. POSIX.2 specifies exit status >1 for this;
1934 but in VMS, there is only success and failure. */
1935 status = MAKE_FAILURE;
1936 break;
1937 default:
1938 abort ();
1941 /* If we detected some clock skew, generate one last warning */
1942 if (clock_skew_detected)
1943 error (NILF,
1944 _("warning: Clock skew detected. Your build may be incomplete."));
1946 /* Exit. */
1947 die (status);
1950 return 0;
1953 /* Parsing of arguments, decoding of switches. */
1955 static char options[1 + sizeof (switches) / sizeof (switches[0]) * 3];
1956 static struct option long_options[(sizeof (switches) / sizeof (switches[0])) +
1957 (sizeof (long_option_aliases) /
1958 sizeof (long_option_aliases[0]))];
1960 /* Fill in the string and vector for getopt. */
1961 static void
1962 init_switches ()
1964 register char *p;
1965 register int c;
1966 register unsigned int i;
1968 if (options[0] != '\0')
1969 /* Already done. */
1970 return;
1972 p = options;
1974 /* Return switch and non-switch args in order, regardless of
1975 POSIXLY_CORRECT. Non-switch args are returned as option 1. */
1976 *p++ = '-';
1978 for (i = 0; switches[i].c != '\0'; ++i)
1980 long_options[i].name = (switches[i].long_name == 0 ? "" :
1981 switches[i].long_name);
1982 long_options[i].flag = 0;
1983 long_options[i].val = switches[i].c;
1984 if (short_option (switches[i].c))
1985 *p++ = switches[i].c;
1986 switch (switches[i].type)
1988 case flag:
1989 case flag_off:
1990 case ignore:
1991 long_options[i].has_arg = no_argument;
1992 break;
1994 case string:
1995 case positive_int:
1996 case floating:
1997 if (short_option (switches[i].c))
1998 *p++ = ':';
1999 if (switches[i].noarg_value != 0)
2001 if (short_option (switches[i].c))
2002 *p++ = ':';
2003 long_options[i].has_arg = optional_argument;
2005 else
2006 long_options[i].has_arg = required_argument;
2007 break;
2010 *p = '\0';
2011 for (c = 0; c < (sizeof (long_option_aliases) /
2012 sizeof (long_option_aliases[0]));
2013 ++c)
2014 long_options[i++] = long_option_aliases[c];
2015 long_options[i].name = 0;
2018 static void
2019 handle_non_switch_argument (arg, env)
2020 char *arg;
2021 int env;
2023 /* Non-option argument. It might be a variable definition. */
2024 struct variable *v;
2025 if (arg[0] == '-' && arg[1] == '\0')
2026 /* Ignore plain `-' for compatibility. */
2027 return;
2028 v = try_variable_definition (0, arg, o_command, 0);
2029 if (v != 0)
2031 /* It is indeed a variable definition. Record a pointer to
2032 the variable for later use in define_makeflags. */
2033 struct command_variable *cv
2034 = (struct command_variable *) xmalloc (sizeof (*cv));
2035 cv->variable = v;
2036 cv->next = command_variables;
2037 command_variables = cv;
2039 else if (! env)
2041 /* Not an option or variable definition; it must be a goal
2042 target! Enter it as a file and add it to the dep chain of
2043 goals. */
2044 struct file *f = enter_command_line_file (arg);
2045 f->cmd_target = 1;
2047 if (goals == 0)
2049 goals = (struct dep *) xmalloc (sizeof (struct dep));
2050 lastgoal = goals;
2052 else
2054 lastgoal->next = (struct dep *) xmalloc (sizeof (struct dep));
2055 lastgoal = lastgoal->next;
2057 lastgoal->name = 0;
2058 lastgoal->file = f;
2061 /* Add this target name to the MAKECMDGOALS variable. */
2062 struct variable *v;
2063 char *value;
2065 v = lookup_variable ("MAKECMDGOALS", 12);
2066 if (v == 0)
2067 value = f->name;
2068 else
2070 /* Paste the old and new values together */
2071 unsigned int oldlen, newlen;
2073 oldlen = strlen (v->value);
2074 newlen = strlen (f->name);
2075 value = (char *) alloca (oldlen + 1 + newlen + 1);
2076 bcopy (v->value, value, oldlen);
2077 value[oldlen] = ' ';
2078 bcopy (f->name, &value[oldlen + 1], newlen + 1);
2080 define_variable ("MAKECMDGOALS", 12, value, o_default, 0);
2085 /* Print a nice usage method. */
2087 static void
2088 print_usage (bad)
2089 int bad;
2091 extern char *make_host;
2092 register const struct command_switch *cs;
2093 FILE *usageto;
2095 if (print_version_flag)
2096 print_version ();
2098 usageto = bad ? stderr : stdout;
2100 fprintf (usageto, _("Usage: %s [options] [target] ...\n"), program);
2102 fputs (_("Options:\n"), usageto);
2103 for (cs = switches; cs->c != '\0'; ++cs)
2105 char buf[1024], shortarg[50], longarg[50], *p;
2107 if (!cs->description || cs->description[0] == '-')
2108 continue;
2110 switch (long_options[cs - switches].has_arg)
2112 case no_argument:
2113 shortarg[0] = longarg[0] = '\0';
2114 break;
2115 case required_argument:
2116 sprintf (longarg, "=%s", gettext (cs->argdesc));
2117 sprintf (shortarg, " %s", gettext (cs->argdesc));
2118 break;
2119 case optional_argument:
2120 sprintf (longarg, "[=%s]", gettext (cs->argdesc));
2121 sprintf (shortarg, " [%s]", gettext (cs->argdesc));
2122 break;
2125 p = buf;
2127 if (short_option (cs->c))
2129 sprintf (buf, " -%c%s", cs->c, shortarg);
2130 p += strlen (p);
2132 if (cs->long_name != 0)
2134 unsigned int i;
2135 sprintf (p, "%s--%s%s",
2136 !short_option (cs->c) ? " " : ", ",
2137 cs->long_name, longarg);
2138 p += strlen (p);
2139 for (i = 0; i < (sizeof (long_option_aliases) /
2140 sizeof (long_option_aliases[0]));
2141 ++i)
2142 if (long_option_aliases[i].val == cs->c)
2144 sprintf (p, ", --%s%s",
2145 long_option_aliases[i].name, longarg);
2146 p += strlen (p);
2150 const struct command_switch *ncs = cs;
2151 while ((++ncs)->c != '\0')
2152 if (ncs->description
2153 && ncs->description[0] == '-'
2154 && ncs->description[1] == cs->c)
2156 /* This is another switch that does the same
2157 one as the one we are processing. We want
2158 to list them all together on one line. */
2159 sprintf (p, ", -%c%s", ncs->c, shortarg);
2160 p += strlen (p);
2161 if (ncs->long_name != 0)
2163 sprintf (p, ", --%s%s", ncs->long_name, longarg);
2164 p += strlen (p);
2169 if (p - buf > DESCRIPTION_COLUMN - 2)
2170 /* The list of option names is too long to fit on the same
2171 line with the description, leaving at least two spaces.
2172 Print it on its own line instead. */
2174 fprintf (usageto, "%s\n", buf);
2175 buf[0] = '\0';
2178 fprintf (usageto, "%*s%s.\n",
2179 - DESCRIPTION_COLUMN,
2180 buf, gettext (cs->description));
2183 fprintf (usageto, _("\nBuilt for %s"), make_host);
2184 if (remote_description != 0 && *remote_description != '\0')
2185 fprintf (usageto, " (%s)", remote_description);
2186 fprintf (usageto, _("\nReport bugs to <bug-make@gnu.org>\n"));
2189 /* Decode switches from ARGC and ARGV.
2190 They came from the environment if ENV is nonzero. */
2192 static void
2193 decode_switches (argc, argv, env)
2194 int argc;
2195 char **argv;
2196 int env;
2198 int bad = 0;
2199 register const struct command_switch *cs;
2200 register struct stringlist *sl;
2201 register int c;
2203 /* getopt does most of the parsing for us.
2204 First, get its vectors set up. */
2206 init_switches ();
2208 /* Let getopt produce error messages for the command line,
2209 but not for options from the environment. */
2210 opterr = !env;
2211 /* Reset getopt's state. */
2212 optind = 0;
2214 while (optind < argc)
2216 /* Parse the next argument. */
2217 c = getopt_long (argc, argv, options, long_options, (int *) 0);
2218 if (c == EOF)
2219 /* End of arguments, or "--" marker seen. */
2220 break;
2221 else if (c == 1)
2222 /* An argument not starting with a dash. */
2223 handle_non_switch_argument (optarg, env);
2224 else if (c == '?')
2225 /* Bad option. We will print a usage message and die later.
2226 But continue to parse the other options so the user can
2227 see all he did wrong. */
2228 bad = 1;
2229 else
2230 for (cs = switches; cs->c != '\0'; ++cs)
2231 if (cs->c == c)
2233 /* Whether or not we will actually do anything with
2234 this switch. We test this individually inside the
2235 switch below rather than just once outside it, so that
2236 options which are to be ignored still consume args. */
2237 int doit = !env || cs->env;
2239 switch (cs->type)
2241 default:
2242 abort ();
2244 case ignore:
2245 break;
2247 case flag:
2248 case flag_off:
2249 if (doit)
2250 *(int *) cs->value_ptr = cs->type == flag;
2251 break;
2253 case string:
2254 if (!doit)
2255 break;
2257 if (optarg == 0)
2258 optarg = cs->noarg_value;
2260 sl = *(struct stringlist **) cs->value_ptr;
2261 if (sl == 0)
2263 sl = (struct stringlist *)
2264 xmalloc (sizeof (struct stringlist));
2265 sl->max = 5;
2266 sl->idx = 0;
2267 sl->list = (char **) xmalloc (5 * sizeof (char *));
2268 *(struct stringlist **) cs->value_ptr = sl;
2270 else if (sl->idx == sl->max - 1)
2272 sl->max += 5;
2273 sl->list = (char **)
2274 xrealloc ((char *) sl->list,
2275 sl->max * sizeof (char *));
2277 sl->list[sl->idx++] = optarg;
2278 sl->list[sl->idx] = 0;
2279 break;
2281 case positive_int:
2282 /* See if we have an option argument; if we do require that
2283 it's all digits, not something like "10foo". */
2284 if (optarg == 0 && argc > optind)
2286 const char *cp;
2287 for (cp=argv[optind]; ISDIGIT (cp[0]); ++cp)
2289 if (cp[0] == '\0')
2290 optarg = argv[optind++];
2293 if (!doit)
2294 break;
2296 if (optarg != 0)
2298 int i = atoi (optarg);
2299 const char *cp;
2301 /* Yes, I realize we're repeating this in some cases. */
2302 for (cp = optarg; ISDIGIT (cp[0]); ++cp)
2305 if (i < 1 || cp[0] != '\0')
2307 error (NILF, _("the `-%c' option requires a positive integral argument"),
2308 cs->c);
2309 bad = 1;
2311 else
2312 *(unsigned int *) cs->value_ptr = i;
2314 else
2315 *(unsigned int *) cs->value_ptr
2316 = *(unsigned int *) cs->noarg_value;
2317 break;
2319 #ifndef NO_FLOAT
2320 case floating:
2321 if (optarg == 0 && optind < argc
2322 && (ISDIGIT (argv[optind][0]) || argv[optind][0] == '.'))
2323 optarg = argv[optind++];
2325 if (doit)
2326 *(double *) cs->value_ptr
2327 = (optarg != 0 ? atof (optarg)
2328 : *(double *) cs->noarg_value);
2330 break;
2331 #endif
2334 /* We've found the switch. Stop looking. */
2335 break;
2339 /* There are no more options according to getting getopt, but there may
2340 be some arguments left. Since we have asked for non-option arguments
2341 to be returned in order, this only happens when there is a "--"
2342 argument to prevent later arguments from being options. */
2343 while (optind < argc)
2344 handle_non_switch_argument (argv[optind++], env);
2347 if (!env && (bad || print_usage_flag))
2349 print_usage (bad);
2350 die (bad ? 2 : 0);
2354 /* Decode switches from environment variable ENVAR (which is LEN chars long).
2355 We do this by chopping the value into a vector of words, prepending a
2356 dash to the first word if it lacks one, and passing the vector to
2357 decode_switches. */
2359 static void
2360 decode_env_switches (envar, len)
2361 char *envar;
2362 unsigned int len;
2364 char *varref = (char *) alloca (2 + len + 2);
2365 char *value, *p;
2366 int argc;
2367 char **argv;
2369 /* Get the variable's value. */
2370 varref[0] = '$';
2371 varref[1] = '(';
2372 bcopy (envar, &varref[2], len);
2373 varref[2 + len] = ')';
2374 varref[2 + len + 1] = '\0';
2375 value = variable_expand (varref);
2377 /* Skip whitespace, and check for an empty value. */
2378 value = next_token (value);
2379 len = strlen (value);
2380 if (len == 0)
2381 return;
2383 /* Allocate a vector that is definitely big enough. */
2384 argv = (char **) alloca ((1 + len + 1) * sizeof (char *));
2386 /* Allocate a buffer to copy the value into while we split it into words
2387 and unquote it. We must use permanent storage for this because
2388 decode_switches may store pointers into the passed argument words. */
2389 p = (char *) xmalloc (2 * len);
2391 /* getopt will look at the arguments starting at ARGV[1].
2392 Prepend a spacer word. */
2393 argv[0] = 0;
2394 argc = 1;
2395 argv[argc] = p;
2396 while (*value != '\0')
2398 if (*value == '\\' && value[1] != '\0')
2399 ++value; /* Skip the backslash. */
2400 else if (isblank ((unsigned char)*value))
2402 /* End of the word. */
2403 *p++ = '\0';
2404 argv[++argc] = p;
2406 ++value;
2407 while (isblank ((unsigned char)*value));
2408 continue;
2410 *p++ = *value++;
2412 *p = '\0';
2413 argv[++argc] = 0;
2415 if (argv[1][0] != '-' && strchr (argv[1], '=') == 0)
2416 /* The first word doesn't start with a dash and isn't a variable
2417 definition. Add a dash and pass it along to decode_switches. We
2418 need permanent storage for this in case decode_switches saves
2419 pointers into the value. */
2420 argv[1] = concat ("-", argv[1], "");
2422 /* Parse those words. */
2423 decode_switches (argc, argv, 1);
2426 /* Quote the string IN so that it will be interpreted as a single word with
2427 no magic by decode_env_switches; also double dollar signs to avoid
2428 variable expansion in make itself. Write the result into OUT, returning
2429 the address of the next character to be written.
2430 Allocating space for OUT twice the length of IN is always sufficient. */
2432 static char *
2433 quote_for_env (out, in)
2434 char *out, *in;
2436 while (*in != '\0')
2438 if (*in == '$')
2439 *out++ = '$';
2440 else if (isblank ((unsigned char)*in) || *in == '\\')
2441 *out++ = '\\';
2442 *out++ = *in++;
2445 return out;
2448 /* Define the MAKEFLAGS and MFLAGS variables to reflect the settings of the
2449 command switches. Include options with args if ALL is nonzero.
2450 Don't include options with the `no_makefile' flag set if MAKEFILE. */
2452 static void
2453 define_makeflags (all, makefile)
2454 int all, makefile;
2456 static const char ref[] = "$(MAKEOVERRIDES)";
2457 static const char posixref[] = "$(-*-command-variables-*-)";
2458 register const struct command_switch *cs;
2459 char *flagstring;
2460 register char *p;
2461 unsigned int words;
2462 struct variable *v;
2464 /* We will construct a linked list of `struct flag's describing
2465 all the flags which need to go in MAKEFLAGS. Then, once we
2466 know how many there are and their lengths, we can put them all
2467 together in a string. */
2469 struct flag
2471 struct flag *next;
2472 const struct command_switch *cs;
2473 char *arg;
2475 struct flag *flags = 0;
2476 unsigned int flagslen = 0;
2477 #define ADD_FLAG(ARG, LEN) \
2478 do { \
2479 struct flag *new = (struct flag *) alloca (sizeof (struct flag)); \
2480 new->cs = cs; \
2481 new->arg = (ARG); \
2482 new->next = flags; \
2483 flags = new; \
2484 if (new->arg == 0) \
2485 ++flagslen; /* Just a single flag letter. */ \
2486 else \
2487 flagslen += 1 + 1 + 1 + 1 + 3 * (LEN); /* " -x foo" */ \
2488 if (!short_option (cs->c)) \
2489 /* This switch has no single-letter version, so we use the long. */ \
2490 flagslen += 2 + strlen (cs->long_name); \
2491 } while (0)
2493 for (cs = switches; cs->c != '\0'; ++cs)
2494 if (cs->toenv && (!makefile || !cs->no_makefile))
2495 switch (cs->type)
2497 default:
2498 abort ();
2500 case ignore:
2501 break;
2503 case flag:
2504 case flag_off:
2505 if (!*(int *) cs->value_ptr == (cs->type == flag_off)
2506 && (cs->default_value == 0
2507 || *(int *) cs->value_ptr != *(int *) cs->default_value))
2508 ADD_FLAG (0, 0);
2509 break;
2511 case positive_int:
2512 if (all)
2514 if ((cs->default_value != 0
2515 && (*(unsigned int *) cs->value_ptr
2516 == *(unsigned int *) cs->default_value)))
2517 break;
2518 else if (cs->noarg_value != 0
2519 && (*(unsigned int *) cs->value_ptr ==
2520 *(unsigned int *) cs->noarg_value))
2521 ADD_FLAG ("", 0); /* Optional value omitted; see below. */
2522 else if (cs->c == 'j')
2523 /* Special case for `-j'. */
2524 ADD_FLAG ("1", 1);
2525 else
2527 char *buf = (char *) alloca (30);
2528 sprintf (buf, "%u", *(unsigned int *) cs->value_ptr);
2529 ADD_FLAG (buf, strlen (buf));
2532 break;
2534 #ifndef NO_FLOAT
2535 case floating:
2536 if (all)
2538 if (cs->default_value != 0
2539 && (*(double *) cs->value_ptr
2540 == *(double *) cs->default_value))
2541 break;
2542 else if (cs->noarg_value != 0
2543 && (*(double *) cs->value_ptr
2544 == *(double *) cs->noarg_value))
2545 ADD_FLAG ("", 0); /* Optional value omitted; see below. */
2546 else
2548 char *buf = (char *) alloca (100);
2549 sprintf (buf, "%g", *(double *) cs->value_ptr);
2550 ADD_FLAG (buf, strlen (buf));
2553 break;
2554 #endif
2556 case string:
2557 if (all)
2559 struct stringlist *sl = *(struct stringlist **) cs->value_ptr;
2560 if (sl != 0)
2562 /* Add the elements in reverse order, because
2563 all the flags get reversed below; and the order
2564 matters for some switches (like -I). */
2565 register unsigned int i = sl->idx;
2566 while (i-- > 0)
2567 ADD_FLAG (sl->list[i], strlen (sl->list[i]));
2570 break;
2573 flagslen += 4 + sizeof posixref; /* Four more for the possible " -- ". */
2575 #undef ADD_FLAG
2577 /* Construct the value in FLAGSTRING.
2578 We allocate enough space for a preceding dash and trailing null. */
2579 flagstring = (char *) alloca (1 + flagslen + 1);
2580 bzero (flagstring, 1 + flagslen + 1);
2581 p = flagstring;
2582 words = 1;
2583 *p++ = '-';
2584 while (flags != 0)
2586 /* Add the flag letter or name to the string. */
2587 if (short_option (flags->cs->c))
2588 *p++ = flags->cs->c;
2589 else
2591 if (*p != '-')
2593 *p++ = ' ';
2594 *p++ = '-';
2596 *p++ = '-';
2597 strcpy (p, flags->cs->long_name);
2598 p += strlen (p);
2600 if (flags->arg != 0)
2602 /* A flag that takes an optional argument which in this case is
2603 omitted is specified by ARG being "". We must distinguish
2604 because a following flag appended without an intervening " -"
2605 is considered the arg for the first. */
2606 if (flags->arg[0] != '\0')
2608 /* Add its argument too. */
2609 *p++ = !short_option (flags->cs->c) ? '=' : ' ';
2610 p = quote_for_env (p, flags->arg);
2612 ++words;
2613 /* Write a following space and dash, for the next flag. */
2614 *p++ = ' ';
2615 *p++ = '-';
2617 else if (!short_option (flags->cs->c))
2619 ++words;
2620 /* Long options must each go in their own word,
2621 so we write the following space and dash. */
2622 *p++ = ' ';
2623 *p++ = '-';
2625 flags = flags->next;
2628 /* Define MFLAGS before appending variable definitions. */
2630 if (p == &flagstring[1])
2631 /* No flags. */
2632 flagstring[0] = '\0';
2633 else if (p[-1] == '-')
2635 /* Kill the final space and dash. */
2636 p -= 2;
2637 *p = '\0';
2639 else
2640 /* Terminate the string. */
2641 *p = '\0';
2643 /* Since MFLAGS is not parsed for flags, there is no reason to
2644 override any makefile redefinition. */
2645 (void) define_variable ("MFLAGS", 6, flagstring, o_env, 1);
2647 if (all && command_variables != 0)
2649 /* Now write a reference to $(MAKEOVERRIDES), which contains all the
2650 command-line variable definitions. */
2652 if (p == &flagstring[1])
2653 /* No flags written, so elide the leading dash already written. */
2654 p = flagstring;
2655 else
2657 /* Separate the variables from the switches with a "--" arg. */
2658 if (p[-1] != '-')
2660 /* We did not already write a trailing " -". */
2661 *p++ = ' ';
2662 *p++ = '-';
2664 /* There is a trailing " -"; fill it out to " -- ". */
2665 *p++ = '-';
2666 *p++ = ' ';
2669 /* Copy in the string. */
2670 if (posix_pedantic)
2672 bcopy (posixref, p, sizeof posixref - 1);
2673 p += sizeof posixref - 1;
2675 else
2677 bcopy (ref, p, sizeof ref - 1);
2678 p += sizeof ref - 1;
2681 else if (p == &flagstring[1])
2683 words = 0;
2684 --p;
2686 else if (p[-1] == '-')
2687 /* Kill the final space and dash. */
2688 p -= 2;
2689 /* Terminate the string. */
2690 *p = '\0';
2692 v = define_variable ("MAKEFLAGS", 9,
2693 /* If there are switches, omit the leading dash
2694 unless it is a single long option with two
2695 leading dashes. */
2696 &flagstring[(flagstring[0] == '-'
2697 && flagstring[1] != '-')
2698 ? 1 : 0],
2699 /* This used to use o_env, but that lost when a
2700 makefile defined MAKEFLAGS. Makefiles set
2701 MAKEFLAGS to add switches, but we still want
2702 to redefine its value with the full set of
2703 switches. Of course, an override or command
2704 definition will still take precedence. */
2705 o_file, 1);
2706 if (! all)
2707 /* The first time we are called, set MAKEFLAGS to always be exported.
2708 We should not do this again on the second call, because that is
2709 after reading makefiles which might have done `unexport MAKEFLAGS'. */
2710 v->export = v_export;
2713 /* Print version information. */
2715 static void
2716 print_version ()
2718 static int printed_version = 0;
2720 char *precede = print_data_base_flag ? "# " : "";
2722 if (printed_version)
2723 /* Do it only once. */
2724 return;
2726 /* Print this untranslated. The coding standards recommend translating the
2727 (C) to the copyright symbol, but this string is going to change every
2728 year, and none of the rest of it should be translated (including the
2729 word "Copyright", so it hardly seems worth it. */
2731 printf ("%sGNU Make %s\n\
2732 %sCopyright (C) 2002 Free Software Foundation, Inc.\n",
2733 precede, version_string, precede);
2735 printf (_("%sThis is free software; see the source for copying conditions.\n\
2736 %sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
2737 %sPARTICULAR PURPOSE.\n"),
2738 precede, precede, precede);
2740 printed_version = 1;
2742 /* Flush stdout so the user doesn't have to wait to see the
2743 version information while things are thought about. */
2744 fflush (stdout);
2747 /* Print a bunch of information about this and that. */
2749 static void
2750 print_data_base ()
2752 time_t when;
2754 when = time ((time_t *) 0);
2755 printf (_("\n# Make data base, printed on %s"), ctime (&when));
2757 print_variable_data_base ();
2758 print_dir_data_base ();
2759 print_rule_data_base ();
2760 print_file_data_base ();
2761 print_vpath_data_base ();
2763 when = time ((time_t *) 0);
2764 printf (_("\n# Finished Make data base on %s\n"), ctime (&when));
2767 /* Exit with STATUS, cleaning up as necessary. */
2769 void
2770 die (status)
2771 int status;
2773 static char dying = 0;
2775 if (!dying)
2777 int err;
2779 dying = 1;
2781 if (print_version_flag)
2782 print_version ();
2784 /* Wait for children to die. */
2785 for (err = (status != 0); job_slots_used > 0; err = 0)
2786 reap_children (1, err);
2788 /* Let the remote job module clean up its state. */
2789 remote_cleanup ();
2791 /* Remove the intermediate files. */
2792 remove_intermediates (0);
2794 if (print_data_base_flag)
2795 print_data_base ();
2797 /* Try to move back to the original directory. This is essential on
2798 MS-DOS (where there is really only one process), and on Unix it
2799 puts core files in the original directory instead of the -C
2800 directory. Must wait until after remove_intermediates(), or unlinks
2801 of relative pathnames fail. */
2802 if (directory_before_chdir != 0)
2803 chdir (directory_before_chdir);
2805 log_working_directory (0);
2808 exit (status);
2811 /* Write a message indicating that we've just entered or
2812 left (according to ENTERING) the current directory. */
2814 void
2815 log_working_directory (entering)
2816 int entering;
2818 static int entered = 0;
2820 /* Print nothing without the flag. Don't print the entering message
2821 again if we already have. Don't print the leaving message if we
2822 haven't printed the entering message. */
2823 if (! print_directory_flag || entering == entered)
2824 return;
2826 entered = entering;
2828 if (print_data_base_flag)
2829 fputs ("# ", stdout);
2831 if (makelevel == 0)
2832 printf ("%s: ", program);
2833 else
2834 printf ("%s[%u]: ", program, makelevel);
2836 /* Use entire sentences to give the translators a fighting chance. */
2838 if (starting_directory == 0)
2839 if (entering)
2840 puts (_("Entering an unknown directory"));
2841 else
2842 puts (_("Leaving an unknown directory"));
2843 else
2844 if (entering)
2845 printf (_("Entering directory `%s'\n"), starting_directory);
2846 else
2847 printf (_("Leaving directory `%s'\n"), starting_directory);