Module Name:    othersrc
Committed By:   dholland
Date:           Mon Mar  4 05:50:49 UTC 2013

Modified Files:
        othersrc/usr.bin/dholland-make2: make.h
Added Files:
        othersrc/usr.bin/dholland-make2: graph.h

Log Message:
Move the graph data structure to its own header file. Expose it
everywhere for now; I'll worry about reducing depends later.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 othersrc/usr.bin/dholland-make2/graph.h
cvs rdiff -u -r1.5 -r1.6 othersrc/usr.bin/dholland-make2/make.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: othersrc/usr.bin/dholland-make2/make.h
diff -u othersrc/usr.bin/dholland-make2/make.h:1.5 othersrc/usr.bin/dholland-make2/make.h:1.6
--- othersrc/usr.bin/dholland-make2/make.h:1.5	Mon Feb 25 03:45:27 2013
+++ othersrc/usr.bin/dholland-make2/make.h	Mon Mar  4 05:50:49 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: make.h,v 1.5 2013/02/25 03:45:27 dholland Exp $	*/
+/*	$NetBSD: make.h,v 1.6 2013/03/04 05:50:49 dholland Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -96,170 +96,7 @@
 #include "hash.h"
 #include "config.h"
 #include "buf.h"
-
-/*
- * State of processing of a node.
- */
-enum enum_made {
-    UNMADE,	/* Not examined yet */
-    DEFERRED,	/* Examined once (building child) */
-    REQUESTED,	/* on toBeMade list */
-    BEINGMADE,	/* Already being made; indicates a cycle in the graph. */
-    MADE,	/* Was out-of-date and has been made. */
-    UPTODATE,	/* Was already up-to-date. */
-    ERROR,	/* An error occurred while being made (compat mode only) */
-    ABORTED	/* An error occurred making an inferior (compat) */
-};
-
-/*-
- * The structure for an individual graph node. Each node has several
- * pieces of data associated with it.
- *	1) the name of the target it describes
- *	2) the location of the target file in the file system.
- *	3) the type of operator used to define its sources (qv. parse.c)
- *	4) whether it is involved in this invocation of make
- *	5) whether the target has been remade
- *	6) whether any of its children has been remade
- *	7) the number of its children that are, as yet, unmade
- *	8) its modification time
- *	9) the modification time of its youngest child (qv. make.c)
- *	10) a list of nodes for which this is a source (parents)
- *	11) a list of nodes on which this depends (children)
- *	12) a list of nodes that depend on this, as gleaned from the
- *	    transformation rules (iParents)
- *	13) a list of ancestor nodes, which includes parents, iParents,
- *	    and recursive parents of parents
- *	14) a list of nodes of the same name created by the :: operator
- *	15) a list of nodes that must be made (if they're made) before
- *	    this node can be, but that do not enter into the datedness of
- *	    this node.
- *	16) a list of nodes that must be made (if they're made) before
- *	    this node or any child of this node can be, but that do not
- *	    enter into the datedness of this node.
- *	17) a list of nodes that must be made (if they're made) after
- *	    this node is, but that do not depend on this node, in the
- *	    normal sense.
- *	18) a Lst of ``local'' variables that are specific to this target
- *	   and this target only (qv. var.c [$@ $< $?, etc.])
- *	19) a Lst of strings that are commands to be given to a shell
- *	   to create this target.
- */
-typedef struct GNode {
-    char            *name;     	/* The target's name */
-    char            *uname;    	/* The unexpanded name of a .USE node */
-    char    	    *path;     	/* The full pathname of the file */
-    int             type;      	/* Its type (see the OP flags, below) */
-
-    int             flags;
-#define REMAKE		0x1    	/* this target needs to be (re)made */
-#define	CHILDMADE	0x2	/* children of this target were made */
-#define FORCE		0x4	/* children don't exist, and we pretend made */
-#define DONE_WAIT	0x8	/* Set by Make_ProcessWait() */
-#define DONE_ORDER	0x10	/* Build requested by .ORDER processing */
-#define FROM_DEPEND	0x20	/* Node created from .depend */
-#define DONE_ALLSRC	0x40	/* We do it once only */
-#define CYCLE		0x1000  /* Used by MakePrintStatus */
-#define DONECYCLE	0x2000  /* Used by MakePrintStatus */
-    enum enum_made made;	/* Set to reflect the state of processing
-				 * on this node */
-    int             unmade;    	/* The number of unmade children */
-
-    time_t          mtime;     	/* Its modification time */
-    struct GNode    *cmgn;    	/* The youngest child */
-
-    Lst     	    iParents;  	/* Links to parents for which this is an
-				 * implied source, if any */
-    Lst	    	    cohorts;  	/* Other nodes for the :: operator */
-    Lst             parents;   	/* Nodes that depend on this one */
-    Lst             children;  	/* Nodes on which this one depends */
-    Lst             order_pred;	/* .ORDER nodes we need made */
-    Lst             order_succ;	/* .ORDER nodes who need us */
-
-    char	    cohort_num[8]; /* #n for this cohort */
-    int		    unmade_cohorts;/* # of unmade instances on the
-				      cohorts list */
-    struct GNode    *centurion;	/* Pointer to the first instance of a ::
-				   node; only set when on a cohorts list */
-    unsigned int    checked;    /* Last time we tried to makle this node */
-
-    Hash_Table      context;	/* The local variables */
-    Lst             commands;  	/* Creation commands */
-
-    struct _Suff    *suffix;	/* Suffix for the node (determined by
-				 * Suff_FindDeps and opaque to everyone
-				 * but the Suff module) */
-    const char	    *fname;	/* filename where the GNode got defined */
-    int		     lineno;	/* line number where the GNode got defined */
-} GNode;
-
-/*
- * The OP_ constants are used when parsing a dependency line as a way of
- * communicating to other parts of the program the way in which a target
- * should be made. These constants are bitwise-OR'ed together and
- * placed in the 'type' field of each node. Any node that has
- * a 'type' field which satisfies the OP_NOP function was never never on
- * the lefthand side of an operator, though it may have been on the
- * righthand side...
- */
-#define OP_DEPENDS	0x00000001  /* Execution of commands depends on
-				     * kids (:) */
-#define OP_FORCE	0x00000002  /* Always execute commands (!) */
-#define OP_DOUBLEDEP	0x00000004  /* Execution of commands depends on kids
-				     * per line (::) */
-#define OP_OPMASK	(OP_DEPENDS|OP_FORCE|OP_DOUBLEDEP)
-
-#define OP_OPTIONAL	0x00000008  /* Don't care if the target doesn't
-				     * exist and can't be created */
-#define OP_USE		0x00000010  /* Use associated commands for parents */
-#define OP_EXEC	  	0x00000020  /* Target is never out of date, but always
-				     * execute commands anyway. Its time
-				     * doesn't matter, so it has none...sort
-				     * of */
-#define OP_IGNORE	0x00000040  /* Ignore errors when creating the node */
-#define OP_PRECIOUS	0x00000080  /* Don't remove the target when
-				     * interrupted */
-#define OP_SILENT	0x00000100  /* Don't echo commands when executed */
-#define OP_MAKE		0x00000200  /* Target is a recursive make so its
-				     * commands should always be executed when
-				     * it is out of date, regardless of the
-				     * state of the -n or -t flags */
-#define OP_JOIN 	0x00000400  /* Target is out-of-date only if any of its
-				     * children was out-of-date */
-#define	OP_MADE		0x00000800  /* Assume the children of the node have
-				     * been already made */
-#define OP_SPECIAL	0x00001000  /* Special .BEGIN, .END, .INTERRUPT */
-#define	OP_USEBEFORE	0x00002000  /* Like .USE, only prepend commands */
-#define OP_INVISIBLE	0x00004000  /* The node is invisible to its parents.
-				     * I.e. it doesn't show up in the parents's
-				     * local variables. */
-#define OP_NOTMAIN	0x00008000  /* The node is exempt from normal 'main
-				     * target' processing in parse.c */
-#define OP_PHONY	0x00010000  /* Not a file target; run always */
-#define OP_NOPATH	0x00020000  /* Don't search for file in the path */
-#define OP_WAIT 	0x00040000  /* .WAIT phony node */
-#define OP_NOMETA	0x00080000  /* .NOMETA do not create a .meta file */
-#define OP_META		0x00100000  /* .META we _do_ want a .meta file */
-#define OP_NOMETA_CMP	0x00200000  /* Do not compare commands in .meta file */
-/* Attributes applied by PMake */
-#define OP_TRANSFORM	0x80000000  /* The node is a transformation rule */
-#define OP_MEMBER 	0x40000000  /* Target is a member of an archive */
-#define OP_LIB	  	0x20000000  /* Target is a library */
-#define OP_ARCHV  	0x10000000  /* Target is an archive construct */
-#define OP_HAS_COMMANDS	0x08000000  /* Target has all the commands it should.
-				     * Used when parsing to catch multiple
-				     * commands for a target */
-#define OP_SAVE_CMDS	0x04000000  /* Saving commands on .END (Compat) */
-#define OP_DEPS_FOUND	0x02000000  /* Already processed by Suff_FindDeps */
-#define	OP_MARK		0x01000000  /* Node found while expanding .ALLSRC */
-
-#define NoExecute(gn) ((gn->type & OP_MAKE) ? noRecursiveExecute : noExecute)
-/*
- * OP_NOP will return TRUE if the node with the given type was not the
- * object of a dependency operator
- */
-#define OP_NOP(t)	(((t) & OP_OPMASK) == 0x00000000)
-
-#define OP_NOTARGET (OP_NOTMAIN|OP_USE|OP_EXEC|OP_TRANSFORM)
+#include "graph.h"
 
 /*
  * The TARG_ constants are used when calling the Targ_FindNode and

Added files:

Index: othersrc/usr.bin/dholland-make2/graph.h
diff -u /dev/null othersrc/usr.bin/dholland-make2/graph.h:1.1
--- /dev/null	Mon Mar  4 05:50:49 2013
+++ othersrc/usr.bin/dholland-make2/graph.h	Mon Mar  4 05:50:49 2013
@@ -0,0 +1,242 @@
+/*	$NetBSD: graph.h,v 1.1 2013/03/04 05:50:49 dholland Exp $	*/
+
+/*
+ * Copyright (c) 1988, 1989, 1990, 1993
+ *	The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Adam de Boor.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	from: @(#)make.h	8.3 (Berkeley) 6/13/95
+ */
+
+/*
+ * Copyright (c) 1989 by Berkeley Softworks
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Adam de Boor.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *	This product includes software developed by the University of
+ *	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	from: @(#)make.h	8.3 (Berkeley) 6/13/95
+ */
+
+#ifndef GRAPH_H
+#define GRAPH_H
+
+/*
+ * State of processing of a node.
+ */
+enum enum_made {
+    UNMADE,	/* Not examined yet */
+    DEFERRED,	/* Examined once (building child) */
+    REQUESTED,	/* on toBeMade list */
+    BEINGMADE,	/* Already being made; indicates a cycle in the graph. */
+    MADE,	/* Was out-of-date and has been made. */
+    UPTODATE,	/* Was already up-to-date. */
+    ERROR,	/* An error occurred while being made (compat mode only) */
+    ABORTED	/* An error occurred making an inferior (compat) */
+};
+
+/*-
+ * The structure for an individual graph node. Each node has several
+ * pieces of data associated with it.
+ *	1) the name of the target it describes
+ *	2) the location of the target file in the file system.
+ *	3) the type of operator used to define its sources (qv. parse.c)
+ *	4) whether it is involved in this invocation of make
+ *	5) whether the target has been remade
+ *	6) whether any of its children has been remade
+ *	7) the number of its children that are, as yet, unmade
+ *	8) its modification time
+ *	9) the modification time of its youngest child (qv. make.c)
+ *	10) a list of nodes for which this is a source (parents)
+ *	11) a list of nodes on which this depends (children)
+ *	12) a list of nodes that depend on this, as gleaned from the
+ *	    transformation rules (iParents)
+ *	13) a list of ancestor nodes, which includes parents, iParents,
+ *	    and recursive parents of parents
+ *	14) a list of nodes of the same name created by the :: operator
+ *	15) a list of nodes that must be made (if they're made) before
+ *	    this node can be, but that do not enter into the datedness of
+ *	    this node.
+ *	16) a list of nodes that must be made (if they're made) before
+ *	    this node or any child of this node can be, but that do not
+ *	    enter into the datedness of this node.
+ *	17) a list of nodes that must be made (if they're made) after
+ *	    this node is, but that do not depend on this node, in the
+ *	    normal sense.
+ *	18) a Lst of ``local'' variables that are specific to this target
+ *	   and this target only (qv. var.c [$@ $< $?, etc.])
+ *	19) a Lst of strings that are commands to be given to a shell
+ *	   to create this target.
+ */
+typedef struct GNode {
+    char            *name;     	/* The target's name */
+    char            *uname;    	/* The unexpanded name of a .USE node */
+    char    	    *path;     	/* The full pathname of the file */
+    int             type;      	/* Its type (see the OP flags, below) */
+
+    int             flags;
+#define REMAKE		0x1    	/* this target needs to be (re)made */
+#define	CHILDMADE	0x2	/* children of this target were made */
+#define FORCE		0x4	/* children don't exist, and we pretend made */
+#define DONE_WAIT	0x8	/* Set by Make_ProcessWait() */
+#define DONE_ORDER	0x10	/* Build requested by .ORDER processing */
+#define FROM_DEPEND	0x20	/* Node created from .depend */
+#define DONE_ALLSRC	0x40	/* We do it once only */
+#define CYCLE		0x1000  /* Used by MakePrintStatus */
+#define DONECYCLE	0x2000  /* Used by MakePrintStatus */
+    enum enum_made made;	/* Set to reflect the state of processing
+				 * on this node */
+    int             unmade;    	/* The number of unmade children */
+
+    time_t          mtime;     	/* Its modification time */
+    struct GNode    *cmgn;    	/* The youngest child */
+
+    Lst     	    iParents;  	/* Links to parents for which this is an
+				 * implied source, if any */
+    Lst	    	    cohorts;  	/* Other nodes for the :: operator */
+    Lst             parents;   	/* Nodes that depend on this one */
+    Lst             children;  	/* Nodes on which this one depends */
+    Lst             order_pred;	/* .ORDER nodes we need made */
+    Lst             order_succ;	/* .ORDER nodes who need us */
+
+    char	    cohort_num[8]; /* #n for this cohort */
+    int		    unmade_cohorts;/* # of unmade instances on the
+				      cohorts list */
+    struct GNode    *centurion;	/* Pointer to the first instance of a ::
+				   node; only set when on a cohorts list */
+    unsigned int    checked;    /* Last time we tried to makle this node */
+
+    Hash_Table      context;	/* The local variables */
+    Lst             commands;  	/* Creation commands */
+
+    struct _Suff    *suffix;	/* Suffix for the node (determined by
+				 * Suff_FindDeps and opaque to everyone
+				 * but the Suff module) */
+    const char	    *fname;	/* filename where the GNode got defined */
+    int		     lineno;	/* line number where the GNode got defined */
+} GNode;
+
+/*
+ * The OP_ constants are used when parsing a dependency line as a way of
+ * communicating to other parts of the program the way in which a target
+ * should be made. These constants are bitwise-OR'ed together and
+ * placed in the 'type' field of each node. Any node that has
+ * a 'type' field which satisfies the OP_NOP function was never never on
+ * the lefthand side of an operator, though it may have been on the
+ * righthand side...
+ */
+#define OP_DEPENDS	0x00000001  /* Execution of commands depends on
+				     * kids (:) */
+#define OP_FORCE	0x00000002  /* Always execute commands (!) */
+#define OP_DOUBLEDEP	0x00000004  /* Execution of commands depends on kids
+				     * per line (::) */
+#define OP_OPMASK	(OP_DEPENDS|OP_FORCE|OP_DOUBLEDEP)
+
+#define OP_OPTIONAL	0x00000008  /* Don't care if the target doesn't
+				     * exist and can't be created */
+#define OP_USE		0x00000010  /* Use associated commands for parents */
+#define OP_EXEC	  	0x00000020  /* Target is never out of date, but always
+				     * execute commands anyway. Its time
+				     * doesn't matter, so it has none...sort
+				     * of */
+#define OP_IGNORE	0x00000040  /* Ignore errors when creating the node */
+#define OP_PRECIOUS	0x00000080  /* Don't remove the target when
+				     * interrupted */
+#define OP_SILENT	0x00000100  /* Don't echo commands when executed */
+#define OP_MAKE		0x00000200  /* Target is a recursive make so its
+				     * commands should always be executed when
+				     * it is out of date, regardless of the
+				     * state of the -n or -t flags */
+#define OP_JOIN 	0x00000400  /* Target is out-of-date only if any of its
+				     * children was out-of-date */
+#define	OP_MADE		0x00000800  /* Assume the children of the node have
+				     * been already made */
+#define OP_SPECIAL	0x00001000  /* Special .BEGIN, .END, .INTERRUPT */
+#define	OP_USEBEFORE	0x00002000  /* Like .USE, only prepend commands */
+#define OP_INVISIBLE	0x00004000  /* The node is invisible to its parents.
+				     * I.e. it doesn't show up in the parents's
+				     * local variables. */
+#define OP_NOTMAIN	0x00008000  /* The node is exempt from normal 'main
+				     * target' processing in parse.c */
+#define OP_PHONY	0x00010000  /* Not a file target; run always */
+#define OP_NOPATH	0x00020000  /* Don't search for file in the path */
+#define OP_WAIT 	0x00040000  /* .WAIT phony node */
+#define OP_NOMETA	0x00080000  /* .NOMETA do not create a .meta file */
+#define OP_META		0x00100000  /* .META we _do_ want a .meta file */
+#define OP_NOMETA_CMP	0x00200000  /* Do not compare commands in .meta file */
+/* Attributes applied by PMake */
+#define OP_TRANSFORM	0x80000000  /* The node is a transformation rule */
+#define OP_MEMBER 	0x40000000  /* Target is a member of an archive */
+#define OP_LIB	  	0x20000000  /* Target is a library */
+#define OP_ARCHV  	0x10000000  /* Target is an archive construct */
+#define OP_HAS_COMMANDS	0x08000000  /* Target has all the commands it should.
+				     * Used when parsing to catch multiple
+				     * commands for a target */
+#define OP_SAVE_CMDS	0x04000000  /* Saving commands on .END (Compat) */
+#define OP_DEPS_FOUND	0x02000000  /* Already processed by Suff_FindDeps */
+#define	OP_MARK		0x01000000  /* Node found while expanding .ALLSRC */
+
+#define NoExecute(gn) ((gn->type & OP_MAKE) ? noRecursiveExecute : noExecute)
+/*
+ * OP_NOP will return TRUE if the node with the given type was not the
+ * object of a dependency operator
+ */
+#define OP_NOP(t)	(((t) & OP_OPMASK) == 0x00000000)
+
+#define OP_NOTARGET (OP_NOTMAIN|OP_USE|OP_EXEC|OP_TRANSFORM)
+
+#endif /* GRAPH_H */

Reply via email to