OpenPKG CVS Repository
http://cvs.openpkg.org/
____________________________________________________________________________
Server: cvs.openpkg.org Name: Michael van Elst
Root: /e/openpkg/cvs Email: [EMAIL PROTECTED]
Module: openpkg-src Date: 22-Jan-2003 13:49:25
Branch: HEAD Handle: 2003012212492400
Modified files:
openpkg-src/openpkg-tool
openpkg-build.pl
Log:
handle conditional dependencies that are enabled by default parameters
Summary:
Revision Changes Path
1.42 +94 -61 openpkg-src/openpkg-tool/openpkg-build.pl
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: openpkg-src/openpkg-tool/openpkg-build.pl
============================================================================
$ cvs diff -u -r1.41 -r1.42 openpkg-build.pl
--- openpkg-src/openpkg-tool/openpkg-build.pl 22 Jan 2003 10:46:56 -0000 1.41
+++ openpkg-src/openpkg-tool/openpkg-build.pl 22 Jan 2003 12:49:24 -0000 1.42
@@ -634,7 +634,7 @@
# grep XML Bag against condition
# return as flat list
#
-sub with_list ($$) {
+sub xwith ($$) {
my($bags,$with) = @_;
my($bag,$li,$el);
my(@out);
@@ -650,6 +650,25 @@
return \@out;
}
+#
+# grep simple parser bag against condition
+# return as flat list
+#
+sub swith ($$$) {
+ my($bags,$name,$with) = @_;
+ my($cond);
+ my(@out);
+
+ foreach $cond (keys %$bags) {
+ next unless conditional($cond, $with);
+ if (exists $bags->{$cond}->{$name}) {
+ push @out, @{$bags->{$cond}->{$name}};
+ }
+ }
+
+ return \@out;
+}
+
sub goodpf ($$) {
my($l,$p) = @_;
return 1 if $l eq '';
@@ -662,14 +681,13 @@
my($section);
my($name,$version);
- my($href,$release,$desc);
- my(@prereq,@bprereq);
- my(@provides,@conflicts,@source,@nosource);
- my(%options);
+ my($href,$release,$desc,$bags);
+ my(%options,@provides);
my($platform,$prefix);
my($rec);
my($tag,$cond,$attrname,$attrval,$body);
- my($useit);
+ my($usecond);
+ my($options, $mywith);
print "# using simple text parser\n";
@@ -686,12 +704,7 @@
$desc = '';
$platform = undef;
$prefix = undef;
- @prereq = ();
- @bprereq = ();
- @provides = ();
- @conflicts = ();
- @source = ();
- @nosource = ();
+ $bags = {};
}
if (!(defined $href) &&
@@ -717,37 +730,49 @@
$
/mx;
- $useit = conditional($cond,$with);
-
if ($tag eq 'Description') {
+ $usecond = $cond;
$section = 'description';
} elsif ($tag eq '/Description') {
+ $usecond = $cond;
$section = undef;
} elsif ($section eq 'description') {
$desc .= $_;
} elsif ($tag eq 'PreReq') {
- $section = 'prereq' if $useit;
+ $usecond = $cond;
+ $section = 'prereq';
} elsif ($tag eq '/PreReq') {
+ $usecond = undef;
$section = undef;
} elsif ($tag eq 'BuildPreReq') {
- $section = 'bprereq' if $useit;
+ $usecond = $cond;
+ $section = 'bprereq';
} elsif ($tag eq '/BuildPreReq') {
+ $usecond = undef;
$section = undef;
} elsif ($tag eq 'Provides') {
- $section = 'provides' if $useit;
+ $usecond = $cond;
+ $section = 'provides';
} elsif ($tag eq '/Provides') {
+ $usecond = undef;
$section = undef;
} elsif ($tag eq 'Conflicts') {
- $section = 'conflicts' if $useit;
+ $usecond = $cond;
+ $section = 'conflicts';
} elsif ($tag eq '/Conflicts') {
+ $usecond = undef;
$section = undef;
} elsif ($tag eq 'NoSource') {
- $section = 'nosource' if $useit;
+ $usecond = $cond;
+ $section = 'nosource';
} elsif ($tag eq '/NoSource') {
+ $usecond = undef;
$section = undef;
} elsif ($tag eq 'Source') {
- $section = 'source' if $useit;
+ $usecond = $cond;
+ $section = 'source';
} elsif ($tag eq '/Source') {
+ $usecond = undef;
$section = undef;
} elsif ($tag eq 'Name') {
$name = $body;
@@ -766,18 +791,10 @@
content => $body
};
}
- if ($section eq 'prereq') {
- push(@prereq, $body);
- } elsif ($section eq 'bprereq') {
- push(@bprereq, $body);
- } elsif ($section eq 'provides') {
- push(@provides, $body);
- } elsif ($section eq 'conflicts') {
- push(@conflicts, $body);
- } elsif ($section eq 'source') {
- push(@source, $body);
- } elsif ($section eq 'nosource') {
- push(@nosource, $body);
+ if ($section eq 'provides') {
+ push @provides, $body;
+ } elsif ($section ne '') {
+ push @{$bags->{"$usecond"}->{$section}}, $body;
}
} elsif ($tag eq '/rdf:Description') {
@@ -804,26 +821,33 @@
});
}
+ $options = %options
+ ? { %options }
+ : parse_options($desc);
+
+ if ($options) {
+ $mywith = { %$options };
+ override_options($mywith, $with, '');
+ } else {
+ $mywith = $with;
+ }
+
$rec = {
href => (relurl($url, undef, $href))[0],
name => $name,
version => $version,
release => $release,
- depends => depend_list([ @bprereq ]),
- keeps => depend_list([ @prereq ]),
- conflicts => [ @conflicts ],
- source => [ @source ],
- nosource => [ @nosource ],
+ depends => depend_list(swith($bags,'bprereq',$mywith)),
+ keeps => depend_list(swith($bags,'prereq',$mywith)),
+ conflicts => swith($bags,'conflicts',$mywith),
+ source => swith($bags,'source',$mywith),
+ nosource => swith($bags,'nosource',$mywith),
desc => $desc,
platform => $platform,
- prefix => $prefix
+ prefix => $prefix,
+ OPTIONS => $options
};
- $rec->{OPTIONS} =
- %options
- ? { %options }
- : parse_options($rec->{desc});
-
foreach (@provides) {
push(@{$map->{$_->{name}}->{vs($_)}}, $rec);
}
@@ -837,20 +861,21 @@
}
sub xml_parser ($$$$$) {
- my($fh, $url, $with, $map,$pfmatch) = @_;
+ my($fh, $url, $with, $map, $pfmatch) = @_;
my(@include);
- my($xml,$desc,$sub);
+ my($xml,$rep,$sub);
my($provides,@provides,%options,$rec);
- my($href,$name,$version,$release);
+ my($href,$name,$version,$release,$desc);
+ my($options, $mywith);
print "# using XML parser\n";
- $xml = XML::Simple::XMLin($fh, forcearray => 1);
- $desc = $xml->{'Repository'}->[0]->{'rdf:Description'};
- $sub = $xml->{'Repository'}->[0]->{'Repository'};
+ $xml = XML::Simple::XMLin($fh, forcearray => 1);
+ $rep = $xml->{'Repository'}->[0]->{'rdf:Description'};
+ $sub = $xml->{'Repository'}->[0]->{'Repository'};
- foreach (@$desc) {
+ foreach (@$rep) {
$href = $_->{'href'};
$name = xel($_->{'Name'});
@@ -886,6 +911,18 @@
});
}
+ $desc = xel($_->{'Description'});
+ $options = %options
+ ? { %options }
+ : parse_options($desc);
+
+ if ($options) {
+ $mywith = { %$options };
+ override_options($mywith, $with, '');
+ } else {
+ $mywith = $with;
+ }
+
$rec = {
href => (relurl($url, undef, $href))[0],
name => $name,
@@ -893,18 +930,14 @@
release => $release,
platform => xel($_->{'Platform'}),
prefix => xel($_->{'Prefixes'}),
- depends => depend_list(with_list($_->{'BuildPreReq'}, $with)),
- keeps => depend_list(with_list($_->{'PreReq'}, $with)),
- conflicts => with_list($_->{'Conflicts'}, $with),
- source => with_list($_->{'Source'}, $with),
- nosource => with_list($_->{'NoSource'}, $with),
- desc => xel($_->{'Description'})
+ depends => depend_list(xwith($_->{'BuildPreReq'}, $mywith)),
+ keeps => depend_list(xwith($_->{'PreReq'}, $mywith)),
+ conflicts => xwith($_->{'Conflicts'}, $mywith),
+ source => xwith($_->{'Source'}, $mywith),
+ nosource => xwith($_->{'NoSource'}, $mywith),
+ desc => $desc,
+ OPTIONS => $options
};
-
- $rec->{OPTIONS} =
- %options
- ? { %options }
- : parse_options($rec->{desc});
foreach (@provides) {
push(@{$map->{$_->{name}}->{vs($_)}}, $rec);
@@ .
______________________________________________________________________
The OpenPKG Project www.openpkg.org
CVS Repository Commit List [EMAIL PROTECTED]