[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