summaryrefslogtreecommitdiff
path: root/build/make_exports.awk
diff options
context:
space:
mode:
authoraaron <aaron@13f79535-47bb-0310-9956-ffa450edef68>2001-10-15 22:56:55 +0000
committeraaron <aaron@13f79535-47bb-0310-9956-ffa450edef68>2001-10-15 22:56:55 +0000
commitd2ff617f22549f3e39730644f70bfcc747d65d1b (patch)
tree14166416c5fd6f9bbbbb2a752cf67cb919c3e4ff /build/make_exports.awk
parent781f9e920f872c39895a693b81117eb353609033 (diff)
downloadlibapr-d2ff617f22549f3e39730644f70bfcc747d65d1b.tar.gz
Various changes toward the goal of AIX shared library builds:
Scripts migrated from httpd-2.0 for building exports.c and export_vars.h (make_exports.awk and make_var_export.awk). Removed obsolete script (make_export.awk). Used Victor's CPP rules from httpd-2.0 to create apr.exp list of exported symbols (for AIX) from the export.c and export_vars.h files. export.lo is then created for programs (like httpd) that need to link against a stub library so that the symbols will be available to all DSOs. Reviewed by: Victor J. Orlikowski git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@62425 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'build/make_exports.awk')
-rw-r--r--build/make_exports.awk129
1 files changed, 129 insertions, 0 deletions
diff --git a/build/make_exports.awk b/build/make_exports.awk
new file mode 100644
index 000000000..b50768125
--- /dev/null
+++ b/build/make_exports.awk
@@ -0,0 +1,129 @@
+
+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) {
+ if (!index(symbol, "#")) {
+ push("const void *ap_hack_" symbol " = (const void *)" symbol ";")
+ scope_used[scope] = 1
+ }
+}
+
+/^[ \t]*AP[RU]?_DECLARE[^(]*[(][^)]*[)]([^ ]* )*[^(]+[(]/ {
+ sub("[ \t]*AP[RU]?_DECLARE[^(]*[(][^)]*[)][ \t]*", "")
+ sub("[(].*", "")
+ sub("([^ ]* (^([ \t]*[(])))+", "")
+
+ add_symbol($0)
+ next
+}
+
+/^[ \t]*AP_DECLARE_HOOK[^(]*[(][^)]*[)]/ {
+ split($0, args, ",")
+ symbol = args[2]
+ sub("^[ \t]+", "", symbol)
+ sub("[ \t]+$", "", symbol)
+
+ add_symbol("ap_hook_" symbol)
+ add_symbol("ap_hook_get_" symbol)
+ add_symbol("ap_run_" symbol)
+ 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
+}
+
+