Annotation of 43BSD/contrib/mkmf/src/editmf.c, revision 1.1.1.1

1.1       root        1: /* $Header: editmf.c,v 1.4 85/05/02 07:51:40 nicklin Exp $ */
                      2: 
                      3: /*
                      4:  * Author: Peter J. Nicklin
                      5:  */
                      6: #include <ctype.h>
                      7: #include <signal.h>
                      8: #include <stdio.h>
                      9: #include "Mkmf.h"
                     10: #include "dlist.h"
                     11: #include "hash.h"
                     12: #include "macro.h"
                     13: #include "null.h"
                     14: #include "slist.h"
                     15: #include "system.h"
                     16: #include "yesno.h"
                     17: 
                     18: static char *Mftemp;                   /* temporary makefile */
                     19: 
                     20: /*
                     21:  * editmf() replaces macro definitions within a makefile.
                     22:  */
                     23: void
                     24: editmf(mfname, mfpath)
                     25:        char *mfname;                   /* makefile name */
                     26:        char *mfpath;                   /* makefile template pathname */
                     27: {
                     28:        register char *bp;              /* buffer pointer */
                     29:        extern char IOBUF[];            /* I/O buffer line */
                     30:        extern int DEPEND;              /* dependency analysis? */
                     31:        extern SLIST *EXTLIST;          /* external header file name list */
                     32:        extern SLIST *HEADLIST;         /* header file name list */
                     33:        extern SLIST *LIBLIST;          /* library pathname list */
                     34:        extern SLIST *SRCLIST;          /* source file name list */
                     35:        extern HASH *MDEFTABLE;         /* macro definition table */
                     36:        char *findmacro();              /* is the line a macro definition? */
                     37:        char *getlin();                 /* get a line from input stream */
                     38:        char *mktemp();                 /* make file name */
                     39:        char mnam[MACRONAMSIZE];        /* macro name buffer */
                     40:        DLIST *dlp;                     /* dependency list */
                     41:        DLIST *mkdepend();              /* generate object-include file deps */
                     42:        FILE *ifp;                      /* input stream */
                     43:        FILE *mustfopen();              /* must open file or die */
                     44:        FILE *ofp;                      /* output stream */
                     45:        HASHBLK *htb;                   /* hash table block */
                     46:        HASHBLK *htlookup();            /* find hash table entry */
                     47:        int cleanup();                  /* remove temporary makefile and exit */
                     48:        void dlprint();                 /* print dependency list */
                     49:        void purgcontinue();            /* get rid of continuation lines */
                     50:        void putmacro();                /* put macro defs from table */
                     51:        void putlin();                  /* put a makefile line */
                     52:        void putobjmacro();             /* put object file name macro def */
                     53:        void putslmacro();              /* put macro defs from linked list */
                     54: 
                     55:        ifp = mustfopen(mfpath, "r");
                     56:        Mftemp = mktemp("mkmfXXXXXX");
                     57: 
                     58:        signal(SIGHUP, cleanup);
                     59:        signal(SIGINT, cleanup);
                     60:        signal(SIGQUIT, cleanup);
                     61: 
                     62:        ofp = mustfopen(Mftemp, "w");
                     63:        if (DEPEND)
                     64:                {
                     65:                dlp = mkdepend();
                     66:                }
                     67: 
                     68:        while (getlin(ifp) != NULL)
                     69:                {
                     70:                if (DEPEND && EQUAL(IOBUF, DEPENDMARK))
                     71:                        break;
                     72:                for (bp = IOBUF; *bp == ' '; bp++)
                     73:                        continue;
                     74:                if (isalnum(*bp) && findmacro(mnam, bp) != NULL)
                     75:                        {
                     76:                        if ((htb = htlookup(mnam, MDEFTABLE)) != NULL)
                     77:                                {
                     78:                                if (htb->h_val == VREADWRITE)
                     79:                                        {
                     80:                                        putmacro(htb->h_def, ofp);
                     81:                                        purgcontinue(ifp);
                     82:                                        }
                     83:                                else    {
                     84:                                        putlin(ofp);
                     85:                                        }
                     86:                                }
                     87:                        else if (EQUAL(mnam, MHEADERS))
                     88:                                {
                     89:                                putslmacro(HEADLIST, ofp);
                     90:                                purgcontinue(ifp);
                     91:                                }
                     92:                        else if (EQUAL(mnam, MOBJECTS))
                     93:                                {
                     94:                                putobjmacro(ofp);
                     95:                                purgcontinue(ifp);
                     96:                                }
                     97:                        else if (EQUAL(mnam, MSOURCE))
                     98:                                {
                     99:                                putslmacro(SRCLIST, ofp);
                    100:                                purgcontinue(ifp);
                    101:                                }
                    102:                        else if (EQUAL(mnam, MEXTERNALS))
                    103:                                {
                    104:                                if (DEPEND)
                    105:                                        {
                    106:                                        putslmacro(EXTLIST, ofp);
                    107:                                        purgcontinue(ifp);
                    108:                                        }
                    109:                                else    {
                    110:                                        putlin(ofp);
                    111:                                        }
                    112:                                }
                    113:                        else if (EQUAL(mnam, MLIBLIST) && LIBLIST != NULL)
                    114:                                {
                    115:                                putslmacro(LIBLIST, ofp);
                    116:                                purgcontinue(ifp);
                    117:                                }
                    118:                        else    {
                    119:                                putlin(ofp);
                    120:                                }
                    121:                        }
                    122:                else    {
                    123:                        putlin(ofp);
                    124:                        }
                    125:                }
                    126:        fclose(ifp);
                    127:        if (DEPEND)
                    128:                {
                    129:                dlprint(dlp, ofp);
                    130:                }
                    131:        fclose(ofp);
                    132: 
                    133:        signal(SIGHUP, SIG_IGN);
                    134:        signal(SIGINT, SIG_IGN);
                    135:        signal(SIGQUIT, SIG_IGN);
                    136: 
                    137:        RENAME(Mftemp, mfname);
                    138: }
                    139: 
                    140: 
                    141: 
                    142: /*
                    143:  * cleanup() removes the temporary makefile and dependency file, and
                    144:  * calls exit(1).
                    145:  */
                    146: cleanup()
                    147: {
                    148:        signal(SIGHUP, cleanup);
                    149:        signal(SIGINT, cleanup);
                    150:        signal(SIGQUIT, cleanup);
                    151: 
                    152:        unlink(Mftemp);
                    153:        exit(1);
                    154: }

unix.superglobalmegacorp.com

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