2018-10-03 22:04:29 +02:00
< ? php
2018-10-28 23:01:09 +01:00
/* this file generates the final environment. All files have to be compiled before! */
2019-03-31 20:07:03 +02:00
$APP_FILE_LIST_SHARED_SOURCE = [
2018-10-28 23:01:09 +01:00
[ /* shared html and php files */
2018-10-03 22:04:29 +02:00
" type " => " html " ,
2019-03-25 20:04:04 +01:00
" search-pattern " => " /^([a-zA-Z]+) \ .(html|php|json) $ / " ,
2018-10-04 22:49:20 +02:00
" build-target " => " dev|rel " ,
2018-10-03 22:04:29 +02:00
" path " => " ./ " ,
2018-10-28 23:01:09 +01:00
" local-path " => " ./shared/html/ "
2018-10-03 22:04:29 +02:00
],
2019-08-30 23:06:39 +02:00
[ /* javascript loader */
" type " => " js " ,
" search-pattern " => " /.* \ .js $ / " ,
" build-target " => " dev " ,
" path " => " loader/ " ,
" local-path " => " ./shared/loader/ "
],
[ /* javascript loader for releases */
" type " => " js " ,
" search-pattern " => " /.*loader_[ \ S]+.min.js $ / " ,
" build-target " => " rel " ,
" path " => " loader/ " ,
" local-path " => " ./shared/generated/ "
],
2019-06-22 15:59:16 +02:00
[ /* shared javascript files (WebRTC adapter) */
" type " => " js " ,
" search-pattern " => " /.* \ .js $ / " ,
" build-target " => " dev|rel " ,
" path " => " adapter/ " ,
" local-path " => " ./shared/adapter/ "
],
2019-08-30 23:06:39 +02:00
2018-10-28 23:01:09 +01:00
[ /* shared javascript files (development mode only) */
2018-10-03 22:04:29 +02:00
" type " => " js " ,
" search-pattern " => " /.* \ .js $ / " ,
" search-exclude " => " /(.* \ /)?workers \ /.*/ " ,
2018-10-04 22:49:20 +02:00
" build-target " => " dev " ,
2018-10-03 22:04:29 +02:00
" path " => " js/ " ,
" local-path " => " ./shared/js/ "
],
2019-01-28 20:52:27 +01:00
[ /* shared javascript mapping files (development mode only) */
" type " => " js " ,
" search-pattern " => " /.* \ .(js.map|ts) $ / " ,
" search-exclude " => " /(.* \ /)?workers \ /.*/ " ,
" build-target " => " dev " ,
" path " => " js/ " ,
" local-path " => " ./shared/js/ " ,
2019-08-21 10:00:01 +02:00
" req-parm " => [ " --mappings " ]
2019-01-28 20:52:27 +01:00
],
2019-08-30 23:06:39 +02:00
2018-10-28 23:01:09 +01:00
[ /* shared generated worker codec */
2018-10-03 22:04:29 +02:00
" type " => " js " ,
2019-05-21 18:15:02 +02:00
" search-pattern " => " /(WorkerPOW.js) $ / " ,
2018-10-04 22:49:20 +02:00
" build-target " => " dev|rel " ,
2018-10-03 22:04:29 +02:00
" path " => " js/workers/ " ,
" local-path " => " ./shared/js/workers/ "
],
2019-02-17 16:08:10 +01:00
[ /* shared developer single css files */
2018-10-03 22:04:29 +02:00
" type " => " css " ,
" search-pattern " => " /.* \ .css $ / " ,
2019-02-17 16:08:10 +01:00
" build-target " => " dev " ,
2018-10-03 22:04:29 +02:00
" path " => " css/ " ,
" local-path " => " ./shared/css/ "
],
2019-08-21 10:00:01 +02:00
[ /* shared css mapping files (development mode only) */
" type " => " css " ,
" search-pattern " => " /.* \ .(css.map|scss) $ / " ,
" build-target " => " dev " ,
" path " => " css/ " ,
" local-path " => " ./shared/css/ " ,
" req-parm " => [ " --mappings " ]
],
2019-02-17 16:08:10 +01:00
[ /* shared release css files */
" type " => " css " ,
" search-pattern " => " /.* \ .css $ / " ,
" build-target " => " rel " ,
" path " => " css/ " ,
" local-path " => " ./shared/generated/ "
],
[ /* shared release css files */
" type " => " css " ,
" search-pattern " => " /.* \ .css $ / " ,
" build-target " => " rel " ,
" path " => " css/loader/ " ,
" local-path " => " ./shared/css/loader/ "
],
[ /* shared release css files */
" type " => " css " ,
" search-pattern " => " /.* \ .css $ / " ,
" build-target " => " dev|rel " ,
" path " => " css/theme/ " ,
" local-path " => " ./shared/css/theme/ "
],
2018-11-04 00:39:29 +01:00
[ /* shared sound files */
" type " => " wav " ,
" search-pattern " => " /.* \ .wav $ / " ,
" build-target " => " dev|rel " ,
" path " => " audio/ " ,
" local-path " => " ./shared/audio/ "
],
[ /* shared data sound files */
" type " => " json " ,
" search-pattern " => " /.* \ .json/ " ,
" build-target " => " dev|rel " ,
" path " => " audio/ " ,
" local-path " => " ./shared/audio/ "
],
2018-10-28 23:01:09 +01:00
[ /* shared image files */
2018-10-03 22:04:29 +02:00
" type " => " img " ,
" search-pattern " => " /.* \ .(svg|png)/ " ,
2018-10-04 22:49:20 +02:00
" build-target " => " dev|rel " ,
2018-10-03 22:04:29 +02:00
" path " => " img/ " ,
" local-path " => " ./shared/img/ "
],
2019-01-26 17:10:15 +01:00
[ /* own webassembly files */
" type " => " wasm " ,
" search-pattern " => " /.* \ .(wasm)/ " ,
" build-target " => " dev|rel " ,
" path " => " wat/ " ,
" local-path " => " ./shared/wat/ "
2019-03-31 20:07:03 +02:00
]
];
2018-10-03 22:04:29 +02:00
2019-03-31 20:07:03 +02:00
$APP_FILE_LIST_SHARED_VENDORS = [
2018-10-03 22:04:29 +02:00
[
" type " => " js " ,
2019-08-21 10:00:01 +02:00
" search-pattern " => " /.*( \ .min)? \ .js $ / " ,
2018-10-04 22:49:20 +02:00
" build-target " => " dev|rel " ,
2018-10-03 22:04:29 +02:00
" path " => " vendor/ " ,
" local-path " => " ./vendor/ "
],
[
" type " => " css " ,
" search-pattern " => " /.* \ .css $ / " ,
2018-10-04 22:49:20 +02:00
" build-target " => " dev|rel " ,
2018-10-03 22:04:29 +02:00
" path " => " vendor/ " ,
" local-path " => " ./vendor/ "
2019-03-31 20:07:03 +02:00
]
];
2018-10-03 22:04:29 +02:00
2019-03-31 20:07:03 +02:00
$APP_FILE_LIST_CLIENT_SOURCE = [
[ /* client css files */
2018-10-03 22:04:29 +02:00
" client-only " => true ,
" type " => " css " ,
" search-pattern " => " /.* \ .css $ / " ,
2018-10-04 22:49:20 +02:00
" build-target " => " dev|rel " ,
2018-10-03 22:04:29 +02:00
" path " => " css/ " ,
" local-path " => " ./client/css/ "
],
2019-03-31 20:07:03 +02:00
[ /* client js files */
2018-10-07 18:21:28 +02:00
" client-only " => true ,
" type " => " js " ,
" search-pattern " => " /.* \ .js/ " ,
2019-03-31 20:07:03 +02:00
" build-target " => " dev " ,
2018-10-07 18:21:28 +02:00
" path " => " js/ " ,
" local-path " => " ./client/js/ "
],
2018-10-03 22:04:29 +02:00
2019-03-31 20:07:03 +02:00
/* release specific */
[ /* web merged javascript files (shared inclusive) */
" client-only " => true ,
" type " => " js " ,
" search-pattern " => " /.* \ .js $ / " ,
" build-target " => " rel " ,
" path " => " js/ " ,
" local-path " => " ./client/generated/ "
],
[ /* Add the shared generated files. Exclude the shared file because we're including it already */
" client-only " => true ,
" type " => " js " ,
" search-pattern " => " /.* \ .js $ / " ,
" search-exclude " => " /shared \ .js(.map)? $ / " ,
" build-target " => " rel " ,
" path " => " js/ " ,
" local-path " => " ./shared/generated/ "
2019-06-22 15:59:16 +02:00
]
2019-03-31 20:07:03 +02:00
];
$APP_FILE_LIST_WEB_SOURCE = [
2019-10-19 17:24:14 +02:00
[ /* generated assembly files */
" web-only " => true ,
" type " => " wasm " ,
" search-pattern " => " /.* \ .(wasm)/ " ,
" build-target " => " dev|rel " ,
" path " => " wasm/ " ,
" local-path " => " ./asm/generated/ "
],
[ /* generated assembly javascript files */
" web-only " => true ,
" type " => " js " ,
" search-pattern " => " /.* \ .(js)/ " ,
" build-target " => " dev|rel " ,
" path " => " wasm/ " ,
" local-path " => " ./asm/generated/ "
],
2019-05-21 18:15:02 +02:00
[ /* web generated worker codec */
2019-10-19 17:24:14 +02:00
" web-only " => true ,
2019-05-21 18:15:02 +02:00
" type " => " js " ,
" search-pattern " => " /(WorkerCodec.js) $ / " ,
" build-target " => " dev|rel " ,
" path " => " js/workers/ " ,
" local-path " => " ./web/js/workers/ "
],
2018-10-28 23:01:09 +01:00
[ /* web javascript files (development mode only) */
2018-10-28 18:25:43 +01:00
" web-only " => true ,
" type " => " js " ,
" search-pattern " => " /.* \ .js $ / " ,
" build-target " => " dev " ,
" path " => " js/ " ,
" local-path " => " ./web/js/ "
],
2018-10-28 23:01:09 +01:00
[ /* web merged javascript files (shared inclusive) */
" web-only " => true ,
" type " => " js " ,
2019-05-21 18:15:02 +02:00
" search-pattern " => " /client( \ .min)? \ .js $ / " ,
2018-10-28 23:01:09 +01:00
" build-target " => " rel " ,
" path " => " js/ " ,
" local-path " => " ./web/generated/ "
],
[ /* web css files */
2018-10-03 22:04:29 +02:00
" web-only " => true ,
" type " => " css " ,
" search-pattern " => " /.* \ .css $ / " ,
2018-10-04 22:49:20 +02:00
" build-target " => " dev|rel " ,
2018-10-03 22:04:29 +02:00
" path " => " css/ " ,
" local-path " => " ./web/css/ "
],
2018-10-28 23:01:09 +01:00
[ /* web html files */
2018-10-03 22:04:29 +02:00
" web-only " => true ,
" type " => " html " ,
" search-pattern " => " /.* \ .(php|html)/ " ,
2018-10-04 22:49:20 +02:00
" build-target " => " dev|rel " ,
2018-10-03 22:04:29 +02:00
" path " => " ./ " ,
" local-path " => " ./web/html/ "
2019-10-19 17:24:14 +02:00
],
[ /* translations */
" web-only " => true , /* Only required for the web client */
" type " => " i18n " ,
" search-pattern " => " /.* \ .(translation|json)/ " ,
" build-target " => " dev|rel " ,
" path " => " i18n/ " ,
" local-path " => " ./shared/i18n/ "
2019-03-31 20:07:03 +02:00
]
];
2018-10-31 22:12:54 +01:00
2019-03-31 20:07:03 +02:00
$APP_FILE_LIST_WEB_TEASPEAK = [
2018-10-31 22:12:54 +01:00
/* special web.teaspeak.de only auth files */
[ /* login page and api */
" web-only " => true ,
" type " => " html " ,
" search-pattern " => " /.* \ .(php|html)/ " ,
" build-target " => " dev|rel " ,
" search-depth " => 1 ,
" path " => " ./ " ,
2018-12-26 15:54:47 +01:00
" local-path " => " ./auth/ " ,
" req-parm " => [ " -xf " ]
2018-10-31 22:12:54 +01:00
],
[ /* javascript */
" web-only " => true ,
" type " => " js " ,
" search-pattern " => " /.* \ .js $ / " ,
" build-target " => " dev|rel " ,
" path " => " js/ " ,
2018-12-26 15:54:47 +01:00
" local-path " => " ./auth/js/ " ,
" req-parm " => [ " -xf " ]
2018-10-31 22:12:54 +01:00
],
[ /* web css files */
" web-only " => true ,
" type " => " css " ,
" search-pattern " => " /.* \ .css $ / " ,
" build-target " => " dev|rel " ,
" path " => " css/ " ,
2018-12-26 15:54:47 +01:00
" local-path " => " ./auth/css/ " ,
" req-parm " => [ " -xf " ]
2018-10-31 22:12:54 +01:00
],
[ /* certificates */
" web-only " => true ,
" type " => " pem " ,
" search-pattern " => " /.* \ .pem $ / " ,
" build-target " => " dev|rel " ,
" path " => " certs/ " ,
2018-12-26 15:54:47 +01:00
" local-path " => " ./auth/certs/ " ,
" req-parm " => [ " -xf " ]
2019-03-31 20:07:03 +02:00
]
2018-10-03 22:04:29 +02:00
];
2019-08-31 18:31:01 +02:00
$CERTACCEPT_FILE_LIST = [
[ /* html files */
" type " => " html " ,
" search-pattern " => " /^([a-zA-Z]+) \ .(html|php|json) $ / " ,
" build-target " => " dev|rel " ,
" path " => " ./popup/certaccept/ " ,
" local-path " => " ./shared/popup/certaccept/html/ "
],
2019-09-01 17:24:06 +02:00
2019-08-31 18:31:01 +02:00
[ /* javascript loader (debug) */
" type " => " js " ,
2019-09-01 17:24:06 +02:00
" search-pattern " => " /(loader|certaccept) \ .js $ / " ,
2019-08-31 18:31:01 +02:00
" build-target " => " dev " ,
" path " => " ./popup/certaccept/loader/ " ,
" local-path " => " ./shared/loader/ "
],
2019-09-01 17:24:06 +02:00
[ /* javascript loader (releases) */
2019-08-31 18:31:01 +02:00
" type " => " js " ,
" search-pattern " => " /.*loader_certaccept.min.js $ / " ,
" build-target " => " rel " ,
" path " => " ./popup/certaccept/loader/ " ,
" local-path " => " ./shared/generated/ "
],
2019-09-01 17:24:06 +02:00
[ /* javascript imported from shared for debug */
" type " => " js " ,
" search-pattern " => " /^(BrowserIPC|log|proto|settings) \ .js $ / " ,
" build-target " => " dev " ,
" path " => " ./popup/certaccept/js/ " ,
" local-path " => " ./shared/js/ "
],
2019-08-31 18:31:01 +02:00
[ /* javascript for debug */
2019-09-01 17:24:06 +02:00
" type " => " js " ,
" search-pattern " => " /^certaccept \ .min \ .js $ / " ,
" build-target " => " rel " ,
" path " => " ./popup/certaccept/js/ " ,
" local-path " => " ./shared/generated/ "
],
[ /* javascript for release */
2019-08-31 18:31:01 +02:00
" type " => " js " ,
" search-pattern " => " /^.* \ .js $ / " ,
" build-target " => " dev " ,
" path " => " ./popup/certaccept/js/ " ,
2019-09-01 17:24:06 +02:00
" local-path " => " ./shared/popup/certaccept/js/ "
],
[ /* shared css files */
" type " => " css " ,
" search-pattern " => " /.* \ .css $ / " ,
" build-target " => " rel|dev " ,
" path " => " ./popup/certaccept/css/loader/ " ,
" local-path " => " ./shared/css/loader/ "
],
[ /* shared css files */
" type " => " css " ,
" search-pattern " => " /.* \ .css $ / " ,
" build-target " => " rel|dev " ,
" path " => " ./popup/certaccept/css/static/ " ,
" local-path " => " ./shared/popup/certaccept/css/static/ "
],
[ /* img files */
" type " => " img " ,
" search-pattern " => " /^(loading_error.*) \ .(svg) $ / " ,
" build-target " => " dev|rel " ,
" path " => " ./popup/certaccept/img/ " ,
" local-path " => " ./shared/img/ "
],
[ /* jquery vendor */
" type " => " js " ,
" search-pattern " => " /^jquery \ /.* \ .js $ / " ,
" build-target " => " dev|rel " ,
" path " => " ./popup/certaccept/vendor/ " ,
" local-path " => " ./vendor/ "
2019-08-31 18:31:01 +02:00
],
];
2019-03-31 20:07:03 +02:00
$APP_FILE_LIST = array_merge (
$APP_FILE_LIST_SHARED_SOURCE ,
$APP_FILE_LIST_SHARED_VENDORS ,
$APP_FILE_LIST_CLIENT_SOURCE ,
$APP_FILE_LIST_WEB_SOURCE ,
2019-08-31 18:31:01 +02:00
$APP_FILE_LIST_WEB_TEASPEAK ,
$CERTACCEPT_FILE_LIST
2019-03-31 20:07:03 +02:00
);
2019-02-20 22:08:23 +01:00
function systemify_path ( $path ) {
return str_replace ( " / " , DIRECTORY_SEPARATOR , $path );
}
function join_path ( ... $paths ) {
$result_path = " " ;
foreach ( $paths as $path ) {
if ( strlen ( $result_path ) > 0 )
$result_path .= DIRECTORY_SEPARATOR . $path ;
else
$result_path = $path ;
}
return $result_path ;
}
function create_directories ( & $error , $path , $dry_run = false ) {
if ( strpos ( PHP_OS , " Linux " ) !== false ) {
$command = " mkdir -p " . $path ;
} else if ( strpos ( PHP_OS , " WINNT " ) !== false ) {
$command = " mkdir " . $path ; /* default path tree */
} else {
$error = " unsupported system " ;
return false ;
}
echo $command . PHP_EOL ;
if ( ! $dry_run ) {
exec ( $command , $error , $state );
if ( $state ) {
$error = " Command execution results in " . $state . " : " . implode ( ' ' , $error );
return false ;
}
}
return true ;
}
function delete_directories ( & $error , $path , $dry_run = false ) {
2019-03-31 13:21:47 +02:00
if ( ! file_exists ( $path ))
return true ;
2019-02-20 22:08:23 +01:00
if ( strpos ( PHP_OS , " Linux " ) !== false ) {
$command = " rm -r " . $path ;
} else if ( strpos ( PHP_OS , " WINNT " ) !== false ) {
$command = " rm -r " . $path ;
} else {
$error = " unsupported system " ;
return false ;
}
echo $command . PHP_EOL ;
if ( ! $dry_run ) {
$state = 0 ;
exec ( $command , $output , $state );
if ( $state !== 0 ) {
$error = " Command execution results in " . $state . " : " . implode ( ' ' , $output );
return false ;
}
}
return true ;
}
function create_link ( & $error , $source , $target , $dry_run = false ) {
if ( strpos ( PHP_OS , " Linux " ) !== false ) {
$command = " ln -s " . $source . " " . $target ;
} else if ( strpos ( PHP_OS , " WINNT " ) !== false ) {
$command = " mklink " . ( is_dir ( $target ) ? " /D " : " " ) . " " . $target . " " . $source ;
} else {
$error = " unsupported system " ;
return false ;
}
echo $command . PHP_EOL ;
if ( ! $dry_run ) {
$state = 0 ;
exec ( $command , $output , $state );
if ( $state !== 0 ) {
$error = " Command execution results in " . $state . " : " . implode ( ' ' , $output );
return false ;
}
}
return true ;
}
function list_dir ( $base_dir , $match = null , $depth = - 1 , & $results = array (), $dir = " " ) {
2018-10-03 22:04:29 +02:00
if ( $depth == 0 ) return $results ;
2019-02-20 22:08:23 +01:00
if ( ! is_dir ( $base_dir . $dir )) {
echo " Skipping directory " . $base_dir . $dir . PHP_EOL ;
return $results ;
}
2018-10-03 22:04:29 +02:00
$files = scandir ( $base_dir . $dir );
foreach ( $files as $key => $value ){
$path = $base_dir . $dir . DIRECTORY_SEPARATOR . $value ;
if ( ! is_dir ( $path )) {
2019-09-01 17:24:06 +02:00
if ( ! $match || preg_match ( $match , ( $dir ? $dir . DIRECTORY_SEPARATOR : " " ) . $value ))
2018-10-03 22:04:29 +02:00
$results [] = ( $dir ? $dir . DIRECTORY_SEPARATOR : " " ) . $value ;
} else if ( $value != " . " && $value != " .. " ) {
list_dir ( $base_dir , $match , $depth - 1 , $results , ( $dir ? $dir . DIRECTORY_SEPARATOR : " " ) . $value );
}
}
return $results ;
}
class AppFile {
public $type ;
public $name ;
2019-02-20 22:08:23 +01:00
public $target_path ; /* relative path to the target file viewed from the file root */
public $local_path ; /* absolute path to local file */
2018-10-03 22:04:29 +02:00
public $hash ;
}
2019-09-01 17:24:06 +02:00
function normalizePath ( $path ) {
return array_reduce ( explode ( '/' , $path ), create_function ( '$a, $b' , '
if ( $a === 0 && $b === " . " )
return " ./ " ;
if ( $a === 0 )
$a = " / " ;
if ( $b === " " || $b === " . " )
return $a ;
if ( $b === " .. " )
return dirname ( $a );
return preg_replace ( " / \ /+/ " , " / " , " $a / $b " );
' ), 0 );
}
function find_files ( $flag = 0 b11 , $local_path_prefix = " . " . DIRECTORY_SEPARATOR , $target_path_prefix = " . " . DIRECTORY_SEPARATOR , $type = " dev " , $args = []) { //TODO Use cache here!
2018-10-03 22:04:29 +02:00
global $APP_FILE_LIST ;
$result = [];
foreach ( $APP_FILE_LIST as $entry ) {
if ( isset ( $entry [ " web-only " ]) && $entry [ " web-only " ] && ( $flag & 0 b01 ) == 0 ) continue ;
if ( isset ( $entry [ " client-only " ]) && $entry [ " client-only " ] && ( $flag & 0 b10 ) == 0 ) continue ;
2018-10-04 22:49:20 +02:00
if ( isset ( $entry [ " build-target " ]) && array_search ( $type , explode ( " | " , $entry [ " build-target " ])) === false ) continue ;
2018-12-26 15:54:47 +01:00
if ( isset ( $entry [ " req-parm " ])) {
if ( ! is_array ( $entry [ " req-parm " ]))
$entry [ " req-parm " ] = [ $entry [ " req-parm " ]];
$valid = true ;
foreach ( $entry [ " req-parm " ] as $parm ) {
if ( array_search ( $parm , $args ) === false )
$valid = false ;
}
if ( ! $valid )
continue ;
}
2019-02-20 22:08:23 +01:00
$entries = list_dir (
systemify_path ( $local_path_prefix . $entry [ " local-path " ]),
$entry [ " search-pattern " ],
isset ( $entry [ " search-depth " ]) ? $entry [ " search-depth " ] : - 1
);
2018-10-03 22:04:29 +02:00
foreach ( $entries as $f_entry ) {
if ( isset ( $entry [ " search-exclude " ]) && preg_match ( $entry [ " search-exclude " ], $f_entry )) continue ;
$file = new AppFile ;
2019-02-20 22:08:23 +01:00
$f_info = pathinfo ( $f_entry );
2019-09-01 17:24:06 +02:00
$file -> target_path = normalizePath ( $target_path_prefix . systemify_path ( $entry [ " path " ]) . DIRECTORY_SEPARATOR . $f_info [ " dirname " ]) . DIRECTORY_SEPARATOR ;
$file -> local_path = normalizePath ( getcwd () . DIRECTORY_SEPARATOR . systemify_path ( $entry [ " local-path " ]) . DIRECTORY_SEPARATOR . $f_info [ " dirname " ]) . DIRECTORY_SEPARATOR ;
2018-10-03 22:04:29 +02:00
2019-02-20 22:08:23 +01:00
$file -> name = $f_info [ " basename " ];
2018-10-03 22:04:29 +02:00
$file -> type = $entry [ " type " ];
2019-02-20 22:08:23 +01:00
$file -> hash = sha1_file ( $file -> local_path . DIRECTORY_SEPARATOR . $file -> name );
2018-10-03 22:04:29 +02:00
if ( strlen ( $file -> hash ) > 0 ) {
foreach ( $result as $e )
2019-08-31 18:31:01 +02:00
if ( $e -> hash == $file -> hash && $e -> target_path == $file -> target_path ) goto ignore ;
2018-10-03 22:04:29 +02:00
}
array_push ( $result , $file );
ignore :
}
}
return $result ;
}
if ( isset ( $_SERVER [ " argv " ])) { //Executed by command line
2019-02-20 22:08:23 +01:00
$supported = false ;
if ( strpos ( PHP_OS , " Linux " ) !== false ) {
$supported = true ;
} else if ( strpos ( PHP_OS , " WIN " ) !== false ) {
$supported = true ;
}
if ( ! $supported ) {
error_log ( " Invalid operating system ( " . PHP_OS . " )! Help tool only available under linux! " );
exit ( 1 );
}
2018-10-03 22:04:29 +02:00
if ( count ( $_SERVER [ " argv " ]) < 2 ) {
error_log ( " Invalid parameters! " );
goto help ;
}
if ( $_SERVER [ " argv " ][ 1 ] == " help " ) {
help :
echo " php " . $_SERVER [ " argv " ][ 0 ] . " <type> <args...> " . PHP_EOL ;
2018-12-26 15:54:47 +01:00
echo " generate <web/client> <dev/package> [-xf] " . PHP_EOL ;
echo " list <web/client> <dev/package> [-xf] " . PHP_EOL ;
2018-10-03 22:04:29 +02:00
exit ( 1 );
2018-12-26 15:54:47 +01:00
} else if ( $_SERVER [ " argv " ][ 1 ] == " generate " || $_SERVER [ " argv " ][ 1 ] == " list " ) {
2018-10-03 22:04:29 +02:00
$state = 0 ;
2018-12-26 15:54:47 +01:00
$dry_run = $_SERVER [ " argv " ][ 1 ] == " list " ;
2018-10-03 22:04:29 +02:00
$flagset = 0 b00 ;
$environment = " " ;
2018-10-04 22:49:20 +02:00
$type = " dev " ;
2018-10-28 23:59:15 +01:00
if ( $_SERVER [ " argv " ][ 3 ] == " dev " || $_SERVER [ " argv " ][ 3 ] == " development " ) {
2018-10-04 22:49:20 +02:00
if ( $_SERVER [ " argv " ][ 2 ] == " web " ) {
$flagset = 0 b01 ;
2019-09-01 17:24:06 +02:00
$environment = " . " . DIRECTORY_SEPARATOR . join_path ( " web " , " environment " , " development " );
2018-10-04 22:49:20 +02:00
} else if ( $_SERVER [ " argv " ][ 2 ] == " client " ) {
$flagset = 0 b10 ;
2019-09-01 17:24:06 +02:00
$environment = " . " . DIRECTORY_SEPARATOR . join_path ( " client-api " , " environment " , " ui-files " , " raw " );
2018-10-04 22:49:20 +02:00
} else {
error_log ( " Invalid type! " );
goto help ;
}
2018-10-28 23:59:15 +01:00
} else if ( $_SERVER [ " argv " ][ 3 ] == " rel " || $_SERVER [ " argv " ][ 3 ] == " release " ) {
2018-10-04 22:49:20 +02:00
$type = " rel " ;
if ( $_SERVER [ " argv " ][ 2 ] == " web " ) {
$flagset = 0 b01 ;
2019-09-01 17:24:06 +02:00
$environment = " . " . DIRECTORY_SEPARATOR . join_path ( " web " , " environment " , " release " );
2018-10-04 22:49:20 +02:00
} else if ( $_SERVER [ " argv " ][ 2 ] == " client " ) {
$flagset = 0 b10 ;
2019-09-01 17:24:06 +02:00
$environment = " . " . DIRECTORY_SEPARATOR . join_path ( " client-api " , " environment " , " ui-files " , " raw " );
2018-10-04 22:49:20 +02:00
} else {
error_log ( " Invalid type! " );
goto help ;
}
2018-10-03 22:04:29 +02:00
} else {
error_log ( " Invalid type! " );
goto help ;
}
{
2018-12-26 15:54:47 +01:00
if ( ! $dry_run ) {
2019-02-20 22:08:23 +01:00
if ( delete_directories ( $error , $environment ) === false )
goto handle_error ;
if ( create_directories ( $error , $environment ) === false )
goto handle_error ;
2018-12-26 15:54:47 +01:00
}
2018-10-03 22:04:29 +02:00
2019-09-01 17:24:06 +02:00
$files = find_files ( $flagset , " . " . DIRECTORY_SEPARATOR , $environment . DIRECTORY_SEPARATOR , $type , array_slice ( $_SERVER [ " argv " ], 4 ));
2018-10-03 22:04:29 +02:00
2019-02-20 22:08:23 +01:00
/** @var AppFile $file */
foreach ( $files as $file ) {
if ( ! $dry_run && ! is_dir ( $file -> target_path ) && strlen ( $file -> target_path ) > 0 ) {
if ( create_directories ( $error , $file -> target_path , $dry_run ) === false )
goto handle_error ;
2018-10-03 22:04:29 +02:00
}
2019-02-20 22:08:23 +01:00
if ( create_link ( $output , $file -> local_path . $file -> name , $file -> target_path . $file -> name , $dry_run ) === false )
goto handle_error ;
2018-10-03 22:04:29 +02:00
}
echo " Generated! " . PHP_EOL ;
}
2018-12-26 15:54:47 +01:00
if ( ! $dry_run ) {
2019-02-20 22:08:23 +01:00
exec ( " . " . DIRECTORY_SEPARATOR . " scripts " . DIRECTORY_SEPARATOR . " git_index.sh sort-tag " , $output , $state );
2018-12-02 20:58:29 +01:00
file_put_contents ( $environment . DIRECTORY_SEPARATOR . " version " , $output );
2018-10-04 22:49:20 +02:00
2018-12-26 15:54:47 +01:00
if ( $_SERVER [ " argv " ][ 2 ] == " client " ) {
2019-02-20 22:08:23 +01:00
if ( ! chdir ( " client-api " . DIRECTORY_SEPARATOR . " environment " )) {
2018-12-26 15:54:47 +01:00
error_log ( " Failed to enter directory client-api/environment! " );
exit ( 1 );
}
2019-02-20 22:08:23 +01:00
if ( ! is_dir ( " versions " . DIRECTORY_SEPARATOR . " beta " )) {
exec ( $command = " mkdir -p versions/beta " , $output , $state ); if ( $state ) goto handle_error ;
}
if ( ! is_dir ( " versions/stable " )) {
exec ( $command = " mkdir -p versions/beta " , $output , $state ); if ( $state ) goto handle_error ;
}
2018-10-08 23:02:34 +02:00
2018-12-26 15:54:47 +01:00
exec ( $command = " ln -s ../api.php ./ " , $output , $state ); $state = 0 ; //Dont handle an error here!
if ( $state ) goto handle_error ;
}
2018-10-05 16:37:14 +02:00
}
2018-10-04 22:49:20 +02:00
2018-10-05 16:37:14 +02:00
exit ( 0 );
2018-10-03 22:04:29 +02:00
handle_error :
2019-02-20 22:08:23 +01:00
error_log ( " Command execution failed! " );
error_log ( " Error message: " . $error );
2018-10-03 22:04:29 +02:00
exit ( 1 );
}
}