(root)/
make-4.4/
src/
filedef.h
       1  /* Definition of target file data structures for 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  
      18  /* Structure that represents the info on one file
      19     that the makefile says how to make.
      20     All of these are chained together through 'next'.  */
      21  
      22  #include "hash.h"
      23  
      24  struct commands;
      25  struct dep;
      26  struct variable;
      27  struct variable_set_list;
      28  
      29  struct file
      30    {
      31      const char *name;
      32      const char *hname;          /* Hashed filename */
      33      const char *vpath;          /* VPATH/vpath pathname */
      34      struct dep *deps;           /* all dependencies, including duplicates */
      35      struct commands *cmds;      /* Commands to execute for this target.  */
      36      const char *stem;           /* Implicit stem, if an implicit
      37                                     rule has been used */
      38      struct dep *also_make;      /* Targets that are made by making this.  */
      39      struct file *prev;          /* Previous entry for same file name;
      40                                     used when there are multiple double-colon
      41                                     entries for the same file.  */
      42      struct file *last;          /* Last entry for the same file name.  */
      43  
      44      /* File that this file was renamed to.  After any time that a
      45         file could be renamed, call 'check_renamed' (below).  */
      46      struct file *renamed;
      47  
      48      /* List of variable sets used for this file.  */
      49      struct variable_set_list *variables;
      50  
      51      /* Pattern-specific variable reference for this target, or null if there
      52         isn't one.  Also see the pat_searched flag, below.  */
      53      struct variable_set_list *pat_variables;
      54  
      55      /* Immediate dependent that caused this target to be remade,
      56         or nil if there isn't one.  */
      57      struct file *parent;
      58  
      59      /* For a double-colon entry, this is the first double-colon entry for
      60         the same file.  Otherwise this is null.  */
      61      struct file *double_colon;
      62  
      63      FILE_TIMESTAMP last_mtime;  /* File's modtime, if already known.  */
      64      FILE_TIMESTAMP mtime_before_update; /* File's modtime before any updating
      65                                             has been performed.  */
      66      unsigned int considered;    /* equal to 'considered' if file has been
      67                                     considered on current scan of goal chain */
      68      int command_flags;          /* Flags OR'd in for cmds; see commands.h.  */
      69      enum update_status          /* Status of the last attempt to update.  */
      70        {
      71          us_success = 0,         /* Successfully updated.  Must be 0!  */
      72          us_none,                /* No attempt to update has been made.  */
      73          us_question,            /* Needs to be updated (-q is is set).  */
      74          us_failed               /* Update failed.  */
      75        } update_status ENUM_BITFIELD (2);
      76      enum cmd_state              /* State of commands.  ORDER IS IMPORTANT!  */
      77        {
      78          cs_not_started = 0,     /* Not yet started.  Must be 0!  */
      79          cs_deps_running,        /* Dep commands running.  */
      80          cs_running,             /* Commands running.  */
      81          cs_finished             /* Commands finished.  */
      82        } command_state ENUM_BITFIELD (2);
      83  
      84      unsigned int builtin:1;     /* True if the file is a builtin rule. */
      85      unsigned int precious:1;    /* Non-0 means don't delete file on quit */
      86      unsigned int loaded:1;      /* True if the file is a loaded object. */
      87      unsigned int unloaded:1;    /* True if this loaded object was unloaded. */
      88      unsigned int low_resolution_time:1; /* Nonzero if this file's time stamp
      89                                             has only one-second resolution.  */
      90      unsigned int tried_implicit:1; /* Nonzero if have searched
      91                                        for implicit rule for making
      92                                        this file; don't search again.  */
      93      unsigned int updating:1;    /* Nonzero while updating deps of this file */
      94      unsigned int updated:1;     /* Nonzero if this file has been remade.  */
      95      unsigned int is_target:1;   /* Nonzero if file is described as target.  */
      96      unsigned int cmd_target:1;  /* Nonzero if file was given on cmd line.  */
      97      unsigned int phony:1;       /* Nonzero if this is a phony file
      98                                     i.e., a prerequisite of .PHONY.  */
      99      unsigned int intermediate:1;/* Nonzero if this is an intermediate file.  */
     100      unsigned int is_explicit:1; /* Nonzero if explicitly mentioned. */
     101      unsigned int secondary:1;   /* Nonzero means remove_intermediates should
     102                                     not delete it.  */
     103      unsigned int notintermediate:1; /* Nonzero means a file is a prereq to
     104                                         .NOTINTERMEDIATE.  */
     105      unsigned int dontcare:1;    /* Nonzero if no complaint is to be made if
     106                                     this target cannot be remade.  */
     107      unsigned int ignore_vpath:1;/* Nonzero if we threw out VPATH name.  */
     108      unsigned int pat_searched:1;/* Nonzero if we already searched for
     109                                     pattern-specific variables.  */
     110      unsigned int no_diag:1;     /* True if the file failed to update and no
     111                                     diagnostics has been issued (dontcare). */
     112      unsigned int was_shuffled:1; /* Did we already shuffle 'deps'? used when
     113                                      --shuffle passes through the graph.  */
     114      unsigned int snapped:1;     /* True if the deps of this file have been
     115                                     secondary expanded.  */
     116    };
     117  
     118  
     119  extern struct file *default_file;
     120  
     121  
     122  struct file *lookup_file (const char *name);
     123  struct file *enter_file (const char *name);
     124  struct dep *split_prereqs (char *prereqstr);
     125  struct dep *enter_prereqs (struct dep *prereqs, const char *stem);
     126  void expand_deps (struct file *f);
     127  struct dep *expand_extra_prereqs (const struct variable *extra);
     128  void remove_intermediates (int sig);
     129  void snap_deps (void);
     130  void rename_file (struct file *file, const char *name);
     131  void rehash_file (struct file *file, const char *name);
     132  void set_command_state (struct file *file, enum cmd_state state);
     133  void notice_finished_file (struct file *file);
     134  void init_hash_files (void);
     135  void verify_file_data_base (void);
     136  char *build_target_list (char *old_list);
     137  void print_prereqs (const struct dep *deps);
     138  void print_file_data_base (void);
     139  int try_implicit_rule (struct file *file, unsigned int depth);
     140  int stemlen_compare (const void *v1, const void *v2);
     141  
     142  #if FILE_TIMESTAMP_HI_RES
     143  # define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \
     144      file_timestamp_cons (fname, (st).st_mtime, (st).ST_MTIM_NSEC)
     145  #else
     146  # define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \
     147      file_timestamp_cons (fname, (st).st_mtime, 0)
     148  #endif
     149  
     150  /* If FILE_TIMESTAMP is 64 bits (or more), use nanosecond resolution.
     151     (Multiply by 2**30 instead of by 10**9 to save time at the cost of
     152     slightly decreasing the number of available timestamps.)  With
     153     64-bit FILE_TIMESTAMP, this stops working on 2514-05-30 01:53:04
     154     UTC, but by then uintmax_t should be larger than 64 bits.  */
     155  #define FILE_TIMESTAMPS_PER_S (FILE_TIMESTAMP_HI_RES ? 1000000000 : 1)
     156  #define FILE_TIMESTAMP_LO_BITS (FILE_TIMESTAMP_HI_RES ? 30 : 0)
     157  
     158  #define FILE_TIMESTAMP_S(ts) (((ts) - ORDINARY_MTIME_MIN) \
     159                                >> FILE_TIMESTAMP_LO_BITS)
     160  #define FILE_TIMESTAMP_NS(ts) ((int) (((ts) - ORDINARY_MTIME_MIN) \
     161                                        & ((1 << FILE_TIMESTAMP_LO_BITS) - 1)))
     162  
     163  /* Upper bound on length of string "YYYY-MM-DD HH:MM:SS.NNNNNNNNN"
     164     representing a file timestamp.  The upper bound is not necessarily 29,
     165     since the year might be less than -999 or greater than 9999.
     166  
     167     Subtract one for the sign bit if in case file timestamps can be negative;
     168     subtract FLOOR_LOG2_SECONDS_PER_YEAR to yield an upper bound on how many
     169     file timestamp bits might affect the year;
     170     302 / 1000 is log10 (2) rounded up;
     171     add one for integer division truncation;
     172     add one more for a minus sign if file timestamps can be negative;
     173     add 4 to allow for any 4-digit epoch year (e.g. 1970);
     174     add 25 to allow for "-MM-DD HH:MM:SS.NNNNNNNNN".  */
     175  #define FLOOR_LOG2_SECONDS_PER_YEAR 24
     176  #define FILE_TIMESTAMP_PRINT_LEN_BOUND \
     177    (((sizeof (FILE_TIMESTAMP) * CHAR_BIT - 1 - FLOOR_LOG2_SECONDS_PER_YEAR) \
     178      * 302 / 1000) \
     179     + 1 + 1 + 4 + 25)
     180  
     181  FILE_TIMESTAMP file_timestamp_cons (char const *, time_t, long int);
     182  FILE_TIMESTAMP file_timestamp_now (int *);
     183  void file_timestamp_sprintf (char *p, FILE_TIMESTAMP ts);
     184  
     185  /* Return the mtime of file F (a struct file *), caching it.
     186     The value is NONEXISTENT_MTIME if the file does not exist.  */
     187  #define file_mtime(f) file_mtime_1 ((f), 1)
     188  /* Return the mtime of file F (a struct file *), caching it.
     189     Don't search using vpath for the file--if it doesn't actually exist,
     190     we don't find it.
     191     The value is NONEXISTENT_MTIME if the file does not exist.  */
     192  #define file_mtime_no_search(f) file_mtime_1 ((f), 0)
     193  FILE_TIMESTAMP f_mtime (struct file *file, int search);
     194  #define file_mtime_1(f, v) \
     195    ((f)->last_mtime == UNKNOWN_MTIME ? f_mtime ((f), v) : (f)->last_mtime)
     196  
     197  /* Special timestamp values.  */
     198  
     199  /* The file's timestamp is not yet known.  */
     200  #define UNKNOWN_MTIME 0
     201  
     202  /* The file does not exist.  */
     203  #define NONEXISTENT_MTIME 1
     204  
     205  /* The file does not exist, and we assume that it is older than any
     206     actual file.  */
     207  #define OLD_MTIME 2
     208  
     209  /* The smallest and largest ordinary timestamps.  */
     210  #define ORDINARY_MTIME_MIN (OLD_MTIME + 1)
     211  #define ORDINARY_MTIME_MAX ((FILE_TIMESTAMP_S (NEW_MTIME) \
     212                               << FILE_TIMESTAMP_LO_BITS) \
     213                              + ORDINARY_MTIME_MIN + FILE_TIMESTAMPS_PER_S - 1)
     214  
     215  #define is_ordinary_mtime(_t) ((_t) >= ORDINARY_MTIME_MIN && (_t) <= ORDINARY_MTIME_MAX)
     216  
     217  /* Modtime value to use for 'infinitely new'.  We used to get the current time
     218     from the system and use that whenever we wanted 'new'.  But that causes
     219     trouble when the machine running make and the machine holding a file have
     220     different ideas about what time it is; and can also lose for 'force'
     221     targets, which need to be considered newer than anything that depends on
     222     them, even if said dependents' modtimes are in the future.  */
     223  #define NEW_MTIME INTEGER_TYPE_MAXIMUM (FILE_TIMESTAMP)
     224  
     225  #define check_renamed(file) \
     226    while ((file)->renamed != 0) (file) = (file)->renamed /* No ; here.  */
     227  
     228  /* Have we snapped deps yet?  */
     229  extern int snapped_deps;