Commit 8a85b36d authored by Lev Walkin's avatar Lev Walkin

split Makefile.am.sample into Makefile.am.example and Makefile.am.libasncodecs

parent 478819d6
...@@ -60,7 +60,9 @@ doc/docsrc/*.xdv ...@@ -60,7 +60,9 @@ doc/docsrc/*.xdv
/examples/*/*.c /examples/*/*.c
/examples/*/*.h /examples/*/*.h
/examples/*/*dump /examples/*/*dump
/examples/*/lib*.a
/examples/*/.tmp.* /examples/*/.tmp.*
/examples/*/Makefile.am.libasncodec
!/examples/*/Makefile !/examples/*/Makefile
!/examples/*/config.h !/examples/*/config.h
......
#!/bin/sh #!/bin/sh
# #
# This script attempts to compile the given ASN.1 specification and then # This script attempts to compile the given ASN.1 specification and then
# transforms the resulting Makefile.am.sample tailored to that specification # transforms the resulting Makefile.am.example tailored to that specification
# into a customized Makefile. # into a customized Makefile.
# #
# The information which is necessary for this script is passed from the # The information which is necessary for this script is passed from the
# Makefile which is going to be replaced with an updated Makefile. # Makefile which is going to be replaced with an updated Makefile.
# This is called "boot-strapping" and is frequently the source of inside jokes.
#
# $Id$
# #
if test -z "$ASN1PDU" \ if test -z "$ASN1PDU" \
...@@ -33,20 +30,21 @@ else ...@@ -33,20 +30,21 @@ else
asn1c ${CMDOPTS} || exit $? asn1c ${CMDOPTS} || exit $?
fi fi
if test ! -f Makefile.am.sample ; then if test ! -f Makefile.am.example ; then
echo "Makefile.am.sample is missing" echo "Makefile.am.example is missing"
exit 1 exit 1
fi fi
EXTRA_CPPFLAGS="-DJUNKTEST -D_DEFAULT_SOURCE ${CPPFLAGS}" EXTRA_CFLAGS="-DJUNKTEST -D_DEFAULT_SOURCE"
test -f config.h && EXTRA_CPPFLAGS="-DHAVE_CONFIG_H ${EXTRA_CPPFLAGS}" test -f config.h && EXTRA_CFLAGS="-DHAVE_CONFIG_H ${EXTRA_CFLAGS}"
test -n "$TITLE" && EXTRA_CPPFLAGS="-DASN_CONVERTER_TITLE=\"$TITLE\" ${EXTRA_CPPFLAGS}" test -n "$TITLE" && EXTRA_CFLAGS="-DASN_CONVERTER_TITLE=\"$TITLE\" ${EXTRA_CFLAGS}"
set -x set -x
cat Makefile.am.sample \ cat Makefile.am.example \
| sed -e "s/^CPPFLAGS += /CPPFLAGS += ${EXTRA_CPPFLAGS} /" \ | sed -e "s/^include /-include /" \
| sed -e "s/^TARGET = converter-example/TARGET = ${PROGNAME}/" \
| sed -e "s/^CFLAGS += /CFLAGS += ${EXTRA_CFLAGS} /" \
| sed -e "s/^all: /all: maybe-wip-pause ${ASN1PDU}.c /" \ | sed -e "s/^all: /all: maybe-wip-pause ${ASN1PDU}.c /" \
| sed -e "s/progname/${PROGNAME}/" \
> Makefile.$$ > Makefile.$$
set +x set +x
...@@ -62,7 +60,6 @@ set +x ...@@ -62,7 +60,6 @@ set +x
echo " ASN1MODULES=\"${ASN1MODULES}\" \\" echo " ASN1MODULES=\"${ASN1MODULES}\" \\"
echo " ASN1PDU=${ASN1PDU} \\" echo " ASN1PDU=${ASN1PDU} \\"
echo " PROGNAME=${PROGNAME} \\" echo " PROGNAME=${PROGNAME} \\"
echo " CPPFLAGS=\"${CPPFLAGS}\" \\"
echo " $0" echo " $0"
echo echo
echo 'check: ${TARGET} check-ber check-xer check-oer check-per' echo 'check: ${TARGET} check-ber check-xer check-oer check-per'
...@@ -152,12 +149,12 @@ set +x ...@@ -152,12 +149,12 @@ set +x
echo ' rm -f $(ASN_MODULE_SOURCES)' echo ' rm -f $(ASN_MODULE_SOURCES)'
echo ' rm -f $(ASN_MODULE_HEADERS)' echo ' rm -f $(ASN_MODULE_HEADERS)'
echo ' rm -f $(ASN_CONVERTER_SOURCES) $(ASN_CONVERTER_HEADERS)' echo ' rm -f $(ASN_CONVERTER_SOURCES) $(ASN_CONVERTER_HEADERS)'
echo " rm -f Makefile.am.sample" echo " rm -f Makefile.am.example"
) >> Makefile.$$ ) >> Makefile.$$
set -x set -x
mv Makefile.$$ Makefile || exit $? mv Makefile.$$ Makefile || exit $?
rm Makefile.am.sample || exit $? rm Makefile.am.example || exit $?
set +x set +x
echo echo
......
...@@ -178,10 +178,9 @@ asn1c_dep_add(asn1c_fdeps_t *deps, asn1c_fdeps_t *d) { ...@@ -178,10 +178,9 @@ asn1c_dep_add(asn1c_fdeps_t *deps, asn1c_fdeps_t *d) {
} }
asn1c_fdeps_t * asn1c_fdeps_t *
asn1c_deps_makelist(asn1c_fdeps_t *deps) { asn1c_deps_flatten(const asn1c_fdeps_t *deps) {
asn1c_fdeps_t *dlist; asn1c_fdeps_t *dlist;
asn1c_fdeps_t *d; asn1c_fdeps_t *d;
int i;
if(!deps) { if(!deps) {
errno = EINVAL; errno = EINVAL;
...@@ -198,11 +197,10 @@ asn1c_deps_makelist(asn1c_fdeps_t *deps) { ...@@ -198,11 +197,10 @@ asn1c_deps_makelist(asn1c_fdeps_t *deps) {
} }
} }
for(i = 0; i < deps->el_count; i++) { for(int i = 0; i < deps->el_count; i++) {
int j; d = asn1c_deps_flatten(deps->elements[i]);
d = asn1c_deps_makelist(deps->elements[i]);
assert(!d->filename); assert(!d->filename);
for(j = 0; j < d->el_count; j++) { for(int j = 0; j < d->el_count; j++) {
if(asn1c_dep_add(dlist, d->elements[j])) { if(asn1c_dep_add(dlist, d->elements[j])) {
d->elements[j] = 0; d->elements[j] = 0;
} }
......
...@@ -25,7 +25,7 @@ asn1c_fdeps_t *asn1c_read_file_dependencies(arg_t *arg, const char *datadir); ...@@ -25,7 +25,7 @@ asn1c_fdeps_t *asn1c_read_file_dependencies(arg_t *arg, const char *datadir);
int asn1c_activate_dependency(asn1c_fdeps_t *deps, asn1c_fdeps_t *cur, int asn1c_activate_dependency(asn1c_fdeps_t *deps, asn1c_fdeps_t *cur,
const char *data); const char *data);
asn1c_fdeps_t *asn1c_deps_makelist(asn1c_fdeps_t *deps); asn1c_fdeps_t *asn1c_deps_flatten(const asn1c_fdeps_t *deps);
void asn1c_deps_freelist(asn1c_fdeps_t *deps); void asn1c_deps_freelist(asn1c_fdeps_t *deps);
#endif /* ASN1C_FDEPS_H */ #endif /* ASN1C_FDEPS_H */
...@@ -45,42 +45,15 @@ static void pdu_collection_print_unused_types(arg_t *arg); ...@@ -45,42 +45,15 @@ static void pdu_collection_print_unused_types(arg_t *arg);
static const char *generate_pdu_C_definition(void); static const char *generate_pdu_C_definition(void);
static void asn1c__cleanup_pdu_type(void); static void asn1c__cleanup_pdu_type(void);
int static int
asn1c_save_compiled_output(arg_t *arg, const char *datadir, asn1c__save_library_makefile(arg_t *arg, const asn1c_fdeps_t *deps, const char *datadir, const char *makefile_name) {
int argc, int optc, char **argv) {
asn1c_fdeps_t *deps = 0;
asn1c_fdeps_t *dlist; asn1c_fdeps_t *dlist;
asn1p_module_t *mod; asn1p_module_t *mod;
FILE *mkf; /* Makefile.am.sample */ FILE *mkf;
int i;
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) { if(mkf == NULL) {
perror("Makefile.am.sample"); perror(makefile_name);
return -1; return -1;
} }
...@@ -107,9 +80,9 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir, ...@@ -107,9 +80,9 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir,
safe_fprintf(mkf, "\n\n"); 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) { if(dlist) {
char buf[8129]; char buf[8129];
char *dir_end; char *dir_end;
...@@ -120,8 +93,7 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir, ...@@ -120,8 +93,7 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir,
dir_end = buf + dlen; dir_end = buf + dlen;
*dir_end++ = '/'; *dir_end++ = '/';
for(i = 0; i < dlist->el_count; i++) { for(int i = 0; i < dlist->el_count; i++) {
char *what_class; /* MODULE or CONVERTER */
char *what_kind; /* HEADERS or SOURCES */ char *what_kind; /* HEADERS or SOURCES */
char *fname = dlist->elements[i]->filename; char *fname = dlist->elements[i]->filename;
char *dotH; char *dotH;
...@@ -135,73 +107,157 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir, ...@@ -135,73 +107,157 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir,
return -1; return -1;
} }
/* MODULE data versus CONVERTER data */ /* no CONVERTER data in Makefile.am.targets */
switch(dlist->elements[i]->usage) { if(dlist->elements[i]->usage != FDEP_CONVERTER) {
case FDEP_CONVERTER: what_class = "CONVERTER"; break;
default: what_class= "MODULE"; break;
}
/* HEADERS versus SOURCES */ /* HEADERS versus SOURCES */
dotH = strrchr(fname, 'h'); dotH = strrchr(fname, 'h');
if(dotH && fname<dotH && dotH[-1] == '.' && !dotH[1]) if(dotH && fname<dotH && dotH[-1] == '.' && !dotH[1])
what_kind = "HEADERS"; what_kind = "HEADERS";
else else
what_kind = "SOURCES"; what_kind = "SOURCES";
safe_fprintf(mkf, "ASN_%s_%s+=%s\n", safe_fprintf(mkf, "ASN_MODULE_%s+=%s\n",
what_class, what_kind, fname); 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); asn1c_deps_freelist(dlist);
} }
if(need_to_generate_pdu_collection(arg)) { 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)) if(generate_pdu_collection_file(arg))
return -1; return -1;
} }
safe_fprintf( safe_fprintf(
mkf, mkf,
"\n\n" "\n\nall: $(TARGET)\n"
"lib_LTLIBRARIES=libsomething.la\n" "\n$(TARGET): $(ASN_LIBRARY) $(ASN_CONVERTER_SOURCES:.c=.o)"
"libsomething_la_SOURCES=" "\n\t$(CC) $(CFLAGS) $(CPPFLAGS) -o $(TARGET) $(ASN_CONVERTER_SOURCES:.c=.o) $(LDFLAGS) $(ASN_LIBRARY) $(LIBS)\n"
"$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)\n" "\n$(ASN_LIBRARY): $(ASN_MODULE_SOURCES:.c=.o)"
"\n" "\n\t$(AR) rcs $@ $^\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:"
"\n.SUFFIXES: .c .o\n" "\n.SUFFIXES: .c .o\n"
"\n.c.o:" "\n.c.o:"
"\n\t$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ -c $<\n" "\n\t$(CC) $(CFLAGS) -o $@ -c $<\n"
"\nclean:" "\nclean:"
"\n\trm -f $(TARGET)" "\n\trm -f $(TARGET) $(ASN_LIBRARY)"
"\n\trm -f $(OBJS)\n" "\n\trm -f $(ASN_MODULE_SOURCES:.c=.o) $(ASN_CONVERTER_SOURCES:.c=.o)\n"
"\nregen: regenerate-from-asn1-source\n" "\nregen: regenerate-from-asn1-source\n"
"\nregenerate-from-asn1-source:\n\t", "\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 " : "");
for(i = 0; i < argc; i++) for(int i = 0; i < argc; i++)
safe_fprintf(mkf, "%s%s", i ? " " : "", argv[i]); safe_fprintf(mkf, "%s%s", i ? " " : "", argv[i]);
safe_fprintf(mkf, "\n\n"); safe_fprintf(mkf, "\n\n");
fclose(mkf); fclose(mkf);
safe_fprintf(stderr, "Generated Makefile.am.sample\n"); safe_fprintf(stderr, "Generated %s\n", makefile_name);
return 0;
}
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;
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(); asn1c__cleanup_pdu_type();
return 0; return ret;
} }
/* /*
......
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