diff --git a/intltool-cache-race.patch b/intltool-cache-race.patch new file mode 100644 index 0000000..e77abde --- /dev/null +++ b/intltool-cache-race.patch @@ -0,0 +1,46 @@ +From 7355bdbca18c95a2b99cb254434ad2c2248d6747 Mon Sep 17 00:00:00 2001 +From: Gianfranco Costamagna +Date: Wed, 2 Dec 2020 16:52:53 +0100 +Subject: [PATCH] [PATCH] Avoid a race where some processes try to use a + partial cache + +Gbp-Pq: 0001-Avoid-a-race-where-some-processes-try-to-use-a-parti.patch. +--- + intltool-merge.in | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/intltool-merge.in b/intltool-merge.in +index 05db7cf930..89923a7da1 100644 +--- a/intltool-merge.in ++++ b/intltool-merge.in +@@ -43,6 +43,7 @@ use Getopt::Long; + use Text::Wrap; + use File::Basename; + use Encode; ++use Fcntl qw(:flock); + + my $must_end_tag = -1; + my $last_depth = -1; +@@ -392,11 +393,14 @@ sub load_cache + + sub get_cached_translation_database + { ++ open(my $lockfh, ">", "$cache_file.lock") or die $!; ++ flock($lockfh, LOCK_EX) or die "Could not lock '$cache_file.lock' - $!"; + my $cache_file_age = -M $cache_file; + if (defined $cache_file_age) + { + if ($cache_file_age <= &get_newest_po_age) + { ++ close($lockfh); + &load_cache; + return; + } +@@ -404,6 +408,7 @@ sub get_cached_translation_database + } + + &create_cache; ++ close($lockfh); + } + + sub add_translation diff --git a/intltool.spec b/intltool.spec index 597af02..36f5fc4 100644 --- a/intltool.spec +++ b/intltool.spec @@ -18,19 +18,18 @@ BuildRequires: perl(Getopt::Long) BuildRequires: perl(XML::Parser) BuildRequires: gettext BuildRequires: make -# http://bugzilla.gnome.org/show_bug.cgi?id=568845 -# Dropping this patch per the last comment on that thread: -# Martin Pitt: As the reporter of the bug I close this, as the new API du jour is gsettings, -# which has a sensible gettext integration. -#Patch0: schemas-merge.patch + # Fix intltool-update to work with perl 5.26. Patch taken from # Debian's intltool_0.51.0-4.debian.tar.xz -Patch1: intltool-perl5.26-regex-fixes.patch +Patch: intltool-perl5.26-regex-fixes.patch # https://bugs.launchpad.net/intltool/+bug/1505260 # https://bugzilla.redhat.com/show_bug.cgi?id=1249051 -Patch2: intltool-merge-Create-cache-file-atomically.patch +Patch: intltool-merge-Create-cache-file-atomically.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1318674 -Patch3: intltool_distcheck-fix.patch +Patch: intltool_distcheck-fix.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=2268342 +# https://bugs.launchpad.net/intltool/+bug/1687644 +Patch: intltool-cache-race.patch %description This tool automatically extracts translatable strings from oaf, glade, @@ -38,10 +37,7 @@ bonobo ui, nautilus theme, .desktop, and other data files and puts them in the po files. %prep -%setup -q -%patch 1 -p1 -%patch 2 -p1 -%patch 3 -p1 +%autosetup -p1 %build %configure diff --git a/schemas-merge.patch b/schemas-merge.patch deleted file mode 100644 index caa1e3c..0000000 --- a/schemas-merge.patch +++ /dev/null @@ -1,153 +0,0 @@ -diff -up intltool-0.40.6/intltool-merge.in.schemas intltool-0.40.6/intltool-merge.in ---- intltool-0.40.6/intltool-merge.in.schemas 2009-02-14 17:12:28.000000000 -0500 -+++ intltool-0.40.6/intltool-merge.in 2009-04-27 01:41:11.099450891 -0400 -@@ -38,8 +38,9 @@ my $PACKAGE = "@PACKAGE@"; - my $VERSION = "@VERSION@"; - - ## Loaded modules --use strict; -+use strict; - use Getopt::Long; -+use Cwd; - use Text::Wrap; - use File::Basename; - use Encode; -@@ -68,6 +69,9 @@ my $PASS_THROUGH_ARG = 0; - my $UTF8_ARG = 0; - my $MULTIPLE_OUTPUT = 0; - my $cache_file; -+my $GETTEXT_PACKAGE = ""; -+my %varhash = (); -+my $SRCDIR = $ENV{"srcdir"} || "."; - - ## Handle options - GetOptions -@@ -87,7 +91,8 @@ GetOptions - "pass-through|p" => \$PASS_THROUGH_ARG, - "utf8|u" => \$UTF8_ARG, - "multiple-output|m" => \$MULTIPLE_OUTPUT, -- "cache|c=s" => \$cache_file -+ "cache|c=s" => \$cache_file, -+ "gettext-package|g=s" => \$GETTEXT_PACKAGE - ) or &error; - - my $PO_DIR; -@@ -103,6 +108,8 @@ my $w = "[-A-Za-z0-9._:]"; - # XML quoted string contents - my $q = "[^\\\"]*"; - -+my $MODULE = $GETTEXT_PACKAGE || FindPackageName() || "unknown"; -+ - ## Check for options. - - if ($VERSION_ARG) -@@ -216,6 +223,8 @@ Other options: - a single file containing all localized elements - -c, --cache=FILE specify cache file name - (usually \$top_builddir/po/.intltool-merge-cache) -+ -g, --gettext-package=NAME -+ specify gettext domain, needed for --schemas-style - -q, --quiet suppress most messages - --help display this help and exit - --version output version information and exit -@@ -241,6 +250,25 @@ sub print_message - } - - -+sub FindPackageName -+{ -+ my $name = ""; -+ -+ my $conf_source; { -+ local (*IN); -+ open (IN, "; -+ close IN; -+ } -+ -+ $name = $1 if $conf_source =~ /^GETTEXT_PACKAGE = \[?([^\n\]]+)/m; -+ -+ return $name if $name; -+} -+ -+ - sub preparation - { - $PO_DIR = $ARGV[0]; -@@ -1246,50 +1274,41 @@ sub schemas_merge_translations - my $short_string = $9 ? $9 : ''; - my $long_string = $12 ? $12 : ''; - -- print OUTPUT "$locale_start_spaces$c_default_block"; -- - $default_string =~ s/\s+/ /g; -- $default_string = entity_decode($default_string); - $short_string =~ s/\s+/ /g; -- $short_string = entity_decode($short_string); - $long_string =~ s/\s+/ /g; -- $long_string = entity_decode($long_string); - -- for my $lang (sort keys %po_files_by_lang) -- { -- my $default_translation = $translations{$lang, $default_string}; -- my $short_translation = $translations{$lang, $short_string}; -- my $long_translation = $translations{$lang, $long_string}; -- -- next if (!$default_translation && !$short_translation && -- !$long_translation); -- -- print OUTPUT "\n$locale_start_spaces"; -+ print OUTPUT "$locale_start_spaces$MODULE"; - -+ print OUTPUT "$locale_start_spaces"; - print OUTPUT "$default_spaces"; -- -- if ($default_translation) -- { -- $default_translation = entity_encode($default_translation); -- print OUTPUT "$default_translation"; -+ if ($default_string) { -+ print OUTPUT "$default_string"; - } -+ print OUTPUT "$short_spaces"; -+ if ($short_string) { -+ print OUTPUT "$short_string"; -+ } -+ print OUTPUT "$long_spaces"; -+ if ($long_string) { -+ print OUTPUT "$long_string"; -+ } -+ print OUTPUT "$locale_end_spaces"; - -- print OUTPUT "$short_spaces"; -+ $default_string = entity_decode($default_string); -+ $short_string = entity_decode($short_string); -+ $long_string = entity_decode($long_string); - -- if ($short_translation) -- { -- $short_translation = entity_encode($short_translation); -- print OUTPUT "$short_translation"; -- } -+ for my $lang (sort keys %po_files_by_lang) -+ { -+ my $default_translation = $translations{$lang, $default_string}; - -- print OUTPUT "$long_spaces"; -+ next if (!$default_translation || ($default_translation eq $default_string)); - -- if ($long_translation) -- { -- $long_translation = entity_encode($long_translation); -- print OUTPUT "$long_translation"; -- } -+ $default_translation = entity_encode($default_translation); - -+ print OUTPUT "\n$locale_start_spaces"; -+ print OUTPUT "$default_spaces$default_translation"; - print OUTPUT "$locale_end_spaces"; - } - } -diff -up intltool-0.40.6/tests/results/test.schemas intltool-0.40.6/tests/results/test