###############################################################################
+sub mkdir_recursive ($) {
+ my($dir) = @_;
+ local($`, $&, $', $1);
+ $dir = $` if $dir ne /^\/+$/ && $dir =~ /\/+$/;
+ my ($prefix, $basename) = ($dir =~ /\/([^\/]+)$/s)? ($`, $1): ('.', $dir);
+ mkdir_recursive($prefix) if $prefix ne '.' && !-d $prefix;
+ if (!-d $dir) {
+ print STDERR "Making directory $dir...";
+ # creates with rwxrwxr-x permissions
+ mkdir($dir, 0775) || warn_normal "$dir: $!", undef;
+ }
+}
+
+###############################################################################
+
sub usage ($) {
my($exitcode) = @_;
my $h = $exitcode? *STDERR: *STDOUT;
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 <MODULE>/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 (<INPUT>) {
+ 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();
my $target = $out_dir . substr($input, length($in_dir));
my $targetdir = $` if $target =~ /[^\/]+$/s;
- if (!-d $targetdir) {
- print STDERR "Making directory $targetdir...";
- # creates with rwxrwxr-x permissions
- mkdir($targetdir, 0775) || warn_normal "$targetdir: $!", undef;
- }
+ mkdir_recursive($targetdir) unless -d $targetdir;
print STDERR "Creating $target...\n";
open( OUTPUT, ">$target" ) || die "$target: $!\n";
text_replace( $h, *OUTPUT );