Perl-Dist-Strawberry
view release on metacpan or search on metacpan
lib/Perl/Dist/Strawberry.pm view on Meta::CPAN
package Perl::Dist::Strawberry;
use 5.014;
use warnings;
use Data::Dump qw(pp);
use Getopt::Long qw();
use ExtUtils::MakeMaker qw();
use File::Path qw(make_path remove_tree);
use File::Slurp qw(read_file write_file append_file);
use File::Spec::Functions qw(catfile catdir canonpath splitpath);
use File::Find::Rule;
use File::Glob qw(:glob);
use Archive::Zip qw(:ERROR_CODES :CONSTANTS);
use URI::file qw();
use File::ShareDir qw();
use Pod::Usage qw(pod2usage);
use LWP::UserAgent;
our $VERSION = '4.024';
sub new {
my $class = shift;
return bless {
global => {
# set defaults
target => 'msi+zip+portable',
working_dir => 'c:\strawberry_build',
image_dir => 'c:\strawberry',
cpan_url => 'http://cpan.strawberryperl.com',
package_url => 'https://strawberryperl.com/package/',
test_modules => 1,
test_core => 0,
offline => 0,
perl_debug => 0,
verbosity => 3,
interactive => 1,
restorepoints => 0,
output => {}, #globally storing outputs from each step
@_,
} }, $class;
}
sub parse_options {
my $self = shift;
$self->global->{argv} = [@_]; #keep original parameters
local @ARGV = @_;
Getopt::Long::GetOptions(
'j|job=s' => \$self->global->{job},
'working_dir=s' => \$self->global->{working_dir}, #<dir> default: c:\buildtmp
'wixbin_dir=s' => \$self->global->{wixbin_dir}, #<dir> default: undef
'image_dir=s' => \$self->global->{image_dir}, #<dir> default: c:\strawberry (BEWARE: dir will be destroyed!!)
'cpan_url=s' => \$self->global->{cpan_url}, #<url> default: http://cpan.strawberryperl.com (or use e.g. file://C|/cpanmirror/)
'test_modules!' => \$self->global->{test_modules}, #<flag> default: 1 (0 = skip tests when installing perl modules)
'test_core!' => \$self->global->{test_core}, #<flag> default: 0 (0 = skip tests when installing perl core)
'perl_debug=i' => \$self->global->{perl_debug}, #<flag> default: undef (0)
'perl_64bitint!' => \$self->global->{perl_64bitint}, #<flag> default: undef (0)
'perl_ldouble!' => \$self->global->{perl_ldouble}, #<flag> default: undef (0)
'verbosity=s' => \$self->global->{verbosity}, #<level> default: 2 (you can use values 1/silent to 5/verbose)
'package_url=s' => \$self->global->{package_url}, #<url> default: https://strawberryperl.com/package/ (or use e.g. file://C|/pkgmirror/)
'app_simplename=s' => \$self->global->{app_simplename},#<name> default: undef
'app_fullname=s' => \$self->global->{app_fullname}, #<name> default: undef
'beta=i' => \$self->global->{beta}, #<name> default: undef
'interactive!' => \$self->global->{interactive}, #<flag> default: 1 (0 = no interactive questions)
'restorepoints!' => \$self->global->{restorepoints}, #<flag> default: 0 (1 = create restorepoint after each finished step)
'h|help' => sub { pod2usage(-exitstatus=>0, -verbose=>2) },
) or pod2usage(-verbose=>2);
$self->global->{working_dir} = canonpath($self->global->{working_dir});
$self->global->{image_dir} = canonpath($self->global->{image_dir});
$self->global->{dist_sharedir} = canonpath(File::ShareDir::dist_dir('Perl-Dist-Strawberry'));
$self->global->{build_dir} = canonpath(catdir($self->global->{working_dir}, "build"));
$self->global->{debug_dir} = canonpath(catdir($self->global->{working_dir}, "debug"));
$self->global->{download_dir} = canonpath(catdir($self->global->{working_dir}, "download"));
$self->global->{env_dir} = canonpath(catdir($self->global->{working_dir}, "env"));
$self->global->{output_dir} = canonpath(catdir($self->global->{working_dir}, "output"));
$self->global->{restore_dir} = canonpath(catdir($self->global->{working_dir}, "restore"));
# set other computed values
(my $idq = $self->global->{image_dir}) =~ s|\\|\\\\|g;
(my $idu = $self->global->{image_dir}) =~ s|\\|/|g;
$self->global->{image_dir_quotemeta} = $idq;
$self->global->{image_dir_url} = "file:///$idu";
if (defined $self->global->{wixbin_dir}) {
my $d = $self->global->{wixbin_dir};
unless (-f "$d/candle.exe" && -f "$d/light.exe") {
die "ERROR: invalid wixbin_dir '$d' (candle.exe+light.exe not found)\n";
}
}
}
sub global { # accessor to global data
return shift->{global};
}
sub do_job {
my $self = shift;
my $i;
my $job = $self->load_jobfile();
# now we have parsed all commandline params + jobfile options
#ask user couple of questions
$self->ask_about_dirs; # only ask, die if user do not want to continue
( run in 1.516 second using v1.01-cache-2.11-cpan-364913b4093 )