1*a1a3b679SAndreas Boehler#!/usr/bin/env php 2*a1a3b679SAndreas Boehler<?php 3*a1a3b679SAndreas Boehler 4*a1a3b679SAndreas Boehler$tasks = [ 5*a1a3b679SAndreas Boehler 6*a1a3b679SAndreas Boehler 'buildzip' => [ 7*a1a3b679SAndreas Boehler 'init', 'test', 'clean', 8*a1a3b679SAndreas Boehler ], 9*a1a3b679SAndreas Boehler 'markrelease' => [ 10*a1a3b679SAndreas Boehler 'init', 'test', 'clean', 11*a1a3b679SAndreas Boehler ], 12*a1a3b679SAndreas Boehler 'clean' => [], 13*a1a3b679SAndreas Boehler 'test' => [ 14*a1a3b679SAndreas Boehler 'composerupdate', 15*a1a3b679SAndreas Boehler ], 16*a1a3b679SAndreas Boehler 'init' => [], 17*a1a3b679SAndreas Boehler 'composerupdate' => [], 18*a1a3b679SAndreas Boehler ]; 19*a1a3b679SAndreas Boehler 20*a1a3b679SAndreas Boehler$default = 'buildzip'; 21*a1a3b679SAndreas Boehler 22*a1a3b679SAndreas Boehler$baseDir = __DIR__ . '/../'; 23*a1a3b679SAndreas Boehlerchdir($baseDir); 24*a1a3b679SAndreas Boehler 25*a1a3b679SAndreas Boehler$currentTask = $default; 26*a1a3b679SAndreas Boehlerif ($argc > 1) $currentTask = $argv[1]; 27*a1a3b679SAndreas Boehler$version = null; 28*a1a3b679SAndreas Boehlerif ($argc > 2) $version = $argv[2]; 29*a1a3b679SAndreas Boehler 30*a1a3b679SAndreas Boehlerif (!isset($tasks[$currentTask])) { 31*a1a3b679SAndreas Boehler echo "Task not found: ", $currentTask, "\n"; 32*a1a3b679SAndreas Boehler die(1); 33*a1a3b679SAndreas Boehler} 34*a1a3b679SAndreas Boehler 35*a1a3b679SAndreas Boehler// Creating the dependency graph 36*a1a3b679SAndreas Boehler$newTaskList = []; 37*a1a3b679SAndreas Boehler$oldTaskList = [$currentTask => true]; 38*a1a3b679SAndreas Boehler 39*a1a3b679SAndreas Boehlerwhile(count($oldTaskList)>0) { 40*a1a3b679SAndreas Boehler 41*a1a3b679SAndreas Boehler foreach($oldTaskList as $task=>$foo) { 42*a1a3b679SAndreas Boehler 43*a1a3b679SAndreas Boehler if (!isset($tasks[$task])) { 44*a1a3b679SAndreas Boehler echo "Dependency not found: " . $task, "\n"; 45*a1a3b679SAndreas Boehler die(1); 46*a1a3b679SAndreas Boehler } 47*a1a3b679SAndreas Boehler $dependencies = $tasks[$task]; 48*a1a3b679SAndreas Boehler 49*a1a3b679SAndreas Boehler $fullFilled = true; 50*a1a3b679SAndreas Boehler foreach($dependencies as $dependency) { 51*a1a3b679SAndreas Boehler if (isset($newTaskList[$dependency])) { 52*a1a3b679SAndreas Boehler // Already in the fulfilled task list. 53*a1a3b679SAndreas Boehler continue; 54*a1a3b679SAndreas Boehler } else { 55*a1a3b679SAndreas Boehler $oldTaskList[$dependency] = true; 56*a1a3b679SAndreas Boehler $fullFilled = false; 57*a1a3b679SAndreas Boehler } 58*a1a3b679SAndreas Boehler 59*a1a3b679SAndreas Boehler } 60*a1a3b679SAndreas Boehler if ($fullFilled) { 61*a1a3b679SAndreas Boehler unset($oldTaskList[$task]); 62*a1a3b679SAndreas Boehler $newTaskList[$task] = 1; 63*a1a3b679SAndreas Boehler } 64*a1a3b679SAndreas Boehler 65*a1a3b679SAndreas Boehler } 66*a1a3b679SAndreas Boehler 67*a1a3b679SAndreas Boehler} 68*a1a3b679SAndreas Boehler 69*a1a3b679SAndreas Boehlerforeach(array_keys($newTaskList) as $task) { 70*a1a3b679SAndreas Boehler 71*a1a3b679SAndreas Boehler echo "task: " . $task, "\n"; 72*a1a3b679SAndreas Boehler call_user_func($task); 73*a1a3b679SAndreas Boehler echo "\n"; 74*a1a3b679SAndreas Boehler 75*a1a3b679SAndreas Boehler} 76*a1a3b679SAndreas Boehler 77*a1a3b679SAndreas Boehlerfunction init() { 78*a1a3b679SAndreas Boehler 79*a1a3b679SAndreas Boehler global $version; 80*a1a3b679SAndreas Boehler if (!$version) { 81*a1a3b679SAndreas Boehler include __DIR__ . '/../vendor/autoload.php'; 82*a1a3b679SAndreas Boehler $version = Sabre\DAV\Version::VERSION; 83*a1a3b679SAndreas Boehler } 84*a1a3b679SAndreas Boehler 85*a1a3b679SAndreas Boehler echo " Building sabre/dav " . $version, "\n"; 86*a1a3b679SAndreas Boehler 87*a1a3b679SAndreas Boehler} 88*a1a3b679SAndreas Boehler 89*a1a3b679SAndreas Boehlerfunction clean() { 90*a1a3b679SAndreas Boehler 91*a1a3b679SAndreas Boehler global $baseDir; 92*a1a3b679SAndreas Boehler echo " Removing build files\n"; 93*a1a3b679SAndreas Boehler $outputDir = $baseDir . '/build/SabreDAV'; 94*a1a3b679SAndreas Boehler if (is_dir($outputDir)) { 95*a1a3b679SAndreas Boehler system('rm -r ' . $baseDir . '/build/SabreDAV'); 96*a1a3b679SAndreas Boehler } 97*a1a3b679SAndreas Boehler 98*a1a3b679SAndreas Boehler} 99*a1a3b679SAndreas Boehler 100*a1a3b679SAndreas Boehlerfunction composerupdate() { 101*a1a3b679SAndreas Boehler 102*a1a3b679SAndreas Boehler global $baseDir; 103*a1a3b679SAndreas Boehler echo " Updating composer packages to latest version\n\n"; 104*a1a3b679SAndreas Boehler system('cd ' . $baseDir . '; composer update'); 105*a1a3b679SAndreas Boehler} 106*a1a3b679SAndreas Boehler 107*a1a3b679SAndreas Boehlerfunction test() { 108*a1a3b679SAndreas Boehler 109*a1a3b679SAndreas Boehler global $baseDir; 110*a1a3b679SAndreas Boehler 111*a1a3b679SAndreas Boehler echo " Running all unittests.\n"; 112*a1a3b679SAndreas Boehler echo " This may take a while.\n\n"; 113*a1a3b679SAndreas Boehler system(__DIR__ . '/phpunit --configuration ' . $baseDir . '/tests/phpunit.xml --stop-on-failure', $code); 114*a1a3b679SAndreas Boehler if ($code != 0) { 115*a1a3b679SAndreas Boehler echo "PHPUnit reported error code $code\n"; 116*a1a3b679SAndreas Boehler die(1); 117*a1a3b679SAndreas Boehler } 118*a1a3b679SAndreas Boehler 119*a1a3b679SAndreas Boehler} 120*a1a3b679SAndreas Boehler 121*a1a3b679SAndreas Boehlerfunction buildzip() { 122*a1a3b679SAndreas Boehler 123*a1a3b679SAndreas Boehler global $baseDir, $version; 124*a1a3b679SAndreas Boehler echo " Generating composer.json\n"; 125*a1a3b679SAndreas Boehler 126*a1a3b679SAndreas Boehler $input = json_decode(file_get_contents(__DIR__ . '/../composer.json'), true); 127*a1a3b679SAndreas Boehler $newComposer = [ 128*a1a3b679SAndreas Boehler "require" => $input['require'], 129*a1a3b679SAndreas Boehler "config" => [ 130*a1a3b679SAndreas Boehler "bin-dir" => "./bin", 131*a1a3b679SAndreas Boehler ], 132*a1a3b679SAndreas Boehler "prefer-stable" => true, 133*a1a3b679SAndreas Boehler "minimum-stability" => "alpha", 134*a1a3b679SAndreas Boehler ]; 135*a1a3b679SAndreas Boehler unset( 136*a1a3b679SAndreas Boehler $newComposer['require']['sabre/vobject'], 137*a1a3b679SAndreas Boehler $newComposer['require']['sabre/http'], 138*a1a3b679SAndreas Boehler $newComposer['require']['sabre/uri'], 139*a1a3b679SAndreas Boehler $newComposer['require']['sabre/event'] 140*a1a3b679SAndreas Boehler ); 141*a1a3b679SAndreas Boehler $newComposer['require']['sabre/dav'] = $version; 142*a1a3b679SAndreas Boehler mkdir('build/SabreDAV'); 143*a1a3b679SAndreas Boehler file_put_contents('build/SabreDAV/composer.json', json_encode($newComposer, JSON_PRETTY_PRINT)); 144*a1a3b679SAndreas Boehler 145*a1a3b679SAndreas Boehler echo " Downloading dependencies\n"; 146*a1a3b679SAndreas Boehler system("cd build/SabreDAV; composer install -n", $code); 147*a1a3b679SAndreas Boehler if ($code!==0) { 148*a1a3b679SAndreas Boehler echo "Composer reported error code $code\n"; 149*a1a3b679SAndreas Boehler die(1); 150*a1a3b679SAndreas Boehler } 151*a1a3b679SAndreas Boehler 152*a1a3b679SAndreas Boehler echo " Removing pointless files\n"; 153*a1a3b679SAndreas Boehler unlink('build/SabreDAV/composer.json'); 154*a1a3b679SAndreas Boehler unlink('build/SabreDAV/composer.lock'); 155*a1a3b679SAndreas Boehler 156*a1a3b679SAndreas Boehler echo " Moving important files to the root of the project\n"; 157*a1a3b679SAndreas Boehler 158*a1a3b679SAndreas Boehler $fileNames = [ 159*a1a3b679SAndreas Boehler 'CHANGELOG.md', 160*a1a3b679SAndreas Boehler 'LICENSE', 161*a1a3b679SAndreas Boehler 'README.md', 162*a1a3b679SAndreas Boehler 'examples', 163*a1a3b679SAndreas Boehler ]; 164*a1a3b679SAndreas Boehler foreach($fileNames as $fileName) { 165*a1a3b679SAndreas Boehler echo " $fileName\n"; 166*a1a3b679SAndreas Boehler rename('build/SabreDAV/vendor/sabre/dav/' . $fileName, 'build/SabreDAV/' . $fileName); 167*a1a3b679SAndreas Boehler } 168*a1a3b679SAndreas Boehler 169*a1a3b679SAndreas Boehler // <zip destfile="build/SabreDAV-${sabredav.version}.zip" basedir="build/SabreDAV" prefix="SabreDAV/" /> 170*a1a3b679SAndreas Boehler 171*a1a3b679SAndreas Boehler echo "\n"; 172*a1a3b679SAndreas Boehler echo "Zipping the sabredav distribution\n\n"; 173*a1a3b679SAndreas Boehler system('cd build; zip -qr sabredav-' . $version . '.zip SabreDAV'); 174*a1a3b679SAndreas Boehler 175*a1a3b679SAndreas Boehler echo "Done."; 176*a1a3b679SAndreas Boehler 177*a1a3b679SAndreas Boehler} 178