-fno-include-deps
diff --git a/ChangeLog b/ChangeLog
index fc03b75..a19179f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/asn1c/asn1c.c b/asn1c/asn1c.c
index b068abc..5792430 100644
--- a/asn1c/asn1c.c
+++ b/asn1c/asn1c.c
@@ -87,6 +87,8 @@
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 @@
" -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"
diff --git a/libasn1compiler/asn1c_save.c b/libasn1compiler/asn1c_save.c
index 0f3ed04..cded3dd 100644
--- a/libasn1compiler/asn1c_save.c
+++ b/libasn1compiler/asn1c_save.c
@@ -224,21 +224,22 @@
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 @@
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)
diff --git a/libasn1compiler/asn1compiler.h b/libasn1compiler/asn1compiler.h
index d073517..9db02ca 100644
--- a/libasn1compiler/asn1compiler.h
+++ b/libasn1compiler/asn1compiler.h
@@ -43,6 +43,10 @@
* 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,
};
/*