home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / gnu / make3_60.lzh / MAKE3_60 / FILE.H < prev    next >
C/C++ Source or Header  |  1993-07-30  |  4KB  |  96 lines

  1. /* Copyright (C) 1988, 1989, 1990 Free Software Foundation, Inc.
  2. This file is part of GNU Make.
  3.  
  4. GNU Make is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 1, or (at your option)
  7. any later version.
  8.  
  9. GNU Make is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. GNU General Public License for more details.
  13.  
  14. You should have received a copy of the GNU General Public License
  15. along with GNU Make; see the file COPYING.  If not, write to
  16. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  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. struct file
  23.   {
  24.     struct file *next;
  25.     char *name;
  26.     struct dep *deps;
  27.     struct commands *cmds;    /* Commands to execute for this target */
  28.     char *stem;            /* Implicit stem, if an implicit
  29.                        rule has been used */
  30.     char **also_make;        /* Targets that are also made by this file's
  31.                    commands, an implicit rule was used.  */
  32.     time_t last_mtime;        /* File's modtime, if already known.  */
  33.     struct file *prev;        /* Previous entry for same file name;
  34.                    used when there are multiple double-colon
  35.                    entries for the same file.  */
  36.  
  37.     /* File that this file was renamed to.  After any time that a
  38.        file could be renamed, call `check_renamed' (below).  */
  39.     struct file *renamed;
  40.  
  41.     /* List of variable sets used for this file.  */
  42.     struct variable_set_list *variables;
  43.  
  44.     /* Immediate dependent that caused this target to be remade,
  45.        or nil if there isn't one.  */
  46.     struct file *parent;
  47.  
  48.     short int update_status;    /* Status of the last attempt to update,
  49.                    or -1 if none has been made.  */
  50.  
  51.     enum            /* State of the commands.  */
  52.       {        /* Note: It is important that cs_not_started be zero.  */
  53.     cs_not_started,        /* Not yet started.  */
  54.     cs_deps_running,    /* Dep commands running.  */
  55.     cs_running,        /* Commands running.  */
  56.     cs_finished        /* Commands finished.  */
  57.       } command_state ENUM_BITFIELD (2);
  58.  
  59.     unsigned int double_colon:1;/* Nonzero for double-colon entry */
  60.     unsigned int precious:1;    /* Non-0 means don't delete file on quit */
  61.     unsigned int tried_implicit:1;/* Nonzero if have searched
  62.                      for implicit rule for making
  63.                      this file; don't search again.  */
  64.     unsigned int updating:1;    /* Nonzero while updating deps of this file */
  65.     unsigned int updated:1;    /* Nonzero if this file has been remade.  */
  66.     unsigned int is_target:1;    /* Nonzero if file is described as target.  */
  67.     unsigned int cmd_target:1;    /* Nonzero if file was given on cmd line.  */
  68.     unsigned int phony:1;    /* Nonzero if this is a phony file
  69.                    ie, a dependent of .PHONY.  */
  70.     unsigned int intermediate:1;/* Nonzero if this is an intermediate file.  */
  71.     unsigned int dontcare:1;    /* Nonzero if no complaint is to be made if
  72.                    this target cannot be remade.  */
  73.   };
  74.  
  75. /* Number of intermediate files entered.  */
  76.  
  77. extern unsigned int num_intermediates;
  78.  
  79. extern struct file *default_goal_file, *suffix_file, *default_file;
  80.  
  81.  
  82. extern struct file *lookup_file (), *enter_file ();
  83. extern void remove_intermediates (), snap_deps ();
  84. extern void rename_file ();
  85.  
  86.  
  87. extern time_t f_mtime ();
  88. #define file_mtime_1(f, v) \
  89.   ((f)->last_mtime != (time_t) 0 ? (f)->last_mtime : f_mtime ((f), v))
  90. #define file_mtime(f) file_mtime_1 ((f), 1)
  91. #define file_mtime_no_search(f) file_mtime_1 ((f), 0)
  92.  
  93.  
  94. #define check_renamed(file) \
  95.   while ((file)->renamed != 0) (file) = (file)->renamed /* No ; here.  */
  96.