|
|
1.1 root 1: /* @(#)/usr/src/cmd/make/defs 3.2 */
2:
3: /* @(#)defs 3.1 */
4:
5: #include <stdio.h>
6:
7: #define NEWLINE '\n'
8: #define CNULL '\0'
9: #define BLANK ' '
10: #define TAB '\t'
11: #define DOT '.'
12: #define WIGGLE '~'
13: #define AT '@'
14: #define MINUS '-'
15: #define EQUALS '='
16: #define SLASH '/'
17: #define STAR '*'
18: #define LCURLY '{'
19: #define RCURLY '}'
20: #define LPAREN '('
21: #define RPAREN ')'
22: #define LSQUAR '['
23: #define RSQUAR ']'
24: #define QUESTN '?'
25: #define KOLON ':'
26: #define SKOLON ';'
27: #define DOLLAR '$'
28: #define GREATR '>'
29: #define POUND '#'
30: #define BACKSLASH '\\'
31:
32:
33: /*
34: * Flags
35: */
36:
37: #define ALLOC(x) (struct x *) intalloc(sizeof(struct x))
38:
39:
40: #define TURNON(a) (Mflags |= (a))
41: #define TURNOFF(a) (Mflags &= (~(a)))
42: #define IS_ON(a) (Mflags&(a))
43: #define IS_OFF(a) (!(IS_ON(a)))
44:
45: #define DBUG 0000001 /* debug flag */
46: #define ENVOVER 0000002 /* environ overides file defines */
47: #define EXPORT 0000004 /* put current variable in environ */
48: #define PRTR 0000010 /* set `-p' flag */
49: #define SIL 0000020 /* set `-s' flag */
50: #define NOEX 0000040 /* set `-n' flag */
51: #define INTRULE 0000100 /* use internal rules */
52: #define TOUCH 0000200 /* set `-t' flag */
53: #define GET 0000400 /* do a $(GET) if file not found */
54: #define QUEST 0001000 /* set `-q' flag */
55: #define INARGS 0002000 /* currently reading cmd args */
56: #define IGNERR 0004000 /* set `-i' flag */
57: #define KEEPGO 0010000 /* set `-k' flag */
58: #define GF_KEEP 0020000 /* keep auto get files */
59: #define MH_DEP 0040000 /* use old question about whether cmd exists */
60: #define MEMMAP 0100000 /* print memory map */
61:
62: typedef char *CHARSTAR;
63: typedef int *INTSTAR;
64: typedef long int TIMETYPE;
65: typedef struct gothead *GOTHEAD;
66: typedef struct gotf *GOTF;
67: typedef struct chain *CHAIN;
68: typedef struct opendir *OPENDIR;
69: typedef struct pattern *PATTERN;
70: typedef struct varblock *VARBLOCK;
71: typedef struct shblock *SHBLOCK;
72: typedef struct depblock *DEPBLOCK;
73: typedef struct lineblock *LINEBLOCK;
74: typedef struct nameblock *NAMEBLOCK;
75:
76: extern CHARSTAR *environ;
77: extern int Mflags;
78: extern FILE *fin;
79: extern CHARSTAR *linesptr;
80: /*
81: * flags for get()
82: */
83: #define CD 0
84: #define NOCD 1
85:
86:
87: #define max(a,b) ((a)>(b)?(a):(b))
88: #define SHELLCOM "/bin/sh"
89:
90: #ifdef unix
91: /* to install metering, add a statement like */
92: /*******
93: #define METERFILE "/usr/sif/make/Meter"
94: ******/
95: /* to turn metering on, set external variable meteron to 1 */
96: #endif
97:
98: /* define FSTATIC to be static on systems with C compilers
99: supporting file-static; otherwise define it to be null
100: */
101: #define FSTATIC static
102:
103: #define NO 0
104: #define YES 1
105:
106: #define equal(a,b) (a[0] == b[0] ? !strcmp((a),(b)) : NO )
107: #define HASHSIZE 1021
108: #define NLEFTS 512
109: #define NCHARS 500
110: #define NINTS 250
111: #define INMAX 5000
112: #define OUTMAX 5000
113: #define MAXODIR 10
114:
115: #define ALLDEPS 1
116: #define SOMEDEPS 2
117:
118: #define META 01
119: #define TERMINAL 02
120: extern char funny[128];
121:
122:
123:
124: extern int sigivalue;
125: extern int sigqvalue;
126: extern int waitpid;
127: extern int ndocoms;
128: extern int okdel;
129: extern CHARSTAR prompt;
130: extern char junkname[ ];
131: extern char RELEASE[];
132:
133:
134:
135: struct nameblock
136: {
137: NAMEBLOCK nextname; /* pointer to next nameblock */
138: NAMEBLOCK backname; /* pointer to predecessor */
139: CHARSTAR namep; /* ASCII name string */
140: CHARSTAR alias; /* ASCII alias (when namep translates to another
141: * pathstring.
142: */
143: LINEBLOCK linep; /* pointer to dependents */
144: int done:3; /* flag used to tell when finished */
145: int septype:3; /* distinguishes between single and double : */
146: int rundep:1; /* flag indicating runtime translation done */
147: TIMETYPE modtime; /* set by exists() */
148: };
149:
150:
151: extern NAMEBLOCK mainname ;
152: extern NAMEBLOCK firstname;
153:
154: struct lineblock
155: {
156: LINEBLOCK nextline;
157: DEPBLOCK depp;
158: SHBLOCK shp;
159: };
160:
161: extern LINEBLOCK sufflist;
162:
163: struct depblock
164: {
165: DEPBLOCK nextdep;
166: NAMEBLOCK depname;
167: };
168:
169: struct shblock
170: {
171: SHBLOCK nextsh;
172: CHARSTAR shbp;
173: };
174:
175: struct varblock
176: {
177: VARBLOCK nextvar;
178: CHARSTAR varname;
179: CHARSTAR varval;
180: int noreset:1;
181: int used:1;
182: int envflg:1;
183: int v_aflg:1;
184: };
185:
186: extern VARBLOCK firstvar;
187:
188: struct pattern
189: {
190: PATTERN nextpattern;
191: CHARSTAR patval;
192: };
193:
194: extern PATTERN firstpat;
195:
196: struct opendir
197: {
198: OPENDIR nextopendir;
199: FILE * dirfc;
200: CHARSTAR dirn;
201: };
202: extern OPENDIR firstod;
203:
204:
205: struct chain
206: {
207: CHAIN nextchain;
208: CHARSTAR datap;
209: };
210:
211: /*
212: * The following two structures are used to cleanup after
213: * `make' does an automatic get of a file. See get() and
214: * cleanup().
215: */
216: struct gotf /* list of files */
217: {
218: GOTF gnextp;
219: CHARSTAR gnamep;
220: };
221:
222: struct gothead /* first member of list of files */
223: {
224: GOTF gnextp;
225: CHARSTAR gnamep;
226: GOTF endp;
227: };
228:
229: extern char Nullstr[];
230: extern CHARSTAR badptr;
231: CHARSTAR copys();
232: CHARSTAR copstr();
233: CHARSTAR concat();
234: CHARSTAR colontrans();
235: CHARSTAR dftrans();
236: CHARSTAR straightrans();
237: CHARSTAR mkqlist();
238: CHARSTAR findfl();
239: CHARSTAR addstars();
240: CHARSTAR strshift();
241: INTSTAR intalloc();
242: VARBLOCK varptr();
243: VARBLOCK srchvar();
244: TIMETYPE prestime(), exists();
245: DEPBLOCK srchdir();
246: NAMEBLOCK srchname(), makename();
247: LINEBLOCK runtime();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.