- $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,
+ (defined $charset_in? ('-I', $charset_in): ()),
+ (defined $charset_out? ('-O', $charset_out): ())
+ );
+ # 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 (<INPUT>) {
+ print OUTPUT;
+ last if /^\n/s;
+ }
+ close INPUT;
+ close OUTPUT;
+ }
+ $st = system("msgmerge -U ".($quiet?'-q':'')." -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;