in reply to Re: Re: Re: Re: Re: simulating bash
in thread simulating bash

I think I've found the issue. The input contains:

SRC_URI="${SRC_PATH}/X${MY_SV}src-1.tgz ${SRC_PATH}/X${MY_SV}src-2.tgz ${SRC_PATH}/X${MY_SV}src-3.tgz ${SRC_PATH}/X${MY_SV}src-4.tgz ${SRC_PATH}/X${MY_SV}src-5.tgz doc? ( ${SRC_PATH}/X${MY_SV}src-6.tgz ${SRC_PATH}/X${MY_SV}src-7.tgz )" SRC_URI="${SRC_URI} ${X_PATCHES} ${X_DRIVERS} nls? ( mirror://gentoo/gemini-koi8-u.tar.bz2 ) mirror://gentoo/eurofonts-X11.tar.bz2 mirror://gentoo/xfsft-encodings.tar.bz2 mirror://gentoo/XFree86-compose.dir-0.1.bz2 mirror://gentoo/XFree86-en_US.UTF-8.old.bz2 mirror://gentoo/XFree86-locale.alias.bz2 mirror://gentoo/XFree86-locale.dir.bz2 mirror://gentoo/gentoo-cursors-tad-${XCUR_VER}.tar.bz2 truetype? ( !bindist? ( ${MS_FONT_URLS} ) )"

The code doesn't handle stuff like this. I had another idea, though. I could process each variable as I read it from the file. In bash, a variable has to be defined first to be interpolated into one occuring later. I can interpolate each variable as I read it in, so there is no need for a deptree and recursive functions.

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: Re: Re: simulating bash
by japhy (Canon) on May 13, 2004 at 20:37 UTC
    Oh. That's convenient and good. Ok.
    _____________________________________________________
    Jeff[japhy]Pinyan: Perl, regex, and perl hacker, who'd like a job (NYC-area)
    s++=END;++y(;-P)}y js++=;shajsj<++y(p-q)}?print:??;
      My code ended up being the following, which works perfectly.

      sub get_depend { my $ebuildfname = shift; my $ebuildcontents; my %ebuildvars; my $pkgname = $ebuildfname; $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' t +o get DEPEND\n"; while(<EBUILD>) { if(/^\s*if\s*/ || /^\s*#/) { next; } if(/^\s*\w+\(\)\s*{\s*$/) { last; } $ebuildcontents .= $_; } close EBUILD; while($ebuildcontents =~ /\b([-A-Z0-9_]+)\s*=\s*\"(.*?)\"/sgc) { my ($varname, $varvalue) = ($1, $2); $varvalue =~ s/\$\{?(\w+)\}?/$ebuildvars{$1}/gs; $ebuildvars{$varname} = $varvalue; } my $depend = $ebuildvars{'DEPEND'} || ''; $depend .= " $ebuildvars{'RDEPEND'}" if(defined $ebuildvars{'RDEPEND +'}); $depend =~ s/(\s+|\n+)/ /gs; return $depend; }