main 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};
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