Commit b9b8b959 authored by Lev Walkin's avatar Lev Walkin

-fno-include-deps

parent 01633091
......@@ -3,11 +3,13 @@
* Released -fcompound-names to fix the name clashes in the code
produced by the asn1c.
* Released -fno-include-deps to avoid #including non-critical
external dependencies.
* Compiler is taught to produce compilable code for yet another class
of circular ASN.1 type references.
* X.693:8.3.4 prohibits anything but SignedNumber; fixed XER codec.
* Fixed ENUMERATED identifier to value conversion in XER.
Reported by <jacque.celaire@caramail.com>.
* Compiler is taught to produce compilable code for yet another class
of circular ASN.1 type references.
* If the compiled file contents are the same as in already existing
file (left from previous compilation), the old file is retained.
This prevents thrashing `make` dependencies if amount of changes in
......
......@@ -87,6 +87,8 @@ main(int ac, char **av) {
asn1_compiler_flags |= A1C_USE_NATIVE_TYPES;
} else if(strcmp(optarg, "no-constraints") == 0) {
asn1_compiler_flags |= A1C_NO_CONSTRAINTS;
} else if(strcmp(optarg, "no-include-deps") == 0) {
asn1_compiler_flags |= A1C_NO_INCLUDE_DEPS;
} else if(strcmp(optarg, "unnamed-unions") == 0) {
asn1_compiler_flags |= A1C_UNNAMED_UNIONS;
} else if(strcmp(optarg, "types88") == 0) {
......@@ -313,6 +315,7 @@ usage(const char *av0) {
" -fknown-extern-type=<name> Pretend this type is known\n"
" -fnative-types Use \"long\" instead of INTEGER_t whenever possible, etc.\n"
" -fno-constraints Do not generate constraint checking code\n"
" -fno-include-deps Do not generate courtesy #includes for dependencies\n"
" -funnamed-unions Enable unnamed unions in structures\n"
" -ftypes88 Pretend to support only ASN.1:1988 embedded types\n"
"\n"
......
......@@ -224,21 +224,22 @@ asn1c_save_streams(arg_t *arg, asn1c_fdeps_t *deps) {
fprintf(fp_h, "#include <asn_application.h>\n");
#define SAVE_STREAM(idx, msg, actdep) do { \
if(TQ_FIRST(&(cs->destination[idx].chunks))) \
fprintf(fp_h, "\n/* %s */\n", msg); \
#define SAVE_STREAM(fp, idx, msg, actdep) do { \
if(TQ_FIRST(&(cs->destination[idx].chunks)) && msg) \
fprintf(fp, "\n/* %s */\n", msg); \
TQ_FOR(ot, &(cs->destination[idx].chunks), next) { \
if(actdep) asn1c_activate_dependency(deps, 0, ot->buf); \
fwrite(ot->buf, ot->len, 1, fp_h); \
fwrite(ot->buf, ot->len, 1, fp); \
} \
} while(0)
SAVE_STREAM(OT_INCLUDES, "Including external dependencies", 1);
SAVE_STREAM(OT_DEPS, "Dependencies", 0);
SAVE_STREAM(OT_FWD_DECLS, "Forward declarations", 0);
SAVE_STREAM(OT_TYPE_DECLS, expr->Identifier, 0);
SAVE_STREAM(OT_FUNC_DECLS, "Implementation", 0);
SAVE_STREAM(OT_POST_INCLUDE, "Referred external types", 1);
SAVE_STREAM(fp_h, OT_INCLUDES, "Including external dependencies", 1);
SAVE_STREAM(fp_h, OT_DEPS, "Dependencies", 0);
SAVE_STREAM(fp_h, OT_FWD_DECLS, "Forward declarations", 0);
SAVE_STREAM(fp_h, OT_TYPE_DECLS, expr->Identifier, 0);
SAVE_STREAM(fp_h, OT_FUNC_DECLS,"Implementation", 0);
if(!(arg->flags & A1C_NO_INCLUDE_DEPS))
SAVE_STREAM(fp_h, OT_POST_INCLUDE, "Referred external types", 1);
fprintf(fp_h, "\n#ifdef __cplusplus\n}\n#endif\n\n"
"#endif\t/* _%s_H_ */\n",
......@@ -246,6 +247,8 @@ asn1c_save_streams(arg_t *arg, asn1c_fdeps_t *deps) {
fprintf(fp_c, "#include <asn_internal.h>\n\n");
fprintf(fp_c, "#include <%s.h>\n\n", expr->Identifier); /* Myself */
if(arg->flags & A1C_NO_INCLUDE_DEPS)
SAVE_STREAM(fp_c, OT_POST_INCLUDE, 0, 1);
TQ_FOR(ot, &(cs->destination[OT_CTABLES].chunks), next)
fwrite(ot->buf, ot->len, 1, fp_c);
TQ_FOR(ot, &(cs->destination[OT_CODE].chunks), next)
......
......@@ -43,6 +43,10 @@ enum asn1c_flags {
* Generate type_id_PR_member things identifiers of id_PR_member.
*/
A1C_COMPOUND_NAMES = 0x0100,
/*
* Do not generate courtesy #includes for external dependencies.
*/
A1C_NO_INCLUDE_DEPS = 0x0200,
};
/*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment