diff --git a/builder b/builder index 0b89cf9..33568ca 100755 --- a/builder +++ b/builder @@ -24,6 +24,7 @@ my $skip_portage_sync = $ENV{SKIP_PORTAGE_SYNC} // 0; my $emerge_split_install = $ENV{EMERGE_SPLIT_INSTALL} // 0; my $webrsync = $ENV{WEBRSYNC} // 0; my $enman_repositories = $ENV{ENMAN_REPOSITORIES}; +my $prune_virtuals = $ENV{PRUNE_VIRTUALS} // 0; my $make_conf = $ENV{MAKE_CONF}; @@ -87,24 +88,27 @@ sub available_packages { sub calculate_missing { my $package = shift; my $depth = shift; - my @Installed_Packages = @{+shift}; my @Available_Packages = @{+shift}; + my $prune_virtuals = shift; # Getting the package dependencies and the installed packages my @dependencies = package_deps( $package, $depth, 1 ); - my %install_dependencies = map { $_ => 1 } @dependencies; - # Look for any virtuals and remove its immediate dependencies to avoid - # installing multiple conflicting packages one by one - my @virtual_deps; - for my $dep (@dependencies) { - push(@virtual_deps, package_deps( $dep, 1, 1 )) if ( $dep =~ /^virtual\// ); + if ($prune_virtuals) { + say "[$package] Pruning dependencies of virtual packages"; + my %install_dependencies = map { $_ => 1 } @dependencies; + # Look for any virtuals and remove its immediate dependencies to avoid + # installing multiple conflicting packages one by one + my @virtual_deps; + for my $dep (@dependencies) { + push(@virtual_deps, package_deps( $dep, 1, 1 )) if ( $dep =~ /^virtual\// ); + } + for my $dep (@virtual_deps) { + $install_dependencies{$dep} = 0 if ( $dep !~ /^virtual\// ); + } + @dependencies = grep { $install_dependencies{$_} } @dependencies; } - for my $dep (@virtual_deps) { - $install_dependencies{$dep} = 0 if ( $dep !~ /^virtual\// ); - } - @dependencies = grep { $install_dependencies{$_} } @dependencies; #taking only the 4th column of output as key of the hashmap my %installed_packs = @@ -243,7 +247,7 @@ if ($use_equo) { chomp(@Installed_Packages); foreach my $p (@packages) { say "[$p] Getting the package dependencies which aren't already installed on the system.. "; - push( @packages_deps, calculate_missing( $p , $dep_scan_depth,\@Installed_Packages,\@Available_Packages) ) + push( @packages_deps, calculate_missing( $p , $dep_scan_depth,\@Installed_Packages,\@Available_Packages, $prune_virtuals) ) if $equo_install_atoms; push( @packages_deps, package_deps( $p, $dep_scan_depth, 0 ) ) if $equo_install_version; diff --git a/sabayon-buildpackages b/sabayon-buildpackages index 27d02fa..6e3db97 100755 --- a/sabayon-buildpackages +++ b/sabayon-buildpackages @@ -42,6 +42,7 @@ docker_volumes=( -v "$OUTPUT_DIR:/usr/portage/packages" ) [ -z "$DISTFILES" ] || docker_volumes+=(-v "$DISTFILES:/usr/portage/distfiles") [ -z "$ENTROPY_DOWNLOADED_PACKAGES" ] || docker_volumes+=(-v "$ENTROPY_DOWNLOADED_PACKAGES:/var/lib/entropy/client/packages") [ -z "$DISTCC_HOSTS" ] || docker_env+=(-e "DISTCC_HOSTS=$DISTCC_HOSTS") +[ -z "${PRUNE_VIRTUALS}" ] || docker_env+=(-e "PRUNE_VIRTUALS=$PRUNE_VIRTUALS") if [ -n "$REMOTE_OVERLAY" ]; then git clone "$REMOTE_OVERLAY" "$TEMPDIR"