VirtualBox

source: kBuild/vendor/gnumake/current/main.c@ 1989

Last change on this file since 1989 was 1989, checked in by bird, 16 years ago

Load gnumake-2008-10-28-CVS into vendor/gnumake/current.

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

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette