~ubuntu-branches/ubuntu/utopic/gridengine/utopic

« back to all changes in this revision

Viewing changes to source/3rdparty/qmake/main.c

  • Committer: Bazaar Package Importer
  • Author(s): Mark Hymers
  • Date: 2008-06-25 22:36:13 UTC
  • Revision ID: james.westby@ubuntu.com-20080625223613-tvd9xlhuoct9kyhm
Tags: upstream-6.2~beta2
ImportĀ upstreamĀ versionĀ 6.2~beta2

Show diffs side-by-side

added added

removed removed

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