- my ($spec, $macros) = @_;
- local $_;
- while ($_ = shift @{$spec}) {
- if (0 <= index $_, '%if') { # if, ifarch, ifos
-
- # split spec parsing
- my @speccopy = @{$spec};
- my %macroscopy = %{$macros};
- cont(\@speccopy, \%macroscopy);
-
- my $level = 0;
- while ($_ = shift @{$spec}) {
- if ($level <= 0 and ($_ eq '%else' or $_ eq '%endif')) {
- last;
- } elsif (0 <= index $_, '%if') {
- $level++;
- } elsif ($_ eq '%endif') {
- $level--;
- }
- }
-
- # continue parsing
- } elsif ($_ eq '%else') {
-
- # %else happens only when %if was interpreted
- # so skip until %endif
-
- my $level = 0;
- while ($_ = shift @{$spec}) {
- if ($level <= 0 and $_ eq '%endif') {
- last;
- } elsif (0 <= index $_, '%if') {
- $level++;
- } elsif ($_ eq '%endif') {
- $level--;
- }
- }
-
- } elsif (/^\s*\%(define|global)\s+([^\s]+)\s+([^\s].*?)\s*$/) {
- $macros->{$2} = $3;
-
- } elsif (/^Version\s*:\s*(.*?)\s*$/i) {
- $macros->{"version"} = $1;
- } elsif (/^Name\s*:\s*(.*?)\s*$/i) {
- $macros->{"name"} = $1;
- } elsif (!/\%endif/) {
- warn "unrecognised line: $_\n";
- }
- }
-
- # so we have macros now, can parse patchset source
- process_patchset($macros);
-
- # the end, yuppie !
- foreach my $s (@sources) {
- my $src = expand( $s->[2], $macros );
- if (defined $src) {
- our %tried;
- unless (exists $tried{$src}) {
- print_source( $s->[0], $s->[1], $src );
- $tried{$src} = 1;
- }
- }
- }
-
- if (++$total > 10000) {
- error("maximum number of bcond posibilities exceeded");
- exit 0;
- }
+ my ($spec, $macros) = @_;
+ local $_;
+ while ($_ = shift @{$spec}) {
+ if (0 <= index $_, '%if') { # if, ifarch, ifos
+
+ # split spec parsing
+ my @speccopy = @{$spec};
+ my %macroscopy = %{$macros};
+ cont(\@speccopy, \%macroscopy);
+
+ my $level = 0;
+ while ($_ = shift @{$spec}) {
+ if ($level <= 0 and ($_ eq '%else' or $_ eq '%endif')) {
+ last;
+ } elsif (0 <= index $_, '%if') {
+ $level++;
+ } elsif ($_ eq '%endif') {
+ $level--;
+ }
+ }
+
+ # continue parsing
+ } elsif ($_ eq '%else') {
+
+ # %else happens only when %if was interpreted
+ # so skip until %endif
+
+ my $level = 0;
+ while ($_ = shift @{$spec}) {
+ if ($level <= 0 and $_ eq '%endif') {
+ last;
+ } elsif (0 <= index $_, '%if') {
+ $level++;
+ } elsif ($_ eq '%endif') {
+ $level--;
+ }
+ }
+
+ } elsif (/^\s*\%(define|global)\s+([^\s]+)\s+([^\s].*?)\s*$/) {
+ $macros->{$2} = $3;
+
+ } elsif (/^Version\s*:\s*(.*?)\s*$/i) {
+ $macros->{"version"} = $1;
+ } elsif (/^Name\s*:\s*(.*?)\s*$/i) {
+ $macros->{"name"} = $1;
+ } elsif (!/\%endif/) {
+ warn "unrecognised line: $_\n";
+ }
+ }
+
+ # so we have macros now, can parse patchset source
+ process_patchset($macros);
+
+ # the end, yuppie !
+ foreach my $s (@sources) {
+ my $src = expand( $s->[2], $macros );
+ if (defined $src) {
+ our %tried;
+ unless (exists $tried{$src}) {
+ print_source( $s->[0], $s->[1], $src );
+ $tried{$src} = 1;
+ }
+ }
+ }
+
+ if (++$total > 10000) {
+ error("maximum number of bcond posibilities exceeded");
+ exit 0;
+ }