VirtualBox

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

Last change on this file since 900 was 900, checked in by bird, 18 years ago

Load /home/bird/src/Gnu/make/2007-05-23 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 2, or (at your option) any later version.
10
11GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
13A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License along with
16GNU Make; see the file COPYING. If not, write to the Free Software
17Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */
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 commands.\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 commands; 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 commands; 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 commands.\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
1125 /* Set up .FEATURES */
1126 define_variable (".FEATURES", 9,
1127 "target-specific order-only second-expansion else-if",
1128 o_default, 0);
1129#ifndef NO_ARCHIVES
1130 do_variable_definition (NILF, ".FEATURES", "archives",
1131 o_default, f_append, 0);
1132#endif
1133#ifdef MAKE_JOBSERVER
1134 do_variable_definition (NILF, ".FEATURES", "jobserver",
1135 o_default, f_append, 0);
1136#endif
1137#ifdef MAKE_SYMLINKS
1138 do_variable_definition (NILF, ".FEATURES", "check-symlink",
1139 o_default, f_append, 0);
1140#endif
1141
1142 /* Read in variables from the environment. It is important that this be
1143 done before $(MAKE) is figured out so its definitions will not be
1144 from the environment. */
1145
1146#ifndef _AMIGA
1147 {
1148 unsigned int i;
1149
1150 for (i = 0; envp[i] != 0; ++i)
1151 {
1152 int do_not_define = 0;
1153 char *ep = envp[i];
1154
1155 while (*ep != '\0' && *ep != '=')
1156 ++ep;
1157#ifdef WINDOWS32
1158 if (!unix_path && strneq(envp[i], "PATH=", 5))
1159 unix_path = ep+1;
1160 else if (!strnicmp(envp[i], "Path=", 5)) {
1161 do_not_define = 1; /* it gets defined after loop exits */
1162 if (!windows32_path)
1163 windows32_path = ep+1;
1164 }
1165#endif
1166 /* The result of pointer arithmetic is cast to unsigned int for
1167 machines where ptrdiff_t is a different size that doesn't widen
1168 the same. */
1169 if (!do_not_define)
1170 {
1171 struct variable *v;
1172
1173 v = define_variable (envp[i], (unsigned int) (ep - envp[i]),
1174 ep + 1, o_env, 1);
1175 /* Force exportation of every variable culled from the
1176 environment. We used to rely on target_environment's
1177 v_default code to do this. But that does not work for the
1178 case where an environment variable is redefined in a makefile
1179 with `override'; it should then still be exported, because it
1180 was originally in the environment. */
1181 v->export = v_export;
1182
1183 /* Another wrinkle is that POSIX says the value of SHELL set in
1184 the makefile won't change the value of SHELL given to
1185 subprocesses. */
1186 if (streq (v->name, "SHELL"))
1187 {
1188#ifndef __MSDOS__
1189 v->export = v_noexport;
1190#endif
1191 shell_var.name = "SHELL";
1192 shell_var.value = xstrdup (ep + 1);
1193 }
1194
1195 /* If MAKE_RESTARTS is set, remember it but don't export it. */
1196 if (streq (v->name, "MAKE_RESTARTS"))
1197 {
1198 v->export = v_noexport;
1199 restarts = (unsigned int) atoi (ep + 1);
1200 }
1201 }
1202 }
1203 }
1204#ifdef WINDOWS32
1205 /* If we didn't find a correctly spelled PATH we define PATH as
1206 * either the first mispelled value or an empty string
1207 */
1208 if (!unix_path)
1209 define_variable("PATH", 4,
1210 windows32_path ? windows32_path : "",
1211 o_env, 1)->export = v_export;
1212#endif
1213#else /* For Amiga, read the ENV: device, ignoring all dirs */
1214 {
1215 BPTR env, file, old;
1216 char buffer[1024];
1217 int len;
1218 __aligned struct FileInfoBlock fib;
1219
1220 env = Lock ("ENV:", ACCESS_READ);
1221 if (env)
1222 {
1223 old = CurrentDir (DupLock(env));
1224 Examine (env, &fib);
1225
1226 while (ExNext (env, &fib))
1227 {
1228 if (fib.fib_DirEntryType < 0) /* File */
1229 {
1230 /* Define an empty variable. It will be filled in
1231 variable_lookup(). Makes startup quite a bit
1232 faster. */
1233 define_variable (fib.fib_FileName,
1234 strlen (fib.fib_FileName),
1235 "", o_env, 1)->export = v_export;
1236 }
1237 }
1238 UnLock (env);
1239 UnLock(CurrentDir(old));
1240 }
1241 }
1242#endif
1243
1244 /* Decode the switches. */
1245
1246 decode_env_switches (STRING_SIZE_TUPLE ("MAKEFLAGS"));
1247#if 0
1248 /* People write things like:
1249 MFLAGS="CC=gcc -pipe" "CFLAGS=-g"
1250 and we set the -p, -i and -e switches. Doesn't seem quite right. */
1251 decode_env_switches (STRING_SIZE_TUPLE ("MFLAGS"));
1252#endif
1253 decode_switches (argc, argv, 0);
1254#ifdef WINDOWS32
1255 if (suspend_flag) {
1256 fprintf(stderr, "%s (pid = %ld)\n", argv[0], GetCurrentProcessId());
1257 fprintf(stderr, _("%s is suspending for 30 seconds..."), argv[0]);
1258 Sleep(30 * 1000);
1259 fprintf(stderr, _("done sleep(30). Continuing.\n"));
1260 }
1261#endif
1262
1263 decode_debug_flags ();
1264
1265 /* Set always_make_flag if -B was given and we've not restarted already. */
1266 always_make_flag = always_make_set && (restarts == 0);
1267
1268 /* Print version information. */
1269 if (print_version_flag || print_data_base_flag || db_level)
1270 {
1271 print_version ();
1272
1273 /* `make --version' is supposed to just print the version and exit. */
1274 if (print_version_flag)
1275 die (0);
1276 }
1277
1278#ifndef VMS
1279 /* Set the "MAKE_COMMAND" variable to the name we were invoked with.
1280 (If it is a relative pathname with a slash, prepend our directory name
1281 so the result will run the same program regardless of the current dir.
1282 If it is a name with no slash, we can only hope that PATH did not
1283 find it in the current directory.) */
1284#ifdef WINDOWS32
1285 /*
1286 * Convert from backslashes to forward slashes for
1287 * programs like sh which don't like them. Shouldn't
1288 * matter if the path is one way or the other for
1289 * CreateProcess().
1290 */
1291 if (strpbrk(argv[0], "/:\\") ||
1292 strstr(argv[0], "..") ||
1293 strneq(argv[0], "//", 2))
1294 argv[0] = xstrdup(w32ify(argv[0],1));
1295#else /* WINDOWS32 */
1296#if defined (__MSDOS__) || defined (__EMX__)
1297 if (strchr (argv[0], '\\'))
1298 {
1299 char *p;
1300
1301 argv[0] = xstrdup (argv[0]);
1302 for (p = argv[0]; *p; p++)
1303 if (*p == '\\')
1304 *p = '/';
1305 }
1306 /* If argv[0] is not in absolute form, prepend the current
1307 directory. This can happen when Make is invoked by another DJGPP
1308 program that uses a non-absolute name. */
1309 if (current_directory[0] != '\0'
1310 && argv[0] != 0
1311 && (argv[0][0] != '/' && (argv[0][0] == '\0' || argv[0][1] != ':'))
1312# ifdef __EMX__
1313 /* do not prepend cwd if argv[0] contains no '/', e.g. "make" */
1314 && (strchr (argv[0], '/') != 0 || strchr (argv[0], '\\') != 0)
1315# endif
1316 )
1317 argv[0] = xstrdup (concat (current_directory, "/", argv[0]));
1318#else /* !__MSDOS__ */
1319 if (current_directory[0] != '\0'
1320 && argv[0] != 0 && argv[0][0] != '/' && strchr (argv[0], '/') != 0
1321#ifdef HAVE_DOS_PATHS
1322 && (argv[0][0] != '\\' && (!argv[0][0] || argv[0][1] != ':'))
1323 && strchr (argv[0], '\\') != 0
1324#endif
1325 )
1326 argv[0] = xstrdup (concat (current_directory, "/", argv[0]));
1327#endif /* !__MSDOS__ */
1328#endif /* WINDOWS32 */
1329#endif
1330
1331 /* The extra indirection through $(MAKE_COMMAND) is done
1332 for hysterical raisins. */
1333 (void) define_variable ("MAKE_COMMAND", 12, argv[0], o_default, 0);
1334 (void) define_variable ("MAKE", 4, "$(MAKE_COMMAND)", o_default, 1);
1335
1336 if (command_variables != 0)
1337 {
1338 struct command_variable *cv;
1339 struct variable *v;
1340 unsigned int len = 0;
1341 char *value, *p;
1342
1343 /* Figure out how much space will be taken up by the command-line
1344 variable definitions. */
1345 for (cv = command_variables; cv != 0; cv = cv->next)
1346 {
1347 v = cv->variable;
1348 len += 2 * strlen (v->name);
1349 if (! v->recursive)
1350 ++len;
1351 ++len;
1352 len += 2 * strlen (v->value);
1353 ++len;
1354 }
1355
1356 /* Now allocate a buffer big enough and fill it. */
1357 p = value = alloca (len);
1358 for (cv = command_variables; cv != 0; cv = cv->next)
1359 {
1360 v = cv->variable;
1361 p = quote_for_env (p, v->name);
1362 if (! v->recursive)
1363 *p++ = ':';
1364 *p++ = '=';
1365 p = quote_for_env (p, v->value);
1366 *p++ = ' ';
1367 }
1368 p[-1] = '\0'; /* Kill the final space and terminate. */
1369
1370 /* Define an unchangeable variable with a name that no POSIX.2
1371 makefile could validly use for its own variable. */
1372 (void) define_variable ("-*-command-variables-*-", 23,
1373 value, o_automatic, 0);
1374
1375 /* Define the variable; this will not override any user definition.
1376 Normally a reference to this variable is written into the value of
1377 MAKEFLAGS, allowing the user to override this value to affect the
1378 exported value of MAKEFLAGS. In POSIX-pedantic mode, we cannot
1379 allow the user's setting of MAKEOVERRIDES to affect MAKEFLAGS, so
1380 a reference to this hidden variable is written instead. */
1381 (void) define_variable ("MAKEOVERRIDES", 13,
1382 "${-*-command-variables-*-}", o_env, 1);
1383 }
1384
1385 /* If there were -C flags, move ourselves about. */
1386 if (directories != 0)
1387 {
1388 unsigned int i;
1389 for (i = 0; directories->list[i] != 0; ++i)
1390 {
1391 const char *dir = directories->list[i];
1392#ifdef WINDOWS32
1393 /* WINDOWS32 chdir() doesn't work if the directory has a trailing '/'
1394 But allow -C/ just in case someone wants that. */
1395 {
1396 char *p = dir + strlen (dir) - 1;
1397 while (p > dir && (p[0] == '/' || p[0] == '\\'))
1398 --p;
1399 p[1] = '\0';
1400 }
1401#endif
1402 if (chdir (dir) < 0)
1403 pfatal_with_name (dir);
1404 }
1405 }
1406
1407#ifdef WINDOWS32
1408 /*
1409 * THIS BLOCK OF CODE MUST COME AFTER chdir() CALL ABOVE IN ORDER
1410 * TO NOT CONFUSE THE DEPENDENCY CHECKING CODE IN implicit.c.
1411 *
1412 * The functions in dir.c can incorrectly cache information for "."
1413 * before we have changed directory and this can cause file
1414 * lookups to fail because the current directory (.) was pointing
1415 * at the wrong place when it was first evaluated.
1416 */
1417 no_default_sh_exe = !find_and_set_default_shell(NULL);
1418
1419#endif /* WINDOWS32 */
1420 /* Figure out the level of recursion. */
1421 {
1422 struct variable *v = lookup_variable (STRING_SIZE_TUPLE (MAKELEVEL_NAME));
1423 if (v != 0 && v->value[0] != '\0' && v->value[0] != '-')
1424 makelevel = (unsigned int) atoi (v->value);
1425 else
1426 makelevel = 0;
1427 }
1428
1429 /* Except under -s, always do -w in sub-makes and under -C. */
1430 if (!silent_flag && (directories != 0 || makelevel > 0))
1431 print_directory_flag = 1;
1432
1433 /* Let the user disable that with --no-print-directory. */
1434 if (inhibit_print_directory_flag)
1435 print_directory_flag = 0;
1436
1437 /* If -R was given, set -r too (doesn't make sense otherwise!) */
1438 if (no_builtin_variables_flag)
1439 no_builtin_rules_flag = 1;
1440
1441 /* Construct the list of include directories to search. */
1442
1443 construct_include_path (include_directories == 0
1444 ? 0 : include_directories->list);
1445
1446 /* Figure out where we are now, after chdir'ing. */
1447 if (directories == 0)
1448 /* We didn't move, so we're still in the same place. */
1449 starting_directory = current_directory;
1450 else
1451 {
1452#ifdef WINDOWS32
1453 if (getcwd_fs (current_directory, GET_PATH_MAX) == 0)
1454#else
1455 if (getcwd (current_directory, GET_PATH_MAX) == 0)
1456#endif
1457 {
1458#ifdef HAVE_GETCWD
1459 perror_with_name ("getcwd", "");
1460#else
1461 error (NILF, "getwd: %s", current_directory);
1462#endif
1463 starting_directory = 0;
1464 }
1465 else
1466 starting_directory = current_directory;
1467 }
1468
1469 (void) define_variable ("CURDIR", 6, current_directory, o_file, 0);
1470
1471 /* Read any stdin makefiles into temporary files. */
1472
1473 if (makefiles != 0)
1474 {
1475 unsigned int i;
1476 for (i = 0; i < makefiles->idx; ++i)
1477 if (makefiles->list[i][0] == '-' && makefiles->list[i][1] == '\0')
1478 {
1479 /* This makefile is standard input. Since we may re-exec
1480 and thus re-read the makefiles, we read standard input
1481 into a temporary file and read from that. */
1482 FILE *outfile;
1483 char *template, *tmpdir;
1484
1485 if (stdin_nm)
1486 fatal (NILF, _("Makefile from standard input specified twice."));
1487
1488#ifdef VMS
1489# define DEFAULT_TMPDIR "sys$scratch:"
1490#else
1491# ifdef P_tmpdir
1492# define DEFAULT_TMPDIR P_tmpdir
1493# else
1494# define DEFAULT_TMPDIR "/tmp"
1495# endif
1496#endif
1497#define DEFAULT_TMPFILE "GmXXXXXX"
1498
1499 if (((tmpdir = getenv ("TMPDIR")) == NULL || *tmpdir == '\0')
1500#if defined (__MSDOS__) || defined (WINDOWS32) || defined (__EMX__)
1501 /* These are also used commonly on these platforms. */
1502 && ((tmpdir = getenv ("TEMP")) == NULL || *tmpdir == '\0')
1503 && ((tmpdir = getenv ("TMP")) == NULL || *tmpdir == '\0')
1504#endif
1505 )
1506 tmpdir = DEFAULT_TMPDIR;
1507
1508 template = alloca (strlen (tmpdir) + sizeof (DEFAULT_TMPFILE) + 1);
1509 strcpy (template, tmpdir);
1510
1511#ifdef HAVE_DOS_PATHS
1512 if (strchr ("/\\", template[strlen (template) - 1]) == NULL)
1513 strcat (template, "/");
1514#else
1515# ifndef VMS
1516 if (template[strlen (template) - 1] != '/')
1517 strcat (template, "/");
1518# endif /* !VMS */
1519#endif /* !HAVE_DOS_PATHS */
1520
1521 strcat (template, DEFAULT_TMPFILE);
1522 outfile = open_tmpfile (&stdin_nm, template);
1523 if (outfile == 0)
1524 pfatal_with_name (_("fopen (temporary file)"));
1525 while (!feof (stdin) && ! ferror (stdin))
1526 {
1527 char buf[2048];
1528 unsigned int n = fread (buf, 1, sizeof (buf), stdin);
1529 if (n > 0 && fwrite (buf, 1, n, outfile) != n)
1530 pfatal_with_name (_("fwrite (temporary file)"));
1531 }
1532 fclose (outfile);
1533
1534 /* Replace the name that read_all_makefiles will
1535 see with the name of the temporary file. */
1536 makefiles->list[i] = strcache_add (stdin_nm);
1537
1538 /* Make sure the temporary file will not be remade. */
1539 {
1540 struct file *f = enter_file (strcache_add (stdin_nm));
1541 f->updated = 1;
1542 f->update_status = 0;
1543 f->command_state = cs_finished;
1544 /* Can't be intermediate, or it'll be removed too early for
1545 make re-exec. */
1546 f->intermediate = 0;
1547 f->dontcare = 0;
1548 }
1549 }
1550 }
1551
1552#ifndef __EMX__ /* Don't use a SIGCHLD handler for OS/2 */
1553#if defined(MAKE_JOBSERVER) || !defined(HAVE_WAIT_NOHANG)
1554 /* Set up to handle children dying. This must be done before
1555 reading in the makefiles so that `shell' function calls will work.
1556
1557 If we don't have a hanging wait we have to fall back to old, broken
1558 functionality here and rely on the signal handler and counting
1559 children.
1560
1561 If we're using the jobs pipe we need a signal handler so that
1562 SIGCHLD is not ignored; we need it to interrupt the read(2) of the
1563 jobserver pipe in job.c if we're waiting for a token.
1564
1565 If none of these are true, we don't need a signal handler at all. */
1566 {
1567 RETSIGTYPE child_handler (int sig);
1568# if defined SIGCHLD
1569 bsd_signal (SIGCHLD, child_handler);
1570# endif
1571# if defined SIGCLD && SIGCLD != SIGCHLD
1572 bsd_signal (SIGCLD, child_handler);
1573# endif
1574 }
1575#endif
1576#endif
1577
1578 /* Let the user send us SIGUSR1 to toggle the -d flag during the run. */
1579#ifdef SIGUSR1
1580 bsd_signal (SIGUSR1, debug_signal_handler);
1581#endif
1582
1583 /* Define the initial list of suffixes for old-style rules. */
1584
1585 set_default_suffixes ();
1586
1587 /* Define the file rules for the built-in suffix rules. These will later
1588 be converted into pattern rules. We used to do this in
1589 install_default_implicit_rules, but since that happens after reading
1590 makefiles, it results in the built-in pattern rules taking precedence
1591 over makefile-specified suffix rules, which is wrong. */
1592
1593 install_default_suffix_rules ();
1594
1595 /* Define some internal and special variables. */
1596
1597 define_automatic_variables ();
1598
1599 /* Set up the MAKEFLAGS and MFLAGS variables
1600 so makefiles can look at them. */
1601
1602 define_makeflags (0, 0);
1603
1604 /* Define the default variables. */
1605 define_default_variables ();
1606
1607 default_file = enter_file (strcache_add (".DEFAULT"));
1608
1609 {
1610 struct variable *v = define_variable (".DEFAULT_GOAL", 13, "", o_file, 0);
1611 default_goal_name = &v->value;
1612 }
1613
1614 /* Read all the makefiles. */
1615
1616 read_makefiles
1617 = read_all_makefiles (makefiles == 0 ? 0 : makefiles->list);
1618
1619#ifdef WINDOWS32
1620 /* look one last time after reading all Makefiles */
1621 if (no_default_sh_exe)
1622 no_default_sh_exe = !find_and_set_default_shell(NULL);
1623#endif /* WINDOWS32 */
1624
1625#if defined (__MSDOS__) || defined (__EMX__)
1626 /* We need to know what kind of shell we will be using. */
1627 {
1628 extern int _is_unixy_shell (const char *_path);
1629 struct variable *shv = lookup_variable (STRING_SIZE_TUPLE ("SHELL"));
1630 extern int unixy_shell;
1631 extern char *default_shell;
1632
1633 if (shv && *shv->value)
1634 {
1635 char *shell_path = recursively_expand(shv);
1636
1637 if (shell_path && _is_unixy_shell (shell_path))
1638 unixy_shell = 1;
1639 else
1640 unixy_shell = 0;
1641 if (shell_path)
1642 default_shell = shell_path;
1643 }
1644 }
1645#endif /* __MSDOS__ || __EMX__ */
1646
1647 /* Decode switches again, in case the variables were set by the makefile. */
1648 decode_env_switches (STRING_SIZE_TUPLE ("MAKEFLAGS"));
1649#if 0
1650 decode_env_switches (STRING_SIZE_TUPLE ("MFLAGS"));
1651#endif
1652
1653#if defined (__MSDOS__) || defined (__EMX__)
1654 if (job_slots != 1
1655# ifdef __EMX__
1656 && _osmode != OS2_MODE /* turn off -j if we are in DOS mode */
1657# endif
1658 )
1659 {
1660 error (NILF,
1661 _("Parallel jobs (-j) are not supported on this platform."));
1662 error (NILF, _("Resetting to single job (-j1) mode."));
1663 job_slots = 1;
1664 }
1665#endif
1666
1667#ifdef MAKE_JOBSERVER
1668 /* If the jobserver-fds option is seen, make sure that -j is reasonable. */
1669
1670 if (jobserver_fds)
1671 {
1672 const char *cp;
1673 unsigned int ui;
1674
1675 for (ui=1; ui < jobserver_fds->idx; ++ui)
1676 if (!streq (jobserver_fds->list[0], jobserver_fds->list[ui]))
1677 fatal (NILF, _("internal error: multiple --jobserver-fds options"));
1678
1679 /* Now parse the fds string and make sure it has the proper format. */
1680
1681 cp = jobserver_fds->list[0];
1682
1683 if (sscanf (cp, "%d,%d", &job_fds[0], &job_fds[1]) != 2)
1684 fatal (NILF,
1685 _("internal error: invalid --jobserver-fds string `%s'"), cp);
1686
1687 DB (DB_JOBS,
1688 (_("Jobserver client (fds %d,%d)\n"), job_fds[0], job_fds[1]));
1689
1690 /* The combination of a pipe + !job_slots means we're using the
1691 jobserver. If !job_slots and we don't have a pipe, we can start
1692 infinite jobs. If we see both a pipe and job_slots >0 that means the
1693 user set -j explicitly. This is broken; in this case obey the user
1694 (ignore the jobserver pipe for this make) but print a message. */
1695
1696 if (job_slots > 0)
1697 error (NILF,
1698 _("warning: -jN forced in submake: disabling jobserver mode."));
1699
1700 /* Create a duplicate pipe, that will be closed in the SIGCHLD
1701 handler. If this fails with EBADF, the parent has closed the pipe
1702 on us because it didn't think we were a submake. If so, print a
1703 warning then default to -j1. */
1704
1705 else if ((job_rfd = dup (job_fds[0])) < 0)
1706 {
1707 if (errno != EBADF)
1708 pfatal_with_name (_("dup jobserver"));
1709
1710 error (NILF,
1711 _("warning: jobserver unavailable: using -j1. Add `+' to parent make rule."));
1712 job_slots = 1;
1713 }
1714
1715 if (job_slots > 0)
1716 {
1717 close (job_fds[0]);
1718 close (job_fds[1]);
1719 job_fds[0] = job_fds[1] = -1;
1720 free (jobserver_fds->list);
1721 free (jobserver_fds);
1722 jobserver_fds = 0;
1723 }
1724 }
1725
1726 /* If we have >1 slot but no jobserver-fds, then we're a top-level make.
1727 Set up the pipe and install the fds option for our children. */
1728
1729 if (job_slots > 1)
1730 {
1731 char *cp;
1732 char c = '+';
1733
1734 if (pipe (job_fds) < 0 || (job_rfd = dup (job_fds[0])) < 0)
1735 pfatal_with_name (_("creating jobs pipe"));
1736
1737 /* Every make assumes that it always has one job it can run. For the
1738 submakes it's the token they were given by their parent. For the
1739 top make, we just subtract one from the number the user wants. We
1740 want job_slots to be 0 to indicate we're using the jobserver. */
1741
1742 master_job_slots = job_slots;
1743
1744 while (--job_slots)
1745 {
1746 int r;
1747
1748 EINTRLOOP (r, write (job_fds[1], &c, 1));
1749 if (r != 1)
1750 pfatal_with_name (_("init jobserver pipe"));
1751 }
1752
1753 /* Fill in the jobserver_fds struct for our children. */
1754
1755 cp = xmalloc ((sizeof ("1024")*2)+1);
1756 sprintf (cp, "%d,%d", job_fds[0], job_fds[1]);
1757
1758 jobserver_fds = (struct stringlist *)
1759 xmalloc (sizeof (struct stringlist));
1760 jobserver_fds->list = xmalloc (sizeof (char *));
1761 jobserver_fds->list[0] = cp;
1762 jobserver_fds->idx = 1;
1763 jobserver_fds->max = 1;
1764 }
1765#endif
1766
1767#ifndef MAKE_SYMLINKS
1768 if (check_symlink_flag)
1769 {
1770 error (NILF, _("Symbolic links not supported: disabling -L."));
1771 check_symlink_flag = 0;
1772 }
1773#endif
1774
1775 /* Set up MAKEFLAGS and MFLAGS again, so they will be right. */
1776
1777 define_makeflags (1, 0);
1778
1779 /* Make each `struct dep' point at the `struct file' for the file
1780 depended on. Also do magic for special targets. */
1781
1782 snap_deps ();
1783
1784 /* Convert old-style suffix rules to pattern rules. It is important to
1785 do this before installing the built-in pattern rules below, so that
1786 makefile-specified suffix rules take precedence over built-in pattern
1787 rules. */
1788
1789 convert_to_pattern ();
1790
1791 /* Install the default implicit pattern rules.
1792 This used to be done before reading the makefiles.
1793 But in that case, built-in pattern rules were in the chain
1794 before user-defined ones, so they matched first. */
1795
1796 install_default_implicit_rules ();
1797
1798 /* Compute implicit rule limits. */
1799
1800 count_implicit_rule_limits ();
1801
1802 /* Construct the listings of directories in VPATH lists. */
1803
1804 build_vpath_lists ();
1805
1806 /* Mark files given with -o flags as very old and as having been updated
1807 already, and files given with -W flags as brand new (time-stamp as far
1808 as possible into the future). If restarts is set we'll do -W later. */
1809
1810 if (old_files != 0)
1811 {
1812 const char **p;
1813 for (p = old_files->list; *p != 0; ++p)
1814 {
1815 struct file *f = enter_file (*p);
1816 f->last_mtime = f->mtime_before_update = OLD_MTIME;
1817 f->updated = 1;
1818 f->update_status = 0;
1819 f->command_state = cs_finished;
1820 }
1821 }
1822
1823 if (!restarts && new_files != 0)
1824 {
1825 const char **p;
1826 for (p = new_files->list; *p != 0; ++p)
1827 {
1828 struct file *f = enter_file (*p);
1829 f->last_mtime = f->mtime_before_update = NEW_MTIME;
1830 }
1831 }
1832
1833 /* Initialize the remote job module. */
1834 remote_setup ();
1835
1836 if (read_makefiles != 0)
1837 {
1838 /* Update any makefiles if necessary. */
1839
1840 FILE_TIMESTAMP *makefile_mtimes = 0;
1841 unsigned int mm_idx = 0;
1842 char **nargv = argv;
1843 int nargc = argc;
1844 int orig_db_level = db_level;
1845 int status;
1846
1847 if (! ISDB (DB_MAKEFILES))
1848 db_level = DB_NONE;
1849
1850 DB (DB_BASIC, (_("Updating makefiles....\n")));
1851
1852 /* Remove any makefiles we don't want to try to update.
1853 Also record the current modtimes so we can compare them later. */
1854 {
1855 register struct dep *d, *last;
1856 last = 0;
1857 d = read_makefiles;
1858 while (d != 0)
1859 {
1860 struct file *f = d->file;
1861 if (f->double_colon)
1862 for (f = f->double_colon; f != NULL; f = f->prev)
1863 {
1864 if (f->deps == 0 && f->cmds != 0)
1865 {
1866 /* This makefile is a :: target with commands, but
1867 no dependencies. So, it will always be remade.
1868 This might well cause an infinite loop, so don't
1869 try to remake it. (This will only happen if
1870 your makefiles are written exceptionally
1871 stupidly; but if you work for Athena, that's how
1872 you write your makefiles.) */
1873
1874 DB (DB_VERBOSE,
1875 (_("Makefile `%s' might loop; not remaking it.\n"),
1876 f->name));
1877
1878 if (last == 0)
1879 read_makefiles = d->next;
1880 else
1881 last->next = d->next;
1882
1883 /* Free the storage. */
1884 free_dep (d);
1885
1886 d = last == 0 ? read_makefiles : last->next;
1887
1888 break;
1889 }
1890 }
1891 if (f == NULL || !f->double_colon)
1892 {
1893 makefile_mtimes = xrealloc (makefile_mtimes,
1894 (mm_idx+1)
1895 * sizeof (FILE_TIMESTAMP));
1896 makefile_mtimes[mm_idx++] = file_mtime_no_search (d->file);
1897 last = d;
1898 d = d->next;
1899 }
1900 }
1901 }
1902
1903 /* Set up `MAKEFLAGS' specially while remaking makefiles. */
1904 define_makeflags (1, 1);
1905
1906 rebuilding_makefiles = 1;
1907 status = update_goal_chain (read_makefiles);
1908 rebuilding_makefiles = 0;
1909
1910 switch (status)
1911 {
1912 case 1:
1913 /* The only way this can happen is if the user specified -q and asked
1914 * for one of the makefiles to be remade as a target on the command
1915 * line. Since we're not actually updating anything with -q we can
1916 * treat this as "did nothing".
1917 */
1918
1919 case -1:
1920 /* Did nothing. */
1921 break;
1922
1923 case 2:
1924 /* Failed to update. Figure out if we care. */
1925 {
1926 /* Nonzero if any makefile was successfully remade. */
1927 int any_remade = 0;
1928 /* Nonzero if any makefile we care about failed
1929 in updating or could not be found at all. */
1930 int any_failed = 0;
1931 unsigned int i;
1932 struct dep *d;
1933
1934 for (i = 0, d = read_makefiles; d != 0; ++i, d = d->next)
1935 {
1936 /* Reset the considered flag; we may need to look at the file
1937 again to print an error. */
1938 d->file->considered = 0;
1939
1940 if (d->file->updated)
1941 {
1942 /* This makefile was updated. */
1943 if (d->file->update_status == 0)
1944 {
1945 /* It was successfully updated. */
1946 any_remade |= (file_mtime_no_search (d->file)
1947 != makefile_mtimes[i]);
1948 }
1949 else if (! (d->changed & RM_DONTCARE))
1950 {
1951 FILE_TIMESTAMP mtime;
1952 /* The update failed and this makefile was not
1953 from the MAKEFILES variable, so we care. */
1954 error (NILF, _("Failed to remake makefile `%s'."),
1955 d->file->name);
1956 mtime = file_mtime_no_search (d->file);
1957 any_remade |= (mtime != NONEXISTENT_MTIME
1958 && mtime != makefile_mtimes[i]);
1959 makefile_status = MAKE_FAILURE;
1960 }
1961 }
1962 else
1963 /* This makefile was not found at all. */
1964 if (! (d->changed & RM_DONTCARE))
1965 {
1966 /* This is a makefile we care about. See how much. */
1967 if (d->changed & RM_INCLUDED)
1968 /* An included makefile. We don't need
1969 to die, but we do want to complain. */
1970 error (NILF,
1971 _("Included makefile `%s' was not found."),
1972 dep_name (d));
1973 else
1974 {
1975 /* A normal makefile. We must die later. */
1976 error (NILF, _("Makefile `%s' was not found"),
1977 dep_name (d));
1978 any_failed = 1;
1979 }
1980 }
1981 }
1982 /* Reset this to empty so we get the right error message below. */
1983 read_makefiles = 0;
1984
1985 if (any_remade)
1986 goto re_exec;
1987 if (any_failed)
1988 die (2);
1989 break;
1990 }
1991
1992 case 0:
1993 re_exec:
1994 /* Updated successfully. Re-exec ourselves. */
1995
1996 remove_intermediates (0);
1997
1998 if (print_data_base_flag)
1999 print_data_base ();
2000
2001 log_working_directory (0);
2002
2003 clean_jobserver (0);
2004
2005 if (makefiles != 0)
2006 {
2007 /* These names might have changed. */
2008 int i, j = 0;
2009 for (i = 1; i < argc; ++i)
2010 if (strneq (argv[i], "-f", 2)) /* XXX */
2011 {
2012 char *p = &argv[i][2];
2013 if (*p == '\0')
2014 /* This cast is OK since we never modify argv. */
2015 argv[++i] = (char *) makefiles->list[j];
2016 else
2017 argv[i] = xstrdup (concat ("-f", makefiles->list[j], ""));
2018 ++j;
2019 }
2020 }
2021
2022 /* Add -o option for the stdin temporary file, if necessary. */
2023 if (stdin_nm)
2024 {
2025 nargv = xmalloc ((nargc + 2) * sizeof (char *));
2026 memcpy (nargv, argv, argc * sizeof (char *));
2027 nargv[nargc++] = xstrdup (concat ("-o", stdin_nm, ""));
2028 nargv[nargc] = 0;
2029 }
2030
2031 if (directories != 0 && directories->idx > 0)
2032 {
2033 int bad = 1;
2034 if (directory_before_chdir != 0)
2035 {
2036 if (chdir (directory_before_chdir) < 0)
2037 perror_with_name ("chdir", "");
2038 else
2039 bad = 0;
2040 }
2041 if (bad)
2042 fatal (NILF, _("Couldn't change back to original directory."));
2043 }
2044
2045 ++restarts;
2046
2047 if (ISDB (DB_BASIC))
2048 {
2049 char **p;
2050 printf (_("Re-executing[%u]:"), restarts);
2051 for (p = nargv; *p != 0; ++p)
2052 printf (" %s", *p);
2053 putchar ('\n');
2054 }
2055
2056#ifndef _AMIGA
2057 {
2058 char **p;
2059 for (p = environ; *p != 0; ++p)
2060 {
2061 if (strneq (*p, MAKELEVEL_NAME, MAKELEVEL_LENGTH)
2062 && (*p)[MAKELEVEL_LENGTH] == '=')
2063 {
2064 *p = alloca (40);
2065 sprintf (*p, "%s=%u", MAKELEVEL_NAME, makelevel);
2066 }
2067 if (strneq (*p, "MAKE_RESTARTS=", 14))
2068 {
2069 *p = alloca (40);
2070 sprintf (*p, "MAKE_RESTARTS=%u", restarts);
2071 restarts = 0;
2072 }
2073 }
2074 }
2075#else /* AMIGA */
2076 {
2077 char buffer[256];
2078
2079 sprintf (buffer, "%u", makelevel);
2080 SetVar (MAKELEVEL_NAME, buffer, -1, GVF_GLOBAL_ONLY);
2081
2082 sprintf (buffer, "%u", restarts);
2083 SetVar ("MAKE_RESTARTS", buffer, -1, GVF_GLOBAL_ONLY);
2084 restarts = 0;
2085 }
2086#endif
2087
2088 /* If we didn't set the restarts variable yet, add it. */
2089 if (restarts)
2090 {
2091 char *b = alloca (40);
2092 sprintf (b, "MAKE_RESTARTS=%u", restarts);
2093 putenv (b);
2094 }
2095
2096 fflush (stdout);
2097 fflush (stderr);
2098
2099 /* Close the dup'd jobserver pipe if we opened one. */
2100 if (job_rfd >= 0)
2101 close (job_rfd);
2102
2103#ifdef _AMIGA
2104 exec_command (nargv);
2105 exit (0);
2106#elif defined (__EMX__)
2107 {
2108 /* It is not possible to use execve() here because this
2109 would cause the parent process to be terminated with
2110 exit code 0 before the child process has been terminated.
2111 Therefore it may be the best solution simply to spawn the
2112 child process including all file handles and to wait for its
2113 termination. */
2114 int pid;
2115 int status;
2116 pid = child_execute_job (0, 1, nargv, environ);
2117
2118 /* is this loop really necessary? */
2119 do {
2120 pid = wait (&status);
2121 } while (pid <= 0);
2122 /* use the exit code of the child process */
2123 exit (WIFEXITED(status) ? WEXITSTATUS(status) : EXIT_FAILURE);
2124 }
2125#else
2126 exec_command (nargv, environ);
2127#endif
2128 /* NOTREACHED */
2129
2130 default:
2131#define BOGUS_UPDATE_STATUS 0
2132 assert (BOGUS_UPDATE_STATUS);
2133 break;
2134 }
2135
2136 db_level = orig_db_level;
2137
2138 /* Free the makefile mtimes (if we allocated any). */
2139 if (makefile_mtimes)
2140 free (makefile_mtimes);
2141 }
2142
2143 /* Set up `MAKEFLAGS' again for the normal targets. */
2144 define_makeflags (1, 0);
2145
2146 /* Set always_make_flag if -B was given. */
2147 always_make_flag = always_make_set;
2148
2149 /* If restarts is set we haven't set up -W files yet, so do that now. */
2150 if (restarts && new_files != 0)
2151 {
2152 const char **p;
2153 for (p = new_files->list; *p != 0; ++p)
2154 {
2155 struct file *f = enter_file (*p);
2156 f->last_mtime = f->mtime_before_update = NEW_MTIME;
2157 }
2158 }
2159
2160 /* If there is a temp file from reading a makefile from stdin, get rid of
2161 it now. */
2162 if (stdin_nm && unlink (stdin_nm) < 0 && errno != ENOENT)
2163 perror_with_name (_("unlink (temporary file): "), stdin_nm);
2164
2165 {
2166 int status;
2167
2168 /* If there were no command-line goals, use the default. */
2169 if (goals == 0)
2170 {
2171 if (**default_goal_name != '\0')
2172 {
2173 if (default_goal_file == 0 ||
2174 strcmp (*default_goal_name, default_goal_file->name) != 0)
2175 {
2176 default_goal_file = lookup_file (*default_goal_name);
2177
2178 /* In case user set .DEFAULT_GOAL to a non-existent target
2179 name let's just enter this name into the table and let
2180 the standard logic sort it out. */
2181 if (default_goal_file == 0)
2182 {
2183 struct nameseq *ns;
2184 char *p = *default_goal_name;
2185
2186 ns = multi_glob (
2187 parse_file_seq (&p, '\0', sizeof (struct nameseq), 1),
2188 sizeof (struct nameseq));
2189
2190 /* .DEFAULT_GOAL should contain one target. */
2191 if (ns->next != 0)
2192 fatal (NILF, _(".DEFAULT_GOAL contains more than one target"));
2193
2194 default_goal_file = enter_file (strcache_add (ns->name));
2195
2196 ns->name = 0; /* It was reused by enter_file(). */
2197 free_ns_chain (ns);
2198 }
2199 }
2200
2201 goals = alloc_dep ();
2202 goals->file = default_goal_file;
2203 }
2204 }
2205 else
2206 lastgoal->next = 0;
2207
2208
2209 if (!goals)
2210 {
2211 if (read_makefiles == 0)
2212 fatal (NILF, _("No targets specified and no makefile found"));
2213
2214 fatal (NILF, _("No targets"));
2215 }
2216
2217 /* Update the goals. */
2218
2219 DB (DB_BASIC, (_("Updating goal targets....\n")));
2220
2221 switch (update_goal_chain (goals))
2222 {
2223 case -1:
2224 /* Nothing happened. */
2225 case 0:
2226 /* Updated successfully. */
2227 status = makefile_status;
2228 break;
2229 case 1:
2230 /* We are under -q and would run some commands. */
2231 status = MAKE_TROUBLE;
2232 break;
2233 case 2:
2234 /* Updating failed. POSIX.2 specifies exit status >1 for this;
2235 but in VMS, there is only success and failure. */
2236 status = MAKE_FAILURE;
2237 break;
2238 default:
2239 abort ();
2240 }
2241
2242 /* If we detected some clock skew, generate one last warning */
2243 if (clock_skew_detected)
2244 error (NILF,
2245 _("warning: Clock skew detected. Your build may be incomplete."));
2246
2247 /* Exit. */
2248 die (status);
2249 }
2250
2251 /* NOTREACHED */
2252 return 0;
2253}
2254
2255
2256/* Parsing of arguments, decoding of switches. */
2257
2258static char options[1 + sizeof (switches) / sizeof (switches[0]) * 3];
2259static struct option long_options[(sizeof (switches) / sizeof (switches[0])) +
2260 (sizeof (long_option_aliases) /
2261 sizeof (long_option_aliases[0]))];
2262
2263/* Fill in the string and vector for getopt. */
2264static void
2265init_switches (void)
2266{
2267 char *p;
2268 unsigned int c;
2269 unsigned int i;
2270
2271 if (options[0] != '\0')
2272 /* Already done. */
2273 return;
2274
2275 p = options;
2276
2277 /* Return switch and non-switch args in order, regardless of
2278 POSIXLY_CORRECT. Non-switch args are returned as option 1. */
2279 *p++ = '-';
2280
2281 for (i = 0; switches[i].c != '\0'; ++i)
2282 {
2283 long_options[i].name = (switches[i].long_name == 0 ? "" :
2284 switches[i].long_name);
2285 long_options[i].flag = 0;
2286 long_options[i].val = switches[i].c;
2287 if (short_option (switches[i].c))
2288 *p++ = switches[i].c;
2289 switch (switches[i].type)
2290 {
2291 case flag:
2292 case flag_off:
2293 case ignore:
2294 long_options[i].has_arg = no_argument;
2295 break;
2296
2297 case string:
2298 case filename:
2299 case positive_int:
2300 case floating:
2301 if (short_option (switches[i].c))
2302 *p++ = ':';
2303 if (switches[i].noarg_value != 0)
2304 {
2305 if (short_option (switches[i].c))
2306 *p++ = ':';
2307 long_options[i].has_arg = optional_argument;
2308 }
2309 else
2310 long_options[i].has_arg = required_argument;
2311 break;
2312 }
2313 }
2314 *p = '\0';
2315 for (c = 0; c < (sizeof (long_option_aliases) /
2316 sizeof (long_option_aliases[0]));
2317 ++c)
2318 long_options[i++] = long_option_aliases[c];
2319 long_options[i].name = 0;
2320}
2321
2322static void
2323handle_non_switch_argument (char *arg, int env)
2324{
2325 /* Non-option argument. It might be a variable definition. */
2326 struct variable *v;
2327 if (arg[0] == '-' && arg[1] == '\0')
2328 /* Ignore plain `-' for compatibility. */
2329 return;
2330 v = try_variable_definition (0, arg, o_command, 0);
2331 if (v != 0)
2332 {
2333 /* It is indeed a variable definition. If we don't already have this
2334 one, record a pointer to the variable for later use in
2335 define_makeflags. */
2336 struct command_variable *cv;
2337
2338 for (cv = command_variables; cv != 0; cv = cv->next)
2339 if (cv->variable == v)
2340 break;
2341
2342 if (! cv) {
2343 cv = xmalloc (sizeof (*cv));
2344 cv->variable = v;
2345 cv->next = command_variables;
2346 command_variables = cv;
2347 }
2348 }
2349 else if (! env)
2350 {
2351 /* Not an option or variable definition; it must be a goal
2352 target! Enter it as a file and add it to the dep chain of
2353 goals. */
2354 struct file *f = enter_file (strcache_add (expand_command_line_file (arg)));
2355 f->cmd_target = 1;
2356
2357 if (goals == 0)
2358 {
2359 goals = alloc_dep ();
2360 lastgoal = goals;
2361 }
2362 else
2363 {
2364 lastgoal->next = alloc_dep ();
2365 lastgoal = lastgoal->next;
2366 }
2367
2368 lastgoal->file = f;
2369
2370 {
2371 /* Add this target name to the MAKECMDGOALS variable. */
2372 struct variable *gv;
2373 const char *value;
2374
2375 gv = lookup_variable (STRING_SIZE_TUPLE ("MAKECMDGOALS"));
2376 if (gv == 0)
2377 value = f->name;
2378 else
2379 {
2380 /* Paste the old and new values together */
2381 unsigned int oldlen, newlen;
2382 char *vp;
2383
2384 oldlen = strlen (gv->value);
2385 newlen = strlen (f->name);
2386 vp = alloca (oldlen + 1 + newlen + 1);
2387 memcpy (vp, gv->value, oldlen);
2388 vp[oldlen] = ' ';
2389 memcpy (&vp[oldlen + 1], f->name, newlen + 1);
2390 value = vp;
2391 }
2392 define_variable ("MAKECMDGOALS", 12, value, o_default, 0);
2393 }
2394 }
2395}
2396
2397/* Print a nice usage method. */
2398
2399static void
2400print_usage (int bad)
2401{
2402 const char *const *cpp;
2403 FILE *usageto;
2404
2405 if (print_version_flag)
2406 print_version ();
2407
2408 usageto = bad ? stderr : stdout;
2409
2410 fprintf (usageto, _("Usage: %s [options] [target] ...\n"), program);
2411
2412 for (cpp = usage; *cpp; ++cpp)
2413 fputs (_(*cpp), usageto);
2414
2415 if (!remote_description || *remote_description == '\0')
2416 fprintf (usageto, _("\nThis program built for %s\n"), make_host);
2417 else
2418 fprintf (usageto, _("\nThis program built for %s (%s)\n"),
2419 make_host, remote_description);
2420
2421 fprintf (usageto, _("Report bugs to <[email protected]>\n"));
2422}
2423
2424/* Decode switches from ARGC and ARGV.
2425 They came from the environment if ENV is nonzero. */
2426
2427static void
2428decode_switches (int argc, char **argv, int env)
2429{
2430 int bad = 0;
2431 register const struct command_switch *cs;
2432 register struct stringlist *sl;
2433 register int c;
2434
2435 /* getopt does most of the parsing for us.
2436 First, get its vectors set up. */
2437
2438 init_switches ();
2439
2440 /* Let getopt produce error messages for the command line,
2441 but not for options from the environment. */
2442 opterr = !env;
2443 /* Reset getopt's state. */
2444 optind = 0;
2445
2446 while (optind < argc)
2447 {
2448 /* Parse the next argument. */
2449 c = getopt_long (argc, argv, options, long_options, (int *) 0);
2450 if (c == EOF)
2451 /* End of arguments, or "--" marker seen. */
2452 break;
2453 else if (c == 1)
2454 /* An argument not starting with a dash. */
2455 handle_non_switch_argument (optarg, env);
2456 else if (c == '?')
2457 /* Bad option. We will print a usage message and die later.
2458 But continue to parse the other options so the user can
2459 see all he did wrong. */
2460 bad = 1;
2461 else
2462 for (cs = switches; cs->c != '\0'; ++cs)
2463 if (cs->c == c)
2464 {
2465 /* Whether or not we will actually do anything with
2466 this switch. We test this individually inside the
2467 switch below rather than just once outside it, so that
2468 options which are to be ignored still consume args. */
2469 int doit = !env || cs->env;
2470
2471 switch (cs->type)
2472 {
2473 default:
2474 abort ();
2475
2476 case ignore:
2477 break;
2478
2479 case flag:
2480 case flag_off:
2481 if (doit)
2482 *(int *) cs->value_ptr = cs->type == flag;
2483 break;
2484
2485 case string:
2486 case filename:
2487 if (!doit)
2488 break;
2489
2490 if (optarg == 0)
2491 optarg = xstrdup (cs->noarg_value);
2492 else if (*optarg == '\0')
2493 {
2494 error (NILF, _("the `-%c' option requires a non-empty string argument"),
2495 cs->c);
2496 bad = 1;
2497 }
2498
2499 sl = *(struct stringlist **) cs->value_ptr;
2500 if (sl == 0)
2501 {
2502 sl = (struct stringlist *)
2503 xmalloc (sizeof (struct stringlist));
2504 sl->max = 5;
2505 sl->idx = 0;
2506 sl->list = xmalloc (5 * sizeof (char *));
2507 *(struct stringlist **) cs->value_ptr = sl;
2508 }
2509 else if (sl->idx == sl->max - 1)
2510 {
2511 sl->max += 5;
2512 sl->list = xrealloc (sl->list,
2513 sl->max * sizeof (char *));
2514 }
2515 if (cs->type == filename)
2516 sl->list[sl->idx++] = expand_command_line_file (optarg);
2517 else
2518 sl->list[sl->idx++] = optarg;
2519 sl->list[sl->idx] = 0;
2520 break;
2521
2522 case positive_int:
2523 /* See if we have an option argument; if we do require that
2524 it's all digits, not something like "10foo". */
2525 if (optarg == 0 && argc > optind)
2526 {
2527 const char *cp;
2528 for (cp=argv[optind]; ISDIGIT (cp[0]); ++cp)
2529 ;
2530 if (cp[0] == '\0')
2531 optarg = argv[optind++];
2532 }
2533
2534 if (!doit)
2535 break;
2536
2537 if (optarg != 0)
2538 {
2539 int i = atoi (optarg);
2540 const char *cp;
2541
2542 /* Yes, I realize we're repeating this in some cases. */
2543 for (cp = optarg; ISDIGIT (cp[0]); ++cp)
2544 ;
2545
2546 if (i < 1 || cp[0] != '\0')
2547 {
2548 error (NILF, _("the `-%c' option requires a positive integral argument"),
2549 cs->c);
2550 bad = 1;
2551 }
2552 else
2553 *(unsigned int *) cs->value_ptr = i;
2554 }
2555 else
2556 *(unsigned int *) cs->value_ptr
2557 = *(unsigned int *) cs->noarg_value;
2558 break;
2559
2560#ifndef NO_FLOAT
2561 case floating:
2562 if (optarg == 0 && optind < argc
2563 && (ISDIGIT (argv[optind][0]) || argv[optind][0] == '.'))
2564 optarg = argv[optind++];
2565
2566 if (doit)
2567 *(double *) cs->value_ptr
2568 = (optarg != 0 ? atof (optarg)
2569 : *(double *) cs->noarg_value);
2570
2571 break;
2572#endif
2573 }
2574
2575 /* We've found the switch. Stop looking. */
2576 break;
2577 }
2578 }
2579
2580 /* There are no more options according to getting getopt, but there may
2581 be some arguments left. Since we have asked for non-option arguments
2582 to be returned in order, this only happens when there is a "--"
2583 argument to prevent later arguments from being options. */
2584 while (optind < argc)
2585 handle_non_switch_argument (argv[optind++], env);
2586
2587
2588 if (!env && (bad || print_usage_flag))
2589 {
2590 print_usage (bad);
2591 die (bad ? 2 : 0);
2592 }
2593}
2594
2595/* Decode switches from environment variable ENVAR (which is LEN chars long).
2596 We do this by chopping the value into a vector of words, prepending a
2597 dash to the first word if it lacks one, and passing the vector to
2598 decode_switches. */
2599
2600static void
2601decode_env_switches (char *envar, unsigned int len)
2602{
2603 char *varref = alloca (2 + len + 2);
2604 char *value, *p;
2605 int argc;
2606 char **argv;
2607
2608 /* Get the variable's value. */
2609 varref[0] = '$';
2610 varref[1] = '(';
2611 memcpy (&varref[2], envar, len);
2612 varref[2 + len] = ')';
2613 varref[2 + len + 1] = '\0';
2614 value = variable_expand (varref);
2615
2616 /* Skip whitespace, and check for an empty value. */
2617 value = next_token (value);
2618 len = strlen (value);
2619 if (len == 0)
2620 return;
2621
2622 /* Allocate a vector that is definitely big enough. */
2623 argv = alloca ((1 + len + 1) * sizeof (char *));
2624
2625 /* Allocate a buffer to copy the value into while we split it into words
2626 and unquote it. We must use permanent storage for this because
2627 decode_switches may store pointers into the passed argument words. */
2628 p = xmalloc (2 * len);
2629
2630 /* getopt will look at the arguments starting at ARGV[1].
2631 Prepend a spacer word. */
2632 argv[0] = 0;
2633 argc = 1;
2634 argv[argc] = p;
2635 while (*value != '\0')
2636 {
2637 if (*value == '\\' && value[1] != '\0')
2638 ++value; /* Skip the backslash. */
2639 else if (isblank ((unsigned char)*value))
2640 {
2641 /* End of the word. */
2642 *p++ = '\0';
2643 argv[++argc] = p;
2644 do
2645 ++value;
2646 while (isblank ((unsigned char)*value));
2647 continue;
2648 }
2649 *p++ = *value++;
2650 }
2651 *p = '\0';
2652 argv[++argc] = 0;
2653
2654 if (argv[1][0] != '-' && strchr (argv[1], '=') == 0)
2655 /* The first word doesn't start with a dash and isn't a variable
2656 definition. Add a dash and pass it along to decode_switches. We
2657 need permanent storage for this in case decode_switches saves
2658 pointers into the value. */
2659 argv[1] = xstrdup (concat ("-", argv[1], ""));
2660
2661 /* Parse those words. */
2662 decode_switches (argc, argv, 1);
2663}
2664
2665
2666/* Quote the string IN so that it will be interpreted as a single word with
2667 no magic by decode_env_switches; also double dollar signs to avoid
2668 variable expansion in make itself. Write the result into OUT, returning
2669 the address of the next character to be written.
2670 Allocating space for OUT twice the length of IN is always sufficient. */
2671
2672static char *
2673quote_for_env (char *out, const char *in)
2674{
2675 while (*in != '\0')
2676 {
2677 if (*in == '$')
2678 *out++ = '$';
2679 else if (isblank ((unsigned char)*in) || *in == '\\')
2680 *out++ = '\\';
2681 *out++ = *in++;
2682 }
2683
2684 return out;
2685}
2686
2687/* Define the MAKEFLAGS and MFLAGS variables to reflect the settings of the
2688 command switches. Include options with args if ALL is nonzero.
2689 Don't include options with the `no_makefile' flag set if MAKEFILE. */
2690
2691static void
2692define_makeflags (int all, int makefile)
2693{
2694 static const char ref[] = "$(MAKEOVERRIDES)";
2695 static const char posixref[] = "$(-*-command-variables-*-)";
2696 register const struct command_switch *cs;
2697 char *flagstring;
2698 register char *p;
2699 unsigned int words;
2700 struct variable *v;
2701
2702 /* We will construct a linked list of `struct flag's describing
2703 all the flags which need to go in MAKEFLAGS. Then, once we
2704 know how many there are and their lengths, we can put them all
2705 together in a string. */
2706
2707 struct flag
2708 {
2709 struct flag *next;
2710 const struct command_switch *cs;
2711 const char *arg;
2712 };
2713 struct flag *flags = 0;
2714 unsigned int flagslen = 0;
2715#define ADD_FLAG(ARG, LEN) \
2716 do { \
2717 struct flag *new = alloca (sizeof (struct flag)); \
2718 new->cs = cs; \
2719 new->arg = (ARG); \
2720 new->next = flags; \
2721 flags = new; \
2722 if (new->arg == 0) \
2723 ++flagslen; /* Just a single flag letter. */ \
2724 else \
2725 flagslen += 1 + 1 + 1 + 1 + 3 * (LEN); /* " -x foo" */ \
2726 if (!short_option (cs->c)) \
2727 /* This switch has no single-letter version, so we use the long. */ \
2728 flagslen += 2 + strlen (cs->long_name); \
2729 } while (0)
2730
2731 for (cs = switches; cs->c != '\0'; ++cs)
2732 if (cs->toenv && (!makefile || !cs->no_makefile))
2733 switch (cs->type)
2734 {
2735 case ignore:
2736 break;
2737
2738 case flag:
2739 case flag_off:
2740 if (!*(int *) cs->value_ptr == (cs->type == flag_off)
2741 && (cs->default_value == 0
2742 || *(int *) cs->value_ptr != *(int *) cs->default_value))
2743 ADD_FLAG (0, 0);
2744 break;
2745
2746 case positive_int:
2747 if (all)
2748 {
2749 if ((cs->default_value != 0
2750 && (*(unsigned int *) cs->value_ptr
2751 == *(unsigned int *) cs->default_value)))
2752 break;
2753 else if (cs->noarg_value != 0
2754 && (*(unsigned int *) cs->value_ptr ==
2755 *(unsigned int *) cs->noarg_value))
2756 ADD_FLAG ("", 0); /* Optional value omitted; see below. */
2757 else if (cs->c == 'j')
2758 /* Special case for `-j'. */
2759 ADD_FLAG ("1", 1);
2760 else
2761 {
2762 char *buf = alloca (30);
2763 sprintf (buf, "%u", *(unsigned int *) cs->value_ptr);
2764 ADD_FLAG (buf, strlen (buf));
2765 }
2766 }
2767 break;
2768
2769#ifndef NO_FLOAT
2770 case floating:
2771 if (all)
2772 {
2773 if (cs->default_value != 0
2774 && (*(double *) cs->value_ptr
2775 == *(double *) cs->default_value))
2776 break;
2777 else if (cs->noarg_value != 0
2778 && (*(double *) cs->value_ptr
2779 == *(double *) cs->noarg_value))
2780 ADD_FLAG ("", 0); /* Optional value omitted; see below. */
2781 else
2782 {
2783 char *buf = alloca (100);
2784 sprintf (buf, "%g", *(double *) cs->value_ptr);
2785 ADD_FLAG (buf, strlen (buf));
2786 }
2787 }
2788 break;
2789#endif
2790
2791 case filename:
2792 case string:
2793 if (all)
2794 {
2795 struct stringlist *sl = *(struct stringlist **) cs->value_ptr;
2796 if (sl != 0)
2797 {
2798 /* Add the elements in reverse order, because all the flags
2799 get reversed below; and the order matters for some
2800 switches (like -I). */
2801 unsigned int i = sl->idx;
2802 while (i-- > 0)
2803 ADD_FLAG (sl->list[i], strlen (sl->list[i]));
2804 }
2805 }
2806 break;
2807
2808 default:
2809 abort ();
2810 }
2811
2812 flagslen += 4 + sizeof posixref; /* Four more for the possible " -- ". */
2813
2814#undef ADD_FLAG
2815
2816 /* Construct the value in FLAGSTRING.
2817 We allocate enough space for a preceding dash and trailing null. */
2818 flagstring = alloca (1 + flagslen + 1);
2819 memset (flagstring, '\0', 1 + flagslen + 1);
2820 p = flagstring;
2821 words = 1;
2822 *p++ = '-';
2823 while (flags != 0)
2824 {
2825 /* Add the flag letter or name to the string. */
2826 if (short_option (flags->cs->c))
2827 *p++ = flags->cs->c;
2828 else
2829 {
2830 if (*p != '-')
2831 {
2832 *p++ = ' ';
2833 *p++ = '-';
2834 }
2835 *p++ = '-';
2836 strcpy (p, flags->cs->long_name);
2837 p += strlen (p);
2838 }
2839 if (flags->arg != 0)
2840 {
2841 /* A flag that takes an optional argument which in this case is
2842 omitted is specified by ARG being "". We must distinguish
2843 because a following flag appended without an intervening " -"
2844 is considered the arg for the first. */
2845 if (flags->arg[0] != '\0')
2846 {
2847 /* Add its argument too. */
2848 *p++ = !short_option (flags->cs->c) ? '=' : ' ';
2849 p = quote_for_env (p, flags->arg);
2850 }
2851 ++words;
2852 /* Write a following space and dash, for the next flag. */
2853 *p++ = ' ';
2854 *p++ = '-';
2855 }
2856 else if (!short_option (flags->cs->c))
2857 {
2858 ++words;
2859 /* Long options must each go in their own word,
2860 so we write the following space and dash. */
2861 *p++ = ' ';
2862 *p++ = '-';
2863 }
2864 flags = flags->next;
2865 }
2866
2867 /* Define MFLAGS before appending variable definitions. */
2868
2869 if (p == &flagstring[1])
2870 /* No flags. */
2871 flagstring[0] = '\0';
2872 else if (p[-1] == '-')
2873 {
2874 /* Kill the final space and dash. */
2875 p -= 2;
2876 *p = '\0';
2877 }
2878 else
2879 /* Terminate the string. */
2880 *p = '\0';
2881
2882 /* Since MFLAGS is not parsed for flags, there is no reason to
2883 override any makefile redefinition. */
2884 (void) define_variable ("MFLAGS", 6, flagstring, o_env, 1);
2885
2886 if (all && command_variables != 0)
2887 {
2888 /* Now write a reference to $(MAKEOVERRIDES), which contains all the
2889 command-line variable definitions. */
2890
2891 if (p == &flagstring[1])
2892 /* No flags written, so elide the leading dash already written. */
2893 p = flagstring;
2894 else
2895 {
2896 /* Separate the variables from the switches with a "--" arg. */
2897 if (p[-1] != '-')
2898 {
2899 /* We did not already write a trailing " -". */
2900 *p++ = ' ';
2901 *p++ = '-';
2902 }
2903 /* There is a trailing " -"; fill it out to " -- ". */
2904 *p++ = '-';
2905 *p++ = ' ';
2906 }
2907
2908 /* Copy in the string. */
2909 if (posix_pedantic)
2910 {
2911 memcpy (p, posixref, sizeof posixref - 1);
2912 p += sizeof posixref - 1;
2913 }
2914 else
2915 {
2916 memcpy (p, ref, sizeof ref - 1);
2917 p += sizeof ref - 1;
2918 }
2919 }
2920 else if (p == &flagstring[1])
2921 {
2922 words = 0;
2923 --p;
2924 }
2925 else if (p[-1] == '-')
2926 /* Kill the final space and dash. */
2927 p -= 2;
2928 /* Terminate the string. */
2929 *p = '\0';
2930
2931 v = define_variable ("MAKEFLAGS", 9,
2932 /* If there are switches, omit the leading dash
2933 unless it is a single long option with two
2934 leading dashes. */
2935 &flagstring[(flagstring[0] == '-'
2936 && flagstring[1] != '-')
2937 ? 1 : 0],
2938 /* This used to use o_env, but that lost when a
2939 makefile defined MAKEFLAGS. Makefiles set
2940 MAKEFLAGS to add switches, but we still want
2941 to redefine its value with the full set of
2942 switches. Of course, an override or command
2943 definition will still take precedence. */
2944 o_file, 1);
2945 if (! all)
2946 /* The first time we are called, set MAKEFLAGS to always be exported.
2947 We should not do this again on the second call, because that is
2948 after reading makefiles which might have done `unexport MAKEFLAGS'. */
2949 v->export = v_export;
2950}
2951
2952
2953/* Print version information. */
2954
2955static void
2956print_version (void)
2957{
2958 static int printed_version = 0;
2959
2960 char *precede = print_data_base_flag ? "# " : "";
2961
2962 if (printed_version)
2963 /* Do it only once. */
2964 return;
2965
2966 /* Print this untranslated. The coding standards recommend translating the
2967 (C) to the copyright symbol, but this string is going to change every
2968 year, and none of the rest of it should be translated (including the
2969 word "Copyright", so it hardly seems worth it. */
2970
2971 printf ("%sGNU Make %s\n\
2972%sCopyright (C) 2006 Free Software Foundation, Inc.\n",
2973 precede, version_string, precede);
2974
2975 printf (_("%sThis is free software; see the source for copying conditions.\n\
2976%sThere is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
2977%sPARTICULAR PURPOSE.\n"),
2978 precede, precede, precede);
2979
2980 if (!remote_description || *remote_description == '\0')
2981 printf (_("\n%sThis program built for %s\n"), precede, make_host);
2982 else
2983 printf (_("\n%sThis program built for %s (%s)\n"),
2984 precede, make_host, remote_description);
2985
2986 printed_version = 1;
2987
2988 /* Flush stdout so the user doesn't have to wait to see the
2989 version information while things are thought about. */
2990 fflush (stdout);
2991}
2992
2993/* Print a bunch of information about this and that. */
2994
2995static void
2996print_data_base ()
2997{
2998 time_t when;
2999
3000 when = time ((time_t *) 0);
3001 printf (_("\n# Make data base, printed on %s"), ctime (&when));
3002
3003 print_variable_data_base ();
3004 print_dir_data_base ();
3005 print_rule_data_base ();
3006 print_file_data_base ();
3007 print_vpath_data_base ();
3008 strcache_print_stats ("#");
3009
3010 when = time ((time_t *) 0);
3011 printf (_("\n# Finished Make data base on %s\n"), ctime (&when));
3012}
3013
3014static void
3015clean_jobserver (int status)
3016{
3017 char token = '+';
3018
3019 /* Sanity: have we written all our jobserver tokens back? If our
3020 exit status is 2 that means some kind of syntax error; we might not
3021 have written all our tokens so do that now. If tokens are left
3022 after any other error code, that's bad. */
3023
3024 if (job_fds[0] != -1 && jobserver_tokens)
3025 {
3026 if (status != 2)
3027 error (NILF,
3028 "INTERNAL: Exiting with %u jobserver tokens (should be 0)!",
3029 jobserver_tokens);
3030 else
3031 while (jobserver_tokens--)
3032 {
3033 int r;
3034
3035 EINTRLOOP (r, write (job_fds[1], &token, 1));
3036 if (r != 1)
3037 perror_with_name ("write", "");
3038 }
3039 }
3040
3041
3042 /* Sanity: If we're the master, were all the tokens written back? */
3043
3044 if (master_job_slots)
3045 {
3046 /* We didn't write one for ourself, so start at 1. */
3047 unsigned int tcnt = 1;
3048
3049 /* Close the write side, so the read() won't hang. */
3050 close (job_fds[1]);
3051
3052 while (read (job_fds[0], &token, 1) == 1)
3053 ++tcnt;
3054
3055 if (tcnt != master_job_slots)
3056 error (NILF,
3057 "INTERNAL: Exiting with %u jobserver tokens available; should be %u!",
3058 tcnt, master_job_slots);
3059
3060 close (job_fds[0]);
3061 }
3062}
3063
3064
3065/* Exit with STATUS, cleaning up as necessary. */
3066
3067void
3068die (int status)
3069{
3070 static char dying = 0;
3071
3072 if (!dying)
3073 {
3074 int err;
3075
3076 dying = 1;
3077
3078 if (print_version_flag)
3079 print_version ();
3080
3081 /* Wait for children to die. */
3082 err = (status != 0);
3083 while (job_slots_used > 0)
3084 reap_children (1, err);
3085
3086 /* Let the remote job module clean up its state. */
3087 remote_cleanup ();
3088
3089 /* Remove the intermediate files. */
3090 remove_intermediates (0);
3091
3092 if (print_data_base_flag)
3093 print_data_base ();
3094
3095 verify_file_data_base ();
3096
3097 clean_jobserver (status);
3098
3099 /* Try to move back to the original directory. This is essential on
3100 MS-DOS (where there is really only one process), and on Unix it
3101 puts core files in the original directory instead of the -C
3102 directory. Must wait until after remove_intermediates(), or unlinks
3103 of relative pathnames fail. */
3104 if (directory_before_chdir != 0)
3105 chdir (directory_before_chdir);
3106
3107 log_working_directory (0);
3108 }
3109
3110 exit (status);
3111}
3112
3113
3114/* Write a message indicating that we've just entered or
3115 left (according to ENTERING) the current directory. */
3116
3117void
3118log_working_directory (int entering)
3119{
3120 static int entered = 0;
3121
3122 /* Print nothing without the flag. Don't print the entering message
3123 again if we already have. Don't print the leaving message if we
3124 haven't printed the entering message. */
3125 if (! print_directory_flag || entering == entered)
3126 return;
3127
3128 entered = entering;
3129
3130 if (print_data_base_flag)
3131 fputs ("# ", stdout);
3132
3133 /* Use entire sentences to give the translators a fighting chance. */
3134
3135 if (makelevel == 0)
3136 if (starting_directory == 0)
3137 if (entering)
3138 printf (_("%s: Entering an unknown directory\n"), program);
3139 else
3140 printf (_("%s: Leaving an unknown directory\n"), program);
3141 else
3142 if (entering)
3143 printf (_("%s: Entering directory `%s'\n"),
3144 program, starting_directory);
3145 else
3146 printf (_("%s: Leaving directory `%s'\n"),
3147 program, starting_directory);
3148 else
3149 if (starting_directory == 0)
3150 if (entering)
3151 printf (_("%s[%u]: Entering an unknown directory\n"),
3152 program, makelevel);
3153 else
3154 printf (_("%s[%u]: Leaving an unknown directory\n"),
3155 program, makelevel);
3156 else
3157 if (entering)
3158 printf (_("%s[%u]: Entering directory `%s'\n"),
3159 program, makelevel, starting_directory);
3160 else
3161 printf (_("%s[%u]: Leaving directory `%s'\n"),
3162 program, makelevel, starting_directory);
3163
3164 /* Flush stdout to be sure this comes before any stderr output. */
3165 fflush (stdout);
3166}
Note: See TracBrowser for help on using the repository browser.

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