VirtualBox

Changeset 51 in kBuild for trunk/src/kmk/make.h


Ignore:
Timestamp:
Apr 7, 2003 1:30:32 AM (22 years ago)
Author:
bird
Message:

kMk and porting to kLib.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/make.h

    r46 r51  
    11/*
    22 * Copyright (c) 1988, 1989, 1990, 1993
    3  *      The Regents of the University of California.  All rights reserved.
     3 *      The Regents of the University of California.  All rights reserved.
    44 * Copyright (c) 1989 by Berkeley Softworks
    55 * All rights reserved.
     
    1818 * 3. All advertising materials mentioning features or use of this software
    1919 *    must display the following acknowledgement:
    20  *      This product includes software developed by the University of
    21  *      California, Berkeley and its contributors.
     20 *      This product includes software developed by the University of
     21 *      California, Berkeley and its contributors.
    2222 * 4. Neither the name of the University nor the names of its contributors
    2323 *    may be used to endorse or promote products derived from this software
     
    3636 * SUCH DAMAGE.
    3737 *
    38  *      from: @(#)make.h        8.3 (Berkeley) 6/13/95
     38 *      from: @(#)make.h        8.3 (Berkeley) 6/13/95
    3939 * $FreeBSD: src/usr.bin/make/make.h,v 1.12.2.2 2001/02/13 03:13:58 will Exp $
    4040 */
     
    4242/*-
    4343 * make.h --
    44  *      The global definitions for pmake
     44 *      The global definitions for pmake
    4545 */
    4646
     
    6060/*kso: #  if defined(__STDC__) || defined(__cplusplus) */
    6161#  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 */
    6363#  else
    64 #   define      __P(protos)     ()              /* traditional C preprocessor */
     64#   define      __P(protos)     ()              /* traditional C preprocessor */
    6565#  endif
    6666# endif
     
    7676#endif
    7777
    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__)
    8379#include <stdlib.h>
    8480#include <unistd.h>
     
    9389 * The structure for an individual graph node. Each node has several
    9490 * pieces of data associated with it.
    95  *      1) the name of the target it describes
    96  *      2) the location of the target file in the file system.
    97  *      3) the type of operator used to define its sources (qv. parse.c)
    98  *      4) whether it is involved in this invocation of make
    99  *      5) whether the target has been remade
    100  *      6) whether any of its children has been remade
    101  *      7) the number of its children that are, as yet, unmade
    102  *      8) its modification time
    103  *      9) the modification time of its youngest child (qv. make.c)
    104  *      10) a list of nodes for which this is a source
    105  *      11) a list of nodes on which this depends
    106  *      12) a list of nodes that depend on this, as gleaned from the
    107  *          transformation rules.
    108  *      13) a list of nodes of the same name created by the :: operator
    109  *      14) a list of nodes that must be made (if they're made) before
    110  *          this node can be, but that do no enter into the datedness of
    111  *          this node.
    112  *      15) a list of nodes that must be made (if they're made) after
    113  *          this node is, but that do not depend on this node, in the
    114  *          normal sense.
    115  *      16) a Lst of ``local'' variables that are specific to this target
    116  *         and this target only (qv. var.c [$@ $< $?, etc.])
    117  *      17) a Lst of strings that are commands to be given to a shell
    118  *         to create this target.
     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.
    119115 */
    120116typedef struct GNode {
    121     char            *name;      /* The target's name */
    122     char            *path;      /* The full pathname of the file */
    123     int             type;       /* Its type (see the OP flags, below) */
    124     int             order;      /* Its wait weight */
    125 
    126     Boolean         make;       /* TRUE if this target needs to be remade */
     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 */
    127123    enum {
    128         UNMADE, BEINGMADE, MADE, UPTODATE, ERROR, ABORTED,
    129         CYCLE, ENDCYCLE
    130     }               made;       /* Set to reflect the state of processing
    131                                 * on this node:
    132                                 *  UNMADE - Not examined yet
    133                                 *  BEINGMADE - Target is already being made.
    134                                  *      Indicates a cycle in the graph. (compat
    135                                  *      mode only)
    136                                 *  MADE - Was out-of-date and has been made
    137                                 *  UPTODATE - Was already up-to-date
    138                                 *  ERROR - An error occured while it was being
    139                                  *      made (used only in compat mode)
    140                                 *  ABORTED - The target was aborted due to
    141                                  *      an error making an inferior (compat).
    142                                 *  CYCLE - Marked as potentially being part of
    143                                  *      a graph cycle. If we come back to a
    144                                  *      node marked this way, it is printed
    145                                  *      and 'made' is changed to ENDCYCLE.
    146                                 *  ENDCYCLE - the cycle has been completely
    147                                  *      printed. Go back and unmark all its
    148                                  *      members.
    149                                 */
    150     Boolean         childMade;  /* TRUE if one of this target's children was
    151                                 * made */
    152     int             unmade;     /* The number of unmade children */
    153 
    154     int             mtime;      /* Its modification time */
    155     int             cmtime;     /* The modification time of its youngest
    156                                 * child */
    157 
    158     Lst             iParents;   /* Links to parents for which this is an
    159                                 * implied source, if any */
    160     Lst             cohorts;    /* Other nodes for the :: operator */
    161     Lst             parents;    /* Nodes that depend on this one */
    162     Lst             children;   /* Nodes on which this one depends */
    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;    /* The local variables */
    167     Lst             commands;   /* Creation commands */
    168 
    169     struct _Suff    *suffix;    /* Suffix for the node (determined by
    170                                 * Suff_FindDeps and opaque to everyone
    171                                 * but the Suff module) */
     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) */
    172168} GNode;
    173169
     
    175171 * Manifest constants
    176172 */
    177 #define NILGNODE        ((GNode *) NIL)
     173#define NILGNODE        ((GNode *) NIL)
    178174
    179175/*
     
    186182 * righthand side...
    187183 */
    188 #define OP_DEPENDS      0x00000001  /* Execution of commands depends on
    189                                      * kids (:) */
    190 #define OP_FORCE        0x00000002  /* Always execute commands (!) */
    191 #define OP_DOUBLEDEP    0x00000004  /* Execution of commands depends on kids
    192                                      * per line (::) */
    193 #define OP_OPMASK       (OP_DEPENDS|OP_FORCE|OP_DOUBLEDEP)
    194 
    195 #define OP_OPTIONAL     0x00000008  /* Don't care if the target doesn't
    196                                      * exist and can't be created */
    197 #define OP_USE          0x00000010  /* Use associated commands for parents */
    198 #define OP_EXEC         0x00000020  /* Target is never out of date, but always
    199                                      * execute commands anyway. Its time
    200                                      * doesn't matter, so it has none...sort
    201                                      * of */
    202 #define OP_IGNORE       0x00000040  /* Ignore errors when creating the node */
    203 #define OP_PRECIOUS     0x00000080  /* Don't remove the target when
    204                                      * interrupted */
    205 #define OP_SILENT       0x00000100  /* Don't echo commands when executed */
    206 #define OP_MAKE         0x00000200  /* Target is a recurrsive make so its
    207                                      * commands should always be executed when
    208                                      * it is out of date, regardless of the
    209                                      * state of the -n or -t flags */
    210 #define OP_JOIN         0x00000400  /* Target is out-of-date only if any of its
    211                                      * children was out-of-date */
    212 #define OP_INVISIBLE    0x00004000  /* The node is invisible to its parents.
    213                                      * I.e. it doesn't show up in the parents's
    214                                      * local variables. */
    215 #define OP_NOTMAIN      0x00008000  /* The node is exempt from normal 'main
    216                                      * target' processing in parse.c */
    217 #define OP_PHONY        0x00010000  /* Not a file target; run always */
     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 */
    218214/* Attributes applied by PMake */
    219 #define OP_TRANSFORM    0x80000000  /* The node is a transformation rule */
     215#define OP_TRANSFORM    0x80000000  /* The node is a transformation rule */
    220216#ifdef USE_ARCHIVES
    221 #define OP_MEMBER       0x40000000  /* Target is a member of an archive */
    222 #define OP_LIB          0x20000000  /* Target is a library */
    223 #define OP_ARCHV        0x10000000  /* Target is an archive construct */
    224 #endif
    225 #define OP_HAS_COMMANDS 0x08000000  /* Target has all the commands it should.
    226                                      * Used when parsing to catch multiple
    227                                      * commands for a target */
    228 #define OP_SAVE_CMDS    0x04000000  /* Saving commands on .END (Compat) */
    229 #define OP_DEPS_FOUND   0x02000000  /* Already processed by Suff_FindDeps */
     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 */
    230226
    231227/*
     
    233229 * object of a dependency operator
    234230 */
    235 #define OP_NOP(t)       (((t) & OP_OPMASK) == 0x00000000)
     231#define OP_NOP(t)       (((t) & OP_OPMASK) == 0x00000000)
    236232
    237233/*
     
    243239 * a NIL pointer will be returned.
    244240 */
    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 */
    247243
    248244/*
     
    255251 * schemes allocate in powers of two.
    256252 */
    257 #define MAKE_BSIZE              256     /* starting size for expandable buffers */
     253#define MAKE_BSIZE              256     /* starting size for expandable buffers */
    258254
    259255/*
     
    266262 * Str_Concat returns.
    267263 */
    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 */
    271267
    272268/*
     
    275271 * as the first argument to Parse_Error.
    276272 */
    277 #define PARSE_WARNING   2
    278 #define PARSE_FATAL     1
     273#define PARSE_WARNING   2
     274#define PARSE_FATAL     1
    279275
    280276/*
    281277 * Values returned by Cond_Eval.
    282278 */
    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 */
    286282
    287283/*
    288284 * Definitions for the "local" variables. Used only for clarity.
    289285 */
    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 */
    295291#ifdef KMK
    296292#define PARENTS           "^"   /* Parent of this target (if any) (long name .PARENTS) */
    297293#endif
    298294#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 */
    301297#endif
    302298
     
    311307 * Global Variables
    312308 */
    313 extern Lst      create;         /* The list of target names specified on the
    314                                 * command line. used to resolve #if
    315                                 * make(...) statements */
    316 extern Lst      dirSearchPath;  /* The list of directories to search when
    317                                 * looking for targets */
    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;       /* True if should print no commands */
    322 extern Boolean  beVerbose;      /* True if should print extra cruft */
    323 extern Boolean  noExecute;      /* True if should execute nothing */
    324 extern Boolean  allPrecious;    /* True if every target is precious */
    325 extern Boolean  keepgoing;      /* True if should continue on unaffected
    326                                 * portions of the graph when have an error
    327                                 * in one portion */
    328 extern Boolean  touchFlag;      /* TRUE if targets should just be 'touched'
    329                                 * if out of date. Set by the -t flag */
    330 extern Boolean  usePipes;       /* TRUE if should capture the output of
    331                                 * subshells by means of pipes. Otherwise it
    332                                 * is routed to temporary files from which it
    333                                 * is retrieved when the shell exits */
    334 extern Boolean  queryFlag;      /* TRUE if we aren't supposed to really make
    335                                 * anything, just see if the targets are out-
    336                                 * of-date */
    337 
    338 extern Boolean  checkEnvFirst;  /* TRUE if environment should be searched for
    339                                 * all variables before the global context */
    340 extern Lst      envFirstVars;   /* List of specific variables for which the
    341                                 * environment should be searched before the
    342                                 * global context */
    343 
    344 extern GNode    *DEFAULT;       /* .DEFAULT rule */
    345 
    346 extern GNode    *VAR_GLOBAL;    /* Variables defined in a global context, e.g
    347                                 * in the Makefile itself */
    348 extern GNode    *VAR_CMD;       /* Variables defined on the command line */
    349 extern char     var_Error[];    /* Value returned by Var_Parse when an error
    350                                 * is encountered. It actually points to
    351                                 * an empty string, so naive callers needn't
    352                                 * worry about it. */
    353 
    354 extern time_t   now;            /* The time at the start of this whole
    355                                 * process */
    356 
    357 extern Boolean  oldVars;        /* Do old-style variable substitution */
    358 
    359 extern Lst      sysIncPath;     /* The system include path. */
     309extern Lst      create;         /* The list of target names specified on the
     310                                * command line. used to resolve #if
     311                                * make(...) statements */
     312extern Lst      dirSearchPath;  /* The list of directories to search when
     313                                * looking for targets */
     314
     315extern Boolean  compatMake;     /* True if we are make compatible */
     316extern Boolean  ignoreErrors;   /* True if should ignore all errors */
     317extern Boolean  beSilent;       /* True if should print no commands */
     318extern Boolean  beVerbose;      /* True if should print extra cruft */
     319extern Boolean  noExecute;      /* True if should execute nothing */
     320extern Boolean  allPrecious;    /* True if every target is precious */
     321extern Boolean  keepgoing;      /* True if should continue on unaffected
     322                                * portions of the graph when have an error
     323                                * in one portion */
     324extern Boolean  touchFlag;      /* TRUE if targets should just be 'touched'
     325                                * if out of date. Set by the -t flag */
     326extern 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 */
     330extern Boolean  queryFlag;      /* TRUE if we aren't supposed to really make
     331                                * anything, just see if the targets are out-
     332                                * of-date */
     333
     334extern Boolean  checkEnvFirst;  /* TRUE if environment should be searched for
     335                                * all variables before the global context */
     336extern Lst      envFirstVars;   /* List of specific variables for which the
     337                                * environment should be searched before the
     338                                * global context */
     339
     340extern GNode    *DEFAULT;       /* .DEFAULT rule */
     341
     342extern GNode    *VAR_GLOBAL;    /* Variables defined in a global context, e.g
     343                                * in the Makefile itself */
     344extern GNode    *VAR_CMD;       /* Variables defined on the command line */
     345extern 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
     350extern time_t   now;            /* The time at the start of this whole
     351                                * process */
     352
     353extern Boolean  oldVars;        /* Do old-style variable substitution */
     354
     355extern Lst      sysIncPath;     /* The system include path. */
    360356
    361357/*
    362358 * debug control:
    363  *      There is one bit per module.  It is up to the module what debug
    364  *      information to print.
     359 *      There is one bit per module.  It is up to the module what debug
     360 *      information to print.
    365361 */
    366362extern int debug;
    367363#ifdef USE_ARCHIVES
    368 #define DEBUG_ARCH      0x0001
    369 #endif
    370 #define DEBUG_COND      0x0002
    371 #define DEBUG_DIR       0x0004
    372 #define DEBUG_GRAPH1    0x0008
    373 #define DEBUG_GRAPH2    0x0010
    374 #define DEBUG_JOB       0x0020
    375 #define DEBUG_MAKE      0x0040
    376 #define DEBUG_SUFF      0x0080
    377 #define DEBUG_TARG      0x0100
    378 #define DEBUG_VAR       0x0200
    379 #define DEBUG_FOR       0x0400
    380 #define DEBUG_LOUD      0x0800
     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
    381377#define DEBUG_PARSE     0x8000 /*kso*/
    382378
    383379/*#ifdef __STDC__*/
    384380#if defined(__STDC__) || defined(__IBMC__)
    385 #define CONCAT(a,b)     a##b
     381#define CONCAT(a,b)     a##b
    386382#else
    387 #define I(a)            a
    388 #define CONCAT(a,b)     I(a)b
     383#define I(a)            a
     384#define CONCAT(a,b)     I(a)b
    389385#endif /* __STDC__ */
    390386
    391387
    392388
    393 #define DEBUG(module)   (debug & CONCAT(DEBUG_,module))
     389#define DEBUG(module)   (debug & CONCAT(DEBUG_,module))
    394390#define ISDOT(c) ((c)[0] == '.' && (((c)[1] == '\0') || ((c)[1] == '/')))
    395391#define ISDOTDOT(c) ((c)[0] == '.' && ISDOT(&((c)[1])))
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette