support for regen target


git-svn-id: https://asn1c.svn.sourceforge.net/svnroot/asn1c/trunk@756 59561ff5-6e30-0410-9f3c-9617f08c8826
diff --git a/asn1c/asn1c.c b/asn1c/asn1c.c
index 5792430..cf951af 100644
--- a/asn1c/asn1c.c
+++ b/asn1c/asn1c.c
@@ -277,7 +277,8 @@
 	 * 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 cded3dd..444d2c7 100644
--- a/libasn1compiler/asn1c_save.c
+++ b/libasn1compiler/asn1c_save.c
@@ -13,10 +13,12 @@
 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 @@
 		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 @@
 		"\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 @@
 	fprintf(fp_h, "#include <asn_application.h>\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 @@
 	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);
+		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 8d4b1f5..26c36a3 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 107303d..31a4227 100644
--- a/libasn1compiler/asn1compiler.c
+++ b/libasn1compiler/asn1compiler.c
@@ -8,7 +8,8 @@
 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 @@
 	/*
 	 * 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 9db02ca..4fa4a9f 100644
--- a/libasn1compiler/asn1compiler.h
+++ b/libasn1compiler/asn1compiler.h
@@ -52,6 +52,7 @@
 /*
  * 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 */