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};
14
15struct SuffixList {
16 char **v;
17 size_t n;
18};
19
20/* normal suffix like .c.o */
21struct SufRule {
22 char *from;
23 char *to;
24 struct RecipeList recipes;
25};
26
27/*holds all stored suffix rules*/
28struct SufRules {
29 struct SingleSufRule *singlesuf;
30 size_t nsinglesuf;
31 struct SufRule *sufs;
32 size_t nsufs;
33 struct SuffixList active;
34};
35
36struct PatRules;
37
38int issinglesuf(const char *s, char **from);
39int issuf(const char *s, char **from, char **to);
40void seedenv(struct Env *env, int posix, int envoverride, enum ShinMode mode);
41void imprules(struct SufRules *rules, int posix, enum ShinMode mode);
42int imppatrules(struct PatRules *rules, enum ShinMode mode);
43int collectsufrule(struct SufRules *rules, const struct RuleNode *rule);
44int instsufrule(const struct SufRules *rules,
45 const struct Graph *graph,
46 struct Target *t,
47 struct EvalCtx *ctx);
48int issufrule(const struct RuleNode *rule);
49void addsufs(struct SuffixList *list, const struct StrList *sufs);
50void clearsufs(struct SuffixList *list);
51void freesufrules(struct SufRules *rules);
52
53#endif