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