build.php 4.1 KB

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