Annotation of 43BSD/contrib/mkmf/src/Mkmf.c, revision 1.1

1.1     ! root        1: static char *rcsid = "$Header: Mkmf.c,v 1.7 86/01/12 00:48:26 lepreau Exp $";
        !             2: #include "sccsid.h"
        !             3: /*
        !             4:  * mkmf - makefile editor
        !             5:  *
        !             6:  * Author: Peter J. Nicklin
        !             7:  */
        !             8: #include "Mkmf.h"
        !             9: #include "getarg.h"
        !            10: #include "hash.h"
        !            11: #include "null.h"
        !            12: #include "path.h"
        !            13: #include "target.h"
        !            14: #include "slist.h"
        !            15: #include "suffix.h"
        !            16: #include "system.h"
        !            17: #include "yesno.h"
        !            18: 
        !            19: char *L_MAKEFILE = "l.Makefile";       /* default library makefile template */
        !            20: char OBJSFX[SUFFIXSIZE] = ".o";                /* default object suffix */
        !            21: char *P_MAKEFILE = "p.Makefile";       /* default program makefile template */
        !            22: char *PGN = "mkmf";                    /* program name */
        !            23: int CFLAG = YES;                       /* makefile creation message flag */
        !            24: int AFLAG = NO;                                /* accept src files w/ leading dots? */
        !            25: int DEPEND = 1;                                /* dependency analysis? */
        !            26: SLIST *HEADLIST;                       /* header file name list */
        !            27: SLIST *LIBLIST;                                /* library pathname list */
        !            28: SLIST *SRCLIST;                                /* source file name list */
        !            29: HASH *MDEFTABLE;                       /* macro definition table */
        !            30: 
        !            31: char *DEFRULE[] =                      /* default preprocessor rules */
        !            32:        {
        !            33: #include "defaultrul.h"
        !            34:        NULL
        !            35:        };
        !            36: 
        !            37: SUFFIX DEFSFX[] =                      /* default suffix list */
        !            38:        {
        !            39: #include "defaultsfx.h"
        !            40:        NULL, 0
        !            41:        };
        !            42: 
        !            43: main(argc, argv)
        !            44:        int argc;
        !            45:        char **argv;
        !            46: {
        !            47:        char *mfname = NULL;            /* makefile name */
        !            48:        char mfpath[PATHSIZE];          /* makefile template pathname */
        !            49:        HASHBLK *htb;                   /* hash table block */
        !            50:        HASHBLK *htinstall();           /* install hash table entry */
        !            51:        HASHBLK *htlookup();            /* find hash table entry */
        !            52:        int buildliblist();             /* build list of library pathnames */
        !            53:        int buildruletable();           /* build table of preprocessor rules */
        !            54:        int buildsfxtable();            /* build table of suffixes */
        !            55:        int buildsrclist();             /* build list of source file names */
        !            56:        int findmf();                   /* find makefile */
        !            57:        int status = 0;                 /* exit status */
        !            58:        int storemacro();               /* store macro definition */
        !            59:        short iflag = NO;               /* interactive flag */
        !            60:        TARGET target;                  /* type of makefile target */
        !            61:        void answer();                  /* install answer in macro def table */
        !            62:        void editmf();                  /* edit makefile */
        !            63: 
        !            64:        target.type = target.dest = VUNKNOWN;
        !            65: 
        !            66:        {
        !            67:        register char *s;               /* option pointer */
        !            68:        while (--argc > 0 && **++argv == '-')
        !            69:                {
        !            70:                for (s = argv[0]+1; *s != '\0'; s++)
        !            71:                        switch (*s)
        !            72:                                {
        !            73:                                case 'F':
        !            74:                                        P_MAKEFILE = L_MAKEFILE = GETARG(s);
        !            75:                                        if (P_MAKEFILE==NULL || *P_MAKEFILE=='\0')
        !            76:                                                {
        !            77:                                                warn("missing template name");
        !            78:                                                status = 1;
        !            79:                                                }
        !            80:                                        goto endfor;
        !            81:                                case 'a':
        !            82:                                        AFLAG = YES;
        !            83:                                        break;
        !            84:                                case 'c':
        !            85:                                        CFLAG = NO;
        !            86:                                        break;
        !            87:                                case 'd':
        !            88:                                        /* turn OFF dependency analysis */
        !            89:                                        DEPEND = 0;
        !            90:                                        break;
        !            91:                                case 'f':
        !            92:                                        mfname = GETARG(s);
        !            93:                                        if (mfname == NULL || *mfname == '\0')
        !            94:                                                {
        !            95:                                                warn("missing makefile name");
        !            96:                                                status = 1;
        !            97:                                                }
        !            98:                                        goto endfor;
        !            99:                                case 'i':
        !           100:                                        iflag = YES;
        !           101:                                        break;
        !           102:                                case 'l':
        !           103:                                        target.type = VLIBRARY;
        !           104:                                        break;
        !           105:                                default:
        !           106:                                        badopt(**argv, *s);
        !           107:                                        status = 1;
        !           108:                                        goto endfor;
        !           109:                                }
        !           110:                endfor: continue;
        !           111:                }
        !           112:        }
        !           113:        
        !           114:        /* initialize macro definition table */
        !           115:        MDEFTABLE = htinit(MDEFTABLESIZE);
        !           116: 
        !           117:        /* get command line macro definitions */
        !           118:        for (; argc > 0; argc--, argv++)
        !           119:                if (storemacro(*argv) == NO)
        !           120:                        {
        !           121:                        warns("%s not a macro definition", *argv);
        !           122:                        status = 1;
        !           123:                        }
        !           124: 
        !           125:        if (status == 1)
        !           126:                {
        !           127:                usage("[-cdil] [-f makefile] [-F template] [macroname=value...]");
        !           128:                exit(1);
        !           129:                }
        !           130: 
        !           131: 
        !           132:        /* determine the makefile name */
        !           133:        if (mfname == NULL)
        !           134:                if ((htb = htlookup(MMAKEFILE, MDEFTABLE)) != NULL)
        !           135:                        mfname = htb->h_def;
        !           136:                else if (FILEXIST("makefile"))
        !           137:                        mfname = "makefile";
        !           138:                else if (FILEXIST("Makefile"))
        !           139:                        mfname = "Makefile";
        !           140:                else
        !           141:                        mfname = "Makefile";
        !           142:        if (htinstall(MMAKEFILE, mfname, VREADWRITE, MDEFTABLE) == NULL)
        !           143:                exit(1);
        !           144: 
        !           145: 
        !           146:        /* find the makefile (template) and load useful macro definitions */
        !           147:        if (target.type == VUNKNOWN)
        !           148:                {
        !           149:                if (htlookup(MPROGRAM, MDEFTABLE) != NULL)
        !           150:                        target.type = VPROGRAM;
        !           151:                else if (htlookup(MLIBRARY, MDEFTABLE) != NULL)
        !           152:                        target.type = VLIBRARY;
        !           153:                }
        !           154:        if (findmf(mfname, mfpath, &target) == NO)
        !           155:                exit(1);
        !           156:        
        !           157: 
        !           158:        /* interactive option */
        !           159:        if (iflag == YES)
        !           160:                {
        !           161:                if (htlookup(MPROGRAM, MDEFTABLE) == NULL &&
        !           162:                    htlookup(MLIBRARY, MDEFTABLE) == NULL)
        !           163:                        if (target.type == VPROGRAM)
        !           164:                                {
        !           165:                                printf("program name? ");
        !           166:                                answer(MPROGRAM, VREADWRITE);
        !           167:                                }
        !           168:                        else if (target.type == VLIBRARY)
        !           169:                                {
        !           170:                                printf("library name? ");
        !           171:                                answer(MLIBRARY, VREADWRITE);
        !           172:                                }
        !           173:                if (htlookup(MDESTDIR, MDEFTABLE) == NULL && target.dest == VDESTDIR)
        !           174:                        {
        !           175:                        printf("destination directory? ");
        !           176:                        answer(MDESTDIR, VREADWRITE);
        !           177:                        }
        !           178:                }
        !           179: 
        !           180:        /* build the suffix table */
        !           181:        if (buildsfxtable() == NO)
        !           182:                exit(1);
        !           183: 
        !           184:        /* build the rule table */
        !           185:        if (buildruletable() == NO)
        !           186:                exit(1);
        !           187: 
        !           188:        /* build the source code and header file name lists */
        !           189:        if (buildsrclist() == NO)
        !           190:                exit(1);
        !           191:        
        !           192: 
        !           193:        /* build the library pathname list */
        !           194:        if (buildliblist() == NO)
        !           195:                exit(1);
        !           196: 
        !           197: 
        !           198:        /* edit makefile */
        !           199:        editmf(mfname, mfpath);
        !           200: 
        !           201:        exit(0);
        !           202: }

unix.superglobalmegacorp.com

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