Lev Walkin | c6cac8e | 2016-03-14 02:57:07 -0700 | [diff] [blame] | 1 | #ifndef ASN1C_FDEPS_H |
| 2 | #define ASN1C_FDEPS_H |
Lev Walkin | acd9f8b | 2004-08-19 13:29:03 +0000 | [diff] [blame] | 3 | |
Lev Walkin | 7d5d930 | 2017-11-13 22:17:20 -0800 | [diff] [blame] | 4 | typedef struct { |
| 5 | char *filename; |
| 6 | int lineno; |
| 7 | int column; |
| 8 | } asn1c_dep_filename; |
Lev Walkin | acd9f8b | 2004-08-19 13:29:03 +0000 | [diff] [blame] | 9 | |
Lev Walkin | acd9f8b | 2004-08-19 13:29:03 +0000 | [diff] [blame] | 10 | |
Lev Walkin | 7d5d930 | 2017-11-13 22:17:20 -0800 | [diff] [blame] | 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; |
Lev Walkin | acd9f8b | 2004-08-19 13:29:03 +0000 | [diff] [blame] | 19 | |
Lev Walkin | 7d5d930 | 2017-11-13 22:17:20 -0800 | [diff] [blame] | 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); |
Lev Walkin | acd9f8b | 2004-08-19 13:29:03 +0000 | [diff] [blame] | 50 | |
| 51 | /* Data may be a filename or an "#include <>" string. */ |
Lev Walkin | 7d5d930 | 2017-11-13 22:17:20 -0800 | [diff] [blame] | 52 | void asn1c_activate_dependency(asn1c_dep_chainset *deps, const char *data, |
| 53 | const char *by); |
Lev Walkin | acd9f8b | 2004-08-19 13:29:03 +0000 | [diff] [blame] | 54 | |
Lev Walkin | 7d5d930 | 2017-11-13 22:17:20 -0800 | [diff] [blame] | 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 *); |
Lev Walkin | acd9f8b | 2004-08-19 13:29:03 +0000 | [diff] [blame] | 60 | |
Lev Walkin | c6cac8e | 2016-03-14 02:57:07 -0700 | [diff] [blame] | 61 | #endif /* ASN1C_FDEPS_H */ |