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
/examples/*/*.c
/examples/*/*.h
/examples/*/*dump
/examples/*/lib*.a
/examples/*/.tmp.*
/examples/*/Makefile.am.libasncodec
!/examples/*/Makefile
!/examples/*/config.h
......
#!/bin/sh
#
# 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.
#
# The information which is necessary for this script is passed from the
# 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" \
......@@ -33,20 +30,21 @@ else
asn1c ${CMDOPTS} || exit $?
fi
if test ! -f Makefile.am.sample ; then
echo "Makefile.am.sample is missing"
if test ! -f Makefile.am.example ; then
echo "Makefile.am.example is missing"
exit 1
fi
EXTRA_CPPFLAGS="-DJUNKTEST -D_DEFAULT_SOURCE ${CPPFLAGS}"
test -f config.h && EXTRA_CPPFLAGS="-DHAVE_CONFIG_H ${EXTRA_CPPFLAGS}"
test -n "$TITLE" && EXTRA_CPPFLAGS="-DASN_CONVERTER_TITLE=\"$TITLE\" ${EXTRA_CPPFLAGS}"
EXTRA_CFLAGS="-DJUNKTEST -D_DEFAULT_SOURCE"
test -f config.h && EXTRA_CFLAGS="-DHAVE_CONFIG_H ${EXTRA_CFLAGS}"
test -n "$TITLE" && EXTRA_CFLAGS="-DASN_CONVERTER_TITLE=\"$TITLE\" ${EXTRA_CFLAGS}"
set -x
cat Makefile.am.sample \
| sed -e "s/^CPPFLAGS += /CPPFLAGS += ${EXTRA_CPPFLAGS} /" \
cat Makefile.am.example \
| 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/progname/${PROGNAME}/" \
> Makefile.$$
set +x
......@@ -62,7 +60,6 @@ set +x
echo " ASN1MODULES=\"${ASN1MODULES}\" \\"
echo " ASN1PDU=${ASN1PDU} \\"
echo " PROGNAME=${PROGNAME} \\"
echo " CPPFLAGS=\"${CPPFLAGS}\" \\"
echo " $0"
echo
echo 'check: ${TARGET} check-ber check-xer check-oer check-per'
......@@ -152,12 +149,12 @@ set +x
echo ' rm -f $(ASN_MODULE_SOURCES)'
echo ' rm -f $(ASN_MODULE_HEADERS)'
echo ' rm -f $(ASN_CONVERTER_SOURCES) $(ASN_CONVERTER_HEADERS)'
echo " rm -f Makefile.am.sample"
echo " rm -f Makefile.am.example"
) >> Makefile.$$
set -x
mv Makefile.$$ Makefile || exit $?
rm Makefile.am.sample || exit $?
rm Makefile.am.example || exit $?
set +x
echo
......
......@@ -178,10 +178,9 @@ asn1c_dep_add(asn1c_fdeps_t *deps, asn1c_fdeps_t *d) {
}
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 *d;
int i;
if(!deps) {
errno = EINVAL;
......@@ -198,11 +197,10 @@ asn1c_deps_makelist(asn1c_fdeps_t *deps) {
}
}
for(i = 0; i < deps->el_count; i++) {
int j;
d = asn1c_deps_makelist(deps->elements[i]);
for(int i = 0; i < deps->el_count; i++) {
d = asn1c_deps_flatten(deps->elements[i]);
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])) {
d->elements[j] = 0;
}
......
......@@ -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,
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);
#endif /* ASN1C_FDEPS_H */
......@@ -45,42 +45,15 @@ static void pdu_collection_print_unused_types(arg_t *arg);
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;
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 */
}
FILE *mkf;
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 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir,
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 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir,
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 @@ asn1c_save_compiled_output(arg_t *arg, const char *datadir,
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_%s_%s+=%s\n",
what_class, what_kind, fname);
safe_fprintf(mkf, "ASN_MODULE_%s+=%s\n",
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\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) $(CPPFLAGS) -o $@ -c $<\n"
"\n\t$(CC) $(CFLAGS) -o $@ -c $<\n"
"\nclean:"
"\n\trm -f $(TARGET)"
"\n\trm -f $(OBJS)\n"
"\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",
(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 " : "");
"\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;
}
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();
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