App-Bootstrap-Perl

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

Revision history for App-Bootstrap-Perl

0.18      2021-09-17
        - additional --silentnotaint build option

0.17      2021-09-16
        - introduce --(no)taintsupport build option to build Perl
          with -DNO_TAINT_SUPPORT and name subdirs accordingly
        - generate 'mycpan' wrapper tool which pre-points to Config

0.16      2019-04-26
        - no more App::Cpan usage, back to simple/stupid mode

0.15      2019-04-25
        - tweak timestamps in logs
        - more robust non-existent file handling
        - allow reinstalling modules even when existing

bin/bootstrap-perl  view on Meta::CPAN

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;

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


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,
                     "forcemoduleinstall!" => \$forcemoduleinstall,
                     'perlformance' => \$perlformance,
                     'perlformance-local' => \$perlformance_local,

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";
print $USER "  codespeed name: $codespeed_executable\n\n";
print $USER "  PREFIX:         $PREFIX\n\n";

bin/bootstrap-perl  view on Meta::CPAN

=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

=head3 taint support

Perl can be built without taint support (C<-DNO_TAINT_SUPPORT>, C<-DSILENT_NO_TAINT_SUPPORT>).

To build a Perl with taint support:

  $ bootstrap-perl --taintsupport

which is already the default.

To build Perl without taint support use:

  $ bootstrap-perl --notaintsupport

To make the notaintsupport silent, combine it with --silentnotaint:

  $ bootstrap-perl --notaintsupport --silentnotaint

(sic, both are needed).

=head3 version numbers vs. blead

By default the Perl version number is derived from git-describe and
kept for later reference (e.g., for codespeed exe name). However, if you
specify

  $ bootstrap-perl --blead

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



( run in 1.049 second using v1.01-cache-2.11-cpan-d6f9594c0a5 )