sub expand_bash_var { my ($varhash, $dephash, $queue) = @_; $queue ||= [ keys %$varhash ]; # for each item in the queue for (@$queue) { # make sure its dependencies are expanded expand_bash_var($varhash, $dephash, $dephash->{$_}); # then interpolate the variables in this item $varhash->{$_} =~ s/\$\{?(\w+)\}?/$varhash->{$1}/g; } } sub get_depend { my $ebuildfname = shift; my $ebuildcontents; my %ebuildvars; my $pkgname = $ebuildfname; my %vardepend; # print "Getting depend for '$ebuildfname'\n"; $pkgname =~ s|/usr/portage/||; $pkgname =~ s|(.+)/.+/(.+).ebuild|$1/$2|; my $pkg = parse_package_name($pkgname); $pkg->{version} =~ s/^-//; $ebuildvars{PV} = "$pkg->{version}$pkg->{suffix}"; open EBUILD, "< $ebuildfname" or die "Couldn't open '$ebuildfname' to get DEPEND\n"; while() { $ebuildcontents .= $_; } close EBUILD; while($ebuildcontents =~ /\b([-A-Z0-9_]+)\s*=\s*\"(.*?)\"/sgc) { $ebuildvars{$1} = $2; } print "Calling expand_bash_var() for '$ebuildfname'\n"; expand_bash_var(\%ebuildvars, \%vardepend); print "Done with expand_bash_var() for '$ebuildfname'\n"; my $depend = $ebuildvars{'DEPEND'} || ''; $depend .= " $ebuildvars{'RDEPEND'}" if(defined $ebuildvars{'RDEPEND'}); $depend =~ s/(\s+|\n+)/ /gs; print "$depend\n"; return $depend; }