App-Bootstrap-Perl
view release on metacpan or search on metacpan
bin/bootstrap-perl view on Meta::CPAN
my $HOME = $ENV{HOME} || '/opt';
my $hostname = hostname();
our $build_path = "$HOME/.bootstrapperl/bootstrap-perl-build";
my $build_path_perl = "$build_path/perl";
my $logfile = "$build_path/bootstrap-perl.log";
my $logcommand = "$build_path/command.log";
my $giturl = "git://github.com/Perl/perl5.git";
my $cpucount = `cat /proc/cpuinfo | grep bogomips | wc -l`; chomp $cpucount;
my $threadcount = $cpucount + 1;
# getopt
my $dry;
my $prefix;
my $prefixbase = "$HOME/.bootstrapperl/$hostname";
my $version = "blead";
our $VERSION;
my $installdeps;
my $sourcetgz = "/var/tmp/perl.tar.gz";
my $blead = 0;
my $usethreads = 1;
my $bit64 = 1;
my $taintsupport = 1;
my $silentnotaint = 0;
my $help = 0;
my $test = 0;
my $cpan = 1;
my $cleancpansources = 0;
my $forcecpancfg = 0;
my $forcebuildperl = 0;
my $forcemoduleinstall = 0;
my $perlformance = 0;
my $perlformance_local = 0;
my $perlformance_report = 0;
my $jobs = $threadcount;
my @mirrors;
my @modules;
my @runscripts = ();
my @runargs = ();
my @confargs = ();
my @exesuffixes = ();
my $OLDSTDOUT;
my $OLDSTDERR;
my $LOGFILE;
my $COMMAND;
bin/bootstrap-perl view on Meta::CPAN
}
# Execute a command via qx(). Output goes to normal stdout/stderr.
sub print_and_qx_chomp {
my $out = print_and_qx @_;
chomp $out;
$out;
}
sub _perl_base_name {
my ($perl_revision, $perl_version, $perl_subversion, $usethreads, $bit64, $taintsupport, $silentnotaint, $gitdescribe, $gitchangeset, $exe_suffixes, $blead) = @_;
return join("-",
($blead ? "blead" : "$perl_revision.$perl_version"),
($usethreads ? "" : "no" )."thread",
($bit64 ? "" : "no" )."64bit",
($taintsupport ? "" : (($silentnotaint ? "silent" : "")."no"))."taint",
@$exe_suffixes,
);
}
sub _perl_exe_name {
my ($perl_revision, $perl_version, $perl_subversion, $usethreads, $bit64, $taintsupport, $silentnotaint, $gitdescribe, $gitchangeset, $exe_suffixes, $blead) = @_;
return join("-",
"perl",
_perl_base_name(@_),
);
}
sub _perl_pathprefix {
my ($perl_revision, $perl_version, $perl_subversion, $usethreads, $bit64, $taintsupport, $silentnotaint, $gitdescribe, $gitchangeset, $exe_suffixes, $blead) = @_;
return join("-",
$prefixbase."/perl",
_perl_base_name(@_),
$gitdescribe,
);
}
# ========== setup user log ==========
bin/bootstrap-perl view on Meta::CPAN
# ========== getopt ==========
my $ok = GetOptions (
"prefix=s" => \$prefix,
"prefixbase=s" => \$prefixbase,
"version|commit|c=s" => \$version,
"installdeps=s" => \$installdeps,
"sourcetgz=s" => \$sourcetgz,
"blead!" => \$blead,
"usethreads!" => \$usethreads,
"use64bit!" => \$bit64,
"taintsupport!" => \$taintsupport,
"silentnotaint!" => \$silentnotaint,
"help|h" => \$help,
"jobs|j=i" => \$jobs,
"test|t" => \$test,
"cpan!" => \$cpan,
"cleancpansources!" => \$cleancpansources,
"forcecpancfg!" => \$forcecpancfg,
"forcebuildperl!" => \$forcebuildperl,
bin/bootstrap-perl view on Meta::CPAN
# ========== prepare paths ==========
unless (defined $perl_revision && defined $perl_version)
{
no warnings 'uninitialized';
print $USER "# Bummer! Unrecognized version schema ($gitdescribe).\n";
print $USER "# ($perl_revision, $perl_version, $perl_subversion)\n";
exit 1;
}
my $codespeed_executable = _perl_exe_name ($perl_revision, $perl_version, $perl_subversion, $usethreads, $bit64, $taintsupport, $silentnotaint, $gitdescribe, $gitchangeset, \@EXESUFFIXES, $blead);
my $PREFIX = $prefix || _perl_pathprefix($perl_revision, $perl_version, $perl_subversion, $usethreads, $bit64, $taintsupport, $silentnotaint, $gitdescribe, $gitchangeset, \@EXESUFFIXES, $blead);
my $USETHREADS = $usethreads ? "-Dusethreads" : "";
my $BIT64 = $bit64 ? "-Duse64bitall" : "";
my $TAINTSUPPORT = $taintsupport ? "" : ($silentnotaint ? "-Accflags=-DSILENT_NO_TAINT_SUPPORT" : "-Accflags=-DNO_TAINT_SUPPORT");
print $USER "\n";
print $USER "============================================================\n\n";
print $USER " Bootstrap Perl\n";
print $USER " --------------\n\n";
print $USER " version: $version\n\n";
print $USER " git-describe: $gitdescribe\n\n";
print $USER " git-changeset: $gitchangeset\n\n";
bin/bootstrap-perl view on Meta::CPAN
my @in_blead = grep { / blead$/ }
map { chomp ; $_ }
print_and_qx qq!git branch --contains $gitchangeset!;
if ($blead && !@in_blead) {
print $USER "# Bummer!\n";
print $USER "# Use '--blead' only with commits in blead branch.\n";
exit 1;
}
$ENV{PERL_AUTOINSTALL} = "--defaultdeps";
$ENV{TEST_JOBS} = $threadcount;
$ENV{TWMC_TEST_PORT} = "9876";
my $perl_exe = "$PREFIX/bin/perl";
my $THREADS = $jobs ? "-j $jobs" : "-j $threadcount";
my $DRY = $dry ? "-n" : "";
# ========== build ==========
if ($forcebuildperl or ! -x $perl_exe )
{
print $USER "*** BUILD perl\n";
# ========== metainfo in Perl Config ==========
bin/bootstrap-perl view on Meta::CPAN
# ========== make ==========
print_and_system "cd $build_path_perl; make $THREADS";
if ($test)
{
my $api_version = print_and_qx_chomp qq!cd $build_path_perl; . ./config.sh && echo \$api_version!;
my $TEST = $api_version >= 11 ? "test_harness" : "test"; # only Perl 5.11+
my $TEST_JOBS = $jobs ? "TEST_JOBS=$jobs" : "TEST_JOBS=$threadcount";
print_and_system "cd $build_path_perl; $TEST_JOBS make $TEST";
}
# ========== install ==========
print_and_system "cd $build_path_perl; make $DRY install";
} else {
print $USER "*** SKIP building perl - found $perl_exe\n";
}
bin/bootstrap-perl view on Meta::CPAN
=pod
=encoding UTF-8
=head1 NAME
bootstrap-perl - Bootstrap Perl inclusive CPAN from git
=head1 SYNOPSIS
Install a threaded 64bit Perl using current "blead"
from git with CPAN config into a path like
C</$HOME/.bootstrapperl/$HOSTNAME/perl-5.15-thread-64bit-v5.15.5-258-ge7d0a3f>:
$ bootstrap-perl [ <OPTIONS> ]
=head2 Specify git revisions
=head3 latest "blead"
$ bootstrap-perl --version blead # same as default
=head3 tag
bin/bootstrap-perl view on Meta::CPAN
=head3 (re-)configure CPAN
You can specify whether to (re-)write a CPAN config
(C<CPAN/Config.pm>, C<CPAN/MyConfig.pm>) even when it already exists:
$ bootstrap-perl --forcecpancfg
$ bootstrap-perl --noforcecpancfg
Default is B<on>.
=head3 use threads
Build a threaded Perl (C<-Dusethreads>):
$ bootstrap-perl --usethreads
which is already the default. To build non-threaded Perl use:
$ bootstrap-perl --nousethreads
=head3 use 64bit
Build a 64bit enabled Perl (C<-Duse64bitall>):
$ bootstrap-perl --use64bit
which is already the default. To build Perl without 64bit use:
$ bootstrap-perl --nouse64bit
bin/bootstrap-perl view on Meta::CPAN
$ bootstrap-perl --perlformance-local
$ bootstrap-perl --perlformance-local -c .
$ bootstrap-perl --perlformance-local -c .^
$ bootstrap-perl --perlformance-local -c .~5
=head2 Unified installation prefix schema
It uses a unified naming schema for it's installation PREFIX:
/$HOME/.bootstrapperl/$HOSTNAME/perl-5.<VERSION>-<(no)?thread>-<(no)?64bit>-<(no)?taint>-<git-describe>
which leads to paths like this:
/home/ss5/.bootstrapperl/zomtec/perl-5.10-thread-64bit-taint-v5.10.0
/home/ss5/.bootstrapperl/zomtec/perl-5.15-thread-64bit-taint-v5.15.5-258-ge7d0a3f
This naming schema consist of the major version, basic configuration
and I<git-describe>.
=head1 ABOUT
The script B<bootstrap-perl> bootstraps Perl installations with
complete CPAN environment, inclusive distroprefs, from git.
It was originally developed to be used by
xt/commands.t view on Meta::CPAN
Bootstrap Perl
--------------
version: blead
git-describe: v5.21.10-20-gada289e
git-changeset: ada289e74406815f75328d011e5521339169abe7
codespeed name: perl-5.21-thread-no64bit
PREFIX: /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e
configureargs:
CPAN mirrors: http://search.cpan.org/CPAN/
modules:
scripts:
============================================================
*** BUILD perl
# CPAN: /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan5.21.11
# PERL: /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11
# PERLDOC: /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perldoc5.21.11
# POD2TEXT: /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/pod2text5.21.11
USER
print "\$@ = [$@]\n" if $@;
done_testing();
__DATA__
@ARGV = qw(--nouse64bit)
# --- prepare
xt/commands.t view on Meta::CPAN
cd /tmp/bootstrap-perl-build/perl && git rev-parse HEAD
< ada289e74406815f75328d011e5521339169abe7
= $VERSION eq v5.21.10
git branch --contains ada289e74406815f75328d011e5521339169abe7
< * blead
# --- build perl
cd /tmp/bootstrap-perl-build/perl; sh Configure -de -Dusedevel -Dusethreads -Dprefix=/opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e
cd /tmp/bootstrap-perl-build/perl; make -j 2
cd /tmp/bootstrap-perl-build/perl; make install
open > /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl-gitdescribe
chmod ugo+x /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl-gitdescribe
open > /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl-gitchangeset
chmod ugo+x /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl-gitchangeset
open > /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl-codespeed-executable
chmod ugo+x /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl-codespeed-executable
ls -drt1 /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan5.*.* | tail -1
< /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan5.21.11
ls -drt1 /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.*.* | tail -1
< /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11
ls -drt1 /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perldoc5.*.* | tail -1
< /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perldoc5.21.11
ls -drt1 /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/pod2text5.*.* | tail -1
< /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/pod2text5.21.11
if [ ! -e /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl ] ; then ln -sf /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl ; fi
if [ ! -e /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan ] ; then ln -sf /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan5.21.11 /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan ; fi
if [ ! -e /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perldoc ] ; then ln -sf /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perldoc5.21.11 /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perldoc ; fi
if [ ! -e /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/pod2text ] ; then ln -sf /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/pod2text5.21.11 /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/pod2text ; fi
# --- prefs
mkdir -p /tmp/bootstrap-perl-build
cd /tmp/bootstrap-perl-build && git clone git://github.com/renormalist/cpanpm-distroprefs.git
cd /tmp/bootstrap-perl-build/cpanpm-distroprefs && git pull
cd /tmp/bootstrap-perl-build/cpanpm-distroprefs && git submodule update --init --recursive
cd /tmp/bootstrap-perl-build/cpanpm-distroprefs && git pull
mkdir -p /opt/cpan/prefs
rsync -r /tmp/bootstrap-perl-build/cpanpm-distroprefs/cpanpm/distroprefs/ /opt/cpan/prefs/
rsync -r /tmp/bootstrap-perl-build/cpanpm-distroprefs/renormalist/distroprefs/ /opt/cpan/prefs/
rm -fr /opt/cpan/build
# --- cpan config
/opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perldoc5.21.11 -l CPAN | sed -e "s/CPAN.pm/CPAN\/Config.pm/"
< /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm
open > /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm
# --- cpan
if [ -L /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -o ! -e /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan ] ; then /bin/rm /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan ; echo "force install CPAN" | /opt/pe...
chmod +x /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan5.21.11
chmod +x /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan
# cpan helper
open > /tmp/bootstrap-perl-build/cpan_helper.pl
if [ ! -p /tmp/bootstrap-perl-build/cpan_helper.out ]; then mkfifo /tmp/bootstrap-perl-build/cpan_helper.out; fi
open |- /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 /tmp/bootstrap-perl-build/cpan_helper.pl /tmp/bootstrap-perl-build/cpan_helper.out /tmp/bootstrap-perl-build/cpan_helper.log
open < /tmp/bootstrap-perl-build/cpan_helper.out
/opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm YAML::XS
/opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm YAML
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -MYAML -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm MSTROUT/YAML-0.84.t...
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -MYAML -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm MSTROUT/YAML-0.83.t...
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -MYAML -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm MSTROUT/YAML-0.82.t...
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -MYAML -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm INGY/YAML-0.81.tar....
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -MYAML -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm INGY/YAML-0.80.tar....
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -MYAML -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm INGY/YAML-0.79.tar....
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -MYAML -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm INGY/YAML-0.78.tar....
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -MYAML -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm INGY/YAML-0.77.tar....
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -MYAML -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm INGY/YAML-0.76.tar....
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -MYAML -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm -f -i YAML ; fi
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -MIO::Compress::Base -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm -f -i...
if ! /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/perl5.21.11 -M"version 0.97" -e1 ; then /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm -f -i ver...
/opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm -i YAML::Syck
/opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm -i IO::Tty
/opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm -i Expect
/opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm -i Bundle::CPAN
/opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/bin/cpan -j /opt/perl-5.21-thread-no64bit-v5.21.10-20-gada289e/lib/5.21.11/CPAN/Config.pm -i LWP
( run in 0.385 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )