[Vienna-pm] Module::Build und Anpassbarkeit
Angerer, Roland
rangerer at verisign.com
Wed Feb 6 08:57:48 PST 2008
Hi,
Ich will in meinem Build.PL noch in ein paar Dateien spezielle Schlüsselwörter
ersetzen bevor diese installiert werden. Dabei handelt es sich z.B. um
Konfigurationen, die abhängig vom Rechner auf dem Build aufgerufen wird
unterschiedlich ersetzt werden sollen.
Derzeit habe ich das wie folgt gelöst und wundere mich, ob es das nicht alles
viel schöner schon gibt ...
my $class = Module::Build->subclass(code => <<'EOC');
## extending default ./Build action to modify files from build_customize
sub ACTION_build {
my ($self) = shift;
$self->SUPER::ACTION_build(@_);
my $files = $self->{'properties'}{'build_customize'};
return unless keys %$files;
local $/ = undef;
foreach my $file (keys %$files) {
my ($filename, $mode, $fh, $content, $changes);
$filename = File::Spec->catfile($self->blib(), $file);
$mode = (stat $filename)[2] & 07777; # read file mode to reset
after write
open $fh, '<', $filename
or die "unable to read file $filename: $!";
$content = <$fh>;
close $fh;
foreach my $keyword (keys %{$files->{$file}}) {
my ($replacement) = $files->{$file}{$keyword}{$ENV{'HOST'}};
next unless $replacement;
$content =~ s/$keyword/$replacement/;
$changes++;
}
chmod 0600, $filename; # set file to be writeable by user
open $fh, '>', $filename
or die "unable to write file $filename: $!";
print $fh $content;
close $fh;
chmod $mode, $filename; # set old permissions again
print "Customizing $filename ($changes changes)\n";
}
}
EOC
my $builder = $class->new(
...
build_customize => {
'lib/Apache/MMPDownload.pm' => {
'## CONFIG \(.*?\) ##' => {
'HostA' => 'xxx',
'HostB' => 'yyy',
},
},
},
...
);
"Unschön" dabei ist mal (aus meiner Sicht)
- diese Ersetzung wird bei jedem Aufruf von ./Build (egal mit welchen
Parametern) gemacht
- Pfade zu den Dateien müssen sich an blib/ halten (also z.B. bin/ = script/)
lg, Roland
-------------------------------------------------------
Roland Angerer
Software Engineer
Mobile Application Services
rangerer at verisign.com
Direct: +43 (662) 45 00 03
Fax: +43 (662) 45 00 03-55
Mobile: +43 (664) 808 41 515
VeriSign®
Jakob-Haringer Strasse 3
A-5020 Salzburg
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 4782 bytes
Desc: not available
Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20080206/1c74da26/attachment.bin
More information about the Vienna-pm
mailing list