You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2013/11/19 12:05:39 UTC

svn commit: r1543377 - in /perl/apxs/trunk: ./ Configure.pl README apr_win32.pl apu_win32.pl apxs_win32 apxs_win32.pl util.pl

Author: stevehay
Date: Tue Nov 19 11:05:39 2013
New Revision: 1543377

URL: http://svn.apache.org/r1543377
Log:
Import http://archive.apache.org/dist/perl/win32-bin/apxs_win32-0.1.tar.gz

Added:
    perl/apxs/trunk/
    perl/apxs/trunk/Configure.pl
    perl/apxs/trunk/README
    perl/apxs/trunk/apr_win32.pl
    perl/apxs/trunk/apu_win32.pl
    perl/apxs/trunk/apxs_win32
    perl/apxs/trunk/apxs_win32.pl
    perl/apxs/trunk/util.pl

Added: perl/apxs/trunk/Configure.pl
URL: http://svn.apache.org/viewvc/perl/apxs/trunk/Configure.pl?rev=1543377&view=auto
==============================================================================
--- perl/apxs/trunk/Configure.pl (added)
+++ perl/apxs/trunk/Configure.pl Tue Nov 19 11:05:39 2013
@@ -0,0 +1,115 @@
+#!C:/Perl/bin/perl
+use strict;
+use warnings;
+use Getopt::Long;
+require Win32;
+use File::Spec::Functions qw(catfile catdir);
+use Config;
+use ExtUtils::MakeMaker;
+use File::Basename;
+require 'util.pl';
+
+BEGIN {
+    die 'This script is intended for Win32' unless $^O =~ /Win32/i;
+}
+
+my ($apache, $help);
+GetOptions( 'with-apache2=s' => \$apache,
+	    'help' => \$help,
+	    ) or usage($0);
+usage($0) if $help;
+
+my @path_ext;
+path_ext();
+$apache ||= search(); 
+
+for my $file (qw(apxs_win32.pl apr_win32.pl apu_win32.pl) ) {
+    push @ARGV, "--with-apache2=$apache";
+    unless (my $return = do $file) {
+	warn "Cannot parse $file: $@" if $@;
+	warn "Cannot do $file: $!"    unless defined $return;
+	warn "Cannot run $file"       unless $return;
+    }
+}
+
+sub search {
+    my $apache;
+    if (my $bin = which('Apache')) {
+        (my $candidate = dirname($bin)) =~ s!bin$!!;
+        if (-d $candidate and check($candidate)) {
+            $apache = $candidate;
+        }
+    }
+    unless ($apache and -d $apache) {
+        $apache = prompt("Please give the path to your Apache2 installation:",
+                         $apache);
+    }
+    die "Can't find a suitable Apache2 installation!" 
+        unless ($apache and -d $apache and check($apache));
+    
+    $apache = Win32::GetShortPathName($apache) if $apache =~ / /;
+    $apache =~ s!\\!/!g;
+    $apache =~ s!/$!!;
+    my $ans = prompt(qq{\nUse "$apache" for your Apache2 directory?}, 'yes');
+    unless ($ans =~ /^y/i) {
+        die <<'END';
+
+Please run this configuration script again, and give
+the --with-apache2=C:\Path\to\Apache2 option to specify
+the desired top-level Apache2 directory.
+
+END
+    }
+    return $apache;
+}
+
+sub drives {
+    my @drives = ();
+    eval{require Win32API::File;};
+    return map {"$_:\\"} ('C' .. 'Z') if $@;
+    my @r = Win32API::File::getLogicalDrives();
+    return unless @r > 0;
+    for (@r) {
+        my $t = Win32API::File::GetDriveType($_);
+        push @drives, $_ if ($t == 3 or $t == 4);
+    }
+    return @drives > 0 ? @drives : undef;
+}
+
+sub path_ext {
+    if ($ENV{PATHEXT}) {
+        push @path_ext, split ';', $ENV{PATHEXT};
+        for my $ext (@path_ext) {
+            $ext =~ s/^\.*(.+)$/$1/;
+        }
+    }
+    else {
+        #Win9X: doesn't have PATHEXT
+        push @path_ext, qw(com exe bat);
+    }
+}
+
+sub which {
+    my $program = shift;
+    return unless $program;
+    my @extras = ();
+    my @drives = drives();
+    if (@drives > 0) {
+        for my $drive (@drives) {
+            for ('Apache2', 'Program Files/Apache2',
+                 'Program Files/Apache Group/Apache2') {
+                my $bin = File::Spec->catpath($drive, $_, 'bin');
+                push @extras, $bin if (-d $bin);
+            }
+        }
+    }
+    my @a = map {catfile($_, $program) } 
+        (File::Spec->path(), @extras);
+    for my $base(@a) {
+        return $base if -x $base;
+        for my $ext (@path_ext) {
+            return "$base.$ext" if -x "$base.$ext";
+        }
+    }
+    return;
+}

Added: perl/apxs/trunk/README
URL: http://svn.apache.org/viewvc/perl/apxs/trunk/README?rev=1543377&view=auto
==============================================================================
--- perl/apxs/trunk/README (added)
+++ perl/apxs/trunk/README Tue Nov 19 11:05:39 2013
@@ -0,0 +1,12 @@
+This distribution contains scripts to install the utilities
+apxs, apr-config, and apu-config on Win32 for use with Apache2.
+To install, at a DOS prompt run
+   perl Configure.pl
+which will attempt to find your top-level Apache2 directory.
+If this is unsuccessful, or the guess is wrong, run
+   perl Configure.pl --with-apache2=\Path\to\Apache2
+The utilties will be placed under \Path\to\Apache2\bin\.
+
+Randy Kobes <ra...@theoryx5.uwinnipeg.ca>
+Aug 17, 2003
+

Added: perl/apxs/trunk/apr_win32.pl
URL: http://svn.apache.org/viewvc/perl/apxs/trunk/apr_win32.pl?rev=1543377&view=auto
==============================================================================
--- perl/apxs/trunk/apr_win32.pl (added)
+++ perl/apxs/trunk/apr_win32.pl Tue Nov 19 11:05:39 2013
@@ -0,0 +1,263 @@
+#!perl
+use strict;
+use warnings;
+use Config;
+use Getopt::Long;
+require Win32;
+use ExtUtils::MakeMaker;
+use File::Spec::Functions qw(catfile catdir);
+require 'util.pl';
+
+BEGIN {
+    die 'This script is intended for Win32' unless $^O =~ /Win32/i;
+}
+
+my $license = <<'END';
+# ====================================================================
+#
+#  Copyright 2003-2004  The Apache Software Foundation
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+# ====================================================================
+#
+# APR script designed to allow easy command line access to APR configuration
+# parameters.
+
+END
+
+my $file = 'apr-config.pl';
+my ($prefix, $help);
+GetOptions('with-apache2=s' => \$prefix, 'help' => \$help) or usage($0);
+usage($0) if $help;
+
+unless (defined $prefix and -d $prefix) {
+    $prefix = prompt("Please give the path to your Apache2 installation:",
+		     $prefix);
+}
+die "Can't find a suitable Apache2 installation!" 
+    unless (-d $prefix and check($prefix));
+
+$prefix = Win32::GetShortPathName($prefix);
+
+my %ap_dir;
+foreach (qw(bin lib include build)) {
+    $ap_dir{$_} = catdir $prefix, $_;
+}
+
+my $apr_version = catfile $ap_dir{include}, 'apr_version.h';
+open(my $inc, $apr_version)
+    or die "Cannot open $apr_version: $!";
+my %vers;
+while (<$inc>) {
+    if (/define\s+APR_(MAJOR|MINOR|PATCH)_VERSION\s+(\d+)/) {
+        $vers{$1} = $2;
+    }
+}
+close $inc;
+my $dotted = "$vers{MAJOR}.$vers{MINOR}.$vers{PATCH}";
+
+my $apr_libname;
+opendir(my $dir, $ap_dir{lib}) or die "Cannot opendir $ap_dir{lib}: $!";
+my @libs = grep /^libapr\b\S+lib$/, readdir $dir;
+closedir $dir;
+die "Unable to find the apr lib" unless ($apr_libname = $libs[0]);
+
+my %apr_args = (APR_MAJOR_VERSION => $vers{MAJOR},
+                APR_DOTTED_VERSION => $dotted,
+                APR_LIBNAME => $apr_libname,
+                prefix => $prefix,
+                exec_prefix => $prefix,
+                bindir => $ap_dir{bin},
+                libdir => $ap_dir{lib},
+                datadir => $prefix,
+                installbuilddir => $ap_dir{build},
+                includedir => $ap_dir{include},
+                
+                CC => $Config{cc},
+                CPP => $Config{cpp},
+                LD => $Config{ld},
+                SHELL => $ENV{comspec},
+                CPPFLAGS => '',
+                CFLAGS => q{ /nologo /MD /W3 /O2 /D "WIN32" /D "_WINDOWS" /D "NDEBUG" },
+                LDFLAGS => q{ kernel32.lib /nologo /subsystem:windows /dll /machine:I386 },
+		LIBS => '',
+                EXTRA_INCLUDES => '',
+                APR_SOURCE_DIR => '',
+                APR_SO_EXT => $Config{dlext},
+                APR_LIB_TARGET => '',
+               );
+
+my $apr_usage = << 'EOF';
+Usage: apr-config [OPTION]
+
+Known values for OPTION are:
+  --prefix[=DIR]    change prefix to DIR
+  --bindir          print location where binaries are installed
+  --includedir      print location where headers are installed
+  --libdir          print location where libraries are installed
+  --cc              print C compiler name
+  --cpp             print C preprocessor name and any required options
+  --ld              print C linker name
+  --cflags          print C compiler flags
+  --cppflags        print cpp flags
+  --includes        print include information
+  --ldflags         print linker flags
+  --libs            print additional libraries to link against
+  --srcdir          print APR source directory
+  --installbuilddir print APR build helper directory
+  --link-ld         print link switch(es) for linking to APR
+  --apr-so-ext      print the extensions of shared objects on this platform
+  --apr-lib-file    print the name of the apr lib
+  --version         print the APR version as a dotted triple
+  --help            print this help
+
+When linking, an application should do something like:
+  APR_LIBS="\`apr-config --link-ld --libs\`"
+
+An application should use the results of --cflags, --cppflags, --includes,
+and --ldflags in their build process.
+EOF
+
+my $full = catfile $ap_dir{bin}, $file;
+open(my $fh, '>', $full) or die "Cannot open $full: $!";
+print $fh <<"END";
+#!$^X
+use strict;
+use warnings;
+use Getopt::Long;
+use File::Spec::Functions qw(catfile catdir);
+
+$license
+sub usage {
+    print << 'EOU';
+$apr_usage
+EOU
+    exit(1);
+}
+
+END
+
+foreach my $var (keys %apr_args) {
+    print $fh qq{my \${$var} = q[$apr_args{$var}];\n};
+}
+print $fh $_ while <DATA>;
+close $fh;
+
+my @args = ('pl2bat', $full);
+system(@args) == 0 or die "system @args failed: $?";
+print qq{apr-config.bat has been created under $ap_dir{bin}.\n\n};
+
+__DATA__
+
+my %opts = ();
+GetOptions(\%opts,
+           'prefix:s',
+           'bindir',
+           'includedir',
+           'libdir',
+           'cc',
+           'cpp',
+           'ld',
+           'cflags',
+           'cppflags',
+           'includes',
+           'ldflags',
+           'libs',
+           'srcdir',
+           'installbuilddir',
+           'link-ld',
+           'apr-so-ext',
+           'apr-lib-file',
+           'version',
+           'help'
+          ) or usage();
+
+usage() if ($opts{help} or not %opts);
+
+if (exists $opts{prefix} and $opts{prefix} eq "") {
+    print qq{$prefix\n};
+    exit(0);
+}
+my $user_prefix = defined $opts{prefix} ? $opts{prefix} : '';
+my %user_dir;
+if ($user_prefix) {
+    foreach (qw(lib bin include build)) {
+        $user_dir{$_} = catdir $user_prefix, $_;
+    }
+}
+my $flags = '';
+
+SWITCH : {
+    local $\ = "\n";
+    $opts{bindir} and do {
+        print $user_prefix ? $user_dir{bin} : $bindir;
+        last SWITCH;
+    };
+    $opts{includedir} and do {
+        print $user_prefix ? $user_dir{include} : $includedir;
+        last SWITCH;
+    };
+    $opts{libdir} and do {
+        print $user_prefix ? $user_dir{lib} : $libdir;
+        last SWITCH;
+    };
+    $opts{installbuilddir} and do {
+        print $user_prefix ? $user_dir{build} : $installbuilddir;
+        last SWITCH;
+    };
+    $opts{srcdir} and do {
+        print $APR_SOURCE_DIR;
+        last SWITCH;
+    };
+    $opts{cc} and do {
+        print $CC;
+        last SWITCH;
+    };
+    $opts{cpp} and do {
+        print $CPP;
+        last SWITCH;
+    };
+    $opts{ld} and do {
+        print $LD;
+        last SWITCH;
+    };
+    $opts{cflags} and $flags .= " $CFLAGS ";
+    $opts{cppflags} and $flags .= " $CPPFLAGS ";
+    $opts{includes} and do {
+        my $inc = $user_prefix ? $user_dir{include} : $includedir;
+        $flags .= qq{ /I"$inc" $EXTRA_INCLUDES };
+    };
+    $opts{ldflags} and $flags .= " $LDFLAGS ";
+    $opts{libs} and $flags .= " $LIBS ";
+    $opts{'link-ld'} and do {
+        my $libpath = $user_prefix ? $user_dir{lib} : $libdir;
+        $flags .= qq{ /libpath:"$libpath" $APR_LIBNAME };
+    };
+    $opts{'apr-so-ext'} and do {
+        print $APR_SO_EXT;
+        last SWITCH;
+    };
+    $opts{'apr-lib-file'} and do {
+        my $full_aprlib = $user_prefix ? 
+            (catfile $user_dir{lib}, $APR_LIBNAME) :
+                (catfile $libdir, $APR_LIBNAME);
+        print $full_aprlib;
+        last SWITCH;
+    };
+    $opts{version} and do {
+        print $APR_DOTTED_VERSION;
+        last SWITCH;
+    };
+    print $flags if $flags;
+}
+exit(0);

Added: perl/apxs/trunk/apu_win32.pl
URL: http://svn.apache.org/viewvc/perl/apxs/trunk/apu_win32.pl?rev=1543377&view=auto
==============================================================================
--- perl/apxs/trunk/apu_win32.pl (added)
+++ perl/apxs/trunk/apu_win32.pl Tue Nov 19 11:05:39 2013
@@ -0,0 +1,264 @@
+#!perl
+use strict;
+use Config;
+use Getopt::Long;
+require Win32;
+use ExtUtils::MakeMaker;
+use File::Spec::Functions qw(catfile catdir);
+use warnings;
+require 'util.pl';
+
+BEGIN {
+    die 'This script is intended for Win32' unless $^O =~ /Win32/i;
+}
+
+my $license = <<'END';
+# ====================================================================
+#
+#  Copyright 2003-2004  The Apache Software Foundation
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+# ====================================================================
+#
+# APR-util script designed to allow easy command line access to APR-util
+# configuration parameters.
+
+END
+
+my $file = 'apu-config.pl';
+my ($prefix, $help);
+GetOptions('with-apache2=s' => \$prefix, 'help' => \$help) or usage($0);
+usage($0) if $help;
+
+unless (defined $prefix and -d $prefix) {
+    $prefix = prompt("Please give the path to your Apache2 installation:",
+		     $prefix);
+}
+die "Can't find a suitable Apache2 installation!" 
+    unless (-d $prefix and check($prefix));
+
+$prefix = Win32::GetShortPathName($prefix);
+
+my %ap_dir;
+foreach (qw(bin lib include build)) {
+    $ap_dir{$_} = catdir $prefix, $_;
+}
+
+my $apu_version = catfile $ap_dir{include}, 'apu_version.h';
+open(my $inc, $apu_version)
+    or die "Cannot open $apu_version: $!";
+my %vers;
+while (<$inc>) {
+    if (/define\s+APU_(MAJOR|MINOR|PATCH)_VERSION\s+(\d+)/) {
+        $vers{$1} = $2;
+    }
+}
+close $inc;
+my $dotted = "$vers{MAJOR}.$vers{MINOR}.$vers{PATCH}";
+
+my $aprutil_libname;
+opendir(my $dir, $ap_dir{lib}) or die "Cannot opendir $ap_dir{lib}: $!";
+my @libs = grep /^libaprutil\b\S+lib$/, readdir $dir;
+closedir $dir;
+die "Unable to find the apr lib" unless ($aprutil_libname = $libs[0]);
+
+my %apu_args = (APRUTIL_MAJOR_VERSION => $vers{MAJOR},
+                APRUTIL_DOTTED_VERSION => $dotted,
+                APRUTIL_LIBNAME => $aprutil_libname,
+                prefix => $prefix,
+                exec_prefix => $prefix,
+                bindir => $ap_dir{bin},
+                libdir => $ap_dir{lib},
+                datadir => $prefix,
+                installbuilddir => $ap_dir{build},
+                includedir => $ap_dir{include},
+                
+                CC => $Config{cc},
+                CPP => $Config{cpp},
+                LD => $Config{ld},
+                SHELL => $ENV{comspec},
+                CPPFLAGS => '',
+                CFLAGS => q{ /nologo /MD /W3 /O2 /D "WIN32" /D "_WINDOWS" /D "NDEBUG" },
+                LDFLAGS => q{ kernel32.lib /nologo /subsystem:windows /dll /machine:I386 },
+                LIBS => '',
+                EXTRA_INCLUDES => '',
+                APRUTIL_SOURCE_DIR => '',
+                APRUTIL_SO_EXT => $Config{dlext},
+                APRUTIL_LIB_TARGET => '',
+               );
+
+my $apu_usage = << 'EOF';
+Usage: apu-config [OPTION]
+
+Known values for OPTION are:
+  --prefix[=DIR]    change prefix to DIR
+  --bindir          print location where binaries are installed
+  --includedir      print location where headers are installed
+  --libdir          print location where libraries are installed
+  --cc              print C compiler name
+  --cpp             print C preprocessor name and any required options
+  --ld              print C linker name
+  --cflags          print C compiler flags
+  --cppflags        print cpp flags
+  --includes        print include information
+  --ldflags         print linker flags
+  --libs            print additional libraries to link against
+  --srcdir          print APR-util source directory
+  --installbuilddir print APR-util build helper directory
+  --link-ld         print link switch(es) for linking to APR-util
+  --apu-so-ext      print the extensions of shared objects on this platform
+  --apu-lib-file    print the name of the aprutil lib
+  --version         print the APR-util version as a dotted triple
+  --help            print this help
+
+When linking, an application should do something like:
+  APU_LIBS="\`apu-config --link-ld --libs\`"
+
+An application should use the results of --cflags, --cppflags, --includes,
+and --ldflags in their build process.
+EOF
+
+my $full = catfile $ap_dir{bin}, $file;
+open(my $fh, '>', $full) or die "Cannot open $full: $!";
+print $fh <<"END";
+#!$^X
+use strict;
+use warnings;
+use Getopt::Long;
+use File::Spec::Functions qw(catfile catdir);
+
+$license
+sub usage {
+    print << 'EOU';
+$apu_usage
+EOU
+    exit(1);
+}
+
+END
+
+foreach my $var (keys %apu_args) {
+    print $fh qq{my \${$var} = q[$apu_args{$var}];\n};
+}
+print $fh $_ while <DATA>;
+close $fh;
+
+my @args = ('pl2bat', $full);
+system(@args) == 0 or die "system @args failed: $?";
+print qq{apu-config.bat has been created under $ap_dir{bin}.\n\n};
+
+__DATA__
+
+my %opts = ();
+GetOptions(\%opts,
+           'prefix:s',
+           'bindir',
+           'includedir',
+           'libdir',
+           'cc',
+           'cpp',
+           'ld',
+           'cflags',
+           'cppflags',
+           'includes',
+           'ldflags',
+           'libs',
+           'srcdir',
+           'installbuilddir',
+           'link-ld',
+           'apu-so-ext',
+           'apu-lib-file',
+           'version',
+           'help'
+          ) or usage();
+
+usage() if ($opts{help} or not %opts);
+
+if (exists $opts{prefix} and $opts{prefix} eq "") {
+    print qq{$prefix\n};
+    exit(0);
+}
+my $user_prefix = defined $opts{prefix} ? $opts{prefix} : '';
+my %user_dir;
+if ($user_prefix) {
+    foreach (qw(lib bin include build)) {
+        $user_dir{$_} = catdir $user_prefix, $_;
+    }
+}
+
+my $flags = '';
+
+SWITCH : {
+    local $\ = "\n";
+    $opts{bindir} and do {
+        print $user_prefix ? $user_dir{bin} : $bindir;
+        last SWITCH;
+    };
+    $opts{includedir} and do {
+        print $user_prefix ? $user_dir{include} : $includedir;
+        last SWITCH;
+    };
+    $opts{libdir} and do {
+        print $user_prefix ? $user_dir{lib} : $libdir;
+        last SWITCH;
+    };
+    $opts{installbuilddir} and do {
+        print $user_prefix ? $user_dir{build} : $installbuilddir;
+        last SWITCH;
+    };
+    $opts{srcdir} and do {
+        print $APRUTIL_SOURCE_DIR;
+        last SWITCH;
+    };
+    $opts{cc} and do {
+        print $CC;
+        last SWITCH;
+    };
+    $opts{cpp} and do {
+        print $CPP;
+        last SWITCH;
+    };
+    $opts{ld} and do {
+        print $LD;
+        last SWITCH;
+    };
+    $opts{cflags} and $flags .= " $CFLAGS ";
+    $opts{cppflags} and $flags .= " $CPPFLAGS ";
+    $opts{includes} and do {
+        my $inc = $user_prefix ? $user_dir{include} : $includedir;
+        $flags .= qq{ /I"$inc" $EXTRA_INCLUDES };
+    };
+    $opts{ldflags} and $flags .= " $LDFLAGS ";
+    $opts{libs} and $flags .= " $LIBS ";
+    $opts{'link-ld'} and do {
+        my $libpath = $user_prefix ? $user_dir{lib} : $libdir;
+        $flags .= qq{ /libpath:"$libpath" $APRUTIL_LIBNAME };
+    };
+    $opts{'apu-so-ext'} and do {
+        print $APRUTIL_SO_EXT;
+        last SWITCH;
+    };
+    $opts{'apu-lib-file'} and do {
+        my $full_apulib = $user_prefix ? 
+            (catfile $user_dir{lib}, $APRUTIL_LIBNAME) :
+                (catfile $libdir, $APRUTIL_LIBNAME);
+        print $full_apulib;
+        last SWITCH;
+    };
+    $opts{version} and do {
+        print $APRUTIL_DOTTED_VERSION;
+        last SWITCH;
+    };
+    print $flags if $flags;
+}
+exit(0);

Added: perl/apxs/trunk/apxs_win32
URL: http://svn.apache.org/viewvc/perl/apxs/trunk/apxs_win32?rev=1543377&view=auto
==============================================================================
--- perl/apxs/trunk/apxs_win32 (added)
+++ perl/apxs/trunk/apxs_win32 Tue Nov 19 11:05:39 2013
@@ -0,0 +1,792 @@
+#!%perlbin% -w
+# ====================================================================
+#
+#  Copyright 2003-2004  The Apache Software Foundation
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+# apxs script designed to allow easy command line access to Apache
+# configuration parameters.
+
+require 5.003;
+use strict;
+package apxs;
+use File::Copy;
+
+##
+##  Configuration
+##
+
+my %config_vars = ();
+
+my $installbuilddir = "%exp_installbuilddir%";
+get_config_vars("$installbuilddir/config_vars.mk",\%config_vars);
+
+# read the configuration variables once
+
+my $prefix         = get_vars("prefix");
+my $CFG_PREFIX     = $prefix;
+my $exec_prefix    = get_vars("exec_prefix");
+my $datadir        = get_vars("datadir");
+my $localstatedir  = get_vars("localstatedir");
+my $CFG_TARGET     = get_vars("progname");
+my $CFG_SYSCONFDIR = get_vars("sysconfdir");
+my $CFG_SYSCONF    = get_vars("sysconf");
+my $CFG_CFLAGS     = join ' ', map { get_vars($_) }
+    qw(SHLTCFLAGS CFLAGS NOTEST_CPPFLAGS EXTRA_CPPFLAGS EXTRA_CFLAGS);
+my $includedir     = get_vars("includedir");
+my $CFG_INCLUDEDIR = eval qq("$includedir");
+my $libdir         = get_vars("libdir");
+my $CFG_LIBDIR     = eval qq("$libdir");
+my $CFG_CC         = get_vars("CC");
+my $CFG_LD         = get_vars("LD");
+my $CFG_LDFLAGS    = get_vars("LDFLAGS");
+my $libexecdir     = get_vars("libexecdir");
+my $CFG_LIBEXECDIR = eval qq("$libexecdir");
+my $sbindir        = get_vars("sbindir");
+my $CFG_SBINDIR    = eval qq("$sbindir");
+my $ltflags        = $ENV{'LTFLAGS'};
+$ltflags or $ltflags = "--silent";
+
+my %internal_vars = map {$_ => 1}
+    qw(TARGET CC CFLAGS CFLAGS_SHLIB LD_SHLIB LDFLAGS_SHLIB LIBS_SHLIB
+       PREFIX SBINDIR INCLUDEDIR LIBEXECDIR SYSCONFDIR SYSCONF);
+
+my $CP    = "%CP%";
+my $CHMOD = "%CHMOD%";
+my $RM_F  = "%RM_F%";
+my $TOUCH = "%TOUCH%";
+
+##
+##  parse argument line
+##
+
+#   defaults for parameters
+my $opt_n = '';
+my $opt_g = '';
+my $opt_c = 0;
+my $opt_o = '';
+my @opt_D = ();
+my @opt_I = ();
+my @opt_L = ();
+my @opt_l = ();
+my @opt_W = ();
+my @opt_S = ();
+my $opt_e = 0;
+my $opt_i = 0;
+my $opt_a = 0;
+my $opt_A = 0;
+my $opt_q = 0;
+my $opt_h = 0;
+my $opt_p = 0;
+my $opt_d = 0;
+
+#   this subroutine is derived from Perl's getopts.pl with the enhancement of
+#   the "+" metacharacter at the format string to allow a list to be built by
+#   subsequent occurrences of the same option.
+sub Getopts {
+    my ($argumentative, @ARGV) = @_;
+    my $errs = 0;
+    local $_;
+    local $[ = 0;
+
+    my @args = split / */, $argumentative;
+    while (@ARGV && ($_ = $ARGV[0]) =~ /^-(.)(.*)/) {
+        my ($first, $rest) = ($1,$2);
+        if ($_ =~ m|^--$|) {
+            shift @ARGV;
+            last;
+        }
+        my $pos = index($argumentative,$first);
+        if ($pos >= $[) {
+            if ($pos < $#args && $args[$pos+1] eq ':') {
+                shift @ARGV;
+                if ($rest eq '') {
+                    unless (@ARGV) {
+                        error("Incomplete option: $first (needs an argument)");
+                        $errs++;
+                    }
+                    $rest = shift(@ARGV);
+                }
+                eval "\$opt_$first = \$rest;";
+            }
+            elsif ($pos < $#args && $args[$pos+1] eq '+') {
+                shift @ARGV;
+                if ($rest eq '') {
+                    unless (@ARGV) {
+                        error("Incomplete option: $first (needs an argument)");
+                        $errs++;
+                    }
+                    $rest = shift(@ARGV);
+                }
+                eval "push(\@opt_$first, \$rest);";
+            }
+            else {
+                eval "\$opt_$first = 1";
+                if ($rest eq '') {
+                    shift(@ARGV);
+                }
+                else {
+                    $ARGV[0] = "-$rest";
+                }
+            }
+        }
+        else {
+            error("Unknown option: $first");
+            $errs++;
+            if ($rest ne '') {
+                $ARGV[0] = "-$rest";
+            }
+            else {
+                shift(@ARGV);
+            }
+        }
+    }
+    return ($errs == 0, @ARGV);
+}
+
+sub usage {
+    print STDERR "Usage: apxs -g [-S <var>=<val>] -n <modname>\n";
+    print STDERR "       apxs -q [-S <var>=<val>] <query> ...\n";
+    print STDERR "       apxs -c [-S <var>=<val>] [-o <dsofile>] [-D <name>[=<value>]]\n";
+    print STDERR "               [-I <incdir>] [-L <libdir>] [-l <libname>] [-Wc,<flags>]\n";
+    print STDERR "               [-Wl,<flags>] [-p] <files> ...\n";
+    print STDERR "       apxs -i [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...\n";
+    print STDERR "       apxs -e [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ...\n";
+    exit(1);
+}
+
+#   option handling
+my $rc;
+($rc, @ARGV) = &Getopts("qn:gco:I+D+L+l+W+S+eiaApd", @ARGV);
+&usage if ($rc == 0);
+&usage if ($#ARGV == -1 and not $opt_g);
+&usage if (not $opt_q and not ($opt_g and $opt_n) 
+           and not $opt_i and not $opt_c and not $opt_e);
+
+#   argument handling
+my @args = @ARGV;
+my $name = 'unknown';
+$name = $opt_n if ($opt_n ne '');
+
+if (@opt_S) {
+    my ($opt_S);
+    foreach $opt_S (@opt_S) {
+        if ($opt_S =~ m/^([^=]+)=(.*)$/) {
+            my ($var) = $1;
+            my ($val) = $2;
+            my $oldval = eval "\$CFG_$var";
+
+            unless ($var and $oldval) {
+                print STDERR "apxs:Error: no config variable $var\n";
+                &usage;
+            }
+
+            eval "\$CFG_${var}=\"${val}\"";
+        } else {
+            print STDERR "apxs:Error: malformatted -S option\n";
+            &usage;
+        }	
+    }
+}
+
+##
+##  Initial shared object support check
+##
+my $httpd = get_vars("sbindir") . "/" . get_vars("progname");
+$httpd = eval qq("$httpd");
+$httpd = eval qq("$httpd");
+my $envvars = get_vars("sbindir") . "/envvars";
+$envvars = eval qq("$envvars");
+$envvars = eval qq("$envvars");
+
+#allow apxs to be run from the source tree, before installation
+if ($0 =~ m:support/apxs$:) {
+    ($httpd = $0) =~ s:support/apxs$::;
+}
+
+unless (-f "$httpd") {
+    error("$httpd not found or not executable");
+    exit 1;
+}
+
+sub get_config_vars{
+    my ($file, $rh_config) = @_;
+
+    open IN, $file or die "cannot open $file: $!";
+    while (<IN>){
+        if (/^\s*(.*?)\s*=\s*(.*)$/){
+            $rh_config->{$1} = $2;
+        }
+    }
+    close IN;
+}
+
+sub get_vars {
+    my $result = '';
+    my $ok = 0;
+    my $arg;
+    foreach $arg (@_) {
+        if (exists $config_vars{$arg} or exists $config_vars{lc $arg}) {
+            my $val = exists $config_vars{$arg}
+                ? $config_vars{$arg}
+                    : $config_vars{lc $arg};
+            $val =~ s/[()]//g;
+            $result .= eval "qq($val)" if defined $val;
+            $result .= ";;";
+            $ok = 1;
+        }
+        if (not $ok) {
+            if (exists $internal_vars{$arg} 
+                or exists $internal_vars{lc $arg}) {
+                my $val = exists $internal_vars{$arg} ? $arg : lc $arg;
+                $val = eval "\$CFG_$val";
+                $result .= eval "qq($val)" if defined $val;
+                $result .= ";;";
+                $ok = 1;
+            }
+            if (not $ok) {
+                error("Invalid query string `$arg'");
+                exit(1);
+            }
+        }
+    }
+    $result =~ s|;;$||;
+    #    $result =~ s|:| |;
+    return $result;
+}
+
+##
+##  Operation
+##
+
+#   helper function for executing a list of
+#   system command with return code checks
+sub execute_cmds {
+    my (@cmds) = @_;
+    my ($cmd, $rc);
+
+    foreach $cmd (@cmds) {
+        notice($cmd);
+        $rc = system $cmd;
+        if ($rc) {
+            error(sprintf "Command failed with rc=%d\n", $rc << 8);
+            exit 1 ;
+        }
+    }
+}
+
+if ($opt_g) {
+    ##
+    ##  SAMPLE MODULE SOURCE GENERATION
+    ##
+
+    if (-d $name) {
+        error("Directory `$name' already exists. Remove first");
+        exit(1);
+    }
+
+    my $data = join('', <DATA>);
+    $data =~ s!__END__.*!!s;
+    $data =~ s|%NAME%|$name|sg;
+    $data =~ s|%SYSCONF%|$CFG_SYSCONF|sg;
+    $data =~ s|%PREFIX%|$prefix|sg;
+    $data =~ s|%INSTALLBUILDDIR%|$installbuilddir|sg;
+
+    my ($mkf, $src) = ($data =~ m|^(.+)-=\#=-\n(.+)|s);
+
+    notice("Creating [DIR]  $name");
+    mkdir $name or die "Cannot mkdir $name: $!";
+    notice("Creating [FILE] $name/Makefile");
+    open(FP, ">${name}/Makefile") or die "Cannot open ${name}/Makefile: $!";
+    print FP $mkf;
+    close(FP);
+    notice("Creating [FILE] $name/mod_$name.c");
+    open(FP, ">${name}/mod_${name}.c") || die;
+    print FP $src;
+    close(FP);
+    notice("Creating [FILE] $name/.deps");
+    open(FP, ">${name}/.deps") or die "Cannot open ${name}/.deps: $!";
+    close(FP);
+
+    exit(0);
+}
+
+if ($opt_q) {
+    ##
+    ##  QUERY INFORMATION 
+    ##
+    my $result = get_vars(@args);
+    print "$result\n";
+}
+
+my $apr_bindir = get_vars("APR_BINDIR");
+my $apu_bindir = get_vars("APU_BINDIR");
+
+my $apr_includedir = "-I$prefix/include";
+my $apu_includedir = "-I$prefix/include";
+
+if ($opt_c) {
+    ##
+    ##  SHARED OBJECT COMPILATION
+    ##
+    
+    #   split files into sources and objects
+    my @srcs = ();
+    my @objs = ();
+    my $f;
+    foreach $f (@args) {
+        if ($f =~ m|\.c$|) {
+            push(@srcs, $f);
+        }
+        else {
+            push(@objs, $f);
+        }
+    }
+
+    #   determine output file
+    my $dso_file;
+    if ($opt_o eq '') {
+        if ($#srcs > -1) {
+            $dso_file = $srcs[0];
+            $dso_file =~ s|\.[^.]+$|.so|;
+        }
+        elsif ($#objs > -1) {
+            $dso_file = $objs[0];
+            $dso_file =~ s|\.[^.]+$|.so|;
+        }
+        else {
+            $dso_file = "mod_unknown.so";
+        }
+    }
+    else {
+        $dso_file = $opt_o;
+    }
+
+    #   create compilation commands
+    my @cmds = ();
+    my $opt = '';
+    my ($opt_Wc, $opt_I, $opt_D);
+    foreach $opt_Wc (@opt_W) {
+        $opt .= "$1 " if ($opt_Wc =~ m|^\s*c,(.*)$|);
+    }
+    foreach $opt_I (@opt_I) {
+        $opt .= qq{ /I"$opt_I" };
+    }
+    foreach $opt_D (@opt_D) {
+        $opt .= qq{ /D "$opt_D" };
+    }
+    my $cflags = "$CFG_CFLAGS";
+    if ($opt_d) {
+        $cflags =~ s!NDEBUG!DEBUG!;
+        $cflags .= ' /Zi';
+        $cflags =~ s!/MD !/MDd !;
+    }
+    my $s;
+    my $mod;
+    foreach $s (@srcs) {
+        my $slo = $s;
+        $slo =~ s|\.c$|.slo|;
+        my $lo = $s;
+        $lo =~ s|\.c$|.lo|;
+        my $la = $s;
+        $la =~ s|\.c$|.la|;
+        my $o = $s;
+        $o =~ s|\.c$|.o|;
+        push(@cmds, "$CFG_CC $cflags -I$CFG_INCLUDEDIR $opt /c /Fo$lo $s");
+        unshift(@objs, $lo);
+    }
+
+    #   create link command
+    my $o;
+    my $lo;
+    $opt = '';
+    foreach $o (@objs) {
+        $lo .= " $o";
+    }
+    my ($opt_Wl, $opt_L, $opt_l);
+    foreach $opt_Wl (@opt_W) {
+        if ($CFG_CC !~ m/gcc$/) {
+            $opt .= " $1" if ($opt_Wl =~ m|^\s*l,(.*)$|);
+        } else {
+            $opt .= " -W$opt_Wl";
+        }
+    }
+    foreach $opt_L (@opt_L) {
+        $opt .= qq{ /libpath:"$opt_L" };
+    }
+    foreach $opt_l (@opt_l) {
+        $opt_l .= '.lib' unless ($opt_l =~ /\.lib$/); 
+        $opt .= " $opt_l";
+    }
+
+    if ($opt_p == 1) {
+        my $apr_libs = qq{$prefix/lib/libapr.lib};
+        my $apu_libs = qq{$prefix/lib/libaprutil.lib};
+        $opt .= " ".$apu_libs." ".$apr_libs;
+    }
+    else {
+        my $apr_ldflags;
+        $opt .= " $apr_ldflags";
+    }
+    my $ldflags = "$CFG_LDFLAGS";
+    if ($opt_d) {
+        $ldflags .= ' /debug';
+    }
+    push(@cmds, "$CFG_LD $ldflags /out:$dso_file $opt $lo");
+
+    #   execute the commands
+    &execute_cmds(@cmds);
+
+    #   allow one-step compilation and installation
+    if ($opt_i or $opt_e) {
+        @args = ( $dso_file );
+    }
+}
+
+if ($opt_i or $opt_e) {
+    ##
+    ##  SHARED OBJECT INSTALLATION
+    ##
+    unless (-d $CFG_LIBEXECDIR) {
+        die "Directory $CFG_LIBEXECDIR not found";
+    }
+    #   determine installation commands
+    #   and corresponding LoadModule/AddModule directives
+    my @lmd = ();
+    my @amd = ();
+    my @cmds = ();
+    my $f;
+    foreach $f (@args) {
+        my $end = qr{(\.so|\.la)$};
+        if ($f !~ m!$end!) {
+            error("file $f is not a shared object");
+            exit(1);
+        }
+        my $t = $f;
+        $t =~ s|^.+/([^/]+)$|$1|;
+        $t =~ s|\.la$|\.so|;
+        (my $libf = $f) =~ s!$end!.lib!;
+        (my $libt = $t) =~ s!$end!.lib!;
+        (my $pdbf = $f) =~ s!$end!.pdb!;
+        (my $pdbt = $t) =~ s!$end!.pdb!;
+
+        if ($opt_i) {
+            push(@cmds, "$CP $f $CFG_LIBEXECDIR");
+            push(@cmds, "$CHMOD 755 $CFG_LIBEXECDIR/$t");
+            if (-f $libf) {
+                push(@cmds, "$CP $libf $CFG_LIBDIR");
+                push(@cmds, "$CHMOD 755 $CFG_LIBDIR/$libt");
+            }
+            if ($opt_d and -f $pdbf) {
+                push(@cmds, "$CP $pdbf $CFG_LIBEXECDIR");
+                push(@cmds, "$CHMOD 755 $CFG_LIBEXECDIR/$pdbt");
+            }
+        }
+
+        #   determine module symbolname and filename
+        my $filename = '';
+        if ($name eq 'unknown') {
+            $name = '';
+            my $base = $f;
+            $base =~ s|\.[^.]+$||;
+            if (-f "$base.c") {
+                open(FP, "<$base.c");
+                my $content = join('', <FP>);
+                close(FP);
+                if ($content =~ m|.*module\s+(?:AP_MODULE_DECLARE_DATA\s+)?([a-zA-Z0-9_]+)_module\s*=\s*.*|s) {
+                    $name = "$1";
+                    $filename = "$base.c";
+                    $filename =~ s|^[^/]+/||;
+                }
+            }
+            if ($name eq '') {
+                if ($base =~ m|.*mod_([a-zA-Z0-9_]+)\..+|) {
+                    $name = "$1";
+                    $filename = $base;
+                    $filename =~ s|^[^/]+/||;
+                }
+            }
+            if ($name eq '') {
+                error("Sorry, cannot determine bootstrap symbol name");
+                error("Please specify one with option `-n'");
+                exit(1);
+            }
+        }
+        if ($filename eq '') {
+            $filename = "mod_${name}.c";
+        }
+        my $dir = $CFG_LIBEXECDIR;
+        $dir =~ s|^$CFG_PREFIX/?||;
+        $dir =~ s|(.)$|$1/|;
+        $t =~ s|\.la$|.so|;
+        push(@lmd, sprintf("LoadModule %-18s %s", "${name}_module", "$dir$t"));
+        push(@amd, sprintf("AddModule %s", $filename));
+    }
+
+    #   execute the commands
+    &execute_cmds(@cmds);
+
+    #   activate module via LoadModule/AddModule directive
+    if ($opt_a or $opt_A) {
+        if (not -f "$CFG_SYSCONFDIR/$CFG_SYSCONF") {
+            error("Config file $CFG_SYSCONFDIR/$CFG_SYSCONF not found");
+            exit(1);
+        }
+
+        open(FP, "<$CFG_SYSCONFDIR/$CFG_SYSCONF") 
+            || die "Cannot open $CFG_SYSCONFDIR/$CFG_SYSCONF: $!";
+        my $content = join('', <FP>);
+        close(FP);
+
+        if ($content !~ m|\n\#?\s*LoadModule\s+|) {
+            error("Activation failed for custom $CFG_SYSCONFDIR/$CFG_SYSCONF file.");
+            error("At least one `LoadModule' directive already has to exist.");
+            exit(1);
+        }
+
+        my $lmd;
+        my $c = '';
+        $c = '#' if ($opt_A);
+        foreach $lmd (@lmd) {
+            my $what = $opt_A ? "preparing" : "activating";
+            if ($content !~ m|\n\#?\s*$lmd|) {
+                # check for open <containers>, so that the new LoadModule
+                # directive always appears *outside* of an <container>.
+
+                my $before = 
+                    ($content =~ m|^(.*\n)\#?\s*LoadModule\s+[^\n]+\n|s)[0];
+
+                # the '()=' trick forces list context and the scalar
+                # assignment counts the number of list members (aka number
+                # of matches) then
+                my $cntopen = () = ($before =~ m|^\s*<[^/].*$|mg);
+                my $cntclose = () = ($before =~ m|^\s*</.*$|mg);
+
+                if ($cntopen == $cntclose) {
+                    # fine. Last LoadModule is contextless.
+                    $content =~ s|^(.*\n\#?\s*LoadModule\s+[^\n]+\n)|$1$c$lmd\n|s;
+                }
+                elsif ($cntopen < $cntclose) {
+                    error('Configuration file is not valid. There are sections'
+                          . ' closed before opened.');
+                    exit(1);
+                }
+                else {
+                    # put our cmd after the section containing the last
+                    # LoadModule.
+                    my $found =
+                        $content =~ s!\A (  # string and capture start
+                                          (?:(?:
+                                              ^\s*  # start of conf line with a
+                                              (?:[^<]|<[^/]) # directive which
+                                                             # does not
+                                                             # start with '</'
+                                              
+                                              .*(?:$)\n  # rest of the line.
+                                                 # the '$' is in parentheses
+                                                 # to avoid misinterpreting
+                                                 # the string "$\" as
+                                                 # perl variable.
+                                                 
+                                                )* # catch as much as possible
+                                                   # of such lines. (including
+                                                   # zero)
+                                              
+                                              ^\s*</.*(?:$)\n? 
+                                                   # after the above, we
+                                                   # expect a config line with
+                                                   # a closing container (</)
+                                                       
+                                                      ) {$cntopen}       
+                                              # the whole pattern (bunch
+                                              # of lines that end up with
+                                              # a closing directive) must
+                                              # be repeated $cntopen
+                                              # times. That's it.
+                                              # Simple, eh? ;-)
+                                    
+                                             )  # capture end  
+                                           !$1$c$lmd\n!mx;  
+                    unless ($found) {
+                        error('Configuration file is not valid. There are '
+                              . 'sections opened and not closed.');
+                        exit(1);
+                    }
+                }
+            }
+            else {
+                # replace already existing LoadModule line
+                $content =~ s|^(.*\n)\#?\s*$lmd[^\n]*\n|$1$c$lmd\n|s;
+            }
+            $lmd =~ m|LoadModule\s+(.+?)_module.*|;
+            notice("[$what module `$1' in $CFG_SYSCONFDIR/$CFG_SYSCONF]");
+        } 
+        my $amd;
+        foreach $amd (@amd) {
+            if ($content !~ m|\n\#?\s*$amd|) {
+                $content =~ s|^(.*\n\#?\s*AddModule\s+[^\n]+\n)|$1$c$amd\n|sg;
+            } 
+            else {
+                $content =~ s|^(.*\n)\#?\s*$amd[^\n]*\n|$1$c$amd\n|sg;
+            }
+        }
+
+        if (@lmd or @amd) {
+            if (open(FP, ">$CFG_SYSCONFDIR/$CFG_SYSCONF.new")) {
+                print FP $content;
+                close(FP);
+                copy("$CFG_SYSCONFDIR/$CFG_SYSCONF", 
+                     "$CFG_SYSCONFDIR/$CFG_SYSCONF.bak") or
+                         die "Backup of $CFG_SYSCONFDIR/$CFG_SYSCONF failed: $!";
+                copy("$CFG_SYSCONFDIR/$CFG_SYSCONF.new",
+                     "$CFG_SYSCONFDIR/$CFG_SYSCONF") or
+                         die "Copying $CFG_SYSCONFDIR/$CFG_SYSCONF.new to $CFG_SYSCONFDIR/$CFG_SYSCONF failed: $!";
+                unlink "$CFG_SYSCONFDIR/$CFG_SYSCONF.new" or
+                    die "Removing $CFG_SYSCONFDIR/$CFG_SYSCONF.new failed: $!";
+            } 
+            else {
+                notice("unable to open configuration file");
+            }
+        }
+    }
+}
+
+sub error{
+    print STDERR "apxs:Error: $_[0].\n";
+}
+
+sub notice{
+    print STDERR "$_[0]\n";
+}
+
+##EOF##
+__DATA__
+##
+##  Makefile -- Build procedure for sample %NAME% Apache module
+##  Autogenerated via ``apxs -n %NAME% -g''.
+##
+
+builddir=.
+top_srcdir=%PREFIX%
+top_builddir=%PREFIX%
+
+#   the used tools
+APXS=apxs
+APACHECTL=Apache.exe -k
+
+#   additional defines, includes and libraries
+#DEFS=-Dmy_define=my_value
+#INCLUDES=-Imy/include/dir
+#LIBS=-Lmy/lib/dir -lmylib
+
+#   the default target
+all: local-shared-build
+
+#   install the shared object file into Apache 
+install: install-modules
+
+#   cleanup
+clean:
+        -@erase mod_%NAME%.lo mod_%NAME%.ilk mod_%NAME%.so mod_%NAME%.lib mod_%NAME%.exp mod_%NAME%.pdb
+
+#   simple test
+test: reload
+	GET http://localhost/%NAME%
+
+#   install and activate shared object by reloading Apache to
+#   force a reload of the shared object file
+reload: install restart
+
+#   the general Apache start/restart/stop
+#   procedures
+start:
+	$(APACHECTL) start
+restart:
+	$(APACHECTL) restart
+stop:
+	$(APACHECTL) stop
+
+-=#=-
+/* 
+**  mod_%NAME%.c -- Apache sample %NAME% module
+**  [Autogenerated via ``apxs -n %NAME% -g'']
+**
+**  To play with this sample module first compile it into a
+**  DSO file and install it into Apache's modules directory 
+**  by running:
+**
+**    $ apxs -c -i mod_%NAME%.c
+**
+**  Then activate it in Apache's %SYSCONF% file for instance
+**  for the URL /%NAME% in as follows:
+**
+**    #   %SYSCONF%
+**    LoadModule %NAME%_module modules/mod_%NAME%.so
+**    <Location /%NAME%>
+**    SetHandler %NAME%
+**    </Location>
+**
+**  Then after restarting Apache via
+**
+**    $ apachectl restart
+**
+**  you immediately can request the URL /%NAME% and watch for the
+**  output of this module. This can be achieved for instance via:
+**
+**    $ lynx -mime_header http://localhost/%NAME% 
+**
+**  The output should be similar to the following one:
+**
+**    HTTP/1.1 200 OK
+**    Date: Tue, 31 Mar 1998 14:42:22 GMT
+**    Server: Apache/1.3.4 (Unix)
+**    Connection: close
+**    Content-Type: text/html
+**  
+**    The sample page from mod_%NAME%.c
+*/ 
+
+#include "httpd.h"
+#include "http_config.h"
+#include "http_protocol.h"
+#include "ap_config.h"
+
+/* The sample content handler */
+static int %NAME%_handler(request_rec *r)
+{
+    if (strcmp(r->handler, "%NAME%")) {
+        return DECLINED;
+    }
+    r->content_type = "text/html";      
+
+    if (!r->header_only)
+        ap_rputs("The sample page from mod_%NAME%.c\n", r);
+    return OK;
+}
+
+static void %NAME%_register_hooks(apr_pool_t *p)
+{
+    ap_hook_handler(%NAME%_handler, NULL, NULL, APR_HOOK_MIDDLE);
+}
+
+/* Dispatch list for API hooks */
+module AP_MODULE_DECLARE_DATA %NAME%_module = {
+    STANDARD20_MODULE_STUFF, 
+    NULL,                  /* create per-dir    config structures */
+    NULL,                  /* merge  per-dir    config structures */
+    NULL,                  /* create per-server config structures */
+    NULL,                  /* merge  per-server config structures */
+    NULL,                  /* table of config file commands       */
+    %NAME%_register_hooks  /* register hooks                      */
+};

Added: perl/apxs/trunk/apxs_win32.pl
URL: http://svn.apache.org/viewvc/perl/apxs/trunk/apxs_win32.pl?rev=1543377&view=auto
==============================================================================
--- perl/apxs/trunk/apxs_win32.pl (added)
+++ perl/apxs/trunk/apxs_win32.pl Tue Nov 19 11:05:39 2013
@@ -0,0 +1,206 @@
+#!C:/Perl/bin/perl
+use strict;
+use warnings;
+use Getopt::Long;
+require Win32;
+use Config;
+use ExtUtils::MakeMaker;
+require 'util.pl';
+my ($apache, $help);
+GetOptions( 'with-apache2=s' => \$apache,
+	    'help' => \$help,
+	    ) or usage($0);
+usage($0) if $help;
+
+unless (defined $apache and -d $apache) {
+    $apache = prompt("Please give the path to your Apache2 installation:",
+		     $apache);
+}
+die "Can't find a suitable Apache2 installation!" 
+    unless (-d $apache and check($apache));
+
+$apache = Win32::GetShortPathName($apache);
+$apache =~ s!\\!/!g;
+
+(my $perl = which('perl')) =~ s!\\!/!g;
+my %subs_cfg = (
+                '%APACHE2%' => $apache,
+                '%AWK%' => which('awk') || which('gawk') || '',
+                '%CC%' => $Config{cc},
+                '%CPP%' => $Config{cpp},
+                '%SHELL%' => $ENV{COMSPEC},
+                '%LD%' => $Config{ld},
+               );
+
+my $pat = join '|', keys %subs_cfg;
+my $build_dir = $apache . '/build';
+my $cfg_mk = $build_dir . '/config_vars.mk';
+unless (-d $build_dir) {
+    mkdir $build_dir or die "Cannot mkdir $build_dir: $!";
+}
+open(my $cfg, ">$cfg_mk")
+    or die qq{Cannot open $cfg_mk: $!};
+while (<DATA>) {
+    s/($pat)/$subs_cfg{$1}/;
+    print $cfg $_;
+}
+close $cfg;
+
+my %subs_apxs = (
+                 '%perlbin%' => which('perl'),
+                 '%exp_installbuilddir%' => $build_dir,
+                 '%RM_F%' => qq{$perl -MExtUtils::Command -e rm_f},
+                 '%CP%' => qq{$perl -MExtUtils::Command -e cp},
+                 '%CHMOD%' => qq{$perl -MExtUtils::Command -e chmod},
+                 '%TOUCH%' => qq{$perl -MExtUtils::Command -e touch},
+                 );
+$pat = join '|', keys %subs_apxs;
+my $apxs_out = $apache . '/bin/apxs.pl';
+my $apxs_in = 'apxs_win32';
+open(my $out, ">$apxs_out")
+    or die "Cannot open $apxs_out: $!";
+open(my $in, $apxs_in)
+    or die "Cannot open $apxs_in: $!";
+while (<$in>) {
+    s/($pat)/$subs_apxs{$1}/;
+    print $out $_;
+}
+close $in;
+close $out;
+
+system ('pl2bat', $apxs_out) == 0 
+    or die "system pl2bat $apxs_out failed: $?";
+print qq{\napxs.bat has been created under $apache/bin.\n\n};
+
+__DATA__
+exp_exec_prefix = %APACHE2%
+rel_exec_prefix =
+exp_bindir = %APACHE2%/bin
+rel_bindir = bin
+exp_sbindir = %APACHE2%/bin
+rel_sbindir = bin
+exp_libdir = %APACHE2%/lib
+rel_libdir = lib
+exp_libexecdir = %APACHE2%/modules
+rel_libexecdir = modules
+exp_sysconfdir = %APACHE2%/conf
+rel_sysconfdir = conf
+exp_datadir = %APACHE2%
+rel_datadir =
+exp_installbuilddir = %APACHE2%/build
+rel_installbuilddir = build
+exp_errordir = %APACHE2%/error
+rel_errordir = error
+exp_iconsdir = %APACHE2%/icons
+rel_iconsdir = icons
+exp_htdocsdir = %APACHE2%/htdocs
+rel_htdocsdir = htdocs
+exp_manualdir = %APACHE2%/manual
+rel_manualdir = manual
+exp_cgidir = %APACHE2%/cgi-bin
+rel_cgidir = cgi-bin
+exp_includedir = %APACHE2%/include
+rel_includedir = include
+exp_localstatedir = %APACHE2%
+rel_localstatedir =
+exp_runtimedir = %APACHE2%/logs
+rel_runtimedir = logs
+exp_logfiledir = %APACHE2%/logs
+rel_logfiledir = logs
+exp_proxycachedir = %APACHE2%/proxy
+rel_proxycachedir = proxy
+SHLTCFLAGS = 
+LTCFLAGS =
+MPM_NAME = winnt
+MPM_SUBDIR_NAME = winnt
+htpasswd_LTFLAGS =
+htdigest_LTFLAGS =
+rotatelogs_LTFLAGS =
+logresolve_LTFLAGS =
+htdbm_LTFLAGS =
+ab_LTFLAGS =
+checkgid_LTFLAGS =
+APACHECTL_ULIMIT =
+progname = Apache.exe
+MPM_LIB = server/mpm/winnt/
+OS = win32
+OS_DIR = win32
+BUILTIN_LIBS =
+SHLIBPATH_VAR = 
+OS_SPECIFIC_VARS =
+PRE_SHARED_CMDS =
+POST_SHARED_CMDS = 
+shared_build =
+AP_LIBS =
+AP_BUILD_SRCLIB_DIRS = apr apr-util
+AP_CLEAN_SRCLIB_DIRS = apr-util apr
+abs_srcdir = 
+bindir = ${exec_prefix}/bin
+sbindir = ${exec_prefix}/bin
+cgidir = ${datadir}/cgi-bin
+logfiledir = ${localstatedir}/logs
+exec_prefix = ${prefix}
+datadir = ${prefix}
+localstatedir = ${prefix}
+mandir = ${prefix}/man
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/modules
+htdocsdir = ${datadir}/htdocs
+manualdir = ${datadir}/manual
+includedir = ${prefix}/include
+errordir = ${datadir}/error
+iconsdir = ${datadir}/icons
+sysconfdir = ${prefix}/conf
+sysconf = httpd.conf
+installbuilddir = ${datadir}/build
+runtimedir = ${localstatedir}/logs
+proxycachedir = ${localstatedir}/proxy
+other_targets =
+unix_progname = httpd
+prefix = %APACHE2%
+AWK = %AWK%
+CC = %CC%
+LD = %LD%
+CPP = %CPP%
+CXX =
+CPPFLAGS =
+CFLAGS = /nologo /MD /W3 /O2 /D "WIN32" /D "_WINDOWS" /D "NDEBUG"
+CXXFLAGS =
+LTFLAGS =
+LDFLAGS = kernel32.lib /nologo /subsystem:windows /dll /machine:I386 /libpath:"${prefix}/lib"
+LT_LDFLAGS = 
+SH_LDFLAGS =
+HTTPD_LDFLAGS =
+UTIL_LDFLAGS =
+LIBS =
+DEFS =
+INCLUDES =
+NOTEST_CPPFLAGS = 
+NOTEST_CFLAGS =
+NOTEST_CXXFLAGS =
+NOTEST_LDFLAGS =
+NOTEST_LIBS =
+EXTRA_CPPFLAGS = 
+EXTRA_CFLAGS = 
+EXTRA_CXXFLAGS =
+EXTRA_LDFLAGS =
+EXTRA_LIBS =
+EXTRA_INCLUDES = 
+LIBTOOL = 
+SHELL = %SHELL%
+MODULE_DIRS = aaa filters loggers metadata proxy http generators mappers
+MODULE_CLEANDIRS = arch/win32 cache echo experimental ssl test dav/main dav/fs
+PORT = 80
+nonssl_listen_stmt_1 =
+nonssl_listen_stmt_2 = Listen @@Port@@
+CORE_IMPLIB_FILE =
+CORE_IMPLIB =
+SH_LIBS =
+SH_LIBTOOL =
+MK_IMPLIB =
+INSTALL_PROG_FLAGS =
+DSO_MODULES =
+APR_BINDIR = %APACHE2%/bin
+APR_INCLUDEDIR = 
+APU_BINDIR = %APACHE2%/bin
+APU_INCLUDEDIR = 

Added: perl/apxs/trunk/util.pl
URL: http://svn.apache.org/viewvc/perl/apxs/trunk/util.pl?rev=1543377&view=auto
==============================================================================
--- perl/apxs/trunk/util.pl (added)
+++ perl/apxs/trunk/util.pl Tue Nov 19 11:05:39 2013
@@ -0,0 +1,32 @@
+sub usage {
+    my $script = shift;
+    print <<"END";
+
+ Usage: perl $script [--with-apache2=C:\Path\to\Apache2]
+        perl $script --help
+
+Options:
+
+  --with-apache2=C:\Path\to\Apache2 : specify the top-level Apache2 directory
+  --help                            : print this help message
+
+With no options specified, an attempt will be made to find a suitable 
+Apache2 directory.
+
+END
+    exit;
+}
+
+sub check {
+    my $apache = shift;
+    die qq{No libhttpd library found under $apache/lib}
+        unless -e qq{$apache/lib/libhttpd.lib};
+    die qq{No httpd header found under $apache/include}
+        unless -e qq{$apache/include/httpd.h};
+    my $vers = qx{"$apache/bin/Apache.exe" -v};
+    die qq{"$apache" does not appear to be version 2.0}
+        unless $vers =~ m!Apache/2.0!;
+    return 1;
+}
+
+1;