httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Thom May <t...@planetarytramp.net>
Subject Re: [PATCH] Correct APXS behavior in non-standard layout installations
Date Tue, 09 Apr 2002 22:58:32 GMT
* Aaron Bannert (aaron@clove.org) wrote :
> On Sat, Apr 06, 2002 at 07:49:43PM +0100, Pier Fumagalli wrote:
> > "Pier Fumagalli" <pier@betaversion.org> wrote:
> > 
> > > This patch will fix a couple of problems I found when building modules using
> > > APXS when Apache 2.0 is installed not following a "custom" layout (but a
> > > weird one like my DarwinBundle).
> > 
> > Thom actually showed me his patch posted as
> > 
> >     Subject: [PATCH] Fix apxs so it is relocatable...
> >     Message-ID: <20020401184143.GA9215@eustasy>
> > 
> > It works great for me on my wicked installation layout, and today we fixed
> > another couple of things left from his patch (a couple of hardcoded "build"
> > directories were still in, and it wasn't properly resolving the ServerRoot
> > when apxs was called from a symlink)...
> 
> I've got to go sit in the eye-doctor's office for a bit, I'll review
> these while I'm there. :)

Hopefully this is everything fixed - we now set the LD_LIBRARY_PATH when
running httpd in relocated installs.

Cheers,
-Thom


Index: support/apxs.in
===================================================================
RCS file: /home/cvspublic/httpd-2.0/support/apxs.in,v
retrieving revision 1.36
diff -u -u -r1.36 apxs.in
--- support/apxs.in	13 Mar 2002 20:48:05 -0000	1.36
+++ support/apxs.in	9 Apr 2002 22:57:31 -0000
@@ -58,36 +58,6 @@
 package apxs;
 
 ##
-##  Configuration
-##
-
-my $prefix         = "@prefix@";
-my $CFG_PREFIX     = $prefix;
-
-# read the configuration variables once
-my %config_vars = ();
-get_config_vars("$prefix/build/config_vars.mk",\%config_vars);
-
-my $exec_prefix    = get_vars("exec_prefix");
-my $CFG_TARGET     = get_vars("progname");
-my $CFG_SYSCONFDIR = get_vars("sysconfdir");
-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 $CFG_CC         = get_vars("CC");
-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);
-
-##
 ##  parse argument line
 ##
 
@@ -108,6 +78,7 @@
 my $opt_A = 0;
 my $opt_q = 0;
 my $opt_h = 0;
+my $opt_d = '';
 
 #   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
@@ -174,19 +145,19 @@
 }
 
 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 "Usage: apxs -d <server-root> -g [-S <var>=<val>] -n <modname>\n";
+    print STDERR "       apxs -d <server-root> -q [-S <var>=<val>] <query>
...\n";
+    print STDERR "       apxs -d -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>] <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";
+    print STDERR "       apxs -d <server-root> -i [-S <var>=<val>] [-a]
[-A] [-n <modname>] <dsofile> ...\n";
+    print STDERR "       apxs -d <server-root> -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+eiaA", @ARGV);
+($rc, @ARGV) = &Getopts("d:qn:gco:I+D+L+l+W+S+eiaA", @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);
@@ -217,10 +188,81 @@
     }
 }
 
+
+##
+##  Configuration
+##
+
+# read the configuration variables once
+my %config_vars = ();
+my $mode;
+my $working_dir;
+my $server_root;
+my $installbuilddir;
+
+my $temp_path = $0;
+    
+while (-l $temp_path) {
+    $temp_path = readlink $temp_path;
+}
+        
+if ($temp_path =~ /^(.*)\/apxs/){
+    $working_dir=$1;
+}
+
+if  ($opt_d ne ''){
+    $mode="rel";
+    $server_root=$opt_d ."/";
+    $installbuilddir=$server_root . "@rel_installbuilddir@";
+}
+elsif ($working_dir eq '@exp_bindir@') {
+#if ($working_dir eq '@exp_bindir@') {
+    #we are in absolute mode
+    $installbuilddir = '@exp_installbuilddir@/';
+    $mode = "exp";
+    $server_root='@prefix@'."/";
+}
+elsif ($working_dir =~ /(.*)@rel_bindir@/) {
+    #we are working in relative mode. 
+    #we need to calculate what the server root is,
+    #and then use that as a base to work from
+    $server_root = $1;
+    $mode = "rel";
+    $installbuilddir=$server_root . "@rel_installbuilddir@";
+}
+else {
+    die "Can't calculate what the server root is. Please use -d\n";
+}
+
+get_config_vars("$installbuilddir/config_vars.mk",\%config_vars)||die "Can't open config_vars.mk,
$!";
+	
+my $prefix         = $server_root;
+my $CFG_PREFIX     = $prefix;
+my $exec_prefix    = $server_root.get_vars("rel_exec_prefix");
+my $progname       = get_vars("progname");
+my $CFG_TARGET     = $progname;
+my $CFG_SYSCONFDIR = $server_root.get_vars("rel_sysconfdir");
+my $CFG_CFLAGS     = join ' ', map { get_vars($_) }
+  qw(SHLTCFLAGS CFLAGS NOTEST_CPPFLAGS EXTRA_CPPFLAGS EXTRA_CFLAGS);
+my $includedir     = $server_root.get_vars("rel_includedir");
+my $CFG_INCLUDEDIR = eval qq("$includedir");
+my $CFG_CC         = get_vars("CC");
+my $libexecdir     = $server_root.get_vars("rel_libexecdir");
+my $CFG_LIBEXECDIR = eval qq("$libexecdir");
+my $sbindir        = $server_root.get_vars("rel_sbindir");
+my $CFG_SBINDIR    = eval qq("$sbindir");
+my $libdir         = $server_root.get_vars("rel_libdir");
+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);
+
 ##
 ##  Initial shared object support check
 ##
-my $httpd = get_vars("sbindir") . "/" . get_vars("progname");
+my $httpd = $sbindir . "/" . $progname;
 $httpd = eval qq("$httpd");
 $httpd = eval qq("$httpd");
 
@@ -234,6 +276,10 @@
 	exit 1;
 }
 
+if ($mode eq 'rel') {
+    $httpd = "LD_LIBRARY_PATH=$libdir $httpd";
+}
+
 unless (grep /mod_so/, `$httpd -l`) {
     error("Sorry, no shared object support for Apache");
     error("available under your platform. Make sure");
@@ -321,6 +367,7 @@
     $data =~ s|%NAME%|$name|sg;
     $data =~ s|%TARGET%|$CFG_TARGET|sg;
     $data =~ s|%PREFIX%|$prefix|sg;
+    $data =~ s|%INSTBUILDDIR%|$installbuilddir|sg;
 
     my ($mkf, $mods, $src) = ($data =~ m|^(.+)-=#=-\n(.+)-=#=-\n(.+)|s);
 
@@ -415,7 +462,7 @@
         $la =~ s|\.c$|.la|;
         my $o = $s;
         $o =~ s|\.c$|.o|;
-        push(@cmds, "$prefix/build/libtool $ltflags --mode=compile $CFG_CC $cflags -I$CFG_INCLUDEDIR
$opt -c -o $lo $s && touch $slo");
+        push(@cmds, "$installbuilddir/libtool $ltflags --mode=compile $CFG_CC $cflags -I$CFG_INCLUDEDIR
$opt -c -o $lo $s && touch $slo");
         unshift(@objs, $lo);
     }
 
@@ -440,7 +487,7 @@
         $opt .= " -l$opt_l";
     }
 
-    push(@cmds, "$prefix/build/libtool $ltflags --mode=link $CFG_CC -o $dso_file -rpath $CFG_LIBEXECDIR
-module -avoid-version $opt $lo");
+    push(@cmds, "$installbuilddir/libtool $ltflags --mode=link $CFG_CC -o $dso_file -rpath
$CFG_LIBEXECDIR -module -avoid-version $opt $lo");
 
     #   execute the commands
     &execute_cmds(@cmds);
@@ -471,8 +518,8 @@
         $t =~ s|^.+/([^/]+)$|$1|;
         $t =~ s|\.la$|\.so|;
         if ($opt_i) {
-	    push(@cmds, "$prefix/build/instdso.sh SH_LIBTOOL='" .
-                 "$prefix/build/libtool' $f $CFG_LIBEXECDIR");
+	    push(@cmds, "$installbuilddir/instdso.sh SH_LIBTOOL='" .
+                 "$installbuilddir/libtool' $f $CFG_LIBEXECDIR");
 	    push(@cmds, "chmod 755 $CFG_LIBEXECDIR/$t");
         }
 
@@ -589,7 +636,7 @@
 builddir=$(shell pwd)
 top_srcdir=%PREFIX%
 top_builddir=%PREFIX%
-include %PREFIX%/build/special.mk
+include %INSTBUILDDIR%/special.mk
 
 #   the used tools
 APXS=apxs

Mime
View raw message