Changeset 51 in kBuild for trunk/src/kmk/make.h
- Timestamp:
- Apr 7, 2003 1:30:32 AM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/make.h
r46 r51 1 1 /* 2 2 * Copyright (c) 1988, 1989, 1990, 1993 3 * 3 * The Regents of the University of California. All rights reserved. 4 4 * Copyright (c) 1989 by Berkeley Softworks 5 5 * All rights reserved. … … 18 18 * 3. All advertising materials mentioning features or use of this software 19 19 * must display the following acknowledgement: 20 * 21 * 20 * This product includes software developed by the University of 21 * California, Berkeley and its contributors. 22 22 * 4. Neither the name of the University nor the names of its contributors 23 23 * may be used to endorse or promote products derived from this software … … 36 36 * SUCH DAMAGE. 37 37 * 38 * from: @(#)make.h8.3 (Berkeley) 6/13/9538 * from: @(#)make.h 8.3 (Berkeley) 6/13/95 39 39 * $FreeBSD: src/usr.bin/make/make.h,v 1.12.2.2 2001/02/13 03:13:58 will Exp $ 40 40 */ … … 42 42 /*- 43 43 * make.h -- 44 * 44 * The global definitions for pmake 45 45 */ 46 46 … … 60 60 /*kso: # if defined(__STDC__) || defined(__cplusplus) */ 61 61 # if defined(__STDC__) || defined(__cplusplus) || defined(__IBMC__) 62 # define __P(protos) protos/* full-blown ANSI C */62 # define __P(protos) protos /* full-blown ANSI C */ 63 63 # else 64 # define __P(protos) ()/* traditional C preprocessor */64 # define __P(protos) () /* traditional C preprocessor */ 65 65 # endif 66 66 # endif … … 76 76 #endif 77 77 78 #if defined(__IBMC__) 79 #include <stdlib.h> 80 #include <time.h> 81 /*#ifdef __STDC__*/ 82 #elif defined(__STDC__) 78 #if defined(__STDC__) || defined(__IBMC__) 83 79 #include <stdlib.h> 84 80 #include <unistd.h> … … 93 89 * The structure for an individual graph node. Each node has several 94 90 * pieces of data associated with it. 95 * 96 * 97 * 98 * 99 * 100 * 101 * 102 * 103 * 104 * 105 * 106 * 107 * 108 * 109 * 110 * 111 * 112 * 113 * 114 * 115 * 116 * 117 * 118 * 91 * 1) the name of the target it describes 92 * 2) the location of the target file in the file system. 93 * 3) the type of operator used to define its sources (qv. parse.c) 94 * 4) whether it is involved in this invocation of make 95 * 5) whether the target has been remade 96 * 6) whether any of its children has been remade 97 * 7) the number of its children that are, as yet, unmade 98 * 8) its modification time 99 * 9) the modification time of its youngest child (qv. make.c) 100 * 10) a list of nodes for which this is a source 101 * 11) a list of nodes on which this depends 102 * 12) a list of nodes that depend on this, as gleaned from the 103 * transformation rules. 104 * 13) a list of nodes of the same name created by the :: operator 105 * 14) a list of nodes that must be made (if they're made) before 106 * this node can be, but that do no enter into the datedness of 107 * this node. 108 * 15) a list of nodes that must be made (if they're made) after 109 * this node is, but that do not depend on this node, in the 110 * normal sense. 111 * 16) a Lst of ``local'' variables that are specific to this target 112 * and this target only (qv. var.c [$@ $< $?, etc.]) 113 * 17) a Lst of strings that are commands to be given to a shell 114 * to create this target. 119 115 */ 120 116 typedef struct GNode { 121 char *name; 122 char *path;/* The full pathname of the file */123 int type; 124 int order;/* Its wait weight */125 126 Boolean make; 117 char *name; /* The target's name */ 118 char *path; /* The full pathname of the file */ 119 int type; /* Its type (see the OP flags, below) */ 120 int order; /* Its wait weight */ 121 122 Boolean make; /* TRUE if this target needs to be remade */ 127 123 enum { 128 129 130 } made;/* Set to reflect the state of processing131 132 133 134 *Indicates a cycle in the graph. (compat135 *mode only)136 137 138 139 *made (used only in compat mode)140 141 *an error making an inferior (compat).142 143 *a graph cycle. If we come back to a144 *node marked this way, it is printed145 *and 'made' is changed to ENDCYCLE.146 147 *printed. Go back and unmark all its148 *members.149 150 Boolean childMade;/* TRUE if one of this target's children was151 152 int unmade; 153 154 int mtime; 155 int cmtime;/* The modification time of its youngest156 157 158 Lst iParents;/* Links to parents for which this is an159 160 Lst cohorts;/* Other nodes for the :: operator */161 Lst parents; 162 Lst children; 163 Lst successors;/* Nodes that must be made after this one */164 Lst preds;/* Nodes that must be made before this one */165 166 Lst context; 167 Lst commands; 168 169 struct _Suff *suffix; 170 171 124 UNMADE, BEINGMADE, MADE, UPTODATE, ERROR, ABORTED, 125 CYCLE, ENDCYCLE 126 } made; /* Set to reflect the state of processing 127 * on this node: 128 * UNMADE - Not examined yet 129 * BEINGMADE - Target is already being made. 130 * Indicates a cycle in the graph. (compat 131 * mode only) 132 * MADE - Was out-of-date and has been made 133 * UPTODATE - Was already up-to-date 134 * ERROR - An error occured while it was being 135 * made (used only in compat mode) 136 * ABORTED - The target was aborted due to 137 * an error making an inferior (compat). 138 * CYCLE - Marked as potentially being part of 139 * a graph cycle. If we come back to a 140 * node marked this way, it is printed 141 * and 'made' is changed to ENDCYCLE. 142 * ENDCYCLE - the cycle has been completely 143 * printed. Go back and unmark all its 144 * members. 145 */ 146 Boolean childMade; /* TRUE if one of this target's children was 147 * made */ 148 int unmade; /* The number of unmade children */ 149 150 int mtime; /* Its modification time */ 151 int cmtime; /* The modification time of its youngest 152 * child */ 153 154 Lst iParents; /* Links to parents for which this is an 155 * implied source, if any */ 156 Lst cohorts; /* Other nodes for the :: operator */ 157 Lst parents; /* Nodes that depend on this one */ 158 Lst children; /* Nodes on which this one depends */ 159 Lst successors; /* Nodes that must be made after this one */ 160 Lst preds; /* Nodes that must be made before this one */ 161 162 Lst context; /* The local variables */ 163 Lst commands; /* Creation commands */ 164 165 struct _Suff *suffix; /* Suffix for the node (determined by 166 * Suff_FindDeps and opaque to everyone 167 * but the Suff module) */ 172 168 } GNode; 173 169 … … 175 171 * Manifest constants 176 172 */ 177 #define NILGNODE 173 #define NILGNODE ((GNode *) NIL) 178 174 179 175 /* … … 186 182 * righthand side... 187 183 */ 188 #define OP_DEPENDS 189 190 #define OP_FORCE 191 #define OP_DOUBLEDEP 192 193 #define OP_OPMASK 194 195 #define OP_OPTIONAL 196 197 #define OP_USE 198 #define OP_EXEC 199 200 201 202 #define OP_IGNORE 203 #define OP_PRECIOUS 204 205 #define OP_SILENT 206 #define OP_MAKE 207 208 209 210 #define OP_JOIN 211 212 #define OP_INVISIBLE 213 214 215 #define OP_NOTMAIN 216 217 #define OP_PHONY 184 #define OP_DEPENDS 0x00000001 /* Execution of commands depends on 185 * kids (:) */ 186 #define OP_FORCE 0x00000002 /* Always execute commands (!) */ 187 #define OP_DOUBLEDEP 0x00000004 /* Execution of commands depends on kids 188 * per line (::) */ 189 #define OP_OPMASK (OP_DEPENDS|OP_FORCE|OP_DOUBLEDEP) 190 191 #define OP_OPTIONAL 0x00000008 /* Don't care if the target doesn't 192 * exist and can't be created */ 193 #define OP_USE 0x00000010 /* Use associated commands for parents */ 194 #define OP_EXEC 0x00000020 /* Target is never out of date, but always 195 * execute commands anyway. Its time 196 * doesn't matter, so it has none...sort 197 * of */ 198 #define OP_IGNORE 0x00000040 /* Ignore errors when creating the node */ 199 #define OP_PRECIOUS 0x00000080 /* Don't remove the target when 200 * interrupted */ 201 #define OP_SILENT 0x00000100 /* Don't echo commands when executed */ 202 #define OP_MAKE 0x00000200 /* Target is a recurrsive make so its 203 * commands should always be executed when 204 * it is out of date, regardless of the 205 * state of the -n or -t flags */ 206 #define OP_JOIN 0x00000400 /* Target is out-of-date only if any of its 207 * children was out-of-date */ 208 #define OP_INVISIBLE 0x00004000 /* The node is invisible to its parents. 209 * I.e. it doesn't show up in the parents's 210 * local variables. */ 211 #define OP_NOTMAIN 0x00008000 /* The node is exempt from normal 'main 212 * target' processing in parse.c */ 213 #define OP_PHONY 0x00010000 /* Not a file target; run always */ 218 214 /* Attributes applied by PMake */ 219 #define OP_TRANSFORM 215 #define OP_TRANSFORM 0x80000000 /* The node is a transformation rule */ 220 216 #ifdef USE_ARCHIVES 221 #define OP_MEMBER 222 #define OP_LIB 223 #define OP_ARCHV 224 #endif 225 #define OP_HAS_COMMANDS 226 227 228 #define OP_SAVE_CMDS 229 #define OP_DEPS_FOUND 217 #define OP_MEMBER 0x40000000 /* Target is a member of an archive */ 218 #define OP_LIB 0x20000000 /* Target is a library */ 219 #define OP_ARCHV 0x10000000 /* Target is an archive construct */ 220 #endif 221 #define OP_HAS_COMMANDS 0x08000000 /* Target has all the commands it should. 222 * Used when parsing to catch multiple 223 * commands for a target */ 224 #define OP_SAVE_CMDS 0x04000000 /* Saving commands on .END (Compat) */ 225 #define OP_DEPS_FOUND 0x02000000 /* Already processed by Suff_FindDeps */ 230 226 231 227 /* … … 233 229 * object of a dependency operator 234 230 */ 235 #define OP_NOP(t) 231 #define OP_NOP(t) (((t) & OP_OPMASK) == 0x00000000) 236 232 237 233 /* … … 243 239 * a NIL pointer will be returned. 244 240 */ 245 #define TARG_CREATE 0x01/* create node if not found */246 #define TARG_NOCREATE 0x00/* don't create it */241 #define TARG_CREATE 0x01 /* create node if not found */ 242 #define TARG_NOCREATE 0x00 /* don't create it */ 247 243 248 244 /* … … 255 251 * schemes allocate in powers of two. 256 252 */ 257 #define MAKE_BSIZE 256/* starting size for expandable buffers */253 #define MAKE_BSIZE 256 /* starting size for expandable buffers */ 258 254 259 255 /* … … 266 262 * Str_Concat returns. 267 263 */ 268 #define STR_ADDSPACE 0x01/* add a space when Str_Concat'ing */269 #define STR_DOFREE 0x02/* free source strings after concatenation */270 #define STR_ADDSLASH 0x04/* add a slash when Str_Concat'ing */264 #define STR_ADDSPACE 0x01 /* add a space when Str_Concat'ing */ 265 #define STR_DOFREE 0x02 /* free source strings after concatenation */ 266 #define STR_ADDSLASH 0x04 /* add a slash when Str_Concat'ing */ 271 267 272 268 /* … … 275 271 * as the first argument to Parse_Error. 276 272 */ 277 #define PARSE_WARNING 278 #define PARSE_FATAL 273 #define PARSE_WARNING 2 274 #define PARSE_FATAL 1 279 275 280 276 /* 281 277 * Values returned by Cond_Eval. 282 278 */ 283 #define COND_PARSE 0/* Parse the next lines */284 #define COND_SKIP 1/* Skip the next lines */285 #define COND_INVALID 2/* Not a conditional statement */279 #define COND_PARSE 0 /* Parse the next lines */ 280 #define COND_SKIP 1 /* Skip the next lines */ 281 #define COND_INVALID 2 /* Not a conditional statement */ 286 282 287 283 /* 288 284 * Definitions for the "local" variables. Used only for clarity. 289 285 */ 290 #define TARGET "@"/* Target of dependency */291 #define OODATE "?"/* All out-of-date sources */292 #define ALLSRC ">"/* All sources */293 #define IMPSRC "<"/* Source implied by transformation */294 #define PREFIX "*"/* Common prefix */286 #define TARGET "@" /* Target of dependency */ 287 #define OODATE "?" /* All out-of-date sources */ 288 #define ALLSRC ">" /* All sources */ 289 #define IMPSRC "<" /* Source implied by transformation */ 290 #define PREFIX "*" /* Common prefix */ 295 291 #ifdef KMK 296 292 #define PARENTS "^" /* Parent of this target (if any) (long name .PARENTS) */ 297 293 #endif 298 294 #ifdef USE_ARCHIVES 299 #define ARCHIVE "!"/* Archive in "archive(member)" syntax */300 #define MEMBER "%"/* Member in "archive(member)" syntax */295 #define ARCHIVE "!" /* Archive in "archive(member)" syntax */ 296 #define MEMBER "%" /* Member in "archive(member)" syntax */ 301 297 #endif 302 298 … … 311 307 * Global Variables 312 308 */ 313 extern Lst create;/* The list of target names specified on the314 315 316 extern Lst dirSearchPath;/* The list of directories to search when317 318 319 extern Boolean compatMake;/* True if we are make compatible */320 extern Boolean ignoreErrors;/* True if should ignore all errors */321 extern Boolean beSilent; 322 extern Boolean beVerbose;/* True if should print extra cruft */323 extern Boolean noExecute; 324 extern Boolean allPrecious; 325 extern Boolean keepgoing; 326 327 328 extern Boolean touchFlag;/* TRUE if targets should just be 'touched'329 330 extern Boolean usePipes; 331 332 333 334 extern Boolean queryFlag;/* TRUE if we aren't supposed to really make335 336 337 338 extern Boolean checkEnvFirst;/* TRUE if environment should be searched for339 340 extern Lst envFirstVars;/* List of specific variables for which the341 342 343 344 extern GNode *DEFAULT; 345 346 extern GNode *VAR_GLOBAL; 347 348 extern GNode *VAR_CMD; 349 extern char var_Error[];/* Value returned by Var_Parse when an error350 351 352 353 354 extern time_t now;/* The time at the start of this whole355 356 357 extern Boolean oldVars;/* Do old-style variable substitution */358 359 extern Lst sysIncPath;/* The system include path. */309 extern Lst create; /* The list of target names specified on the 310 * command line. used to resolve #if 311 * make(...) statements */ 312 extern Lst dirSearchPath; /* The list of directories to search when 313 * looking for targets */ 314 315 extern Boolean compatMake; /* True if we are make compatible */ 316 extern Boolean ignoreErrors; /* True if should ignore all errors */ 317 extern Boolean beSilent; /* True if should print no commands */ 318 extern Boolean beVerbose; /* True if should print extra cruft */ 319 extern Boolean noExecute; /* True if should execute nothing */ 320 extern Boolean allPrecious; /* True if every target is precious */ 321 extern Boolean keepgoing; /* True if should continue on unaffected 322 * portions of the graph when have an error 323 * in one portion */ 324 extern Boolean touchFlag; /* TRUE if targets should just be 'touched' 325 * if out of date. Set by the -t flag */ 326 extern Boolean usePipes; /* TRUE if should capture the output of 327 * subshells by means of pipes. Otherwise it 328 * is routed to temporary files from which it 329 * is retrieved when the shell exits */ 330 extern Boolean queryFlag; /* TRUE if we aren't supposed to really make 331 * anything, just see if the targets are out- 332 * of-date */ 333 334 extern Boolean checkEnvFirst; /* TRUE if environment should be searched for 335 * all variables before the global context */ 336 extern Lst envFirstVars; /* List of specific variables for which the 337 * environment should be searched before the 338 * global context */ 339 340 extern GNode *DEFAULT; /* .DEFAULT rule */ 341 342 extern GNode *VAR_GLOBAL; /* Variables defined in a global context, e.g 343 * in the Makefile itself */ 344 extern GNode *VAR_CMD; /* Variables defined on the command line */ 345 extern char var_Error[]; /* Value returned by Var_Parse when an error 346 * is encountered. It actually points to 347 * an empty string, so naive callers needn't 348 * worry about it. */ 349 350 extern time_t now; /* The time at the start of this whole 351 * process */ 352 353 extern Boolean oldVars; /* Do old-style variable substitution */ 354 355 extern Lst sysIncPath; /* The system include path. */ 360 356 361 357 /* 362 358 * debug control: 363 * 364 * 359 * There is one bit per module. It is up to the module what debug 360 * information to print. 365 361 */ 366 362 extern int debug; 367 363 #ifdef USE_ARCHIVES 368 #define DEBUG_ARCH0x0001369 #endif 370 #define DEBUG_COND0x0002371 #define DEBUG_DIR0x0004372 #define DEBUG_GRAPH10x0008373 #define DEBUG_GRAPH20x0010374 #define DEBUG_JOB0x0020375 #define DEBUG_MAKE0x0040376 #define DEBUG_SUFF0x0080377 #define DEBUG_TARG0x0100378 #define DEBUG_VAR0x0200379 #define DEBUG_FOR 380 #define DEBUG_LOUD 364 #define DEBUG_ARCH 0x0001 365 #endif 366 #define DEBUG_COND 0x0002 367 #define DEBUG_DIR 0x0004 368 #define DEBUG_GRAPH1 0x0008 369 #define DEBUG_GRAPH2 0x0010 370 #define DEBUG_JOB 0x0020 371 #define DEBUG_MAKE 0x0040 372 #define DEBUG_SUFF 0x0080 373 #define DEBUG_TARG 0x0100 374 #define DEBUG_VAR 0x0200 375 #define DEBUG_FOR 0x0400 376 #define DEBUG_LOUD 0x0800 381 377 #define DEBUG_PARSE 0x8000 /*kso*/ 382 378 383 379 /*#ifdef __STDC__*/ 384 380 #if defined(__STDC__) || defined(__IBMC__) 385 #define CONCAT(a,b) 381 #define CONCAT(a,b) a##b 386 382 #else 387 #define I(a) 388 #define CONCAT(a,b) 383 #define I(a) a 384 #define CONCAT(a,b) I(a)b 389 385 #endif /* __STDC__ */ 390 386 391 387 392 388 393 #define DEBUG(module)(debug & CONCAT(DEBUG_,module))389 #define DEBUG(module) (debug & CONCAT(DEBUG_,module)) 394 390 #define ISDOT(c) ((c)[0] == '.' && (((c)[1] == '\0') || ((c)[1] == '/'))) 395 391 #define ISDOTDOT(c) ((c)[0] == '.' && ISDOT(&((c)[1])))
Note:
See TracChangeset
for help on using the changeset viewer.