/* * Include header for make * * $Header$ */ #ifndef uchar #define uchar unsigned char #endif #include #define bool int #define TRUE (1) #define FALSE (0) #define DEFN1 "makefile" /* Default names */ #define DEFN2 "Makefile" #define LZ (2048) /* Line size */ /* * A name. This represents a file, either to be made, or existant */ struct name { struct name * n_next; /* Next in the list of names */ char * n_name; /* Called */ struct line * n_line; /* Dependencies */ time_t n_time; /* Modify time of this name */ uchar n_flag; /* Info about the name */ }; #define N_MARK 0x01 /* For cycle check */ #define N_DONE 0x02 /* Name looked at */ #define N_TARG 0x04 /* Name is a target */ #define N_PREC 0x08 /* Target is precious */ #define N_DOUBLE 0x10 /* Double colon target */ /* * Definition of a target line. */ struct line { struct line * l_next; /* Next line (for ::) */ struct depend * l_dep; /* Dependents for this line */ struct cmd * l_cmd; /* Commands for this line */ }; /* * List of dependents for a line */ struct depend { struct depend * d_next; /* Next dependent */ struct name * d_name; /* Name of dependent */ }; /* * Commands for a line */ struct cmd { struct cmd * c_next; /* Next command line */ char * c_cmd; /* Command line */ }; /* * Macro storage */ struct macro { struct macro * m_next; /* Next variable */ char * m_name; /* Called ... */ char * m_val; /* Its value */ uchar m_flag; /* Infinite loop check */ uchar m_prio; /* 5 levels: - 0 for internal ($(CC), etc) - 1 (reserved for environment) - 2 for makefile - 3 for command line - 4 for special ($*,$<, etc) */ }; extern char * myname; extern struct name namehead; extern struct macro * macrohead; extern struct name * firstname; extern bool silent; extern bool ignore; extern bool rules; extern bool dotouch; extern bool quest; extern bool domake; extern char str1[]; extern char str2[]; extern int lineno; void circh(void); char * getmacro(char* name); struct macro * setmacro(char* name, char* val, int prio); void input(FILE *fd); void error(char *msg, char* a1); void expand(char *str); void fatal(char* msg, char* value); bool dyndep(struct name *np); int make(struct name *np, int level); void modtime(struct name *np); struct name *newname(char *name); struct depend *newdep(struct name *np, struct depend *dp); struct cmd *newcmd(char *str, struct cmd *cp); void newline(struct name *np, struct depend *dp, struct cmd *cp, int flag); void prt(void); char *suffix(char *name); void touch(struct name *np); void makerules(void); char *gettok(char **ptr); void precious(void); bool mgetline(char* str, FILE* fd);