Blame build/make_exports.awk

Packit 90a5c9
# Licensed to the Apache Software Foundation (ASF) under one or more
Packit 90a5c9
# contributor license agreements.  See the NOTICE file distributed with
Packit 90a5c9
# this work for additional information regarding copyright ownership.
Packit 90a5c9
# The ASF licenses this file to You under the Apache License, Version 2.0
Packit 90a5c9
# (the "License"); you may not use this file except in compliance with
Packit 90a5c9
# the License.  You may obtain a copy of the License at
Packit 90a5c9
#
Packit 90a5c9
#     http://www.apache.org/licenses/LICENSE-2.0
Packit 90a5c9
#
Packit 90a5c9
# Unless required by applicable law or agreed to in writing, software
Packit 90a5c9
# distributed under the License is distributed on an "AS IS" BASIS,
Packit 90a5c9
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 90a5c9
# See the License for the specific language governing permissions and
Packit 90a5c9
# limitations under the License.
Packit 90a5c9
Packit 90a5c9
BEGIN {
Packit 90a5c9
    printf("/*\n")
Packit 90a5c9
    printf(" * THIS FILE WAS AUTOGENERATED BY make_exports.awk\n")
Packit 90a5c9
    printf(" *\n")
Packit 90a5c9
    printf(" * This is an ugly hack that needs to be here, so\n")
Packit 90a5c9
    printf(" * that libtool will link all of the APR functions\n")
Packit 90a5c9
    printf(" * into server regardless of whether the base server\n")
Packit 90a5c9
    printf(" * uses them.\n")
Packit 90a5c9
    printf(" */\n")
Packit 90a5c9
    printf("\n")
Packit 90a5c9
    
Packit 90a5c9
    for (i = 1; i < ARGC; i++) {
Packit 90a5c9
        file = ARGV[i]
Packit 90a5c9
        sub("([^/]*[/])*", "", file)
Packit 90a5c9
        printf("#include \"%s\"\n", file)
Packit 90a5c9
    }
Packit 90a5c9
Packit 90a5c9
    printf("\n")
Packit 90a5c9
    printf("const void *ap_ugly_hack = NULL;\n")
Packit 90a5c9
    printf("\n")
Packit 90a5c9
    
Packit 90a5c9
    TYPE_NORMAL = 0
Packit 90a5c9
    TYPE_HEADER = 1
Packit 90a5c9
Packit 90a5c9
    stackptr = 0
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
function push(line) {
Packit 90a5c9
    stack[stackptr] = line
Packit 90a5c9
    stackptr++
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
function do_output() {
Packit 90a5c9
    printf("/*\n")
Packit 90a5c9
    printf(" * %s\n", FILENAME)
Packit 90a5c9
    printf(" */\n")
Packit 90a5c9
    
Packit 90a5c9
    for (i = 0; i < stackptr; i++) {
Packit 90a5c9
        printf("%s\n", stack[i])
Packit 90a5c9
    }
Packit 90a5c9
    
Packit 90a5c9
    stackptr = 0
Packit 90a5c9
Packit 90a5c9
    printf("\n");
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
function enter_scope(type) {
Packit 90a5c9
    scope++
Packit 90a5c9
    scope_type[scope] = type
Packit 90a5c9
    scope_stack[scope] = stackptr
Packit 90a5c9
    delete scope_used[scope]
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
function leave_scope() {
Packit 90a5c9
    used = scope_used[scope]
Packit 90a5c9
   
Packit 90a5c9
    if (!used)
Packit 90a5c9
        stackptr = scope_stack[scope]
Packit 90a5c9
Packit 90a5c9
    scope--
Packit 90a5c9
    if (used) {
Packit 90a5c9
        scope_used[scope] = 1
Packit 90a5c9
        
Packit 90a5c9
        if (!scope)
Packit 90a5c9
            do_output()
Packit 90a5c9
    }
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
function add_symbol(symbol) {
Packit 90a5c9
    if (!index(symbol, "#")) {
Packit 90a5c9
        push("const void *ap_hack_" symbol " = (const void *)" symbol ";")
Packit 90a5c9
        scope_used[scope] = 1
Packit 90a5c9
    }
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
/^[ \t]*AP[RU]?_(CORE_)?DECLARE[^(]*[(][^)]*[)]([^ ]* )*[^(]+[(]/ {
Packit 90a5c9
    sub("[ \t]*AP[RU]?_(CORE_)?DECLARE[^(]*[(][^)]*[)][ \t]*", "")
Packit 90a5c9
    sub("[(].*", "")
Packit 90a5c9
    sub("([^ ]* (^([ \t]*[(])))+", "")
Packit 90a5c9
Packit 90a5c9
    add_symbol($0)
Packit 90a5c9
    next
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
/^[ \t]*AP_DECLARE_HOOK[^(]*[(][^)]*/ {
Packit 90a5c9
    split($0, args, ",")
Packit 90a5c9
    symbol = args[2]
Packit 90a5c9
    sub("^[ \t]+", "", symbol)
Packit 90a5c9
    sub("[ \t]+$", "", symbol)
Packit 90a5c9
Packit 90a5c9
    add_symbol("ap_hook_" symbol)
Packit 90a5c9
    add_symbol("ap_hook_get_" symbol)
Packit 90a5c9
    add_symbol("ap_run_" symbol)
Packit 90a5c9
    next
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
/^[ \t]*APR_POOL_DECLARE_ACCESSOR[^(]*[(][^)]*[)]/ {
Packit 90a5c9
    sub("[ \t]*APR_POOL_DECLARE_ACCESSOR[^(]*[(]", "", $0)
Packit 90a5c9
    sub("[)].*$", "", $0)
Packit 90a5c9
    add_symbol("apr_" $0 "_pool_get")
Packit 90a5c9
    next
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
/^[ \t]*APR_DECLARE_INHERIT_SET[^(]*[(][^)]*[)]/ {
Packit 90a5c9
    sub("[ \t]*APR_DECLARE_INHERIT_SET[^(]*[(]", "", $0)
Packit 90a5c9
    sub("[)].*$", "", $0)
Packit 90a5c9
    add_symbol("apr_" $0 "_inherit_set")
Packit 90a5c9
    next
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
/^[ \t]*APR_DECLARE_INHERIT_UNSET[^(]*[(][^)]*[)]/ {
Packit 90a5c9
    sub("[ \t]*APR_DECLARE_INHERIT_UNSET[^(]*[(]", "", $0)
Packit 90a5c9
    sub("[)].*$", "", $0)
Packit 90a5c9
    add_symbol("apr_" $0 "_inherit_unset")
Packit 90a5c9
    next
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
/^#[ \t]*if(ndef| !defined[(])([^_]*_)*H/ {
Packit 90a5c9
    enter_scope(TYPE_HEADER)
Packit 90a5c9
    next
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
/^#[ \t]*if([n]?def)? / {
Packit 90a5c9
    enter_scope(TYPE_NORMAL)
Packit 90a5c9
    push($0)
Packit 90a5c9
    next
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
/^#[ \t]*endif/ {
Packit 90a5c9
    if (scope_type[scope] == TYPE_NORMAL)
Packit 90a5c9
        push($0)
Packit 90a5c9
        
Packit 90a5c9
    leave_scope()
Packit 90a5c9
    next
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
/^#[ \t]*else/ {
Packit 90a5c9
    push($0)
Packit 90a5c9
    next
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9
/^#[ \t]*elif/ {
Packit 90a5c9
    push($0)
Packit 90a5c9
    next
Packit 90a5c9
}
Packit 90a5c9
Packit 90a5c9