blob: 7b025babb35d2e055de3ce7744c0a92558af4cd5 [file] [log] [blame]
Lev Walkinc6cac8e2016-03-14 02:57:07 -07001#ifndef ASN1C_FDEPS_H
2#define ASN1C_FDEPS_H
Lev Walkinacd9f8b2004-08-19 13:29:03 +00003
Lev Walkin7d5d9302017-11-13 22:17:20 -08004typedef struct {
5 char *filename;
6 int lineno;
7 int column;
8} asn1c_dep_filename;
Lev Walkinacd9f8b2004-08-19 13:29:03 +00009
Lev Walkinacd9f8b2004-08-19 13:29:03 +000010
Lev Walkin7d5d9302017-11-13 22:17:20 -080011/*
12 * Format:
13 * <observed-name> [<dependent-name> ...]
14 */
15typedef struct {
16 asn1c_dep_filename **deps;
17 size_t deps_count;
18} asn1c_dep_chain;
Lev Walkinacd9f8b2004-08-19 13:29:03 +000019
Lev Walkin7d5d9302017-11-13 22:17:20 -080020/*
21 * A single dependency chain, marked with the usage tag and activation tag.
22 */
23typedef 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
43typedef struct {
44 asn1c_tagged_dep_chain **chains;
45 size_t chains_count;
46} asn1c_dep_chainset;
47
48asn1c_dep_chainset *asn1c_read_file_dependencies(arg_t *arg,
49 const char *datadir);
Lev Walkinacd9f8b2004-08-19 13:29:03 +000050
51/* Data may be a filename or an "#include <>" string. */
Lev Walkin7d5d9302017-11-13 22:17:20 -080052void asn1c_activate_dependency(asn1c_dep_chainset *deps, const char *data,
53 const char *by);
Lev Walkinacd9f8b2004-08-19 13:29:03 +000054
Lev Walkin7d5d9302017-11-13 22:17:20 -080055asn1c_dep_chain *asn1c_deps_flatten(const asn1c_dep_chainset *deps,
56 enum asn1c_dep_section);
57
58void asn1c_dep_chain_free(asn1c_dep_chain *);
59void asn1c_dep_chainset_free(asn1c_dep_chainset *);
Lev Walkinacd9f8b2004-08-19 13:29:03 +000060
Lev Walkinc6cac8e2016-03-14 02:57:07 -070061#endif /* ASN1C_FDEPS_H */