blob: 7b025babb35d2e055de3ce7744c0a92558af4cd5 [file] [log] [blame]
#ifndef ASN1C_FDEPS_H
#define ASN1C_FDEPS_H
typedef struct {
char *filename;
int lineno;
int column;
} asn1c_dep_filename;
/*
* Format:
* <observed-name> [<dependent-name> ...]
*/
typedef struct {
asn1c_dep_filename **deps;
size_t deps_count;
} asn1c_dep_chain;
/*
* A single dependency chain, marked with the usage tag and activation tag.
*/
typedef struct {
enum asn1c_dep_section {
FDEP_IGNORE = 0, /* Section is not used */
FDEP_DEFAULT = (1 << 1), /* Default dependency list */
FDEP_REFERRED = (1 << 2), /* Dynamic list of dependencies */
FDEP_CONVERTER = (1 << 3), /* Name of the file with int main() */
FDEP_COMMON_FILES = (1 << 4), /* Section for mandatory dependencies */
FDEP_CODEC_OER = (1 << 5), /* Use contents only if -gen-OER */
FDEP_CODEC_PER = (1 << 6), /* Use contents only if -gen-PER */
} section; /* Some file refers to it */
/* Whether this chain is alive and has to be present in the output */
struct {
int active;
char *by;
} activated;
asn1c_dep_chain *chain;
} asn1c_tagged_dep_chain;
typedef struct {
asn1c_tagged_dep_chain **chains;
size_t chains_count;
} asn1c_dep_chainset;
asn1c_dep_chainset *asn1c_read_file_dependencies(arg_t *arg,
const char *datadir);
/* Data may be a filename or an "#include <>" string. */
void asn1c_activate_dependency(asn1c_dep_chainset *deps, const char *data,
const char *by);
asn1c_dep_chain *asn1c_deps_flatten(const asn1c_dep_chainset *deps,
enum asn1c_dep_section);
void asn1c_dep_chain_free(asn1c_dep_chain *);
void asn1c_dep_chainset_free(asn1c_dep_chainset *);
#endif /* ASN1C_FDEPS_H */