build.php 4.1 KB

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