]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Improve the exports generating awk script. In the past, we had
authorRyan Bloom <rbb@apache.org>
Sat, 21 Jul 2001 06:34:54 +0000 (06:34 +0000)
committerRyan Bloom <rbb@apache.org>
Sat, 21 Jul 2001 06:34:54 +0000 (06:34 +0000)
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

CHANGES
build/make_exports.awk [new file with mode: 0644]
server/Makefile.in

diff --git a/CHANGES b/CHANGES
index 4b5b3f80085c1c2f40ff2ec72c78d37870b6b683..675125a51944b19ce782137a73077c3a67cd0a5f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -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 (file)
index 0000000..27fd631
--- /dev/null
@@ -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
+}
+
+
index 0d9864ded79a33ffabe978b84dcc975d9bd9edb7..b6cf8e11829d0d30b70949ed9e235d10d8c934d0 100644 (file)
@@ -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 \