App-sbozyp
view release on metacpan or search on metacpan
for my $dep (pkg_dependencies_recursive($dep)) {
$deps{$dep->{PKGNAME}} = 0 if exists $deps{$dep->{PKGNAME}};
}
}
}
}
my @removable_deps; for my $pkgname (keys %deps) {
if (my $dep = $deps{$pkgname}) {
push @removable_deps, $dep;
}
}
@removable_deps = pkgs_sorted(@removable_deps);
return @removable_deps;
}
sub pkg_prepare_for_build {
my ($pkg, $keep_src, $skip_md5) = @_;
my $arch = arch();
if (my $arch_problem = $pkg->{ARCH_UNSUPPORTED}) {
sbozyp_die("$pkg->{PKGNAME} is $arch_problem on $arch");
}
my %url_md5;
if ($arch eq 'x86_64' and my @urls = @{$pkg->{DOWNLOAD_x86_64}}) {
@url_md5{@urls} = @{$pkg->{MD5SUM_x86_64}};
} else {
my @urls = @{$pkg->{DOWNLOAD}};
@url_md5{@urls} = @{$pkg->{MD5SUM}};
}
my $staging_dir = File::Temp->newdir(DIR => $CONFIG{TMPDIR}, TEMPLATE => 'sbozyp_XXXXXX');
sbozyp_copy($pkg->{PKGDIR}, $staging_dir);
for my $url (sort keys %url_md5) {
my $src_filename = decode_url(basename($url));
if ($keep_src && -r "$CONFIG{SRCDIR}/$src_filename") {
# Sources stored from previous downloads have already been md5 checked
sbozyp_print_stderr("$pkg->{PKGNAME}: using previously downloaded src: $src_filename\n");
sbozyp_copy("$CONFIG{SRCDIR}/$src_filename", "$staging_dir/$src_filename");
} else {
my $md5 = $url_md5{$url};
sbozyp_system('wget', '-e', 'background=off', '-O', "$staging_dir/$src_filename", $url);
unless ($skip_md5) {
my $got_md5 = do {
my $fh = sbozyp_open('<', "$staging_dir/$src_filename");
binmode($fh);
Digest::MD5->new->addfile($fh)->hexdigest;
};
if ($md5 ne $got_md5) {
sbozyp_die("md5sum mismatch for '$url': expected '$md5': got '$got_md5'");
}
}
if ($keep_src) {
sbozyp_mkdir($CONFIG{SRCDIR});
sbozyp_copy("$staging_dir/$src_filename", "$CONFIG{SRCDIR}/$src_filename");
}
}
}
return $staging_dir;
}
sub build_slackware_pkg {
my ($pkg, $keep_src, $skip_md5) = @_;
local $ENV{OUTPUT} = $CONFIG{TMPDIR}; # all SlackBuilds use the $OUTPUT env var to determine output pkg location
sbozyp_mkdir($CONFIG{TMPDIR});
my $staging_dir = pkg_prepare_for_build($pkg, $keep_src, $skip_md5);
my $slackbuild = $pkg->{PRGNAM} . '.SlackBuild';
my $result = with_cwd($staging_dir, sub {
sbozyp_chmod(0755, "./$slackbuild");
return system("./$slackbuild");
});
sbozyp_die("failed to build $pkg->{PKGNAME}") if $result != 0;
my $slackware_pkg = "$CONFIG{TMPDIR}/" . pkg_package_name($pkg);
sbozyp_die("successfully built $pkg->{PKGNAME} but couldn't determine the path of the created Slackware package") unless -f $slackware_pkg;
return $slackware_pkg;
}
sub built_slackware_pkg {
my ($pkg) = @_;
my $slackware_pkg = "$CONFIG{TMPDIR}/" . pkg_package_name($pkg);
return -f $slackware_pkg ? $slackware_pkg : undef;
}
sub install_slackware_pkg {
my ($slackware_pkg) = @_;
sbozyp_system('upgradepkg', '--reinstall', '--install-new', $slackware_pkg);
}
sub remove_slackware_pkg {
my ($slackware_pkg) = @_;
sbozyp_system('removepkg', $slackware_pkg);
}
####################################################
# REPOSITORY MANAGEMENT #
####################################################
sub init_repo {
my $repo_opts = shift;
for my $pkg (@_) {
next unless is_slackbuild_path($pkg);
my $repo_dir = dirname(dirname(Cwd::abs_path($pkg)));
sbozyp_die("package directory arguments must come from the same working tree")
if defined $CONFIG{_REPO_DIR_OVERRIDE} && $CONFIG{_REPO_DIR_OVERRIDE} ne $repo_dir;
$CONFIG{_REPO_DIR_OVERRIDE} = $repo_dir;
}
sbozyp_die("-C, -R, and -S cannot be used with a working tree")
if defined $CONFIG{_REPO_DIR_OVERRIDE}
&& ($repo_opts->{clone} || defined $repo_opts->{reponame} || $repo_opts->{sync});
return 1 if defined $CONFIG{_REPO_DIR_OVERRIDE};
set_repo_name_or_die($repo_opts->{reponame} // $CONFIG{REPO_PRIMARY});
return 0 if $repo_opts->{noinit} && !repo_is_cloned();
if ($repo_opts->{clone} || !repo_is_cloned()) {
i_am_root_or_die('need root to clone repo');
clone_repo();
}
if ($repo_opts->{sync}) {
i_am_root_or_die('need root to sync repo');
sync_repo();
}
return 1;
}
sub set_repo_name_or_die {
( run in 0.954 second using v1.01-cache-2.11-cpan-8dfa8b56332 )