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