The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use ExtUtils::MakeMaker;
use Config;

my $Is_Win32 = ($^O eq "MSWin32") || $ENV{WIN32_TEST}; 

if ($Is_Win32) {
    win32_setup();
}
else {
    require Apache::src;
    my $src = Apache::src->new;

    use Cwd;
    my $pwd = fastcwd;
    my @objs = qw(apache_request.o apache_cookie.o apache_multipart_buffer.o);
    $MY_LD_RUN_PATH = "$Config{installsitearch}/auto/libapreq:$pwd"; 

    WriteMakefile(
       #grr, problems with things finding libapreq.so, sort out later.
       'LINKTYPE' => 'static',
#       'SKIP' => [qw(dynamic_lib dynamic_bs)],
       'NAME'	 => 'libapreq',
       'INC' 	 => $src->inc,
       'TYPEMAPS'   => $src->typemaps,
       'OBJECT' => "@objs",
    );
}

use Cwd;
my $pwd = fastcwd;
$ENV{LD_RUN_PATH} = 
    "$ENV{LD_RUN_PATH}:$Config{installsitearch}/auto/libapr:$pwd";

sub MY::dynamic {
    my $self = shift;
    my $string = $self->MM::dynamic;
    $string =~ s/(Makefile\s+).*/$1/g;
    $string;
}

sub MY::top_targets { 
    my $self = shift; 
    my $string = $self->MM::top_targets; 
    my $libapreq = <<"EOF";
LD_RUN_PATH = $ENV{LD_RUN_PATH}
EOF

    my $so = "\n".'$(DLBASE).$(DLEXT): $(INST_DYNAMIC)'."\n";

    $string =~ s/(pure_all\s+::\s+)(.*)/$1 static $2/; 
    return $libapreq . $so . $string;
}

sub MY::post_initialize { 
    my $self = shift; 
    my $to   = '$(INST_ARCHLIB)/' . "auto/libapreq/include"; 
    for (qw(apache_request apache_cookie apache_multipart_buffer)) {
	$self->{PM}->{"$_.h"} = "$to/$_.h";
    }
    '';
} 

sub win32_setup {
  my $myVERSION = MM->parse_version('../Request/Request.pm');
  $myVERSION =~ s/(\d\d)(\d\d)$/$1_$2/;
  my @objs = qw(apache_request.o apache_cookie.o apache_multipart_buffer.o);
  WriteMakefile('NAME' => 'libapreq',
		'TYPEMAPS' => [ "$ENV{MP_INC}/typemap" ],
		'VERSION' => $myVERSION,
		'OBJECT' => "@objs",
                'INC'  => qq{ -I"$ENV{AP_INC}" -I"$ENV{AP_INC}/../os/win32" -I"$ENV{MP_INC}" },
  	       ); 
}

sub no_MY {
    for (keys %MY::) {
	if (defined &{ $MY::{$_} }) {
	    next if $_ eq 'dynamic';
	    undef &{ $MY::{$_} };
	    delete $MY::{$_};
	} 
    }
}