--- /usr/sbin/ufed +++ /usr/sbin/ufed @@ -179,6 +179,7 @@ close $makeconf; } + my $sourcing = 0; eval { # USE comment start/end (start/end of newline character at the end, specifically) # default to end of make.conf, to handle make.confs without #USE= @@ -200,8 +200,12 @@ /\G$IDENT/gc or die; my $name = $1; /\G$BLANK/gc; + if($name ne 'source') { /\G$ASSIG/gc or die; /\G$BLANK/gc; + } else { + $sourcing = 1; + } die if pos == length; my $valstart = pos; /\G(?:$BNUQV|$SQVAL|$BNDQV)+/gc or die; @@ -295,6 +300,10 @@ }; die "Parse error when writing make.conf - did you modify it while ufed was running?\n" if $@; + print STDERR <', '/etc/make.conf' or die "Couldn't open /etc/make.conf\n"; print $makeconf $_; --- /usr/lib/ufed/Portage.pm +++ /usr/lib/ufed/Portage.pm @@ -250,8 +250,10 @@ /\G$IDENT/gc or die; my $name = $1; /\G$BLANK/gc; + if($name ne 'source') { /\G$ASSIG/gc or die; /\G$BLANK/gc; + } die if pos == length; my $value = ''; for(;;) { @@ -275,7 +277,20 @@ last } } + if($name eq 'source') { + open my $f, '<', $value or die; + my $pos = pos; + substr($_, pos, 0) = do { + local $/; + my $text = <$f>; + die if not defined $text; + $text; + }; + pos = $pos; + close $f or die; + } else { $env{$name} = $value; + } } }; die "Parse error in $fname\n" if $@;