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 )