|
Packit |
7d6a7d |
#!/usr/bin/perl -w
|
|
Packit |
7d6a7d |
################################################################################
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
# buildperl.pl -- build various versions of perl automatically
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
################################################################################
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
# Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
|
|
Packit |
7d6a7d |
# Version 2.x, Copyright (C) 2001, Paul Marquess.
|
|
Packit |
7d6a7d |
# Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
# This program is free software; you can redistribute it and/or
|
|
Packit |
7d6a7d |
# modify it under the same terms as Perl itself.
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
################################################################################
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
use strict;
|
|
Packit |
7d6a7d |
use Getopt::Long;
|
|
Packit |
7d6a7d |
use Pod::Usage;
|
|
Packit |
7d6a7d |
use File::Find;
|
|
Packit |
7d6a7d |
use File::Path;
|
|
Packit |
7d6a7d |
use Data::Dumper;
|
|
Packit |
7d6a7d |
use IO::File;
|
|
Packit |
7d6a7d |
use Cwd;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
# TODO: - extra arguments to Configure
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
# --test-archives=1 check if archives can be read
|
|
Packit |
7d6a7d |
# --test-archives=2 like 1, but also extract archives
|
|
Packit |
7d6a7d |
# --test-archives=3 like 2, but also apply patches
|
|
Packit |
7d6a7d |
#
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my %opt = (
|
|
Packit |
7d6a7d |
prefix => '/tmp/perl/install/<config>/<perl>',
|
|
Packit |
7d6a7d |
build => '/tmp/perl/build/<config>',
|
|
Packit |
7d6a7d |
source => '/tmp/perl/source',
|
|
Packit |
7d6a7d |
force => 0,
|
|
Packit |
7d6a7d |
test => 0,
|
|
Packit |
7d6a7d |
install => 1,
|
|
Packit |
7d6a7d |
oneshot => 0,
|
|
Packit |
7d6a7d |
configure => 0,
|
|
Packit |
7d6a7d |
'test-archives' => 0,
|
|
Packit |
7d6a7d |
);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my %config = (
|
|
Packit |
7d6a7d |
default => {
|
|
Packit |
7d6a7d |
config_args => '-des',
|
|
Packit |
7d6a7d |
},
|
|
Packit |
7d6a7d |
thread => {
|
|
Packit |
7d6a7d |
config_args => '-des -Dusethreads',
|
|
Packit |
7d6a7d |
masked_versions => [ qr/^5\.00[01234]/ ],
|
|
Packit |
7d6a7d |
},
|
|
Packit |
7d6a7d |
thread5005 => {
|
|
Packit |
7d6a7d |
config_args => '-des -Duse5005threads',
|
|
Packit |
7d6a7d |
masked_versions => [ qr/^5\.00[012345]|^5\.(9|\d\d)|^5\.8\.9/ ],
|
|
Packit |
7d6a7d |
},
|
|
Packit |
7d6a7d |
debug => {
|
|
Packit |
7d6a7d |
config_args => '-des -Doptimize=-g',
|
|
Packit |
7d6a7d |
},
|
|
Packit |
7d6a7d |
);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my @patch = (
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
perl => [
|
|
Packit |
7d6a7d |
qr/^5\.00[01234]/,
|
|
Packit |
7d6a7d |
qw/
|
|
Packit |
7d6a7d |
5.005
|
|
Packit |
7d6a7d |
5.005_01
|
|
Packit |
7d6a7d |
5.005_02
|
|
Packit |
7d6a7d |
5.005_03
|
|
Packit |
7d6a7d |
/,
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
subs => [
|
|
Packit |
7d6a7d |
[ \&patch_db, 1 ],
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
},
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
perl => [
|
|
Packit |
7d6a7d |
qw/
|
|
Packit |
7d6a7d |
5.6.0
|
|
Packit |
7d6a7d |
5.6.1
|
|
Packit |
7d6a7d |
5.7.0
|
|
Packit |
7d6a7d |
5.7.1
|
|
Packit |
7d6a7d |
5.7.2
|
|
Packit |
7d6a7d |
5.7.3
|
|
Packit |
7d6a7d |
5.8.0
|
|
Packit |
7d6a7d |
/,
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
subs => [
|
|
Packit |
7d6a7d |
[ \&patch_db, 3 ],
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
},
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
perl => [
|
|
Packit |
7d6a7d |
qr/^5\.004_0[1234]$/,
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
subs => [
|
|
Packit |
7d6a7d |
[ \&patch_doio ],
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
},
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
perl => [
|
|
Packit |
7d6a7d |
qw/
|
|
Packit |
7d6a7d |
5.005
|
|
Packit |
7d6a7d |
5.005_01
|
|
Packit |
7d6a7d |
5.005_02
|
|
Packit |
7d6a7d |
/,
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
subs => [
|
|
Packit |
7d6a7d |
[ \&patch_sysv, old_format => 1 ],
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
},
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
perl => [
|
|
Packit |
7d6a7d |
qw/
|
|
Packit |
7d6a7d |
5.005_03
|
|
Packit |
7d6a7d |
5.005_04
|
|
Packit |
7d6a7d |
/,
|
|
Packit |
7d6a7d |
qr/^5\.6\.[0-2]$/,
|
|
Packit |
7d6a7d |
qr/^5\.7\.[0-3]$/,
|
|
Packit |
7d6a7d |
qr/^5\.8\.[0-8]$/,
|
|
Packit |
7d6a7d |
qr/^5\.9\.[0-5]$/
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
subs => [
|
|
Packit |
7d6a7d |
[ \&patch_sysv ],
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
},
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
perl => [
|
|
Packit |
7d6a7d |
qr/^5\.004_05$/,
|
|
Packit |
7d6a7d |
qr/^5\.005(?:_0[1-4])?$/,
|
|
Packit |
7d6a7d |
qr/^5\.6\.[01]$/,
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
subs => [
|
|
Packit |
7d6a7d |
[ \&patch_configure ],
|
|
Packit |
7d6a7d |
[ \&patch_makedepend_lc ],
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
},
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
perl => [
|
|
Packit |
7d6a7d |
'5.8.0',
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
subs => [
|
|
Packit |
7d6a7d |
[ \&patch_makedepend_lc ],
|
|
Packit |
7d6a7d |
],
|
|
Packit |
7d6a7d |
},
|
|
Packit |
7d6a7d |
);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my(%perl, @perls);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
GetOptions(\%opt, qw(
|
|
Packit |
7d6a7d |
config=s@
|
|
Packit |
7d6a7d |
prefix=s
|
|
Packit |
7d6a7d |
build=s
|
|
Packit |
7d6a7d |
source=s
|
|
Packit |
7d6a7d |
perl=s@
|
|
Packit |
7d6a7d |
force
|
|
Packit |
7d6a7d |
test
|
|
Packit |
7d6a7d |
install!
|
|
Packit |
7d6a7d |
test-archives=i
|
|
Packit |
7d6a7d |
patch!
|
|
Packit |
7d6a7d |
oneshot
|
|
Packit |
7d6a7d |
)) or pod2usage(2);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my %current;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
if ($opt{patch} || $opt{oneshot}) {
|
|
Packit |
7d6a7d |
@{$opt{perl}} == 1 or die "Exactly one --perl must be given with --patch or --oneshot\n";
|
|
Packit |
7d6a7d |
my $perl = $opt{perl}[0];
|
|
Packit |
7d6a7d |
patch_source($perl) if !exists $opt{patch} || $opt{patch};
|
|
Packit |
7d6a7d |
if (exists $opt{oneshot}) {
|
|
Packit |
7d6a7d |
eval { require String::ShellQuote };
|
|
Packit |
7d6a7d |
die "--oneshot requires String::ShellQuote to be installed\n" if $@;
|
|
Packit |
7d6a7d |
%current = (config => 'oneshot', version => $perl);
|
|
Packit |
7d6a7d |
$config{oneshot} = { config_args => String::ShellQuote::shell_quote(@ARGV) };
|
|
Packit |
7d6a7d |
build_and_install($perl{$perl});
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
exit 0;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
if (exists $opt{config}) {
|
|
Packit |
7d6a7d |
for my $cfg (@{$opt{config}}) {
|
|
Packit |
7d6a7d |
exists $config{$cfg} or die "Unknown configuration: $cfg\n";
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
else {
|
|
Packit |
7d6a7d |
$opt{config} = [sort keys %config];
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
find(sub {
|
|
Packit |
7d6a7d |
/^(perl-?(5\..*))\.tar\.(gz|bz2|lzma)$/ or return;
|
|
Packit |
7d6a7d |
$perl{$1} = { version => $2, source => $File::Find::name, compress => $3 };
|
|
Packit |
7d6a7d |
}, $opt{source});
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
if (exists $opt{perl}) {
|
|
Packit |
7d6a7d |
for my $perl (@{$opt{perl}}) {
|
|
Packit |
7d6a7d |
my $p = $perl;
|
|
Packit |
7d6a7d |
exists $perl{$p} or $p = "perl$perl";
|
|
Packit |
7d6a7d |
exists $perl{$p} or $p = "perl-$perl";
|
|
Packit |
7d6a7d |
exists $perl{$p} or die "Cannot find perl: $perl\n";
|
|
Packit |
7d6a7d |
push @perls, $p;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
else {
|
|
Packit |
7d6a7d |
@perls = sort keys %perl;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
if ($opt{'test-archives'}) {
|
|
Packit |
7d6a7d |
my $test = 'test';
|
|
Packit |
7d6a7d |
my $cwd = cwd;
|
|
Packit |
7d6a7d |
-d $test or mkpath($test);
|
|
Packit |
7d6a7d |
chdir $test or die "chdir $test: $!\n";
|
|
Packit |
7d6a7d |
for my $perl (@perls) {
|
|
Packit |
7d6a7d |
eval {
|
|
Packit |
7d6a7d |
my $d = extract_source($perl{$perl});
|
|
Packit |
7d6a7d |
if ($opt{'test-archives'} > 2) {
|
|
Packit |
7d6a7d |
my $cwd2 = cwd;
|
|
Packit |
7d6a7d |
chdir $d or die "chdir $d: $!\n";
|
|
Packit |
7d6a7d |
patch_source($perl{$perl}{version});
|
|
Packit |
7d6a7d |
chdir $cwd2 or die "chdir $cwd2:$!\n"
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
rmtree($d) if -e $d;
|
|
Packit |
7d6a7d |
};
|
|
Packit |
7d6a7d |
warn $@ if $@;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
chdir $cwd or die "chdir $cwd: $!\n";
|
|
Packit |
7d6a7d |
print STDERR "cleaning up\n";
|
|
Packit |
7d6a7d |
rmtree($test);
|
|
Packit |
7d6a7d |
exit 0;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
for my $cfg (@{$opt{config}}) {
|
|
Packit |
7d6a7d |
for my $perl (@perls) {
|
|
Packit |
7d6a7d |
my $config = $config{$cfg};
|
|
Packit |
7d6a7d |
%current = (config => $cfg, perl => $perl, version => $perl{$perl}{version});
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
if (is($config->{masked_versions}, $current{version})) {
|
|
Packit |
7d6a7d |
print STDERR "skipping $perl for configuration $cfg (masked)\n";
|
|
Packit |
7d6a7d |
next;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
if (-d expand($opt{prefix}) and !$opt{force}) {
|
|
Packit |
7d6a7d |
print STDERR "skipping $perl for configuration $cfg (already installed)\n";
|
|
Packit |
7d6a7d |
next;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my $cwd = cwd;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my $build = expand($opt{build});
|
|
Packit |
7d6a7d |
-d $build or mkpath($build);
|
|
Packit |
7d6a7d |
chdir $build or die "chdir $build: $!\n";
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
print STDERR "building $perl with configuration $cfg\n";
|
|
Packit |
7d6a7d |
buildperl($perl, $config);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
chdir $cwd or die "chdir $cwd: $!\n";
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub expand
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
my $in = shift;
|
|
Packit |
7d6a7d |
$in =~ s/(<(\w+)>)/exists $current{$2} ? $current{$2} : $1/eg;
|
|
Packit |
7d6a7d |
return $in;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub is
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
my($s1, $s2) = @_;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
defined $s1 != defined $s2 and return 0;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
ref $s2 and ($s1, $s2) = ($s2, $s1);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
if (ref $s1) {
|
|
Packit |
7d6a7d |
if (ref $s1 eq 'ARRAY') {
|
|
Packit |
7d6a7d |
is($_, $s2) and return 1 for @$s1;
|
|
Packit |
7d6a7d |
return 0;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
return $s2 =~ $s1;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
return $s1 eq $s2;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub buildperl
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
my($perl, $cfg) = @_;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my $d = extract_source($perl{$perl});
|
|
Packit |
7d6a7d |
chdir $d or die "chdir $d: $!\n";
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
patch_source($perl{$perl}{version});
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
build_and_install($perl{$perl});
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub extract_source
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
eval { require Archive::Tar };
|
|
Packit |
7d6a7d |
die "Archive processing requires Archive::Tar to be installed\n" if $@;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my $perl = shift;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my $what = $opt{'test-archives'} ? 'test' : 'read';
|
|
Packit |
7d6a7d |
print "${what}ing $perl->{source}\n";
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
my $target;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
for my $f (Archive::Tar->list_archive($perl->{source})) {
|
|
Packit |
7d6a7d |
my($t) = $f =~ /^([^\\\/]+)/ or die "ooops, should always match...\n";
|
|
Packit |
7d6a7d |
die "refusing to extract $perl->{source}, as it would not extract to a single directory\n"
|
|
Packit |
7d6a7d |
if defined $target and $target ne $t;
|
|
Packit |
7d6a7d |
$target = $t;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
if ($opt{'test-archives'} == 0 || $opt{'test-archives'} > 1) {
|
|
Packit |
7d6a7d |
if (-d $target) {
|
|
Packit |
7d6a7d |
print "removing old build directory $target\n";
|
|
Packit |
7d6a7d |
rmtree($target);
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
print "extracting $perl->{source}\n";
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
Archive::Tar->extract_archive($perl->{source})
|
|
Packit |
7d6a7d |
or die "extract failed: " . Archive::Tar->error() . "\n";
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
-d $target or die "oooops, $target not found\n";
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
return $target;
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub patch_source
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
my $version = shift;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
for my $p (@patch) {
|
|
Packit |
7d6a7d |
if (is($p->{perl}, $version)) {
|
|
Packit |
7d6a7d |
for my $s (@{$p->{subs}}) {
|
|
Packit |
7d6a7d |
my($sub, @args) = @$s;
|
|
Packit |
7d6a7d |
$sub->(@args);
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub build_and_install
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
my $perl = shift;
|
|
Packit |
7d6a7d |
my $prefix = expand($opt{prefix});
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
run_or_die(q{sed -i -e "s:\\*/\\*) finc=\\"-I\\`echo \\$file | sed 's#/\\[^/\\]\\*\\$##\\`\\" ;;:*/*) finc=\\"-I\\`echo \\$file | sed 's#/[^/]\\*\\$##'\\`\\" ;;:" makedepend.SH});
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
print "building perl $perl->{version} ($current{config})\n";
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
run_or_die("./Configure $config{$current{config}}{config_args} -Dusedevel -Uinstallusrbinperl -Dprefix=$prefix");
|
|
Packit |
7d6a7d |
if (-f "x2p/makefile") {
|
|
Packit |
7d6a7d |
run_or_die("sed -i -e '/^.*<builtin>/d' -e '/^.*<built-in>/d' -e '/^.*<command line>/d' -e '/^.*<command-line>/d' makefile x2p/makefile");
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
run_or_die("make all");
|
|
Packit |
7d6a7d |
run("make test") if $opt{test};
|
|
Packit |
7d6a7d |
if ($opt{install}) {
|
|
Packit |
7d6a7d |
run_or_die("make install");
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
else {
|
|
Packit |
7d6a7d |
print "\n*** NOT INSTALLING PERL ***\n\n";
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub patch_db
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
my $ver = shift;
|
|
Packit |
7d6a7d |
print "patching ext/DB_File/DB_File.xs\n";
|
|
Packit |
7d6a7d |
run_or_die("sed -i -e 's/<db.h>/<db$ver\\/db.h>/' ext/DB_File/DB_File.xs");
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub patch_doio
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
patch(<<'END');
|
|
Packit |
7d6a7d |
--- doio.c.org 2004-06-07 23:14:45.000000000 +0200
|
|
Packit |
7d6a7d |
+++ doio.c 2003-11-04 08:03:03.000000000 +0100
|
|
Packit |
7d6a7d |
@@ -75,6 +75,16 @@
|
|
Packit |
7d6a7d |
# endif
|
|
Packit |
7d6a7d |
#endif
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
+#if _SEM_SEMUN_UNDEFINED
|
|
Packit |
7d6a7d |
+union semun
|
|
Packit |
7d6a7d |
+{
|
|
Packit |
7d6a7d |
+ int val;
|
|
Packit |
7d6a7d |
+ struct semid_ds *buf;
|
|
Packit |
7d6a7d |
+ unsigned short int *array;
|
|
Packit |
7d6a7d |
+ struct seminfo *__buf;
|
|
Packit |
7d6a7d |
+};
|
|
Packit |
7d6a7d |
+#endif
|
|
Packit |
7d6a7d |
+
|
|
Packit |
7d6a7d |
bool
|
|
Packit |
7d6a7d |
do_open(gv,name,len,as_raw,rawmode,rawperm,supplied_fp)
|
|
Packit |
7d6a7d |
GV *gv;
|
|
Packit |
7d6a7d |
END
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub patch_sysv
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
my %opt = @_;
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
# check if patching is required
|
|
Packit |
7d6a7d |
return if $^O ne 'linux' or -f '/usr/include/asm/page.h';
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
if ($opt{old_format}) {
|
|
Packit |
7d6a7d |
patch(<<'END');
|
|
Packit |
7d6a7d |
--- ext/IPC/SysV/SysV.xs.org 1998-07-20 10:20:07.000000000 +0200
|
|
Packit |
7d6a7d |
+++ ext/IPC/SysV/SysV.xs 2007-08-12 10:51:06.000000000 +0200
|
|
Packit |
7d6a7d |
@@ -3,9 +3,6 @@
|
|
Packit |
7d6a7d |
#include "XSUB.h"
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#include <sys/types.h>
|
|
Packit |
7d6a7d |
-#ifdef __linux__
|
|
Packit |
7d6a7d |
-#include <asm/page.h>
|
|
Packit |
7d6a7d |
-#endif
|
|
Packit |
7d6a7d |
#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
|
|
Packit |
7d6a7d |
#include <sys/ipc.h>
|
|
Packit |
7d6a7d |
#ifdef HAS_MSG
|
|
Packit |
7d6a7d |
END
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
else {
|
|
Packit |
7d6a7d |
patch(<<'END');
|
|
Packit |
7d6a7d |
--- ext/IPC/SysV/SysV.xs.org 2007-08-11 00:12:46.000000000 +0200
|
|
Packit |
7d6a7d |
+++ ext/IPC/SysV/SysV.xs 2007-08-11 00:10:51.000000000 +0200
|
|
Packit |
7d6a7d |
@@ -3,9 +3,6 @@
|
|
Packit |
7d6a7d |
#include "XSUB.h"
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#include <sys/types.h>
|
|
Packit |
7d6a7d |
-#ifdef __linux__
|
|
Packit |
7d6a7d |
-# include <asm/page.h>
|
|
Packit |
7d6a7d |
-#endif
|
|
Packit |
7d6a7d |
#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
|
|
Packit |
7d6a7d |
#ifndef HAS_SEM
|
|
Packit |
7d6a7d |
# include <sys/ipc.h>
|
|
Packit |
7d6a7d |
END
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub patch_configure
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
patch(<<'END');
|
|
Packit |
7d6a7d |
--- Configure
|
|
Packit |
7d6a7d |
+++ Configure
|
|
Packit |
7d6a7d |
@@ -3380,6 +3380,18 @@
|
|
Packit |
7d6a7d |
test "X$gfpthkeep" != Xy && gfpth=""
|
|
Packit |
7d6a7d |
EOSC
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
+# gcc 3.1 complains about adding -Idirectories that it already knows about,
|
|
Packit |
7d6a7d |
+# so we will take those off from locincpth.
|
|
Packit |
7d6a7d |
+case "$gccversion" in
|
|
Packit |
7d6a7d |
+3*)
|
|
Packit |
7d6a7d |
+ echo "main(){}">try.c
|
|
Packit |
7d6a7d |
+ for incdir in `$cc -v -c try.c 2>&1 | \
|
|
Packit |
7d6a7d |
+ sed '1,/^#include <\.\.\.>/d;/^End of search list/,$d;s/^ //'` ; do
|
|
Packit |
7d6a7d |
+ locincpth=`echo $locincpth | sed s!$incdir!!`
|
|
Packit |
7d6a7d |
+ done
|
|
Packit |
7d6a7d |
+ $rm -f try try.*
|
|
Packit |
7d6a7d |
+esac
|
|
Packit |
7d6a7d |
+
|
|
Packit |
7d6a7d |
: What should the include directory be ?
|
|
Packit |
7d6a7d |
echo " "
|
|
Packit |
7d6a7d |
$echo $n "Hmm... $c"
|
|
Packit |
7d6a7d |
END
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub patch_makedepend_lc
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
patch(<<'END');
|
|
Packit |
7d6a7d |
--- makedepend.SH
|
|
Packit |
7d6a7d |
+++ makedepend.SH
|
|
Packit |
7d6a7d |
@@ -58,6 +58,10 @@ case $PERL_CONFIG_SH in
|
|
Packit |
7d6a7d |
;;
|
|
Packit |
7d6a7d |
esac
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
+# Avoid localized gcc/cc messages
|
|
Packit |
7d6a7d |
+LC_ALL=C
|
|
Packit |
7d6a7d |
+export LC_ALL
|
|
Packit |
7d6a7d |
+
|
|
Packit |
7d6a7d |
# We need .. when we are in the x2p directory if we are using the
|
|
Packit |
7d6a7d |
# cppstdin wrapper script.
|
|
Packit |
7d6a7d |
# Put .. and . first so that we pick up the present cppstdin, not
|
|
Packit |
7d6a7d |
END
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub patch
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
my($patch) = @_;
|
|
Packit |
7d6a7d |
print "patching $_\n" for $patch =~ /^\+{3}\s+(\S+)/gm;
|
|
Packit |
7d6a7d |
my $diff = 'tmp.diff';
|
|
Packit |
7d6a7d |
write_or_die($diff, $patch);
|
|
Packit |
7d6a7d |
run_or_die("patch -s -p0 <$diff");
|
|
Packit |
7d6a7d |
unlink $diff or die "unlink $diff: $!\n";
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub write_or_die
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
my($file, $data) = @_;
|
|
Packit |
7d6a7d |
my $fh = new IO::File ">$file" or die "$file: $!\n";
|
|
Packit |
7d6a7d |
$fh->print($data);
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub run_or_die
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
# print "[running @_]\n";
|
|
Packit |
7d6a7d |
system "@_" and die "@_: $?\n";
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
sub run
|
|
Packit |
7d6a7d |
{
|
|
Packit |
7d6a7d |
# print "[running @_]\n";
|
|
Packit |
7d6a7d |
system "@_" and warn "@_: $?\n";
|
|
Packit |
7d6a7d |
}
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
__END__
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=head1 NAME
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
buildperl.pl - build/install perl distributions
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=head1 SYNOPSIS
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
perl buildperl.pl [options]
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
--help show this help
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
--source=directory directory containing source tarballs
|
|
Packit |
7d6a7d |
[default: /tmp/perl/source]
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
--build=directory directory used for building perls [EXPAND]
|
|
Packit |
7d6a7d |
[default: /tmp/perl/build/<config>]
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
--prefix=directory use this installation prefix [EXPAND]
|
|
Packit |
7d6a7d |
[default: /tmp/perl/install/<config>/<perl>]
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
--config=configuration build this configuration [MULTI]
|
|
Packit |
7d6a7d |
[default: all possible configurations]
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
--perl=version build this version of perl [MULTI]
|
|
Packit |
7d6a7d |
[default: all possible versions]
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
--force rebuild and install already installed versions
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
--test run test suite after building
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
--noinstall don't install after building
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
--patch only patch the perl source in the current directory
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
--oneshot build from the perl source in the current directory
|
|
Packit |
7d6a7d |
(extra arguments are passed to Configure)
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
options tagged with [MULTI] can be given multiple times
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
options tagged with [EXPAND] expand the following items
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
<perl> versioned perl directory (e.g. 'perl-5.6.1')
|
|
Packit |
7d6a7d |
<version> perl version (e.g. '5.6.1')
|
|
Packit |
7d6a7d |
<config> name of the configuration (e.g. 'default')
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=head1 EXAMPLES
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
The following examples assume that your Perl source tarballs are
|
|
Packit |
7d6a7d |
in F</tmp/perl/source>. If they are somewhere else, use the C<--source>
|
|
Packit |
7d6a7d |
option to specify a different source directory.
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
To build a default configuration of perl5.004_05 and install it
|
|
Packit |
7d6a7d |
to F</opt/perl5.004_05>, you would say:
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
buildperl.pl --prefix='/opt/<perl>' --perl=5.004_05 --config=default
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
To build debugging configurations of all perls in the source directory
|
|
Packit |
7d6a7d |
and install them to F</opt>, use:
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
buildperl.pl --prefix='/opt/<perl>' --config=debug
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
To build all configurations for perl-5.8.5 and perl-5.8.6, test them
|
|
Packit |
7d6a7d |
and don't install them, run:
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
buildperl.pl --perl=5.8.5 --perl=5.8.6 --test --noinstall
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
To build and install a single version of perl with special configuration
|
|
Packit |
7d6a7d |
options, use:
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
buildperl.pl --perl=5.6.0 --prefix=/opt/p560ld --oneshot -- -des -Duselongdouble
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=head1 COPYRIGHT
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
Copyright (c) 2004-2013, Marcus Holland-Moritz.
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
This program is free software; you can redistribute it and/or
|
|
Packit |
7d6a7d |
modify it under the same terms as Perl itself.
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=head1 SEE ALSO
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
See L<Devel::PPPort> and L<HACKERS>.
|