blob: 741ebf404fbe2d0e514ab0902ff5925253441ee9 [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
kitlo58d8a5a2008-09-24 20:08:44 +000018 *******************************************************************************/
gobrien1a8e02f2008-01-30 01:46:26 +000019
20/*
kitlo58d8a5a2008-09-24 20:08:44 +000021 * Documentation: http://wiki.eclipse.org/Babel_/_Server_Tool_Specification#Outputs
gobrien1a8e02f2008-01-30 01:46:26 +000022 */
atoulmedbda4272009-01-20 06:04:22 +000023define("METADATA_GENERATOR_LOCATION", "/home/babel-working/eclipse"); // you might want to read this value from a config file. Not sure yet.
gobrienb854dcb2008-01-30 18:50:45 +000024
droyb6e25c72008-07-18 13:01:13 +000025ob_start();
kitlo9c7c62a2008-10-05 16:05:19 +000026ini_set("memory_limit", "64M");
kitlo58d8a5a2008-09-24 20:08:44 +000027define("BABEL_BASE_DIR", "../../");
kitlo9c7c62a2008-10-05 16:05:19 +000028require(BABEL_BASE_DIR . "html/common_functions.php");
29require(BABEL_BASE_DIR . "classes/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
kitlo58d8a5a2008-09-24 20:08:44 +000033$work_dir = "/home/babel-working/";
kitlo9c7c62a2008-10-05 16:05:19 +000034if (!($ini = @parse_ini_file(BABEL_BASE_DIR . "classes/base.conf"))) {
gobrienb854dcb2008-01-30 18:50:45 +000035 errorLog("Failed to find/read database conf file - aborting.");
36 exitTo("error.php?errNo=101300","error: 101300 - database conf can not be found");
37}
gobrienb854dcb2008-01-30 18:50:45 +000038$context = $ini['context'];
gobrienb854dcb2008-01-30 18:50:45 +000039
kitlo9c7c62a2008-10-05 16:05:19 +000040$work_context_dir = $work_dir . $context . "/";
41$tmp_dir = $work_context_dir . "tmp/";
42$babel_language_packs_dir = $work_context_dir . "babel_language_packs/";
43$output_dir = $work_context_dir . "output/";
kitlo58d8a5a2008-09-24 20:08:44 +000044$source_files_dir = "source_files_for_generate/";
gobrienb854dcb2008-01-30 18:50:45 +000045
droydfd5d622008-11-10 20:16:39 +000046# Language pack URL leader, to enable mirrors on download.eclipse.org
47$language_pack_leader = "";
48if($context == "live") {
49 $language_pack_leader = "http://www.eclipse.org/downloads/download.php?r=1&file=/technology/babel/babel_language_packs/";
50}
51
gobrien1a8e02f2008-01-30 01:46:26 +000052$leader = ". . ";
kitlo58d8a5a2008-09-24 20:08:44 +000053$timestamp = date("Ymdhis");
gobrien1a8e02f2008-01-30 01:46:26 +000054
droyd157aac2008-10-07 21:14:33 +000055$rm_command = "rm -rf $work_dir" . "*";
56exec($rm_command);
droy082976e2008-10-07 21:02:23 +000057exec("mkdir -p $output_dir");
58
kitlo9c7c62a2008-10-05 16:05:19 +000059/*
60 * Create language pack links file
61 */
62exec("mkdir -p $babel_language_packs_dir");
droydfd5d622008-11-10 20:16:39 +000063$language_pack_links_file = fopen("${babel_language_packs_dir}index.php", "w");
64fwrite($language_pack_links_file, "<?php\n\$pageTitle = \"Babel Language Packs\";\n");
droy4bef3dc2008-11-10 20:55:06 +000065fwrite($language_pack_links_file, "include \$_SERVER['DOCUMENT_ROOT'] . '/eclipse.org-common/themes/Phoenix/header.php';\n");
droydfd5d622008-11-10 20:16:39 +000066fwrite($language_pack_links_file, "?>\n");
droy03d5c462008-11-10 21:07:01 +000067fwrite($language_pack_links_file, "<div id='maincontent'><div id='midcolumn'>\n");
droydfd5d622008-11-10 20:16:39 +000068fwrite($language_pack_links_file, "\n\t<h1>Babel Language Packs</h1>" .
droyeb6d9b22008-11-24 18:42:28 +000069 "\n\t<h2>Build ID: $timestamp</h2>" .
70 "\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." .
71 "\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 +000072
kitlo58d8a5a2008-09-24 20:08:44 +000073echo "Generating update site\n";
droyeb6d9b22008-11-24 18:42:28 +000074$train_result = mysql_query("SELECT DISTINCT train_id FROM release_train_projects ORDER BY train_id DESC");
kitlo58d8a5a2008-09-24 20:08:44 +000075while (($train_row = mysql_fetch_assoc($train_result)) != null) {
76 $train_id = $train_row['train_id'];
77 $train_version = "3.4.0";
78 if (strcmp($train_id, "europa") == 0) {
79 $train_version = "3.3.0";
droy0b08d292008-05-28 15:18:11 +000080 }
kitlo9c7c62a2008-10-05 16:05:19 +000081 $train_version_timestamp = "$train_version.v$timestamp";
82 $site_xml = "";
kitlo58d8a5a2008-09-24 20:08:44 +000083
84 $output_dir_for_train = $output_dir . $train_row['train_id'] . "/";
85 exec("mkdir $output_dir_for_train");
86 exec("mkdir ${output_dir_for_train}features/");
87 exec("mkdir ${output_dir_for_train}plugins/");
88
kitlo9c7c62a2008-10-05 16:05:19 +000089 fwrite($language_pack_links_file, "\n\t<h3>Release Train: $train_id</h3>\n\t<ul>");
90
droyeb6d9b22008-11-24 18:42:28 +000091 $language_result = mysql_query("SELECT language_id, iso_code, locale, name, is_active, IF(language_id = 1,1,0) AS sorthack FROM languages ORDER BY sorthack, name ASC");
kitlo9c7c62a2008-10-05 16:05:19 +000092 while (($language_row = mysql_fetch_assoc($language_result)) != null) {
droy0b08d292008-05-28 15:18:11 +000093 $language_name = $language_row['name'];
kitlo58d8a5a2008-09-24 20:08:44 +000094 $language_iso = $language_row['iso_code'];
95 $language_locale = $language_row['locale'];
96 $language_id = $language_row['language_id'];
97 if (strcmp($language_iso, "en") == 0) {
98 $language_iso = "en_AA";
99 $language_name = "Pseudo Translations";
100 }
101 if ($language_locale != null) {
droy0b08d292008-05-28 15:18:11 +0000102 $language_name = $language_locale . " " . $language_name;
gobrien1a8e02f2008-01-30 01:46:26 +0000103 }
kitlo9c7c62a2008-10-05 16:05:19 +0000104
105 $site_xml .= "\n\t<category-def name=\"Babel Language Packs in $language_name\" label=\"Babel Language Packs in $language_name\">";
106 $site_xml .= "\n\t\t<description>Babel Language Packs in $language_name</description>";
107 $site_xml .= "\n\t</category-def>";
108
109 fwrite($language_pack_links_file, "\n\t<h4>Language: $language_name</h4>\n\t<ul>");
110
kitlo58d8a5a2008-09-24 20:08:44 +0000111 echo "${leader}Generating language pack for $train_id - $language_name ($language_iso) (language_id=" . $language_id . ")\n";
112
gobrien1a8e02f2008-01-30 01:46:26 +0000113 /*
droy0b08d292008-05-28 15:18:11 +0000114 * Determine which plug-ins need to be in this language pack.
gobrien1a8e02f2008-01-30 01:46:26 +0000115 */
kitlo58d8a5a2008-09-24 20:08:44 +0000116 if (strcmp($language_iso, "en_AA") == 0) {
117 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
118 FROM files AS f
119 INNER JOIN strings AS s ON f.file_id = s.file_id
120 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
121 WHERE f.is_active
122 AND v.train_id = '" . $train_row['train_id'] . "'");
kitlo58d8a5a2008-09-24 20:08:44 +0000123 } else {
124 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
125 FROM files AS f
126 INNER JOIN strings AS s ON f.file_id = s.file_id
127 INNER JOIN translations AS t ON (s.string_id = t.string_id AND t.is_active)
128 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
129 WHERE t.language_id = " . $language_id . "
130 AND f.is_active
131 AND v.train_id = '" . $train_row['train_id'] . "'");
132 }
133
droy0b08d292008-05-28 15:18:11 +0000134 $plugins = array();
kitlo9c7c62a2008-10-05 16:05:19 +0000135 $projects = array();
136 $project_versions = array();
137 $pseudo_translations_indexes = array();
kitlo58d8a5a2008-09-24 20:08:44 +0000138 while (($file_row = mysql_fetch_assoc($file_result)) != null) {
139 # save original filename
140 $file_row['origname'] = $file_row['name'];
141
droy02c430a2008-06-02 19:42:08 +0000142 # strip useless CVS structure before the plugin name (bug 221675 c14):
143 $pattern = '/^([a-zA-Z0-9\/_-])+\/([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)(.*)\.properties$/i';
144 $replace = '${2}.${3}${4}.properties';
145 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000146
droy02c430a2008-06-02 19:42:08 +0000147 # strip source folder (bug 221675) (org.eclipse.plugin/source_folder/org/eclipse/plugin)
148 $pattern = '/^([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)\.([a-zA-Z0-9\._-]+)(.*)\/(\1)([\.\/])(\2)([\.\/])(.*)\.properties$/i';
149 $replace = '${1}.${2}.${3}/${5}${6}${7}${8}${9}.properties';
droy0b08d292008-05-28 15:18:11 +0000150 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000151
152 if (preg_match("/^([a-zA-Z0-9\.]+)\/(.*)$/", $file_row['name'], $matches)) {
droy0b08d292008-05-28 15:18:11 +0000153 $file_row['subname'] = $matches[2];
154 $plugins[$matches[1]][] = $file_row;
155 } else {
156 echo " WARNING: no plug-in name found in file " . $file_row['file_id'] . " \"" . $file_row['name'] . "\"\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000157 }
droy0b08d292008-05-28 15:18:11 +0000158 }
kitlo58d8a5a2008-09-24 20:08:44 +0000159
droy0b08d292008-05-28 15:18:11 +0000160 /*
161 * Generate one plug-in fragment for each plug-in
162 */
kitlo58d8a5a2008-09-24 20:08:44 +0000163 foreach ($plugins as $plugin_name => $plugin_row) {
164 echo "${leader}${leader}Generating plug-in fragment $plugin_name\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000165 /*
droy0b08d292008-05-28 15:18:11 +0000166 * Clean and create the temporary directory
gobrien1a8e02f2008-01-30 01:46:26 +0000167 */
kitlo58d8a5a2008-09-24 20:08:44 +0000168 if (file_exists($tmp_dir)) {
169 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000170 } else {
kitlo58d8a5a2008-09-24 20:08:44 +0000171 exec("mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000172 }
gobrien1a8e02f2008-01-30 01:46:26 +0000173 /*
droy0b08d292008-05-28 15:18:11 +0000174 * Generate each *.properties file
gobrien1a8e02f2008-01-30 01:46:26 +0000175 */
droy0b08d292008-05-28 15:18:11 +0000176 foreach ($plugin_row as $properties_file) {
177 /*
178 * Convert the filename to *_lang.properties, e.g., foo_fr.properties
179 */
180 $filename = $properties_file['subname'];
kitlo58d8a5a2008-09-24 20:08:44 +0000181 if (preg_match( "/^(.*)\.properties$/", $filename, $matches)) {
droy0b08d292008-05-28 15:18:11 +0000182 $filename = $matches[1] . '_' . $language_iso . '.properties';
gobrien1a8e02f2008-01-30 01:46:26 +0000183 }
kitlo58d8a5a2008-09-24 20:08:44 +0000184 echo "${leader}${leader}${leader}Generating properties file $filename (file_id=" . $properties_file['file_id'] . ")\n";
droy0b08d292008-05-28 15:18:11 +0000185 /*
186 * Create any needed sub-directories
187 */
kitlo58d8a5a2008-09-24 20:08:44 +0000188 $fullpath = $tmp_dir . $filename;
189 preg_match("/^((.*)\/)?(.+?)$/", $fullpath, $matches);
190 exec("mkdir -p \"" . $matches[1] . "\"");
droy0b08d292008-05-28 15:18:11 +0000191 /*
192 * Start writing to the file
193 */
kitlo58d8a5a2008-09-24 20:08:44 +0000194 $outp = fopen($fullpath, "w");
kitloc42941d2008-11-20 15:33:00 +0000195 fwrite($outp, "# Copyright by many contributors; see http://babel.eclipse.org/");
kitlo58d8a5a2008-09-24 20:08:44 +0000196 if (strcmp($language_iso, "en_AA") == 0) {
197 $sql = "SELECT string_id, name, value FROM strings WHERE file_id = " . $properties_file['file_id'] .
198 " AND is_active AND non_translatable = 0";
199 $strings_result = mysql_query($sql);
200 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlo9c7c62a2008-10-05 16:05:19 +0000201 fwrite($outp, "\n" . $strings_row['name'] . "=" . $properties_file['project_id'] . $strings_row['string_id'] .
202 ":" . $strings_row['value']);
kitlo58d8a5a2008-09-24 20:08:44 +0000203
204 $value = htmlspecialchars($strings_row['value']);
205 if (strlen($value) > 100) {
206 $value = substr($value, 0, 100) . " ...";
207 }
kitlo9c7c62a2008-10-05 16:05:19 +0000208 $pseudo_translations_indexes[$properties_file['project_id']][] = "\n\t\t<li><a href=\"http://babel.eclipse.org/babel/translate.php?project=" .
209 $properties_file['project_id'] . "&version=" . $properties_file['version'] . "&file=" .
210 $properties_file['origname'] . "&string=" . $strings_row['name'] . "\">" .
211 $properties_file['project_id'] . $strings_row['string_id'] . "</a>&nbsp;" . $value . "</li>";
kitlo58d8a5a2008-09-24 20:08:44 +0000212 }
213 } else {
214 $sql = "SELECT
215 strings.name AS 'key',
216 strings.value AS orig,
217 translations.value AS trans
droy0b08d292008-05-28 15:18:11 +0000218 FROM strings, translations
219 WHERE strings.string_id = translations.string_id
droy0b08d292008-05-28 15:18:11 +0000220 AND strings.file_id = " . $properties_file['file_id'] . "
kitlo1173dbd2008-10-21 15:58:36 +0000221 AND strings.is_active
222 AND strings.non_translatable = 0
223 AND translations.language_id = " . $language_id . "
kitlo58d8a5a2008-09-24 20:08:44 +0000224 AND translations.is_active";
225 $strings_result = mysql_query($sql);
226 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlo7f522672008-10-21 14:15:54 +0000227 fwrite($outp, "\n" . $strings_row['key'] . "=");
kitlo9c7c62a2008-10-05 16:05:19 +0000228 # echo "${leader1S}${leaderS}${leaderS}${leaderS}" . $strings_row['key'] . "=";
kitlo58d8a5a2008-09-24 20:08:44 +0000229 if ($strings_row['trans']) {
230 # json_encode returns the string with quotes fore and aft. Need to strip them.
231 # $tr_string = preg_replace('/^"(.*)"$/', '${1}', json_encode($strings_row['trans']));
232 # $tr_string = str_replace('\\\\', '\\', $tr_string);
233 $tr_string = toescapedunicode($strings_row['trans']);
234 fwrite($outp, $tr_string);
235 # echo $strings_row['trans'];
236 } else {
237 fwrite($outp, $strings_row['orig']);
238 }
droy0b08d292008-05-28 15:18:11 +0000239 }
droy0b08d292008-05-28 15:18:11 +0000240 }
241 /*
242 * Finish the properties file
243 */
kitlo58d8a5a2008-09-24 20:08:44 +0000244 fclose($outp);
245 echo "${leader}${leader}${leader}Completed properties file $filename\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000246 }
247 /*
droy0b08d292008-05-28 15:18:11 +0000248 * Copy in the various legal files
gobrien1a8e02f2008-01-30 01:46:26 +0000249 */
kitlo9c7c62a2008-10-05 16:05:19 +0000250 exec("cp ${source_files_dir}about.html $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000251 /*
252 * Generate the META-INF/MANIFEST.MF file
253 */
254 $parent_plugin_id = $plugin_name;
kitlo9c7c62a2008-10-05 16:05:19 +0000255 $project_id = $properties_file['project_id'];
kitlo5c9da712008-10-27 12:45:40 +0000256 $fragment_id = "$parent_plugin_id.nl_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000257 $fragment_filename = "${fragment_id}_$train_version_timestamp.jar";
kitlo58d8a5a2008-09-24 20:08:44 +0000258
droy0b08d292008-05-28 15:18:11 +0000259 $plugins[$plugin_name]['id'] = $fragment_id;
kitlo9c7c62a2008-10-05 16:05:19 +0000260 $plugins[$plugin_name]['version'] = $train_version_timestamp;
kitlo58d8a5a2008-09-24 20:08:44 +0000261
262 exec("mkdir $tmp_dir/META-INF" );
263 $outp = fopen("$tmp_dir/META-INF/MANIFEST.MF", "w");
264 fwrite($outp, "Manifest-Version: 1.0\n");
265 fwrite($outp, "Bundle-Name: $parent_plugin_id $language_name NLS Support\n");
266 fwrite($outp, "Bundle-SymbolicName: $fragment_id ;singleton=true\n");
kitlo9c7c62a2008-10-05 16:05:19 +0000267 fwrite($outp, "Bundle-Version: $train_version_timestamp\n");
268 fwrite($outp, "Bundle-Vendor: Eclipse.org\n");
kitlo58d8a5a2008-09-24 20:08:44 +0000269 fwrite($outp, "Fragment-Host: $parent_plugin_id\n");
270 fclose($outp);
droy0b08d292008-05-28 15:18:11 +0000271 /*
272 * Jar up this directory as the fragment plug-in jar
273 */
kitlo58d8a5a2008-09-24 20:08:44 +0000274 system("cd $tmp_dir; jar cfM ${output_dir_for_train}plugins/$fragment_filename .");
275 echo "${leader}${leader}Completed plug-in fragment $plugin_name\n";
kitlo58d8a5a2008-09-24 20:08:44 +0000276
kitlo9c7c62a2008-10-05 16:05:19 +0000277 $projects[$project_id][] = $fragment_id;
278 $project_versions[$project_id] = $properties_file['version'];
droy0b08d292008-05-28 15:18:11 +0000279 }
kitlo9c7c62a2008-10-05 16:05:19 +0000280 foreach ($projects as $project_id => $fragment_ids) {
281 /*
282 * Sort fragment names
283 */
284 asort($fragment_ids);
285 /*
286 * Create ${babel_language_packs_dir}tmp
287 */
288 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features");
289 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/plugins");
290 /*
291 * Clean and create the temporary directory
292 */
293 if (file_exists($tmp_dir)) {
294 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
295 } else {
296 exec("mkdir $tmp_dir");
297 }
298 /*
299 * Create the feature.xml
300 *
301 * TODO <url><update label=... url=... and <url><discovery label=... url=... are not implemented
302 *
303 * <url>
304 * <update label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
305 * <discovery label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
306 * </url>
307 */
kitlo5c9da712008-10-27 12:45:40 +0000308 $feature_id = "org.eclipse.babel.nls_${project_id}_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000309 $feature_filename = "${feature_id}_$train_version_timestamp.jar";
310
311 $project_version = $project_versions[$project_id];
312 $sql = "SELECT pct_complete
313 FROM project_progress
314 WHERE project_id = \"$project_id\"
315 AND version = \"$project_version\"
316 AND language_id = $language_id";
317 $project_pct_complete_result = mysql_query($sql);
318 $project_pct_complete = mysql_result($project_pct_complete_result, 0);
319 if (strcmp($language_iso, "en_AA") == 0) {
320 $project_pct_complete = 100;
321 }
322
323 $outp = fopen("$tmp_dir/feature.xml", "w");
324 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" .
325 "\n<feature" .
326 "\n\tid=\"$feature_id\"" .
327 "\n\tlabel=\"Babel Language Pack for $project_id in $language_name ($project_pct_complete%)\"" .
328 "\n\timage=\"eclipse_update_120.jpg\"" .
329 "\n\tprovider-name=\"%providerName\"" .
330 "\n\tversion=\"$train_version_timestamp\">" .
331 "\n\t<copyright>\n\t\t%copyright\n\t</copyright>" .
332 "\n\t<license url=\"%licenseURL\">\n\t\t%license\n\t</license>" .
333 "\n\t<description>Babel Language Pack for $project_id in $language_name</description>" );
334 foreach ($fragment_ids as $fragment_id) {
335 $jar_name = "${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar";
336 $size = filesize($jar_name);
337 fwrite($outp, "\n\t<plugin fragment=\"true\" id=\"$fragment_id\" unpack=\"false\" " .
338 "version=\"$train_version_timestamp\" download-size=\"$size\" install-size=\"$size\" />");
339 /*
340 * Copy the plugin to ${babel_language_packs_dir}tmp
341 */
342 exec("cp ${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar ${babel_language_packs_dir}tmp/eclipse/plugins");
343 }
344 fwrite($outp, "\n</feature>");
345 fclose($outp);
346 /*
347 * Copy in the various legal files
348 */
349 exec("cp ${source_files_dir}about.html $tmp_dir");
350 exec("cp ${source_files_dir}eclipse_update_120.jpg $tmp_dir");
351 exec("cp ${source_files_dir}epl-v10.html $tmp_dir");
352 exec("cp ${source_files_dir}feature.properties $tmp_dir");
353 exec("cp ${source_files_dir}license.html $tmp_dir");
354 /*
355 * Copy in the Babel Pseudo Translations Index file
356 */
357 if (strcmp($language_iso, "en_AA") == 0) {
358 $pseudo_translations_index_file = fopen("${output_dir}BabelPseudoTranslationsIndex-$project_id.html", "w");
359 fwrite($pseudo_translations_index_file, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">" .
360 "\n<html>\n<head>\n<title>Babel Pseudo Translations Index for $project_id</title>" .
361 "\n<meta http-equiv=Content-Type content=\"text/html; charset=UTF-8\">\n</head>" .
362 "\n<body>\n\t<h1>Babel Pseudo Translations Index for $project_id</h1>" .
363 "\n\t<h2>Version: $train_version_timestamp</h2>\n\t<ul>");
364 foreach ($pseudo_translations_indexes[$project_id] as $index) {
365 fwrite($pseudo_translations_index_file, $index);
366 }
droy03d5c462008-11-10 21:07:01 +0000367 fwrite($pseudo_translations_index_file, "\n\t</ul>\n</div></div></body>\n</html>");
kitlo9c7c62a2008-10-05 16:05:19 +0000368 fclose($pseudo_translations_index_file);
369 exec("cp ${output_dir}BabelPseudoTranslationsIndex-$project_id.html $tmp_dir");
370 exec("rm ${output_dir}BabelPseudoTranslationsIndex-$project_id.html");
371 }
372 /*
373 * Copy the feature to ${babel_language_packs_dir}tmp before jar'ing up
374 */
kitloc42941d2008-11-20 15:33:00 +0000375 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
376 exec("cd $tmp_dir; cp * ${babel_language_packs_dir}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
kitlo9c7c62a2008-10-05 16:05:19 +0000377 /*
378 * Zip up language pack
379 */
380 $language_pack_name = "BabelLanguagePack-$project_id-${language_iso}_$train_version_timestamp.zip";
381 exec("cd ${babel_language_packs_dir}tmp; zip -r $babel_language_packs_dir$language_pack_name eclipse");
382 /*
383 * Clean up ${babel_language_packs_dir}tmp
384 */
385 exec("rm -rf ${babel_language_packs_dir}tmp");
386 /*
387 * Add project language pack link to language pack links file
388 */
kitlo18ebeee2008-11-20 15:45:34 +0000389 fwrite($language_pack_links_file, "\n\t<li><a href=\"${language_pack_leader}${language_pack_name}\">$language_pack_name ($project_pct_complete%)</a></li>");
kitlo9c7c62a2008-10-05 16:05:19 +0000390 /*
391 * Jar up this directory as the feature jar
392 */
393 system("cd $tmp_dir; jar cfM ${output_dir_for_train}features/$feature_filename .");
394 /*
395 * Register this feature with the site.xml
396 */
kitloc42941d2008-11-20 15:33:00 +0000397 $site_xml .= "\n\t<feature url=\"features/$feature_filename\" id=\"$feature_id\" version=\"$train_version_timestamp\">";
kitlo9c7c62a2008-10-05 16:05:19 +0000398 $site_xml .= "\n\t\t<category name=\"Babel Language Packs in $language_name\"/>";
399 $site_xml .= "\n\t</feature>";
400 echo "${leader}Completed language pack for $language_name ($language_iso)\n";
kitlo58d8a5a2008-09-24 20:08:44 +0000401 }
kitlo9c7c62a2008-10-05 16:05:19 +0000402 fwrite($language_pack_links_file, "\n\t</ul>");
gobrien1a8e02f2008-01-30 01:46:26 +0000403 }
gobrien1a8e02f2008-01-30 01:46:26 +0000404 /*
droy0b08d292008-05-28 15:18:11 +0000405 * <site mirrorsURL=... implemented in the weekly build process by sed'ing <site>
gobrien1a8e02f2008-01-30 01:46:26 +0000406 */
kitlo58d8a5a2008-09-24 20:08:44 +0000407 $outp = fopen("${output_dir_for_train}site.xml", "w");
kitlo9c7c62a2008-10-05 16:05:19 +0000408 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" .
409 "\n<site>" .
410 "\n\t<description url=\"http://babel.eclipse.org/\">" .
411 "\n\t\tThis update site contains user-contributed translations of the strings in all Eclipse projects." .
412 "\n\t\tPlease see the http://babel.eclipse.org/ Babel project web pages for a full how-to-use explanation of" .
413 "\n\t\tthese translations as well as how you can contribute to the translations of this and future versions of Eclipse." .
414 "\n\t</description>");
kitlo58d8a5a2008-09-24 20:08:44 +0000415 fwrite($outp, $site_xml);
kitlo9c7c62a2008-10-05 16:05:19 +0000416 fwrite($outp, "\n</site>");
kitlo58d8a5a2008-09-24 20:08:44 +0000417 fclose($outp);
kitlo9c7c62a2008-10-05 16:05:19 +0000418
419 fwrite($language_pack_links_file, "\n\t</ul>");
atoulmedbda4272009-01-20 06:04:22 +0000420
421 // now generate the metadata and add the non-greedy tags
422 system(BABEL_BASE_DIR . "classes/export/runMetadata.sh ". METADATA_GENERATOR_LOCATION . " ${output_dir_for_train} ");
423 sytem("xsltproc -o ${output_dir_for_train}site.xml " . BABEL_BASE_DIR . "content.xsl ${output_dir_for_train}site.xml");
gobrien1a8e02f2008-01-30 01:46:26 +0000424}
gobrien1a8e02f2008-01-30 01:46:26 +0000425echo "Completed generating update site\n";
426
kitlo9c7c62a2008-10-05 16:05:19 +0000427fwrite($language_pack_links_file, "\n</body>\n</html>");
428fclose($language_pack_links_file);
429
gobrien1a8e02f2008-01-30 01:46:26 +0000430/*
kitlo58d8a5a2008-09-24 20:08:44 +0000431 2. what happens if the translation feature includes plug-in fragments for
432 plug-ins that are not in the current image?
433 does it load correctly and ignore those fragments? if so, good
434 A: warnings appear in the run-time error log
435 does it fail to load? if so, then we need to generate different features, perhaps
436 one feature for each plug or else we need to know more about the project
437 distro structure to know which plug-ins to put in each feature
438 what happens if those plug-ins are later added - does it load the strings now?
439 A: probably not
440 3. need to handle different versions of each feature/plugin/platform; generate different
441 language packs for each
442 */
gobrien1a8e02f2008-01-30 01:46:26 +0000443
kitlo58d8a5a2008-09-24 20:08:44 +0000444$alloutput = fopen($output_dir."langpack_output_".date("m_d_Y"), "w");
445fwrite($alloutput,ob_get_contents());
kitlo399df202008-09-30 15:32:25 +0000446?>