4 unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
11 my ($dist, $rpmdeps, $archs, $configdir, $release, $changelog);
14 if ($ARGV[0] eq '--dist') {
19 if ($ARGV[0] eq '--archpath') {
24 if ($ARGV[0] eq '--configdir') {
26 $configdir = shift @ARGV;
29 if ($ARGV[0] eq '--release') {
31 $release = shift @ARGV;
34 if ($ARGV[0] eq '--changelog') {
36 $changelog = shift @ARGV;
41 die("Usage: substitutedeps --dist <dist> --archpath <archpath> [--configdir <configdir>] <specin> <specout>\n") unless @ARGV == 2;
43 my $newspec = $ARGV[1];
45 my $cf = Build::read_config_dist($dist, $archs, $configdir);
47 #######################################################################
50 my $d = Build::parse($cf, $spec, $xspec) || {};
51 my @sdeps = @{$d->{'deps'} || []};
52 my @neg = map {substr($_, 1)} grep {/^-/} @{$d->{'deps'} || []};
53 my %neg = map {$_ => 1} @neg;
54 @sdeps = grep {!$neg{$_}} @sdeps;
55 @sdeps = Build::do_subst($cf, @sdeps);
56 @sdeps = grep {!$neg{$_}} @sdeps;
57 my %sdeps = map {$_ => 1} @sdeps;
59 open(F, '>', $newspec) || die("$newspec: $!\n");
66 if (!defined($l->[1])) {
75 $inchangelog = 0 if $l =~ /^\s*%[^%]/;
78 if ($changelog && ($l =~ /\s*\%changelog\b/)) {
84 if ($l =~ /^Release:/i) {
85 if (!($l =~ s/<RELEASE>/$release/g)) {
86 if ($l =~ /<(?:CI_CNT|B_CNT)>/) {
87 # XXX: should pass ci_cnt/b_cnt instead
88 if ($release =~ /(\d+)\.(\d+)$/) {
89 my ($ci, $b) = ($1, $2);
90 $l =~ s/<CI_CNT>/$ci/;
92 } elsif ($release =~ /(\d+)$/) {
94 $l =~ s/<B_CNT>/$b/ unless $l =~ s/<CI_CNT>/$b/;
97 $l =~ s/^(Release:\s*).*/$1$release/i;
103 if (!$used || ($l !~ /^(?:Build)?Requires:/i)) {
108 my $isbuildrequires = 0;
109 $isbuildrequires = 1 if $l =~ /^BuildRequires:/i;
111 $r =~ s/^[^:]*:\s*//;
112 my @deps = $r =~ /([^\s\[,]+)(\s+[<=>]+\s+[^\s\[,]+)?[\s,]*/g;
115 my @f2 = Build::do_subst_vers($cf, @deps);
117 if ($isbuildrequires) {
118 delete $f2{$_} for @neg;
119 delete $f2{$_} for grep {/^-/} keys %f2;
122 my ($pack, $vers) = splice(@deps, 0, 2);
123 $vers = '' unless defined $vers;
124 if (($isbuildrequires && $sdeps{$pack}) || exists($f2{$pack})) {
125 push @ndeps, "$pack$vers";
133 my ($pack, $vers) = splice(@f2, 0, 2);
134 next unless exists $f2{$pack};
135 $vers = '' unless defined $vers;
136 push @ndeps, "$pack$vers";
142 print F $1.join(' ', @ndeps)."\n" if @ndeps;
149 print F "%changelog\n";
150 if (open(CF, '<', $changelog)) {
158 close(F) || die("close: $!\n");