diff options
-rw-r--r-- | CHANGES | 6 | ||||
-rw-r--r-- | build/make_exports.awk | 120 | ||||
-rw-r--r-- | server/Makefile.in | 29 |
3 files changed, 132 insertions, 23 deletions
@@ -1,5 +1,11 @@ Changes with Apache 2.0.22-dev + *) Improve the exports generating awk script. In the past, we had + work around problems in the awk script by avoiding some #if and + #ifdefs. This has bitten us many times in generating the exports.c + file. This improvement allows corrects the header file parsing. + [Sander Striker <striker@apache.org>] + Changes with Apache 2.0.21 *) Introduce connection sub-pools into ab. Truncating the lifetime diff --git a/build/make_exports.awk b/build/make_exports.awk new file mode 100644 index 0000000000..27fd631eb9 --- /dev/null +++ b/build/make_exports.awk @@ -0,0 +1,120 @@ + +BEGIN { + printf("/*\n") + printf(" * THIS FILE WAS AUTOGENERATED BY make_exports.awk\n") + printf(" *\n") + printf(" * This is an ugly hack that needs to be here, so\n") + printf(" * that libtool will link all of the APR functions\n") + printf(" * into server regardless of whether the base server\n") + printf(" * uses them.\n") + printf(" */\n") + printf("\n") + printf("#define CORE_PRIVATE\n") + printf("\n") + + for (i = 1; i < ARGC; i++) { + file = ARGV[i] + sub("([^/]*[/])*", "", file) + printf("#include \"%s\"\n", file) + } + + printf("\n") + printf("const void *ap_ugly_hack = NULL;\n") + printf("\n") + + TYPE_NORMAL = 0 + TYPE_HEADER = 1 + + stackptr = 0 +} + +function push(line) { + stack[stackptr] = line + stackptr++ +} + +function do_output() { + printf("/*\n") + printf(" * %s\n", FILENAME) + printf(" */\n") + + for (i = 0; i < stackptr; i++) { + printf("%s\n", stack[i]) + } + + stackptr = 0 + + printf("\n"); +} + +function enter_scope(type) { + scope++ + scope_type[scope] = type + scope_stack[scope] = stackptr + delete scope_used[scope] +} + +function leave_scope() { + used = scope_used[scope] + + if (!used) + stackptr = scope_stack[scope] + + scope-- + if (used) { + scope_used[scope] = 1 + + if (!scope) + do_output() + } +} + +function add_symbol(symbol) { + idx = index(symbol, "#") + + if (!idx) { + push("const void *ap_hack_" symbol " = (const void *)" symbol ";") + scope_used[scope] = 1 + } +} + +/^[ \t]*AP[RU]?_DECLARE[^(]*[(][^)]*[)]([^ ]* )*[^(]+[(]/ { + sub("[ \t]*AP[RU]?_DECLARE[^(]*[(][^)]*[)]", ""); + sub("[(].*", ""); + sub("^[ \t]+", ""); + sub("([^ ]* ^([ \t]*[(]))*", ""); + + add_symbol($0) + next +} + +/^#[ \t]*if(ndef| !defined[(])([^_]*_)*H/ { + enter_scope(TYPE_HEADER) + next +} + +/^#[ \t]*if([n]?def)? / { + enter_scope(TYPE_NORMAL) + push($0) + next +} + +/^#[ \t]*endif/ { + if (scope_type[scope] == TYPE_NORMAL) + push($0) + + leave_scope() + next +} + +/^#[ \t]*else/ { + push($0) + next +} + +/^#[ \t]*elif/ { + push($0) + next +} + + diff --git a/server/Makefile.in b/server/Makefile.in index 0d9864ded7..b6cf8e1182 100644 --- a/server/Makefile.in +++ b/server/Makefile.in @@ -14,11 +14,10 @@ LTLIBRARY_SOURCES = \ util_script.c util_md5.c util_cfgtree.c util_ebcdic.c \ rfc1413.c connection.c listen.c \ mpm_common.c util_charset.c util_debug.c util_xml.c \ - util_filter.c exports.c buildmark.c scoreboard.c \ + util_filter.c exports.c buildmark.c scoreboard.c \ error_bucket.c protocol.c core.c request.c -TARGETS = delete-exports $(LTLIBRARY_NAME) $(CORE_IMPLIB_FILE) export_vars.h \ - httpd.exp +TARGETS = $(LTLIBRARY_NAME) $(CORE_IMPLIB_FILE) export_vars.h httpd.exp include $(top_srcdir)/build/rules.mk include $(top_srcdir)/build/library.mk @@ -32,28 +31,12 @@ test_char.h: gen_test_char util.lo: test_char.h -EXPORT_FILES = $(top_builddir)/srclib/apr/apr.exports \ - $(top_builddir)/srclib/apr-util/aprutil.exports \ - $(TARGET_EXPORTS) - -delete-exports: - @if test -f $(TARGET_EXPORTS); then \ - headers="`find $(top_srcdir)/include/*.h -newer $(TARGET_EXPORTS)`" ; \ - if test -n "$$headers"; then \ - echo Found newer headers. Will rebuild $(TARGET_EXPORTS). ; \ - echo rm -f $(TARGET_EXPORTS) ; \ - rm -f $(TARGET_EXPORTS) ; \ - fi \ - fi - - -$(TARGET_EXPORTS): - $(AWK) -f $(top_srcdir)/srclib/apr/build/make_export.awk \ - $(top_srcdir)/include/*.h \ - $(top_srcdir)/os/$(OS_DIR)/*.h > $@ +EXPORT_FILES = $(top_srcdir)/include/*.h \ + $(top_srcdir)/srclib/apr/include/*.h \ + $(top_srcdir)/srclib/apr-util/include/*.h exports.c: $(EXPORT_FILES) - (cat $(EXPORT_FILES) | $(top_srcdir)/build/buildexports.sh $(top_srcdir)) > $@ + $(AWK) -f $(top_srcdir)/build/make_exports.awk $(EXPORT_FILES) > $@ export_vars.h: $(AWK) -f $(top_srcdir)/build/make_var_export.awk \ |