You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Thom May <th...@debian.org> on 2001/08/27 08:33:20 UTC
[Fwd: Patch for building support programs]
Since this appears to have been eaten by apache's listserver, i'll resend...
-------- Original Message --------
Subject: Patch for building support programs
From: "Thom May" <th...@debian.org>
To: <de...@httpd.apache.org>
Hi,
Building support programs currently is easy to break under most
conditions. If I change apachectl.in like so:
-HTTPD='@prefix@/bin/@progname@'
+HTTPD='@sbindir@/@progname@'
where sbindir is defined to configure as exec_prefix/sbin, the end result
after a configure run is that apachectl looks like:
HTTPD='${exec_prefix}/sbin/apache
which is fine for a Makefile, but not so useful for a perl script. As
part of the debian packages build, the configure script is patched so
that program generation is handled by a separate perl script,
build-progs.pl
I have attached the perl script as a patch for your review, and then
hopefully inclusion into the build process.
Cheers,
-Thom
--- apache2/build/buildprogs.pl.orig Fri Aug 24 00:48:01 2001
+++ apache2/build/buildprogs.pl Fri Aug 24 00:47:22 2001
@@ -0,0 +1,114 @@
+#!/usr/bin/perl
+# Copyright (C) Thom May <th...@debian.org> 2001
+# Licensed under the BSD License, without the advertising clause. +#
Bugs - can't handle multiple replaces on one line, unless it's of the
form:
+# @ONE@/@TWO@
+# I have no idea what happens if it finds something it doesn't know
about...
+#
+
+my $buildir=`pwd`;
+chomp($buildir);
+die "Usage: $0 srcdir file1 [file2...]\n"
+ if ($#ARGV < 0);
+
+my $srcdir = shift(@ARGV);
+my $config_vars = "$srcdir/config_vars.mk";
+&read_config();
+
+while ($file = shift(@ARGV))
+{
+ if ($file =~ /^([^\.]*)\.in/){
+ $infile = $&;
+ $outfile = $1;
+ }
+ else
+ {
+ $outfile = $file;
+ $infile = "$file.in";
+ }
+ # now we read the file, substitute the necessary bits, and close the
file again.
+ # fortunately the "nice" way actually works!
+ $perlbin = `which perl`;
+ chomp($perlbin);
+ open(INFILE, "<$infile") || die "Couldn't open $infile - $!\n";
+ open(OUTFILE, ">$outfile") || die "Couldn't open $outfile for
writing - $!\n";
+ while(<INFILE>)
+ {
+ if(/\@([\w]*)\@(\/\@([\w]*)\@)?/g)
+ {
+ if($3)
+ {
+ $replace1 = $$1;
+ $replace2 = $$3;
+ $replace1 = &replace($replace1);
+ $replace2 = &replace($replace2);
+ s/\@([\w]*)\@(\/\@([\w]*)\@)?/$replace1\/
$replace2/;
+ print OUTFILE;
+ }
+ else
+ {
+ $replace1 = $$1;
+ $replace1 = &replace($replace1);
+ s/\@([\w]*)\@/$replace1/;
+ print OUTFILE;
+ }
+
+ } else
+ {
+ print OUTFILE;
+ }
+ }
+ close(OUTFILE);
+ close(INFILE);
+}
+# read in config_vars.mk, grab the relevant bits, dump them to
variables. +sub read_config
+{
+ die "Couldn't find config variables!\n" if (! -f $config_vars);
+ open(CFG_VARS,"<$config_vars")||die "Couldn't open $config_vars, $!
\n";
+ my @configs = <CFG_VARS>;
+ close(CFG_VARS);
+ foreach(@configs) #read out the relevant bits of config_vars.mk
+ {
+ if(!/^#/ && !/^$/ && /=/)
+ {
+ chomp();
+ my ($lv,$rv) = split(/=/,$_,2);
+ $lv = trim($lv);
+ $rv = trim($rv);
+ $_=$lv;
+ $$lv=$rv;
+ }
+ # unfortunately we aren't going to know the prefix until some
arbitrary point
+ # thus we are going to have to rewrite the variables at write time.
+ #
this is pretty nasty :/
+ }
+ $exec_prefix=replace($exec_prefix);
+}
+
+sub replace
+{
+ $temp = $_[0];
+ if($temp =~ /^(\$\(exec_prefix\))\/(.*)/)
+ {
+ $temp = "$exec_prefix/$2";
+ }
+ else
+ {
+ if ($temp =~ /^(\$\(prefix\))\/(.*)/)
+ {
+ $temp = "$prefix/$2";
+ }
+ }
+ $temp =~ s/\/\/(.*)/\/$1/gi;
+
+ $temp;
+}
+
+sub trim
+{
+ $_=$_[0];
+ s/^\040+//g;
+ s/\040+$//g;
+ $_;
+}