Permalink
Browse files

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.

Submitted by:	Sander Striker <striker@apache.org>


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@89647 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information...
1 parent d27ba67 commit f4fd9696ff3fd2db2903c95cc41ed8ae14afd026 Ryan Bloom committed Jul 21, 2001
Showing with 132 additions and 23 deletions.
  1. +6 −0 CHANGES
  2. +120 −0 build/make_exports.awk
  3. +6 −23 server/Makefile.in
View
@@ -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
View
@@ -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
+}
+
+
View
@@ -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 \

0 comments on commit f4fd969

Please sign in to comment.