# # This file is part of the LibreOffice project. # # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. # # This file incorporates work covered by the following license notice: # # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed # with this work for additional information regarding copyright # ownership. The ASF licenses this file to you under the Apache # License, Version 2.0 (the "License"); you may not use this file # except in compliance with the License. You may obtain a copy of # the License at http://www.apache.org/licenses/LICENSE-2.0 . # my $outfile; my $destfile; my $config_stamp; my $lastcompletelangiso_var; my $completelangiso_var = $ENV{COMPLETELANGISO_VAR}; my $help_langs_var = $ENV{HELP_LANGS}; if ( !defined $completelangiso_var) { print STDERR "ERROR: No language defined!\n"; exit 1; } if (!args_require_build()) { print STDERR "No new languages, or config. Keeping old file\n"; exit 0; } my @completelangiso = split " +", $completelangiso_var; my @helplangs = split " +", $help_langs_var; open OUTFILE, ">$outfile" or die "$0 ERROR: cannot open $outfile for writing!\n"; print OUTFILE "// generated file, do not edit\n\n"; print OUTFILE "// languages used for last time generation\n"; print OUTFILE "// completelangiso: $completelangiso_var\n\n"; print OUTFILE "// help_langs: $help_langs_var\n\n"; write_ITERATE_ALL_LANG(); write_ALL_LANG(); write_OTHER_LANGS(); write_DIR_ISOLANGUAGE_ALL_LANG_2(); write_DIR_ISOLANGUAGE_ALL_LANG(); write_EXTRA_ALL_LANG(); write_EXTRA_ALL_LANG_BUT_EN_US(); write_MO_ALL_LANG_EXCEPT_EN_US_AND_QTZ(); write_EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(); write_RESFILE_ALL_LANG(); write_README_ALL_LANG(); write_README_TXT_ALL_LANG(); write_FILE_ALL_LANG_LETTER(); close OUTFILE; rename $outfile, $destfile; sub write_ITERATE_ALL_LANG { print OUTFILE "#define ITERATE_ALL_LANG_FILE(gid,dir,macro,name,ext) "; foreach $lang (@helplangs) { my $shortlang = $lang; $shortlang = "en" if $shortlang eq "en-US"; my $speciallang = $lang; $speciallang =~ s/-/_/; print OUTFILE "\\\nFile CONCAT3(gid_File_,gid,_$speciallang)"; print OUTFILE "\\\n\tDir = CONCAT3(gid_Dir_,dir,_$speciallang);"; print OUTFILE "\\\n\tmacro;"; print OUTFILE "\\\n\tName = STRING(CONCAT3(name,_$lang,ext)); "; print OUTFILE "\\\nEnd "; print OUTFILE "\\\n"; } print OUTFILE "\n\n"; } sub write_ALL_LANG { print OUTFILE "#define ALL_LANG(ident, resid) "; foreach $lang (@completelangiso) { print OUTFILE "\\\n\tident ($lang) = resid"; print OUTFILE "; " if ( $lang ne $completelangiso[$#completelangiso]); } print OUTFILE "\n\n"; } sub write_OTHER_LANGS { print OUTFILE "#define OTHER_LANGS "; foreach $lang (@completelangiso) { next if ( $lang eq "en-US"); print OUTFILE "\\\n\tDosName ($lang) = \"$lang\""; print OUTFILE "; " if ( $lang ne $completelangiso[$#completelangiso]); } print OUTFILE "\n\n"; } sub write_DIR_ISOLANGUAGE_ALL_LANG_2 { print OUTFILE "#define DIR_ISOLANGUAGE_ALL_LANG_2 "; print OUTFILE "\\\n\tDosName (en-US) = \"en-US\"; \\\n\t"; print OUTFILE "OTHER_LANGS"; print OUTFILE "\n\n"; } sub write_DIR_ISOLANGUAGE_ALL_LANG { print OUTFILE "#define DIR_ISOLANGUAGE_ALL_LANG "; print OUTFILE "\\\n\tDosName (en-US) = \"en\"; \\\n\t"; print OUTFILE "OTHER_LANGS"; print OUTFILE "\n\n"; } sub write_EXTRA_ALL_LANG { print OUTFILE "#define EXTRA_ALL_LANG(name,ext) "; foreach $lang (@completelangiso) { print OUTFILE "\\\n\tName ($lang) = CONFIGLANGFILENAME(name,_$lang,ext)"; print OUTFILE "; " if ( $lang ne $completelangiso[$#completelangiso]); } print OUTFILE "\n\n"; } sub write_EXTRA_ALL_LANG_BUT_EN_US { print OUTFILE "#define EXTRA_ALL_LANG_BUT_EN_US(name,ext) "; my $first = 1; foreach $lang (@completelangiso) { if ($lang ne "en-US") { print OUTFILE "; " unless $first; $first = 0; print OUTFILE "\\\n\tName ($lang) = CONFIGLANGFILENAME(name,_$lang,ext)"; } } print OUTFILE "\n\n"; } sub write_MO_ALL_LANG_EXCEPT_EN_US_AND_QTZ { print OUTFILE "#define MO_ALL_LANG_EXCEPT_EN_US_AND_QTZ(name) "; my $first = 1; foreach $lang (@completelangiso) { if (($lang ne "en-US") and ($lang ne "qtz")) { print OUTFILE "; " unless $first; $first = 0; my $SRC_ROOT = $ENV{"SRC_ROOT"}; my $langdir = `$SRC_ROOT/solenv/bin/localestr $lang`; chomp $langdir; print OUTFILE "\\\n\tName ($lang) = STRING(CONCAT3($langdir/LC_MESSAGES/,name,.mo))"; } } print OUTFILE "\n\n"; } sub write_EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG { my $first = 1; my $source; if ($ENV{'ENABLE_HTMLHELP'} eq 'TRUE') { $source = 'html-help'; # found in instsetoo_native/util/openoffice.lst.in's {filelistpath}/CustomTarget/helpcontent2/help3xsl/filelists } else { $source = 'HelpTarget'; } print OUTFILE "#define EXTRA_ALL_GOOD_HELP_LOCALIZATIONS_LANG(name) "; foreach $lang (@helplangs) { print OUTFILE ";" unless $first; $first = 0; print OUTFILE "\\\n\tName ($lang) = EXTRAFILELISTNAME($source/,name,/$lang)"; } print OUTFILE "\n\n"; } sub write_RESFILE_ALL_LANG { print OUTFILE "#define RESFILE_ALL_LANG(name) "; foreach $lang (@completelangiso) { print OUTFILE "\\\n\tName ($lang) = RESFILENAME(name,$lang)"; print OUTFILE "; " if ( $lang ne $completelangiso[$#completelangiso]); } print OUTFILE "\n\n"; } sub write_README_ALL_LANG { print OUTFILE "#define README_ALL_LANG(key, name) "; foreach $lang (@completelangiso) { print OUTFILE "\\\n\tkey ($lang) = READMEFILENAME(name,_$lang)"; print OUTFILE "; " if ( $lang ne $completelangiso[$#completelangiso]); } print OUTFILE "\n\n"; } sub write_README_TXT_ALL_LANG { print OUTFILE "#define README_TXT_ALL_LANG(key, name, ext) "; foreach $lang (@completelangiso) { print OUTFILE "\\\n\tkey ($lang) = READMETXTFILENAME(name,_$lang,ext)"; print OUTFILE "; " if ( $lang ne $completelangiso[$#completelangiso]); } print OUTFILE "\n\n"; } sub write_FILE_ALL_LANG_LETTER { print OUTFILE "#define FILE_ALL_LANG_LETTER(name, ext) "; foreach $lang (@completelangiso) { print OUTFILE "\\\n\tName ($lang) = CONFIGLANGFILENAME(name,$lang,ext)"; print OUTFILE "; " if ( $lang ne $completelangiso[$#completelangiso]); } print OUTFILE "\n\n"; } sub args_require_build { while (@ARGV) { $opt = shift @ARGV; $destfile = shift @ARGV if ($opt eq '-o'); $config_stamp = shift @ARGV if ($opt eq '-c'); } usage() if (!defined ($destfile) || !defined ($config_stamp)); $outfile = "$destfile.tmp"; if ( -f "$destfile" ) { # changed script - run always return 1 if (stat($0))[9] > (stat("$destfile"))[9] ; # changed config timestamp - run always if (-f "$config_stamp") { return 1 if (stat($config_stamp))[9] > (stat($destfile))[9]; } open OLDFILE, "$destfile" or die "$0 - ERROR: $outfile exists but isn't readable.\n"; while ( $line = ) { if ( $line =~ /^\/\/.*completelangiso:/ ) { $lastcompletelangiso_var = $line; chomp $lastcompletelangiso_var; $lastcompletelangiso_var =~ s/^\/\/.*completelangiso:\s*//; last; } } close OLDFILE; return 0 if ( "$completelangiso_var" eq "$lastcompletelangiso_var" ); } return 1; } sub usage { print STDERR "Generate language dependent macros use in *.scp files\n"; print STDERR "perl $0 -o -c \n"; exit 1; }