main shrub/shinobi / src / posix.h
 1#ifndef POSIX_H
 2#define POSIX_H
 3
 4#include "shinobi.h"
 5#include "internal.h"
 6
 7/* https://pubs.opengroup.org/onlinepubs/9799919799/ */
 8
 9/* single suffix rule like .sh */
10struct SingleSufRule {
11	char *from;
12	struct RecipeList recipes;
13	int builtin;
14};
15
16struct SuffixList {
17	char **v;
18	size_t n;
19};
20
21/* normal suffix like .c.o */
22struct SufRule {
23	char *from;
24	char *to;
25	struct RecipeList recipes;
26	int builtin;
27};
28
29/*holds all stored suffix rules*/
30struct SufRules {
31	struct SingleSufRule *singlesuf;
32	size_t nsinglesuf;
33	struct SufRule *sufs;
34	size_t nsufs;
35	struct SuffixList active;
36};
37
38struct PatRules;
39
40int issinglesuf(const char *s, char **from);
41int issuf(const char *s, char **from, char **to);
42void seedenv(struct Env *env, int posix, int envoverride, enum ShinMode mode);
43void imprules(struct SufRules *rules, enum ShinMode mode);
44int imppatrules(struct PatRules *rules, enum ShinMode mode);
45int collectsufrule(struct SufRules *rules, const struct RuleNode *rule, int builtin);
46int instsufrule(const struct SufRules *rules,
47                const struct Graph *graph,
48                struct Target *t,
49                struct EvalCtx *ctx,
50                int allow_builtin);
51int issufrule(const struct RuleNode *rule);
52void addsufs(struct SuffixList *list, const struct StrList *sufs);
53void clearsufs(struct SuffixList *list);
54void freesufrules(struct SufRules *rules);
55
56#endif