(root)/
make-4.4/
src/
main.c
       1  /* Argument parsing and main program of GNU Make.
       2  Copyright (C) 1988-2022 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 it under the
       6  terms of the GNU General Public License as published by the Free Software
       7  Foundation; either version 3 of the License, or (at your option) any later
       8  version.
       9  
      10  GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
      11  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
      12  A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
      13  
      14  You should have received a copy of the GNU General Public License along with
      15  this program.  If not, see <https://www.gnu.org/licenses/>.  */
      16  
      17  #include "makeint.h"
      18  #include "os.h"
      19  #include "filedef.h"
      20  #include "dep.h"
      21  #include "variable.h"
      22  #include "job.h"
      23  #include "commands.h"
      24  #include "rule.h"
      25  #include "debug.h"
      26  #include "getopt.h"
      27  #include "shuffle.h"
      28  
      29  #include <assert.h>
      30  #ifdef _AMIGA
      31  # include <dos/dos.h>
      32  # include <proto/dos.h>
      33  #endif
      34  #ifdef WINDOWS32
      35  # include <windows.h>
      36  # include <io.h>
      37  #ifdef HAVE_STRINGS_H
      38  # include <strings.h> /* for strcasecmp */
      39  #endif
      40  # include "pathstuff.h"
      41  # include "sub_proc.h"
      42  # include "w32err.h"
      43  #endif
      44  #ifdef __EMX__
      45  # include <sys/types.h>
      46  # include <sys/wait.h>
      47  #endif
      48  #ifdef HAVE_FCNTL_H
      49  # include <fcntl.h>
      50  #endif
      51  
      52  #ifdef _AMIGA
      53  int __stack = 20000; /* Make sure we have 20K of stack space */
      54  #endif
      55  #ifdef VMS
      56  int vms_use_mcr_command = 0;
      57  int vms_always_use_cmd_file = 0;
      58  int vms_gnv_shell = 0;
      59  int vms_legacy_behavior = 0;
      60  int vms_comma_separator = 0;
      61  int vms_unix_simulation = 0;
      62  int vms_report_unix_paths = 0;
      63  
      64  /* Evaluates if a VMS environment option is set, only look at first character */
      65  static int
      66  get_vms_env_flag (const char *name, int default_value)
      67  {
      68  char * value;
      69  char x;
      70  
      71    value = getenv (name);
      72    if (value == NULL)
      73      return default_value;
      74  
      75    x = toupper (value[0]);
      76    switch (x)
      77      {
      78      case '1':
      79      case 'T':
      80      case 'E':
      81        return 1;
      82        break;
      83      case '0':
      84      case 'F':
      85      case 'D':
      86        return 0;
      87      }
      88  }
      89  #endif
      90  
      91  #if defined HAVE_WAITPID || defined HAVE_WAIT3
      92  # define HAVE_WAIT_NOHANG
      93  #endif
      94  
      95  #ifndef HAVE_UNISTD_H
      96  int chdir ();
      97  #endif
      98  #ifndef STDC_HEADERS
      99  # ifndef sun                    /* Sun has an incorrect decl in a header.  */
     100  void exit (int) NORETURN;
     101  # endif
     102  double atof ();
     103  #endif
     104  
     105  static void clean_jobserver (int status);
     106  static void print_data_base (void);
     107  static void print_version (void);
     108  static void decode_switches (int argc, const char **argv, int env);
     109  static struct variable *define_makeflags (int all, int makefile);
     110  static char *quote_for_env (char *out, const char *in);
     111  static void initialize_global_hash_tables (void);
     112  
     113  
     114  /* True if C is a switch value that corresponds to a short option.  */
     115  
     116  #define short_option(c) ((c) <= CHAR_MAX)
     117  
     118  /* The structure used to hold the list of strings given
     119     in command switches of a type that takes strlist arguments.  */
     120  
     121  struct stringlist
     122    {
     123      const char **list;  /* Nil-terminated list of strings.  */
     124      unsigned int idx;   /* Index into above.  */
     125      unsigned int max;   /* Number of pointers allocated.  */
     126    };
     127  
     128  
     129  /* The recognized command switches.  */
     130  
     131  /* Nonzero means do extra verification (that may slow things down).  */
     132  
     133  int verify_flag;
     134  
     135  /* Nonzero means do not print commands to be executed (-s).  */
     136  
     137  static int silent_flag;
     138  static const int default_silent_flag = 0;
     139  
     140  /* Nonzero means either -s was given, or .SILENT-with-no-deps was seen.  */
     141  
     142  int run_silent = 0;
     143  
     144  /* Nonzero means just touch the files
     145     that would appear to need remaking (-t)  */
     146  
     147  int touch_flag;
     148  
     149  /* Nonzero means just print what commands would need to be executed,
     150     don't actually execute them (-n).  */
     151  
     152  int just_print_flag;
     153  
     154  /* Print debugging info (--debug).  */
     155  
     156  static struct stringlist *db_flags = 0;
     157  static int debug_flag = 0;
     158  
     159  int db_level = 0;
     160  
     161  /* Synchronize output (--output-sync).  */
     162  
     163  char *output_sync_option = 0;
     164  
     165  /* Environment variables override makefile definitions.  */
     166  
     167  int env_overrides = 0;
     168  
     169  /* Nonzero means ignore status codes returned by commands
     170     executed to remake files.  Just treat them all as successful (-i).  */
     171  
     172  int ignore_errors_flag = 0;
     173  
     174  /* Nonzero means don't remake anything, just print the data base
     175     that results from reading the makefile (-p).  */
     176  
     177  int print_data_base_flag = 0;
     178  
     179  /* Nonzero means don't remake anything; just return a nonzero status
     180     if the specified targets are not up to date (-q).  */
     181  
     182  int question_flag = 0;
     183  
     184  /* Nonzero means do not use any of the builtin rules (-r) / variables (-R).  */
     185  
     186  int no_builtin_rules_flag = 0;
     187  int no_builtin_variables_flag = 0;
     188  
     189  /* Nonzero means keep going even if remaking some file fails (-k).  */
     190  
     191  int keep_going_flag;
     192  static const int default_keep_going_flag = 0;
     193  
     194  /* Nonzero means check symlink mtimes.  */
     195  
     196  int check_symlink_flag = 0;
     197  
     198  /* Nonzero means print directory before starting and when done (-w).  */
     199  
     200  int print_directory;
     201  static int print_directory_flag = -1;
     202  static const int default_print_directory_flag = -1;
     203  
     204  /* Nonzero means print version information.  */
     205  
     206  int print_version_flag = 0;
     207  
     208  /* List of makefiles given with -f switches.  */
     209  
     210  static struct stringlist *makefiles = 0;
     211  
     212  /* Size of the stack when we started.  */
     213  
     214  #ifdef SET_STACK_SIZE
     215  struct rlimit stack_limit;
     216  #endif
     217  
     218  
     219  /* Number of job slots for parallelism.  */
     220  
     221  unsigned int job_slots;
     222  
     223  #define INVALID_JOB_SLOTS (-1)
     224  static unsigned int master_job_slots = 0;
     225  static int arg_job_slots = INVALID_JOB_SLOTS;
     226  
     227  static const int default_job_slots = INVALID_JOB_SLOTS;
     228  
     229  /* Value of job_slots that means no limit.  */
     230  
     231  static const int inf_jobs = 0;
     232  
     233  /* Authorization for the jobserver.  */
     234  
     235  char *jobserver_auth = NULL;
     236  
     237  /* Style for the jobserver.  */
     238  static char *jobserver_style = NULL;
     239  
     240  /* Shuffle mode for goals and prerequisites.  */
     241  
     242  static char *shuffle_mode = NULL;
     243  
     244  /* Handle for the mutex to synchronize output of our children under -O.  */
     245  
     246  static char *sync_mutex = NULL;
     247  
     248  /* Maximum load average at which multiple jobs will be run.
     249     Negative values mean unlimited, while zero means limit to
     250     zero load (which could be useful to start infinite jobs remotely
     251     but one at a time locally).  */
     252  double max_load_average = -1.0;
     253  double default_load_average = -1.0;
     254  
     255  /* List of directories given with -C switches.  */
     256  
     257  static struct stringlist *directories = 0;
     258  
     259  /* List of include directories given with -I switches.  */
     260  
     261  static struct stringlist *include_dirs = 0;
     262  
     263  /* List of files given with -o switches.  */
     264  
     265  static struct stringlist *old_files = 0;
     266  
     267  /* List of files given with -W switches.  */
     268  
     269  static struct stringlist *new_files = 0;
     270  
     271  /* List of strings to be eval'd.  */
     272  static struct stringlist *eval_strings = 0;
     273  
     274  /* If nonzero, we should just print usage and exit.  */
     275  
     276  static int print_usage_flag = 0;
     277  
     278  /* If nonzero, we should print a warning message
     279     for each reference to an undefined variable.  */
     280  
     281  int warn_undefined_variables_flag;
     282  
     283  /* If nonzero, always build all targets, regardless of whether
     284     they appear out of date or not.  */
     285  
     286  static int always_make_set = 0;
     287  int always_make_flag = 0;
     288  
     289  /* If nonzero, we're in the "try to rebuild makefiles" phase.  */
     290  
     291  int rebuilding_makefiles = 0;
     292  
     293  /* Remember the original value of the SHELL variable, from the environment.  */
     294  
     295  struct variable shell_var;
     296  
     297  /* This character introduces a command: it's the first char on the line.  */
     298  
     299  char cmd_prefix = '\t';
     300  
     301  /* Count the number of commands we've invoked, that might change something in
     302     the filesystem.  Start with 1 so calloc'd memory never matches.  */
     303  
     304  unsigned long command_count = 1;
     305  
     306  /* Remember the location of the name of the batch file from stdin.  */
     307  
     308  static int stdin_offset = -1;
     309  
     310  
     311  /* The usage output.  We write it this way to make life easier for the
     312     translators, especially those trying to translate to right-to-left
     313     languages like Hebrew.  */
     314  
     315  static const char *const usage[] =
     316    {
     317      N_("Options:\n"),
     318      N_("\
     319    -b, -m                      Ignored for compatibility.\n"),
     320      N_("\
     321    -B, --always-make           Unconditionally make all targets.\n"),
     322      N_("\
     323    -C DIRECTORY, --directory=DIRECTORY\n\
     324                                Change to DIRECTORY before doing anything.\n"),
     325      N_("\
     326    -d                          Print lots of debugging information.\n"),
     327      N_("\
     328    --debug[=FLAGS]             Print various types of debugging information.\n"),
     329      N_("\
     330    -e, --environment-overrides\n\
     331                                Environment variables override makefiles.\n"),
     332      N_("\
     333    -E STRING, --eval=STRING    Evaluate STRING as a makefile statement.\n"),
     334      N_("\
     335    -f FILE, --file=FILE, --makefile=FILE\n\
     336                                Read FILE as a makefile.\n"),
     337      N_("\
     338    -h, --help                  Print this message and exit.\n"),
     339      N_("\
     340    -i, --ignore-errors         Ignore errors from recipes.\n"),
     341      N_("\
     342    -I DIRECTORY, --include-dir=DIRECTORY\n\
     343                                Search DIRECTORY for included makefiles.\n"),
     344      N_("\
     345    -j [N], --jobs[=N]          Allow N jobs at once; infinite jobs with no arg.\n"),
     346      N_("\
     347    --jobserver-style=STYLE     Select the style of jobserver to use.\n"),
     348      N_("\
     349    -k, --keep-going            Keep going when some targets can't be made.\n"),
     350      N_("\
     351    -l [N], --load-average[=N], --max-load[=N]\n\
     352                                Don't start multiple jobs unless load is below N.\n"),
     353      N_("\
     354    -L, --check-symlink-times   Use the latest mtime between symlinks and target.\n"),
     355      N_("\
     356    -n, --just-print, --dry-run, --recon\n\
     357                                Don't actually run any recipe; just print them.\n"),
     358      N_("\
     359    -o FILE, --old-file=FILE, --assume-old=FILE\n\
     360                                Consider FILE to be very old and don't remake it.\n"),
     361      N_("\
     362    -O[TYPE], --output-sync[=TYPE]\n\
     363                                Synchronize output of parallel jobs by TYPE.\n"),
     364      N_("\
     365    -p, --print-data-base       Print make's internal database.\n"),
     366      N_("\
     367    -q, --question              Run no recipe; exit status says if up to date.\n"),
     368      N_("\
     369    -r, --no-builtin-rules      Disable the built-in implicit rules.\n"),
     370      N_("\
     371    -R, --no-builtin-variables  Disable the built-in variable settings.\n"),
     372      N_("\
     373    --shuffle[={SEED|random|reverse|none}]\n\
     374                                Perform shuffle of prerequisites and goals.\n"),
     375      N_("\
     376    -s, --silent, --quiet       Don't echo recipes.\n"),
     377      N_("\
     378    --no-silent                 Echo recipes (disable --silent mode).\n"),
     379      N_("\
     380    -S, --no-keep-going, --stop\n\
     381                                Turns off -k.\n"),
     382      N_("\
     383    -t, --touch                 Touch targets instead of remaking them.\n"),
     384      N_("\
     385    --trace                     Print tracing information.\n"),
     386      N_("\
     387    -v, --version               Print the version number of make and exit.\n"),
     388      N_("\
     389    -w, --print-directory       Print the current directory.\n"),
     390      N_("\
     391    --no-print-directory        Turn off -w, even if it was turned on implicitly.\n"),
     392      N_("\
     393    -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE\n\
     394                                Consider FILE to be infinitely new.\n"),
     395      N_("\
     396    --warn-undefined-variables  Warn when an undefined variable is referenced.\n"),
     397      NULL
     398    };
     399  
     400  /* Nonzero if the "--trace" option was given.  */
     401  
     402  static int trace_flag = 0;
     403  
     404  /* The structure that describes an accepted command switch.  */
     405  
     406  struct command_switch
     407    {
     408      int c;                      /* The switch character.  */
     409  
     410      enum                        /* Type of the value.  */
     411        {
     412          flag,                   /* Turn int flag on.  */
     413          flag_off,               /* Turn int flag off.  */
     414          string,                 /* One string per invocation.  */
     415          strlist,                /* One string per switch.  */
     416          filename,               /* A string containing a file name.  */
     417          positive_int,           /* A positive integer.  */
     418          floating,               /* A floating-point number (double).  */
     419          ignore                  /* Ignored.  */
     420        } type;
     421  
     422      void *value_ptr;    /* Pointer to the value-holding variable.  */
     423  
     424      unsigned int env:1;         /* Can come from MAKEFLAGS.  */
     425      unsigned int toenv:1;       /* Should be put in MAKEFLAGS.  */
     426      unsigned int no_makefile:1; /* Don't propagate when remaking makefiles.  */
     427  
     428      const void *noarg_value;    /* Pointer to value used if no arg given.  */
     429      const void *default_value;  /* Pointer to default value.  */
     430  
     431      const char *long_name;      /* Long option name.  */
     432    };
     433  
     434  /* The table of command switches.
     435     Order matters here: this is the order MAKEFLAGS will be constructed.
     436     So be sure all simple flags (single char, no argument) come first.  */
     437  
     438  #define TEMP_STDIN_OPT (CHAR_MAX+10)
     439  
     440  static const struct command_switch switches[] =
     441    {
     442      { 'b', ignore, 0, 0, 0, 0, 0, 0, 0 },
     443      { 'B', flag, &always_make_set, 1, 1, 0, 0, 0, "always-make" },
     444      { 'd', flag, &debug_flag, 1, 1, 0, 0, 0, 0 },
     445      { 'e', flag, &env_overrides, 1, 1, 0, 0, 0, "environment-overrides", },
     446      { 'E', strlist, &eval_strings, 1, 0, 0, 0, 0, "eval" },
     447      { 'h', flag, &print_usage_flag, 0, 0, 0, 0, 0, "help" },
     448      { 'i', flag, &ignore_errors_flag, 1, 1, 0, 0, 0, "ignore-errors" },
     449      { 'k', flag, &keep_going_flag, 1, 1, 0, 0, &default_keep_going_flag,
     450        "keep-going" },
     451      { 'L', flag, &check_symlink_flag, 1, 1, 0, 0, 0, "check-symlink-times" },
     452      { 'm', ignore, 0, 0, 0, 0, 0, 0, 0 },
     453      { 'n', flag, &just_print_flag, 1, 1, 1, 0, 0, "just-print" },
     454      { 'p', flag, &print_data_base_flag, 1, 1, 0, 0, 0, "print-data-base" },
     455      { 'q', flag, &question_flag, 1, 1, 1, 0, 0, "question" },
     456      { 'r', flag, &no_builtin_rules_flag, 1, 1, 0, 0, 0, "no-builtin-rules" },
     457      { 'R', flag, &no_builtin_variables_flag, 1, 1, 0, 0, 0,
     458        "no-builtin-variables" },
     459      { 's', flag, &silent_flag, 1, 1, 0, 0, &default_silent_flag, "silent" },
     460      { 'S', flag_off, &keep_going_flag, 1, 1, 0, 0, &default_keep_going_flag,
     461        "no-keep-going" },
     462      { 't', flag, &touch_flag, 1, 1, 1, 0, 0, "touch" },
     463      { 'v', flag, &print_version_flag, 1, 0, 0, 0, 0, "version" },
     464      { 'w', flag, &print_directory_flag, 1, 1, 0, 0,
     465        &default_print_directory_flag, "print-directory" },
     466  
     467      /* These options take arguments.  */
     468      { 'C', filename, &directories, 0, 0, 0, 0, 0, "directory" },
     469      { 'f', filename, &makefiles, 0, 0, 0, 0, 0, "file" },
     470      { 'I', filename, &include_dirs, 1, 1, 0, 0, 0,
     471        "include-dir" },
     472      { 'j', positive_int, &arg_job_slots, 1, 1, 0, &inf_jobs, &default_job_slots,
     473        "jobs" },
     474      { 'l', floating, &max_load_average, 1, 1, 0, &default_load_average,
     475        &default_load_average, "load-average" },
     476      { 'o', filename, &old_files, 0, 0, 0, 0, 0, "old-file" },
     477      { 'O', string, &output_sync_option, 1, 1, 0, "target", 0, "output-sync" },
     478      { 'W', filename, &new_files, 0, 0, 0, 0, 0, "what-if" },
     479  
     480      /* These are long-style options.  */
     481      { CHAR_MAX+1, strlist, &db_flags, 1, 1, 0, "basic", 0, "debug" },
     482      { CHAR_MAX+2, string, &jobserver_auth, 1, 1, 0, 0, 0, JOBSERVER_AUTH_OPT },
     483      { CHAR_MAX+3, flag, &trace_flag, 1, 1, 0, 0, 0, "trace" },
     484      { CHAR_MAX+4, flag_off, &print_directory_flag, 1, 1, 0, 0,
     485        &default_print_directory_flag, "no-print-directory" },
     486      { CHAR_MAX+5, flag, &warn_undefined_variables_flag, 1, 1, 0, 0, 0,
     487        "warn-undefined-variables" },
     488      { CHAR_MAX+7, string, &sync_mutex, 1, 1, 0, 0, 0, "sync-mutex" },
     489      { CHAR_MAX+8, flag_off, &silent_flag, 1, 1, 0, 0, &default_silent_flag,
     490        "no-silent" },
     491      { CHAR_MAX+9, string, &jobserver_auth, 1, 0, 0, 0, 0, "jobserver-fds" },
     492      /* There is special-case handling for this in decode_switches() as well.  */
     493      { TEMP_STDIN_OPT, filename, &makefiles, 0, 0, 0, 0, 0, "temp-stdin" },
     494      { CHAR_MAX+11, string, &shuffle_mode, 1, 1, 0, "random", 0, "shuffle" },
     495      { CHAR_MAX+12, string, &jobserver_style, 1, 0, 0, 0, 0, "jobserver-style" },
     496      { 0, 0, 0, 0, 0, 0, 0, 0, 0 }
     497    };
     498  
     499  /* Secondary long names for options.  */
     500  
     501  static struct option long_option_aliases[] =
     502    {
     503      { "quiet",          no_argument,            0, 's' },
     504      { "stop",           no_argument,            0, 'S' },
     505      { "new-file",       required_argument,      0, 'W' },
     506      { "assume-new",     required_argument,      0, 'W' },
     507      { "assume-old",     required_argument,      0, 'o' },
     508      { "max-load",       optional_argument,      0, 'l' },
     509      { "dry-run",        no_argument,            0, 'n' },
     510      { "recon",          no_argument,            0, 'n' },
     511      { "makefile",       required_argument,      0, 'f' },
     512    };
     513  
     514  /* List of goal targets.  */
     515  
     516  static struct goaldep *goals, *lastgoal;
     517  
     518  /* List of variables which were defined on the command line
     519     (or, equivalently, in MAKEFLAGS).  */
     520  
     521  struct command_variable
     522    {
     523      struct command_variable *next;
     524      struct variable *variable;
     525    };
     526  static struct command_variable *command_variables;
     527  
     528  /* The name we were invoked with.  */
     529  
     530  const char *program;
     531  
     532  /* Our current directory before processing any -C options.  */
     533  
     534  char *directory_before_chdir;
     535  
     536  /* Our current directory after processing all -C options.  */
     537  
     538  char *starting_directory;
     539  
     540  /* Value of the MAKELEVEL variable at startup (or 0).  */
     541  
     542  unsigned int makelevel;
     543  
     544  /* Pointer to the value of the .DEFAULT_GOAL special variable.
     545     The value will be the name of the goal to remake if the command line
     546     does not override it.  It can be set by the makefile, or else it's
     547     the first target defined in the makefile whose name does not start
     548     with '.'.  */
     549  
     550  struct variable * default_goal_var;
     551  
     552  /* Pointer to structure for the file .DEFAULT
     553     whose commands are used for any file that has none of its own.
     554     This is zero if the makefiles do not define .DEFAULT.  */
     555  
     556  struct file *default_file;
     557  
     558  /* Nonzero if we have seen the magic '.POSIX' target.
     559     This turns on pedantic compliance with POSIX.2.  */
     560  
     561  int posix_pedantic;
     562  
     563  /* Nonzero if we have seen the '.SECONDEXPANSION' target.
     564     This turns on secondary expansion of prerequisites.  */
     565  
     566  int second_expansion;
     567  
     568  /* Nonzero if we have seen the '.ONESHELL' target.
     569     This causes the entire recipe to be handed to SHELL
     570     as a single string, potentially containing newlines.  */
     571  
     572  int one_shell;
     573  
     574  /* One of OUTPUT_SYNC_* if the "--output-sync" option was given.  This
     575     attempts to synchronize the output of parallel jobs such that the results
     576     of each job stay together.  */
     577  
     578  int output_sync = OUTPUT_SYNC_NONE;
     579  
     580  /* Nonzero if we have seen the '.NOTPARALLEL' target.
     581     This turns off parallel builds for this invocation of make.  */
     582  
     583  int not_parallel;
     584  
     585  /* Nonzero if some rule detected clock skew; we keep track so (a) we only
     586     print one warning about it during the run, and (b) we can print a final
     587     warning at the end of the run. */
     588  
     589  int clock_skew_detected;
     590  
     591  /* Map of possible stop characters for searching strings.  */
     592  #ifndef UCHAR_MAX
     593  # define UCHAR_MAX 255
     594  #endif
     595  unsigned short stopchar_map[UCHAR_MAX + 1] = {0};
     596  
     597  /* If output-sync is enabled we'll collect all the output generated due to
     598     options, while reading makefiles, etc.  */
     599  
     600  struct output make_sync;
     601  
     602  
     603  /* Mask of signals that are being caught with fatal_error_signal.  */
     604  
     605  #if defined(POSIX)
     606  sigset_t fatal_signal_set;
     607  #elif defined(HAVE_SIGSETMASK)
     608  int fatal_signal_mask;
     609  #endif
     610  
     611  #if !HAVE_DECL_BSD_SIGNAL && !defined bsd_signal
     612  # if !defined HAVE_SIGACTION
     613  #  define bsd_signal signal
     614  # else
     615  typedef void (*bsd_signal_ret_t) (int);
     616  
     617  static bsd_signal_ret_t
     618  bsd_signal (int sig, bsd_signal_ret_t func)
     619  {
     620    struct sigaction act, oact;
     621    act.sa_handler = func;
     622    act.sa_flags = SA_RESTART;
     623    sigemptyset (&act.sa_mask);
     624    sigaddset (&act.sa_mask, sig);
     625    if (sigaction (sig, &act, &oact) != 0)
     626      return SIG_ERR;
     627    return oact.sa_handler;
     628  }
     629  # endif
     630  #endif
     631  
     632  static void
     633  initialize_global_hash_tables (void)
     634  {
     635    init_hash_global_variable_set ();
     636    strcache_init ();
     637    init_hash_files ();
     638    hash_init_directories ();
     639    hash_init_function_table ();
     640  }
     641  
     642  /* This character map locate stop chars when parsing GNU makefiles.
     643     Each element is true if we should stop parsing on that character.  */
     644  
     645  static void
     646  initialize_stopchar_map (void)
     647  {
     648    int i;
     649  
     650    stopchar_map[(int)'\0'] = MAP_NUL;
     651    stopchar_map[(int)'#'] = MAP_COMMENT;
     652    stopchar_map[(int)';'] = MAP_SEMI;
     653    stopchar_map[(int)'='] = MAP_EQUALS;
     654    stopchar_map[(int)':'] = MAP_COLON;
     655    stopchar_map[(int)'|'] = MAP_PIPE;
     656    stopchar_map[(int)'.'] = MAP_DOT | MAP_USERFUNC;
     657    stopchar_map[(int)','] = MAP_COMMA;
     658    stopchar_map[(int)'('] = MAP_VARSEP;
     659    stopchar_map[(int)'{'] = MAP_VARSEP;
     660    stopchar_map[(int)'}'] = MAP_VARSEP;
     661    stopchar_map[(int)')'] = MAP_VARSEP;
     662    stopchar_map[(int)'$'] = MAP_VARIABLE;
     663  
     664    stopchar_map[(int)'-'] = MAP_USERFUNC;
     665    stopchar_map[(int)'_'] = MAP_USERFUNC;
     666  
     667    stopchar_map[(int)' '] = MAP_BLANK;
     668    stopchar_map[(int)'\t'] = MAP_BLANK;
     669  
     670    stopchar_map[(int)'/'] = MAP_DIRSEP;
     671  #if defined(VMS)
     672    stopchar_map[(int)':'] |= MAP_DIRSEP;
     673    stopchar_map[(int)']'] |= MAP_DIRSEP;
     674    stopchar_map[(int)'>'] |= MAP_DIRSEP;
     675  #elif defined(HAVE_DOS_PATHS)
     676    stopchar_map[(int)'\\'] |= MAP_DIRSEP;
     677  #endif
     678  
     679    for (i = 1; i <= UCHAR_MAX; ++i)
     680      {
     681        if (isspace (i) && NONE_SET (stopchar_map[i], MAP_BLANK))
     682          /* Don't mark blank characters as newline characters.  */
     683          stopchar_map[i] |= MAP_NEWLINE;
     684        else if (isalnum (i))
     685          stopchar_map[i] |= MAP_USERFUNC;
     686      }
     687  }
     688  
     689  /* This code is stolen from gnulib.
     690     If/when we abandon the requirement to work with K&R compilers, we can
     691     remove this (and perhaps other parts of GNU make!) and migrate to using
     692     gnulib directly.
     693  
     694     This is called only through atexit(), which means die() has already been
     695     invoked.  So, call exit() here directly.  Apparently that works...?
     696  */
     697  
     698  /* Close standard output, exiting with status 'exit_failure' on failure.
     699     If a program writes *anything* to stdout, that program should close
     700     stdout and make sure that it succeeds before exiting.  Otherwise,
     701     suppose that you go to the extreme of checking the return status
     702     of every function that does an explicit write to stdout.  The last
     703     printf can succeed in writing to the internal stream buffer, and yet
     704     the fclose(stdout) could still fail (due e.g., to a disk full error)
     705     when it tries to write out that buffered data.  Thus, you would be
     706     left with an incomplete output file and the offending program would
     707     exit successfully.  Even calling fflush is not always sufficient,
     708     since some file systems (NFS and CODA) buffer written/flushed data
     709     until an actual close call.
     710  
     711     Besides, it's wasteful to check the return value from every call
     712     that writes to stdout -- just let the internal stream state record
     713     the failure.  That's what the ferror test is checking below.
     714  
     715     It's important to detect such failures and exit nonzero because many
     716     tools (most notably 'make' and other build-management systems) depend
     717     on being able to detect failure in other tools via their exit status.  */
     718  
     719  static void
     720  close_stdout (void)
     721  {
     722    int prev_fail = ferror (stdout);
     723    int fclose_fail = fclose (stdout);
     724  
     725    if (prev_fail || fclose_fail)
     726      {
     727        if (fclose_fail)
     728          perror_with_name (_("write error: stdout"), "");
     729        else
     730          O (error, NILF, _("write error: stdout"));
     731        exit (MAKE_TROUBLE);
     732      }
     733  }
     734  
     735  static const char *
     736  expand_command_line_file (const char *name)
     737  {
     738    const char *cp;
     739    char *expanded = 0;
     740  
     741    if (name[0] == '\0')
     742      O (fatal, NILF, _("empty string invalid as file name"));
     743  
     744    if (name[0] == '~')
     745      {
     746        expanded = tilde_expand (name);
     747        if (expanded && expanded[0] != '\0')
     748          name = expanded;
     749      }
     750  
     751    /* This is also done in parse_file_seq, so this is redundant
     752       for names read from makefiles.  It is here for names passed
     753       on the command line.  */
     754    while (name[0] == '.' && name[1] == '/')
     755      {
     756        name += 2;
     757        while (name[0] == '/')
     758          /* Skip following slashes: ".//foo" is "foo", not "/foo".  */
     759          ++name;
     760      }
     761  
     762    if (name[0] == '\0')
     763      {
     764        /* Nothing else but one or more "./", maybe plus slashes!  */
     765        name = "./";
     766      }
     767  
     768    cp = strcache_add (name);
     769  
     770    free (expanded);
     771  
     772    return cp;
     773  }
     774  
     775  /* Toggle -d on receipt of SIGUSR1.  */
     776  
     777  #ifdef SIGUSR1
     778  static void
     779  debug_signal_handler (int sig UNUSED)
     780  {
     781    db_level = db_level ? DB_NONE : DB_BASIC;
     782  }
     783  #endif
     784  
     785  static void
     786  decode_debug_flags (void)
     787  {
     788    const char **pp;
     789  
     790    if (debug_flag)
     791      db_level = DB_ALL;
     792  
     793    if (trace_flag)
     794      db_level |= DB_PRINT | DB_WHY;
     795  
     796    if (db_flags)
     797      for (pp=db_flags->list; *pp; ++pp)
     798        {
     799          const char *p = *pp;
     800  
     801          while (1)
     802            {
     803              switch (tolower (p[0]))
     804                {
     805                case 'a':
     806                  db_level |= DB_ALL;
     807                  break;
     808                case 'b':
     809                  db_level |= DB_BASIC;
     810                  break;
     811                case 'i':
     812                  db_level |= DB_BASIC | DB_IMPLICIT;
     813                  break;
     814                case 'j':
     815                  db_level |= DB_JOBS;
     816                  break;
     817                case 'm':
     818                  db_level |= DB_BASIC | DB_MAKEFILES;
     819                  break;
     820                case 'n':
     821                  db_level = 0;
     822                  break;
     823                case 'p':
     824                  db_level |= DB_PRINT;
     825                  break;
     826                case 'v':
     827                  db_level |= DB_BASIC | DB_VERBOSE;
     828                  break;
     829                case 'w':
     830                  db_level |= DB_WHY;
     831                  break;
     832                default:
     833                  OS (fatal, NILF,
     834                      _("unknown debug level specification '%s'"), p);
     835                }
     836  
     837              while (*(++p) != '\0')
     838                if (*p == ',' || *p == ' ')
     839                  {
     840                    ++p;
     841                    break;
     842                  }
     843  
     844              if (*p == '\0')
     845                break;
     846            }
     847        }
     848  
     849    if (db_level)
     850      verify_flag = 1;
     851  
     852    if (! db_level)
     853      debug_flag = 0;
     854  }
     855  
     856  static void
     857  decode_output_sync_flags (void)
     858  {
     859  #ifdef NO_OUTPUT_SYNC
     860    output_sync = OUTPUT_SYNC_NONE;
     861  #else
     862    if (output_sync_option)
     863      {
     864        if (streq (output_sync_option, "none"))
     865          output_sync = OUTPUT_SYNC_NONE;
     866        else if (streq (output_sync_option, "line"))
     867          output_sync = OUTPUT_SYNC_LINE;
     868        else if (streq (output_sync_option, "target"))
     869          output_sync = OUTPUT_SYNC_TARGET;
     870        else if (streq (output_sync_option, "recurse"))
     871          output_sync = OUTPUT_SYNC_RECURSE;
     872        else
     873          OS (fatal, NILF,
     874              _("unknown output-sync type '%s'"), output_sync_option);
     875      }
     876  
     877    if (sync_mutex)
     878      osync_parse_mutex (sync_mutex);
     879  #endif
     880  }
     881  
     882  /* Print a nice usage method and exit.  */
     883  
     884  static void NORETURN
     885  print_usage (int bad)
     886  {
     887    const char *const *cpp;
     888    FILE *usageto;
     889  
     890    if (print_version_flag)
     891      {
     892        print_version ();
     893        fputs ("\n", stdout);
     894      }
     895  
     896    usageto = bad ? stderr : stdout;
     897  
     898    fprintf (usageto, _("Usage: %s [options] [target] ...\n"), program);
     899  
     900    for (cpp = usage; *cpp; ++cpp)
     901      fputs (_(*cpp), usageto);
     902  
     903    if (!remote_description || *remote_description == '\0')
     904      fprintf (usageto, _("\nThis program built for %s\n"), make_host);
     905    else
     906      fprintf (usageto, _("\nThis program built for %s (%s)\n"),
     907               make_host, remote_description);
     908  
     909    fprintf (usageto, _("Report bugs to <bug-make@gnu.org>\n"));
     910  
     911    die (bad ? MAKE_FAILURE : MAKE_SUCCESS);
     912  }
     913  
     914  #ifdef WINDOWS32
     915  
     916  /*
     917   * HANDLE runtime exceptions by avoiding a requestor on the GUI. Capture
     918   * exception and print it to stderr instead.
     919   *
     920   * If ! DB_VERBOSE, just print a simple message and exit.
     921   * If DB_VERBOSE, print a more verbose message.
     922   * If compiled for DEBUG, let exception pass through to GUI so that
     923   *   debuggers can attach.
     924   */
     925  LONG WINAPI
     926  handle_runtime_exceptions (struct _EXCEPTION_POINTERS *exinfo)
     927  {
     928    PEXCEPTION_RECORD exrec = exinfo->ExceptionRecord;
     929    LPSTR cmdline = GetCommandLine ();
     930    LPSTR prg = strtok (cmdline, " ");
     931    CHAR errmsg[1024];
     932  #ifdef USE_EVENT_LOG
     933    HANDLE hEventSource;
     934    LPTSTR lpszStrings[1];
     935  #endif
     936  
     937    if (! ISDB (DB_VERBOSE))
     938      {
     939        sprintf (errmsg,
     940                 _("%s: Interrupt/Exception caught (code = 0x%lx, addr = 0x%p)\n"),
     941                 prg, exrec->ExceptionCode, exrec->ExceptionAddress);
     942        fprintf (stderr, errmsg);
     943        exit (255);
     944      }
     945  
     946    sprintf (errmsg,
     947             _("\nUnhandled exception filter called from program %s\nExceptionCode = %lx\nExceptionFlags = %lx\nExceptionAddress = 0x%p\n"),
     948             prg, exrec->ExceptionCode, exrec->ExceptionFlags,
     949             exrec->ExceptionAddress);
     950  
     951    if (exrec->ExceptionCode == EXCEPTION_ACCESS_VIOLATION
     952        && exrec->NumberParameters >= 2)
     953      sprintf (&errmsg[strlen(errmsg)],
     954               (exrec->ExceptionInformation[0]
     955                ? _("Access violation: write operation at address 0x%p\n")
     956                : _("Access violation: read operation at address 0x%p\n")),
     957               (PVOID)exrec->ExceptionInformation[1]);
     958  
     959    /* turn this on if we want to put stuff in the event log too */
     960  #ifdef USE_EVENT_LOG
     961    hEventSource = RegisterEventSource (NULL, "GNU Make");
     962    lpszStrings[0] = errmsg;
     963  
     964    if (hEventSource != NULL)
     965      {
     966        ReportEvent (hEventSource,         /* handle of event source */
     967                     EVENTLOG_ERROR_TYPE,  /* event type */
     968                     0,                    /* event category */
     969                     0,                    /* event ID */
     970                     NULL,                 /* current user's SID */
     971                     1,                    /* strings in lpszStrings */
     972                     0,                    /* no bytes of raw data */
     973                     lpszStrings,          /* array of error strings */
     974                     NULL);                /* no raw data */
     975  
     976        (VOID) DeregisterEventSource (hEventSource);
     977      }
     978  #endif
     979  
     980    /* Write the error to stderr too */
     981    fprintf (stderr, errmsg);
     982  
     983  #ifdef DEBUG
     984    return EXCEPTION_CONTINUE_SEARCH;
     985  #else
     986    exit (255);
     987    return (255); /* not reached */
     988  #endif
     989  }
     990  
     991  /*
     992   * On W32 systems we don't have the luxury of a /bin directory that
     993   * is mapped globally to every drive mounted to the system. Since make could
     994   * be invoked from any drive, and we don't want to propagate /bin/sh
     995   * to every single drive. Allow ourselves a chance to search for
     996   * a value for default shell here (if the default path does not exist).
     997   */
     998  
     999  int
    1000  find_and_set_default_shell (const char *token)
    1001  {
    1002    int sh_found = 0;
    1003    char *atoken = 0;
    1004    const char *search_token;
    1005    const char *tokend;
    1006    extern const char *default_shell;
    1007  
    1008    if (!token)
    1009      search_token = default_shell;
    1010    else
    1011      search_token = atoken = xstrdup (token);
    1012  
    1013    /* If the user explicitly requests the DOS cmd shell, obey that request.
    1014       However, make sure that's what they really want by requiring the value
    1015       of SHELL either equal, or have a final path element of, "cmd" or
    1016       "cmd.exe" case-insensitive.  */
    1017    tokend = search_token + strlen (search_token) - 3;
    1018    if (((tokend == search_token
    1019          || (tokend > search_token && ISDIRSEP (tokend[-1])))
    1020         && !strcasecmp (tokend, "cmd"))
    1021        || ((tokend - 4 == search_token
    1022             || (tokend - 4 > search_token && ISDIRSEP (tokend[-5])))
    1023            && !strcasecmp (tokend - 4, "cmd.exe")))
    1024      {
    1025        batch_mode_shell = 1;
    1026        unixy_shell = 0;
    1027        default_shell = xstrdup (w32ify (search_token, 0));
    1028        DB (DB_VERBOSE, (_("find_and_set_shell() setting default_shell = %s\n"),
    1029                         default_shell));
    1030        sh_found = 1;
    1031      }
    1032    else if (!no_default_sh_exe
    1033             && (token == NULL || !strcmp (search_token, default_shell)))
    1034      {
    1035        /* no new information, path already set or known */
    1036        sh_found = 1;
    1037      }
    1038    else if (_access (search_token, 0) == 0)
    1039      {
    1040        /* search token path was found */
    1041        default_shell = xstrdup (w32ify (search_token, 0));
    1042        DB (DB_VERBOSE, (_("find_and_set_shell() setting default_shell = %s\n"),
    1043                         default_shell));
    1044        sh_found = 1;
    1045      }
    1046    else
    1047      {
    1048        char *p;
    1049        struct variable *v = lookup_variable (STRING_SIZE_TUPLE ("PATH"));
    1050  
    1051        /* Search Path for shell */
    1052        if (v && v->value)
    1053          {
    1054            char *ep;
    1055  
    1056            p  = v->value;
    1057            ep = strchr (p, PATH_SEPARATOR_CHAR);
    1058  
    1059            while (ep && *ep)
    1060              {
    1061                PATH_VAR (sh_path);
    1062  
    1063                *ep = '\0';
    1064  
    1065                snprintf (sh_path, GET_PATH_MAX, "%s/%s", p, search_token);
    1066                if (_access (sh_path, 0) == 0)
    1067                  {
    1068                    default_shell = xstrdup (w32ify (sh_path, 0));
    1069                    sh_found = 1;
    1070                    *ep = PATH_SEPARATOR_CHAR;
    1071  
    1072                    /* terminate loop */
    1073                    p += strlen (p);
    1074                  }
    1075                else
    1076                  {
    1077                    *ep = PATH_SEPARATOR_CHAR;
    1078                    p = ++ep;
    1079                  }
    1080  
    1081                ep = strchr (p, PATH_SEPARATOR_CHAR);
    1082              }
    1083  
    1084            /* be sure to check last element of Path */
    1085            if (p && *p)
    1086              {
    1087                PATH_VAR (sh_path);
    1088                snprintf (sh_path, GET_PATH_MAX, "%s/%s", p, search_token);
    1089                if (_access (sh_path, 0) == 0)
    1090                  {
    1091                    default_shell = xstrdup (w32ify (sh_path, 0));
    1092                    sh_found = 1;
    1093                  }
    1094              }
    1095  
    1096            if (sh_found)
    1097              DB (DB_VERBOSE,
    1098                  (_("find_and_set_shell() path search set default_shell = %s\n"),
    1099                   default_shell));
    1100          }
    1101      }
    1102  
    1103    /* naive test */
    1104    if (!unixy_shell && sh_found
    1105        && (strstr (default_shell, "sh") || strstr (default_shell, "SH")))
    1106      {
    1107        unixy_shell = 1;
    1108        batch_mode_shell = 0;
    1109      }
    1110  
    1111  #ifdef BATCH_MODE_ONLY_SHELL
    1112    batch_mode_shell = 1;
    1113  #endif
    1114  
    1115    free (atoken);
    1116  
    1117    return (sh_found);
    1118  }
    1119  #endif  /* WINDOWS32 */
    1120  
    1121  #ifdef __MSDOS__
    1122  static void
    1123  msdos_return_to_initial_directory (void)
    1124  {
    1125    if (directory_before_chdir)
    1126      chdir (directory_before_chdir);
    1127  }
    1128  #endif  /* __MSDOS__ */
    1129  
    1130  static void
    1131  reset_jobserver (void)
    1132  {
    1133    jobserver_clear ();
    1134    free (jobserver_auth);
    1135    jobserver_auth = NULL;
    1136  }
    1137  
    1138  void
    1139  temp_stdin_unlink ()
    1140  {
    1141    /* This function is called from a signal handler.  Keep async-signal-safe.
    1142       If there is a temp file from reading from stdin, get rid of it.  */
    1143    if (stdin_offset >= 0)
    1144      {
    1145        const char *nm = makefiles->list[stdin_offset];
    1146        int r = 0;
    1147  
    1148        stdin_offset = -1;
    1149        EINTRLOOP(r, unlink (nm));
    1150        if (r < 0 && errno != ENOENT && !handling_fatal_signal)
    1151          perror_with_name (_("unlink (temporary file): "), nm);
    1152      }
    1153  }
    1154  
    1155  #ifdef _AMIGA
    1156  int
    1157  main (int argc, char **argv)
    1158  #else
    1159  int
    1160  main (int argc, char **argv, char **envp)
    1161  #endif
    1162  {
    1163    int makefile_status = MAKE_SUCCESS;
    1164    struct goaldep *read_files;
    1165    PATH_VAR (current_directory);
    1166    unsigned int restarts = 0;
    1167    unsigned int syncing = 0;
    1168    int argv_slots;  /* The jobslot info we got from our parent process.  */
    1169  #ifdef WINDOWS32
    1170    const char *unix_path = NULL;
    1171    const char *windows32_path = NULL;
    1172  
    1173    SetUnhandledExceptionFilter (handle_runtime_exceptions);
    1174  
    1175    /* start off assuming we have no shell */
    1176    unixy_shell = 0;
    1177    no_default_sh_exe = 1;
    1178  #endif
    1179  
    1180    initialize_variable_output ();
    1181  
    1182    /* Useful for attaching debuggers, etc.  */
    1183    SPIN ("main-entry");
    1184  
    1185    /* Don't die if our stdout sends us SIGPIPE.  */
    1186  #ifdef SIGPIPE
    1187    bsd_signal (SIGPIPE, SIG_IGN);
    1188  #endif
    1189  
    1190  #ifdef HAVE_ATEXIT
    1191    if (ANY_SET (check_io_state (), IO_STDOUT_OK))
    1192      atexit (close_stdout);
    1193  #endif
    1194  
    1195    output_init (&make_sync);
    1196  
    1197    initialize_stopchar_map();
    1198  
    1199  #ifdef SET_STACK_SIZE
    1200   /* Get rid of any avoidable limit on stack size.  */
    1201    {
    1202      struct rlimit rlim;
    1203  
    1204      /* Set the stack limit huge so that alloca does not fail.  */
    1205      if (getrlimit (RLIMIT_STACK, &rlim) == 0
    1206          && rlim.rlim_cur > 0 && rlim.rlim_cur < rlim.rlim_max)
    1207        {
    1208          stack_limit = rlim;
    1209          rlim.rlim_cur = rlim.rlim_max;
    1210          setrlimit (RLIMIT_STACK, &rlim);
    1211        }
    1212      else
    1213        stack_limit.rlim_cur = 0;
    1214    }
    1215  #endif
    1216  
    1217    /* Needed for OS/2 */
    1218    initialize_main (&argc, &argv);
    1219  
    1220  #ifdef MAKE_MAINTAINER_MODE
    1221    /* In maintainer mode we always enable verification.  */
    1222    verify_flag = 1;
    1223  #endif
    1224  
    1225  #if defined (__MSDOS__) && !defined (_POSIX_SOURCE)
    1226    /* Request the most powerful version of 'system', to
    1227       make up for the dumb default shell.  */
    1228    __system_flags = (__system_redirect
    1229                      | __system_use_shell
    1230                      | __system_allow_multiple_cmds
    1231                      | __system_allow_long_cmds
    1232                      | __system_handle_null_commands
    1233                      | __system_emulate_chdir);
    1234  
    1235  #endif
    1236  
    1237    /* Set up gettext/internationalization support.  */
    1238    setlocale (LC_ALL, "");
    1239    /* The cast to void shuts up compiler warnings on systems that
    1240       disable NLS.  */
    1241    (void)bindtextdomain (PACKAGE, LOCALEDIR);
    1242    (void)textdomain (PACKAGE);
    1243  
    1244  #ifdef  POSIX
    1245    sigemptyset (&fatal_signal_set);
    1246  #define ADD_SIG(sig)    sigaddset (&fatal_signal_set, sig)
    1247  #else
    1248  #ifdef  HAVE_SIGSETMASK
    1249    fatal_signal_mask = 0;
    1250  #define ADD_SIG(sig)    fatal_signal_mask |= sigmask (sig)
    1251  #else
    1252  #define ADD_SIG(sig)    (void)sig
    1253  #endif
    1254  #endif
    1255  
    1256  #define FATAL_SIG(sig)                                                        \
    1257    if (bsd_signal (sig, fatal_error_signal) == SIG_IGN)                        \
    1258      bsd_signal (sig, SIG_IGN);                                                \
    1259    else                                                                        \
    1260      ADD_SIG (sig);
    1261  
    1262  #ifdef SIGHUP
    1263    FATAL_SIG (SIGHUP);
    1264  #endif
    1265  #ifdef SIGQUIT
    1266    FATAL_SIG (SIGQUIT);
    1267  #endif
    1268    FATAL_SIG (SIGINT);
    1269    FATAL_SIG (SIGTERM);
    1270  
    1271  #ifdef __MSDOS__
    1272    /* Windows 9X delivers FP exceptions in child programs to their
    1273       parent!  We don't want Make to die when a child divides by zero,
    1274       so we work around that lossage by catching SIGFPE.  */
    1275    FATAL_SIG (SIGFPE);
    1276  #endif
    1277  
    1278  #ifdef  SIGDANGER
    1279    FATAL_SIG (SIGDANGER);
    1280  #endif
    1281  #ifdef SIGXCPU
    1282    FATAL_SIG (SIGXCPU);
    1283  #endif
    1284  #ifdef SIGXFSZ
    1285    FATAL_SIG (SIGXFSZ);
    1286  #endif
    1287  
    1288  #undef  FATAL_SIG
    1289  
    1290    /* Do not ignore the child-death signal.  This must be done before
    1291       any children could possibly be created; otherwise, the wait
    1292       functions won't work on systems with the SVR4 ECHILD brain
    1293       damage, if our invoker is ignoring this signal.  */
    1294  
    1295  #ifdef HAVE_WAIT_NOHANG
    1296  # if defined SIGCHLD
    1297    (void) bsd_signal (SIGCHLD, SIG_DFL);
    1298  # endif
    1299  # if defined SIGCLD && SIGCLD != SIGCHLD
    1300    (void) bsd_signal (SIGCLD, SIG_DFL);
    1301  # endif
    1302  #endif
    1303  
    1304    output_init (NULL);
    1305  
    1306    /* Figure out where this program lives.  */
    1307  
    1308    if (argv[0] == 0)
    1309      argv[0] = (char *)"";
    1310    if (argv[0][0] == '\0')
    1311      program = "make";
    1312    else
    1313      {
    1314  #if defined(HAVE_DOS_PATHS)
    1315        const char* start = argv[0];
    1316  
    1317        /* Skip an initial drive specifier if present.  */
    1318        if (isalpha ((unsigned char)start[0]) && start[1] == ':')
    1319          start += 2;
    1320  
    1321        if (start[0] == '\0')
    1322          program = "make";
    1323        else
    1324          {
    1325            program = start + strlen (start);
    1326            while (program > start && ! ISDIRSEP (program[-1]))
    1327              --program;
    1328  
    1329            /* Remove the .exe extension if present.  */
    1330            {
    1331              size_t len = strlen (program);
    1332              if (len > 4 && streq (&program[len - 4], ".exe"))
    1333                program = xstrndup (program, len - 4);
    1334            }
    1335          }
    1336  #elif defined(VMS)
    1337        set_program_name (argv[0]);
    1338        program = program_name;
    1339        {
    1340          const char *shell;
    1341          char pwdbuf[256];
    1342          char *pwd;
    1343          shell = getenv ("SHELL");
    1344          if (shell != NULL)
    1345            vms_gnv_shell = 1;
    1346  
    1347          /* Need to know if CRTL set to report UNIX paths.  Use getcwd as
    1348             it works on all versions of VMS. */
    1349          pwd = getcwd(pwdbuf, 256);
    1350          if (pwd[0] == '/')
    1351            vms_report_unix_paths = 1;
    1352  
    1353          vms_use_mcr_command = get_vms_env_flag ("GNV$MAKE_USE_MCR", 0);
    1354  
    1355          vms_always_use_cmd_file = get_vms_env_flag ("GNV$MAKE_USE_CMD_FILE", 0);
    1356  
    1357          /* Legacy behavior is on VMS is older behavior that needed to be
    1358             changed to be compatible with standard make behavior.
    1359             For now only completely disable when running under a Bash shell.
    1360             TODO: Update VMS built in recipes and macros to not need this
    1361             behavior, at which time the default may change. */
    1362          vms_legacy_behavior = get_vms_env_flag ("GNV$MAKE_OLD_VMS",
    1363                                                  !vms_gnv_shell);
    1364  
    1365          /* VMS was changed to use a comma separator in the past, but that is
    1366             incompatible with built in functions that expect space separated
    1367             lists.  Allow this to be selectively turned off. */
    1368          vms_comma_separator = get_vms_env_flag ("GNV$MAKE_COMMA",
    1369                                                  vms_legacy_behavior);
    1370  
    1371          /* Some Posix shell syntax options are incompatible with VMS syntax.
    1372             VMS requires double quotes for strings and escapes quotes
    1373             differently.  When this option is active, VMS will try
    1374             to simulate Posix shell simulations instead of using
    1375             VMS DCL behavior. */
    1376          vms_unix_simulation = get_vms_env_flag ("GNV$MAKE_SHELL_SIM",
    1377                                                  !vms_legacy_behavior);
    1378  
    1379        }
    1380        if (need_vms_symbol () && !vms_use_mcr_command)
    1381          create_foreign_command (program_name, argv[0]);
    1382  #else
    1383        program = strrchr (argv[0], '/');
    1384        if (program == 0)
    1385          program = argv[0];
    1386        else
    1387          ++program;
    1388  #endif
    1389      }
    1390  
    1391    initialize_global_hash_tables ();
    1392  
    1393    /* Ensure the temp directory is set up: we don't want the first time we use
    1394       it to be in a forked process.  */
    1395    get_tmpdir ();
    1396  
    1397    /* Figure out where we are.  */
    1398  
    1399  #ifdef WINDOWS32
    1400    if (getcwd_fs (current_directory, GET_PATH_MAX) == 0)
    1401  #else
    1402    if (getcwd (current_directory, GET_PATH_MAX) == 0)
    1403  #endif
    1404      {
    1405  #ifdef  HAVE_GETCWD
    1406        perror_with_name ("getcwd", "");
    1407  #else
    1408        OS (error, NILF, "getwd: %s", current_directory);
    1409  #endif
    1410        current_directory[0] = '\0';
    1411        directory_before_chdir = 0;
    1412      }
    1413    else
    1414      directory_before_chdir = xstrdup (current_directory);
    1415  
    1416  #ifdef  __MSDOS__
    1417    /* Make sure we will return to the initial directory, come what may.  */
    1418    atexit (msdos_return_to_initial_directory);
    1419  #endif
    1420  
    1421    /* Initialize the special variables.  */
    1422    define_variable_cname (".VARIABLES", "", o_default, 0)->special = 1;
    1423    /* define_variable_cname (".TARGETS", "", o_default, 0)->special = 1; */
    1424    define_variable_cname (".RECIPEPREFIX", "", o_default, 0)->special = 1;
    1425    define_variable_cname (".SHELLFLAGS", "-c", o_default, 0);
    1426    define_variable_cname (".LOADED", "", o_default, 0);
    1427  
    1428    /* Set up .FEATURES
    1429       Use a separate variable because define_variable_cname() is a macro and
    1430       some compilers (MSVC) don't like conditionals in macros.  */
    1431    {
    1432      const char *features = "target-specific order-only second-expansion"
    1433                             " else-if shortest-stem undefine oneshell nocomment"
    1434                             " grouped-target extra-prereqs notintermediate"
    1435                             " shell-export"
    1436  #ifndef NO_ARCHIVES
    1437                             " archives"
    1438  #endif
    1439  #ifdef MAKE_JOBSERVER
    1440                             " jobserver"
    1441  # ifdef HAVE_MKFIFO
    1442                             " jobserver-fifo"
    1443  # endif
    1444  #endif
    1445  #ifndef NO_OUTPUT_SYNC
    1446                             " output-sync"
    1447  #endif
    1448  #ifdef MAKE_SYMLINKS
    1449                             " check-symlink"
    1450  #endif
    1451  #ifdef HAVE_GUILE
    1452                             " guile"
    1453  #endif
    1454  #ifdef MAKE_LOAD
    1455                             " load"
    1456  #endif
    1457  #ifdef MAKE_MAINTAINER_MODE
    1458                             " maintainer"
    1459  #endif
    1460                             ;
    1461  
    1462      define_variable_cname (".FEATURES", features, o_default, 0);
    1463    }
    1464  
    1465    /* Configure GNU Guile support */
    1466    guile_gmake_setup (NILF);
    1467  
    1468    /* Read in variables from the environment.  It is important that this be
    1469       done before $(MAKE) is figured out so its definitions will not be
    1470       from the environment.  */
    1471  
    1472  #ifndef _AMIGA
    1473    {
    1474      unsigned int i;
    1475  
    1476      for (i = 0; envp[i] != 0; ++i)
    1477        {
    1478          struct variable *v;
    1479          const char *ep = envp[i];
    1480          /* By default, export all variables culled from the environment.  */
    1481          enum variable_export export = v_export;
    1482          size_t len;
    1483  
    1484          while (! STOP_SET (*ep, MAP_EQUALS|MAP_NUL))
    1485            ++ep;
    1486  
    1487          /* If there's no equals sign it's a malformed environment.  Ignore.  */
    1488          if (*ep == '\0')
    1489            continue;
    1490  
    1491  #ifdef WINDOWS32
    1492          if (!unix_path && strneq (envp[i], "PATH=", 5))
    1493            unix_path = ep+1;
    1494          else if (!strnicmp (envp[i], "Path=", 5))
    1495            {
    1496              if (!windows32_path)
    1497                windows32_path = ep+1;
    1498              /* PATH gets defined after the loop exits.  */
    1499              continue;
    1500            }
    1501  #endif
    1502  
    1503          /* Length of the variable name, and skip the '='.  */
    1504          len = ep++ - envp[i];
    1505  
    1506          /* If this is MAKE_RESTARTS, check to see if the "already printed
    1507             the enter statement" flag is set.  */
    1508          if (len == 13 && memcmp (envp[i], STRING_SIZE_TUPLE ("MAKE_RESTARTS")) == 0)
    1509            {
    1510              if (*ep == '-')
    1511                {
    1512                  OUTPUT_TRACED ();
    1513                  ++ep;
    1514                }
    1515              restarts = make_toui (ep, NULL);
    1516              export = v_noexport;
    1517            }
    1518  
    1519          v = define_variable (envp[i], len, ep, o_env, 1);
    1520  
    1521          /* POSIX says the value of SHELL set in the makefile won't change the
    1522             value of SHELL given to subprocesses.  */
    1523          if (streq (v->name, "SHELL"))
    1524            {
    1525  #ifndef __MSDOS__
    1526              export = v_noexport;
    1527  #endif
    1528              shell_var.name = xstrdup ("SHELL");
    1529              shell_var.length = 5;
    1530              shell_var.value = xstrdup (ep);
    1531            }
    1532  
    1533          v->export = export;
    1534        }
    1535    }
    1536  #ifdef WINDOWS32
    1537    /* If we didn't find a correctly spelled PATH we define PATH as
    1538     * either the first misspelled value or an empty string
    1539     */
    1540    if (!unix_path)
    1541      define_variable_cname ("PATH", windows32_path ? windows32_path : "",
    1542                             o_env, 1)->export = v_export;
    1543  #endif
    1544  #else /* For Amiga, read the ENV: device, ignoring all dirs */
    1545    {
    1546      BPTR env, file, old;
    1547      char buffer[1024];
    1548      int len;
    1549      __aligned struct FileInfoBlock fib;
    1550  
    1551      env = Lock ("ENV:", ACCESS_READ);
    1552      if (env)
    1553        {
    1554          old = CurrentDir (DupLock (env));
    1555          Examine (env, &fib);
    1556  
    1557          while (ExNext (env, &fib))
    1558            {
    1559              if (fib.fib_DirEntryType < 0) /* File */
    1560                {
    1561                  /* Define an empty variable. It will be filled in
    1562                     variable_lookup(). Makes startup quite a bit faster. */
    1563                  define_variable (fib.fib_FileName,
    1564                                   strlen (fib.fib_FileName),
    1565                                   "", o_env, 1)->export = v_export;
    1566                }
    1567            }
    1568          UnLock (env);
    1569          UnLock (CurrentDir (old));
    1570        }
    1571    }
    1572  #endif
    1573  
    1574    /* Decode the switches.  */
    1575    if (lookup_variable (STRING_SIZE_TUPLE (GNUMAKEFLAGS_NAME)))
    1576      {
    1577        decode_env_switches (STRING_SIZE_TUPLE (GNUMAKEFLAGS_NAME));
    1578  
    1579        /* Clear GNUMAKEFLAGS to avoid duplication.  */
    1580        define_variable_cname (GNUMAKEFLAGS_NAME, "", o_env, 0);
    1581      }
    1582  
    1583    decode_env_switches (STRING_SIZE_TUPLE (MAKEFLAGS_NAME));
    1584  
    1585  #if 0
    1586    /* People write things like:
    1587          MFLAGS="CC=gcc -pipe" "CFLAGS=-g"
    1588       and we set the -p, -i and -e switches.  Doesn't seem quite right.  */
    1589    decode_env_switches (STRING_SIZE_TUPLE ("MFLAGS"));
    1590  #endif
    1591  
    1592    /* In output sync mode we need to sync any output generated by reading the
    1593       makefiles, such as in $(info ...) or stderr from $(shell ...) etc.  */
    1594  
    1595    syncing = make_sync.syncout = (output_sync == OUTPUT_SYNC_LINE
    1596                                   || output_sync == OUTPUT_SYNC_TARGET);
    1597    OUTPUT_SET (&make_sync);
    1598  
    1599    /* Parse the command line options.  Remember the job slots set this way.  */
    1600    {
    1601      int env_slots = arg_job_slots;
    1602      arg_job_slots = INVALID_JOB_SLOTS;
    1603  
    1604      decode_switches (argc, (const char **)argv, 0);
    1605      argv_slots = arg_job_slots;
    1606  
    1607      if (arg_job_slots == INVALID_JOB_SLOTS)
    1608        arg_job_slots = env_slots;
    1609    }
    1610  
    1611    if (print_usage_flag)
    1612      print_usage (0);
    1613  
    1614    /* Print version information, and exit.  */
    1615    if (print_version_flag)
    1616      {
    1617        print_version ();
    1618        die (MAKE_SUCCESS);
    1619      }
    1620  
    1621    /* Now that we know we'll be running, force stdout to be line-buffered.  */
    1622  #ifdef HAVE_SETVBUF
    1623    setvbuf (stdout, 0, _IOLBF, BUFSIZ);
    1624  #elif HAVE_SETLINEBUF
    1625    setlinebuf (stdout);
    1626  #endif
    1627  
    1628    /* Handle shuffle mode argument.  */
    1629    if (shuffle_mode)
    1630      {
    1631        const char *effective_mode;
    1632        shuffle_set_mode (shuffle_mode);
    1633  
    1634        /* Write fixed seed back to argument list to propagate mode and
    1635           fixed seed to child $(MAKE) runs.  */
    1636        free (shuffle_mode);
    1637        effective_mode = shuffle_get_mode ();
    1638        if (effective_mode)
    1639          shuffle_mode = xstrdup (effective_mode);
    1640        else
    1641          shuffle_mode = NULL;
    1642      }
    1643  
    1644    /* Set a variable specifying whether stdout/stdin is hooked to a TTY.  */
    1645  #ifdef HAVE_ISATTY
    1646    if (isatty (fileno (stdout)))
    1647      if (! lookup_variable (STRING_SIZE_TUPLE ("MAKE_TERMOUT")))
    1648        {
    1649          const char *tty = TTYNAME (fileno (stdout));
    1650          define_variable_cname ("MAKE_TERMOUT", tty ? tty : DEFAULT_TTYNAME,
    1651                                 o_default, 0)->export = v_export;
    1652        }
    1653    if (isatty (fileno (stderr)))
    1654      if (! lookup_variable (STRING_SIZE_TUPLE ("MAKE_TERMERR")))
    1655        {
    1656          const char *tty = TTYNAME (fileno (stderr));
    1657          define_variable_cname ("MAKE_TERMERR", tty ? tty : DEFAULT_TTYNAME,
    1658                                 o_default, 0)->export = v_export;
    1659        }
    1660  #endif
    1661  
    1662    /* Reset in case the switches changed our minds.  */
    1663    syncing = (output_sync == OUTPUT_SYNC_LINE
    1664               || output_sync == OUTPUT_SYNC_TARGET);
    1665  
    1666    if (make_sync.syncout && ! syncing)
    1667      output_close (&make_sync);
    1668  
    1669    make_sync.syncout = syncing;
    1670    OUTPUT_SET (&make_sync);
    1671  
    1672    /* Figure out the level of recursion.  */
    1673    {
    1674      struct variable *v = lookup_variable (STRING_SIZE_TUPLE (MAKELEVEL_NAME));
    1675      if (v && v->value[0] != '\0' && v->value[0] != '-')
    1676        makelevel = make_toui (v->value, NULL);
    1677      else
    1678        makelevel = 0;
    1679    }
    1680  
    1681    /* Set always_make_flag if -B was given and we've not restarted already.  */
    1682    always_make_flag = always_make_set && (restarts == 0);
    1683  
    1684    /* If the user didn't specify any print-directory options, compute the
    1685       default setting: disable under -s / print in sub-makes and under -C.  */
    1686  
    1687    if (print_directory_flag == -1)
    1688      print_directory = !silent_flag && (directories != 0 || makelevel > 0);
    1689    else
    1690      print_directory = print_directory_flag;
    1691  
    1692    /* If -R was given, set -r too (doesn't make sense otherwise!)  */
    1693    if (no_builtin_variables_flag)
    1694      no_builtin_rules_flag = 1;
    1695  
    1696    if (ISDB (DB_BASIC))
    1697      {
    1698        print_version ();
    1699  
    1700        /* Flush stdout so the user doesn't have to wait to see the
    1701           version information while make thinks about things.  */
    1702        fflush (stdout);
    1703      }
    1704  
    1705  #ifndef VMS
    1706    /* Set the "MAKE_COMMAND" variable to the name we were invoked with.
    1707       (If it is a relative pathname with a slash, prepend our directory name
    1708       so the result will run the same program regardless of the current dir.
    1709       If it is a name with no slash, we can only hope that PATH did not
    1710       find it in the current directory.)  */
    1711  #ifdef WINDOWS32
    1712    /*
    1713     * Convert from backslashes to forward slashes for
    1714     * programs like sh which don't like them. Shouldn't
    1715     * matter if the path is one way or the other for
    1716     * CreateProcess().
    1717     */
    1718    if (strpbrk (argv[0], "/:\\") || strstr (argv[0], "..")
    1719        || strneq (argv[0], "//", 2))
    1720      argv[0] = xstrdup (w32ify (argv[0], 1));
    1721  #else /* WINDOWS32 */
    1722  #if defined (__MSDOS__) || defined (__EMX__)
    1723    if (strchr (argv[0], '\\'))
    1724      {
    1725        char *p;
    1726  
    1727        argv[0] = xstrdup (argv[0]);
    1728        for (p = argv[0]; *p; p++)
    1729          if (*p == '\\')
    1730            *p = '/';
    1731      }
    1732    /* If argv[0] is not in absolute form, prepend the current
    1733       directory.  This can happen when Make is invoked by another DJGPP
    1734       program that uses a non-absolute name.  */
    1735    if (current_directory[0] != '\0'
    1736        && argv[0] != 0
    1737        && (argv[0][0] != '/' && (argv[0][0] == '\0' || argv[0][1] != ':'))
    1738  # ifdef __EMX__
    1739        /* do not prepend cwd if argv[0] contains no '/', e.g. "make" */
    1740        && (strchr (argv[0], '/') != 0 || strchr (argv[0], '\\') != 0)
    1741  # endif
    1742        )
    1743      argv[0] = xstrdup (concat (3, current_directory, "/", argv[0]));
    1744  #else  /* !__MSDOS__ */
    1745    if (current_directory[0] != '\0'
    1746        && argv[0] != 0 && argv[0][0] != '/' && strchr (argv[0], '/') != 0
    1747  #ifdef HAVE_DOS_PATHS
    1748        && (argv[0][0] != '\\' && (!argv[0][0] || argv[0][1] != ':'))
    1749        && strchr (argv[0], '\\') != 0
    1750  #endif
    1751        )
    1752      argv[0] = xstrdup (concat (3, current_directory, "/", argv[0]));
    1753  #endif /* !__MSDOS__ */
    1754  #endif /* WINDOWS32 */
    1755  #endif
    1756  
    1757    /* We may move, but until we do, here we are.  */
    1758    starting_directory = current_directory;
    1759  
    1760    /* If there were -C flags, move ourselves about.  */
    1761    if (directories != 0)
    1762      {
    1763        unsigned int i;
    1764        for (i = 0; directories->list[i] != 0; ++i)
    1765          {
    1766            const char *dir = directories->list[i];
    1767  #ifdef WINDOWS32
    1768            /* WINDOWS32 chdir() doesn't work if the directory has a trailing '/'
    1769               But allow -C/ just in case someone wants that.  */
    1770            {
    1771              char *p = (char *)dir + strlen (dir) - 1;
    1772              while (p > dir && ISDIRSEP (p[0]))
    1773                --p;
    1774              p[1] = '\0';
    1775            }
    1776  #endif
    1777            if (chdir (dir) < 0)
    1778              pfatal_with_name (dir);
    1779          }
    1780      }
    1781  
    1782  #ifdef WINDOWS32
    1783    /*
    1784     * THIS BLOCK OF CODE MUST COME AFTER chdir() CALL ABOVE IN ORDER
    1785     * TO NOT CONFUSE THE DEPENDENCY CHECKING CODE IN implicit.c.
    1786     *
    1787     * The functions in dir.c can incorrectly cache information for "."
    1788     * before we have changed directory and this can cause file
    1789     * lookups to fail because the current directory (.) was pointing
    1790     * at the wrong place when it was first evaluated.
    1791     */
    1792    no_default_sh_exe = !find_and_set_default_shell (NULL);
    1793  #endif /* WINDOWS32 */
    1794  
    1795    /* If we chdir'ed, figure out where we are now.  */
    1796    if (directories)
    1797      {
    1798  #ifdef WINDOWS32
    1799        if (getcwd_fs (current_directory, GET_PATH_MAX) == 0)
    1800  #else
    1801        if (getcwd (current_directory, GET_PATH_MAX) == 0)
    1802  #endif
    1803          {
    1804  #ifdef  HAVE_GETCWD
    1805            perror_with_name ("getcwd", "");
    1806  #else
    1807            OS (error, NILF, "getwd: %s", current_directory);
    1808  #endif
    1809            starting_directory = 0;
    1810          }
    1811        else
    1812          starting_directory = current_directory;
    1813      }
    1814  
    1815    define_variable_cname ("CURDIR", current_directory, o_file, 0);
    1816  
    1817    /* Validate the arg_job_slots configuration before we define MAKEFLAGS so
    1818       users get an accurate value in their makefiles.
    1819       At this point arg_job_slots is the argv setting, if there is one, else
    1820       the MAKEFLAGS env setting, if there is one.  */
    1821  
    1822    if (jobserver_auth)
    1823      {
    1824        /* We're a child in an existing jobserver group.  */
    1825        if (argv_slots == INVALID_JOB_SLOTS)
    1826          {
    1827            /* There's no -j option on the command line: check authorization.  */
    1828            if (jobserver_parse_auth (jobserver_auth))
    1829              /* Success!  Use the jobserver.  */
    1830              goto job_setup_complete;
    1831  
    1832            /* Oops: we have jobserver-auth but it's invalid :(.  */
    1833            O (error, NILF, _("warning: jobserver unavailable: using -j1.  Add '+' to parent make rule."));
    1834            arg_job_slots = 1;
    1835          }
    1836  
    1837        /* The user provided a -j setting on the command line so use it: we're
    1838           the master make of a new jobserver group.  */
    1839        else if (!restarts)
    1840          ON (error, NILF,
    1841              _("warning: -j%d forced in submake: resetting jobserver mode."),
    1842              argv_slots);
    1843  
    1844        /* We can't use our parent's jobserver, so reset.  */
    1845        reset_jobserver ();
    1846      }
    1847  
    1848   job_setup_complete:
    1849  
    1850    /* The extra indirection through $(MAKE_COMMAND) is done
    1851       for hysterical raisins.  */
    1852  
    1853  #ifdef VMS
    1854    if (vms_use_mcr_command)
    1855      define_variable_cname ("MAKE_COMMAND", vms_command (argv[0]), o_default, 0);
    1856    else
    1857      define_variable_cname ("MAKE_COMMAND", program, o_default, 0);
    1858  #else
    1859    define_variable_cname ("MAKE_COMMAND", argv[0], o_default, 0);
    1860  #endif
    1861    define_variable_cname ("MAKE", "$(MAKE_COMMAND)", o_default, 1);
    1862  
    1863    if (command_variables != 0)
    1864      {
    1865        struct command_variable *cv;
    1866        struct variable *v;
    1867        size_t len = 0;
    1868        char *value, *p;
    1869  
    1870        /* Figure out how much space will be taken up by the command-line
    1871           variable definitions.  */
    1872        for (cv = command_variables; cv != 0; cv = cv->next)
    1873          {
    1874            v = cv->variable;
    1875            len += 2 * strlen (v->name);
    1876            if (! v->recursive)
    1877              ++len;
    1878            ++len;
    1879            len += 2 * strlen (v->value);
    1880            ++len;
    1881          }
    1882  
    1883        /* Now allocate a buffer big enough and fill it.  */
    1884        p = value = alloca (len);
    1885        for (cv = command_variables; cv != 0; cv = cv->next)
    1886          {
    1887            v = cv->variable;
    1888            p = quote_for_env (p, v->name);
    1889            if (! v->recursive)
    1890              *p++ = ':';
    1891            *p++ = '=';
    1892            p = quote_for_env (p, v->value);
    1893            *p++ = ' ';
    1894          }
    1895        p[-1] = '\0';             /* Kill the final space and terminate.  */
    1896  
    1897        /* Define an unchangeable variable with a name that no POSIX.2
    1898           makefile could validly use for its own variable.  */
    1899        define_variable_cname ("-*-command-variables-*-", value, o_automatic, 0);
    1900  
    1901        /* Define the variable; this will not override any user definition.
    1902           Normally a reference to this variable is written into the value of
    1903           MAKEFLAGS, allowing the user to override this value to affect the
    1904           exported value of MAKEFLAGS.  In POSIX-pedantic mode, we cannot
    1905           allow the user's setting of MAKEOVERRIDES to affect MAKEFLAGS, so
    1906           a reference to this hidden variable is written instead. */
    1907        define_variable_cname ("MAKEOVERRIDES", "${-*-command-variables-*-}",
    1908                               o_env, 1);
    1909  #ifdef VMS
    1910        vms_export_dcl_symbol ("MAKEOVERRIDES", "${-*-command-variables-*-}");
    1911  #endif
    1912      }
    1913  
    1914    /* Read any stdin makefiles into temporary files.  */
    1915  
    1916    if (makefiles != 0)
    1917      {
    1918        unsigned int i;
    1919        for (i = 0; i < makefiles->idx; ++i)
    1920          if (makefiles->list[i][0] == '-' && makefiles->list[i][1] == '\0')
    1921            {
    1922              /* This makefile is standard input.  Since we may re-exec
    1923                 and thus re-read the makefiles, we read standard input
    1924                 into a temporary file and read from that.  */
    1925              FILE *outfile;
    1926              char *newnm;
    1927  
    1928              if (stdin_offset >= 0)
    1929                O (fatal, NILF,
    1930                   _("Makefile from standard input specified twice"));
    1931  
    1932              outfile = get_tmpfile (&newnm);
    1933  
    1934              while (!feof (stdin) && ! ferror (stdin))
    1935                {
    1936                  char buf[2048];
    1937                  size_t n = fread (buf, 1, sizeof (buf), stdin);
    1938                  if (n > 0 && fwrite (buf, 1, n, outfile) != n)
    1939                    OSS (fatal, NILF,
    1940                         _("fwrite: temporary file %s: %s"), newnm, strerror (errno));
    1941                }
    1942              fclose (outfile);
    1943  
    1944              /* Replace the name that read_all_makefiles will see with the name
    1945                 of the temporary file.  */
    1946              makefiles->list[i] = strcache_add (newnm);
    1947              stdin_offset = i;
    1948  
    1949              free (newnm);
    1950            }
    1951      }
    1952  
    1953    /* Make sure the temporary file is never considered updated.  */
    1954    if (stdin_offset >= 0)
    1955      {
    1956        struct file *f = enter_file (makefiles->list[stdin_offset]);
    1957        f->updated = 1;
    1958        f->update_status = us_success;
    1959        f->command_state = cs_finished;
    1960        /* Can't be intermediate, or it'll be removed before make re-exec.  */
    1961        f->intermediate = 0;
    1962        f->dontcare = 0;
    1963        /* Avoid re-exec due to stdin temp file timestamps.  */
    1964        f->last_mtime = f->mtime_before_update = f_mtime (f, 0);
    1965      }
    1966  
    1967  #ifndef __EMX__ /* Don't use a SIGCHLD handler for OS/2 */
    1968  #if !defined(HAVE_WAIT_NOHANG) || defined(MAKE_JOBSERVER)
    1969    /* Set up to handle children dying.  This must be done before
    1970       reading in the makefiles so that 'shell' function calls will work.
    1971  
    1972       If we don't have a hanging wait we have to fall back to old, broken
    1973       functionality here and rely on the signal handler and counting
    1974       children.
    1975  
    1976       If we're using the jobs pipe we need a signal handler so that SIGCHLD is
    1977       not ignored; we need it to interrupt the read(2) of the jobserver pipe if
    1978       we're waiting for a token.
    1979  
    1980       If none of these are true, we don't need a signal handler at all.  */
    1981    {
    1982  # if defined SIGCHLD
    1983      bsd_signal (SIGCHLD, child_handler);
    1984  # endif
    1985  # if defined SIGCLD && SIGCLD != SIGCHLD
    1986      bsd_signal (SIGCLD, child_handler);
    1987  # endif
    1988    }
    1989  
    1990  #ifdef HAVE_PSELECT
    1991    /* If we have pselect() then we need to block SIGCHLD so it's deferred.  */
    1992    {
    1993      sigset_t block;
    1994      sigemptyset (&block);
    1995      sigaddset (&block, SIGCHLD);
    1996      if (sigprocmask (SIG_SETMASK, &block, NULL) < 0)
    1997        pfatal_with_name ("sigprocmask(SIG_SETMASK, SIGCHLD)");
    1998    }
    1999  #endif
    2000  
    2001  #endif
    2002  #endif
    2003  
    2004    /* Let the user send us SIGUSR1 to toggle the -d flag during the run.  */
    2005  #ifdef SIGUSR1
    2006    bsd_signal (SIGUSR1, debug_signal_handler);
    2007  #endif
    2008  
    2009    /* Define the initial list of suffixes for old-style rules.  */
    2010    set_default_suffixes ();
    2011  
    2012    /* Define the file rules for the built-in suffix rules.  These will later
    2013       be converted into pattern rules.  We used to do this in
    2014       install_default_implicit_rules, but since that happens after reading
    2015       makefiles, it results in the built-in pattern rules taking precedence
    2016       over makefile-specified suffix rules, which is wrong.  */
    2017    install_default_suffix_rules ();
    2018  
    2019    /* Define some internal and special variables.  */
    2020    define_automatic_variables ();
    2021  
    2022    /* Set up the MAKEFLAGS and MFLAGS variables for makefiles to see.
    2023       Initialize it to be exported but allow the makefile to reset it.  */
    2024    define_makeflags (0, 0)->export = v_export;
    2025  
    2026    /* Define the default variables.  */
    2027    define_default_variables ();
    2028  
    2029    default_file = enter_file (strcache_add (".DEFAULT"));
    2030  
    2031    default_goal_var = define_variable_cname (".DEFAULT_GOAL", "", o_file, 0);
    2032  
    2033    /* Evaluate all strings provided with --eval.
    2034       Also set up the $(-*-eval-flags-*-) variable.  */
    2035  
    2036    if (eval_strings)
    2037      {
    2038        char *p, *endp, *value;
    2039        unsigned int i;
    2040        size_t len = (CSTRLEN ("--eval=") + 1) * eval_strings->idx;
    2041  
    2042        for (i = 0; i < eval_strings->idx; ++i)
    2043          {
    2044            p = xstrdup (eval_strings->list[i]);
    2045            len += 2 * strlen (p);
    2046            eval_buffer (p, NULL);
    2047            free (p);
    2048          }
    2049  
    2050        p = endp = value = alloca (len);
    2051        for (i = 0; i < eval_strings->idx; ++i)
    2052          {
    2053            p = stpcpy (p, "--eval=");
    2054            p = quote_for_env (p, eval_strings->list[i]);
    2055            endp = p++;
    2056            *endp = ' ';
    2057          }
    2058        *endp = '\0';
    2059  
    2060        define_variable_cname ("-*-eval-flags-*-", value, o_automatic, 0);
    2061      }
    2062  
    2063    {
    2064      int old_builtin_rules_flag = no_builtin_rules_flag;
    2065      int old_builtin_variables_flag = no_builtin_variables_flag;
    2066      int old_arg_job_slots = arg_job_slots;
    2067  
    2068      /* Read all the makefiles.  */
    2069      read_files = read_all_makefiles (makefiles == 0 ? 0 : makefiles->list);
    2070  
    2071      arg_job_slots = INVALID_JOB_SLOTS;
    2072  
    2073      /* Decode switches again, for variables set by the makefile.  */
    2074      decode_env_switches (STRING_SIZE_TUPLE (GNUMAKEFLAGS_NAME));
    2075  
    2076      /* Clear GNUMAKEFLAGS to avoid duplication.  */
    2077      define_variable_cname (GNUMAKEFLAGS_NAME, "", o_override, 0);
    2078  
    2079      decode_env_switches (STRING_SIZE_TUPLE (MAKEFLAGS_NAME));
    2080  #if 0
    2081      decode_env_switches (STRING_SIZE_TUPLE ("MFLAGS"));
    2082  #endif
    2083  
    2084      /* If -j is not set in the makefile, or it was set on the command line,
    2085         reset to use the previous value.  */
    2086      if (arg_job_slots == INVALID_JOB_SLOTS || argv_slots != INVALID_JOB_SLOTS)
    2087        arg_job_slots = old_arg_job_slots;
    2088  
    2089      else if (jobserver_auth && arg_job_slots != old_arg_job_slots)
    2090        {
    2091          /* Makefile MAKEFLAGS set -j, but we already have a jobserver.
    2092             Make us the master of a new jobserver group.  */
    2093          if (!restarts)
    2094            ON (error, NILF,
    2095                _("warning: -j%d forced in makefile: resetting jobserver mode."),
    2096                arg_job_slots);
    2097  
    2098          /* We can't use our parent's jobserver, so reset.  */
    2099          reset_jobserver ();
    2100        }
    2101  
    2102      /* Reset in case the switches changed our mind.  */
    2103      syncing = (output_sync == OUTPUT_SYNC_LINE
    2104                 || output_sync == OUTPUT_SYNC_TARGET);
    2105  
    2106      if (make_sync.syncout && ! syncing)
    2107        output_close (&make_sync);
    2108  
    2109      make_sync.syncout = syncing;
    2110      OUTPUT_SET (&make_sync);
    2111  
    2112      /* If -R was given, set -r too (doesn't make sense otherwise!)  */
    2113      if (no_builtin_variables_flag)
    2114        no_builtin_rules_flag = 1;
    2115  
    2116      /* If we've disabled builtin rules, get rid of them.  */
    2117      if (no_builtin_rules_flag && ! old_builtin_rules_flag)
    2118        {
    2119          if (suffix_file->builtin)
    2120            {
    2121              free_dep_chain (suffix_file->deps);
    2122              suffix_file->deps = 0;
    2123            }
    2124          define_variable_cname ("SUFFIXES", "", o_default, 0);
    2125        }
    2126  
    2127      /* If we've disabled builtin variables, get rid of them.  */
    2128      if (no_builtin_variables_flag && ! old_builtin_variables_flag)
    2129        undefine_default_variables ();
    2130    }
    2131  
    2132  #ifdef WINDOWS32
    2133    /* look one last time after reading all Makefiles */
    2134    if (no_default_sh_exe)
    2135      no_default_sh_exe = !find_and_set_default_shell (NULL);
    2136  #endif /* WINDOWS32 */
    2137  
    2138  #if defined (__MSDOS__) || defined (__EMX__) || defined (VMS)
    2139    /* We need to know what kind of shell we will be using.  */
    2140    {
    2141      extern int _is_unixy_shell (const char *_path);
    2142      struct variable *shv = lookup_variable (STRING_SIZE_TUPLE ("SHELL"));
    2143      extern int unixy_shell;
    2144      extern const char *default_shell;
    2145  
    2146      if (shv && *shv->value)
    2147        {
    2148          char *shell_path = recursively_expand (shv);
    2149  
    2150          if (shell_path && _is_unixy_shell (shell_path))
    2151            unixy_shell = 1;
    2152          else
    2153            unixy_shell = 0;
    2154          if (shell_path)
    2155            default_shell = shell_path;
    2156        }
    2157    }
    2158  #endif /* __MSDOS__ || __EMX__ */
    2159  
    2160    /* Final jobserver configuration.
    2161  
    2162       If we have jobserver_auth then we are a client in an existing jobserver
    2163       group, that's already been verified OK above.  If we don't have
    2164       jobserver_auth and jobserver is enabled, then start a new jobserver.
    2165  
    2166       arg_job_slots = INVALID_JOB_SLOTS if we don't want -j in MAKEFLAGS
    2167  
    2168       arg_job_slots = # of jobs of parallelism
    2169  
    2170       job_slots = 0 for no limits on jobs, or when limiting via jobserver.
    2171  
    2172       job_slots = 1 for standard non-parallel mode.
    2173  
    2174       job_slots >1 for old-style parallelism without jobservers.  */
    2175  
    2176    if (jobserver_auth)
    2177      job_slots = 0;
    2178    else if (arg_job_slots == INVALID_JOB_SLOTS)
    2179      job_slots = 1;
    2180    else
    2181      job_slots = arg_job_slots;
    2182  
    2183  #if defined (__MSDOS__) || defined (__EMX__) || defined (VMS)
    2184    if (job_slots != 1
    2185  # ifdef __EMX__
    2186        && _osmode != OS2_MODE /* turn off -j if we are in DOS mode */
    2187  # endif
    2188        )
    2189      {
    2190        O (error, NILF,
    2191           _("Parallel jobs (-j) are not supported on this platform."));
    2192        O (error, NILF, _("Resetting to single job (-j1) mode."));
    2193        arg_job_slots = INVALID_JOB_SLOTS;
    2194        job_slots = 1;
    2195      }
    2196  #endif
    2197  
    2198    /* If we have >1 slot at this point, then we're a top-level make.
    2199       Set up the jobserver.
    2200  
    2201       Every make assumes that it always has one job it can run.  For the
    2202       submakes it's the token they were given by their parent.  For the top
    2203       make, we just subtract one from the number the user wants.  */
    2204  
    2205    if (job_slots > 1 && jobserver_setup (job_slots - 1, jobserver_style))
    2206      {
    2207        /* Fill in the jobserver_auth for our children.  */
    2208        jobserver_auth = jobserver_get_auth ();
    2209  
    2210        if (jobserver_auth)
    2211          {
    2212            /* We're using the jobserver so set job_slots to 0.  */
    2213            master_job_slots = job_slots;
    2214            job_slots = 0;
    2215          }
    2216      }
    2217  
    2218    /* If we're not using parallel jobs, then we don't need output sync.
    2219       This is so people can enable output sync in GNUMAKEFLAGS or similar, but
    2220       not have it take effect unless parallel builds are enabled.  */
    2221    if (syncing && job_slots == 1)
    2222      {
    2223        OUTPUT_UNSET ();
    2224        output_close (&make_sync);
    2225        syncing = 0;
    2226        output_sync = OUTPUT_SYNC_NONE;
    2227      }
    2228  
    2229    if (syncing)
    2230      {
    2231        /* If there is no mutex we're the base: create one.  Else parse it.  */
    2232        if (!sync_mutex)
    2233          {
    2234            osync_setup ();
    2235            sync_mutex = osync_get_mutex ();
    2236          }
    2237        else if (!osync_parse_mutex (sync_mutex))
    2238          {
    2239            /* Parsing failed; continue without output sync.  */
    2240            osync_clear ();
    2241            free (sync_mutex);
    2242            sync_mutex = NULL;
    2243            syncing = 0;
    2244          }
    2245      }
    2246  
    2247    if (jobserver_auth)
    2248      DB (DB_VERBOSE|DB_JOBS, (_("Using jobserver controller %s\n"), jobserver_auth));
    2249    if (sync_mutex)
    2250      DB (DB_VERBOSE, (_("Using output-sync mutex %s\n"), sync_mutex));
    2251  
    2252  #ifndef MAKE_SYMLINKS
    2253    if (check_symlink_flag)
    2254      {
    2255        O (error, NILF, _("Symbolic links not supported: disabling -L."));
    2256        check_symlink_flag = 0;
    2257      }
    2258  #endif
    2259  
    2260    /* Set up MAKEFLAGS and MFLAGS again, so they will be right.  */
    2261  
    2262    define_makeflags (1, 0);
    2263  
    2264    /* Make each 'struct goaldep' point at the 'struct file' for the file
    2265       depended on.  Also do magic for special targets.  */
    2266  
    2267    snap_deps ();
    2268  
    2269    /* Convert old-style suffix rules to pattern rules.  It is important to
    2270       do this before installing the built-in pattern rules below, so that
    2271       makefile-specified suffix rules take precedence over built-in pattern
    2272       rules.  */
    2273  
    2274    convert_to_pattern ();
    2275  
    2276    /* Install the default implicit pattern rules.
    2277       This used to be done before reading the makefiles.
    2278       But in that case, built-in pattern rules were in the chain
    2279       before user-defined ones, so they matched first.  */
    2280  
    2281    install_default_implicit_rules ();
    2282  
    2283    /* Compute implicit rule limits and do magic for pattern rules.  */
    2284  
    2285    snap_implicit_rules ();
    2286  
    2287    /* Construct the listings of directories in VPATH lists.  */
    2288  
    2289    build_vpath_lists ();
    2290  
    2291    /* Mark files given with -o flags as very old and as having been updated
    2292       already, and files given with -W flags as brand new (time-stamp as far
    2293       as possible into the future).  If restarts is set we'll do -W later.  */
    2294  
    2295    if (old_files != 0)
    2296      {
    2297        const char **p;
    2298        for (p = old_files->list; *p != 0; ++p)
    2299          {
    2300            struct file *f = enter_file (*p);
    2301            f->last_mtime = f->mtime_before_update = OLD_MTIME;
    2302            f->updated = 1;
    2303            f->update_status = us_success;
    2304            f->command_state = cs_finished;
    2305          }
    2306      }
    2307  
    2308    if (!restarts && new_files != 0)
    2309      {
    2310        const char **p;
    2311        for (p = new_files->list; *p != 0; ++p)
    2312          {
    2313            struct file *f = enter_file (*p);
    2314            f->last_mtime = f->mtime_before_update = NEW_MTIME;
    2315          }
    2316      }
    2317  
    2318    /* Initialize the remote job module.  */
    2319    remote_setup ();
    2320  
    2321    /* Dump any output we've collected.  */
    2322  
    2323    OUTPUT_UNSET ();
    2324    output_close (&make_sync);
    2325  
    2326    if (shuffle_mode)
    2327      DB (DB_BASIC, (_("Enabled shuffle mode: %s\n"), shuffle_mode));
    2328  
    2329    if (read_files)
    2330      {
    2331        /* Update any makefiles if necessary.  */
    2332  
    2333        FILE_TIMESTAMP *makefile_mtimes;
    2334        struct goaldep *skipped_makefiles = NULL;
    2335        const char **nargv = (const char **) argv;
    2336        int any_failed = 0;
    2337        enum update_status status;
    2338  
    2339        DB (DB_BASIC, (_("Updating makefiles....\n")));
    2340  
    2341        /* Count the makefiles, and reverse the order so that we attempt to
    2342           rebuild them in the order they were read.  */
    2343        {
    2344          unsigned int num_mkfiles = 0;
    2345          struct goaldep *d = read_files;
    2346          read_files = NULL;
    2347          while (d != NULL)
    2348            {
    2349              struct goaldep *t = d;
    2350              d = d->next;
    2351              t->next = read_files;
    2352              read_files = t;
    2353              ++num_mkfiles;
    2354            }
    2355  
    2356          makefile_mtimes = alloca (num_mkfiles * sizeof (FILE_TIMESTAMP));
    2357        }
    2358  
    2359        /* Remove any makefiles we don't want to try to update.  Record the
    2360           current modtimes of the others so we can compare them later.  */
    2361        {
    2362          struct goaldep *d = read_files;
    2363          struct goaldep *last = NULL;
    2364          unsigned int mm_idx = 0;
    2365  
    2366          while (d != 0)
    2367            {
    2368              int skip = 0;
    2369              struct file *f = d->file;
    2370  
    2371              /* Check for makefiles that are either phony or a :: target with
    2372                 commands, but no dependencies.  These will always be remade,
    2373                 which will cause an infinite restart loop, so don't try to
    2374                 remake it (this will only happen if your makefiles are written
    2375                 exceptionally stupidly; but if you work for Athena, that's how
    2376                 you write your makefiles.)  */
    2377  
    2378              if (f->phony)
    2379                skip = 1;
    2380              else
    2381                for (f = f->double_colon; f != NULL; f = f->prev)
    2382                  if (f->deps == NULL && f->cmds != NULL)
    2383                    {
    2384                      skip = 1;
    2385                      break;
    2386                    }
    2387  
    2388              if (!skip)
    2389                {
    2390                  makefile_mtimes[mm_idx++] = file_mtime_no_search (d->file);
    2391                  last = d;
    2392                  d = d->next;
    2393                }
    2394              else
    2395                {
    2396                  DB (DB_VERBOSE,
    2397                      (_("Makefile '%s' might loop; not remaking it.\n"),
    2398                       f->name));
    2399  
    2400                  if (last)
    2401                    last->next = d->next;
    2402                  else
    2403                    read_files = d->next;
    2404  
    2405                  if (d->error && ! (d->flags & RM_DONTCARE))
    2406                    {
    2407                      /* This file won't be rebuilt, was not found, and we care,
    2408                         so remember it to report later.  */
    2409                      d->next = skipped_makefiles;
    2410                      skipped_makefiles = d;
    2411                      any_failed = 1;
    2412                    }
    2413                  else
    2414                    free_goaldep (d);
    2415  
    2416                  d = last ? last->next : read_files;
    2417                }
    2418            }
    2419        }
    2420  
    2421        /* Set up 'MAKEFLAGS' specially while remaking makefiles.  */
    2422        define_makeflags (1, 1);
    2423  
    2424        {
    2425          int orig_db_level = db_level;
    2426  
    2427          if (! ISDB (DB_MAKEFILES))
    2428            db_level = DB_NONE;
    2429  
    2430          rebuilding_makefiles = 1;
    2431          status = update_goal_chain (read_files);
    2432          rebuilding_makefiles = 0;
    2433  
    2434          db_level = orig_db_level;
    2435        }
    2436  
    2437        /* Report errors for makefiles that needed to be remade but were not.  */
    2438        while (skipped_makefiles != NULL)
    2439          {
    2440            struct goaldep *d = skipped_makefiles;
    2441            const char *err = strerror (d->error);
    2442  
    2443            OSS (error, &d->floc, _("%s: %s"), dep_name (d), err);
    2444  
    2445            skipped_makefiles = skipped_makefiles->next;
    2446            free_goaldep (d);
    2447          }
    2448  
    2449        /* If we couldn't build something we need but otherwise we succeeded,
    2450           reset the status.  */
    2451        if (any_failed && status == us_success)
    2452          status = us_none;
    2453  
    2454        switch (status)
    2455          {
    2456          case us_question:
    2457            /* The only way this can happen is if the user specified -q and asked
    2458               for one of the makefiles to be remade as a target on the command
    2459               line.  Since we're not actually updating anything with -q we can
    2460               treat this as "did nothing".  */
    2461            break;
    2462  
    2463          case us_none:
    2464            {
    2465               /* Reload any unloaded shared objects.  Do not re-exec to have
    2466                  that shared object loaded: a re-exec would cause an infinite
    2467                  loop, because the shared object was not updated.  */
    2468              struct goaldep *d;
    2469  
    2470              for (d = read_files; d; d = d->next)
    2471                if (d->file->unloaded)
    2472                  {
    2473                    struct file *f = d->file;
    2474                    /* Load the file.  0 means failure.  */
    2475                    if (load_file (&d->floc, f, 0) == 0)
    2476                      OS (fatal, &d->floc, _("%s: failed to load"), f->name);
    2477                    f->unloaded = 0;
    2478                    f->loaded = 1;
    2479                  }
    2480            }
    2481  
    2482            /* No makefiles needed to be updated.  If we couldn't read some
    2483               included file that we care about, fail.  */
    2484            if (0)
    2485              {
    2486                /* This runs afoul of https://savannah.gnu.org/bugs/?61226
    2487                   The problem is that many makefiles use a "dummy rule" to
    2488                   pretend that an included file is rebuilt, without actually
    2489                   rebuilding it, and this has always worked.  There are a
    2490                   number of solutions proposed in that bug but for now we'll
    2491                   put things back so they work the way they did before.  */
    2492                struct goaldep *d;
    2493  
    2494                for (d = read_files; d != 0; d = d->next)
    2495                  if (d->error && ! (d->flags & RM_DONTCARE))
    2496                    {
    2497                      /* This makefile couldn't be loaded, and we care.  */
    2498                      const char *err = strerror (d->error);
    2499                      OSS (error, &d->floc, _("%s: %s"), dep_name (d), err);
    2500                      any_failed = 1;
    2501                    }
    2502              }
    2503            break;
    2504  
    2505          case us_failed:
    2506            /* Failed to update.  Figure out if we care.  */
    2507            {
    2508              /* Nonzero if any makefile was successfully remade.  */
    2509              int any_remade = 0;
    2510              unsigned int i;
    2511              struct goaldep *d;
    2512  
    2513              for (i = 0, d = read_files; d != 0; ++i, d = d->next)
    2514                {
    2515                  if (d->file->updated)
    2516                    {
    2517                      /* This makefile was updated.  */
    2518                      if (d->file->update_status == us_success)
    2519                        /* It was successfully updated.  */
    2520                        any_remade |= (file_mtime_no_search (d->file)
    2521                                       != makefile_mtimes[i]);
    2522                      else if (! (d->flags & RM_DONTCARE))
    2523                        {
    2524                          FILE_TIMESTAMP mtime;
    2525                          /* The update failed and this makefile was not
    2526                             from the MAKEFILES variable, so we care.  */
    2527                          OS (error, &d->floc,
    2528                              _("Failed to remake makefile '%s'."),
    2529                              d->file->name);
    2530                          mtime = file_mtime_no_search (d->file);
    2531                          any_remade |= (mtime != NONEXISTENT_MTIME
    2532                                         && mtime != makefile_mtimes[i]);
    2533                          makefile_status = MAKE_FAILURE;
    2534                          any_failed = 1;
    2535                        }
    2536                    }
    2537  
    2538                  /* This makefile was not found at all.  */
    2539                  else if (! (d->flags & RM_DONTCARE))
    2540                    {
    2541                      const char *dnm = dep_name (d);
    2542  
    2543                      /* This is a makefile we care about.  See how much.  */
    2544                      if (d->flags & RM_INCLUDED)
    2545                        /* An included makefile.  We don't need to die, but we
    2546                           do want to complain.  */
    2547                        OS (error, &d->floc,
    2548                            _("Included makefile '%s' was not found."), dnm);
    2549                      else
    2550                        {
    2551                          /* A normal makefile.  We must die later.  */
    2552                          OS (error, NILF, _("Makefile '%s' was not found"), dnm);
    2553                          any_failed = 1;
    2554                        }
    2555                    }
    2556                }
    2557  
    2558              if (any_remade)
    2559                goto re_exec;
    2560  
    2561              break;
    2562            }
    2563  
    2564          case us_success:
    2565          re_exec:
    2566            /* Updated successfully.  Re-exec ourselves.  */
    2567  
    2568            remove_intermediates (0);
    2569  
    2570            if (print_data_base_flag)
    2571              print_data_base ();
    2572  
    2573            clean_jobserver (0);
    2574  
    2575            if (makefiles != 0)
    2576              {
    2577                /* Makefile names might have changed due to expansion.
    2578                   It's possible we'll need one extra argument:
    2579                     make -Rf-
    2580                   will expand to:
    2581                     make -R --temp-stdin=<tmpfile>
    2582                   so allocate more space.
    2583                */
    2584                int mfidx = 0;
    2585                char** av = argv;
    2586                const char** nv;
    2587  
    2588                nv = nargv = alloca (sizeof (char*) * (argc + 1 + 1));
    2589                *(nv++) = *(av++);
    2590  
    2591                for (; *av; ++av, ++nv)
    2592                  {
    2593                    char *f;
    2594                    char *a = *av;
    2595                    const char *mf = makefiles->list[mfidx];
    2596  
    2597                    assert (strlen (a) > 0);
    2598  
    2599                    *nv = a;
    2600  
    2601                    /* Not an option: we handled option args earlier.  */
    2602                    if (a[0] != '-')
    2603                      continue;
    2604  
    2605                    /* See if this option specifies a filename.  If so we need
    2606                       to replace it with the value from makefiles->list.
    2607  
    2608                       To simplify, we'll replace all possible versions of this
    2609                       flag with a simple "-f<name>".  */
    2610  
    2611                    /* Handle long options.  */
    2612                    if (a[1] == '-')
    2613                      {
    2614                        if (strcmp (a, "--file") == 0 || strcmp (a, "--makefile") == 0)
    2615                          /* Skip the next arg as we'll combine them.  */
    2616                          ++av;
    2617                        else if (!strneq (a, "--file=", 7)
    2618                                 && !strneq (a, "--makefile=", 11))
    2619                          continue;
    2620  
    2621                        if (mfidx == stdin_offset)
    2622                          {
    2623                            char *na = alloca (CSTRLEN ("--temp-stdin=")
    2624                                               + strlen (mf) +  1);
    2625                            sprintf (na, "--temp-stdin=%s", mf);
    2626                            *nv = na;
    2627                          }
    2628                        else
    2629                          {
    2630                            char *na = alloca (strlen (mf) + 3);
    2631                            sprintf (na, "-f%s", mf);
    2632                            *nv = na;
    2633                          }
    2634  
    2635                        ++mfidx;
    2636                        continue;
    2637                      }
    2638  
    2639                    /* Handle short options.  If 'f' is the last option, it may
    2640                       be followed by <name>.  */
    2641                    f = strchr (a, 'f');
    2642                    if (!f)
    2643                      continue;
    2644  
    2645                    /* If there's an extra argument option skip it.  */
    2646                    if (f[1] == '\0')
    2647                      ++av;
    2648  
    2649                    if (mfidx == stdin_offset)
    2650                      {
    2651                        const size_t al = f - a;
    2652                        char *na;
    2653  
    2654                        if (al > 1)
    2655                          {
    2656                            /* Preserve the prior options.  */
    2657                            na = alloca (al + 1);
    2658                            memcpy (na, a, al);
    2659                            na[al] = '\0';
    2660                            *(nv++) = na;
    2661                          }
    2662  
    2663                        /* Remove the "f" and any subsequent content.  */
    2664                        na = alloca (CSTRLEN ("--temp-stdin=") + strlen (mf) + 1);
    2665                        sprintf (na, "--temp-stdin=%s", mf);
    2666                        *nv = na;
    2667                      }
    2668                    else if (f[1] == '\0')
    2669                      /* -f <name> or -xyzf <name>.  Replace the name.  */
    2670                      *(++nv) = mf;
    2671                    else
    2672                      {
    2673                        /* -f<name> or -xyzf<name>. */
    2674                        const size_t al = f - a + 1;
    2675                        const size_t ml = strlen (mf) + 1;
    2676                        char *na = alloca (al + ml);
    2677                        memcpy (na, a, al);
    2678                        memcpy (na + al, mf, ml);
    2679                        *nv = na;
    2680                      }
    2681  
    2682                    ++mfidx;
    2683                  }
    2684  
    2685                *nv = NULL;
    2686              }
    2687  
    2688            if (directories != 0 && directories->idx > 0)
    2689              {
    2690                int bad = 1;
    2691                if (directory_before_chdir != 0)
    2692                  {
    2693                    if (chdir (directory_before_chdir) < 0)
    2694                        perror_with_name ("chdir", "");
    2695                    else
    2696                      bad = 0;
    2697                  }
    2698                if (bad)
    2699                  O (fatal, NILF,
    2700                     _("Couldn't change back to original directory"));
    2701              }
    2702  
    2703            ++restarts;
    2704  
    2705            if (ISDB (DB_BASIC))
    2706              {
    2707                const char **p;
    2708                printf (_("Re-executing[%u]:"), restarts);
    2709                for (p = nargv; *p != 0; ++p)
    2710                  printf (" %s", *p);
    2711                putchar ('\n');
    2712                fflush (stdout);
    2713              }
    2714  
    2715  #ifndef _AMIGA
    2716            {
    2717              char **p;
    2718              for (p = environ; *p != 0; ++p)
    2719                {
    2720                  if (strneq (*p, MAKELEVEL_NAME "=", MAKELEVEL_LENGTH+1))
    2721                    {
    2722                      *p = alloca (40);
    2723                      sprintf (*p, "%s=%u", MAKELEVEL_NAME, makelevel);
    2724  #ifdef VMS
    2725                      vms_putenv_symbol (*p);
    2726  #endif
    2727                    }
    2728                  else if (strneq (*p, "MAKE_RESTARTS=", CSTRLEN ("MAKE_RESTARTS=")))
    2729                    {
    2730                      *p = alloca (40);
    2731                      sprintf (*p, "MAKE_RESTARTS=%s%u",
    2732                               OUTPUT_IS_TRACED () ? "-" : "", restarts);
    2733                      restarts = 0;
    2734                    }
    2735                }
    2736            }
    2737  #else /* AMIGA */
    2738            {
    2739              char buffer[256];
    2740  
    2741              sprintf (buffer, "%u", makelevel);
    2742              SetVar (MAKELEVEL_NAME, buffer, -1, GVF_GLOBAL_ONLY);
    2743  
    2744              sprintf (buffer, "%s%u", OUTPUT_IS_TRACED () ? "-" : "", restarts);
    2745              SetVar ("MAKE_RESTARTS", buffer, -1, GVF_GLOBAL_ONLY);
    2746              restarts = 0;
    2747            }
    2748  #endif
    2749  
    2750            /* If we didn't set the restarts variable yet, add it.  */
    2751            if (restarts)
    2752              {
    2753                char *b = alloca (40);
    2754                sprintf (b, "MAKE_RESTARTS=%s%u",
    2755                         OUTPUT_IS_TRACED () ? "-" : "", restarts);
    2756                putenv (b);
    2757              }
    2758  
    2759            fflush (stdout);
    2760            fflush (stderr);
    2761  
    2762            osync_clear();
    2763  
    2764            /* The exec'd "child" will be another make, of course.  */
    2765            jobserver_pre_child(1);
    2766  
    2767  #ifdef _AMIGA
    2768            exec_command (nargv);
    2769            exit (0);
    2770  #elif defined (__EMX__)
    2771            {
    2772              /* It is not possible to use execve() here because this
    2773                 would cause the parent process to be terminated with
    2774                 exit code 0 before the child process has been terminated.
    2775                 Therefore it may be the best solution simply to spawn the
    2776                 child process including all file handles and to wait for its
    2777                 termination. */
    2778              pid_t pid;
    2779              int r;
    2780              struct childbase child;
    2781              child.cmd_name = NULL;
    2782              child.output.syncout = 0;
    2783              child.environment = environ;
    2784  
    2785              pid = child_execute_job (&child, 1, nargv);
    2786  
    2787              /* is this loop really necessary? */
    2788              do {
    2789                pid = wait (&r);
    2790              } while (pid <= 0);
    2791              /* use the exit code of the child process */
    2792              exit (WIFEXITED(r) ? WEXITSTATUS(r) : EXIT_FAILURE);
    2793            }
    2794  #else
    2795  #ifdef SET_STACK_SIZE
    2796            /* Reset limits, if necessary.  */
    2797            if (stack_limit.rlim_cur)
    2798              setrlimit (RLIMIT_STACK, &stack_limit);
    2799  #endif
    2800            exec_command ((char **)nargv, environ);
    2801  #endif
    2802            jobserver_post_child(1);
    2803  
    2804            temp_stdin_unlink ();
    2805  
    2806            _exit (127);
    2807          }
    2808  
    2809        if (any_failed)
    2810          die (MAKE_FAILURE);
    2811      }
    2812  
    2813    /* Set up 'MAKEFLAGS' again for the normal targets.  */
    2814    define_makeflags (1, 0);
    2815  
    2816    /* Set always_make_flag if -B was given.  */
    2817    always_make_flag = always_make_set;
    2818  
    2819    /* If restarts is set we haven't set up -W files yet, so do that now.  */
    2820    if (restarts && new_files != 0)
    2821      {
    2822        const char **p;
    2823        for (p = new_files->list; *p != 0; ++p)
    2824          {
    2825            struct file *f = enter_file (*p);
    2826            f->last_mtime = f->mtime_before_update = NEW_MTIME;
    2827          }
    2828      }
    2829  
    2830    temp_stdin_unlink ();
    2831  
    2832    /* If there were no command-line goals, use the default.  */
    2833    if (goals == 0)
    2834      {
    2835        char *p;
    2836  
    2837        if (default_goal_var->recursive)
    2838          p = variable_expand (default_goal_var->value);
    2839        else
    2840          {
    2841            p = variable_buffer_output (variable_buffer, default_goal_var->value,
    2842                                        strlen (default_goal_var->value));
    2843            *p = '\0';
    2844            p = variable_buffer;
    2845          }
    2846  
    2847        if (*p != '\0')
    2848          {
    2849            struct file *f = lookup_file (p);
    2850  
    2851            /* If .DEFAULT_GOAL is a non-existent target, enter it into the
    2852               table and let the standard logic sort it out. */
    2853            if (f == 0)
    2854              {
    2855                struct nameseq *ns;
    2856  
    2857                ns = PARSE_SIMPLE_SEQ (&p, struct nameseq);
    2858                if (ns)
    2859                  {
    2860                    /* .DEFAULT_GOAL should contain one target. */
    2861                    if (ns->next != 0)
    2862                      O (fatal, NILF,
    2863                         _(".DEFAULT_GOAL contains more than one target"));
    2864  
    2865                    f = enter_file (strcache_add (ns->name));
    2866  
    2867                    ns->name = 0; /* It was reused by enter_file(). */
    2868                    free_ns_chain (ns);
    2869                  }
    2870              }
    2871  
    2872            if (f)
    2873              {
    2874                goals = alloc_goaldep ();
    2875                goals->file = f;
    2876              }
    2877          }
    2878      }
    2879    else
    2880      lastgoal->next = 0;
    2881  
    2882  
    2883    if (!goals)
    2884      {
    2885        struct variable *v = lookup_variable (STRING_SIZE_TUPLE ("MAKEFILE_LIST"));
    2886        if (v && v->value && v->value[0] != '\0')
    2887          O (fatal, NILF, _("No targets"));
    2888  
    2889        O (fatal, NILF, _("No targets specified and no makefile found"));
    2890      }
    2891  
    2892    /* Shuffle prerequisites to catch makefiles with incomplete depends. */
    2893  
    2894    shuffle_goaldeps_recursive (goals);
    2895  
    2896    /* Update the goals.  */
    2897  
    2898    DB (DB_BASIC, (_("Updating goal targets....\n")));
    2899  
    2900    {
    2901      switch (update_goal_chain (goals))
    2902      {
    2903        case us_none:
    2904          /* Nothing happened.  */
    2905          /* FALLTHROUGH */
    2906        case us_success:
    2907          /* Keep the previous result.  */
    2908          break;
    2909        case us_question:
    2910          /* We are under -q and would run some commands.  */
    2911          makefile_status = MAKE_TROUBLE;
    2912          break;
    2913        case us_failed:
    2914          /* Updating failed.  POSIX.2 specifies exit status >1 for this; */
    2915          makefile_status = MAKE_FAILURE;
    2916          break;
    2917      }
    2918  
    2919      /* If we detected some clock skew, generate one last warning */
    2920      if (clock_skew_detected)
    2921        O (error, NILF,
    2922           _("warning:  Clock skew detected.  Your build may be incomplete."));
    2923  
    2924      /* Exit.  */
    2925      die (makefile_status);
    2926    }
    2927  
    2928    /* NOTREACHED */
    2929    exit (MAKE_SUCCESS);
    2930  }
    2931  
    2932  /* Parsing of arguments, decoding of switches.  */
    2933  
    2934  static char options[1 + sizeof (switches) / sizeof (switches[0]) * 3];
    2935  static struct option long_options[(sizeof (switches) / sizeof (switches[0])) +
    2936                                    (sizeof (long_option_aliases) /
    2937                                     sizeof (long_option_aliases[0]))];
    2938  
    2939  /* Fill in the string and vector for getopt.  */
    2940  static void
    2941  init_switches (void)
    2942  {
    2943    char *p;
    2944    unsigned int c;
    2945    unsigned int i;
    2946  
    2947    if (options[0] != '\0')
    2948      /* Already done.  */
    2949      return;
    2950  
    2951    p = options;
    2952  
    2953    /* Return switch and non-switch args in order, regardless of
    2954       POSIXLY_CORRECT.  Non-switch args are returned as option 1.  */
    2955    *p++ = '-';
    2956  
    2957    for (i = 0; switches[i].c != '\0'; ++i)
    2958      {
    2959        long_options[i].name = (char *) (switches[i].long_name == 0 ? "" :
    2960                                         switches[i].long_name);
    2961        long_options[i].flag = 0;
    2962        long_options[i].val = switches[i].c;
    2963        if (short_option (switches[i].c))
    2964          *p++ = (char) switches[i].c;
    2965        switch (switches[i].type)
    2966          {
    2967          case flag:
    2968          case flag_off:
    2969          case ignore:
    2970            long_options[i].has_arg = no_argument;
    2971            break;
    2972  
    2973          case string:
    2974          case strlist:
    2975          case filename:
    2976          case positive_int:
    2977          case floating:
    2978            if (short_option (switches[i].c))
    2979              *p++ = ':';
    2980            if (switches[i].noarg_value != 0)
    2981              {
    2982                if (short_option (switches[i].c))
    2983                  *p++ = ':';
    2984                long_options[i].has_arg = optional_argument;
    2985              }
    2986            else
    2987              long_options[i].has_arg = required_argument;
    2988            break;
    2989          }
    2990      }
    2991    *p = '\0';
    2992    for (c = 0; c < (sizeof (long_option_aliases) /
    2993                     sizeof (long_option_aliases[0]));
    2994         ++c)
    2995      long_options[i++] = long_option_aliases[c];
    2996    long_options[i].name = 0;
    2997  }
    2998  
    2999  
    3000  /* Non-option argument.  It might be a variable definition.  */
    3001  static void
    3002  handle_non_switch_argument (const char *arg, int env)
    3003  {
    3004    struct variable *v;
    3005  
    3006    if (arg[0] == '-' && arg[1] == '\0')
    3007      /* Ignore plain '-' for compatibility.  */
    3008      return;
    3009  
    3010  #ifdef VMS
    3011    {
    3012      /* VMS DCL quoting can result in foo="bar baz" showing up here.
    3013         Need to remove the double quotes from the value. */
    3014      char * eq_ptr;
    3015      char * new_arg;
    3016      eq_ptr = strchr (arg, '=');
    3017      if ((eq_ptr != NULL) && (eq_ptr[1] == '"'))
    3018        {
    3019           int len;
    3020           int seg1;
    3021           int seg2;
    3022           len = strlen(arg);
    3023           new_arg = alloca(len);
    3024           seg1 = eq_ptr - arg + 1;
    3025           strncpy(new_arg, arg, (seg1));
    3026           seg2 = len - seg1 - 1;
    3027           strncpy(&new_arg[seg1], &eq_ptr[2], seg2);
    3028           new_arg[seg1 + seg2] = 0;
    3029           if (new_arg[seg1 + seg2 - 1] == '"')
    3030             new_arg[seg1 + seg2 - 1] = 0;
    3031           arg = new_arg;
    3032        }
    3033    }
    3034  #endif
    3035    v = try_variable_definition (0, arg, o_command, 0);
    3036    if (v != 0)
    3037      {
    3038        /* It is indeed a variable definition.  If we don't already have this
    3039           one, record a pointer to the variable for later use in
    3040           define_makeflags.  */
    3041        struct command_variable *cv;
    3042  
    3043        for (cv = command_variables; cv != 0; cv = cv->next)
    3044          if (cv->variable == v)
    3045            break;
    3046  
    3047        if (! cv)
    3048          {
    3049            cv = xmalloc (sizeof (*cv));
    3050            cv->variable = v;
    3051            cv->next = command_variables;
    3052            command_variables = cv;
    3053          }
    3054      }
    3055    else if (! env)
    3056      {
    3057        /* Not an option or variable definition; it must be a goal
    3058           target!  Enter it as a file and add it to the dep chain of
    3059           goals.  */
    3060        struct file *f = enter_file (strcache_add (expand_command_line_file (arg)));
    3061        f->cmd_target = 1;
    3062  
    3063        if (goals == 0)
    3064          {
    3065            goals = alloc_goaldep ();
    3066            lastgoal = goals;
    3067          }
    3068        else
    3069          {
    3070            lastgoal->next = alloc_goaldep ();
    3071            lastgoal = lastgoal->next;
    3072          }
    3073  
    3074        lastgoal->file = f;
    3075  
    3076        {
    3077          /* Add this target name to the MAKECMDGOALS variable. */
    3078          struct variable *gv;
    3079          const char *value;
    3080  
    3081          gv = lookup_variable (STRING_SIZE_TUPLE ("MAKECMDGOALS"));
    3082          if (gv == 0)
    3083            value = f->name;
    3084          else
    3085            {
    3086              /* Paste the old and new values together */
    3087              size_t oldlen, newlen;
    3088              char *vp;
    3089  
    3090              oldlen = strlen (gv->value);
    3091              newlen = strlen (f->name);
    3092              vp = alloca (oldlen + 1 + newlen + 1);
    3093              memcpy (vp, gv->value, oldlen);
    3094              vp[oldlen] = ' ';
    3095              memcpy (&vp[oldlen + 1], f->name, newlen + 1);
    3096              value = vp;
    3097            }
    3098          define_variable_cname ("MAKECMDGOALS", value, o_default, 0);
    3099        }
    3100      }
    3101  }
    3102  
    3103  /* Decode switches from ARGC and ARGV.
    3104     They came from the environment if ENV is nonzero.  */
    3105  
    3106  static void
    3107  decode_switches (int argc, const char **argv, int env)
    3108  {
    3109    int bad = 0;
    3110    const struct command_switch *cs;
    3111    struct stringlist *sl;
    3112    int c;
    3113  
    3114    /* getopt does most of the parsing for us.
    3115       First, get its vectors set up.  */
    3116  
    3117    init_switches ();
    3118  
    3119    /* Let getopt produce error messages for the command line,
    3120       but not for options from the environment.  */
    3121    opterr = !env;
    3122    /* Reset getopt's state.  */
    3123    optind = 0;
    3124  
    3125    while (optind < argc)
    3126      {
    3127        const char *coptarg;
    3128  
    3129        /* Parse the next argument.  */
    3130        c = getopt_long (argc, (char *const *)argv, options, long_options, NULL);
    3131        coptarg = optarg;
    3132        if (c == EOF)
    3133          /* End of arguments, or "--" marker seen.  */
    3134          break;
    3135        else if (c == 1)
    3136          /* An argument not starting with a dash.  */
    3137          handle_non_switch_argument (coptarg, env);
    3138        else if (c == '?')
    3139          /* Bad option.  We will print a usage message and die later.
    3140             But continue to parse the other options so the user can
    3141             see all he did wrong.  */
    3142          bad = 1;
    3143        else
    3144          for (cs = switches; cs->c != '\0'; ++cs)
    3145            if (cs->c == c)
    3146              {
    3147                /* Whether or not we will actually do anything with
    3148                   this switch.  We test this individually inside the
    3149                   switch below rather than just once outside it, so that
    3150                   options which are to be ignored still consume args.  */
    3151                int doit = !env || cs->env;
    3152  
    3153                switch (cs->type)
    3154                  {
    3155                  default:
    3156                    abort ();
    3157  
    3158                  case ignore:
    3159                    break;
    3160  
    3161                  case flag:
    3162                  case flag_off:
    3163                    if (doit)
    3164                      *(int *) cs->value_ptr = cs->type == flag;
    3165                    break;
    3166  
    3167                  case string:
    3168                  case strlist:
    3169                  case filename:
    3170                    if (!doit)
    3171                      break;
    3172  
    3173                    if (! coptarg)
    3174                      coptarg = cs->noarg_value;
    3175                    else if (*coptarg == '\0')
    3176                      {
    3177                        char opt[2] = "c";
    3178                        const char *op = opt;
    3179  
    3180                        if (short_option (cs->c))
    3181                          opt[0] = (char) cs->c;
    3182                        else
    3183                          op = cs->long_name;
    3184  
    3185                        error (NILF, strlen (op),
    3186                               _("the '%s%s' option requires a non-empty string argument"),
    3187                               short_option (cs->c) ? "-" : "--", op);
    3188                        bad = 1;
    3189                        break;
    3190                      }
    3191  
    3192                    if (cs->type == string)
    3193                      {
    3194                        char **val = (char **)cs->value_ptr;
    3195                        free (*val);
    3196                        *val = xstrdup (coptarg);
    3197                        break;
    3198                      }
    3199  
    3200                    sl = *(struct stringlist **) cs->value_ptr;
    3201                    if (sl == 0)
    3202                      {
    3203                        sl = xmalloc (sizeof (struct stringlist));
    3204                        sl->max = 5;
    3205                        sl->idx = 0;
    3206                        sl->list = xmalloc (5 * sizeof (char *));
    3207                        *(struct stringlist **) cs->value_ptr = sl;
    3208                      }
    3209                    else if (sl->idx == sl->max - 1)
    3210                      {
    3211                        sl->max += 5;
    3212                        /* MSVC erroneously warns without a cast here.  */
    3213                        sl->list = xrealloc ((void *)sl->list,
    3214                                             sl->max * sizeof (char *));
    3215                      }
    3216  
    3217                    /* Filter out duplicate options.
    3218                     * Allow duplicate makefiles for backward compatibility.  */
    3219                    if (cs->c != 'f')
    3220                      {
    3221                        unsigned int k;
    3222                        for (k = 0; k < sl->idx; ++k)
    3223                          if (streq (sl->list[k], coptarg))
    3224                            break;
    3225                        if (k < sl->idx)
    3226                          break;
    3227                      }
    3228  
    3229                    if (cs->type == strlist)
    3230                      sl->list[sl->idx++] = xstrdup (coptarg);
    3231                    else if (cs->c == TEMP_STDIN_OPT)
    3232                      {
    3233                        if (stdin_offset > 0)
    3234                          fatal (NILF, 0, "INTERNAL: multiple --temp-stdin options provided!");
    3235                        /* We don't need to expand the temp file.  */
    3236                        stdin_offset = sl->idx;
    3237                        sl->list[sl->idx++] = strcache_add (coptarg);
    3238                      }
    3239                    else
    3240                      sl->list[sl->idx++] = expand_command_line_file (coptarg);
    3241                    sl->list[sl->idx] = 0;
    3242                    break;
    3243  
    3244                  case positive_int:
    3245                    /* See if we have an option argument; if we do require that
    3246                       it's all digits, not something like "10foo".  */
    3247                    if (coptarg == 0 && argc > optind)
    3248                      {
    3249                        const char *cp;
    3250                        for (cp=argv[optind]; ISDIGIT (cp[0]); ++cp)
    3251                          ;
    3252                        if (cp[0] == '\0')
    3253                          coptarg = argv[optind++];
    3254                      }
    3255  
    3256                    if (!doit)
    3257                      break;
    3258  
    3259                    if (coptarg)
    3260                      {
    3261                        const char *err;
    3262                        unsigned int i = make_toui (coptarg, &err);
    3263  
    3264                        if (err || i == 0)
    3265                          {
    3266                            error (NILF, 0,
    3267                                   _("the '-%c' option requires a positive integer argument"),
    3268                                   cs->c);
    3269                            bad = 1;
    3270                          }
    3271                        else
    3272                          *(unsigned int *) cs->value_ptr = i;
    3273                      }
    3274                    else
    3275                      *(unsigned int *) cs->value_ptr
    3276                        = *(unsigned int *) cs->noarg_value;
    3277                    break;
    3278  
    3279                  case floating:
    3280                    if (coptarg == 0 && optind < argc
    3281                        && (ISDIGIT (argv[optind][0]) || argv[optind][0] == '.'))
    3282                      coptarg = argv[optind++];
    3283  
    3284                    if (doit)
    3285                      *(double *) cs->value_ptr = (coptarg != 0 ? atof (coptarg)
    3286                                                   : *(double *) cs->noarg_value);
    3287  
    3288                    break;
    3289                  }
    3290  
    3291                /* We've found the switch.  Stop looking.  */
    3292                break;
    3293              }
    3294      }
    3295  
    3296    /* There are no more options according to getting getopt, but there may
    3297       be some arguments left.  Since we have asked for non-option arguments
    3298       to be returned in order, this only happens when there is a "--"
    3299       argument to prevent later arguments from being options.  */
    3300    while (optind < argc)
    3301      handle_non_switch_argument (argv[optind++], env);
    3302  
    3303    if (bad && !env)
    3304      print_usage (bad);
    3305  
    3306    /* If there are any options that need to be decoded do it now.  */
    3307    decode_debug_flags ();
    3308    decode_output_sync_flags ();
    3309  
    3310    /* Perform any special switch handling.  */
    3311    run_silent = silent_flag;
    3312  
    3313    /* Construct the list of include directories to search.  */
    3314    construct_include_path (include_dirs ? include_dirs->list : NULL);
    3315  }
    3316  
    3317  /* Decode switches from environment variable ENVAR (which is LEN chars long).
    3318     We do this by chopping the value into a vector of words, prepending a
    3319     dash to the first word if it lacks one, and passing the vector to
    3320     decode_switches.  */
    3321  
    3322  void
    3323  decode_env_switches (const char *envar, size_t len)
    3324  {
    3325    char *varref = alloca (2 + len + 2);
    3326    char *value, *p, *buf;
    3327    int argc;
    3328    const char **argv;
    3329  
    3330    /* Get the variable's value.  */
    3331    p = varref;
    3332    *(p++) = '$';
    3333    *(p++) = '(';
    3334    p = mempcpy (p, envar, len);
    3335    *(p++) = ')';
    3336    *p = '\0';
    3337    value = variable_expand (varref);
    3338  
    3339    /* Skip whitespace, and check for an empty value.  */
    3340    NEXT_TOKEN (value);
    3341    len = strlen (value);
    3342    if (len == 0)
    3343      return;
    3344  
    3345    /* Allocate a vector that is definitely big enough.  */
    3346    argv = alloca ((1 + len + 1) * sizeof (char *));
    3347  
    3348    /* getopt will look at the arguments starting at ARGV[1].
    3349       Prepend a spacer word.  */
    3350    argv[0] = "";
    3351    argc = 1;
    3352  
    3353    /* We need a buffer to copy the value into while we split it into words
    3354       and unquote it.  Set up in case we need to prepend a dash later.  */
    3355    buf = alloca (1 + len + 1);
    3356    buf[0] = '-';
    3357    p = buf+1;
    3358    argv[argc] = p;
    3359    while (*value != '\0')
    3360      {
    3361        if (*value == '\\' && value[1] != '\0')
    3362          ++value;                /* Skip the backslash.  */
    3363        else if (ISBLANK (*value))
    3364          {
    3365            /* End of the word.  */
    3366            *p++ = '\0';
    3367            argv[++argc] = p;
    3368            do
    3369              ++value;
    3370            while (ISBLANK (*value));
    3371            continue;
    3372          }
    3373        *p++ = *value++;
    3374      }
    3375    *p = '\0';
    3376    argv[++argc] = 0;
    3377    assert (p < buf + len + 2);
    3378  
    3379    if (argv[1][0] != '-' && strchr (argv[1], '=') == 0)
    3380      /* The first word doesn't start with a dash and isn't a variable
    3381         definition, so add a dash.  */
    3382      argv[1] = buf;
    3383  
    3384    /* Parse those words.  */
    3385    decode_switches (argc, argv, 1);
    3386  }
    3387  
    3388  /* Quote the string IN so that it will be interpreted as a single word with
    3389     no magic by decode_env_switches; also double dollar signs to avoid
    3390     variable expansion in make itself.  Write the result into OUT, returning
    3391     the address of the next character to be written.
    3392     Allocating space for OUT twice the length of IN is always sufficient.  */
    3393  
    3394  static char *
    3395  quote_for_env (char *out, const char *in)
    3396  {
    3397    while (*in != '\0')
    3398      {
    3399        if (*in == '$')
    3400          *out++ = '$';
    3401        else if (ISBLANK (*in) || *in == '\\')
    3402          *out++ = '\\';
    3403        *out++ = *in++;
    3404      }
    3405  
    3406    return out;
    3407  }
    3408  
    3409  /* Define the MAKEFLAGS and MFLAGS variables to reflect the settings of the
    3410     command switches.  Include options with args if ALL is nonzero.
    3411     Don't include options with the 'no_makefile' flag set if MAKEFILE.  */
    3412  
    3413  static struct variable *
    3414  define_makeflags (int all, int makefile)
    3415  {
    3416    const char ref[] = "MAKEOVERRIDES";
    3417    const char posixref[] = "-*-command-variables-*-";
    3418    const char evalref[] = "$(-*-eval-flags-*-)";
    3419    const struct command_switch *cs;
    3420    struct variable *v;
    3421    char *flagstring;
    3422    char *p;
    3423  
    3424    /* We will construct a linked list of 'struct flag's describing
    3425       all the flags which need to go in MAKEFLAGS.  Then, once we
    3426       know how many there are and their lengths, we can put them all
    3427       together in a string.  */
    3428  
    3429    struct flag
    3430      {
    3431        struct flag *next;
    3432        const struct command_switch *cs;
    3433        const char *arg;
    3434      };
    3435    struct flag *flags = 0;
    3436    struct flag *last = 0;
    3437    size_t flagslen = 0;
    3438  #define ADD_FLAG(ARG, LEN) \
    3439    do {                                                                        \
    3440      struct flag *new = alloca (sizeof (struct flag));                         \
    3441      new->cs = cs;                                                             \
    3442      new->arg = (ARG);                                                         \
    3443      new->next = 0;                                                            \
    3444      if (! flags)                                                              \
    3445        flags = new;                                                            \
    3446      else                                                                      \
    3447        last->next = new;                                                       \
    3448      last = new;                                                               \
    3449      if (new->arg == 0)                                                        \
    3450        /* Just a single flag letter: " -x"  */                                 \
    3451        flagslen += 3;                                                          \
    3452      else                                                                      \
    3453        /* " -xfoo", plus space to escape "foo".  */                            \
    3454        flagslen += 1 + 1 + 1 + (3 * (LEN));                                    \
    3455      if (!short_option (cs->c))                                                \
    3456        /* This switch has no single-letter version, so we use the long.  */    \
    3457        flagslen += 2 + strlen (cs->long_name);                                 \
    3458    } while (0)
    3459  
    3460    for (cs = switches; cs->c != '\0'; ++cs)
    3461      if (cs->toenv && (!makefile || !cs->no_makefile))
    3462        switch (cs->type)
    3463          {
    3464          case ignore:
    3465            break;
    3466  
    3467          case flag:
    3468          case flag_off:
    3469            if ((!*(int *) cs->value_ptr) == (cs->type == flag_off)
    3470                && (cs->default_value == 0
    3471                    || *(int *) cs->value_ptr != *(int *) cs->default_value))
    3472              ADD_FLAG (0, 0);
    3473            break;
    3474  
    3475          case positive_int:
    3476            if ((cs->default_value != 0
    3477                 && (*(unsigned int *) cs->value_ptr
    3478                     == *(unsigned int *) cs->default_value)))
    3479              break;
    3480            if (cs->noarg_value != 0
    3481                && (*(unsigned int *) cs->value_ptr ==
    3482                    *(unsigned int *) cs->noarg_value))
    3483              ADD_FLAG ("", 0); /* Optional value omitted; see below.  */
    3484            else
    3485              {
    3486                char *buf = alloca (30);
    3487                sprintf (buf, "%u", *(unsigned int *) cs->value_ptr);
    3488                ADD_FLAG (buf, strlen (buf));
    3489              }
    3490            break;
    3491  
    3492          case floating:
    3493            if (cs->default_value != 0
    3494                && (*(double *) cs->value_ptr == *(double *) cs->default_value))
    3495              break;
    3496            if (cs->noarg_value != 0
    3497                && (*(double *) cs->value_ptr == *(double *) cs->noarg_value))
    3498              ADD_FLAG ("", 0); /* Optional value omitted; see below.  */
    3499            else
    3500              {
    3501                char *buf = alloca (100);
    3502                sprintf (buf, "%g", *(double *) cs->value_ptr);
    3503                ADD_FLAG (buf, strlen (buf));
    3504              }
    3505            break;
    3506  
    3507          case string:
    3508            p = *((char **)cs->value_ptr);
    3509            if (p)
    3510              ADD_FLAG (p, strlen (p));
    3511            break;
    3512  
    3513          case filename:
    3514          case strlist:
    3515            {
    3516              struct stringlist *sl = *(struct stringlist **) cs->value_ptr;
    3517              if (sl != 0)
    3518                {
    3519                  unsigned int i;
    3520                  for (i = 0; i < sl->idx; ++i)
    3521                    ADD_FLAG (sl->list[i], strlen (sl->list[i]));
    3522                }
    3523            }
    3524            break;
    3525  
    3526          default:
    3527            abort ();
    3528          }
    3529  
    3530  #undef  ADD_FLAG
    3531  
    3532    /* Four more for the possible " -- ", plus variable references.  */
    3533    flagslen += 4 + CSTRLEN (posixref) + 4 + CSTRLEN (evalref) + 4;
    3534  
    3535    /* Construct the value in FLAGSTRING.
    3536       We allocate enough space for a preceding dash and trailing null.  */
    3537    flagstring = alloca (1 + flagslen + 1);
    3538    memset (flagstring, '\0', 1 + flagslen + 1);
    3539    p = flagstring;
    3540  
    3541    /* Start with a dash, for MFLAGS.  */
    3542    *p++ = '-';
    3543  
    3544    /* Add simple options as a group.  */
    3545    while (flags != 0 && !flags->arg && short_option (flags->cs->c))
    3546      {
    3547        *p++ = (char) flags->cs->c;
    3548        flags = flags->next;
    3549      }
    3550  
    3551    /* Now add more complex flags: ones with options and/or long names.  */
    3552    while (flags)
    3553      {
    3554        *p++ = ' ';
    3555        *p++ = '-';
    3556  
    3557        /* Add the flag letter or name to the string.  */
    3558        if (short_option (flags->cs->c))
    3559          *p++ = (char) flags->cs->c;
    3560        else
    3561          {
    3562            /* Long options require a double-dash.  */
    3563            *p++ = '-';
    3564            p = stpcpy (p, flags->cs->long_name);
    3565          }
    3566        /* An omitted optional argument has an ARG of "".  */
    3567        if (flags->arg && flags->arg[0] != '\0')
    3568          {
    3569            if (!short_option (flags->cs->c))
    3570              /* Long options require '='.  */
    3571              *p++ = '=';
    3572            p = quote_for_env (p, flags->arg);
    3573          }
    3574        flags = flags->next;
    3575      }
    3576  
    3577    /* If no flags at all, get rid of the initial dash.  */
    3578    if (p == &flagstring[1])
    3579      {
    3580        flagstring[0] = '\0';
    3581        p = flagstring;
    3582      }
    3583  
    3584    /* Define MFLAGS before appending variable definitions.  Omit an initial
    3585       empty dash.  Since MFLAGS is not parsed for flags, there is no reason to
    3586       override any makefile redefinition.  */
    3587    define_variable_cname ("MFLAGS",
    3588                           flagstring + (flagstring[0] == '-' && flagstring[1] == ' ' ? 2 : 0),
    3589                           o_env, 1);
    3590  
    3591    /* Write a reference to -*-eval-flags-*-, which contains all the --eval
    3592       flag options.  */
    3593    if (eval_strings)
    3594      {
    3595        *p++ = ' ';
    3596        p = mempcpy (p, evalref, CSTRLEN (evalref));
    3597      }
    3598  
    3599    if (all)
    3600      {
    3601        /* If there are any overrides to add, write a reference to
    3602           $(MAKEOVERRIDES), which contains command-line variable definitions.
    3603           Separate the variables from the switches with a "--" arg.  */
    3604  
    3605        const char *r = posix_pedantic ? posixref : ref;
    3606        size_t l = strlen (r);
    3607        v = lookup_variable (r, l);
    3608  
    3609        if (v && v->value && v->value[0] != '\0')
    3610          {
    3611            p = stpcpy (p, " -- ");
    3612            *(p++) = '$';
    3613            *(p++) = '(';
    3614            p = mempcpy (p, r, l);
    3615            *(p++) = ')';
    3616          }
    3617      }
    3618  
    3619    /* If there is a leading dash, omit it.  */
    3620    if (flagstring[0] == '-')
    3621      ++flagstring;
    3622  
    3623    /* This used to use o_env, but that lost when a makefile defined MAKEFLAGS.
    3624       Makefiles set MAKEFLAGS to add switches, but we still want to redefine
    3625       its value with the full set of switches.  Then we used o_file, but that
    3626       lost when users added -e, causing a previous MAKEFLAGS env. var. to take
    3627       precedence over the new one.  Of course, an override or command
    3628       definition will still take precedence.  */
    3629    v =  define_variable_cname (MAKEFLAGS_NAME, flagstring,
    3630                                env_overrides ? o_env_override : o_file, 1);
    3631    v->special = 1;
    3632  
    3633    return v;
    3634  }
    3635  
    3636  /* Print version information.  */
    3637  
    3638  static void
    3639  print_version (void)
    3640  {
    3641    static int printed_version = 0;
    3642  
    3643    const char *precede = print_data_base_flag ? "# " : "";
    3644  
    3645    if (printed_version)
    3646      /* Do it only once.  */
    3647      return;
    3648  
    3649    printf ("%sGNU Make %s\n", precede, version_string);
    3650  
    3651    if (!remote_description || *remote_description == '\0')
    3652      printf (_("%sBuilt for %s\n"), precede, make_host);
    3653    else
    3654      printf (_("%sBuilt for %s (%s)\n"),
    3655              precede, make_host, remote_description);
    3656  
    3657    /* Print this untranslated.  The coding standards recommend translating the
    3658       (C) to the copyright symbol, but this string is going to change every
    3659       year, and none of the rest of it should be translated (including the
    3660       word "Copyright"), so it hardly seems worth it.  */
    3661  
    3662    printf ("%sCopyright (C) 1988-2022 Free Software Foundation, Inc.\n",
    3663            precede);
    3664  
    3665    printf (_("%sLicense GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>\n\
    3666  %sThis is free software: you are free to change and redistribute it.\n\
    3667  %sThere is NO WARRANTY, to the extent permitted by law.\n"),
    3668              precede, precede, precede);
    3669  
    3670    printed_version = 1;
    3671  }
    3672  
    3673  /* Print a bunch of information about this and that.  */
    3674  
    3675  static void
    3676  print_data_base (void)
    3677  {
    3678    time_t when = time ((time_t *) 0);
    3679  
    3680    print_version ();
    3681  
    3682    printf (_("\n# Make data base, printed on %s"), ctime (&when));
    3683  
    3684    print_variable_data_base ();
    3685    print_dir_data_base ();
    3686    print_rule_data_base ();
    3687    print_file_data_base ();
    3688    print_vpath_data_base ();
    3689    strcache_print_stats ("#");
    3690  
    3691    when = time ((time_t *) 0);
    3692    printf (_("\n# Finished Make data base on %s\n"), ctime (&when));
    3693  }
    3694  
    3695  static void
    3696  clean_jobserver (int status)
    3697  {
    3698    /* Sanity: have we written all our jobserver tokens back?  If our
    3699       exit status is 2 that means some kind of syntax error; we might not
    3700       have written all our tokens so do that now.  If tokens are left
    3701       after any other error code, that's bad.  */
    3702  
    3703    if (jobserver_enabled() && jobserver_tokens)
    3704      {
    3705        if (status != 2)
    3706          ON (error, NILF,
    3707              "INTERNAL: Exiting with %u jobserver tokens (should be 0)!",
    3708              jobserver_tokens);
    3709        else
    3710          /* Don't write back the "free" token */
    3711          while (--jobserver_tokens)
    3712            jobserver_release (0);
    3713      }
    3714  
    3715  
    3716    /* Sanity: If we're the master, were all the tokens written back?  */
    3717  
    3718    if (master_job_slots)
    3719      {
    3720        /* We didn't write one for ourself, so start at 1.  */
    3721        unsigned int tokens = 1 + jobserver_acquire_all ();
    3722  
    3723        if (tokens != master_job_slots)
    3724          ONN (error, NILF,
    3725               "INTERNAL: Exiting with %u jobserver tokens available; should be %u!",
    3726               tokens, master_job_slots);
    3727  
    3728        reset_jobserver ();
    3729      }
    3730  }
    3731  
    3732  /* Exit with STATUS, cleaning up as necessary.  */
    3733  
    3734  void
    3735  die (int status)
    3736  {
    3737    static char dying = 0;
    3738  
    3739    if (!dying)
    3740      {
    3741        int err;
    3742  
    3743        dying = 1;
    3744  
    3745        if (print_version_flag)
    3746          print_version ();
    3747  
    3748        /* Get rid of a temp file from reading a makefile from stdin.  */
    3749        temp_stdin_unlink ();
    3750  
    3751        /* Wait for children to die.  */
    3752        err = (status != 0);
    3753        while (job_slots_used > 0)
    3754          reap_children (1, err);
    3755  
    3756        /* Let the remote job module clean up its state.  */
    3757        remote_cleanup ();
    3758  
    3759        /* Remove the intermediate files.  */
    3760        remove_intermediates (0);
    3761  
    3762        if (print_data_base_flag)
    3763          print_data_base ();
    3764  
    3765        if (verify_flag)
    3766          verify_file_data_base ();
    3767  
    3768        clean_jobserver (status);
    3769  
    3770        if (output_context)
    3771          {
    3772            /* die() might be called in a recipe output context due to an
    3773               $(error ...) function.  */
    3774            output_close (output_context);
    3775  
    3776            if (output_context != &make_sync)
    3777              output_close (&make_sync);
    3778  
    3779            OUTPUT_UNSET ();
    3780          }
    3781  
    3782        output_close (NULL);
    3783  
    3784        osync_clear ();
    3785  
    3786        /* Try to move back to the original directory.  This is essential on
    3787           MS-DOS (where there is really only one process), and on Unix it
    3788           puts core files in the original directory instead of the -C
    3789           directory.  Must wait until after remove_intermediates(), or unlinks
    3790           of relative pathnames fail.  */
    3791        if (directory_before_chdir != 0)
    3792          {
    3793            /* If it fails we don't care: shut up GCC.  */
    3794            int _x UNUSED;
    3795            _x = chdir (directory_before_chdir);
    3796          }
    3797      }
    3798  
    3799    exit (status);
    3800  }