[SCM] Debian Qt/KDE packaging tools branch, master, updated. debian/0.5.3-45-g4ec5727
Modestas Vainius
modax at alioth.debian.org
Tue Jan 19 02:51:28 UTC 2010
The following commit has been merged in the master branch:
commit fed68f6d0aaa6e2c7cbbdd949f8c7db087e5bfc1
Author: Modestas Vainius <modestas at vainius.eu>
Date: Tue Jan 19 02:34:48 2010 +0200
Various pkgkde-symbolshelper fixes (mostly 'create' related).
In addition, when creating, dump an arch-specifc symbol as !arch when it is
missing only on one arch.
---
.../Debian/PkgKde/SymbolsHelper/Symbol.pm | 5 ++-
.../PkgKde/SymbolsHelper/SymbolFileCollection.pm | 24 +++++++++--------
symbolshelper/pkgkde-symbolshelper | 27 +++++++++++++++----
3 files changed, 37 insertions(+), 19 deletions(-)
diff --git a/symbolshelper/Debian/PkgKde/SymbolsHelper/Symbol.pm b/symbolshelper/Debian/PkgKde/SymbolsHelper/Symbol.pm
index 9355c01..2117794 100644
--- a/symbolshelper/Debian/PkgKde/SymbolsHelper/Symbol.pm
+++ b/symbolshelper/Debian/PkgKde/SymbolsHelper/Symbol.pm
@@ -137,9 +137,10 @@ sub detect_cpp_templinst() {
}
sub mark_cpp_templinst_as_optional {
- my $self = shift;
+ my ($self, @tag) = @_;
+ @tag = ("optional", "templinst") unless @tag;
if (!$self->is_optional() && $self->detect_cpp_templinst()) {
- $self->add_tag("optional", "templinst");
+ $self->add_tag(@tag);
}
}
diff --git a/symbolshelper/Debian/PkgKde/SymbolsHelper/SymbolFileCollection.pm b/symbolshelper/Debian/PkgKde/SymbolsHelper/SymbolFileCollection.pm
index 5190866..178148e 100644
--- a/symbolshelper/Debian/PkgKde/SymbolsHelper/SymbolFileCollection.pm
+++ b/symbolshelper/Debian/PkgKde/SymbolsHelper/SymbolFileCollection.pm
@@ -162,14 +162,16 @@ sub create_template {
foreach my $name (sort keys %distinct_names) {
info(" $name on: " . join(" ", sort(@{$distinct_names{$name}})));
}
- my $str = "";
- foreach my $arch (sort(keys %arch_ok)) {
- $str .= "$arch " if (defined $arch_ok{$arch} && $arch_ok{$arch} != $arch_ok_i);
- }
- info(" - missing on: $str\n");
+ my @miss_arches = grep { $arch_ok{$_} != $arch_ok_i } sort(keys %arch_ok);
+ info(" - missing on: " . join(" ", @miss_arches) . "\n");
# Schedule as arch-specific symbol
- $arch_specific = join(" ", sort(keys %{$group->{arches}}));
+ if (@miss_arches == 1) {
+ # If the symbol is only missing on one arch, negate it
+ $arch_specific = join(" ", map { "!$_" } @miss_arches);
+ } else {
+ $arch_specific = join(" ", sort(keys %{$group->{arches}}));
+ }
# Determine symbol arch, prefer main_arch though
if (!exists $group->{arches}{$main_arch}) {
$sym_arch = (keys %{$group->{arches}})[0];
@@ -177,10 +179,10 @@ sub create_template {
}
# Post process symbols in the group
- my $main_symbol = $group->{arches}{$sym_arch}->{symbol};
+ my $sym = $group->{arches}{$sym_arch}->{symbol};
foreach my $subst (@TYPE_SUBSTS) {
- if ($subst->detect($main_symbol->get_h_name(), $main_arch, $group->{arches})) {
- $main_symbol->add_tag("subst");
+ if ($subst->detect($sym->get_h_name(), $sym_arch, $group->{arches})) {
+ $sym->add_tag("subst");
# Make archsymbols arch independent with regard to his handler
foreach my $arch (keys %{$group->{arches}}) {
$subst->neutralize($group->{arches}{$arch});
@@ -188,9 +190,9 @@ sub create_template {
}
}
if ($arch_specific) {
- $main_symbol->add_tag("arch", $arch_specific);
+ $sym->add_tag("arch", $arch_specific);
if ($sym_arch ne $main_arch) {
- $main_symfile->add_symbol($soname, $main_symbol);
+ $main_symfile->add_symbol($soname, $sym);
}
}
}
diff --git a/symbolshelper/pkgkde-symbolshelper b/symbolshelper/pkgkde-symbolshelper
index 312a7dd..31013f5 100755
--- a/symbolshelper/pkgkde-symbolshelper
+++ b/symbolshelper/pkgkde-symbolshelper
@@ -141,13 +141,13 @@ sub find_package_symbolfile_path {
}
sub out_symfile {
- my $symfile = shift;
+ my ($symfile, %opts) = @_;
return 1 unless $symfile;
if ($opt_out) {
- $symfile->save($opt_out, template_mode => 1);
+ $symfile->save($opt_out, template_mode => 1, %opts);
} else {
- $symfile->dump(*STDOUT, template_mode => 1);
+ $symfile->dump(*STDOUT, template_mode => 1, %opts);
}
return 0;
}
@@ -190,8 +190,12 @@ sub subcommand_create {
$symfiles->load_symbol_files(\%files);
# Detect templinst symbols before substitutions
+ # Do not mark as optional yet to avoid inteferring with template
+ # creation.
foreach my $symfile ($symfiles->get_symfiles()) {
- $symfile->mark_cpp_templinst_as_optional();
+ foreach my $sym ($symfile->get_symbols()) {
+ $sym->mark_cpp_templinst_as_optional("to-be-templinst");
+ }
}
# Create a symbols template
@@ -203,6 +207,11 @@ sub subcommand_create {
}
foreach my $sym ($template->get_symbols()) {
+ # Set standard optional=templinst tag where scheduled
+ if ($sym->has_tag("to-be-templinst")) {
+ $sym->delete_tag("to-be-templinst");
+ $sym->add_tag("optional", "templinst") unless $sym->is_optional();
+ }
tweak_symbol($sym);
}
return out_symfile($template);
@@ -250,6 +259,7 @@ sub subcommand_patch {
foreach my $info ($patched_symfile->get_new_symbols($orig_symfile)) {
# Retrieve real symbol instance
my $sym = $patched_symfile->{objects}{$info->{soname}}{syms}{$info->get_symbolname()};
+ $sym->mark_cpp_templinst_as_optional();
tweak_symbol($sym);
info("NEW symbol: " . $sym->get_symbolspec(1));
@@ -260,15 +270,20 @@ sub subcommand_patch {
}
sub subcommand_resort {
+ my $opt_template = 1;
my %opts = (
- get_common_options("oi"),
+ get_common_options("oia"),
+ "template!" => \$opt_template,
);
if (GetOptions(%opts)) {
check_mandatory_options("i");
if (-f $opt_in) {
my $symfile = Debian::PkgKde::SymbolsHelper::SymbolFile->new(file => $opt_in, arch => $opt_arch);
- return out_symfile($symfile);
+ my %o = (
+ template_mode => $opt_template
+ );
+ return out_symfile($symfile, %o);
} else {
error("input symbol file ($opt_in) not found");
return 1;
--
Debian Qt/KDE packaging tools
More information about the pkg-kde-commits
mailing list