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.
This commit is contained in:
parent
8f581255e4
commit
0fbc036392
1 changed files with 47 additions and 11 deletions
|
@ -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 <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();
|
||||
|
@ -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 );
|
||||
|
|
Loading…
Reference in a new issue