--- /usr/sbin/ufed +++ /usr/sbin/ufed @@ -25,16 +25,23 @@ $Portage::all_flags{'-*'} = 1 if defined $Portage::make_conf_flags{'*'} && !$Portage::make_conf_flags{'*'}; -Portage::merge %Portage::use_masked_flags, %Portage::archs; - for(keys %Portage::all_flags) { @{$use_descriptions{$_}} = "(Unknown)" if not exists $use_descriptions{$_}; } @{$use_descriptions{'-*'}} = 'Never enable any flags other than those specified in /etc/make.conf'; +for(@Portage::archs) { + delete $Portage::default_flags{$_}; + delete $Portage::all_flags{$_}; + delete $use_descriptions{$_}; +} for(keys %Portage::use_masked_flags) { - if($Portage::use_masked_flags{$_}) { + my $masked = 1; + for(values %{$Portage::use_masked_flags{$_}}) { + last if not($masked &&= $_); + } + if($masked) { delete $Portage::default_flags{$_}; delete $Portage::all_flags{$_}; delete $use_descriptions{$_}; --- /usr/lib/ufed/Portage.pm +++ /usr/lib/ufed/Portage.pm @@ -60,9 +60,6 @@ die "Sorry, USE_ORDER without make.conf overriding global USE flags are not currently supported by ufed.\n"; } -for(keys %use_masked_flags) -{ delete $all_flags{$_} if $use_masked_flags{$_} and exists $all_flags{$_} } - sub have_package($) { my ($cp) = @_; return $packages{$cp}; @@ -216,6 +213,7 @@ redo PARENT; } } + push @profiles, '/etc/portage/profile'; } sub read_sh($) { @@ -301,7 +299,14 @@ for my $dir(@profiles) { for(noncomments "$dir/use.mask") { my $off = s/^-//; - $use_masked_flags{$_} = !$off; + $use_masked_flags{$_}{''} = !$off; + } + for(noncomments "$dir/package.use.mask") { + my($pkg, @flags) = split; + for(@flags) { + my $off = s/^-//; + $use_masked_flags{$_}{$pkg} = !$off; + } } } }