root/trunk/build/buildjelix.php

Revision 1175, 7.9 kB (checked in by laurentj, 2 weeks ago)

improved jbuildtools to consume less memory
added a VERBOSE flag in buildjelix

Line 
1 <?php
2 /**
3 * @package     jelix
4 * @author      Jouanneau Laurent
5 * @contributor Kévin Lepeltier
6 * @copyright   2006-2008 Jouanneau laurent
7 * @copyright   2008 Kévin Lepeltier
8 * @link        http://www.jelix.org
9 * @licence     GNU General Public Licence see LICENCE file or http://www.gnu.org/licenses/gpl.html
10 */
11
12 $BUILD_OPTIONS = array(
13 'MAIN_TARGET_PATH'=> array(
14     "main directory where sources will be copied"// signification (false = option cachée)
15     '_dist',                                        // valeur par défaut (boolean = option booleene)
16     '',                                             // regexp pour la valeur ou vide=tout (seulement pour option non booleene)
17     ),
18 'PHP_VERSION_TARGET'=> array(
19     "PHP5 version for which jelix will be generated (by default, the target is php 5.1)",
20     '5.1'
21     ),
22 'EDITION_NAME'=> array(
23     "The edition name of the version (optional)",
24     '',
25     ),
26 'ENABLE_PHP_FILTER'=>array(
27     "true if jelix can use php filter api (api included in PHP>=5.2)",
28     false,
29     ),
30 'ENABLE_PHP_JSON'=>array(
31     "true if jelix can use php json api (api included in PHP>=5.2)",
32     false,
33     ),
34 'ENABLE_PHP_XMLRPC'=>array(
35     "true if jelix can use php xmlrpc api",
36     false,
37     ),
38 'ENABLE_PHP_JELIX'=>array(
39     "true if jelix can use jelix php extension. WARNING ! EXPERIMENTAL !",
40     false,
41     ),
42 'WITH_BYTECODE_CACHE'=> array(
43     "says which bytecode cache engine will be recognized by jelix. Possible values :  'auto' (automatic detection), 'apc', 'eaccelerator', 'xcache' or '' for  none",
44     'auto',
45     '/^(auto|apc|eaccelerator|xcache)?$/',
46     ),
47 'ENABLE_DEVELOPER'=>array(
48     "include all developers tools in the distribution (simpletest &cie)",
49     true,
50     ),
51 'ENABLE_OPTIMIZED_SOURCE'=>array(
52     "true if you want on optimized version of source code, for production server",
53     false,
54     ),
55 'STRIP_COMMENT'=>array(
56     "true if you want sources with PHP comments deleted (valid only if ENABLE_OPTIMIZED_SOURCE is true)",
57     false,
58     ),
59 'PACKAGE_TAR_GZ'=>array(
60     "create a tar.gz package",
61     false,
62     ),
63 'PACKAGE_ZIP'=>array(
64     "create a zip package",
65     false,
66     ),
67 'ENABLE_OLD_CLASS_NAMING'=>array(
68     "old module class naming (jelix <= 1.0a5) can be used. deprecated for Jelix 1.0 and higher.",
69     false,
70     ),
71 'ENABLE_OLD_ACTION_SELECTOR'=>array(
72     "old action selector can be used. deprecated for Jelix 1.1 and higher.",
73     false,
74     ),
75 'INCLUDE_ALL_FONTS'=>array(
76     "True if you want to include lib/fonts content for tcpdf or other",
77     false,
78     ),
79 'PROPERTIES_CHARSET_TARGET'=> array(
80     "List of charset used for command cch (convert charset)",
81     'UTF-8,ISO-8859-1,ISO-8859-15',
82     '',
83     ),
84 'DEFAULT_CHARSET'=> array(
85     "The default charset of file. useful when convertir some files (cch command)",
86     'UTF-8',
87     '',
88     ),
89 'PHP50'=> array(
90     false,   // hidden option
91     false,
92     ),
93 'PHP51'=> array(
94     false,
95     false,
96     ),
97 'PHP52'=> array(
98     false,
99     false,
100     ),
101 'SVN_REVISION'=> array(
102     false,
103     ),
104 'LIB_VERSION'=> array(
105     false,
106     '',
107     ),
108 'IS_NIGHTLY'=> array(
109     false,
110     false,
111     ),
112 'BUILD_FLAGS'=> array(
113     false,
114     '',
115     ),
116 'EDITION_NAME_x'=> array(
117     false,
118     '',
119     ),
120 'VERBOSE'=> array(
121     "show messages",
122     false
123 ),
124 /*''=> array(
125     "",
126     '',
127     '',
128     ),*/
129 );
130
131
132 include(dirname(__FILE__).'/lib/jBuild.inc.php');
133
134 //----------------- Preparation des variables d'environnement
135
136 Env::setFromFile('LIB_VERSION','lib/jelix/VERSION', true);
137 $SVN_REVISION = Subversion::revision();
138
139 $IS_NIGHTLY = (strpos($LIB_VERSION,'SVN') !== false);
140
141 if($IS_NIGHTLY){
142     $PACKAGE_NAME='jelix-'.str_replace('SVN', '', $LIB_VERSION);
143     if(substr($PACKAGE_NAME,-1,1) == '.')
144       $PACKAGE_NAME = substr($PACKAGE_NAME,0,-1);
145     $LIB_VERSION = str_replace('SVN', $SVN_REVISION, $LIB_VERSION);
146 }
147 else {
148     $PACKAGE_NAME='jelix-'.$LIB_VERSION;
149 }
150
151 if($PHP_VERSION_TARGET){
152     if(version_compare($PHP_VERSION_TARGET, '5.2') > -1){
153         // filter et json sont en standard dans >=5.2 : on le force
154         $ENABLE_PHP_FILTER = 1;
155         $ENABLE_PHP_JSON = 1;
156         $PHP52 = 1;
157     }elseif(version_compare($PHP_VERSION_TARGET, '5.1') > -1){
158         $PHP51=1;
159     }else{
160         $PHP50=1;
161     }
162 }else{
163     // pas de target définie : donc php 5.0
164     $PHP50=1;
165 }
166
167 $BUILD_FLAGS = 0;
168 if($ENABLE_PHP_JELIX$BUILD_FLAGS |=1;
169 if($ENABLE_PHP_JSON$BUILD_FLAGS |=2;
170 if($ENABLE_PHP_XMLRPC$BUILD_FLAGS |=4;
171 if($ENABLE_PHP_FILTER$BUILD_FLAGS |=8;
172 switch($WITH_BYTECODE_CACHE){
173     case 'auto': $BUILD_FLAGS |=112; break;
174     case 'apc': $BUILD_FLAGS |=16; break;
175     case 'eaccelerator': $BUILD_FLAGS |=32; break;
176     case 'xcache': $BUILD_FLAGS |=64; break;
177 }
178 if($ENABLE_OLD_CLASS_NAMING$BUILD_FLAGS |=256;
179 if($ENABLE_OLD_ACTION_SELECTOR) $BUILD_FLAGS |= 512;
180
181
182 if($EDITION_NAME ==''){
183     $EDITION_NAME_x='userbuild';
184     $EDITION_NAME_x.='-f'.$BUILD_FLAGS;
185     if($PHP_VERSION_TARGET){
186         $EDITION_NAME_x.='-p'.$PHP_VERSION_TARGET;
187     }
188 }else{
189     $EDITION_NAME_x = $EDITION_NAME;
190 }
191
192
193
194 if( ! $ENABLE_OPTIMIZED_SOURCE)
195     $STRIP_COMMENT='';
196
197 if($PACKAGE_TAR_GZ || $PACKAGE_ZIP ){
198
199     if($EDITION_NAME_x != '')
200         $PACKAGE_NAME.='-'.$EDITION_NAME_x;
201
202     $BUILD_TARGET_PATH = jBuildUtils::normalizeDir($MAIN_TARGET_PATH).$PACKAGE_NAME.'/';
203 }else{
204     $BUILD_TARGET_PATH = jBuildUtils::normalizeDir($MAIN_TARGET_PATH);
205 }
206
207 //----------------- Génération des sources
208
209 //... creation des repertoires
210 jBuildUtils::createDir($BUILD_TARGET_PATH);
211
212 //... execution des manifests
213 jManifest::process('build/manifests/jelix-lib.mn', '.', $BUILD_TARGET_PATH, ENV::getAll(), $STRIP_COMMENT, $VERBOSE);
214 jManifest::process('build/manifests/jelix-www.mn', '.', $BUILD_TARGET_PATH, ENV::getAll(), $STRIP_COMMENT, $VERBOSE);
215
216 if( ! $ENABLE_OPTIMIZED_SOURCE){
217     jManifest::process('build/manifests/jelix-no-opt.mn', '.', $BUILD_TARGET_PATH , ENV::getAll(), $STRIP_COMMENT, $VERBOSE);
218 }
219 if( ! $ENABLE_PHP_JELIX && ! $ENABLE_OPTIMIZED_SOURCE){
220     jManifest::process('build/manifests/jelix-no-ext.mn', '.', $BUILD_TARGET_PATH , ENV::getAll(), $STRIP_COMMENT, $VERBOSE);
221 }
222
223 if($ENABLE_DEVELOPER){
224     jManifest::process('build/manifests/jelix-dev.mn', '.', $BUILD_TARGET_PATH , ENV::getAll(), false, $VERBOSE);
225 }
226 if(!$ENABLE_PHP_JSON){
227     jManifest::process('build/manifests/lib-json.mn', '.', $BUILD_TARGET_PATH , ENV::getAll(), false, $VERBOSE);
228 }
229 jManifest::process('build/manifests/jelix-others.mn','.', $BUILD_TARGET_PATH , ENV::getAll(), false, $VERBOSE);
230 jManifest::process('build/manifests/jelix-modules.mn', '.', $BUILD_TARGET_PATH, ENV::getAll(), false, $VERBOSE);
231 jManifest::process('build/manifests/jelix-admin-modules.mn', '.', $BUILD_TARGET_PATH, ENV::getAll(), false, $VERBOSE);
232
233 if($INCLUDE_ALL_FONTS){
234     jManifest::process('build/manifests/fonts.mn', '.', $BUILD_TARGET_PATH , ENV::getAll(), false, $VERBOSE);
235 }
236
237 if($ENABLE_PHP_JELIX && ($PACKAGE_TAR_GZ || $PACKAGE_ZIP)){
238    jManifest::process('build/manifests/jelix-ext-php.mn', '.', $BUILD_TARGET_PATH , ENV::getAll(), false, $VERBOSE);
239 }
240
241 $var = ENV::getAll();
242 $var['STANDALONE_CHECKER'] = true;
243 jManifest::process('build/manifests/jelix-checker.mn','.', $BUILD_TARGET_PATH , $var);
244
245 file_put_contents($BUILD_TARGET_PATH.'lib/jelix/VERSION', $LIB_VERSION);
246
247 // creation du fichier d'infos sur le build
248 $view = array('EDITION_NAME', 'PHP_VERSION_TARGET', 'SVN_REVISION', 'ENABLE_PHP_FILTER',
249     'ENABLE_PHP_JSON', 'ENABLE_PHP_XMLRPC','ENABLE_PHP_JELIX', 'WITH_BYTECODE_CACHE', 'ENABLE_DEVELOPER',
250     'ENABLE_OPTIMIZED_SOURCE', 'STRIP_COMMENT', 'ENABLE_OLD_CLASS_NAMING', 'ENABLE_OLD_ACTION_SELECTOR' );
251
252 $infos = '; --- build date:  '.date('Y-m-d H:i')."\n; --- lib version: $LIB_VERSION\n".ENV::getIniContent($view);
253
254 file_put_contents($BUILD_TARGET_PATH.'lib/jelix/BUILD', $infos);
255
256 //... packages
257
258 if($PACKAGE_TAR_GZ){
259     exec('tar czf '.$MAIN_TARGET_PATH.'/'.$PACKAGE_NAME.'.tar.gz -C '.$MAIN_TARGET_PATH.' '.$PACKAGE_NAME);
260 }
261
262 if($PACKAGE_ZIP){
263     chdir($MAIN_TARGET_PATH);
264     exec('zip -r '.$PACKAGE_NAME.'.zip '.$PACKAGE_NAME);
265     chdir(dirname(__FILE__));
266 }
267
268 exit(0);
269 ?>
Note: See TracBrowser for help on using the browser.
Download in other formats: Plain Text Original Format