home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 4 / FreshFish_May-June1994.bin / bsd / src / make / make-amiga / make.h < prev    next >
C/C++ Source or Header  |  1993-09-23  |  14KB  |  342 lines

  1. /*
  2.  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
  3.  * Copyright (c) 1988, 1989 by Adam de Boor
  4.  * Copyright (c) 1989 by Berkeley Softworks
  5.  * All rights reserved.
  6.  *
  7.  * This code is derived from software contributed to Berkeley by
  8.  * Adam de Boor.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  * 3. All advertising materials mentioning features or use of this software
  19.  *    must display the following acknowledgement:
  20.  *    This product includes software developed by the University of
  21.  *    California, Berkeley and its contributors.
  22.  * 4. Neither the name of the University nor the names of its contributors
  23.  *    may be used to endorse or promote products derived from this software
  24.  *    without specific prior written permission.
  25.  *
  26.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  27.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  30.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  32.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  33.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36.  * SUCH DAMAGE.
  37.  *
  38.  *    @(#)make.h    5.13 (Berkeley) 3/1/91
  39.  */
  40.  
  41. /*-
  42.  * make.h --
  43.  *    The global definitions for pmake
  44.  */
  45.  
  46. #ifndef _MAKE_H_
  47. #define _MAKE_H_
  48.  
  49. #include <sys/types.h>
  50. #include <string.h>
  51. #include <ctype.h>
  52. #include "sprite.h"
  53. #include "lst.h"
  54. #include "config.h"
  55.  
  56. /*-
  57.  * The structure for an individual graph node. Each node has several
  58.  * pieces of data associated with it.
  59.  *    1) the name of the target it describes
  60.  *    2) the location of the target file in the file system.
  61.  *    3) the type of operator used to define its sources (qv. parse.c)
  62.  *    4) whether it is involved in this invocation of make
  63.  *    5) whether the target has been remade
  64.  *    6) whether any of its children has been remade
  65.  *    7) the number of its children that are, as yet, unmade
  66.  *    8) its modification time
  67.  *    9) the modification time of its youngest child (qv. make.c)
  68.  *    10) a list of nodes for which this is a source
  69.  *    11) a list of nodes on which this depends
  70.  *    12) a list of nodes that depend on this, as gleaned from the
  71.  *        transformation rules.
  72.  *    13) a list of nodes of the same name created by the :: operator
  73.  *    14) a list of nodes that must be made (if they're made) before
  74.  *        this node can be, but that do no enter into the datedness of
  75.  *        this node.
  76.  *    15) a list of nodes that must be made (if they're made) after
  77.  *        this node is, but that do not depend on this node, in the
  78.  *        normal sense.
  79.  *    16) a Lst of ``local'' variables that are specific to this target
  80.  *       and this target only (qv. var.c [$@ $< $?, etc.])
  81.  *    17) a Lst of strings that are commands to be given to a shell
  82.  *       to create this target. 
  83.  */
  84. typedef struct GNode {
  85.     char            *name;         /* The target's name */
  86.     char            *path;         /* The full pathname of the file */
  87.     int             type;          /* Its type (see the OP flags, below) */
  88.  
  89.     Boolean         make;          /* TRUE if this target needs to be remade */
  90.     enum {
  91.     UNMADE, BEINGMADE, MADE, UPTODATE, ERROR, ABORTED,
  92.     CYCLE, ENDCYCLE,
  93.     }                made;        /* Set to reflect the state of processing
  94.                  * on this node:
  95.                  *  UNMADE - Not examined yet
  96.                  *  BEINGMADE - Target is already being made.
  97.                  *      Indicates a cycle in the graph. (compat
  98.                  *      mode only)
  99.                  *  MADE - Was out-of-date and has been made
  100.                  *  UPTODATE - Was already up-to-date
  101.                  *  ERROR - An error occured while it was being
  102.                  *      made (used only in compat mode)
  103.                  *  ABORTED - The target was aborted due to
  104.                  *      an error making an inferior (compat).
  105.                  *  CYCLE - Marked as potentially being part of
  106.                  *      a graph cycle. If we come back to a
  107.                  *      node marked this way, it is printed
  108.                  *      and 'made' is changed to ENDCYCLE.
  109.                  *  ENDCYCLE - the cycle has been completely
  110.                  *      printed. Go back and unmark all its
  111.                  *      members.
  112.                  */
  113.     Boolean         childMade;     /* TRUE if one of this target's children was
  114.                  * made */
  115.     int             unmade;        /* The number of unmade children */
  116.  
  117.     int             mtime;         /* Its modification time */
  118.     int                cmtime;        /* The modification time of its youngest
  119.                  * child */
  120.  
  121.     Lst             iParents;      /* Links to parents for which this is an
  122.                  * implied source, if any */
  123.     Lst                cohorts;      /* Other nodes for the :: operator */
  124.     Lst             parents;       /* Nodes that depend on this one */
  125.     Lst             children;      /* Nodes on which this one depends */
  126.     Lst                successors;    /* Nodes that must be made after this one */
  127.     Lst                preds;      /* Nodes that must be made before this one */
  128.  
  129.     Lst             context;       /* The local variables */
  130.     Lst             commands;      /* Creation commands */
  131.  
  132.     struct _Suff    *suffix;    /* Suffix for the node (determined by
  133.                  * Suff_FindDeps and opaque to everyone
  134.                  * but the Suff module) */
  135. } GNode;
  136.  
  137. /*
  138.  * Manifest constants 
  139.  */
  140. #define NILGNODE    ((GNode *) NIL)
  141.  
  142. /*
  143.  * The OP_ constants are used when parsing a dependency line as a way of
  144.  * communicating to other parts of the program the way in which a target
  145.  * should be made. These constants are bitwise-OR'ed together and
  146.  * placed in the 'type' field of each node. Any node that has
  147.  * a 'type' field which satisfies the OP_NOP function was never never on
  148.  * the lefthand side of an operator, though it may have been on the
  149.  * righthand side... 
  150.  */
  151. #define OP_DEPENDS    0x00000001  /* Execution of commands depends on
  152.                      * kids (:) */
  153. #define OP_FORCE    0x00000002  /* Always execute commands (!) */
  154. #define OP_DOUBLEDEP    0x00000004  /* Execution of commands depends on kids
  155.                      * per line (::) */
  156. #define OP_OPMASK    (OP_DEPENDS|OP_FORCE|OP_DOUBLEDEP)
  157.  
  158. #define OP_OPTIONAL    0x00000008  /* Don't care if the target doesn't
  159.                      * exist and can't be created */
  160. #define OP_USE        0x00000010  /* Use associated commands for parents */
  161. #define OP_EXEC          0x00000020  /* Target is never out of date, but always
  162.                      * execute commands anyway. Its time
  163.                      * doesn't matter, so it has none...sort
  164.                      * of */
  165. #define OP_IGNORE    0x00000040  /* Ignore errors when creating the node */
  166. #define OP_PRECIOUS    0x00000080  /* Don't remove the target when
  167.                      * interrupted */
  168. #define OP_SILENT    0x00000100  /* Don't echo commands when executed */
  169. #define OP_MAKE        0x00000200  /* Target is a recurrsive make so its
  170.                      * commands should always be executed when
  171.                      * it is out of date, regardless of the
  172.                      * state of the -n or -t flags */
  173. #define OP_JOIN     0x00000400  /* Target is out-of-date only if any of its
  174.                      * children was out-of-date */
  175. #define OP_INVISIBLE    0x00004000  /* The node is invisible to its parents.
  176.                      * I.e. it doesn't show up in the parents's
  177.                      * local variables. */
  178. #define OP_NOTMAIN    0x00008000  /* The node is exempt from normal 'main
  179.                      * target' processing in parse.c */
  180. /* Attributes applied by PMake */
  181. #define OP_TRANSFORM    0x80000000  /* The node is a transformation rule */
  182. #define OP_MEMBER     0x40000000  /* Target is a member of an archive */
  183. #define OP_LIB          0x20000000  /* Target is a library */
  184. #define OP_ARCHV      0x10000000  /* Target is an archive construct */
  185. #define OP_HAS_COMMANDS    0x08000000