root/branches/1.0.x/build/buildjelix.php

Revision 851, 6.9 kB (checked in by laurentj, 9 months ago)

backport into 1.0.x branch tests in CLI context, to improve continues integrations on the jelix server for this branch

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