Annotation of researchv10no/cmd/usgmake/dyndep.c, revision 1.1.1.1

1.1       root        1: /*      @(#)/usr/src/cmd/make/dyndep.c  3.4     */
                      2: /*      @(#)dyndep.c    3.3     */
                      3: #include "defs"
                      4: /*
                      5:  *      Dynamicdep() checks each dependency by calling runtime().
                      6:  *      Runtime() determines if a dependent line contains "$@"
                      7:  *      or "$(@F)" or "$(@D)". If so, it makes a new dependent line
                      8:  *      and insert it into the dependency chain of the input name, p.
                      9:  *      Here, "$@" gets translated to p->namep. That is
                     10:  *      the current name on the left of the colon in the
                     11:  *      makefile.  Thus,
                     12:  *              xyz:    [email protected]
                     13:  *      translates into
                     14:  *              xyz:    s.xyz.c
                     15:  *
                     16:  *      Also, "$(@F)" translates to the same thing without a prededing
                     17:  *      directory path (if one exists).
                     18:  *      Note, to enter "$@" on a dependency line in a makefile
                     19:  *      "$$@" must be typed. This is because `make' expands
                     20:  *      macros upon reading them.
                     21:  */
                     22: 
                     23: #define is_dyn(a)               (any( (a), DOLLAR) )
                     24: 
                     25: 
                     26: dynamicdep(p)
                     27: register NAMEBLOCK p;
                     28: {
                     29:         register LINEBLOCK lp, nlp;
                     30:         LINEBLOCK backlp=0;
                     31: 
                     32:         p->rundep = 1;
                     33: 
                     34:         for(lp = p->linep; lp != 0; lp = lp->nextline)
                     35:         {
                     36:                 if( (nlp=runtime(p, lp)) != 0)
                     37:                         if(backlp)
                     38:                                 backlp->nextline = nlp;
                     39:                         else
                     40:                                 p->linep = nlp;
                     41: 
                     42:                 backlp = (nlp == 0) ? lp : nlp;
                     43:         }
                     44: }
                     45: 
                     46: 
                     47: LINEBLOCK runtime(p, lp)
                     48: NAMEBLOCK p;
                     49: register LINEBLOCK lp;
                     50: {
                     51:         register union
                     52:         {
                     53:                 int u_i;
                     54:                 NAMEBLOCK u_nam;
                     55:         } temp;
                     56:         register DEPBLOCK q, nq;
                     57:         LINEBLOCK nlp;
                     58:         NAMEBLOCK pc;
                     59:         CHARSTAR pc1;
                     60:         char c;
                     61:         CHARSTAR pbuf;
                     62:         char buf[128];
                     63: 
                     64:         temp.u_i = NO;
                     65:         for(q = lp->depp; q != 0; q = q->nextdep)
                     66:         {
                     67:                 if((pc=q->depname) != 0)
                     68:                 {
                     69:                         if(is_dyn(pc->namep))
                     70:                         {
                     71:                                 temp.u_i = YES;
                     72:                                 break;
                     73:                         }
                     74:                 }
                     75:         }
                     76: 
                     77:         if(temp.u_i == NO)
                     78:         {
                     79:                 return(0);
                     80:         }
                     81: 
                     82:         nlp = ALLOC(lineblock);
                     83:         nq  = ALLOC(depblock);
                     84: 
                     85:         nlp->nextline = lp->nextline;
                     86:         nlp->shp   = lp->shp;
                     87:         nlp->depp  = nq;
                     88: 
                     89:         for(q = lp->depp; q != 0; q = q->nextdep)
                     90:         {
                     91:                 pc1 = q->depname->namep;
                     92:                 if(is_dyn(pc1))
                     93:                 {
                     94:                         subst(pc1, buf);
                     95:                         temp.u_nam = srchname(buf);
                     96:                         if(temp.u_nam == 0)
                     97:                                 temp.u_nam = makename(copys(buf));
                     98:                         nq->depname = temp.u_nam;
                     99:                 }
                    100:                 else
                    101:                 {
                    102:                         nq->depname = q->depname;
                    103:                 }
                    104: 
                    105:                 if(q->nextdep == 0)
                    106:                         nq->nextdep = 0;
                    107:                 else
                    108:                         nq->nextdep = ALLOC(depblock);
                    109: 
                    110:                 nq = nq->nextdep;
                    111:         }
                    112:         return(nlp);
                    113: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.