BSD 4_4_Lite1 release
[unix-history] / usr / src / usr.bin / make / targ.c
index 0e39008..7e1475a 100644 (file)
@@ -1,21 +1,51 @@
+/*
+ * Copyright (c) 1988, 1989, 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ * 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.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)targ.c     8.2 (Berkeley) 3/19/94";
+#endif /* not lint */
+
 /*-
  * targ.c --
  *     Functions for maintaining the Lst allTargets. Target nodes are
  * kept in two structures: a Lst, maintained by the list library, and a
  * hash table, maintained by the hash library.
  *
 /*-
  * targ.c --
  *     Functions for maintaining the Lst allTargets. Target nodes are
  * kept in two structures: a Lst, maintained by the list library, and a
  * hash table, maintained by the hash library.
  *
- * Copyright (c) 1988, 1989 by the Regents of the University of California
- * Copyright (c) 1988, 1989 by Adam de Boor
- * Copyright (c) 1989 by Berkeley Softworks
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any non-commercial purpose
- * and without fee is hereby granted, provided that the above copyright
- * notice appears in all copies.  The University of California,
- * Berkeley Softworks and Adam de Boor make no representations about
- * the suitability of this software for any purpose.  It is provided
- * "as is" without express or implied warranty.
- *
  * Interface:
  *     Targ_Init               Initialization procedure.
  *
  * Interface:
  *     Targ_Init               Initialization procedure.
  *
  *                             and statistics for the directory cache. Should
  *                             print something for suffixes, too, but...
  */
  *                             and statistics for the directory cache. Should
  *                             print something for suffixes, too, but...
  */
-#ifndef lint
-static char     *rcsid = "$Id: targ.c,v 1.38 89/11/14 13:44:15 adam Exp $ SPRITE (Berkeley)";
-#endif lint
 
 #include         <stdio.h>
 #include         <time.h>
 #include         "make.h"
 #include         "hash.h"
 
 #include         <stdio.h>
 #include         <time.h>
 #include         "make.h"
 #include         "hash.h"
+#include         "dir.h"
 
 static Lst        allTargets;  /* the list of all targets found so far */
 static Hash_Table targets;     /* a hash table of same */
 
 static Lst        allTargets;  /* the list of all targets found so far */
 static Hash_Table targets;     /* a hash table of same */
@@ -78,9 +106,9 @@ void
 Targ_Init ()
 {
     allTargets = Lst_Init (FALSE);
 Targ_Init ()
 {
     allTargets = Lst_Init (FALSE);
-    Hash_InitTable (&targets, HTSIZE, HASH_STRING_KEYS);
+    Hash_InitTable (&targets, HTSIZE);
 }
 }
-\f
+
 /*-
  *-----------------------------------------------------------------------
  * Targ_NewGN  --
 /*-
  *-----------------------------------------------------------------------
  * Targ_NewGN  --
@@ -100,8 +128,8 @@ Targ_NewGN (name)
 {
     register GNode *gn;
 
 {
     register GNode *gn;
 
-    gn = (GNode *) malloc (sizeof (GNode));
-    gn->name = Str_New (name);
+    gn = (GNode *) emalloc (sizeof (GNode));
+    gn->name = strdup (name);
     gn->path = (char *) 0;
     if (name[0] == '-' && name[1] == 'l') {
        gn->type = OP_LIB;
     gn->path = (char *) 0;
     if (name[0] == '-' && name[1] == 'l') {
        gn->type = OP_LIB;
@@ -121,10 +149,11 @@ Targ_NewGN (name)
     gn->preds =        Lst_Init(FALSE);
     gn->context =      Lst_Init (FALSE);
     gn->commands =     Lst_Init (FALSE);
     gn->preds =        Lst_Init(FALSE);
     gn->context =      Lst_Init (FALSE);
     gn->commands =     Lst_Init (FALSE);
+    gn->suffix =       NULL;
 
     return (gn);
 }
 
     return (gn);
 }
-\f
+
 /*-
  *-----------------------------------------------------------------------
  * Targ_FindNode  --
 /*-
  *-----------------------------------------------------------------------
  * Targ_FindNode  --
@@ -168,7 +197,7 @@ Targ_FindNode (name, flags)
        return ((GNode *) Hash_GetValue (he));
     }
 }
        return ((GNode *) Hash_GetValue (he));
     }
 }
-\f
+
 /*-
  *-----------------------------------------------------------------------
  * Targ_FindList --
 /*-
  *-----------------------------------------------------------------------
  * Targ_FindList --
@@ -220,7 +249,7 @@ Targ_FindList (names, flags)
     Lst_Close (names);
     return (nodes);
 }
     Lst_Close (names);
     return (nodes);
 }
-\f
+
 /*-
  *-----------------------------------------------------------------------
  * Targ_Ignore  --
 /*-
  *-----------------------------------------------------------------------
  * Targ_Ignore  --
@@ -243,7 +272,7 @@ Targ_Ignore (gn)
        return (FALSE);
     }
 }
        return (FALSE);
     }
 }
-\f
+
 /*-
  *-----------------------------------------------------------------------
  * Targ_Silent  --
 /*-
  *-----------------------------------------------------------------------
  * Targ_Silent  --
@@ -266,7 +295,7 @@ Targ_Silent (gn)
        return (FALSE);
     }
 }
        return (FALSE);
     }
 }
-\f
+
 /*-
  *-----------------------------------------------------------------------
  * Targ_Precious --
 /*-
  *-----------------------------------------------------------------------
  * Targ_Precious --
@@ -289,7 +318,7 @@ Targ_Precious (gn)
        return (FALSE);
     }
 }
        return (FALSE);
     }
 }
-\f
+
 /******************* DEBUG INFO PRINTING ****************/
 
 static GNode     *mainTarg;    /* the main target, as set by Targ_SetMain */
 /******************* DEBUG INFO PRINTING ****************/
 
 static GNode     *mainTarg;    /* the main target, as set by Targ_SetMain */
@@ -314,6 +343,7 @@ Targ_SetMain (gn)
 }
 
 static int
 }
 
 static int
+/*ARGSUSED*/
 TargPrintName (gn, ppath)
     GNode          *gn;
     int                    ppath;
 TargPrintName (gn, ppath)
     GNode          *gn;
     int                    ppath;
@@ -328,7 +358,7 @@ TargPrintName (gn, ppath)
            printf ("(MAIN NAME)  ");
        }
     }
            printf ("(MAIN NAME)  ");
        }
     }
-#endif notdef
+#endif /* notdef */
     return (0);
 }
 
     return (0);
 }
 
@@ -357,7 +387,7 @@ Targ_PrintCmd (cmd)
  */
 char *
 Targ_FmtTime (time)
  */
 char *
 Targ_FmtTime (time)
-    int    time;
+    time_t    time;
 {
     struct tm          *parts;
     static char                buf[40];
 {
     struct tm          *parts;
     static char                buf[40];
@@ -407,7 +437,7 @@ Targ_PrintType (type)
        type &= ~tbit;
 
        switch(tbit) {
        type &= ~tbit;
 
        switch(tbit) {
-           PRINTBIT(DONTCARE);
+           PRINTBIT(OPTIONAL);
            PRINTBIT(USE);
            PRINTBIT(EXEC);
            PRINTBIT(IGNORE);
            PRINTBIT(USE);
            PRINTBIT(EXEC);
            PRINTBIT(IGNORE);
@@ -415,13 +445,9 @@ Targ_PrintType (type)
            PRINTBIT(SILENT);
            PRINTBIT(MAKE);
            PRINTBIT(JOIN);
            PRINTBIT(SILENT);
            PRINTBIT(MAKE);
            PRINTBIT(JOIN);
-           PRINTBIT(EXPORT);
-           PRINTBIT(NOEXPORT);
-           PRINTBIT(EXPORTSAME);
            PRINTBIT(INVISIBLE);
            PRINTBIT(NOTMAIN);
            PRINTDBIT(LIB);
            PRINTBIT(INVISIBLE);
            PRINTBIT(NOTMAIN);
            PRINTDBIT(LIB);
-           PRINTBIT(M68020);
            /*XXX: MEMBER is defined, so CONCAT(OP_,MEMBER) gives OP_"%" */
            case OP_MEMBER: if (DEBUG(TARG)) printf(".MEMBER "); break;
            PRINTDBIT(ARCHV);
            /*XXX: MEMBER is defined, so CONCAT(OP_,MEMBER) gives OP_"%" */
            case OP_MEMBER: if (DEBUG(TARG)) printf(".MEMBER "); break;
            PRINTDBIT(ARCHV);
@@ -472,13 +498,13 @@ TargPrintNode (gn, pass)
            if (!Lst_IsEmpty (gn->iParents)) {
                printf("# implicit parents: ");
                Lst_ForEach (gn->iParents, TargPrintName, (ClientData)0);
            if (!Lst_IsEmpty (gn->iParents)) {
                printf("# implicit parents: ");
                Lst_ForEach (gn->iParents, TargPrintName, (ClientData)0);
-               putc ('\n', stdout);
+               fputc ('\n', stdout);
            }
        }
        if (!Lst_IsEmpty (gn->parents)) {
            printf("# parents: ");
            Lst_ForEach (gn->parents, TargPrintName, (ClientData)0);
            }
        }
        if (!Lst_IsEmpty (gn->parents)) {
            printf("# parents: ");
            Lst_ForEach (gn->parents, TargPrintName, (ClientData)0);
-           putc ('\n', stdout);
+           fputc ('\n', stdout);
        }
        
        printf("%-16s", gn->name);
        }
        
        printf("%-16s", gn->name);
@@ -492,7 +518,7 @@ TargPrintNode (gn, pass)
        }
        Targ_PrintType (gn->type);
        Lst_ForEach (gn->children, TargPrintName, (ClientData)0);
        }
        Targ_PrintType (gn->type);
        Lst_ForEach (gn->children, TargPrintName, (ClientData)0);
-       putc ('\n', stdout);
+       fputc ('\n', stdout);
        Lst_ForEach (gn->commands, Targ_PrintCmd, (ClientData)0);
        printf("\n\n");
        if (gn->type & OP_DOUBLEDEP) {
        Lst_ForEach (gn->commands, Targ_PrintCmd, (ClientData)0);
        printf("\n\n");
        if (gn->type & OP_DOUBLEDEP) {
@@ -501,7 +527,7 @@ TargPrintNode (gn, pass)
     }
     return (0);
 }
     }
     return (0);
 }
-\f
+
 /*-
  *-----------------------------------------------------------------------
  * TargPrintOnlySrc --
 /*-
  *-----------------------------------------------------------------------
  * TargPrintOnlySrc --
@@ -525,7 +551,7 @@ TargPrintOnlySrc(gn)
     }
     return (0);
 }
     }
     return (0);
 }
-\f
+
 /*-
  *-----------------------------------------------------------------------
  * Targ_PrintGraph --
 /*-
  *-----------------------------------------------------------------------
  * Targ_PrintGraph --
@@ -538,6 +564,7 @@ TargPrintOnlySrc(gn)
  *     lots o' output
  *-----------------------------------------------------------------------
  */
  *     lots o' output
  *-----------------------------------------------------------------------
  */
+void
 Targ_PrintGraph (pass)
     int            pass;       /* Which pass this is. 1 => no processing
                         * 2 => processing done */
 Targ_PrintGraph (pass)
     int            pass;       /* Which pass this is. 1 => no processing
                         * 2 => processing done */