|
|
|
@@ -15,7 +15,7 @@ $ENV{FEATURES} = $ENV{FEATURES}
|
|
|
|
|
|
|
|
|
|
my $equo_install_atoms = $ENV{EQUO_INSTALL_ATOMS} // 1;
|
|
|
|
|
my $equo_install_version = $ENV{EQUO_INSTALL_VERSION} // 0;
|
|
|
|
|
my $equo_split_install = $ENV{EQUO_SPLIT_INSTALL} // 0;
|
|
|
|
|
my $equo_split_install = $ENV{EQUO_SPLIT_INSTALL} // 1;
|
|
|
|
|
my $equo_mirrorsort = $ENV{EQUO_MIRRORSORT} // 1;
|
|
|
|
|
my $entropy_repository = $ENV{ENTROPY_REPOSITORY}
|
|
|
|
|
// "main"; # Can be weekly, main, testing
|
|
|
|
@@ -35,8 +35,11 @@ my $enman_add_self = $ENV{ENMAN_ADD_SELF} // 0;
|
|
|
|
|
my $build_injected_args = $ENV{BUILD_INJECTED_ARGS};
|
|
|
|
|
my $equo_masks = $ENV{EQUO_MASKS};
|
|
|
|
|
my $equo_unmasks = $ENV{EQUO_UNMASKS};
|
|
|
|
|
my $equo_install_args = $ENV{EQUO_INSTALL_ARGS} // "--multifetch=10";
|
|
|
|
|
my $remote_overlay = $ENV{REMOTE_OVERLAY};
|
|
|
|
|
my $repoman_check = $ENV{QA_CHECKS} // 0;
|
|
|
|
|
my $remote_conf_portdir = $ENV{REMOTE_CONF_PORTDIR};
|
|
|
|
|
my $remote_portdir = $ENV{REMOTE_PORTDIR};
|
|
|
|
|
|
|
|
|
|
my $make_conf = $ENV{MAKE_CONF};
|
|
|
|
|
|
|
|
|
@@ -216,6 +219,54 @@ sub uniq {
|
|
|
|
|
keys %{ { map { $_ => 1 } @_ } };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sub detect_useflags
|
|
|
|
|
{ # Detect useflags defined as [-alsa,avahi] in atom, and fill $hash within the $target sub-hash
|
|
|
|
|
my ( $target, $packages ) = @_;
|
|
|
|
|
my @packs = @{$packages};
|
|
|
|
|
for my $i ( 0 .. $#packs ) {
|
|
|
|
|
if ( $packages->[$i] =~ /\[(.*?)\]/ ) {
|
|
|
|
|
my $flags = $1;
|
|
|
|
|
$packages->[$i] =~ s/\[.*?\]//g;
|
|
|
|
|
$per_package_useflags->{$target}->[$i] = [ +split( /,/, $flags ) ];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sub compile_packs {
|
|
|
|
|
my ( $target, @packages ) = @_;
|
|
|
|
|
my $extra_arg;
|
|
|
|
|
$extra_arg = "-B" if $target eq "injected_targets";
|
|
|
|
|
my $package_counter = 0;
|
|
|
|
|
my $return;
|
|
|
|
|
for my $pack (@packages) {
|
|
|
|
|
my $tmp_rt;
|
|
|
|
|
say "\n" x 2, "==== Compiling $pack ====", "\n" x 2;
|
|
|
|
|
if ( defined $per_package_useflags->{$target}->[$package_counter]
|
|
|
|
|
and @{ $per_package_useflags->{$target}->[$package_counter] } > 0 )
|
|
|
|
|
{
|
|
|
|
|
say "USEFLAGS: "
|
|
|
|
|
. join( " ",
|
|
|
|
|
@{ $per_package_useflags->{$target}->[$package_counter] } );
|
|
|
|
|
$tmp_rt = system(
|
|
|
|
|
"USE=\""
|
|
|
|
|
. join( " ",
|
|
|
|
|
@{ $per_package_useflags->{$target}->[$package_counter] } )
|
|
|
|
|
. "\" emerge $emerge_defaults_args -j $jobs $extra_arg $pack"
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$tmp_rt =
|
|
|
|
|
system("emerge $emerge_defaults_args -j $jobs $extra_arg $pack");
|
|
|
|
|
}
|
|
|
|
|
$package_counter++;
|
|
|
|
|
|
|
|
|
|
$return = $tmp_rt
|
|
|
|
|
if ( $? == -1 or $? & 127 or !$rt )
|
|
|
|
|
; # if one fails, the build should be considered failed!
|
|
|
|
|
}
|
|
|
|
|
return $return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sub help {
|
|
|
|
|
say "-> You should feed me with something", "", "Examples:", "",
|
|
|
|
|
"\t$0 app-text/tree", "\t$0 plasma-meta --layman kde", "",
|
|
|
|
@@ -244,7 +295,25 @@ say "[*] Syncing configurations files, Layman and Portage";
|
|
|
|
|
|
|
|
|
|
# Syncronizing portage configuration and adding overlays
|
|
|
|
|
system("echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen"); #be sure about that.
|
|
|
|
|
system("cd /etc/portage/;git checkout master; git stash; git pull");
|
|
|
|
|
|
|
|
|
|
# If defined, fetch a remote /etc/portage
|
|
|
|
|
if ( $remote_conf_portdir ne "" ) {
|
|
|
|
|
system("rm -rf /etc/portage");
|
|
|
|
|
system("git clone $remote_conf_portdir /etc/portage");
|
|
|
|
|
system("chown -R portage:portage /etc/portage");
|
|
|
|
|
system("chmod -R ug+w,a+rX /etc/portage");
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
system("cd /etc/portage/;git checkout master; git stash; git pull");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# If defined, fetch a remote /usr/portage
|
|
|
|
|
if ( $remote_portdir ne "" ) {
|
|
|
|
|
system("rm -rf /usr/portage");
|
|
|
|
|
system("git clone $remote_portdir /usr/portage");
|
|
|
|
|
system("chown -R portage:portage /usr/portage");
|
|
|
|
|
system("chmod -R ug+w,a+rX /usr/portage");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
system("echo 'y' | layman -f -a $_") for @overlays;
|
|
|
|
|
|
|
|
|
@@ -343,13 +412,29 @@ if ($use_equo) {
|
|
|
|
|
|
|
|
|
|
system("cp -rf $make_conf /etc/portage/make.conf") if $make_conf;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
my $per_package_useflags;
|
|
|
|
|
my @packages = @ARGV;
|
|
|
|
|
my @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]
|
|
|
|
|
if ($emerge_split_install)
|
|
|
|
|
{ # For targets this will be available only if split_install is enabled
|
|
|
|
|
detect_useflags( "targets", \@packages );
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
map { $_ =~ s/\[.*?\]//g; $_; }
|
|
|
|
|
@packages
|
|
|
|
|
; # Clean up [] if user didn't specified split_install, but specified a useflag combination
|
|
|
|
|
}
|
|
|
|
|
detect_useflags( "injected_targets", \@injected_packages );
|
|
|
|
|
|
|
|
|
|
if ($use_equo) {
|
|
|
|
|
|
|
|
|
|
# best effort mask
|
|
|
|
@@ -393,7 +478,7 @@ if ($use_equo) {
|
|
|
|
|
say "", "[install] Those dependencies will be installed with equo :",
|
|
|
|
|
@packages_deps, "";
|
|
|
|
|
if ($equo_split_install) {
|
|
|
|
|
safe_call("equo i --bdeps $_")
|
|
|
|
|
safe_call("equo i $equo_install_args --bdeps $_")
|
|
|
|
|
for ( @packages_deps, @equo_install )
|
|
|
|
|
; ## bail out here, if installs fails. emerge will compile a LOT of stuff
|
|
|
|
|
if ( @equo_remove > 0 ) {
|
|
|
|
@@ -401,7 +486,8 @@ if ($use_equo) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
safe_call("equo i --bdeps @packages_deps @equo_install")
|
|
|
|
|
safe_call(
|
|
|
|
|
"equo i $equo_install_args --bdeps @packages_deps @equo_install")
|
|
|
|
|
if ( @packages_deps > 0 or @equo_install > 0 )
|
|
|
|
|
; ## bail out here, if installs fails. emerge will compile a LOT of stuff
|
|
|
|
|
system("equo rm --nodeps @equo_remove") if ( @equo_remove > 0 );
|
|
|
|
@@ -409,8 +495,12 @@ if ($use_equo) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ( $repoman_check == 1 ) {
|
|
|
|
|
say "*** Repoman checks ***";
|
|
|
|
|
say "*** QA checks for $_" && system("pushd \$(dirname \$(equery which $_ 2>/dev/null)); repoman; popd") for ( @packages, @injected_packages );
|
|
|
|
|
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 ***";
|
|
|
|
@@ -425,12 +515,7 @@ if ( $emerge_remove and $emerge_remove ne "" ) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if ($emerge_split_install) {
|
|
|
|
|
for my $pack (@packages) {
|
|
|
|
|
say "\n" x 2, "==== Compiling $pack ====", "\n" x 2;
|
|
|
|
|
my $tmp_rt = system("emerge $emerge_defaults_args -j $jobs $pack");
|
|
|
|
|
|
|
|
|
|
# $rt=$tmp_rt if ($? == -1 or $? & 127 or !$rt); # if one fails, the build should be considered failed!
|
|
|
|
|
}
|
|
|
|
|
compile_packs( "targets", @packages );
|
|
|
|
|
$rt = 0; #consider the build good anyway, like a "keep-going"
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
@@ -440,7 +525,7 @@ else {
|
|
|
|
|
my $return = $rt >> 8;
|
|
|
|
|
|
|
|
|
|
# best effort -B
|
|
|
|
|
system("emerge $emerge_defaults_args -j $jobs -B $_") for (@injected_packages);
|
|
|
|
|
compile_packs( "injected_targets", @injected_packages );
|
|
|
|
|
|
|
|
|
|
if ($preserved_rebuild) {
|
|
|
|
|
|
|
|
|
|