blob: ef9952a44a45548815e25347f10ab2647aae9efa [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
kitlocc405032009-04-04 01:10:30 +000020 * Kit Lo (IBM) - patch, bug 270456, Unable to use Babel PTT to verify PDE in the eclipse SDK
kitlo58d8a5a2008-09-24 20:08:44 +000021 *******************************************************************************/
gobrien1a8e02f2008-01-30 01:46:26 +000022
23/*
kitlo58d8a5a2008-09-24 20:08:44 +000024 * Documentation: http://wiki.eclipse.org/Babel_/_Server_Tool_Specification#Outputs
gobrien1a8e02f2008-01-30 01:46:26 +000025 */
atoulme3fa5f5c2009-01-20 21:26:16 +000026define("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 +000027
droyaa172502009-05-06 20:50:07 +000028ini_set("memory_limit", "512M");
atoulme3ac52612009-02-02 13:14:39 +000029require(dirname(__FILE__) . "/../system/backend_functions.php");
atoulme12882d52009-01-26 18:39:17 +000030require(dirname(__FILE__) . "/../system/dbconnection.class.php");
droy3081da02009-05-11 15:54:56 +000031
32# There is no easy way to sort "galileo", "ganymede", and "europa" in the correct order we want without
33# modifying the release_train_projects table.
34#
35# Here is a temporary fix to display train versions in most recent release order until we have a permanent solution.
36$train_result = array("galileo" => "3.5.0", "ganymede" => "3.4.0", "europa" => "3.3.0");
37
38# Command-line parameter for the release train
39# bug 272958
droyc6eb7ac2009-05-12 17:25:46 +000040# b: build id
41# t: (optional: train id)
42
43$options = getopt("b:t:");
droy3081da02009-05-11 15:54:56 +000044$argv_train = "";
droyc6eb7ac2009-05-12 17:25:46 +000045if(isset($options['t'])) {
46 $argv_train = $options['t'];
droy3081da02009-05-11 15:54:56 +000047 if(array_key_exists($argv_train, $train_result)) {
48 # Picked a valid train .. remove all others
49 foreach ($train_result as $train_id => $train_version) {
50 if($train_id != $argv_train) {
51 unset($train_result[$train_id]);
52 }
53 }
54 }
55}
56
droyc6eb7ac2009-05-12 17:25:46 +000057$buildid = "";
58if(!isset($options['b'])) {
59 usage();
60 exit();
61}
62else {
63 $buildid = $options['b'];
64}
65
66
droy3081da02009-05-11 15:54:56 +000067
kitlo399df202008-09-30 15:32:25 +000068$dbc = new DBConnection();
droyb6e25c72008-07-18 13:01:13 +000069
atoulme3ac52612009-02-02 13:14:39 +000070$work_dir = $addon->callHook('babel_working');
atoulme12882d52009-01-26 18:39:17 +000071
atoulme3ac52612009-02-02 13:14:39 +000072global $addon;
73$context = $addon->callHook('context');
gobrienb854dcb2008-01-30 18:50:45 +000074
kitlo9c7c62a2008-10-05 16:05:19 +000075$work_context_dir = $work_dir . $context . "/";
76$tmp_dir = $work_context_dir . "tmp/";
77$babel_language_packs_dir = $work_context_dir . "babel_language_packs/";
78$output_dir = $work_context_dir . "output/";
atoulme3ac52612009-02-02 13:14:39 +000079$source_files_dir = dirname(__FILE__) . "/source_files_for_generate/";
gobrienb854dcb2008-01-30 18:50:45 +000080
gobrien1a8e02f2008-01-30 01:46:26 +000081$leader = ". . ";
kitlo58d8a5a2008-09-24 20:08:44 +000082$timestamp = date("Ymdhis");
gobrien1a8e02f2008-01-30 01:46:26 +000083
droyd157aac2008-10-07 21:14:33 +000084$rm_command = "rm -rf $work_dir" . "*";
85exec($rm_command);
droy082976e2008-10-07 21:02:23 +000086exec("mkdir -p $output_dir");
87
droy0b08d292008-05-28 15:18:11 +000088
droy3081da02009-05-11 15:54:56 +000089echo "Requested builds: ";
kitlo78f97432009-03-17 22:28:58 +000090foreach ($train_result as $train_id => $train_version) {
droy3081da02009-05-11 15:54:56 +000091 echo $train_id . " ";
92}
93echo "\n";
kitlo78f97432009-03-17 22:28:58 +000094
droy3081da02009-05-11 15:54:56 +000095# Loop through the trains
96foreach ($train_result as $train_id => $train_version) {
97
kitlo78f97432009-03-17 22:28:58 +000098#$train_result = mysql_query("SELECT DISTINCT train_id FROM release_train_projects ORDER BY train_id DESC");
99#while (($train_row = mysql_fetch_assoc($train_result)) != null) {
100# $train_id = $train_row['train_id'];
101# $train_version = "3.5.0";
102# if (strcmp($train_id, "ganymede") == 0) {
103# $train_version = "3.4.0";
104# }
105# if (strcmp($train_id, "europa") == 0) {
106# $train_version = "3.3.0";
107# }
108
droy3081da02009-05-11 15:54:56 +0000109 echo "Generating update site for: $train_id\n";
110 $dbh = $dbc->connect();
111
112 /*
113 * Create language pack links file
114 */
115 exec("mkdir -p $babel_language_packs_dir");
116 $language_pack_links_file = fopen("${babel_language_packs_dir}${train_id}.php", "w");
droyc6eb7ac2009-05-12 17:25:46 +0000117 fwrite($language_pack_links_file, "<?php\n");
118 # copy page_header.html here
119 $header = file_get_contents("${source_files_dir}page_header.html");
120 fwrite($language_pack_links_file, $header);
droy3081da02009-05-11 15:54:56 +0000121 fwrite($language_pack_links_file, "\n\t<h1>Babel Language Packs for ${train_id}</h1>" .
droyc6eb7ac2009-05-12 17:25:46 +0000122 "\n\t<h2>Build ID: $buildid</h2>" .
droy3081da02009-05-11 15:54:56 +0000123 "\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." .
124 "\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>");
125
126
kitlo9c7c62a2008-10-05 16:05:19 +0000127 $train_version_timestamp = "$train_version.v$timestamp";
128 $site_xml = "";
kitlo58d8a5a2008-09-24 20:08:44 +0000129
kitlo78f97432009-03-17 22:28:58 +0000130 $output_dir_for_train = $output_dir . $train_id . "/";
kitlo58d8a5a2008-09-24 20:08:44 +0000131 exec("mkdir $output_dir_for_train");
132 exec("mkdir ${output_dir_for_train}features/");
133 exec("mkdir ${output_dir_for_train}plugins/");
134
kitlo9c7c62a2008-10-05 16:05:19 +0000135 fwrite($language_pack_links_file, "\n\t<h3>Release Train: $train_id</h3>\n\t<ul>");
droy68864612009-04-14 15:44:05 +0000136
137 $sql = "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";
138 $language_result = mysql_query($sql);
droyb3ff2742009-04-08 19:28:32 +0000139 if($language_result === FALSE) {
140 # we may have lost the database connection.with our shell-outs
141 # bug 271685
142 $dbh = $dbc->connect();
droy68864612009-04-14 15:44:05 +0000143 $language_result = mysql_query($sql);
droyb3ff2742009-04-08 19:28:32 +0000144 }
kitlo9c7c62a2008-10-05 16:05:19 +0000145 while (($language_row = mysql_fetch_assoc($language_result)) != null) {
droy0b08d292008-05-28 15:18:11 +0000146 $language_name = $language_row['name'];
kitlo58d8a5a2008-09-24 20:08:44 +0000147 $language_iso = $language_row['iso_code'];
kitlo58d8a5a2008-09-24 20:08:44 +0000148 $language_id = $language_row['language_id'];
149 if (strcmp($language_iso, "en") == 0) {
150 $language_iso = "en_AA";
151 $language_name = "Pseudo Translations";
152 }
kitlo9c7c62a2008-10-05 16:05:19 +0000153
kitlo58d8a5a2008-09-24 20:08:44 +0000154 echo "${leader}Generating language pack for $train_id - $language_name ($language_iso) (language_id=" . $language_id . ")\n";
155
gobrien1a8e02f2008-01-30 01:46:26 +0000156 /*
droy0b08d292008-05-28 15:18:11 +0000157 * Determine which plug-ins need to be in this language pack.
gobrien1a8e02f2008-01-30 01:46:26 +0000158 */
kitlo58d8a5a2008-09-24 20:08:44 +0000159 if (strcmp($language_iso, "en_AA") == 0) {
160 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
161 FROM files AS f
162 INNER JOIN strings AS s ON f.file_id = s.file_id
163 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
164 WHERE f.is_active
kitlo78f97432009-03-17 22:28:58 +0000165 AND v.train_id = '" . $train_id . "'");
kitlo58d8a5a2008-09-24 20:08:44 +0000166 } else {
167 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
168 FROM files AS f
169 INNER JOIN strings AS s ON f.file_id = s.file_id
170 INNER JOIN translations AS t ON (s.string_id = t.string_id AND t.is_active)
171 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
172 WHERE t.language_id = " . $language_id . "
173 AND f.is_active
kitlo78f97432009-03-17 22:28:58 +0000174 AND v.train_id = '" . $train_id . "'");
kitlo58d8a5a2008-09-24 20:08:44 +0000175 }
176
droy0b08d292008-05-28 15:18:11 +0000177 $plugins = array();
kitlo9c7c62a2008-10-05 16:05:19 +0000178 $projects = array();
179 $project_versions = array();
180 $pseudo_translations_indexes = array();
kitlo58d8a5a2008-09-24 20:08:44 +0000181 while (($file_row = mysql_fetch_assoc($file_result)) != null) {
182 # save original filename
183 $file_row['origname'] = $file_row['name'];
184
droy02c430a2008-06-02 19:42:08 +0000185 # strip useless CVS structure before the plugin name (bug 221675 c14):
186 $pattern = '/^([a-zA-Z0-9\/_-])+\/([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)(.*)\.properties$/i';
187 $replace = '${2}.${3}${4}.properties';
188 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000189
droy02c430a2008-06-02 19:42:08 +0000190 # strip source folder (bug 221675) (org.eclipse.plugin/source_folder/org/eclipse/plugin)
kitlo8d7c0532009-03-14 23:57:49 +0000191 /*
192 $pattern =
193 '/^
194 ([a-zA-Z0-9_-]+)\. # \1 org.
195 ([a-zA-Z0-9_-]+)\. # \2 eclipse.
196 ([a-zA-Z0-9\._-]+) # \3 datatools.connectivity
197 (.*)\/ # \4 \/plugins\/
198 (\1) # \5 org
199 ([\.\/]) # \6 .
200 (\2) # \7 eclipse
201 ([\.\/]) # \8 .
202 (.*) # \9 datatools.connectivity.ui\/plugin
203 \.properties # .properties
204 $/ix
205 ';
droy02c430a2008-06-02 19:42:08 +0000206 $replace = '${1}.${2}.${3}/${5}${6}${7}${8}${9}.properties';
kitlo8d7c0532009-03-14 23:57:49 +0000207 */
208
209 # fix output folder (bug 261584)
210 $pattern =
211 '/^
212 (.*\/)? # \1 optional outer directories
213 ([a-z]+) # \2 org|com|etc
214 [.] # dot
215 ([^\/]+) # \3 plugin id except org.|com.
216 \/ # slash
217 (.*?\/)? # \4 optional src\/, src\/main\/ etc
218 # \5 resource path (pathname inside resulting jar)
219 # (a) within a org|com directory, or
220 # (b) in plugin root dir.
221 (\2\/.*[.]properties| # org|com\/anything.properties
222 [^\/]+[.]properties) # eg plugin.properties
223 $/ix';
224 $replace = '$2.$3/$5';
225
droy0b08d292008-05-28 15:18:11 +0000226 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000227
228 if (preg_match("/^([a-zA-Z0-9\.]+)\/(.*)$/", $file_row['name'], $matches)) {
droy0b08d292008-05-28 15:18:11 +0000229 $file_row['subname'] = $matches[2];
230 $plugins[$matches[1]][] = $file_row;
231 } else {
232 echo " WARNING: no plug-in name found in file " . $file_row['file_id'] . " \"" . $file_row['name'] . "\"\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000233 }
droy0b08d292008-05-28 15:18:11 +0000234 }
kitlo58d8a5a2008-09-24 20:08:44 +0000235
droy0b08d292008-05-28 15:18:11 +0000236 /*
237 * Generate one plug-in fragment for each plug-in
238 */
kitlo58d8a5a2008-09-24 20:08:44 +0000239 foreach ($plugins as $plugin_name => $plugin_row) {
240 echo "${leader}${leader}Generating plug-in fragment $plugin_name\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000241 /*
droy0b08d292008-05-28 15:18:11 +0000242 * Clean and create the temporary directory
gobrien1a8e02f2008-01-30 01:46:26 +0000243 */
kitlo58d8a5a2008-09-24 20:08:44 +0000244 if (file_exists($tmp_dir)) {
245 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000246 } else {
kitlo58d8a5a2008-09-24 20:08:44 +0000247 exec("mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000248 }
gobrien1a8e02f2008-01-30 01:46:26 +0000249 /*
droy0b08d292008-05-28 15:18:11 +0000250 * Generate each *.properties file
gobrien1a8e02f2008-01-30 01:46:26 +0000251 */
droy0b08d292008-05-28 15:18:11 +0000252 foreach ($plugin_row as $properties_file) {
253 /*
254 * Convert the filename to *_lang.properties, e.g., foo_fr.properties
255 */
256 $filename = $properties_file['subname'];
kitlo58d8a5a2008-09-24 20:08:44 +0000257 if (preg_match( "/^(.*)\.properties$/", $filename, $matches)) {
droy0b08d292008-05-28 15:18:11 +0000258 $filename = $matches[1] . '_' . $language_iso . '.properties';
gobrien1a8e02f2008-01-30 01:46:26 +0000259 }
kitlo58d8a5a2008-09-24 20:08:44 +0000260 echo "${leader}${leader}${leader}Generating properties file $filename (file_id=" . $properties_file['file_id'] . ")\n";
droy0b08d292008-05-28 15:18:11 +0000261 /*
262 * Create any needed sub-directories
263 */
kitlo58d8a5a2008-09-24 20:08:44 +0000264 $fullpath = $tmp_dir . $filename;
265 preg_match("/^((.*)\/)?(.+?)$/", $fullpath, $matches);
266 exec("mkdir -p \"" . $matches[1] . "\"");
droy0b08d292008-05-28 15:18:11 +0000267 /*
268 * Start writing to the file
269 */
kitlo58d8a5a2008-09-24 20:08:44 +0000270 $outp = fopen($fullpath, "w");
kitloc42941d2008-11-20 15:33:00 +0000271 fwrite($outp, "# Copyright by many contributors; see http://babel.eclipse.org/");
kitlo58d8a5a2008-09-24 20:08:44 +0000272 if (strcmp($language_iso, "en_AA") == 0) {
273 $sql = "SELECT string_id, name, value FROM strings WHERE file_id = " . $properties_file['file_id'] .
274 " AND is_active AND non_translatable = 0";
275 $strings_result = mysql_query($sql);
276 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlocc405032009-04-04 01:10:30 +0000277 /* Check for value starting with form tag (bug 270456) */
278 if (preg_match("/^(<form>)(.*)/i", $strings_row['value'], $matches)) {
279 $pattern = "/^(<form>)(.*)/i";
280 $replace = "$1" . "<p>" . $properties_file['project_id'] . $strings_row['string_id'] . ":" . "</p>" . "$2";
281 $strings_row['value'] = preg_replace($pattern, $replace, $strings_row['value']);
282 $outp_line = "\n" . $strings_row['name'] . "=" . $strings_row['value'];
283 } else {
284 $outp_line = "\n" . $strings_row['name'] . "=" . $properties_file['project_id'] . $strings_row['string_id'] .
285 ":" . $strings_row['value'];
286 }
287 fwrite($outp, $outp_line);
kitlo58d8a5a2008-09-24 20:08:44 +0000288
289 $value = htmlspecialchars($strings_row['value']);
290 if (strlen($value) > 100) {
291 $value = substr($value, 0, 100) . " ...";
292 }
kitlo9c7c62a2008-10-05 16:05:19 +0000293 $pseudo_translations_indexes[$properties_file['project_id']][] = "\n\t\t<li><a href=\"http://babel.eclipse.org/babel/translate.php?project=" .
294 $properties_file['project_id'] . "&version=" . $properties_file['version'] . "&file=" .
295 $properties_file['origname'] . "&string=" . $strings_row['name'] . "\">" .
296 $properties_file['project_id'] . $strings_row['string_id'] . "</a>&nbsp;" . $value . "</li>";
kitlo58d8a5a2008-09-24 20:08:44 +0000297 }
298 } else {
299 $sql = "SELECT
300 strings.name AS 'key',
301 strings.value AS orig,
302 translations.value AS trans
droy0b08d292008-05-28 15:18:11 +0000303 FROM strings, translations
304 WHERE strings.string_id = translations.string_id
droy0b08d292008-05-28 15:18:11 +0000305 AND strings.file_id = " . $properties_file['file_id'] . "
kitlo1173dbd2008-10-21 15:58:36 +0000306 AND strings.is_active
307 AND strings.non_translatable = 0
308 AND translations.language_id = " . $language_id . "
kitlo58d8a5a2008-09-24 20:08:44 +0000309 AND translations.is_active";
310 $strings_result = mysql_query($sql);
311 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlo7f522672008-10-21 14:15:54 +0000312 fwrite($outp, "\n" . $strings_row['key'] . "=");
kitlo9c7c62a2008-10-05 16:05:19 +0000313 # echo "${leader1S}${leaderS}${leaderS}${leaderS}" . $strings_row['key'] . "=";
kitlo58d8a5a2008-09-24 20:08:44 +0000314 if ($strings_row['trans']) {
315 # json_encode returns the string with quotes fore and aft. Need to strip them.
316 # $tr_string = preg_replace('/^"(.*)"$/', '${1}', json_encode($strings_row['trans']));
317 # $tr_string = str_replace('\\\\', '\\', $tr_string);
318 $tr_string = toescapedunicode($strings_row['trans']);
319 fwrite($outp, $tr_string);
320 # echo $strings_row['trans'];
321 } else {
322 fwrite($outp, $strings_row['orig']);
323 }
droy0b08d292008-05-28 15:18:11 +0000324 }
droy0b08d292008-05-28 15:18:11 +0000325 }
326 /*
327 * Finish the properties file
328 */
kitlo58d8a5a2008-09-24 20:08:44 +0000329 fclose($outp);
330 echo "${leader}${leader}${leader}Completed properties file $filename\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000331 }
332 /*
droy0b08d292008-05-28 15:18:11 +0000333 * Copy in the various legal files
gobrien1a8e02f2008-01-30 01:46:26 +0000334 */
kitlo9c7c62a2008-10-05 16:05:19 +0000335 exec("cp ${source_files_dir}about.html $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000336 /*
337 * Generate the META-INF/MANIFEST.MF file
338 */
339 $parent_plugin_id = $plugin_name;
kitlo9c7c62a2008-10-05 16:05:19 +0000340 $project_id = $properties_file['project_id'];
kitlo5c9da712008-10-27 12:45:40 +0000341 $fragment_id = "$parent_plugin_id.nl_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000342 $fragment_filename = "${fragment_id}_$train_version_timestamp.jar";
kitlo58d8a5a2008-09-24 20:08:44 +0000343
droy0b08d292008-05-28 15:18:11 +0000344 $plugins[$plugin_name]['id'] = $fragment_id;
kitlo9c7c62a2008-10-05 16:05:19 +0000345 $plugins[$plugin_name]['version'] = $train_version_timestamp;
kitlo58d8a5a2008-09-24 20:08:44 +0000346
347 exec("mkdir $tmp_dir/META-INF" );
348 $outp = fopen("$tmp_dir/META-INF/MANIFEST.MF", "w");
349 fwrite($outp, "Manifest-Version: 1.0\n");
350 fwrite($outp, "Bundle-Name: $parent_plugin_id $language_name NLS Support\n");
351 fwrite($outp, "Bundle-SymbolicName: $fragment_id ;singleton=true\n");
kitlo9c7c62a2008-10-05 16:05:19 +0000352 fwrite($outp, "Bundle-Version: $train_version_timestamp\n");
353 fwrite($outp, "Bundle-Vendor: Eclipse.org\n");
kitlo58d8a5a2008-09-24 20:08:44 +0000354 fwrite($outp, "Fragment-Host: $parent_plugin_id\n");
355 fclose($outp);
droy0b08d292008-05-28 15:18:11 +0000356 /*
357 * Jar up this directory as the fragment plug-in jar
358 */
kitlo58d8a5a2008-09-24 20:08:44 +0000359 system("cd $tmp_dir; jar cfM ${output_dir_for_train}plugins/$fragment_filename .");
360 echo "${leader}${leader}Completed plug-in fragment $plugin_name\n";
kitlo58d8a5a2008-09-24 20:08:44 +0000361
kitlo9c7c62a2008-10-05 16:05:19 +0000362 $projects[$project_id][] = $fragment_id;
363 $project_versions[$project_id] = $properties_file['version'];
droy0b08d292008-05-28 15:18:11 +0000364 }
kitlo78f97432009-03-17 22:28:58 +0000365 if (sizeof($projects) > 0) {
366 $site_xml .= "\n\t<category-def name=\"Babel Language Packs in $language_name\" label=\"Babel Language Packs in $language_name\">";
367 $site_xml .= "\n\t\t<description>Babel Language Packs in $language_name</description>";
368 $site_xml .= "\n\t</category-def>";
369
370 fwrite($language_pack_links_file, "\n\t\t<h4>Language: $language_name</h4>");
371 }
kitlo9c7c62a2008-10-05 16:05:19 +0000372 foreach ($projects as $project_id => $fragment_ids) {
kitlo78f97432009-03-17 22:28:58 +0000373 fwrite($language_pack_links_file, "\n\t\t<ul>");
kitlo9c7c62a2008-10-05 16:05:19 +0000374 /*
375 * Sort fragment names
376 */
377 asort($fragment_ids);
378 /*
379 * Create ${babel_language_packs_dir}tmp
380 */
381 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features");
382 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/plugins");
383 /*
384 * Clean and create the temporary directory
385 */
386 if (file_exists($tmp_dir)) {
387 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
388 } else {
389 exec("mkdir $tmp_dir");
390 }
391 /*
392 * Create the feature.xml
393 *
394 * TODO <url><update label=... url=... and <url><discovery label=... url=... are not implemented
395 *
396 * <url>
397 * <update label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
398 * <discovery label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
399 * </url>
400 */
kitlo5c9da712008-10-27 12:45:40 +0000401 $feature_id = "org.eclipse.babel.nls_${project_id}_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000402 $feature_filename = "${feature_id}_$train_version_timestamp.jar";
403
404 $project_version = $project_versions[$project_id];
405 $sql = "SELECT pct_complete
406 FROM project_progress
407 WHERE project_id = \"$project_id\"
408 AND version = \"$project_version\"
409 AND language_id = $language_id";
410 $project_pct_complete_result = mysql_query($sql);
411 $project_pct_complete = mysql_result($project_pct_complete_result, 0);
412 if (strcmp($language_iso, "en_AA") == 0) {
413 $project_pct_complete = 100;
414 }
415
416 $outp = fopen("$tmp_dir/feature.xml", "w");
417 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" .
418 "\n<feature" .
419 "\n\tid=\"$feature_id\"" .
420 "\n\tlabel=\"Babel Language Pack for $project_id in $language_name ($project_pct_complete%)\"" .
421 "\n\timage=\"eclipse_update_120.jpg\"" .
422 "\n\tprovider-name=\"%providerName\"" .
423 "\n\tversion=\"$train_version_timestamp\">" .
424 "\n\t<copyright>\n\t\t%copyright\n\t</copyright>" .
425 "\n\t<license url=\"%licenseURL\">\n\t\t%license\n\t</license>" .
426 "\n\t<description>Babel Language Pack for $project_id in $language_name</description>" );
427 foreach ($fragment_ids as $fragment_id) {
428 $jar_name = "${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar";
429 $size = filesize($jar_name);
430 fwrite($outp, "\n\t<plugin fragment=\"true\" id=\"$fragment_id\" unpack=\"false\" " .
431 "version=\"$train_version_timestamp\" download-size=\"$size\" install-size=\"$size\" />");
432 /*
433 * Copy the plugin to ${babel_language_packs_dir}tmp
434 */
435 exec("cp ${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar ${babel_language_packs_dir}tmp/eclipse/plugins");
436 }
437 fwrite($outp, "\n</feature>");
438 fclose($outp);
439 /*
440 * Copy in the various legal files
441 */
442 exec("cp ${source_files_dir}about.html $tmp_dir");
443 exec("cp ${source_files_dir}eclipse_update_120.jpg $tmp_dir");
444 exec("cp ${source_files_dir}epl-v10.html $tmp_dir");
445 exec("cp ${source_files_dir}feature.properties $tmp_dir");
446 exec("cp ${source_files_dir}license.html $tmp_dir");
447 /*
448 * Copy in the Babel Pseudo Translations Index file
449 */
450 if (strcmp($language_iso, "en_AA") == 0) {
451 $pseudo_translations_index_file = fopen("${output_dir}BabelPseudoTranslationsIndex-$project_id.html", "w");
452 fwrite($pseudo_translations_index_file, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">" .
453 "\n<html>\n<head>\n<title>Babel Pseudo Translations Index for $project_id</title>" .
454 "\n<meta http-equiv=Content-Type content=\"text/html; charset=UTF-8\">\n</head>" .
455 "\n<body>\n\t<h1>Babel Pseudo Translations Index for $project_id</h1>" .
456 "\n\t<h2>Version: $train_version_timestamp</h2>\n\t<ul>");
457 foreach ($pseudo_translations_indexes[$project_id] as $index) {
458 fwrite($pseudo_translations_index_file, $index);
459 }
droy03d5c462008-11-10 21:07:01 +0000460 fwrite($pseudo_translations_index_file, "\n\t</ul>\n</div></div></body>\n</html>");
kitlo9c7c62a2008-10-05 16:05:19 +0000461 fclose($pseudo_translations_index_file);
462 exec("cp ${output_dir}BabelPseudoTranslationsIndex-$project_id.html $tmp_dir");
463 exec("rm ${output_dir}BabelPseudoTranslationsIndex-$project_id.html");
464 }
465 /*
466 * Copy the feature to ${babel_language_packs_dir}tmp before jar'ing up
467 */
kitloc42941d2008-11-20 15:33:00 +0000468 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
469 exec("cd $tmp_dir; cp * ${babel_language_packs_dir}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
kitlo9c7c62a2008-10-05 16:05:19 +0000470 /*
471 * Zip up language pack
472 */
473 $language_pack_name = "BabelLanguagePack-$project_id-${language_iso}_$train_version_timestamp.zip";
474 exec("cd ${babel_language_packs_dir}tmp; zip -r $babel_language_packs_dir$language_pack_name eclipse");
475 /*
476 * Clean up ${babel_language_packs_dir}tmp
477 */
478 exec("rm -rf ${babel_language_packs_dir}tmp");
479 /*
480 * Add project language pack link to language pack links file
481 */
droy3081da02009-05-11 15:54:56 +0000482 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 +0000483 /*
484 * Jar up this directory as the feature jar
485 */
486 system("cd $tmp_dir; jar cfM ${output_dir_for_train}features/$feature_filename .");
487 /*
488 * Register this feature with the site.xml
489 */
kitloc42941d2008-11-20 15:33:00 +0000490 $site_xml .= "\n\t<feature url=\"features/$feature_filename\" id=\"$feature_id\" version=\"$train_version_timestamp\">";
kitlo9c7c62a2008-10-05 16:05:19 +0000491 $site_xml .= "\n\t\t<category name=\"Babel Language Packs in $language_name\"/>";
492 $site_xml .= "\n\t</feature>";
493 echo "${leader}Completed language pack for $language_name ($language_iso)\n";
kitlo78f97432009-03-17 22:28:58 +0000494
495 fwrite($language_pack_links_file, "\n\t\t</ul>");
kitlo58d8a5a2008-09-24 20:08:44 +0000496 }
gobrien1a8e02f2008-01-30 01:46:26 +0000497 }
gobrien1a8e02f2008-01-30 01:46:26 +0000498 /*
droy0b08d292008-05-28 15:18:11 +0000499 * <site mirrorsURL=... implemented in the weekly build process by sed'ing <site>
gobrien1a8e02f2008-01-30 01:46:26 +0000500 */
kitlo58d8a5a2008-09-24 20:08:44 +0000501 $outp = fopen("${output_dir_for_train}site.xml", "w");
kitlo9c7c62a2008-10-05 16:05:19 +0000502 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" .
503 "\n<site>" .
504 "\n\t<description url=\"http://babel.eclipse.org/\">" .
505 "\n\t\tThis update site contains user-contributed translations of the strings in all Eclipse projects." .
506 "\n\t\tPlease see the http://babel.eclipse.org/ Babel project web pages for a full how-to-use explanation of" .
507 "\n\t\tthese translations as well as how you can contribute to the translations of this and future versions of Eclipse." .
508 "\n\t</description>");
kitlo58d8a5a2008-09-24 20:08:44 +0000509 fwrite($outp, $site_xml);
kitlo9c7c62a2008-10-05 16:05:19 +0000510 fwrite($outp, "\n</site>");
kitlo58d8a5a2008-09-24 20:08:44 +0000511 fclose($outp);
kitlo9c7c62a2008-10-05 16:05:19 +0000512
513 fwrite($language_pack_links_file, "\n\t</ul>");
atoulmedbda4272009-01-20 06:04:22 +0000514
droy3081da02009-05-11 15:54:56 +0000515 fwrite($language_pack_links_file, "\n</body>\n</html>");
516 fclose($language_pack_links_file);
517
518
519 $dbh = $dbc->disconnect();
520
atoulmedbda4272009-01-20 06:04:22 +0000521 // now generate the metadata and add the non-greedy tags
atoulme09ce4642009-01-21 07:46:06 +0000522
droye77ad172009-05-04 17:35:56 +0000523 /*
524 * Leaving this out of generate1 to avoid p2 breakage
525 *
atoulme12882d52009-01-26 18:39:17 +0000526 system("sh " . dirname(__FILE__) . "/runMetadata.sh ".
atoulme09ce4642009-01-21 07:46:06 +0000527 METADATA_GENERATOR_LOCATION . " ${output_dir_for_train} ");
atoulmec86be152009-01-21 22:36:31 +0000528 system("xsltproc -o ${output_dir_for_train}content.xml ".
atoulmeb0f0e502009-01-21 17:27:25 +0000529 dirname(__FILE__) . "/content.xsl ${output_dir_for_train}content.xml");
atoulmec8efccd2009-02-13 08:51:59 +0000530 system("cd ${output_dir_for_train} ; jar -fc content.jar content.xml ; jar -fc artifacts.jar artifacts.xml ; rm site.xml");
droye77ad172009-05-04 17:35:56 +0000531 */
gobrien1a8e02f2008-01-30 01:46:26 +0000532}
gobrien1a8e02f2008-01-30 01:46:26 +0000533echo "Completed generating update site\n";
534
kitlo9c7c62a2008-10-05 16:05:19 +0000535
gobrien1a8e02f2008-01-30 01:46:26 +0000536/*
kitlo58d8a5a2008-09-24 20:08:44 +0000537 2. what happens if the translation feature includes plug-in fragments for
538 plug-ins that are not in the current image?
539 does it load correctly and ignore those fragments? if so, good
540 A: warnings appear in the run-time error log
541 does it fail to load? if so, then we need to generate different features, perhaps
542 one feature for each plug or else we need to know more about the project
543 distro structure to know which plug-ins to put in each feature
544 what happens if those plug-ins are later added - does it load the strings now?
545 A: probably not
546 3. need to handle different versions of each feature/plugin/platform; generate different
547 language packs for each
548 */
gobrien1a8e02f2008-01-30 01:46:26 +0000549
kitlo58d8a5a2008-09-24 20:08:44 +0000550$alloutput = fopen($output_dir."langpack_output_".date("m_d_Y"), "w");
551fwrite($alloutput,ob_get_contents());
droyc6eb7ac2009-05-12 17:25:46 +0000552
553function usage() {
554 echo "\n";
555 echo "generate1.php -b <build_id> [-t <train_id>]\n";
556 echo " -b <build_id>: The Build ID for this build.\n";
557 echo " -t <train_id>: Optional: train to build (europa, ganymede, galileo.";
558 echo "\n";
559}
560
kitlo399df202008-09-30 15:32:25 +0000561?>