1#include <stddef.h>
2#include <time.h>
3
4typedef struct target Target;
5
6enum {
7 NOEXPORT,
8 EXPORT,
9};
10
11enum {
12 UNDEF,
13 ENVIRON,
14 CMDLINE,
15 INTERNAL,
16 MAKEFILE,
17 MAKEFLAGS,
18};
19
20struct loc {
21 char *fname;
22 int lineno;
23};
24
25struct action {
26 char *line;
27 struct loc loc;
28};
29
30struct target {
31 char *name;
32 char *target;
33 char *req;
34 time_t stamp;
35 int defined;
36
37 int ndeps;
38 struct target **deps;
39
40 int nactions;
41 struct action *actions;
42
43 struct target *next;
44};
45
46void *emalloc(size_t);
47void *erealloc(void *, size_t);
48char *estrdup(char *);
49
50void dumprules(void);
51void dumpmacros(void);
52
53char *expandstring(char *, Target *, struct loc *);
54void addtarget(char *, int);
55void inject(char *);
56int build(char *);
57int hash(char *);
58int parse(char *);
59void debug(char *, ...);
60void error(char *, ...);
61void warning(char *, ...);
62void adddep(char *, char *);
63void addrule(char *, struct action *, int);
64void freeloc(struct loc *);
65
66char *getmacro(char *);
67void setmacro(char *, char *, int, int);
68
69/* system depdendant */
70void killchild(void);
71time_t stamp(char *);
72int launch(char *, int);
73int putenv(char *);
74void exportvar(char *, char *);
75int is_dir(char *);
76
77/* main.c */
78extern int kflag, dflag, nflag, iflag, sflag;
79extern int eflag, pflag, tflag, qflag;
80extern int exitstatus;
81
82#ifdef SIGABRT
83extern volatile sig_atomic_t stop;
84#endif
85
86/* defaults.c */
87extern char defaults[];