w32tex
About: TeX Live provides a comprehensive TeX system including all the major TeX-related programs, macro packages, and fonts that are free software. Windows sources.
  Fossies Dox: w32tex-src.tar.xz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

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 #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. */
50 
51  /* Pattern-specific variable reference for this target, or null if there
52  isn't one. Also see the pat_searched flag, below. */
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. */
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 low_resolution_time:1; /* Nonzero if this file's time stamp
88  has only one-second resolution. */
89  unsigned int tried_implicit:1; /* Nonzero if have searched
90  for implicit rule for making
91  this file; don't search again. */
92  unsigned int updating:1; /* Nonzero while updating deps of this file */
93  unsigned int updated:1; /* Nonzero if this file has been remade. */
94  unsigned int is_target:1; /* Nonzero if file is described as target. */
95  unsigned int cmd_target:1; /* Nonzero if file was given on cmd line. */
96  unsigned int phony:1; /* Nonzero if this is a phony file
97  i.e., a prerequisite of .PHONY. */
98  unsigned int intermediate:1;/* Nonzero if this is an intermediate file. */
99  unsigned int secondary:1; /* Nonzero means remove_intermediates should
100  not delete it. */
101  unsigned int dontcare:1; /* Nonzero if no complaint is to be made if
102  this target cannot be remade. */
103  unsigned int ignore_vpath:1;/* Nonzero if we threw out VPATH name. */
104  unsigned int pat_searched:1;/* Nonzero if we already searched for
105  pattern-specific variables. */
106  unsigned int no_diag:1; /* True if the file failed to update and no
107  diagnostics has been issued (dontcare). */
108  };
109 
110 
111 extern struct file *default_file;
112 
113 
114 struct file *lookup_file (const char *name);
115 struct file *enter_file (const char *name);
116 struct dep *split_prereqs (char *prereqstr);
117 struct dep *enter_prereqs (struct dep *prereqs, const char *stem);
118 struct dep *expand_extra_prereqs (const struct variable *extra);
119 void remove_intermediates (int sig);
120 void snap_deps (void);
121 void rename_file (struct file *file, const char *name);
122 void rehash_file (struct file *file, const char *name);
123 void set_command_state (struct file *file, enum cmd_state state);
124 void notice_finished_file (struct file *file);
125 void init_hash_files (void);
126 void verify_file_data_base (void);
127 char *build_target_list (char *old_list);
128 void print_prereqs (const struct dep *deps);
129 void print_file_data_base (void);
130 int try_implicit_rule (struct file *file, unsigned int depth);
131 int stemlen_compare (const void *v1, const void *v2);
132 
133 #if FILE_TIMESTAMP_HI_RES
134 # define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \
135  file_timestamp_cons (fname, (st).st_mtime, (st).ST_MTIM_NSEC)
136 #else
137 # define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \
138  file_timestamp_cons (fname, (st).st_mtime, 0)
139 #endif
140 
141 /* If FILE_TIMESTAMP is 64 bits (or more), use nanosecond resolution.
142  (Multiply by 2**30 instead of by 10**9 to save time at the cost of
143  slightly decreasing the number of available timestamps.) With
144  64-bit FILE_TIMESTAMP, this stops working on 2514-05-30 01:53:04
145  UTC, but by then uintmax_t should be larger than 64 bits. */
146 #define FILE_TIMESTAMPS_PER_S (FILE_TIMESTAMP_HI_RES ? 1000000000 : 1)
147 #define FILE_TIMESTAMP_LO_BITS (FILE_TIMESTAMP_HI_RES ? 30 : 0)
148 
149 #define FILE_TIMESTAMP_S(ts) (((ts) - ORDINARY_MTIME_MIN) \
150  >> FILE_TIMESTAMP_LO_BITS)
151 #define FILE_TIMESTAMP_NS(ts) ((int) (((ts) - ORDINARY_MTIME_MIN) \
152  & ((1 << FILE_TIMESTAMP_LO_BITS) - 1)))
153 
154 /* Upper bound on length of string "YYYY-MM-DD HH:MM:SS.NNNNNNNNN"
155  representing a file timestamp. The upper bound is not necessarily 29,
156  since the year might be less than -999 or greater than 9999.
157 
158  Subtract one for the sign bit if in case file timestamps can be negative;
159  subtract FLOOR_LOG2_SECONDS_PER_YEAR to yield an upper bound on how many
160  file timestamp bits might affect the year;
161  302 / 1000 is log10 (2) rounded up;
162  add one for integer division truncation;
163  add one more for a minus sign if file timestamps can be negative;
164  add 4 to allow for any 4-digit epoch year (e.g. 1970);
165  add 25 to allow for "-MM-DD HH:MM:SS.NNNNNNNNN". */
166 #define FLOOR_LOG2_SECONDS_PER_YEAR 24
167 #define FILE_TIMESTAMP_PRINT_LEN_BOUND \
168  (((sizeof (FILE_TIMESTAMP) * CHAR_BIT - 1 - FLOOR_LOG2_SECONDS_PER_YEAR) \
169  * 302 / 1000) \
170  + 1 + 1 + 4 + 25)
171 
172 FILE_TIMESTAMP file_timestamp_cons (char const *, time_t, long int);
175 
176 /* Return the mtime of file F (a struct file *), caching it.
177  The value is NONEXISTENT_MTIME if the file does not exist. */
178 #define file_mtime(f) file_mtime_1 ((f), 1)
179 /* Return the mtime of file F (a struct file *), caching it.
180  Don't search using vpath for the file--if it doesn't actually exist,
181  we don't find it.
182  The value is NONEXISTENT_MTIME if the file does not exist. */
183 #define file_mtime_no_search(f) file_mtime_1 ((f), 0)
184 FILE_TIMESTAMP f_mtime (struct file *file, int search);
185 #define file_mtime_1(f, v) \
186  ((f)->last_mtime == UNKNOWN_MTIME ? f_mtime ((f), v) : (f)->last_mtime)
187 
188 /* Special timestamp values. */
189 
190 /* The file's timestamp is not yet known. */
191 #define UNKNOWN_MTIME 0
192 
193 /* The file does not exist. */
194 #define NONEXISTENT_MTIME 1
195 
196 /* The file does not exist, and we assume that it is older than any
197  actual file. */
198 #define OLD_MTIME 2
199 
200 /* The smallest and largest ordinary timestamps. */
201 #define ORDINARY_MTIME_MIN (OLD_MTIME + 1)
202 #define ORDINARY_MTIME_MAX ((FILE_TIMESTAMP_S (NEW_MTIME) \
203  << FILE_TIMESTAMP_LO_BITS) \
204  + ORDINARY_MTIME_MIN + FILE_TIMESTAMPS_PER_S - 1)
205 
206 /* Modtime value to use for 'infinitely new'. We used to get the current time
207  from the system and use that whenever we wanted 'new'. But that causes
208  trouble when the machine running make and the machine holding a file have
209  different ideas about what time it is; and can also lose for 'force'
210  targets, which need to be considered newer than anything that depends on
211  them, even if said dependents' modtimes are in the future. */
212 #define NEW_MTIME INTEGER_TYPE_MAXIMUM (FILE_TIMESTAMP)
213 
214 #define check_renamed(file) \
215  while ((file)->renamed != 0) (file) = (file)->renamed /* No ; here. */
216 
217 /* Have we snapped deps yet? */
218 extern int snapped_deps;
#define depth(a)
Definition: aptex-macros.h:199
#define name
void rehash_file(struct file *file, const char *name)
Definition: file.c:217
struct file * enter_file(const char *name)
Definition: file.c:155
struct dep * expand_extra_prereqs(const struct variable *extra)
Definition: file.c:641
struct file * default_file
Definition: main.c:527
void notice_finished_file(struct file *file)
Definition: remake.c:869
void remove_intermediates(int sig)
Definition: file.c:365
void verify_file_data_base(void)
Definition: file.c:1143
struct dep * enter_prereqs(struct dep *prereqs, const char *stem)
Definition: file.c:477
FILE_TIMESTAMP file_timestamp_cons(char const *, time_t, long int)
Definition: file.c:861
char * build_target_list(char *old_list)
Definition: file.c:1151
void set_command_state(struct file *file, enum cmd_state state)
Definition: file.c:847
struct dep * split_prereqs(char *prereqstr)
Definition: file.c:443
struct file * lookup_file(const char *name)
Definition: file.c:71
void print_file_data_base(void)
Definition: file.c:1103
int try_implicit_rule(struct file *file, unsigned int depth)
Definition: implicit.c:36
void init_hash_files(void)
Definition: file.c:1197
void file_timestamp_sprintf(char *p, FILE_TIMESTAMP ts)
int snapped_deps
Definition: file.c:37
int stemlen_compare(const void *v1, const void *v2)
void snap_deps(void)
Definition: file.c:711
FILE_TIMESTAMP file_timestamp_now(int *)
Definition: file.c:885
FILE_TIMESTAMP f_mtime(struct file *file, int search)
Definition: remake.c:1255
void rename_file(struct file *file, const char *name)
Definition: file.c:349
void print_prereqs(const struct dep *deps)
Definition: file.c:966
#define v1
#define v2
small capitals from c petite p
Definition: afcover.h:72
long time_t
Definition: types.h:18
#define FILE_TIMESTAMP
Definition: makeint.h:292
Definition: dep.h:55
Definition: filedef.h:30
unsigned int phony
Definition: filedef.h:96
const char * vpath
Definition: filedef.h:33
struct variable_set_list * variables
Definition: filedef.h:49
struct file * double_colon
Definition: filedef.h:61
FILE_TIMESTAMP last_mtime
Definition: filedef.h:63
struct file * renamed
Definition: filedef.h:46
unsigned int builtin
Definition: filedef.h:84
unsigned int precious
Definition: filedef.h:85
update_status
Definition: filedef.h:70
@ us_none
Definition: filedef.h:72
@ us_question
Definition: filedef.h:73
@ us_failed
Definition: filedef.h:74
@ us_success
Definition: filedef.h:71
unsigned int updated
Definition: filedef.h:93
unsigned int tried_implicit
Definition: filedef.h:89
unsigned int loaded
Definition: filedef.h:86
unsigned int secondary
Definition: filedef.h:99
struct variable_set_list * pat_variables
Definition: filedef.h:53
unsigned int intermediate
Definition: filedef.h:98
unsigned int ignore_vpath
Definition: filedef.h:103
int command_flags
Definition: filedef.h:68
struct commands * cmds
Definition: filedef.h:35
struct file * last
Definition: filedef.h:42
struct file * prev
Definition: filedef.h:39
struct dep * deps
Definition: filedef.h:34
FILE_TIMESTAMP mtime_before_update
Definition: filedef.h:64
unsigned int considered
Definition: filedef.h:66
struct dep * also_make
Definition: filedef.h:38
unsigned int pat_searched
Definition: filedef.h:104
unsigned int updating
Definition: filedef.h:92
unsigned int low_resolution_time
Definition: filedef.h:87
unsigned int dontcare
Definition: filedef.h:101
enum file::update_status ENUM_BITFIELD(2)
const char * stem
Definition: filedef.h:36
cmd_state
Definition: filedef.h:77
@ cs_not_started
Definition: filedef.h:78
@ cs_finished
Definition: filedef.h:81
@ cs_running
Definition: filedef.h:80
@ cs_deps_running
Definition: filedef.h:79
const char * name
Definition: filedef.h:31
unsigned int is_target
Definition: filedef.h:94
struct file * parent
Definition: filedef.h:57
unsigned int no_diag
Definition: filedef.h:106
unsigned int cmd_target
Definition: filedef.h:95
const char * hname
Definition: filedef.h:32
Definition: search.h:25
Definition: type1.c:137