|
|
@@ -3,6 +3,7 @@
|
|
|
|
use Getopt::Long;
|
|
|
|
use Getopt::Long;
|
|
|
|
use v5.10;
|
|
|
|
use v5.10;
|
|
|
|
no feature "say";
|
|
|
|
no feature "say";
|
|
|
|
|
|
|
|
use Storable 'dclone';
|
|
|
|
|
|
|
|
|
|
|
|
my $profile = $ENV{BUILDER_PROFILE} // 3;
|
|
|
|
my $profile = $ENV{BUILDER_PROFILE} // 3;
|
|
|
|
my $jobs = $ENV{BUILDER_JOBS} // 1;
|
|
|
|
my $jobs = $ENV{BUILDER_JOBS} // 1;
|
|
|
@@ -41,6 +42,8 @@ my $qualityassurance_checks = $ENV{QA_CHECKS} // 0;
|
|
|
|
my $remote_conf_portdir = $ENV{REMOTE_CONF_PORTDIR};
|
|
|
|
my $remote_conf_portdir = $ENV{REMOTE_CONF_PORTDIR};
|
|
|
|
my $remote_portdir = $ENV{REMOTE_PORTDIR};
|
|
|
|
my $remote_portdir = $ENV{REMOTE_PORTDIR};
|
|
|
|
my $pretend = $ENV{PRETEND} // 0;
|
|
|
|
my $pretend = $ENV{PRETEND} // 0;
|
|
|
|
|
|
|
|
my $obsoleted = $ENV{DETECT_OBSOLETE} // 0;
|
|
|
|
|
|
|
|
my $target_overlay = $ENV{TARGET_OVERLAY};
|
|
|
|
|
|
|
|
|
|
|
|
my $make_conf = $ENV{MAKE_CONF};
|
|
|
|
my $make_conf = $ENV{MAKE_CONF};
|
|
|
|
|
|
|
|
|
|
|
@@ -89,6 +92,8 @@ sub append_to_file {
|
|
|
|
close $fh_a;
|
|
|
|
close $fh_a;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sub parse_overlays { map{ $_ =~ s/.*?\:\://g; $_ } @{ dclone(\@_) }; }
|
|
|
|
|
|
|
|
|
|
|
|
sub add_portage_repository {
|
|
|
|
sub add_portage_repository {
|
|
|
|
my $repo = $_[0];
|
|
|
|
my $repo = $_[0];
|
|
|
|
my $reponame;
|
|
|
|
my $reponame;
|
|
|
@@ -236,8 +241,9 @@ sub uniq {
|
|
|
|
keys %{ { map { $_ => 1 } @_ } };
|
|
|
|
keys %{ { map { $_ => 1 } @_ } };
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sub detect_useflags
|
|
|
|
# Detect useflags defined as [-alsa,avahi] in atom,
|
|
|
|
{ # Detect useflags defined as [-alsa,avahi] in atom, and fill $hash within the $target sub-hash
|
|
|
|
# and fill $hash within the $target sub-hash
|
|
|
|
|
|
|
|
sub detect_useflags {
|
|
|
|
my ( $target, $packages ) = @_;
|
|
|
|
my ( $target, $packages ) = @_;
|
|
|
|
my @packs = @{$packages};
|
|
|
|
my @packs = @{$packages};
|
|
|
|
for my $i ( 0 .. $#packs ) {
|
|
|
|
for my $i ( 0 .. $#packs ) {
|
|
|
@@ -303,6 +309,15 @@ sub help {
|
|
|
|
|
|
|
|
|
|
|
|
say "****************************************************";
|
|
|
|
say "****************************************************";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
my $per_package_useflags;
|
|
|
|
|
|
|
|
my @packages = @ARGV;
|
|
|
|
|
|
|
|
my @injected_packages = $build_injected_args ? split( / /, $build_injected_args ) : ();
|
|
|
|
|
|
|
|
my @parsed_overlays = grep { $_ !~ /gentoo/i } parse_overlays(@packages,@injected_packages);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
say "Detected overlays: @parsed_overlays" if @parsed_overlays;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@overlays = uniq(@overlays,@parsed_overlays);
|
|
|
|
|
|
|
|
|
|
|
|
if ( @overlays > 0 ) {
|
|
|
|
if ( @overlays > 0 ) {
|
|
|
|
say "Overlay(s) to add";
|
|
|
|
say "Overlay(s) to add";
|
|
|
|
foreach my $overlay (@overlays) {
|
|
|
|
foreach my $overlay (@overlays) {
|
|
|
@@ -316,13 +331,12 @@ say "\t* " . $_ for @ARGV;
|
|
|
|
|
|
|
|
|
|
|
|
say "[*] Syncing configurations files, Layman and Portage";
|
|
|
|
say "[*] Syncing configurations files, Layman and Portage";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($pretend) {
|
|
|
|
if($pretend){
|
|
|
|
say "[*] PRETEND enabled, no real action will be performed.";
|
|
|
|
say "[*] PRETEND enabled, no real action will be performed.";
|
|
|
|
say " Bear in mind that in such way the list of packages";
|
|
|
|
say " Bear in mind that in such way the list of packages";
|
|
|
|
say " that emerge will try to compile will be bigger";
|
|
|
|
say " that emerge will try to compile will be bigger";
|
|
|
|
$equo_install_args .= " -p";
|
|
|
|
$equo_install_args.=" -p";
|
|
|
|
$emerge_defaults_args .= " -p";
|
|
|
|
$emerge_defaults_args.=" -p"
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Syncronizing portage configuration and adding overlays
|
|
|
|
# Syncronizing portage configuration and adding overlays
|
|
|
@@ -464,15 +478,9 @@ if ($use_equo) {
|
|
|
|
|
|
|
|
|
|
|
|
system("cp -rf $make_conf /etc/portage/make.conf") if $make_conf;
|
|
|
|
system("cp -rf $make_conf /etc/portage/make.conf") if $make_conf;
|
|
|
|
|
|
|
|
|
|
|
|
my $per_package_useflags;
|
|
|
|
if( @injected_packages ) {
|
|
|
|
my @packages = @ARGV;
|
|
|
|
say "[*] Injected installs:";
|
|
|
|
my @injected_packages = ();
|
|
|
|
say "\t* " . $_ for @injected_packages;
|
|
|
|
if ($build_injected_args) {
|
|
|
|
|
|
|
|
@injected_packages = split( / /, $build_injected_args );
|
|
|
|
|
|
|
|
say "[*] Injected installs:";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
say "\t* " . $_ for @injected_packages;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Allow users to specify atoms as: media-tv/kodi[-alsa,avahi]
|
|
|
|
# Allow users to specify atoms as: media-tv/kodi[-alsa,avahi]
|
|
|
@@ -533,7 +541,7 @@ if ($use_equo) {
|
|
|
|
safe_call("equo i $equo_install_args --bdeps $_")
|
|
|
|
safe_call("equo i $equo_install_args --bdeps $_")
|
|
|
|
for ( @packages_deps, @equo_install )
|
|
|
|
for ( @packages_deps, @equo_install )
|
|
|
|
; ## bail out here, if installs fails. emerge will compile a LOT of stuff
|
|
|
|
; ## bail out here, if installs fails. emerge will compile a LOT of stuff
|
|
|
|
if ( @equo_remove > 0 and !$pretend) {
|
|
|
|
if ( @equo_remove > 0 and !$pretend ) {
|
|
|
|
say "Removing with equo: @equo_remove";
|
|
|
|
say "Removing with equo: @equo_remove";
|
|
|
|
system("equo rm --nodeps $_") for (@equo_remove);
|
|
|
|
system("equo rm --nodeps $_") for (@equo_remove);
|
|
|
|
}
|
|
|
|
}
|
|
|
@@ -547,16 +555,6 @@ if ($use_equo) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if ( $qualityassurance_checks == 1 ) {
|
|
|
|
|
|
|
|
say "*** Repoman checks ***";
|
|
|
|
|
|
|
|
for ( @packages, @injected_packages ) {
|
|
|
|
|
|
|
|
say "*** QA checks for $_";
|
|
|
|
|
|
|
|
system(
|
|
|
|
|
|
|
|
"pushd \$(dirname \$(equery which $_ 2>/dev/null)); repoman; popd"
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
say "*** Ready to compile, finger crossed ***";
|
|
|
|
say "*** Ready to compile, finger crossed ***";
|
|
|
|
|
|
|
|
|
|
|
|
system("emerge --info")
|
|
|
|
system("emerge --info")
|
|
|
@@ -564,7 +562,7 @@ system("emerge --info")
|
|
|
|
|
|
|
|
|
|
|
|
my $rt;
|
|
|
|
my $rt;
|
|
|
|
|
|
|
|
|
|
|
|
if ( $emerge_remove and $emerge_remove ne "") {
|
|
|
|
if ( $emerge_remove and $emerge_remove ne "" ) {
|
|
|
|
say "Removing with emerge: $emerge_remove";
|
|
|
|
say "Removing with emerge: $emerge_remove";
|
|
|
|
system("emerge -C $_") for split( / /, $emerge_remove );
|
|
|
|
system("emerge -C $_") for split( / /, $emerge_remove );
|
|
|
|
}
|
|
|
|
}
|
|
|
@@ -582,7 +580,7 @@ my $return = $rt >> 8;
|
|
|
|
# best effort -B
|
|
|
|
# best effort -B
|
|
|
|
compile_packs( "injected_targets", @injected_packages );
|
|
|
|
compile_packs( "injected_targets", @injected_packages );
|
|
|
|
|
|
|
|
|
|
|
|
if ($preserved_rebuild and !$pretend) {
|
|
|
|
if ( $preserved_rebuild and !$pretend ) {
|
|
|
|
|
|
|
|
|
|
|
|
system("emerge -j $jobs --buildpkg \@preserved-rebuild");
|
|
|
|
system("emerge -j $jobs --buildpkg \@preserved-rebuild");
|
|
|
|
system("revdep-rebuild");
|
|
|
|
system("revdep-rebuild");
|
|
|
@@ -590,17 +588,27 @@ if ($preserved_rebuild and !$pretend) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if ( $qualityassurance_checks == 1 ) {
|
|
|
|
if ( $qualityassurance_checks == 1 ) {
|
|
|
|
say "*** Missing dependencies checks ***";
|
|
|
|
say "*** Quality assurance ***";
|
|
|
|
for (@packages) {
|
|
|
|
foreach my $pn ( @packages, @injected_packages ) {
|
|
|
|
say "*** DEPEND for $_";
|
|
|
|
say ">> Running repoman on $pn";
|
|
|
|
system("dynlink-scanner $_");
|
|
|
|
system(
|
|
|
|
system("depcheck $_");
|
|
|
|
"pushd \$(dirname \$(equery which $pn 2>/dev/null)); repoman; popd"
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
$pn =~ s/\:\:.*//g;
|
|
|
|
|
|
|
|
say ">> Detecting missing dependencies for $pn";
|
|
|
|
|
|
|
|
system("dynlink-scanner $pn");
|
|
|
|
|
|
|
|
system("depcheck $pn");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( $obsoleted and $target_overlay ) {
|
|
|
|
|
|
|
|
say "*** Detecting obsoletes ***";
|
|
|
|
|
|
|
|
system("sabayon-detectobsolete --overlay ${target_overlay}");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# Copy files to artifacts folder
|
|
|
|
# Copy files to artifacts folder
|
|
|
|
system(
|
|
|
|
system(
|
|
|
|
"mkdir -p $artifacts_folder;cp -rfv /usr/portage/packages $artifacts_folder"
|
|
|
|
"mkdir -p $artifacts_folder;cp -rfv /usr/portage/packages $artifacts_folder"
|
|
|
|
) if ( $artifacts_folder and !$return and !$pretend);
|
|
|
|
) if ( $artifacts_folder and !$return and !$pretend );
|
|
|
|
|
|
|
|
|
|
|
|
exit($return);
|
|
|
|
exit($return);
|
|
|
|