You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Pier Fumagalli <pi...@betaversion.org> on 2002/04/06 19:30:03 UTC

[PATCH] Correct APXS behavior in non-standard layout installations

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).

    Pie


Re: [PATCH] Correct APXS behavior in non-standard layout installations

Posted by Thom May <th...@planetarytramp.net>.
* Thom May (thom@planetarytramp.net) wrote :
> * Aaron Bannert (aaron@clove.org) wrote :
> > On Sat, Apr 06, 2002 at 07:49:43PM +0100, Pier Fumagalli wrote:
> > > "Pier Fumagalli" <pi...@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: <20...@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.

This patch would also fix PR 8453.
Cheers,
-Thom

Re: [PATCH] Correct APXS behavior in non-standard layout installations

Posted by Thom May <th...@planetarytramp.net>.
* Aaron Bannert (aaron@clove.org) wrote :
> On Sat, Apr 06, 2002 at 07:49:43PM +0100, Pier Fumagalli wrote:
> > "Pier Fumagalli" <pi...@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: <20...@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

Re: [PATCH] Correct APXS behavior in non-standard layout installations

Posted by Aaron Bannert <aa...@clove.org>.
On Sat, Apr 06, 2002 at 07:49:43PM +0100, Pier Fumagalli wrote:
> "Pier Fumagalli" <pi...@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: <20...@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. :)

-aaron

Re: [PATCH] Correct APXS behavior in non-standard layout installations

Posted by Pier Fumagalli <pi...@betaversion.org>.
"Pier Fumagalli" <pi...@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: <20...@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)...

This is the revised and updated patch...

    Pier / Thom :)