Commit e9c76e91 authored by Ryan Bloom's avatar Ryan Bloom
Browse files

Improvements to APXS. It now uses the config_vars.mk variables to

figure out how to build stuff.  It uses the Apache build system for
the generated module, but not for command line builds.  Maybe I'll fix
that one day.  If somebody wants to beat me to it, that would be cool.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@90696 13f79535-47bb-0310-9956-ffa450edef68
parent 60975e34
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -51,9 +51,13 @@ install-conf:
install-build:
	@echo Installing build system files 
	@test -d $(installbuilddir) || $(MKINSTALLDIRS) $(installbuilddir) 
	@cp config_vars.mk $(installbuilddir); \
	cd build; \
	cp *.mk $(installbuilddir);
	@sed 's#LIBTOOL = \(.*\)#LIBTOOL = $(SHELL) $(installbuilddir)/libtool $(LTFLAGS)#' \
	    config_vars.mk > $(installbuilddir)config_vars.mk; \
	cp build/*.mk $(installbuilddir); \
	cp srclib/apr/libtool $(installbuilddir); \
	if test -f srclib/apr/shlibtool; then \
	    cp srclib/apr/shlibtool $(installbuilddir); \
	fi

htdocs-srcdir = docs/docroot

+69 −60
Original line number Diff line number Diff line
@@ -52,10 +52,6 @@
# information on the Apache Software Foundation, please see
# <http://www.apache.org/>.
#
##
##  apxs -- APache eXtenSion tool
##  Written by Ralf S. Engelschall <rse@apache.org>
##

require 5.003;
use strict;
@@ -65,26 +61,17 @@ package apxs;
##  Configuration
##

my $CFG_TARGET        = '@progname@';
my $CFG_CC            = '@CC@';
my $CFG_DEFS          = '@DEFS@';
my $CFG_CFLAGS        = '@CFLAGS@ @EXTRA_CFLAGS@';
my $CFG_PREFIX        = "@prefix@";
my $prefix            = "$CFG_PREFIX";
my $CFG_EXEC_PREFIX   = "@exec_prefix@";
my $exec_prefix       = "$CFG_EXEC_PREFIX";
my $CFG_SBINDIR       = "@bindir@";
my $CFG_INCLUDEDIR    = "@includedir@";
my $CFG_LIBEXECDIR    = "@libexecdir@";
my $CFG_SYSCONFDIR    = "@sysconfdir@";


##
##  Cleanup the above stuff
##
$CFG_CFLAGS =~ s|^\s+||;
$CFG_CFLAGS =~ s|\s+$||;
$CFG_CFLAGS =~ s|\s+`.+apaci`||;
my $prefix         = "@prefix@";
my $CFG_PREFIX     = "$prefix";
my $exec_prefix    = get_vars("exec_prefix");
my $CFG_TARGET     = get_vars("progname");
my $CFG_SYSCONFDIR = get_vars("sysconfdir");
my $CFG_CFLAGS     = get_vars("SHLTCFLAGS");
my $includedir     = get_vars("includedir");
my $CFG_INCLUDEDIR = eval qq("$includedir");
my $CFG_CC         = get_vars("CC");
my $libexecdir     = get_vars("libexecdir");
my $CFG_LIBEXECDIR = eval qq("$libexecdir");

##
##  parse argument line
@@ -219,15 +206,17 @@ if (@opt_S) {
##
##  Initial shared object support check
##
my $httpd = "$CFG_SBINDIR/$CFG_TARGET";
my $exec_prefix = get_vars("exec_prefix");
my $httpd = get_vars("bindir") . "/" . get_vars("progname");
my $temp = eval qq("$httpd");
my $httpd = eval qq("$temp");

#allow apxs to be run from the source tree, before installation
if ($0 =~ m:support/apxs$:) {
    ($httpd = $0) =~ s:support/apxs$::;
    $httpd .= $CFG_TARGET;
}

if (not -x $httpd) {
if (not -x "$httpd") {
	print STDERR "apxs:Error: $httpd not found or not executable\n";
	exit(1);
}
@@ -239,6 +228,36 @@ if (not grep(/mod_so/, `$httpd -l`)) {
    exit(1);
}

sub get_vars {
    my $result = '';
    my $arg;
    my $ok = 0;
    foreach $arg (@_) {
        open IN, "$prefix/build/config_vars.mk" or die "open $prefix/build/config_vars.mk: $!";
        while (<IN>) {
            my $var;
            my $val;
            if (/(.*) = (.*)$/) {
                $var = $1;
                $val = $2;
            }
            next unless $var;
            if ($arg eq $var or $arg eq lc($var)) {
                $result .= "$val;;";
                $ok = 1;
                last;
            }
        }
        if (not $ok) {
            printf(STDERR "apxs:Error: Invalid query string `%s'\n", $arg);
            exit(1);
        }
    }
    $result =~ s|;;$||;
    $result =~ s|:| |;
    return("$result");
}

##
##  Operation
##
@@ -273,7 +292,7 @@ if ($opt_g) {
    $data =~ s|%NAME%|$name|sg;
    $data =~ s|%TARGET%|$CFG_TARGET|sg;

    my ($mkf, $src) = ($data =~ m|^(.+)-=#=-\n(.+)|s);
    my ($mkf, $mods, $src) = ($data =~ m|^(.+)-=#=-\n(.+)-=#=-\n(.+)|s);

    print STDERR "Creating [DIR]  $name\n";
    system("mkdir $name");
@@ -281,10 +300,16 @@ if ($opt_g) {
    open(FP, ">${name}/Makefile") || die;
    print FP $mkf;
    close(FP);
    print STDERR "Creating [FILE] $name/modules.mk\n";
    open(FP, ">${name}/modules.mk") || die;
    print FP $mods;
    close(FP);
    print STDERR "Creating [FILE] $name/mod_$name.c\n";
    open(FP, ">${name}/mod_${name}.c") || die;
    print FP $src;
    close(FP);
    print STDERR "Creating [FILE] $name/.deps\n";
    system("touch ${name}/.deps");

    exit(0);
}
@@ -294,30 +319,8 @@ if ($opt_q) {
    ##
    ##  QUERY INFORMATION 
    ##

    my $result = '';
    my $arg;
    foreach $arg (@args) {
        my $ok = 0;
        my $name;
        foreach $name (qw(
            TARGET CC CFLAGS CFLAGS_SHLIB LD_SHLIB LDFLAGS_SHLIB LIBS_SHLIB
            PREFIX SBINDIR INCLUDEDIR LIBEXECDIR SYSCONFDIR
        )) {
            if ($arg eq $name or $arg eq lc($name)) {
                my $val = eval "\$CFG_$name";
                $result .= "${val}::";
                $ok = 1;
            }
        }
        if (not $ok) {
            printf(STDERR "apxs:Error: Invalid query string `%s'\n", $arg);
            exit(1);
        }
    }
    $result =~ s|::$||;
    $result =~ s|::| |;
    print $result;
    my $result = get_vars(@args);
    print "$result\n";
}

if ($opt_c) {
@@ -407,7 +410,7 @@ if ($opt_c) {
        $opt .= " -l$opt_l";
    }

    push(@cmds, "libtool --silent --mode=link $CFG_CC $cflags -o $dso_file -rpath $CFG_LIBEXECDIR -module -avoid-version $opt $lo");
    push(@cmds, "libtool --silent --mode=link $CFG_CC -o $dso_file -rpath $CFG_LIBEXECDIR -module -avoid-version $opt $lo");

    #   execute the commands
    &execute_cmds(@cmds);
@@ -492,6 +495,7 @@ if ($opt_i or $opt_e) {
        }

        open(FP, "<$CFG_SYSCONFDIR/$CFG_TARGET.conf") || die;
        open(FP, "httpd.conf") || die;
        my $content = join('', <FP>);
        close(FP);

@@ -543,6 +547,11 @@ __DATA__
##  Autogenerated via ``apxs -n %NAME% -g''.
##

builddir=$(shell pwd)
top_srcdir=/home/rbb/apachebin4
top_builddir=/home/rbb/apachebin4/build
include /home/rbb/apachebin4/build/special.mk

#   the used tools
APXS=apxs
APACHECTL=apachectl
@@ -553,15 +562,10 @@ APACHECTL=apachectl
#LIB=-Lmy/lib/dir -lmylib

#   the default target
all: mod_%NAME%.la

#   compile the shared object file
mod_%NAME%.la: mod_%NAME%.c
	$(APXS) -c $(DEF) $(INC) $(LIB) mod_%NAME%.c
all: local-shared-build

#   install the shared object file into Apache 
install: all
	$(APXS) -i -a -n '%NAME%' mod_%NAME%.la
install: install-modules

#   cleanup
clean:
@@ -584,6 +588,11 @@ restart:
stop:
	$(APACHECTL) stop

-=#=-
mod_%NAME%.la: mod_%NAME%.slo
	$(SH_LINK) -rpath $(libexecdir) -module -avoid-version  mod_%NAME%.lo
DISTCLEAN_TARGETS = modules.mk
shared =  mod_%NAME%.la
-=#=-
/* 
**  mod_%NAME%.c -- Apache sample %NAME% module