From 768262ccff1183aff322cd440e84b2af21d85fb7 Mon Sep 17 00:00:00 2001 From: acli Date: Sun, 23 Jan 2005 10:51:16 +0000 Subject: [PATCH] Make the generated pot file (i.e., result of "create") look more "real", but using msgmerge to reformat the output --- misc/translator/tmpl_process3.pl | 37 ++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/misc/translator/tmpl_process3.pl b/misc/translator/tmpl_process3.pl index e76a7812c1..59ad0c54c6 100755 --- a/misc/translator/tmpl_process3.pl +++ b/misc/translator/tmpl_process3.pl @@ -262,16 +262,41 @@ if ($action eq 'create') { unlink $str_file || die "$str_file: $!\n"; } die "$str_file: Output file already exists\n" if -f $str_file; - my($tmph, $tmpfile) = tmpnam(); + my($tmph1, $tmpfile1) = tmpnam(); + my($tmph2, $tmpfile2) = tmpnam(); + close $tmph2; # We just want a name # Generate the temporary file that acts as /POTFILES.in for my $input (@in_files) { - print $tmph "$input\n"; + print $tmph1 "$input\n"; } - close $tmph; + close $tmph1; # Generate the specified po file ($str_file) - $st = system ($xgettext, '-s', '-f', $tmpfile, '-o', $str_file); - warn_normal "Text extraction failed: $xgettext: $!\n", undef if $st != 0; -# unlink $tmpfile || warn_normal "$tmpfile: unlink failed: $!\n", undef; + $st = system ($xgettext, '-s', '-f', $tmpfile1, '-o', $tmpfile2); + # Run msgmerge so that the pot file looks like a real pot file + # We need to help msgmerge a bit by pre-creating a dummy po file that has + # the headers and the "" msgid & msgstr. It will fill in the rest. + if ($st == 0) { + # Merge the temporary "pot file" with the specified po file ($str_file) + # FIXME: msgmerge(1) is a Unix dependency + # FIXME: need to check the return value + unless (-f $str_file) { + local(*INPUT, *OUTPUT); + open(INPUT, "<$tmpfile2"); + open(OUTPUT, ">$str_file"); + while () { + print OUTPUT; + last if /^\n/s; + } + close INPUT; + close OUTPUT; + } + $st = system('msgmerge', '-U', '-s', $str_file, $tmpfile2); + } else { + error_normal "Text extraction failed: $xgettext: $!\n", undef; + error_additional "Will not run msgmerge\n", undef; + } +# unlink $tmpfile1 || warn_normal "$tmpfile1: unlink failed: $!\n", undef; +# unlink $tmpfile2 || warn_normal "$tmpfile2: unlink failed: $!\n", undef; } elsif ($action eq 'update') { my($tmph1, $tmpfile1) = tmpnam();