| 1 | /* | 
|---|
| 2 | * Copyright (c) 1988, 1989, 1990, 1993 | 
|---|
| 3 | *      The Regents of the University of California.  All rights reserved. | 
|---|
| 4 | * Copyright (c) 1989 by Berkeley Softworks | 
|---|
| 5 | * All rights reserved. | 
|---|
| 6 | * | 
|---|
| 7 | * This code is derived from software contributed to Berkeley by | 
|---|
| 8 | * Adam de Boor. | 
|---|
| 9 | * | 
|---|
| 10 | * Redistribution and use in source and binary forms, with or without | 
|---|
| 11 | * modification, are permitted provided that the following conditions | 
|---|
| 12 | * are met: | 
|---|
| 13 | * 1. Redistributions of source code must retain the above copyright | 
|---|
| 14 | *    notice, this list of conditions and the following disclaimer. | 
|---|
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | 
|---|
| 16 | *    notice, this list of conditions and the following disclaimer in the | 
|---|
| 17 | *    documentation and/or other materials provided with the distribution. | 
|---|
| 18 | * 3. All advertising materials mentioning features or use of this software | 
|---|
| 19 | *    must display the following acknowledgement: | 
|---|
| 20 | *      This product includes software developed by the University of | 
|---|
| 21 | *      California, Berkeley and its contributors. | 
|---|
| 22 | * 4. Neither the name of the University nor the names of its contributors | 
|---|
| 23 | *    may be used to endorse or promote products derived from this software | 
|---|
| 24 | *    without specific prior written permission. | 
|---|
| 25 | * | 
|---|
| 26 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | 
|---|
| 27 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
|---|
| 28 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
|---|
| 29 | * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | 
|---|
| 30 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | 
|---|
| 31 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | 
|---|
| 32 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | 
|---|
| 33 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | 
|---|
| 34 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | 
|---|
| 35 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 
|---|
| 36 | * SUCH DAMAGE. | 
|---|
| 37 | * | 
|---|
| 38 | *      from: @(#)make.h        8.3 (Berkeley) 6/13/95 | 
|---|
| 39 | * $FreeBSD: src/usr.bin/make/make.h,v 1.12.2.2 2001/02/13 03:13:58 will Exp $ | 
|---|
| 40 | */ | 
|---|
| 41 |  | 
|---|
| 42 | /*- | 
|---|
| 43 | * make.h -- | 
|---|
| 44 | *      The global definitions for pmake | 
|---|
| 45 | */ | 
|---|
| 46 |  | 
|---|
| 47 | #ifndef _MAKE_H_ | 
|---|
| 48 | #define _MAKE_H_ | 
|---|
| 49 |  | 
|---|
| 50 | #include <sys/types.h> | 
|---|
| 51 | #include <stdio.h> | 
|---|
| 52 | #include <string.h> | 
|---|
| 53 | #include <ctype.h> | 
|---|
| 54 | #include <err.h> | 
|---|
| 55 |  | 
|---|
| 56 | #if !defined(MAKE_BOOTSTRAP) && defined(BSD4_4) && !defined(__IBMC__) | 
|---|
| 57 | # include <sys/cdefs.h> | 
|---|
| 58 | #else | 
|---|
| 59 | # ifndef __P | 
|---|
| 60 | /*kso: #  if defined(__STDC__) || defined(__cplusplus) */ | 
|---|
| 61 | #  if defined(__STDC__) || defined(__cplusplus) || defined(__IBMC__) | 
|---|
| 62 | #   define      __P(protos)     protos          /* full-blown ANSI C */ | 
|---|
| 63 | #  else | 
|---|
| 64 | #   define      __P(protos)     ()              /* traditional C preprocessor */ | 
|---|
| 65 | #  endif | 
|---|
| 66 | # endif | 
|---|
| 67 | /*kso: # ifndef __STDC__*/ | 
|---|
| 68 | # if !defined(__STDC__) && !defined(__IBMC__) | 
|---|
| 69 | #  ifndef const | 
|---|
| 70 | #   define const | 
|---|
| 71 | #  endif | 
|---|
| 72 | #  ifndef volatile | 
|---|
| 73 | #   define volatile | 
|---|
| 74 | #  endif | 
|---|
| 75 | # endif | 
|---|
| 76 | #endif | 
|---|
| 77 |  | 
|---|
| 78 | #if defined(__STDC__) || defined(__IBMC__) | 
|---|
| 79 | #include <stdlib.h> | 
|---|
| 80 | #include <unistd.h> | 
|---|
| 81 | #endif | 
|---|
| 82 |  | 
|---|
| 83 | #include "sprite.h" | 
|---|
| 84 | #include "lst.h" | 
|---|
| 85 | #include "config.h" | 
|---|
| 86 | #include "buf.h" | 
|---|
| 87 |  | 
|---|
| 88 | /*- | 
|---|
| 89 | * The structure for an individual graph node. Each node has several | 
|---|
| 90 | * pieces of data associated with it. | 
|---|
| 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. | 
|---|
| 115 | */ | 
|---|
| 116 | typedef struct GNode { | 
|---|
| 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 */ | 
|---|
| 123 | enum { | 
|---|
| 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) */ | 
|---|
| 168 | } GNode; | 
|---|
| 169 |  | 
|---|
| 170 | /* | 
|---|
| 171 | * Manifest constants | 
|---|
| 172 | */ | 
|---|
| 173 | #define NILGNODE        ((GNode *) NIL) | 
|---|
| 174 |  | 
|---|
| 175 | /* | 
|---|
| 176 | * The OP_ constants are used when parsing a dependency line as a way of | 
|---|
| 177 | * communicating to other parts of the program the way in which a target | 
|---|
| 178 | * should be made. These constants are bitwise-OR'ed together and | 
|---|
| 179 | * placed in the 'type' field of each node. Any node that has | 
|---|
| 180 | * a 'type' field which satisfies the OP_NOP function was never never on | 
|---|
| 181 | * the lefthand side of an operator, though it may have been on the | 
|---|
| 182 | * righthand side... | 
|---|
| 183 | */ | 
|---|
| 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 */ | 
|---|
| 214 | /* Attributes applied by PMake */ | 
|---|
| 215 | #define OP_TRANSFORM    0x80000000  /* The node is a transformation rule */ | 
|---|
| 216 | #ifdef USE_ARCHIVES | 
|---|
| 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 */ | 
|---|
| 226 |  | 
|---|
| 227 | /* | 
|---|
| 228 | * OP_NOP will return TRUE if the node with the given type was not the | 
|---|
| 229 | * object of a dependency operator | 
|---|
| 230 | */ | 
|---|
| 231 | #define OP_NOP(t)       (((t) & OP_OPMASK) == 0x00000000) | 
|---|
| 232 |  | 
|---|
| 233 | /* | 
|---|
| 234 | * The TARG_ constants are used when calling the Targ_FindNode and | 
|---|
| 235 | * Targ_FindList functions in targ.c. They simply tell the functions what to | 
|---|
| 236 | * do if the desired node(s) is (are) not found. If the TARG_CREATE constant | 
|---|
| 237 | * is given, a new, empty node will be created for the target, placed in the | 
|---|
| 238 | * table of all targets and its address returned. If TARG_NOCREATE is given, | 
|---|
| 239 | * a NIL pointer will be returned. | 
|---|
| 240 | */ | 
|---|
| 241 | #define TARG_CREATE     0x01      /* create node if not found */ | 
|---|
| 242 | #define TARG_NOCREATE   0x00      /* don't create it */ | 
|---|
| 243 |  | 
|---|
| 244 | /* | 
|---|
| 245 | * There are several places where expandable buffers are used (parse.c and | 
|---|
| 246 | * var.c). This constant is merely the starting point for those buffers. If | 
|---|
| 247 | * lines tend to be much shorter than this, it would be best to reduce BSIZE. | 
|---|
| 248 | * If longer, it should be increased. Reducing it will cause more copying to | 
|---|
| 249 | * be done for longer lines, but will save space for shorter ones. In any | 
|---|
| 250 | * case, it ought to be a power of two simply because most storage allocation | 
|---|
| 251 | * schemes allocate in powers of two. | 
|---|
| 252 | */ | 
|---|
| 253 | #define MAKE_BSIZE              256     /* starting size for expandable buffers */ | 
|---|
| 254 |  | 
|---|
| 255 | /* | 
|---|
| 256 | * These constants are all used by the Str_Concat function to decide how the | 
|---|
| 257 | * final string should look. If STR_ADDSPACE is given, a space will be | 
|---|
| 258 | * placed between the two strings. If STR_ADDSLASH is given, a '/' will | 
|---|
| 259 | * be used instead of a space. If neither is given, no intervening characters | 
|---|
| 260 | * will be placed between the two strings in the final output. If the | 
|---|
| 261 | * STR_DOFREE bit is set, the two input strings will be freed before | 
|---|
| 262 | * Str_Concat returns. | 
|---|
| 263 | */ | 
|---|
| 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 */ | 
|---|
| 267 |  | 
|---|
| 268 | /* | 
|---|
| 269 | * Error levels for parsing. PARSE_FATAL means the process cannot continue | 
|---|
| 270 | * once the makefile has been parsed. PARSE_WARNING means it can. Passed | 
|---|
| 271 | * as the first argument to Parse_Error. | 
|---|
| 272 | */ | 
|---|
| 273 | #define PARSE_WARNING   2 | 
|---|
| 274 | #define PARSE_FATAL     1 | 
|---|
| 275 |  | 
|---|
| 276 | /* | 
|---|
| 277 | * Values returned by Cond_Eval. | 
|---|
| 278 | */ | 
|---|
| 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 */ | 
|---|
| 282 |  | 
|---|
| 283 | /* | 
|---|
| 284 | * Definitions for the "local" variables. Used only for clarity. | 
|---|
| 285 | */ | 
|---|
| 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 */ | 
|---|
| 291 | #ifdef KMK | 
|---|
| 292 | #define PARENTS           "^"   /* Parent of this target (if any) (long name .PARENTS) */ | 
|---|
| 293 | #endif | 
|---|
| 294 | #ifdef USE_ARCHIVES | 
|---|
| 295 | #define ARCHIVE           "!"   /* Archive in "archive(member)" syntax */ | 
|---|
| 296 | #define MEMBER            "%"   /* Member in "archive(member)" syntax */ | 
|---|
| 297 | #endif | 
|---|
| 298 |  | 
|---|
| 299 | #define FTARGET           "@F"  /* file part of TARGET */ | 
|---|
| 300 | #define DTARGET           "@D"  /* directory part of TARGET */ | 
|---|
| 301 | #define FIMPSRC           "<F"  /* file part of IMPSRC */ | 
|---|
| 302 | #define DIMPSRC           "<D"  /* directory part of IMPSRC */ | 
|---|
| 303 | #define FPREFIX           "*F"  /* file part of PREFIX */ | 
|---|
| 304 | #define DPREFIX           "*D"  /* directory part of PREFIX */ | 
|---|
| 305 |  | 
|---|
| 306 | /* | 
|---|
| 307 | * Global Variables | 
|---|
| 308 | */ | 
|---|
| 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. */ | 
|---|
| 356 |  | 
|---|
| 357 | /* | 
|---|
| 358 | * debug control: | 
|---|
| 359 | *      There is one bit per module.  It is up to the module what debug | 
|---|
| 360 | *      information to print. | 
|---|
| 361 | */ | 
|---|
| 362 | extern int debug; | 
|---|
| 363 | #ifdef USE_ARCHIVES | 
|---|
| 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 | 
|---|
| 377 | #define DEBUG_PARSE     0x8000 /*kso*/ | 
|---|
| 378 |  | 
|---|
| 379 | /*#ifdef __STDC__*/ | 
|---|
| 380 | #if defined(__STDC__) || defined(__IBMC__) | 
|---|
| 381 | #define CONCAT(a,b)     a##b | 
|---|
| 382 | #else | 
|---|
| 383 | #define I(a)            a | 
|---|
| 384 | #define CONCAT(a,b)     I(a)b | 
|---|
| 385 | #endif /* __STDC__ */ | 
|---|
| 386 |  | 
|---|
| 387 |  | 
|---|
| 388 |  | 
|---|
| 389 | #define DEBUG(module)   (debug & CONCAT(DEBUG_,module)) | 
|---|
| 390 | #define ISDOT(c) ((c)[0] == '.' && (((c)[1] == '\0') || ((c)[1] == '/'))) | 
|---|
| 391 | #define ISDOTDOT(c) ((c)[0] == '.' && ISDOT(&((c)[1]))) | 
|---|
| 392 |  | 
|---|
| 393 | /* | 
|---|
| 394 | * Since there are so many, all functions that return non-integer values are | 
|---|
| 395 | * extracted by means of a sed script or two and stuck in the file "nonints.h" | 
|---|
| 396 | */ | 
|---|
| 397 | #include "nonints.h" | 
|---|
| 398 |  | 
|---|
| 399 | int Make_TimeStamp __P((GNode *, GNode *)); | 
|---|
| 400 | Boolean Make_OODate __P((GNode *)); | 
|---|
| 401 | int Make_HandleUse __P((GNode *, GNode *)); | 
|---|
| 402 | void Make_Update __P((GNode *)); | 
|---|
| 403 | void Make_DoAllVar __P((GNode *)); | 
|---|
| 404 | Boolean Make_Run __P((Lst)); | 
|---|
| 405 |  | 
|---|
| 406 | #endif /* _MAKE_H_ */ | 
|---|