Imported Upstream version 4.4
[platform/upstream/make.git] / src / dep.h
index 76718f0..89c8639 100644 (file)
--- a/src/dep.h
+++ b/src/dep.h
@@ -1,5 +1,5 @@
 /* Definitions of dependency data structures for GNU Make.
-Copyright (C) 1988-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2022 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -12,7 +12,7 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License along with
-this program.  If not, see <http://www.gnu.org/licenses/>.  */
+this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 
 /* Structure used in chains of names, for parsing and globbing.  */
@@ -30,26 +30,32 @@ struct nameseq
    These flags are saved in the 'flags' field of each
    'struct goaldep' in the chain returned by 'read_all_makefiles'.  */
 
+#define RM_NOFLAG               0
 #define RM_NO_DEFAULT_GOAL      (1 << 0) /* Do not set default goal.  */
 #define RM_INCLUDED             (1 << 1) /* Search makefile search path.  */
 #define RM_DONTCARE             (1 << 2) /* No error if it doesn't exist.  */
 #define RM_NO_TILDE             (1 << 3) /* Don't expand ~ in file name.  */
-#define RM_NOFLAG               0
 
 /* Structure representing one dependency of a file.
    Each struct file's 'deps' points to a chain of these, through 'next'.
-   'stem' is the stem for this dep line of static pattern rule or NULL.  */
+   'stem' is the stem for this dep line of static pattern rule or NULL.
+   explicit is set when implicit rule search is performed and the prerequisite
+   does not contain %. When explicit is set the file is not intermediate.  */
+
 
 #define DEP(_t)                                 \
     NAMESEQ (_t);                               \
     struct file *file;                          \
+    _t *shuf;                                   \
     const char *stem;                           \
     unsigned int flags : 8;                     \
     unsigned int changed : 1;                   \
     unsigned int ignore_mtime : 1;              \
     unsigned int staticpattern : 1;             \
     unsigned int need_2nd_expansion : 1;        \
-    unsigned int ignore_automatic_vars : 1
+    unsigned int ignore_automatic_vars : 1;     \
+    unsigned int is_explicit : 1;               \
+    unsigned int wait_here : 1
 
 struct dep
   {
@@ -76,6 +82,7 @@ struct goaldep
 #define PARSEFS_EXISTS  0x0008
 #define PARSEFS_NOCACHE 0x0010
 #define PARSEFS_ONEWORD 0x0020
+#define PARSEFS_WAIT    0x0040
 
 #define PARSE_FILE_SEQ(_s,_t,_c,_p,_f) \
             (_t *)parse_file_seq ((_s),sizeof (_t),(_c),(_p),(_f))
@@ -95,24 +102,23 @@ char *tilde_expand (const char *name);
 struct nameseq *ar_glob (const char *arname, const char *member_pattern, size_t size);
 #endif
 
-#define dep_name(d)        ((d)->name ? (d)->name : (d)->file->name)
+#define dep_name(d)       ((d)->name ? (d)->name : (d)->file->name)
 
-#define alloc_seq_elt(_t)   xcalloc (sizeof (_t))
+#define alloc_seq_elt(_t) xcalloc (sizeof (_t))
 void free_ns_chain (struct nameseq *n);
 
 #if defined(MAKE_MAINTAINER_MODE) && defined(__GNUC__) && !defined(__STRICT_ANSI__)
 /* Use inline to get real type-checking.  */
 #define SI static inline
-SI struct nameseq *alloc_ns()      { return alloc_seq_elt (struct nameseq); }
-SI struct dep *alloc_dep()         { return alloc_seq_elt (struct dep); }
-SI struct goaldep *alloc_goaldep() { return alloc_seq_elt (struct goaldep); }
-
-SI void free_ns(struct nameseq *n)      { free (n); }
-SI void free_dep(struct dep *d)         { free_ns ((struct nameseq *)d); }
-SI void free_goaldep(struct goaldep *g) { free_dep ((struct dep *)g); }
-
-SI void free_dep_chain(struct dep *d)      { free_ns_chain((struct nameseq *)d); }
-SI void free_goal_chain(struct goaldep *g) { free_dep_chain((struct dep *)g); }
+SI struct nameseq *alloc_ns (void)    { return alloc_seq_elt (struct nameseq); }
+SI struct dep *alloc_dep (void)       { return alloc_seq_elt (struct dep); }
+SI struct goaldep *alloc_goaldep (void) { return alloc_seq_elt (struct goaldep); }
+
+SI void free_ns (struct nameseq *n)      { free (n); }
+SI void free_dep (struct dep *d)         { free_ns ((struct nameseq *)d); }
+SI void free_goaldep (struct goaldep *g) { free_dep ((struct dep *)g); }
+SI void free_dep_chain (struct dep *d)   { free_ns_chain((struct nameseq *)d); }
+SI void free_goal_chain (struct goaldep *g) { free_dep_chain((struct dep *)g); }
 #else
 # define alloc_ns()          alloc_seq_elt (struct nameseq)
 # define alloc_dep()         alloc_seq_elt (struct dep)