From 2c874fedc45153fe11e267e5f8e3619347761ac2 Mon Sep 17 00:00:00 2001 From: vlm Date: Sat, 5 Mar 2005 00:50:53 +0000 Subject: [PATCH] support for regen target git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@756 59561ff5-6e30-0410-9f3c-9617f08c8826 --- asn1c/asn1c.c | 3 ++- libasn1compiler/asn1c_save.c | 19 +++++++++++++------ libasn1compiler/asn1c_save.h | 3 ++- libasn1compiler/asn1compiler.c | 5 +++-- libasn1compiler/asn1compiler.h | 3 ++- 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/asn1c/asn1c.c b/asn1c/asn1c.c index 5792430d..cf951af1 100644 --- a/asn1c/asn1c.c +++ b/asn1c/asn1c.c @@ -277,7 +277,8 @@ main(int ac, char **av) { * Compile the ASN.1 tree into a set of source files * of another language. */ - if(asn1_compile(asn, skeletons_dir, asn1_compiler_flags)) { + if(asn1_compile(asn, skeletons_dir, asn1_compiler_flags, + ac + optind, av - optind)) { exit(EX_SOFTWARE); } diff --git a/libasn1compiler/asn1c_save.c b/libasn1compiler/asn1c_save.c index cded3dd0..444d2c74 100644 --- a/libasn1compiler/asn1c_save.c +++ b/libasn1compiler/asn1c_save.c @@ -13,10 +13,12 @@ static int asn1c_copy_over(arg_t *arg, char *path); static int identical_files(const char *fname1, const char *fname2); int -asn1c_save_compiled_output(arg_t *arg, const char *datadir) { +asn1c_save_compiled_output(arg_t *arg, const char *datadir, + int argc, char **argv) { asn1c_fdeps_t *deps = 0; - FILE *mkf; asn1c_fdeps_t *dlist; + FILE *mkf; + int i; deps = asn1c_read_file_dependencies(arg, datadir); if(!deps && datadir) { @@ -78,7 +80,6 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir) { char buf[8129]; char *dir_end; size_t dlen = strlen(datadir); - int i; assert(dlen < (sizeof(buf) / 2 - 2)); memcpy(buf, datadir, dlen); @@ -126,8 +127,14 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir) { "\nclean:" "\n\trm -f $(TARGET)" "\n\trm -f $(OBJS)\n" - "\n" + "\nregen: regenerate-from-asn1-source\n" + "\nregenerate-from-asn1-source:\n\t" ); + + for(i = 0; i < argc; i++) + fprintf(mkf, "%s%s", i ? " " : "", argv[i]); + fprintf(mkf, "\n\n"); + fclose(mkf); fprintf(stderr, "Generated Makefile.am.sample\n"); @@ -225,7 +232,7 @@ asn1c_save_streams(arg_t *arg, asn1c_fdeps_t *deps) { fprintf(fp_h, "#include \n"); #define SAVE_STREAM(fp, idx, msg, actdep) do { \ - if(TQ_FIRST(&(cs->destination[idx].chunks)) && msg) \ + 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); \ @@ -248,7 +255,7 @@ asn1c_save_streams(arg_t *arg, asn1c_fdeps_t *deps) { fprintf(fp_c, "#include \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); + SAVE_STREAM(fp_c, OT_POST_INCLUDE, "", 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/asn1c_save.h b/libasn1compiler/asn1c_save.h index 8d4b1f5e..26c36a34 100644 --- a/libasn1compiler/asn1c_save.h +++ b/libasn1compiler/asn1c_save.h @@ -1,6 +1,7 @@ #ifndef _ASN1C_SAVE_H_ #define _ASN1C_SAVE_H_ -int asn1c_save_compiled_output(arg_t *arg, const char *datadir); +int asn1c_save_compiled_output(arg_t *arg, const char *datadir, + int argc, char **argv); #endif /* _ASN1C_SAVE_H_ */ diff --git a/libasn1compiler/asn1compiler.c b/libasn1compiler/asn1compiler.c index 107303db..31a42278 100644 --- a/libasn1compiler/asn1compiler.c +++ b/libasn1compiler/asn1compiler.c @@ -8,7 +8,8 @@ static int asn1c_compile_expr(arg_t *arg); static int asn1c_attach_streams(asn1p_expr_t *expr); int -asn1_compile(asn1p_t *asn, const char *datadir, enum asn1c_flags flags) { +asn1_compile(asn1p_t *asn, const char *datadir, enum asn1c_flags flags, + int argc, char **argv) { arg_t arg_s; arg_t *arg = &arg_s; int ret; @@ -56,7 +57,7 @@ asn1_compile(asn1p_t *asn, const char *datadir, enum asn1c_flags flags) { /* * Save or print out the compiled result. */ - if(asn1c_save_compiled_output(arg, datadir)) + if(asn1c_save_compiled_output(arg, datadir, argc, argv)) return -1; return 0; diff --git a/libasn1compiler/asn1compiler.h b/libasn1compiler/asn1compiler.h index 9db02ca7..4fa4a9f0 100644 --- a/libasn1compiler/asn1compiler.h +++ b/libasn1compiler/asn1compiler.h @@ -52,6 +52,7 @@ enum asn1c_flags { /* * Compile the ASN.1 specification. */ -int asn1_compile(asn1p_t *asn, const char *datadir, enum asn1c_flags); +int asn1_compile(asn1p_t *asn, const char *datadir, enum asn1c_flags, + int argc, char **argv); #endif /* ASN1_COMPILER_H */