App-sbozyp

 view release on metacpan or  search on metacpan

bin/sbozyp  view on Meta::CPAN

                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 )