perl-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Randy Kobes <ra...@theoryx5.uwinnipeg.ca>
Subject Re: [mp2] including a Win32 apxs?
Date Thu, 06 Nov 2003 07:59:38 GMT
On Wed, 5 Nov 2003, Stas Bekman wrote:

> Randy Kobes wrote:
> > Hi,
> >   I was wondering how it would be felt to include an offer
> > in mp2 to get a Win32 version of apxs, if this was not
> > detected. There's a tar.gz archive on perl.apache.org that
> > contains this (plus apr-config and apu-config), so it would
> > be a matter of fetching and extracting this, then running
> > the included configure script to install. If this seems OK,
> > it'd be nice to detect the absence of apxs early on in the
> > build process so as the rest of the build can use the
> > installed scripts - the following diff does this for the
> > top-level Makefile.PL, but perhaps a better place is in
> > Apache::Build? Thanks.
>
> Ideally we should stop blowing up Makefile.PL, it's
> already too big. We should think of having most of the
> support functions moved elsewhere. But this is not urgent
> of course, just something to think of.
>
> What's the verdict from Bill? Does httpd go on including
> it in the core?

I haven't heard anything on this, but that's understandable,
as he's pretty busy ...

> If not, perhaps we should just bundle it
> with mod_perl? Or would it be a bad idea? The fetch thing
> sounds OK, but what if the there is no network available
> during the install? Also some people won't like "random"
> code being brought and installed without them reviewing it
> first? May be Makefile.PL should die telling the user what
> to do. e.g. we could include this fetch thing in a
> build/fetch_win32_apxs and just tell the user to run it
> first, install it and then return to the normal build?
> Just throwing ideas...

That's a good point about the external code being brought
in, and also a potential lack of a network ... One advantage
to running it from Makefile.PL (or equivalent) though is
that MP_AP_PREFIX is available, which is used to install
apxs. What about offering a choice:
- ignore apxs (things still build)
- install automatically
- quit, and run a build/fetch_win32_apxs script
- give the location where the sources are, for
  manual installation

The following implements that; unfortunately, it still
expands Makefile.PL - perhaps this could be moved elsewhere,
or perhaps the number of options cut down, or perhaps I
could be less verbose ...
========================================================
Index: Makefile.PL
===================================================================
RCS file: /home/cvs/modperl-2.0/Makefile.PL,v
retrieving revision 1.129
diff -u -r1.129 Makefile.PL
--- Makefile.PL	5 Nov 2003 09:52:18 -0000	1.129
+++ Makefile.PL	6 Nov 2003 07:44:48 -0000
@@ -44,6 +44,8 @@
 my $build = Apache::Build->new(init => 1);
 my $code  = ModPerl::Code->new;

+fetch_apxs() if WIN32;
+
 configure();
 perl_version_check($build);

@@ -418,6 +420,35 @@
 EOF
         }
     }
+}
+
+sub fetch_apxs {
+    my $prefix = $build->{MP_AP_PREFIX};
+    return if -e catfile($prefix, 'bin', 'apxs.bat1');
+    print << 'END';
+
+I could not find an apxs utility, which will be used in certain parts
+of the build, if present. This utility (and the apr-config and
+apu-config utilities) have not yet been ported to Apache2 on Win32,
+but a development port is available. You can either
+
+- ignore installing apxs by answering "no" at the prompt below
+  (mod_perl will still build),
+- install apxs by answering "yes" at the prompt below,
+- quit now, run the "fetch_win32_apxs.pl" script in the build/ directory
+  to fetch and install the utilities, and then re-run this Makefile.PL,
+- quit now, and from http://perl.apache.org/dist/win32-bin/ grab
+  apxs_win32.tar.gz; when unpacked, this contains a README explaining
+  how installation is done. Afterwards, re-run this Makefile.PL.
+
+END
+
+    my $ans = $build->prompt('Install apxs now?', 'yes');
+    return unless $ans =~ /^y/i;
+    my $script = catfile($build->{cwd}, 'build', 'fetch_win32_apxs.pl');
+    my @args = ($^X, $script, "--with-apache2=$prefix");
+    print "@args\n";
+    system(@args) == 0 or die "fetch of apxs failed: $?";
 }

 package MY;
Index: build/fetch_win32_apxs.pl
===================================================================
RCS file: build/fetch_win32_apxs.pl
diff -N build/fetch_win32_apxs.pl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ build/fetch_win32_apxs.pl	6 Nov 2003 07:44:48 -0000
@@ -0,0 +1,37 @@
+#!C:/Perl/bin/perl
+use strict;
+use warnings;
+use Getopt::Long;
+require File::Spec;
+use File::Basename;
+use Archive::Tar;
+use File::Path;
+use LWP::Simple;
+
+my $prefix;
+GetOptions( 'with-apache2=s' => \$prefix);
+die "Please specify the --with-apache2 option as the path to Apache2"
+    unless $prefix;
+
+my $file = 'apxs_win32.tar.gz';
+my $remote = 'http://perl.apache.org/dist/win32-bin/' . $file;
+print "Fetching $remote ... ";
+die "Download of $remote failed"
+    unless (is_success(getstore($remote, $file)));
+print " done!\n";
+
+my $arc = Archive::Tar->new($file, 1);
+$arc->extract($arc->list_files());
+my $dir = 'apxs';
+die "Unpacking $file failed" unless (-d $dir);
+print "chdir $dir\n";
+chdir $dir or die "chdir to $dir failed: $!";
+
+my @args = ($^X, 'Configure.pl', "--with-apache2=$prefix");
+print "@args\n";
+system(@args) == 0 or die "system @args failed: $?";
+
+chdir '..';
+rmtree($dir, 1, 1) or warn "rmtree of $dir failed: $!";
+print "unlink $file\n\n";
+unlink $file or warn "unlink of $file failed: $!";

================================================================

-- 
best regards,
randy

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Mime
View raw message