Home | History | Annotate | Download | only in make-3.81
      1 /* Command processing for GNU Make.
      2 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
      3 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
      4 Foundation, Inc.
      5 This file is part of GNU Make.
      6 
      7 GNU Make is free software; you can redistribute it and/or modify it under the
      8 terms of the GNU General Public License as published by the Free Software
      9 Foundation; either version 2, or (at your option) any later version.
     10 
     11 GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
     12 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
     13 A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
     14 
     15 You should have received a copy of the GNU General Public License along with
     16 GNU Make; see the file COPYING.  If not, write to the Free Software
     17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.  */
     18 
     19 #include "make.h"
     20 #include "dep.h"
     21 #include "filedef.h"
     22 #include "variable.h"
     23 #include "job.h"
     24 #include "commands.h"
     25 #ifdef WINDOWS32
     26 #include <windows.h>
     27 #include "w32err.h"
     28 #endif
     29 
     30 #if VMS
     31 # define FILE_LIST_SEPARATOR ','
     32 #else
     33 # define FILE_LIST_SEPARATOR ' '
     34 #endif
     35 
     36 extern int remote_kill PARAMS ((int id, int sig));
     37 
     38 #ifndef	HAVE_UNISTD_H
     39 extern int getpid ();
     40 #endif
     41 
     42 /* Set FILE's automatic variables up.  */
     44 
     45 void
     46 set_file_variables (struct file *file)
     47 {
     48   struct dep *d;
     49   char *at, *percent, *star, *less;
     50 
     51 #ifndef	NO_ARCHIVES
     52   /* If the target is an archive member `lib(member)',
     53      then $@ is `lib' and $% is `member'.  */
     54 
     55   if (ar_name (file->name))
     56     {
     57       unsigned int len;
     58       char *p;
     59 
     60       p = strchr (file->name, '(');
     61       at = (char *) alloca (p - file->name + 1);
     62       bcopy (file->name, at, p - file->name);
     63       at[p - file->name] = '\0';
     64       len = strlen (p + 1);
     65       percent = (char *) alloca (len);
     66       bcopy (p + 1, percent, len - 1);
     67       percent[len - 1] = '\0';
     68     }
     69   else
     70 #endif	/* NO_ARCHIVES.  */
     71     {
     72       at = file->name;
     73       percent = "";
     74     }
     75 
     76   /* $* is the stem from an implicit or static pattern rule.  */
     77   if (file->stem == 0)
     78     {
     79       /* In Unix make, $* is set to the target name with
     80 	 any suffix in the .SUFFIXES list stripped off for
     81 	 explicit rules.  We store this in the `stem' member.  */
     82       register struct dep *d;
     83       char *name;
     84       unsigned int len;
     85 
     86 #ifndef	NO_ARCHIVES
     87       if (ar_name (file->name))
     88 	{
     89 	  name = strchr (file->name, '(') + 1;
     90 	  len = strlen (name) - 1;
     91 	}
     92       else
     93 #endif
     94 	{
     95 	  name = file->name;
     96 	  len = strlen (name);
     97 	}
     98 
     99       for (d = enter_file (".SUFFIXES")->deps; d != 0; d = d->next)
    100 	{
    101 	  unsigned int slen = strlen (dep_name (d));
    102 	  if (len > slen && strneq (dep_name (d), name + (len - slen), slen))
    103 	    {
    104 	      file->stem = savestring (name, len - slen);
    105 	      break;
    106 	    }
    107 	}
    108       if (d == 0)
    109 	file->stem = "";
    110     }
    111   star = file->stem;
    112 
    113   /* $< is the first not order-only dependency.  */
    114   less = "";
    115   for (d = file->deps; d != 0; d = d->next)
    116     if (!d->ignore_mtime)
    117       {
    118         less = dep_name (d);
    119         break;
    120       }
    121 
    122   if (file->cmds == default_file->cmds)
    123     /* This file got its commands from .DEFAULT.
    124        In this case $< is the same as $@.  */
    125     less = at;
    126 
    127 #define	DEFINE_VARIABLE(name, len, value) \
    128   (void) define_variable_for_file (name,len,value,o_automatic,0,file)
    129 
    130   /* Define the variables.  */
    131 
    132   DEFINE_VARIABLE ("<", 1, less);
    133   DEFINE_VARIABLE ("*", 1, star);
    134   DEFINE_VARIABLE ("@", 1, at);
    135   DEFINE_VARIABLE ("%", 1, percent);
    136 
    137   /* Compute the values for $^, $+, $?, and $|.  */
    138 
    139   {
    140     static char *plus_value=0, *bar_value=0, *qmark_value=0;
    141     static unsigned int qmark_max=0, plus_max=0, bar_max=0;
    142 
    143     unsigned int qmark_len, plus_len, bar_len;
    144     char *cp;
    145     char *caret_value;
    146     char *qp;
    147     char *bp;
    148     unsigned int len;
    149 
    150     /* Compute first the value for $+, which is supposed to contain
    151        duplicate dependencies as they were listed in the makefile.  */
    152 
    153     plus_len = 0;
    154     for (d = file->deps; d != 0; d = d->next)
    155       if (! d->ignore_mtime)
    156 	plus_len += strlen (dep_name (d)) + 1;
    157     if (plus_len == 0)
    158       plus_len++;
    159 
    160     if (plus_len > plus_max)
    161       plus_value = xrealloc (plus_value, plus_max = plus_len);
    162     cp = plus_value;
    163 
    164     qmark_len = plus_len + 1;	/* Will be this or less.  */
    165     for (d = file->deps; d != 0; d = d->next)
    166       if (! d->ignore_mtime)
    167         {
    168           char *c = dep_name (d);
    169 
    170 #ifndef	NO_ARCHIVES
    171           if (ar_name (c))
    172             {
    173               c = strchr (c, '(') + 1;
    174               len = strlen (c) - 1;
    175             }
    176           else
    177 #endif
    178             len = strlen (c);
    179 
    180           bcopy (c, cp, len);
    181           cp += len;
    182           *cp++ = FILE_LIST_SEPARATOR;
    183           if (! d->changed)
    184             qmark_len -= len + 1;	/* Don't space in $? for this one.  */
    185         }
    186 
    187     /* Kill the last space and define the variable.  */
    188 
    189     cp[cp > plus_value ? -1 : 0] = '\0';
    190     DEFINE_VARIABLE ("+", 1, plus_value);
    191 
    192     /* Make sure that no dependencies are repeated.  This does not
    193        really matter for the purpose of updating targets, but it
    194        might make some names be listed twice for $^ and $?.  */
    195 
    196     uniquize_deps (file->deps);
    197 
    198     bar_len = 0;
    199     for (d = file->deps; d != 0; d = d->next)
    200       if (d->ignore_mtime)
    201 	bar_len += strlen (dep_name (d)) + 1;
    202     if (bar_len == 0)
    203       bar_len++;
    204 
    205     /* Compute the values for $^, $?, and $|.  */
    206 
    207     cp = caret_value = plus_value; /* Reuse the buffer; it's big enough.  */
    208 
    209     if (qmark_len > qmark_max)
    210       qmark_value = xrealloc (qmark_value, qmark_max = qmark_len);
    211     qp = qmark_value;
    212 
    213     if (bar_len > bar_max)
    214       bar_value = xrealloc (bar_value, bar_max = bar_len);
    215     bp = bar_value;
    216 
    217     for (d = file->deps; d != 0; d = d->next)
    218       {
    219 	char *c = dep_name (d);
    220 
    221 #ifndef	NO_ARCHIVES
    222 	if (ar_name (c))
    223 	  {
    224 	    c = strchr (c, '(') + 1;
    225 	    len = strlen (c) - 1;
    226 	  }
    227 	else
    228 #endif
    229 	  len = strlen (c);
    230 
    231         if (d->ignore_mtime)
    232           {
    233 	    bcopy (c, bp, len);
    234 	    bp += len;
    235 	    *bp++ = FILE_LIST_SEPARATOR;
    236 	  }
    237 	else
    238 	  {
    239             bcopy (c, cp, len);
    240             cp += len;
    241             *cp++ = FILE_LIST_SEPARATOR;
    242             if (d->changed)
    243               {
    244                 bcopy (c, qp, len);
    245                 qp += len;
    246                 *qp++ = FILE_LIST_SEPARATOR;
    247               }
    248           }
    249       }
    250 
    251     /* Kill the last spaces and define the variables.  */
    252 
    253     cp[cp > caret_value ? -1 : 0] = '\0';
    254     DEFINE_VARIABLE ("^", 1, caret_value);
    255 
    256     qp[qp > qmark_value ? -1 : 0] = '\0';
    257     DEFINE_VARIABLE ("?", 1, qmark_value);
    258 
    259     bp[bp > bar_value ? -1 : 0] = '\0';
    260     DEFINE_VARIABLE ("|", 1, bar_value);
    261   }
    262 
    263 #undef	DEFINE_VARIABLE
    264 }
    265 
    266 /* Chop CMDS up into individual command lines if necessary.
    268    Also set the `lines_flags' and `any_recurse' members.  */
    269 
    270 void
    271 chop_commands (struct commands *cmds)
    272 {
    273   register char *p;
    274   unsigned int nlines, idx;
    275   char **lines;
    276 
    277   /* If we don't have any commands,
    278      or we already parsed them, never mind.  */
    279 
    280   if (!cmds || cmds->command_lines != 0)
    281     return;
    282 
    283   /* Chop CMDS->commands up into lines in CMDS->command_lines.
    284 	 Also set the corresponding CMDS->lines_flags elements,
    285 	 and the CMDS->any_recurse flag.  */
    286 
    287   nlines = 5;
    288   lines = (char **) xmalloc (5 * sizeof (char *));
    289   idx = 0;
    290   p = cmds->commands;
    291   while (*p != '\0')
    292     {
    293       char *end = p;
    294     find_end:;
    295       end = strchr (end, '\n');
    296       if (end == 0)
    297         end = p + strlen (p);
    298       else if (end > p && end[-1] == '\\')
    299         {
    300           int backslash = 1;
    301           register char *b;
    302           for (b = end - 2; b >= p && *b == '\\'; --b)
    303             backslash = !backslash;
    304           if (backslash)
    305             {
    306               ++end;
    307               goto find_end;
    308             }
    309         }
    310 
    311       if (idx == nlines)
    312         {
    313           nlines += 2;
    314           lines = (char **) xrealloc ((char *) lines,
    315                                       nlines * sizeof (char *));
    316         }
    317       lines[idx++] = savestring (p, end - p);
    318       p = end;
    319       if (*p != '\0')
    320         ++p;
    321     }
    322 
    323   if (idx != nlines)
    324     {
    325       nlines = idx;
    326       lines = (char **) xrealloc ((char *) lines,
    327                                   nlines * sizeof (char *));
    328     }
    329 
    330   cmds->ncommand_lines = nlines;
    331   cmds->command_lines = lines;
    332 
    333   cmds->any_recurse = 0;
    334   cmds->lines_flags = (char *) xmalloc (nlines);
    335   for (idx = 0; idx < nlines; ++idx)
    336     {
    337       int flags = 0;
    338 
    339       for (p = lines[idx];
    340            isblank ((unsigned char)*p) || *p == '-' || *p == '@' || *p == '+';
    341            ++p)
    342         switch (*p)
    343           {
    344           case '+':
    345             flags |= COMMANDS_RECURSE;
    346             break;
    347           case '@':
    348             flags |= COMMANDS_SILENT;
    349             break;
    350           case '-':
    351             flags |= COMMANDS_NOERROR;
    352             break;
    353           }
    354 
    355       /* If no explicit '+' was given, look for MAKE variable references.  */
    356       if (!(flags & COMMANDS_RECURSE)
    357           && (strstr (p, "$(MAKE)") != 0 || strstr (p, "${MAKE}") != 0))
    358         flags |= COMMANDS_RECURSE;
    359 
    360       cmds->lines_flags[idx] = flags;
    361       cmds->any_recurse |= flags & COMMANDS_RECURSE;
    362     }
    363 }
    364 
    365 /* Execute the commands to remake FILE.  If they are currently executing,
    367    return or have already finished executing, just return.  Otherwise,
    368    fork off a child process to run the first command line in the sequence.  */
    369 
    370 void
    371 execute_file_commands (struct file *file)
    372 {
    373   register char *p;
    374 
    375   /* Don't go through all the preparations if
    376      the commands are nothing but whitespace.  */
    377 
    378   for (p = file->cmds->commands; *p != '\0'; ++p)
    379     if (!isspace ((unsigned char)*p) && *p != '-' && *p != '@')
    380       break;
    381   if (*p == '\0')
    382     {
    383       /* If there are no commands, assume everything worked.  */
    384       set_command_state (file, cs_running);
    385       file->update_status = 0;
    386       notice_finished_file (file);
    387       return;
    388     }
    389 
    390   /* First set the automatic variables according to this file.  */
    391 
    392   initialize_file_variables (file, 0);
    393 
    394   set_file_variables (file);
    395 
    396   /* Start the commands running.  */
    397   new_job (file);
    398 }
    399 
    400 /* This is set while we are inside fatal_error_signal,
    402    so things can avoid nonreentrant operations.  */
    403 
    404 int handling_fatal_signal = 0;
    405 
    406 /* Handle fatal signals.  */
    407 
    408 RETSIGTYPE
    409 fatal_error_signal (int sig)
    410 {
    411 #ifdef __MSDOS__
    412   extern int dos_status, dos_command_running;
    413 
    414   if (dos_command_running)
    415     {
    416       /* That was the child who got the signal, not us.  */
    417       dos_status |= (sig << 8);
    418       return;
    419     }
    420   remove_intermediates (1);
    421   exit (EXIT_FAILURE);
    422 #else /* not __MSDOS__ */
    423 #ifdef _AMIGA
    424   remove_intermediates (1);
    425   if (sig == SIGINT)
    426      fputs (_("*** Break.\n"), stderr);
    427 
    428   exit (10);
    429 #else /* not Amiga */
    430 #ifdef WINDOWS32
    431   extern HANDLE main_thread;
    432 
    433   /* Windows creates a sperate thread for handling Ctrl+C, so we need
    434      to suspend the main thread, or else we will have race conditions
    435      when both threads call reap_children.  */
    436   if (main_thread)
    437     {
    438       DWORD susp_count = SuspendThread (main_thread);
    439 
    440       if (susp_count != 0)
    441 	fprintf (stderr, "SuspendThread: suspend count = %ld\n", susp_count);
    442       else if (susp_count == (DWORD)-1)
    443 	{
    444 	  DWORD ierr = GetLastError ();
    445 
    446 	  fprintf (stderr, "SuspendThread: error %ld: %s\n",
    447 		   ierr, map_windows32_error_to_string (ierr));
    448 	}
    449     }
    450 #endif
    451   handling_fatal_signal = 1;
    452 
    453   /* Set the handling for this signal to the default.
    454      It is blocked now while we run this handler.  */
    455   signal (sig, SIG_DFL);
    456 
    457   /* A termination signal won't be sent to the entire
    458      process group, but it means we want to kill the children.  */
    459 
    460   if (sig == SIGTERM)
    461     {
    462       register struct child *c;
    463       for (c = children; c != 0; c = c->next)
    464 	if (!c->remote)
    465 	  (void) kill (c->pid, SIGTERM);
    466     }
    467 
    468   /* If we got a signal that means the user
    469      wanted to kill make, remove pending targets.  */
    470 
    471   if (sig == SIGTERM || sig == SIGINT
    472 #ifdef SIGHUP
    473     || sig == SIGHUP
    474 #endif
    475 #ifdef SIGQUIT
    476     || sig == SIGQUIT
    477 #endif
    478     )
    479     {
    480       register struct child *c;
    481 
    482       /* Remote children won't automatically get signals sent
    483 	 to the process group, so we must send them.  */
    484       for (c = children; c != 0; c = c->next)
    485 	if (c->remote)
    486 	  (void) remote_kill (c->pid, sig);
    487 
    488       for (c = children; c != 0; c = c->next)
    489 	delete_child_targets (c);
    490 
    491       /* Clean up the children.  We don't just use the call below because
    492 	 we don't want to print the "Waiting for children" message.  */
    493       while (job_slots_used > 0)
    494 	reap_children (1, 0);
    495     }
    496   else
    497     /* Wait for our children to die.  */
    498     while (job_slots_used > 0)
    499       reap_children (1, 1);
    500 
    501   /* Delete any non-precious intermediate files that were made.  */
    502 
    503   remove_intermediates (1);
    504 
    505 #ifdef SIGQUIT
    506   if (sig == SIGQUIT)
    507     /* We don't want to send ourselves SIGQUIT, because it will
    508        cause a core dump.  Just exit instead.  */
    509     exit (EXIT_FAILURE);
    510 #endif
    511 
    512 #ifdef WINDOWS32
    513   if (main_thread)
    514     CloseHandle (main_thread);
    515   /* Cannot call W32_kill with a pid (it needs a handle).  The exit
    516      status of 130 emulates what happens in Bash.  */
    517   exit (130);
    518 #else
    519   /* Signal the same code; this time it will really be fatal.  The signal
    520      will be unblocked when we return and arrive then to kill us.  */
    521   if (kill (getpid (), sig) < 0)
    522     pfatal_with_name ("kill");
    523 #endif /* not WINDOWS32 */
    524 #endif /* not Amiga */
    525 #endif /* not __MSDOS__  */
    526 }
    527 
    528 /* Delete FILE unless it's precious or not actually a file (phony),
    530    and it has changed on disk since we last stat'd it.  */
    531 
    532 static void
    533 delete_target (struct file *file, char *on_behalf_of)
    534 {
    535   struct stat st;
    536   int e;
    537 
    538   if (file->precious || file->phony)
    539     return;
    540 
    541 #ifndef NO_ARCHIVES
    542   if (ar_name (file->name))
    543     {
    544       time_t file_date = (file->last_mtime == NONEXISTENT_MTIME
    545 			  ? (time_t) -1
    546 			  : (time_t) FILE_TIMESTAMP_S (file->last_mtime));
    547       if (ar_member_date (file->name) != file_date)
    548 	{
    549 	  if (on_behalf_of)
    550 	    error (NILF, _("*** [%s] Archive member `%s' may be bogus; not deleted"),
    551 		   on_behalf_of, file->name);
    552 	  else
    553 	    error (NILF, _("*** Archive member `%s' may be bogus; not deleted"),
    554 		   file->name);
    555 	}
    556       return;
    557     }
    558 #endif
    559 
    560   EINTRLOOP (e, stat (file->name, &st));
    561   if (e == 0
    562       && S_ISREG (st.st_mode)
    563       && FILE_TIMESTAMP_STAT_MODTIME (file->name, st) != file->last_mtime)
    564     {
    565       if (on_behalf_of)
    566 	error (NILF, _("*** [%s] Deleting file `%s'"), on_behalf_of, file->name);
    567       else
    568 	error (NILF, _("*** Deleting file `%s'"), file->name);
    569       if (unlink (file->name) < 0
    570 	  && errno != ENOENT)	/* It disappeared; so what.  */
    571 	perror_with_name ("unlink: ", file->name);
    572     }
    573 }
    574 
    575 
    576 /* Delete all non-precious targets of CHILD unless they were already deleted.
    577    Set the flag in CHILD to say they've been deleted.  */
    578 
    579 void
    580 delete_child_targets (struct child *child)
    581 {
    582   struct dep *d;
    583 
    584   if (child->deleted)
    585     return;
    586 
    587   /* Delete the target file if it changed.  */
    588   delete_target (child->file, (char *) 0);
    589 
    590   /* Also remove any non-precious targets listed in the `also_make' member.  */
    591   for (d = child->file->also_make; d != 0; d = d->next)
    592     delete_target (d->file, child->file->name);
    593 
    594   child->deleted = 1;
    595 }
    596 
    597 /* Print out the commands in CMDS.  */
    599 
    600 void
    601 print_commands (struct commands *cmds)
    602 {
    603   register char *s;
    604 
    605   fputs (_("#  commands to execute"), stdout);
    606 
    607   if (cmds->fileinfo.filenm == 0)
    608     puts (_(" (built-in):"));
    609   else
    610     printf (_(" (from `%s', line %lu):\n"),
    611             cmds->fileinfo.filenm, cmds->fileinfo.lineno);
    612 
    613   s = cmds->commands;
    614   while (*s != '\0')
    615     {
    616       char *end;
    617 
    618       while (isspace ((unsigned char)*s))
    619 	++s;
    620 
    621       end = strchr (s, '\n');
    622       if (end == 0)
    623 	end = s + strlen (s);
    624 
    625       printf ("\t%.*s\n", (int) (end - s), s);
    626 
    627       s = end;
    628     }
    629 }
    630