blob: 5796188de3f952d65c34c2e702d43e5d8c0731ac [file] [log] [blame]
gobrien1a8e02f2008-01-30 01:46:26 +00001<?php
2/*******************************************************************************
3 * Copyright (c) 2008 Eclipse Foundation and others.
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Eclipse Foundation - Initial API and implementation
droy133e7462008-05-13 17:37:24 +000011 * Motoki MORT mori-m@mxa.nes.nec.co.jp - patch, bug 227366
kitlo9c7c62a2008-10-05 16:05:19 +000012 * Kit Lo (IBM) - patch, bug 217339, generate pseudo translations language packs
13 * Kit Lo (IBM) - patch, bug 234430, need language packs by means of other than update site
kitlo7f522672008-10-21 14:15:54 +000014 * Kit Lo (IBM) - patch, bug 251536, newline char missing after copyright comment on first line
kitlo1173dbd2008-10-21 15:58:36 +000015 * Kit Lo (IBM) - patch, bug 238580, language packs should not include strings that are marked "non-translatable"
kitlo5c9da712008-10-27 12:45:40 +000016 * Kit Lo (IBM) - patch, bug 252140, Illegal token characters in babel fragment names
atoulmedbda4272009-01-20 06:04:22 +000017 * Antoine Toulme (Intalio, Inc) - patch, bug 256430, Fragments with no host jeopardize Eclipse installation
kitlo47df0c62009-01-22 15:16:18 +000018 * Kit Lo (IBM) - patch, bug 261739, Inconsistent use of language names
kitlo8d7c0532009-03-14 23:57:49 +000019 * Sean Flanigan (Red Hat) - patch, bug 261584, wrong output folder
kitlo58d8a5a2008-09-24 20:08:44 +000020 *******************************************************************************/
gobrien1a8e02f2008-01-30 01:46:26 +000021
22/*
kitlo58d8a5a2008-09-24 20:08:44 +000023 * Documentation: http://wiki.eclipse.org/Babel_/_Server_Tool_Specification#Outputs
gobrien1a8e02f2008-01-30 01:46:26 +000024 */
atoulme3fa5f5c2009-01-20 21:26:16 +000025define("METADATA_GENERATOR_LOCATION", "/home/genie/eclipse"); // you might want to read this value from a config file. Not sure yet.
gobrienb854dcb2008-01-30 18:50:45 +000026
kitlo9c7c62a2008-10-05 16:05:19 +000027ini_set("memory_limit", "64M");
atoulme3ac52612009-02-02 13:14:39 +000028require(dirname(__FILE__) . "/../system/backend_functions.php");
atoulme12882d52009-01-26 18:39:17 +000029require(dirname(__FILE__) . "/../system/dbconnection.class.php");
kitlo399df202008-09-30 15:32:25 +000030$dbc = new DBConnection();
31$dbh = $dbc->connect();
droyb6e25c72008-07-18 13:01:13 +000032
atoulme3ac52612009-02-02 13:14:39 +000033$work_dir = $addon->callHook('babel_working');
atoulme12882d52009-01-26 18:39:17 +000034
atoulme3ac52612009-02-02 13:14:39 +000035global $addon;
36$context = $addon->callHook('context');
gobrienb854dcb2008-01-30 18:50:45 +000037
kitlo9c7c62a2008-10-05 16:05:19 +000038$work_context_dir = $work_dir . $context . "/";
39$tmp_dir = $work_context_dir . "tmp/";
40$babel_language_packs_dir = $work_context_dir . "babel_language_packs/";
41$output_dir = $work_context_dir . "output/";
atoulme3ac52612009-02-02 13:14:39 +000042$source_files_dir = dirname(__FILE__) . "/source_files_for_generate/";
gobrienb854dcb2008-01-30 18:50:45 +000043
droydfd5d622008-11-10 20:16:39 +000044# Language pack URL leader, to enable mirrors on download.eclipse.org
45$language_pack_leader = "";
46if($context == "live") {
47 $language_pack_leader = "http://www.eclipse.org/downloads/download.php?r=1&file=/technology/babel/babel_language_packs/";
48}
49
gobrien1a8e02f2008-01-30 01:46:26 +000050$leader = ". . ";
kitlo58d8a5a2008-09-24 20:08:44 +000051$timestamp = date("Ymdhis");
gobrien1a8e02f2008-01-30 01:46:26 +000052
droyd157aac2008-10-07 21:14:33 +000053$rm_command = "rm -rf $work_dir" . "*";
54exec($rm_command);
droy082976e2008-10-07 21:02:23 +000055exec("mkdir -p $output_dir");
56
kitlo9c7c62a2008-10-05 16:05:19 +000057/*
58 * Create language pack links file
59 */
60exec("mkdir -p $babel_language_packs_dir");
droydfd5d622008-11-10 20:16:39 +000061$language_pack_links_file = fopen("${babel_language_packs_dir}index.php", "w");
kitlo78f97432009-03-17 22:28:58 +000062fwrite($language_pack_links_file, "<?php\n\$pageTitle = \"Babel Language Packs\";");
63fwrite($language_pack_links_file, "\ninclude \$_SERVER['DOCUMENT_ROOT'] . '/eclipse.org-common/themes/Phoenix/header.php';");
64fwrite($language_pack_links_file, "\n?>");
65fwrite($language_pack_links_file, "\n\t<div id='maincontent'>");
66fwrite($language_pack_links_file, "\n\t<div id='midcolumn'>");
67fwrite($language_pack_links_file, "\n\t<style>");
68fwrite($language_pack_links_file, "\n\t\th3 {");
69fwrite($language_pack_links_file, "\n\t\t\tbackground-color: SteelBlue;");
70fwrite($language_pack_links_file, "\n\t\t\tcolor: white;");
71fwrite($language_pack_links_file, "\n\t\t}");
72fwrite($language_pack_links_file, "\n");
73fwrite($language_pack_links_file, "\n\t\th4 {");
74fwrite($language_pack_links_file, "\n\t\t\tbackground-color: LightSteelBlue;");
75fwrite($language_pack_links_file, "\n\t\t}");
76fwrite($language_pack_links_file, "\n\t</style>");
droydfd5d622008-11-10 20:16:39 +000077fwrite($language_pack_links_file, "\n\t<h1>Babel Language Packs</h1>" .
droyeb6d9b22008-11-24 18:42:28 +000078 "\n\t<h2>Build ID: $timestamp</h2>" .
79 "\n\t<p>The following language packs are based on the community translations entered into the <a href='http://babel.eclipse.org/'>Babel Translation Tool</a>, and may not be complete or entirely accurate. If you find missing or incorrect translations, please use the <a href='http://babel.eclipse.org/'>Babel Translation Tool</a> to update them." .
80 "\n\tAll downloads are provided under the terms and conditions of the <a href='http://www.eclipse.org/legal/epl/notice.php'>Eclipse Foundation Software User Agreement</a> unless otherwise specified.</p>");
droy0b08d292008-05-28 15:18:11 +000081
kitlo58d8a5a2008-09-24 20:08:44 +000082echo "Generating update site\n";
kitlo78f97432009-03-17 22:28:58 +000083
84# There is no easy way to sort "galileo", "ganymede", and "europa" in the correct order we want without
85# modifying the release_train_projects table.
86#
87# Here is a temporary fix to display train versions in most recent release order until we have a permanent solution.
88
89$train_result = array("galileo" => "3.5.0", "ganymede" => "3.4.0", "europa" => "3.3.0");
90foreach ($train_result as $train_id => $train_version) {
91
92#$train_result = mysql_query("SELECT DISTINCT train_id FROM release_train_projects ORDER BY train_id DESC");
93#while (($train_row = mysql_fetch_assoc($train_result)) != null) {
94# $train_id = $train_row['train_id'];
95# $train_version = "3.5.0";
96# if (strcmp($train_id, "ganymede") == 0) {
97# $train_version = "3.4.0";
98# }
99# if (strcmp($train_id, "europa") == 0) {
100# $train_version = "3.3.0";
101# }
102
kitlo9c7c62a2008-10-05 16:05:19 +0000103 $train_version_timestamp = "$train_version.v$timestamp";
104 $site_xml = "";
kitlo58d8a5a2008-09-24 20:08:44 +0000105
kitlo78f97432009-03-17 22:28:58 +0000106 $output_dir_for_train = $output_dir . $train_id . "/";
kitlo58d8a5a2008-09-24 20:08:44 +0000107 exec("mkdir $output_dir_for_train");
108 exec("mkdir ${output_dir_for_train}features/");
109 exec("mkdir ${output_dir_for_train}plugins/");
110
kitlo9c7c62a2008-10-05 16:05:19 +0000111 fwrite($language_pack_links_file, "\n\t<h3>Release Train: $train_id</h3>\n\t<ul>");
112
kitlo47df0c62009-01-22 15:16:18 +0000113 $language_result = mysql_query("SELECT language_id, iso_code, IF(locale <> '', CONCAT(CONCAT(CONCAT(name, ' ('), locale), ')'), name) as name, is_active, IF(language_id = 1,1,0) AS sorthack FROM languages ORDER BY sorthack, name ASC");
kitlo9c7c62a2008-10-05 16:05:19 +0000114 while (($language_row = mysql_fetch_assoc($language_result)) != null) {
droy0b08d292008-05-28 15:18:11 +0000115 $language_name = $language_row['name'];
kitlo58d8a5a2008-09-24 20:08:44 +0000116 $language_iso = $language_row['iso_code'];
kitlo58d8a5a2008-09-24 20:08:44 +0000117 $language_id = $language_row['language_id'];
118 if (strcmp($language_iso, "en") == 0) {
119 $language_iso = "en_AA";
120 $language_name = "Pseudo Translations";
121 }
kitlo9c7c62a2008-10-05 16:05:19 +0000122
kitlo58d8a5a2008-09-24 20:08:44 +0000123 echo "${leader}Generating language pack for $train_id - $language_name ($language_iso) (language_id=" . $language_id . ")\n";
124
gobrien1a8e02f2008-01-30 01:46:26 +0000125 /*
droy0b08d292008-05-28 15:18:11 +0000126 * Determine which plug-ins need to be in this language pack.
gobrien1a8e02f2008-01-30 01:46:26 +0000127 */
kitlo58d8a5a2008-09-24 20:08:44 +0000128 if (strcmp($language_iso, "en_AA") == 0) {
129 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
130 FROM files AS f
131 INNER JOIN strings AS s ON f.file_id = s.file_id
132 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
133 WHERE f.is_active
kitlo78f97432009-03-17 22:28:58 +0000134 AND v.train_id = '" . $train_id . "'");
kitlo58d8a5a2008-09-24 20:08:44 +0000135 } else {
136 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
137 FROM files AS f
138 INNER JOIN strings AS s ON f.file_id = s.file_id
139 INNER JOIN translations AS t ON (s.string_id = t.string_id AND t.is_active)
140 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
141 WHERE t.language_id = " . $language_id . "
142 AND f.is_active
kitlo78f97432009-03-17 22:28:58 +0000143 AND v.train_id = '" . $train_id . "'");
kitlo58d8a5a2008-09-24 20:08:44 +0000144 }
145
droy0b08d292008-05-28 15:18:11 +0000146 $plugins = array();
kitlo9c7c62a2008-10-05 16:05:19 +0000147 $projects = array();
148 $project_versions = array();
149 $pseudo_translations_indexes = array();
kitlo58d8a5a2008-09-24 20:08:44 +0000150 while (($file_row = mysql_fetch_assoc($file_result)) != null) {
151 # save original filename
152 $file_row['origname'] = $file_row['name'];
153
droy02c430a2008-06-02 19:42:08 +0000154 # strip useless CVS structure before the plugin name (bug 221675 c14):
155 $pattern = '/^([a-zA-Z0-9\/_-])+\/([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)(.*)\.properties$/i';
156 $replace = '${2}.${3}${4}.properties';
157 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000158
droy02c430a2008-06-02 19:42:08 +0000159 # strip source folder (bug 221675) (org.eclipse.plugin/source_folder/org/eclipse/plugin)
kitlo8d7c0532009-03-14 23:57:49 +0000160 /*
161 $pattern =
162 '/^
163 ([a-zA-Z0-9_-]+)\. # \1 org.
164 ([a-zA-Z0-9_-]+)\. # \2 eclipse.
165 ([a-zA-Z0-9\._-]+) # \3 datatools.connectivity
166 (.*)\/ # \4 \/plugins\/
167 (\1) # \5 org
168 ([\.\/]) # \6 .
169 (\2) # \7 eclipse
170 ([\.\/]) # \8 .
171 (.*) # \9 datatools.connectivity.ui\/plugin
172 \.properties # .properties
173 $/ix
174 ';
droy02c430a2008-06-02 19:42:08 +0000175 $replace = '${1}.${2}.${3}/${5}${6}${7}${8}${9}.properties';
kitlo8d7c0532009-03-14 23:57:49 +0000176 */
177
178 # fix output folder (bug 261584)
179 $pattern =
180 '/^
181 (.*\/)? # \1 optional outer directories
182 ([a-z]+) # \2 org|com|etc
183 [.] # dot
184 ([^\/]+) # \3 plugin id except org.|com.
185 \/ # slash
186 (.*?\/)? # \4 optional src\/, src\/main\/ etc
187 # \5 resource path (pathname inside resulting jar)
188 # (a) within a org|com directory, or
189 # (b) in plugin root dir.
190 (\2\/.*[.]properties| # org|com\/anything.properties
191 [^\/]+[.]properties) # eg plugin.properties
192 $/ix';
193 $replace = '$2.$3/$5';
194
droy0b08d292008-05-28 15:18:11 +0000195 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000196
197 if (preg_match("/^([a-zA-Z0-9\.]+)\/(.*)$/", $file_row['name'], $matches)) {
droy0b08d292008-05-28 15:18:11 +0000198 $file_row['subname'] = $matches[2];
199 $plugins[$matches[1]][] = $file_row;
200 } else {
201 echo " WARNING: no plug-in name found in file " . $file_row['file_id'] . " \"" . $file_row['name'] . "\"\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000202 }
droy0b08d292008-05-28 15:18:11 +0000203 }
kitlo58d8a5a2008-09-24 20:08:44 +0000204
droy0b08d292008-05-28 15:18:11 +0000205 /*
206 * Generate one plug-in fragment for each plug-in
207 */
kitlo58d8a5a2008-09-24 20:08:44 +0000208 foreach ($plugins as $plugin_name => $plugin_row) {
209 echo "${leader}${leader}Generating plug-in fragment $plugin_name\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000210 /*
droy0b08d292008-05-28 15:18:11 +0000211 * Clean and create the temporary directory
gobrien1a8e02f2008-01-30 01:46:26 +0000212 */
kitlo58d8a5a2008-09-24 20:08:44 +0000213 if (file_exists($tmp_dir)) {
214 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000215 } else {
kitlo58d8a5a2008-09-24 20:08:44 +0000216 exec("mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000217 }
gobrien1a8e02f2008-01-30 01:46:26 +0000218 /*
droy0b08d292008-05-28 15:18:11 +0000219 * Generate each *.properties file
gobrien1a8e02f2008-01-30 01:46:26 +0000220 */
droy0b08d292008-05-28 15:18:11 +0000221 foreach ($plugin_row as $properties_file) {
222 /*
223 * Convert the filename to *_lang.properties, e.g., foo_fr.properties
224 */
225 $filename = $properties_file['subname'];
kitlo58d8a5a2008-09-24 20:08:44 +0000226 if (preg_match( "/^(.*)\.properties$/", $filename, $matches)) {
droy0b08d292008-05-28 15:18:11 +0000227 $filename = $matches[1] . '_' . $language_iso . '.properties';
gobrien1a8e02f2008-01-30 01:46:26 +0000228 }
kitlo58d8a5a2008-09-24 20:08:44 +0000229 echo "${leader}${leader}${leader}Generating properties file $filename (file_id=" . $properties_file['file_id'] . ")\n";
droy0b08d292008-05-28 15:18:11 +0000230 /*
231 * Create any needed sub-directories
232 */
kitlo58d8a5a2008-09-24 20:08:44 +0000233 $fullpath = $tmp_dir . $filename;
234 preg_match("/^((.*)\/)?(.+?)$/", $fullpath, $matches);
235 exec("mkdir -p \"" . $matches[1] . "\"");
droy0b08d292008-05-28 15:18:11 +0000236 /*
237 * Start writing to the file
238 */
kitlo58d8a5a2008-09-24 20:08:44 +0000239 $outp = fopen($fullpath, "w");
kitloc42941d2008-11-20 15:33:00 +0000240 fwrite($outp, "# Copyright by many contributors; see http://babel.eclipse.org/");
kitlo58d8a5a2008-09-24 20:08:44 +0000241 if (strcmp($language_iso, "en_AA") == 0) {
242 $sql = "SELECT string_id, name, value FROM strings WHERE file_id = " . $properties_file['file_id'] .
243 " AND is_active AND non_translatable = 0";
244 $strings_result = mysql_query($sql);
245 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlo9c7c62a2008-10-05 16:05:19 +0000246 fwrite($outp, "\n" . $strings_row['name'] . "=" . $properties_file['project_id'] . $strings_row['string_id'] .
247 ":" . $strings_row['value']);
kitlo58d8a5a2008-09-24 20:08:44 +0000248
249 $value = htmlspecialchars($strings_row['value']);
250 if (strlen($value) > 100) {
251 $value = substr($value, 0, 100) . " ...";
252 }
kitlo9c7c62a2008-10-05 16:05:19 +0000253 $pseudo_translations_indexes[$properties_file['project_id']][] = "\n\t\t<li><a href=\"http://babel.eclipse.org/babel/translate.php?project=" .
254 $properties_file['project_id'] . "&version=" . $properties_file['version'] . "&file=" .
255 $properties_file['origname'] . "&string=" . $strings_row['name'] . "\">" .
256 $properties_file['project_id'] . $strings_row['string_id'] . "</a>&nbsp;" . $value . "</li>";
kitlo58d8a5a2008-09-24 20:08:44 +0000257 }
258 } else {
259 $sql = "SELECT
260 strings.name AS 'key',
261 strings.value AS orig,
262 translations.value AS trans
droy0b08d292008-05-28 15:18:11 +0000263 FROM strings, translations
264 WHERE strings.string_id = translations.string_id
droy0b08d292008-05-28 15:18:11 +0000265 AND strings.file_id = " . $properties_file['file_id'] . "
kitlo1173dbd2008-10-21 15:58:36 +0000266 AND strings.is_active
267 AND strings.non_translatable = 0
268 AND translations.language_id = " . $language_id . "
kitlo58d8a5a2008-09-24 20:08:44 +0000269 AND translations.is_active";
270 $strings_result = mysql_query($sql);
271 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlo7f522672008-10-21 14:15:54 +0000272 fwrite($outp, "\n" . $strings_row['key'] . "=");
kitlo9c7c62a2008-10-05 16:05:19 +0000273 # echo "${leader1S}${leaderS}${leaderS}${leaderS}" . $strings_row['key'] . "=";
kitlo58d8a5a2008-09-24 20:08:44 +0000274 if ($strings_row['trans']) {
275 # json_encode returns the string with quotes fore and aft. Need to strip them.
276 # $tr_string = preg_replace('/^"(.*)"$/', '${1}', json_encode($strings_row['trans']));
277 # $tr_string = str_replace('\\\\', '\\', $tr_string);
278 $tr_string = toescapedunicode($strings_row['trans']);
279 fwrite($outp, $tr_string);
280 # echo $strings_row['trans'];
281 } else {
282 fwrite($outp, $strings_row['orig']);
283 }
droy0b08d292008-05-28 15:18:11 +0000284 }
droy0b08d292008-05-28 15:18:11 +0000285 }
286 /*
287 * Finish the properties file
288 */
kitlo58d8a5a2008-09-24 20:08:44 +0000289 fclose($outp);
290 echo "${leader}${leader}${leader}Completed properties file $filename\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000291 }
292 /*
droy0b08d292008-05-28 15:18:11 +0000293 * Copy in the various legal files
gobrien1a8e02f2008-01-30 01:46:26 +0000294 */
kitlo9c7c62a2008-10-05 16:05:19 +0000295 exec("cp ${source_files_dir}about.html $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000296 /*
297 * Generate the META-INF/MANIFEST.MF file
298 */
299 $parent_plugin_id = $plugin_name;
kitlo9c7c62a2008-10-05 16:05:19 +0000300 $project_id = $properties_file['project_id'];
kitlo5c9da712008-10-27 12:45:40 +0000301 $fragment_id = "$parent_plugin_id.nl_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000302 $fragment_filename = "${fragment_id}_$train_version_timestamp.jar";
kitlo58d8a5a2008-09-24 20:08:44 +0000303
droy0b08d292008-05-28 15:18:11 +0000304 $plugins[$plugin_name]['id'] = $fragment_id;
kitlo9c7c62a2008-10-05 16:05:19 +0000305 $plugins[$plugin_name]['version'] = $train_version_timestamp;
kitlo58d8a5a2008-09-24 20:08:44 +0000306
307 exec("mkdir $tmp_dir/META-INF" );
308 $outp = fopen("$tmp_dir/META-INF/MANIFEST.MF", "w");
309 fwrite($outp, "Manifest-Version: 1.0\n");
310 fwrite($outp, "Bundle-Name: $parent_plugin_id $language_name NLS Support\n");
311 fwrite($outp, "Bundle-SymbolicName: $fragment_id ;singleton=true\n");
kitlo9c7c62a2008-10-05 16:05:19 +0000312 fwrite($outp, "Bundle-Version: $train_version_timestamp\n");
313 fwrite($outp, "Bundle-Vendor: Eclipse.org\n");
kitlo58d8a5a2008-09-24 20:08:44 +0000314 fwrite($outp, "Fragment-Host: $parent_plugin_id\n");
315 fclose($outp);
droy0b08d292008-05-28 15:18:11 +0000316 /*
317 * Jar up this directory as the fragment plug-in jar
318 */
kitlo58d8a5a2008-09-24 20:08:44 +0000319 system("cd $tmp_dir; jar cfM ${output_dir_for_train}plugins/$fragment_filename .");
320 echo "${leader}${leader}Completed plug-in fragment $plugin_name\n";
kitlo58d8a5a2008-09-24 20:08:44 +0000321
kitlo9c7c62a2008-10-05 16:05:19 +0000322 $projects[$project_id][] = $fragment_id;
323 $project_versions[$project_id] = $properties_file['version'];
droy0b08d292008-05-28 15:18:11 +0000324 }
kitlo78f97432009-03-17 22:28:58 +0000325 if (sizeof($projects) > 0) {
326 $site_xml .= "\n\t<category-def name=\"Babel Language Packs in $language_name\" label=\"Babel Language Packs in $language_name\">";
327 $site_xml .= "\n\t\t<description>Babel Language Packs in $language_name</description>";
328 $site_xml .= "\n\t</category-def>";
329
330 fwrite($language_pack_links_file, "\n\t\t<h4>Language: $language_name</h4>");
331 }
kitlo9c7c62a2008-10-05 16:05:19 +0000332 foreach ($projects as $project_id => $fragment_ids) {
kitlo78f97432009-03-17 22:28:58 +0000333 fwrite($language_pack_links_file, "\n\t\t<ul>");
kitlo9c7c62a2008-10-05 16:05:19 +0000334 /*
335 * Sort fragment names
336 */
337 asort($fragment_ids);
338 /*
339 * Create ${babel_language_packs_dir}tmp
340 */
341 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features");
342 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/plugins");
343 /*
344 * Clean and create the temporary directory
345 */
346 if (file_exists($tmp_dir)) {
347 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
348 } else {
349 exec("mkdir $tmp_dir");
350 }
351 /*
352 * Create the feature.xml
353 *
354 * TODO <url><update label=... url=... and <url><discovery label=... url=... are not implemented
355 *
356 * <url>
357 * <update label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
358 * <discovery label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
359 * </url>
360 */
kitlo5c9da712008-10-27 12:45:40 +0000361 $feature_id = "org.eclipse.babel.nls_${project_id}_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000362 $feature_filename = "${feature_id}_$train_version_timestamp.jar";
363
364 $project_version = $project_versions[$project_id];
365 $sql = "SELECT pct_complete
366 FROM project_progress
367 WHERE project_id = \"$project_id\"
368 AND version = \"$project_version\"
369 AND language_id = $language_id";
370 $project_pct_complete_result = mysql_query($sql);
371 $project_pct_complete = mysql_result($project_pct_complete_result, 0);
372 if (strcmp($language_iso, "en_AA") == 0) {
373 $project_pct_complete = 100;
374 }
375
376 $outp = fopen("$tmp_dir/feature.xml", "w");
377 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" .
378 "\n<feature" .
379 "\n\tid=\"$feature_id\"" .
380 "\n\tlabel=\"Babel Language Pack for $project_id in $language_name ($project_pct_complete%)\"" .
381 "\n\timage=\"eclipse_update_120.jpg\"" .
382 "\n\tprovider-name=\"%providerName\"" .
383 "\n\tversion=\"$train_version_timestamp\">" .
384 "\n\t<copyright>\n\t\t%copyright\n\t</copyright>" .
385 "\n\t<license url=\"%licenseURL\">\n\t\t%license\n\t</license>" .
386 "\n\t<description>Babel Language Pack for $project_id in $language_name</description>" );
387 foreach ($fragment_ids as $fragment_id) {
388 $jar_name = "${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar";
389 $size = filesize($jar_name);
390 fwrite($outp, "\n\t<plugin fragment=\"true\" id=\"$fragment_id\" unpack=\"false\" " .
391 "version=\"$train_version_timestamp\" download-size=\"$size\" install-size=\"$size\" />");
392 /*
393 * Copy the plugin to ${babel_language_packs_dir}tmp
394 */
395 exec("cp ${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar ${babel_language_packs_dir}tmp/eclipse/plugins");
396 }
397 fwrite($outp, "\n</feature>");
398 fclose($outp);
399 /*
400 * Copy in the various legal files
401 */
402 exec("cp ${source_files_dir}about.html $tmp_dir");
403 exec("cp ${source_files_dir}eclipse_update_120.jpg $tmp_dir");
404 exec("cp ${source_files_dir}epl-v10.html $tmp_dir");
405 exec("cp ${source_files_dir}feature.properties $tmp_dir");
406 exec("cp ${source_files_dir}license.html $tmp_dir");
407 /*
408 * Copy in the Babel Pseudo Translations Index file
409 */
410 if (strcmp($language_iso, "en_AA") == 0) {
411 $pseudo_translations_index_file = fopen("${output_dir}BabelPseudoTranslationsIndex-$project_id.html", "w");
412 fwrite($pseudo_translations_index_file, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">" .
413 "\n<html>\n<head>\n<title>Babel Pseudo Translations Index for $project_id</title>" .
414 "\n<meta http-equiv=Content-Type content=\"text/html; charset=UTF-8\">\n</head>" .
415 "\n<body>\n\t<h1>Babel Pseudo Translations Index for $project_id</h1>" .
416 "\n\t<h2>Version: $train_version_timestamp</h2>\n\t<ul>");
417 foreach ($pseudo_translations_indexes[$project_id] as $index) {
418 fwrite($pseudo_translations_index_file, $index);
419 }
droy03d5c462008-11-10 21:07:01 +0000420 fwrite($pseudo_translations_index_file, "\n\t</ul>\n</div></div></body>\n</html>");
kitlo9c7c62a2008-10-05 16:05:19 +0000421 fclose($pseudo_translations_index_file);
422 exec("cp ${output_dir}BabelPseudoTranslationsIndex-$project_id.html $tmp_dir");
423 exec("rm ${output_dir}BabelPseudoTranslationsIndex-$project_id.html");
424 }
425 /*
426 * Copy the feature to ${babel_language_packs_dir}tmp before jar'ing up
427 */
kitloc42941d2008-11-20 15:33:00 +0000428 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
429 exec("cd $tmp_dir; cp * ${babel_language_packs_dir}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
kitlo9c7c62a2008-10-05 16:05:19 +0000430 /*
431 * Zip up language pack
432 */
433 $language_pack_name = "BabelLanguagePack-$project_id-${language_iso}_$train_version_timestamp.zip";
434 exec("cd ${babel_language_packs_dir}tmp; zip -r $babel_language_packs_dir$language_pack_name eclipse");
435 /*
436 * Clean up ${babel_language_packs_dir}tmp
437 */
438 exec("rm -rf ${babel_language_packs_dir}tmp");
439 /*
440 * Add project language pack link to language pack links file
441 */
kitlo78f97432009-03-17 22:28:58 +0000442 fwrite($language_pack_links_file, "\n\t\t\t<li><a href=\"${language_pack_leader}${language_pack_name}\">$language_pack_name ($project_pct_complete%)</a></li>");
kitlo9c7c62a2008-10-05 16:05:19 +0000443 /*
444 * Jar up this directory as the feature jar
445 */
446 system("cd $tmp_dir; jar cfM ${output_dir_for_train}features/$feature_filename .");
447 /*
448 * Register this feature with the site.xml
449 */
kitloc42941d2008-11-20 15:33:00 +0000450 $site_xml .= "\n\t<feature url=\"features/$feature_filename\" id=\"$feature_id\" version=\"$train_version_timestamp\">";
kitlo9c7c62a2008-10-05 16:05:19 +0000451 $site_xml .= "\n\t\t<category name=\"Babel Language Packs in $language_name\"/>";
452 $site_xml .= "\n\t</feature>";
453 echo "${leader}Completed language pack for $language_name ($language_iso)\n";
kitlo78f97432009-03-17 22:28:58 +0000454
455 fwrite($language_pack_links_file, "\n\t\t</ul>");
kitlo58d8a5a2008-09-24 20:08:44 +0000456 }
gobrien1a8e02f2008-01-30 01:46:26 +0000457 }
gobrien1a8e02f2008-01-30 01:46:26 +0000458 /*
droy0b08d292008-05-28 15:18:11 +0000459 * <site mirrorsURL=... implemented in the weekly build process by sed'ing <site>
gobrien1a8e02f2008-01-30 01:46:26 +0000460 */
kitlo58d8a5a2008-09-24 20:08:44 +0000461 $outp = fopen("${output_dir_for_train}site.xml", "w");
kitlo9c7c62a2008-10-05 16:05:19 +0000462 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" .
463 "\n<site>" .
464 "\n\t<description url=\"http://babel.eclipse.org/\">" .
465 "\n\t\tThis update site contains user-contributed translations of the strings in all Eclipse projects." .
466 "\n\t\tPlease see the http://babel.eclipse.org/ Babel project web pages for a full how-to-use explanation of" .
467 "\n\t\tthese translations as well as how you can contribute to the translations of this and future versions of Eclipse." .
468 "\n\t</description>");
kitlo58d8a5a2008-09-24 20:08:44 +0000469 fwrite($outp, $site_xml);
kitlo9c7c62a2008-10-05 16:05:19 +0000470 fwrite($outp, "\n</site>");
kitlo58d8a5a2008-09-24 20:08:44 +0000471 fclose($outp);
kitlo9c7c62a2008-10-05 16:05:19 +0000472
473 fwrite($language_pack_links_file, "\n\t</ul>");
atoulmedbda4272009-01-20 06:04:22 +0000474
475 // now generate the metadata and add the non-greedy tags
atoulme09ce4642009-01-21 07:46:06 +0000476
atoulme12882d52009-01-26 18:39:17 +0000477 system("sh " . dirname(__FILE__) . "/runMetadata.sh ".
atoulme09ce4642009-01-21 07:46:06 +0000478 METADATA_GENERATOR_LOCATION . " ${output_dir_for_train} ");
atoulmec86be152009-01-21 22:36:31 +0000479 system("xsltproc -o ${output_dir_for_train}content.xml ".
atoulmeb0f0e502009-01-21 17:27:25 +0000480 dirname(__FILE__) . "/content.xsl ${output_dir_for_train}content.xml");
atoulmec8efccd2009-02-13 08:51:59 +0000481 system("cd ${output_dir_for_train} ; jar -fc content.jar content.xml ; jar -fc artifacts.jar artifacts.xml ; rm site.xml");
gobrien1a8e02f2008-01-30 01:46:26 +0000482}
gobrien1a8e02f2008-01-30 01:46:26 +0000483echo "Completed generating update site\n";
484
kitlo9c7c62a2008-10-05 16:05:19 +0000485fwrite($language_pack_links_file, "\n</body>\n</html>");
486fclose($language_pack_links_file);
487
gobrien1a8e02f2008-01-30 01:46:26 +0000488/*
kitlo58d8a5a2008-09-24 20:08:44 +0000489 2. what happens if the translation feature includes plug-in fragments for
490 plug-ins that are not in the current image?
491 does it load correctly and ignore those fragments? if so, good
492 A: warnings appear in the run-time error log
493 does it fail to load? if so, then we need to generate different features, perhaps
494 one feature for each plug or else we need to know more about the project
495 distro structure to know which plug-ins to put in each feature
496 what happens if those plug-ins are later added - does it load the strings now?
497 A: probably not
498 3. need to handle different versions of each feature/plugin/platform; generate different
499 language packs for each
500 */
gobrien1a8e02f2008-01-30 01:46:26 +0000501
kitlo58d8a5a2008-09-24 20:08:44 +0000502$alloutput = fopen($output_dir."langpack_output_".date("m_d_Y"), "w");
503fwrite($alloutput,ob_get_contents());
kitlo399df202008-09-30 15:32:25 +0000504?>