home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 529b.lha / BMake_v1.1 / depend.h < prev    next >
C/C++ Source or Header  |  1991-07-02  |  3KB  |  132 lines

  1. /*    depend.h
  2.  *    (c) Copyright 1991 by Ben Eng, All Rights Reserved
  3.  *
  4.  */
  5.  
  6. #include <time.h>
  7.  
  8. #ifndef MAXLINE
  9. #define MAXLINE 1024
  10. #endif
  11.  
  12. #ifndef MAXSUFFIX
  13. #define MAXSUFFIX 16
  14. #endif
  15.  
  16. #ifndef MAX_MACRONAME
  17. #define MAX_MACRONAME 256
  18. #endif
  19.  
  20. #ifndef FNCALLS
  21. #define FNCALLS 1
  22. #endif
  23.  
  24. #define PATMATCH_CHAR '%'
  25. #define DEFAULT_TARGET ".DEFAULT"
  26.  
  27. struct target {
  28.     struct Node node;
  29.     struct List dependlist;
  30.     struct List commandlist;
  31.     struct List *alternate; /* if not OWNER of the commandlist */
  32.     time_t mtime;
  33.     long flags;
  34.     int line_number;
  35.     char name[ 2 ];
  36. };
  37.  
  38. /* target flags */
  39. #define TF_ADDED    0x00000001
  40. #define TF_OWNER    0x00000002
  41. #define TF_PATTERN    0x00000004
  42. #define TF_DBLCOLON 0x00000008
  43. #define TF_PHONY    0x00000010
  44. #define TF_BUILTIN    0x40000000
  45. #define TF_MADE        0x80000000
  46.  
  47. struct depend {
  48.     struct Node node;
  49.     char name[ 2 ];
  50. };
  51.  
  52. struct command {
  53.     struct Node node;
  54.     long flags;
  55.     char cmd[ 2 ];
  56. };
  57.  
  58. #define CF_IGNORE    0x00000001
  59. #define CF_NOECHO    0x00000002
  60.  
  61. struct patternrule {
  62.     struct Node node;
  63.     char tar_pat[ MAXPATHNAME ];
  64.     char dep_pat[ MAXPATHNAME ];
  65.     struct target *targ;
  66. };
  67.  
  68. struct macro {
  69.     struct Node node;
  70.     long flags;
  71.     char *name;    /* dynamic */
  72.     char *expansion; /* dynamic */
  73. };
  74.  
  75. struct fncall {
  76.     char *name;
  77.     int (*call)(struct macro *, char *);
  78. };
  79.  
  80. /* macro flags */
  81. #define MF_EXPANDED    0x00000001
  82. #define MF_SIMPLE    0x00000002
  83. #define MF_ADDED    0x80000000
  84.  
  85. extern struct target *default_target;
  86.  
  87. int getline( char *buf, int sz, FILE *in );
  88.  
  89. struct target *find_target( char *targetname );
  90. struct target *new_target( char *targetname );
  91. int delete_target( struct target *targ );
  92. void delete_targetlist( struct List *list );
  93. void set_default_target( struct target *targ );
  94.  
  95. struct depend *new_depend( char *dependname );
  96. int delete_depend( struct depend *dep );
  97. void delete_dependlist( struct List *list );
  98.  
  99. struct command *new_command( char *cmd );
  100. int delete_command( struct command *cmd );
  101. void delete_commandlist( struct List *list );
  102.  
  103. int pattern_match( char *pattern, char *cmpstr );
  104. struct patternrule *find_patternrule( char *dep_pat, char *tar_pat );
  105. struct patternrule *new_patternrule( char *dep_pat, char *tar_pat );
  106. int delete_patternrule( struct patternrule *rule );
  107. void delete_patternlist( struct List *list );
  108. int map_to_pattern( char *name, char *from_pat, char *to_pat, char *string );
  109. struct patternrule *add_pattern_rule( struct target *tar );
  110. struct patternrule *add_suffix_targets( char *suf );
  111.  
  112. struct target *find_macro( char *macroname );
  113. struct macro *new_macro( char *name, char *expansion );
  114. struct macro *set_macro( char *name, char *expansion );
  115. void set_target_macros( char *tarname, char *depname );
  116. int delete_macro( struct macro *mac );
  117. void delete_macrolist( struct List *list );
  118.  
  119. struct fncall *find_fncall( char *name );
  120. void shift_string_left( char *string, int shift );
  121. int expand_macros( char *dest, char *src, int maxlen );
  122.  
  123. void dump_all( void );
  124.  
  125. struct target *process_targetline( char *line, struct List *cmdlist );
  126. struct macro *process_macroline( char *line );
  127.  
  128. time_t nowtime( void );
  129. void touch( const char *filename );
  130.  
  131. int recipe( const char *goalname, struct List *cmdlist );
  132.