7b025babb35d2e055de3ce7744c0a92558af4cd5
[com/asn1c.git] / libasn1compiler / asn1c_fdeps.h
1 #ifndef ASN1C_FDEPS_H
2 #define ASN1C_FDEPS_H
3
4 typedef struct {
5     char *filename;
6     int lineno;
7     int column;
8 } asn1c_dep_filename;
9
10
11 /*
12  * Format:
13  * <observed-name> [<dependent-name> ...]
14  */
15 typedef struct {
16     asn1c_dep_filename **deps;
17     size_t deps_count;
18 } asn1c_dep_chain;
19
20 /*
21  * A single dependency chain, marked with the usage tag and activation tag.
22  */
23 typedef struct {
24     enum asn1c_dep_section {
25         FDEP_IGNORE = 0,              /* Section is not used */
26         FDEP_DEFAULT = (1 << 1),      /* Default dependency list */
27         FDEP_REFERRED = (1 << 2),     /* Dynamic list of dependencies */
28         FDEP_CONVERTER = (1 << 3),    /* Name of the file with int main() */
29         FDEP_COMMON_FILES = (1 << 4), /* Section for mandatory dependencies */
30         FDEP_CODEC_OER = (1 << 5),    /* Use contents only if -gen-OER */
31         FDEP_CODEC_PER = (1 << 6),    /* Use contents only if -gen-PER */
32     } section;                        /* Some file refers to it */
33
34     /* Whether this chain is alive and has to be present in the output */
35     struct {
36         int active;
37         char *by;
38     } activated;
39
40     asn1c_dep_chain *chain;
41 } asn1c_tagged_dep_chain;
42
43 typedef struct {
44     asn1c_tagged_dep_chain **chains;
45     size_t chains_count;
46 } asn1c_dep_chainset;
47
48 asn1c_dep_chainset *asn1c_read_file_dependencies(arg_t *arg,
49                                                  const char *datadir);
50
51 /* Data may be a filename or an "#include <>" string. */
52 void asn1c_activate_dependency(asn1c_dep_chainset *deps, const char *data,
53                                const char *by);
54
55 asn1c_dep_chain *asn1c_deps_flatten(const asn1c_dep_chainset *deps,
56                                     enum asn1c_dep_section);
57
58 void asn1c_dep_chain_free(asn1c_dep_chain *);
59 void asn1c_dep_chainset_free(asn1c_dep_chainset *);
60
61 #endif  /* ASN1C_FDEPS_H */