split Makefile.am.sample into Makefile.am.example and Makefile.am.libasncodecs
diff --git a/libasn1compiler/asn1c_save.c b/libasn1compiler/asn1c_save.c
index 3ce7d48..f507444 100644
--- a/libasn1compiler/asn1c_save.c
+++ b/libasn1compiler/asn1c_save.c
@@ -45,42 +45,15 @@
static const char *generate_pdu_C_definition(void);
static void asn1c__cleanup_pdu_type(void);
-int
-asn1c_save_compiled_output(arg_t *arg, const char *datadir,
- int argc, int optc, char **argv) {
- asn1c_fdeps_t *deps = 0;
+static int
+asn1c__save_library_makefile(arg_t *arg, const asn1c_fdeps_t *deps, const char *datadir, const char *makefile_name) {
asn1c_fdeps_t *dlist;
asn1p_module_t *mod;
- FILE *mkf; /* Makefile.am.sample */
- int i;
+ FILE *mkf;
- deps = asn1c_read_file_dependencies(arg, datadir);
- if(!deps && datadir) {
- WARNING("Cannot read file-dependencies information "
- "from %s\n", datadir);
- }
-
- TQ_FOR(mod, &(arg->asn->modules), mod_next) {
- TQ_FOR(arg->expr, &(mod->members), next) {
- if(asn1_lang_map[arg->expr->meta_type]
- [arg->expr->expr_type].type_cb) {
- if(asn1c_dump_streams(arg, deps, optc, argv))
- return -1;
- }
- }
- }
-
- /*
- * Dump out the Makefile template and the rest of the support code.
- */
- if((arg->flags & A1C_PRINT_COMPILED)
- || (arg->flags & A1C_OMIT_SUPPORT_CODE)) {
- return 0; /* Finished */
- }
-
- mkf = asn1c_open_file("Makefile.am", ".sample", 0);
+ mkf = asn1c_open_file(makefile_name, "", 0);
if(mkf == NULL) {
- perror("Makefile.am.sample");
+ perror(makefile_name);
return -1;
}
@@ -107,9 +80,9 @@
safe_fprintf(mkf, "\n\n");
/*
- * Move necessary skeleton files and add them to Makefile.am.sample.
+ * Move necessary skeleton files and add them to Makefile.am.targets.
*/
- dlist = asn1c_deps_makelist(deps);
+ dlist = asn1c_deps_flatten(deps);
if(dlist) {
char buf[8129];
char *dir_end;
@@ -120,8 +93,7 @@
dir_end = buf + dlen;
*dir_end++ = '/';
- for(i = 0; i < dlist->el_count; i++) {
- char *what_class; /* MODULE or CONVERTER */
+ for(int i = 0; i < dlist->el_count; i++) {
char *what_kind; /* HEADERS or SOURCES */
char *fname = dlist->elements[i]->filename;
char *dotH;
@@ -135,73 +107,157 @@
return -1;
}
- /* MODULE data versus CONVERTER data */
- switch(dlist->elements[i]->usage) {
- case FDEP_CONVERTER: what_class = "CONVERTER"; break;
- default: what_class= "MODULE"; break;
+ /* no CONVERTER data in Makefile.am.targets */
+ if(dlist->elements[i]->usage != FDEP_CONVERTER) {
+ /* HEADERS versus SOURCES */
+ dotH = strrchr(fname, 'h');
+ if(dotH && fname<dotH && dotH[-1] == '.' && !dotH[1])
+ what_kind = "HEADERS";
+ else
+ what_kind = "SOURCES";
+ safe_fprintf(mkf, "ASN_MODULE_%s+=%s\n",
+ what_kind, fname);
}
-
- /* HEADERS versus SOURCES */
- dotH = strrchr(fname, 'h');
- if(dotH && fname<dotH && dotH[-1] == '.' && !dotH[1])
- what_kind = "HEADERS";
- else
- what_kind = "SOURCES";
- safe_fprintf(mkf, "ASN_%s_%s+=%s\n",
- what_class, what_kind, fname);
}
- asn1c_deps_freelist(deps);
+ asn1c_deps_freelist(dlist);
+ }
+
+ safe_fprintf(
+ mkf,
+ "\n"
+ "ASN_MODULE_CFLAGS=%s%s",
+ (arg->flags & A1C_GEN_OER) ? "" : "-DASN_DISABLE_OER_SUPPORT ",
+ (arg->flags & A1C_GEN_PER) ? "" : "-DASN_DISABLE_PER_SUPPORT ");
+
+ safe_fprintf(
+ mkf,
+ "\n\n"
+ "lib_LTLIBRARIES=libasncodec.la\n"
+ "libasncodec_la_SOURCES="
+ "$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)\n"
+ "libasncodec_la_CFLAGS=$(ASN_MODULE_CFLAGS)\n");
+ fclose(mkf);
+ safe_fprintf(stderr, "Generated Makefile.am.targets\n");
+
+ return 0;
+}
+
+static int
+asn1c__save_example_makefile(arg_t *arg, const asn1c_fdeps_t *deps,
+ const char *makefile_name,
+ const char *library_makefile_name, int argc,
+ char **argv) {
+ asn1c_fdeps_t *dlist;
+ FILE *mkf;
+
+ mkf = asn1c_open_file(makefile_name, "", 0);
+ if(mkf == NULL) {
+ perror(makefile_name);
+ return -1;
+ }
+ safe_fprintf(
+ mkf,
+ "include %s\n\n"
+ "TARGET = converter-example\n"
+ "ASN_LIBRARY=libasncodec.a\n"
+ "LIBS += -lm\n"
+ "CFLAGS += $(ASN_MODULE_CFLAGS) %s%s-I.\n"
+ "ASN_CONVERTER_SOURCES = ",
+ library_makefile_name,
+ (arg->flags & A1C_PDU_TYPE) ? generate_pdu_C_definition() : "",
+ need_to_generate_pdu_collection(arg) ? "-DASN_PDU_COLLECTION " : "");
+
+ dlist = asn1c_deps_flatten(deps);
+ if(dlist) {
+ /* only CONVERTER data in the makefile */
+ for(int i = 0; i < dlist->el_count; i++) {
+ if(dlist->elements[i]->usage == FDEP_CONVERTER) {
+ safe_fprintf(mkf, "\\\n\t%s", dlist->elements[i]->filename);
+ }
+ }
asn1c_deps_freelist(dlist);
}
if(need_to_generate_pdu_collection(arg)) {
- safe_fprintf(mkf, "ASN_CONVERTER_SOURCES+=pdu_collection.c\n");
+ safe_fprintf(mkf, "\\\n\tpdu_collection.c");
if(generate_pdu_collection_file(arg))
return -1;
}
- safe_fprintf(
- mkf,
- "\n\n"
- "lib_LTLIBRARIES=libsomething.la\n"
- "libsomething_la_SOURCES="
- "$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)\n"
- "\n"
- "# This file may be used as an input for make(3)\n"
- "# Remove the lines below to convert it into a pure .am file\n"
- "TARGET = progname\n"
- "LIBS += -lm\n"
- "CPPFLAGS += %s%s%s%s-I.\n"
- "OBJS=${ASN_MODULE_SOURCES:.c=.o}"
- " ${ASN_CONVERTER_SOURCES:.c=.o}\n"
- "\nall: $(TARGET)\n"
- "\n$(TARGET): ${OBJS}"
- "\n\t$(CC) $(CFLAGS) $(CPPFLAGS) -o $(TARGET) ${OBJS} $(LDFLAGS) $(LIBS)\n"
- "\n.SUFFIXES:"
- "\n.SUFFIXES: .c .o\n"
- "\n.c.o:"
- "\n\t$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<\n"
- "\nclean:"
- "\n\trm -f $(TARGET)"
- "\n\trm -f $(OBJS)\n"
- "\nregen: regenerate-from-asn1-source\n"
- "\nregenerate-from-asn1-source:\n\t",
- (arg->flags & A1C_GEN_OER) ? "" : "-DASN_DISABLE_OER_SUPPORT ",
- (arg->flags & A1C_GEN_PER) ? "" : "-DASN_DISABLE_PER_SUPPORT ",
- (arg->flags & A1C_PDU_TYPE) ? generate_pdu_C_definition() : "",
- need_to_generate_pdu_collection(arg) ? "-DASN_PDU_COLLECTION " : "");
+ safe_fprintf(
+ mkf,
+ "\n\nall: $(TARGET)\n"
+ "\n$(TARGET): $(ASN_LIBRARY) $(ASN_CONVERTER_SOURCES:.c=.o)"
+ "\n\t$(CC) $(CFLAGS) $(CPPFLAGS) -o $(TARGET) $(ASN_CONVERTER_SOURCES:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS)\n"
+ "\n$(ASN_LIBRARY): $(ASN_MODULE_SOURCES:.c=.o)"
+ "\n\t$(AR) rcs $@ $^\n"
+ "\n.SUFFIXES:"
+ "\n.SUFFIXES: .c .o\n"
+ "\n.c.o:"
+ "\n\t$(CC) $(CFLAGS) -o $@ -c $<\n"
+ "\nclean:"
+ "\n\trm -f $(TARGET) $(ASN_LIBRARY)"
+ "\n\trm -f $(ASN_MODULE_SOURCES:.c=.o) $(ASN_CONVERTER_SOURCES:.c=.o)\n"
+ "\nregen: regenerate-from-asn1-source\n"
+ "\nregenerate-from-asn1-source:\n\t");
- for(i = 0; i < argc; i++)
+ for(int i = 0; i < argc; i++)
safe_fprintf(mkf, "%s%s", i ? " " : "", argv[i]);
safe_fprintf(mkf, "\n\n");
fclose(mkf);
- safe_fprintf(stderr, "Generated Makefile.am.sample\n");
+ safe_fprintf(stderr, "Generated %s\n", makefile_name);
+ return 0;
+}
- asn1c__cleanup_pdu_type();
+int
+asn1c_save_compiled_output(arg_t *arg, const char *datadir,
+ int argc, int optc, char **argv) {
+ asn1c_fdeps_t *deps = 0;
+ int ret = -1;
- return 0;
+ do {
+ asn1p_module_t *mod;
+
+ deps = asn1c_read_file_dependencies(arg, datadir);
+ if(!deps && datadir) {
+ WARNING(
+ "Cannot read file-dependencies information "
+ "from %s\n",
+ datadir);
+ }
+
+ TQ_FOR(mod, &(arg->asn->modules), mod_next) {
+ TQ_FOR(arg->expr, &(mod->members), next) {
+ if(asn1_lang_map[arg->expr->meta_type][arg->expr->expr_type]
+ .type_cb) {
+ if(asn1c_dump_streams(arg, deps, optc, argv)) break;
+ }
+ }
+ }
+
+ /*
+ * Dump out the Makefile template and the rest of the support code.
+ */
+ if((arg->flags & A1C_PRINT_COMPILED)
+ || (arg->flags & A1C_OMIT_SUPPORT_CODE)) {
+ ret = 0; /* Success */
+ break;
+ }
+
+ ret = asn1c__save_library_makefile(arg, deps, datadir,
+ "Makefile.am.libasncodec");
+ if(ret) break;
+ ret = asn1c__save_example_makefile(arg, deps, "Makefile.am.example",
+ "Makefile.am.libasncodec", argc, argv);
+ if(ret) break;
+ } while(0);
+
+ asn1c_deps_freelist(deps);
+ asn1c__cleanup_pdu_type();
+
+ return ret;
}
/*