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 #######################################################################
49 my ($packname, $packvers, $subpacks, @packdeps);
53 ($packname, $packvers, $subpacks, @packdeps) = Build::read_spec($cf, $spec, $xspec);
54 my @sdeps = @packdeps;
55 my @neg = map {substr($_, 1)} grep {/^-/} @packdeps;
56 my %neg = map {$_ => 1} @neg;
57 @sdeps = grep {!$neg{$_}} @sdeps;
58 @sdeps = Build::do_subst($cf, @sdeps);
59 @sdeps = grep {!$neg{$_}} @sdeps;
60 my %sdeps = map {$_ => 1} @sdeps;
62 open(F, '>', $newspec) || die("$newspec: $!\n");
69 if (!defined($l->[1])) {
78 $inchangelog = 0 if $l =~ /^\s*%[^%]/;
81 if ($changelog && ($l =~ /\s*\%changelog\b/)) {
86 $l =~ s/^(Release:\s*).*/$1$release/i if $release;
88 if (!$used || ($l !~ /^BuildRequires:/i)) {
95 my @deps = $r =~ /([^\s\[\(,]+)(\s+[<=>]+\s+[^\s\[,]+)?[\s,]*/g;
99 my @f2 = Build::do_subst($cf, grep {!/^-/} keys %f2);
100 %f2 = map {$_ => 1} @f2;
101 delete $f2{$_} for @neg;
103 my ($pack, $vers) = splice(@deps, 0, 2);
104 $vers = '' unless defined $vers;
106 push @ndeps, "$pack$vers";
113 push @ndeps, sort keys %f2;
117 print F "BuildRequires: ".join(' ', @ndeps)."\n" if @ndeps;
124 print F "%changelog\n";
125 if (open(CF, '<', $changelog)) {
133 close(F) || die("close: $!\n");