From 0fbc036392c0be81814e34ec1e38d046fea49166 Mon Sep 17 00:00:00 2001 From: acli Date: Fri, 4 Feb 2005 03:49:33 +0000 Subject: [PATCH] Some changes from rel_2_2: Make the generated pot file (i.e., result of "create") look more "real", but using msgmerge to reformat the output Script failed to create intermediate directories if the directory of the target does not exist and the parent of that directory does not exist either. This should fix that. --- misc/translator/tmpl_process3.pl | 58 ++++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/misc/translator/tmpl_process3.pl b/misc/translator/tmpl_process3.pl index e76a7812c1..ec241c6f17 100755 --- a/misc/translator/tmpl_process3.pl +++ b/misc/translator/tmpl_process3.pl @@ -138,6 +138,21 @@ sub listfiles ($$) { ############################################################################### +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; @@ -262,16 +277,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(); @@ -328,11 +368,7 @@ if ($action eq 'create') { 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 ); -- 2.39.5