App-Bootstrap-Perl
view release on metacpan or search on metacpan
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 )