1/* Definition of target file data structures for GNU Make.
2Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1997,
32002 Free Software Foundation, Inc.
4This file is part of GNU Make.
5
6GNU Make is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2, or (at your option)
9any later version.
10
11GNU Make is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GNU Make; see the file COPYING.  If not, write to
18the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19Boston, MA 02111-1307, USA.  */
20
21
22/* Structure that represents the info on one file
23   that the makefile says how to make.
24   All of these are chained together through `next'.  */
25
26#include "hash.h"
27
28struct file
29  {
30    char *name;
31    char *hname;                /* Hashed filename */
32    char *vpath;                /* VPATH/vpath pathname */
33    struct dep *deps;		/* all dependencies, including duplicates */
34    struct commands *cmds;	/* Commands to execute for this target.  */
35    int command_flags;		/* Flags OR'd in for cmds; see commands.h.  */
36    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    FILE_TIMESTAMP last_mtime;	/* File's modtime, if already known.  */
40    FILE_TIMESTAMP mtime_before_update;	/* File's modtime before any updating
41                                           has been performed.  */
42    struct file *prev;		/* Previous entry for same file name;
43				   used when there are multiple double-colon
44				   entries for the same file.  */
45
46    /* File that this file was renamed to.  After any time that a
47       file could be renamed, call `check_renamed' (below).  */
48    struct file *renamed;
49
50    /* List of variable sets used for this file.  */
51    struct variable_set_list *variables;
52
53    /* Pattern-specific variable reference for this target, or null if there
54       isn't one.  Also see the pat_searched flag, below.  */
55    struct variable_set_list *pat_variables;
56
57    /* Immediate dependent that caused this target to be remade,
58       or nil if there isn't one.  */
59    struct file *parent;
60
61    /* For a double-colon entry, this is the first double-colon entry for
62       the same file.  Otherwise this is null.  */
63    struct file *double_colon;
64
65    short int update_status;	/* Status of the last attempt to update,
66				   or -1 if none has been made.  */
67
68    enum			/* State of the commands.  */
69      {		/* Note: It is important that cs_not_started be zero.  */
70	cs_not_started,		/* Not yet started.  */
71	cs_deps_running,	/* Dep commands running.  */
72	cs_running,		/* Commands running.  */
73	cs_finished		/* Commands finished.  */
74      } command_state ENUM_BITFIELD (2);
75
76    unsigned int precious:1;	/* Non-0 means don't delete file on quit */
77    unsigned int low_resolution_time:1;	/* Nonzero if this file's time stamp
78					   has only one-second resolution.  */
79    unsigned int tried_implicit:1; /* Nonzero if have searched
80				      for implicit rule for making
81				      this file; don't search again.  */
82    unsigned int updating:1;	/* Nonzero while updating deps of this file */
83    unsigned int updated:1;	/* Nonzero if this file has been remade.  */
84    unsigned int is_target:1;	/* Nonzero if file is described as target.  */
85    unsigned int cmd_target:1;	/* Nonzero if file was given on cmd line.  */
86    unsigned int phony:1;	/* Nonzero if this is a phony file
87				   i.e., a dependency of .PHONY.  */
88    unsigned int intermediate:1;/* Nonzero if this is an intermediate file.  */
89    /* Nonzero, for an intermediate file,
90       means remove_intermediates should not delete it.  */
91    unsigned int secondary:1;
92    unsigned int dontcare:1;	/* Nonzero if no complaint is to be made if
93				   this target cannot be remade.  */
94    unsigned int ignore_vpath:1;/* Nonzero if we threw out VPATH name.  */
95    unsigned int pat_searched:1;/* Nonzero if we already searched for
96                                   pattern-specific variables.  */
97    unsigned int considered:1;  /* equal to `considered' if file has been
98                                   considered on current scan of goal chain */
99  };
100
101
102extern struct file *default_goal_file, *suffix_file, *default_file;
103
104
105extern struct file *lookup_file PARAMS ((char *name));
106extern struct file *enter_file PARAMS ((char *name));
107extern void remove_intermediates PARAMS ((int sig));
108extern void snap_deps PARAMS ((void));
109extern void rename_file PARAMS ((struct file *file, char *name));
110extern void rehash_file PARAMS ((struct file *file, char *name));
111extern void set_command_state PARAMS ((struct file *file, int state));
112extern void notice_finished_file PARAMS ((struct file *file));
113extern void init_hash_files PARAMS ((void));
114extern char *build_target_list PARAMS ((char *old_list));
115
116#if FILE_TIMESTAMP_HI_RES
117# define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \
118    file_timestamp_cons (fname, (st).st_mtime, (st).st_mtim.ST_MTIM_NSEC)
119#else
120# define FILE_TIMESTAMP_STAT_MODTIME(fname, st) \
121    file_timestamp_cons (fname, (st).st_mtime, 0)
122#endif
123
124/* If FILE_TIMESTAMP is 64 bits (or more), use nanosecond resolution.
125   (Multiply by 2**30 instead of by 10**9 to save time at the cost of
126   slightly decreasing the number of available timestamps.)  With
127   64-bit FILE_TIMESTAMP, this stops working on 2514-05-30 01:53:04
128   UTC, but by then uintmax_t should be larger than 64 bits.  */
129#define FILE_TIMESTAMPS_PER_S (FILE_TIMESTAMP_HI_RES ? 1000000000 : 1)
130#define FILE_TIMESTAMP_LO_BITS (FILE_TIMESTAMP_HI_RES ? 30 : 0)
131
132#define FILE_TIMESTAMP_S(ts) (((ts) - ORDINARY_MTIME_MIN) \
133			      >> FILE_TIMESTAMP_LO_BITS)
134#define FILE_TIMESTAMP_NS(ts) ((int) (((ts) - ORDINARY_MTIME_MIN) \
135				      & ((1 << FILE_TIMESTAMP_LO_BITS) - 1)))
136
137/* Upper bound on length of string "YYYY-MM-DD HH:MM:SS.NNNNNNNNN"
138   representing a file timestamp.  The upper bound is not necessarily 19,
139   since the year might be less than -999 or greater than 9999.
140
141   Subtract one for the sign bit if in case file timestamps can be negative;
142   subtract FLOOR_LOG2_SECONDS_PER_YEAR to yield an upper bound on how many
143   file timestamp bits might affect the year;
144   302 / 1000 is log10 (2) rounded up;
145   add one for integer division truncation;
146   add one more for a minus sign if file timestamps can be negative;
147   add 4 to allow for any 4-digit epoch year (e.g. 1970);
148   add 25 to allow for "-MM-DD HH:MM:SS.NNNNNNNNN".  */
149#define FLOOR_LOG2_SECONDS_PER_YEAR 24
150#define FILE_TIMESTAMP_PRINT_LEN_BOUND \
151  (((sizeof (FILE_TIMESTAMP) * CHAR_BIT - 1 - FLOOR_LOG2_SECONDS_PER_YEAR) \
152    * 302 / 1000) \
153   + 1 + 1 + 4 + 25)
154
155extern FILE_TIMESTAMP file_timestamp_cons PARAMS ((char const *,
156						   time_t, int));
157extern FILE_TIMESTAMP file_timestamp_now PARAMS ((int *));
158extern void file_timestamp_sprintf PARAMS ((char *p, FILE_TIMESTAMP ts));
159
160/* Return the mtime of file F (a struct file *), caching it.
161   The value is NONEXISTENT_MTIME if the file does not exist.  */
162#define file_mtime(f) file_mtime_1 ((f), 1)
163/* Return the mtime of file F (a struct file *), caching it.
164   Don't search using vpath for the file--if it doesn't actually exist,
165   we don't find it.
166   The value is NONEXISTENT_MTIME if the file does not exist.  */
167#define file_mtime_no_search(f) file_mtime_1 ((f), 0)
168extern FILE_TIMESTAMP f_mtime PARAMS ((struct file *file, int search));
169#define file_mtime_1(f, v) \
170  ((f)->last_mtime == UNKNOWN_MTIME ? f_mtime ((f), v) : (f)->last_mtime)
171
172/* Special timestamp values.  */
173
174/* The file's timestamp is not yet known.  */
175#define UNKNOWN_MTIME 0
176
177/* The file does not exist.  */
178#define NONEXISTENT_MTIME 1
179
180/* The file does not exist, and we assume that it is older than any
181   actual file.  */
182#define OLD_MTIME 2
183
184/* The smallest and largest ordinary timestamps.  */
185#define ORDINARY_MTIME_MIN (OLD_MTIME + 1)
186#define ORDINARY_MTIME_MAX ((FILE_TIMESTAMP_S (NEW_MTIME) \
187			     << FILE_TIMESTAMP_LO_BITS) \
188			    + ORDINARY_MTIME_MIN + FILE_TIMESTAMPS_PER_S - 1)
189
190/* Modtime value to use for `infinitely new'.  We used to get the current time
191   from the system and use that whenever we wanted `new'.  But that causes
192   trouble when the machine running make and the machine holding a file have
193   different ideas about what time it is; and can also lose for `force'
194   targets, which need to be considered newer than anything that depends on
195   them, even if said dependents' modtimes are in the future.  */
196#define NEW_MTIME INTEGER_TYPE_MAXIMUM (FILE_TIMESTAMP)
197
198#define check_renamed(file) \
199  while ((file)->renamed != 0) (file) = (file)->renamed /* No ; here.  */
200