version 1.61, 2011/06/12 17:13:17 |
version 1.62, 2011/06/12 18:16:25 |
|
|
} |
} |
} |
} |
|
|
pr_debug("\n" . beautify_list($0, @ARGV)); |
say_debug("\n" . beautify_list($0, @ARGV)); |
|
|
my $rc = 0; |
my $rc = 0; |
|
|
|
|
handle_config($dep, undef, undef, $list); |
handle_config($dep, undef, undef, $list); |
} |
} |
} |
} |
pr_debug("package $p " . lc($property) . " " . join(',', @$deps)); |
say_debug("package $p " . lc($property) . " " . join(',', @$deps)); |
} |
} |
}; |
}; |
|
|
|
|
if ($allow_uninstalled && $p !~ m/\-uninstalled$/) { |
if ($allow_uninstalled && $p !~ m/\-uninstalled$/) { |
foreach my $d (@PKGPATH) { |
foreach my $d (@PKGPATH) { |
my $f = "$d/$p-uninstalled.pc"; |
my $f = "$d/$p-uninstalled.pc"; |
pr_debug("pathresolve($p) looking in $f"); |
say_debug("pathresolve($p) looking in $f"); |
if (-f $f) { |
if (-f $f) { |
$found_uninstalled = 1; |
$found_uninstalled = 1; |
return $f; |
return $f; |
|
|
|
|
foreach my $d (@PKGPATH) { |
foreach my $d (@PKGPATH) { |
my $f = "$d/$p.pc"; |
my $f = "$d/$p.pc"; |
pr_debug("pathresolve($p) looking in $f"); |
say_debug("pathresolve($p) looking in $f"); |
return $f if -f $f; |
return $f if -f $f; |
} |
} |
return undef; |
return undef; |
|
|
if (!$@) { |
if (!$@) { |
return validate_config($f, $cfg); |
return validate_config($f, $cfg); |
} else { |
} else { |
pr_debug($@); |
say_debug($@); |
} |
} |
return undef; |
return undef; |
} |
} |
|
|
{ |
{ |
my $name = shift; |
my $name = shift; |
|
|
pr_debug("processing $name"); |
say_debug("processing $name"); |
|
|
if (exists $configs{$name}) { |
if (exists $configs{$name}) { |
return $configs{$name}; |
return $configs{$name}; |
|
|
if (stat($f)->size == 0) { |
if (stat($f)->size == 0) { |
my $p = $f; |
my $p = $f; |
$p =~ s/(^.*\/)(.*?)$/$2/g; |
$p =~ s/(^.*\/)(.*?)$/$2/g; |
pr_error("Package file '$p' appears to be empty"); |
say_error("Package file '$p' appears to be empty"); |
} |
} |
|
|
foreach (@required_elems) { |
foreach (@required_elems) { |
my $e = $cfg->get_property($_, $variables); |
my $e = $cfg->get_property($_, $variables); |
if (!defined $e) { |
if (!defined $e) { |
$f =~ s/(^.*\/)(.*?)\.pc$/$2/g; |
$f =~ s/(^.*\/)(.*?)\.pc$/$2/g; |
pr_error("Package '$f' has no $_: field"); |
say_error("Package '$f' has no $_: field"); |
return undef; |
return undef; |
} |
} |
} |
} |
|
|
if (defined $f) { |
if (defined $f) { |
return get_config($f); |
return get_config($f); |
} |
} |
pr_error("Package $p was not found in the pkg-config search path"); |
say_error("Package $p was not found in the pkg-config search path"); |
|
|
return undef; |
return undef; |
} |
} |
|
|
foreach my $f (@files) { |
foreach my $f (@files) { |
my $cfg = get_config($f); |
my $cfg = get_config($f); |
if (!defined $cfg) { |
if (!defined $cfg) { |
print STDERR "Problem reading file $f\n"; |
say_warning("Problem reading file $f"); |
$error = 1; |
$error = 1; |
next; |
next; |
} |
} |
|
|
# accepted are (in order): a(lpha) < b(eta) < rc < ' '. |
# accepted are (in order): a(lpha) < b(eta) < rc < ' '. |
# suffix[0] is the 'alpha' part, suffix[1] is the '1' part in 'alpha1'. |
# suffix[0] is the 'alpha' part, suffix[1] is the '1' part in 'alpha1'. |
if ($a =~ s/(rc|beta|b|alpha|a)(\d+)$//) { |
if ($a =~ s/(rc|beta|b|alpha|a)(\d+)$//) { |
pr_debug("valid suffix $1$2 found in $a$1$2."); |
say_debug("valid suffix $1$2 found in $a$1$2."); |
$suffix_a[0] = $1; |
$suffix_a[0] = $1; |
$suffix_a[1] = $2; |
$suffix_a[1] = $2; |
} |
} |
|
|
if ($b =~ s/(rc|beta|b|alpha|a)(\d+)$//) { |
if ($b =~ s/(rc|beta|b|alpha|a)(\d+)$//) { |
pr_debug("valid suffix $1$2 found in $b$1$2."); |
say_debug("valid suffix $1$2 found in $b$1$2."); |
$suffix_b[0] = $1; |
$suffix_b[0] = $1; |
$suffix_b[1] = $2; |
$suffix_b[1] = $2; |
} |
} |
|
|
|
|
# rc beats beta beats alpha |
# rc beats beta beats alpha |
if (&$first_char($suffix_a[0]) lt &$first_char($suffix_b[0])) { |
if (&$first_char($suffix_a[0]) lt &$first_char($suffix_b[0])) { |
pr_debug("$full_a (installed) < $full_b (wanted)"); |
say_debug("$full_a (installed) < $full_b (wanted)"); |
return -1; |
return -1; |
} else { |
} else { |
pr_debug("$full_a (installed) > $full_b (wanted)"); |
say_debug("$full_a (installed) > $full_b (wanted)"); |
return 1; |
return 1; |
} |
} |
|
|
|
|
# thereby beating the other. |
# thereby beating the other. |
# e.g.: 1.02 > 1.02b1 |
# e.g.: 1.02 > 1.02b1 |
if (@suffix_a) { # a is older |
if (@suffix_a) { # a is older |
pr_debug("$full_a (installed) < $full_b (wanted)"); |
say_debug("$full_a (installed) < $full_b (wanted)"); |
return 1; |
return 1; |
} |
} |
|
|
if (@suffix_b) { # b is older |
if (@suffix_b) { # b is older |
pr_debug("$full_a (installed) > $full_b (wanted)"); |
say_debug("$full_a (installed) > $full_b (wanted)"); |
return -1; |
return -1; |
} |
} |
} |
} |
|
|
# can't possibly match if we can't find the version string |
# can't possibly match if we can't find the version string |
return 0 if $inst eq ''; |
return 0 if $inst eq ''; |
|
|
pr_debug("comparing $want (wanted) to $inst (installed)"); |
say_debug("comparing $want (wanted) to $inst (installed)"); |
my $value = compare($inst, $want); |
my $value = compare($inst, $want); |
if ($op eq '>=') { return $value >= 0; } |
if ($op eq '>=') { return $value >= 0; } |
elsif ($op eq '=') { return $value == 0; } |
elsif ($op eq '=') { return $value == 0; } |
|
|
my $version = stringize($cfg->get_property('Version')); |
my $version = stringize($cfg->get_property('Version')); |
my $url = stringize($cfg->get_property('URL')); |
my $url = stringize($cfg->get_property('URL')); |
|
|
print STDERR "Requested '$p $op $v' but version of $name is $version\n"; |
say_warning("Requested '$p $op $v' but version of $name is $version"); |
print STDERR "You may find new versions of $name at $url\n" if $url; |
say_warning("You may find new versions of $name at $url") if $url; |
} |
} |
|
|
sub simplify_and_reverse |
sub simplify_and_reverse |
|
|
} elsif (defined($mode{printrequiresprivate})) { |
} elsif (defined($mode{printrequiresprivate})) { |
$value = $cfg->get_property('Requires.private', $variables); |
$value = $cfg->get_property('Requires.private', $variables); |
} else { |
} else { |
pr_debug("Unknown mode for print_requires."); |
say_debug("Unknown mode for print_requires."); |
return 1; |
return 1; |
} |
} |
|
|
|
|
return join(' ', map {"[$_]"} @_); |
return join(' ', map {"[$_]"} @_); |
} |
} |
|
|
sub pr_debug |
sub say_debug |
{ |
{ |
my $str = shift; |
say_msg(shift) if $mode{debug}; |
print STDERR $str . "\n" if $mode{debug}; |
|
} |
} |
|
|
sub pr_error |
sub say_error |
{ |
{ |
my $str = shift; |
say_msg(shift) if $mode{printerr} |
print STDERR $str . "\n" if $mode{printerr}; |
} |
|
|
|
sub say_warning |
|
{ |
|
say_msg(shift); |
|
} |
|
|
|
sub say_msg |
|
{ |
|
my ($str) = shift; |
|
|
|
# If --errors-to-stdout was given, close STDERR (to be safe), |
|
# then dup the output to STDOUT and delete the key from %mode so we |
|
# won't keep checking it. STDERR stays dup'ed. |
|
if ($mode{estdout}) { |
|
close(STDERR); |
|
open(STDERR, ">&STDOUT") or die "Can't dup STDOUT: $!"; |
|
delete($mode{estdout}); |
|
} |
|
|
|
print STDERR $str . "\n"; |
} |
} |