NAME

bootstrap-perl - Bootstrap Perl inclusive CPAN from git

SYNOPSIS

Install a threaded 64bit Perl using current "blead" from git with CPAN config into a path like /$HOME/.bootstrapperl/$HOSTNAME/perl-5.15-thread-64bit-v5.15.5-258-ge7d0a3f:

$ bootstrap-perl [ <OPTIONS> ]

Specify git revisions

latest "blead"

$ bootstrap-perl --version blead  # same as default

tag

# note the different tag forms before and after Perl 5.10
$ bootstrap-perl --version perl-5.8.7
$ bootstrap-perl --version v5.14.1

branch name

$ bootstrap-perl --version remotes/origin/smoke-me/cpan
$ bootstrap-perl --version remotes/origin/zefram/pad_api
$ bootstrap-perl --version remotes/origin/maint-5.12
$ bootstrap-perl --version remotes/origin/maint-5.12^
$ bootstrap-perl --version remotes/origin/maint-5.12~3

by commit id

$ bootstrap-perl --version c14f2f9db08de3f50fe2ff7438429153d6ceb9a5
$ bootstrap-perl --version c14f2f9db08de3f50fe2ff7438429153d6ceb9a5^

current HEAD in local git repo

A leading . is replaced with HEAD's commitid in current subdir; you can still combine that like usual git revisions:

$ bootstrap-perl --version .
$ bootstrap-perl --version .^
$ bootstrap-perl --version .~5

Installation options

specify giturl

$ bootstrap-perl --giturl git://github.com/mirrors/perl.git
$ bootstrap-perl -g git://github.com/mirrors/perl.git # same
$ bootstrap-perl -g .                                 # local dir

The giturl is always cloned from the specified giturl to a temporary working directory, so your local subdir stays untouched.

install directory

Install into other install directory than the unified naming schema (see below for more on this schema):

$ bootstrap-perl --prefix <PREFIX>

Use the unified naming schema but not under /$HOME/.bootstrapperl/$HOSTNAME:

$ bootstrap-perl --prefixbase /foo/bar

install build dependencies

Provide the distro for which to install known build dependencies, like gcc, git, make, etc.:

$ bootstrap-perl --installdeps=debian

Currently there is only one: debian. Simply send me a patch for your preferred distro, it's easy.

parallel build

Use this many parallel jobs to build:

$ bootstrap-perl --jobs <n>
$ bootstrap-perl -j <n>

Default is to use core count + 1.

test

Run the perl test suite:

$ bootstrap-perl --test
$ bootstrap-perl -t

Default is not to run the tests.

(re-)build Perl

You can specify whether you want to compile perl even when an executable perl already exists:

$ bootstrap-perl --forcebuildperl
$ bootstrap-perl --noforcebuildperl

Default is off.

bootstrap CPAN

You can specify whether to bootstrap a full CPAN environment with distroprefs and dependencies:

$ bootstrap-perl --cpan
$ bootstrap-perl --nocpan

Default is on.

(re-)configure CPAN

You can specify whether to (re-)write a CPAN config (CPAN/Config.pm, CPAN/MyConfig.pm) even when it already exists:

$ bootstrap-perl --forcecpancfg
$ bootstrap-perl --noforcecpancfg

Default is on.

use threads

Build a threaded Perl (-Dusethreads):

$ bootstrap-perl --usethreads

which is already the default. To build non-threaded Perl use:

$ bootstrap-perl --nousethreads

use 64bit

Build a 64bit enabled Perl (-Duse64bitall):

$ bootstrap-perl --use64bit

which is already the default. To build Perl without 64bit use:

$ bootstrap-perl --nouse64bit

taint support

Perl can be built without taint support (-DNO_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

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

then the version used in paths or codespeed executables is using "blead" in order to generate a make it belong to to a common development line besides the yearly segmented graphs.

It is only possible to use --blead with development versions in order to create consistent results from only the blead branch.

Note that --blead does not set a version but only modifies the formats of path prefix and how the version is reported to Perl::Formance; it is not the same as --version blead.

configure CPAN and modules

Configure CPAN to use these mirrors:

$ bootstrap-perl --mirror file:///home/ss5/MINICPAN/
$ bootstrap-perl -m file:///home/ss5/MINICPAN/ -m ftp://ftp.rub.de/pub/CPAN/
$ bootstrap-perl -m file:///home/ss5/MINICPAN/,ftp://ftp.rub.de/pub/CPAN/

(Option can be repeated and allow comma separated lists.)

Install these modules from CPAN:

$ bootstrap-perl --module YAML::Syck
$ bootstrap-perl --module YAML::Syck --forcemoduleinstall
$ bootstrap-perl -M YAML::Syck -M Digest::SHA1 -M IO::Tty -M LWP
$ bootstrap-perl -M YAML::Syck,Digest::SHA1 -M IO::Tty,LWP

(Option can be repeated and allow comma separated lists.)

run scripts

Run these scripts relative to built <PREFIX>/bin/:

$ bootstrap-perl --run tapper-testsuite-benchmark-perlformance
$ bootstrap-perl --run tapper-testsuite-benchmark-perlformance --runargs="--plugins=Fib,FibOO;-vvv"
$ bootstrap-perl -r tapper-testsuite-benchmark-perlformance -r primes.pl

(Option --run can be repeated and allows comma separated lists.)

(Option --runargs can be repeated and allows semicolon[sic] separated lists.)

run Perl::Formance benchmarks

To do everything in one go needed for running Benchmark::Perl::Formance do:

$ bootstrap-perl --perlformance

This sets defaults equivalent to -M Task::PerlFormance -m http://perlformance.net/PINTO/perlformance/ --run benchmark-perlformance --runargs=--plugins=ALL.

You can override parts of that like this:

$ bootstrap-perl --perlformance --runargs="--plugins=Fib,FibOO"

to specify different set ob benchmarks.

To use current subdir as Perl's repo and run only those benchmarks with no extra dependencies

$ bootstrap-perl --perlformance-local
$ bootstrap-perl --perlformance-local -c .
$ bootstrap-perl --perlformance-local -c .^
$ bootstrap-perl --perlformance-local -c .~5

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 git-describe.

ABOUT

The script bootstrap-perl bootstraps Perl installations with complete CPAN environment, inclusive distroprefs, from git.

It was originally developed to be used by Benchmark::Perl::Formance and now lives on its own.

It should work for Perl versions from 5.8.6 to blead. Occasionally it cherry-picks a very few patches to fix some known build issues, like for 5.8.x.

AUTHOR

Steffen Schwigon <ss5@renormalist.net>

COPYRIGHT AND LICENSE

This software is copyright (c) 2021 by Steffen Schwigon.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

ABOUT

AUTO-GENERATED -- see https://metacpan.org/pod/bootstrap-perl

This is CPAN.pm's systemwide configuration file. This file provides defaults for users, and the values can be changed in a per-user configuration file. The user-config file is being looked for as ~/.cpan/CPAN/MyConfig.pm.