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