Makefile 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. PSYSH_SRC = bin src box.json.dist composer.json build/stub scoper.inc.php
  2. PSYSH_SRC_FILES = $(shell find src -type f -name "*.php")
  3. VERSION = $(shell git describe --tag --always --dirty=-dev)
  4. COMPOSER_OPTS = --no-interaction --no-progress --verbose
  5. COMPOSER_REQUIRE_OPTS = $(COMPOSER_OPTS) --no-update
  6. COMPOSER_UPDATE_OPTS = $(COMPOSER_OPTS) --prefer-stable --no-dev --classmap-authoritative --prefer-dist
  7. ifneq ($(CI),)
  8. PHPUNIT_OPTS = --verbose --coverage-clover=coverage.xml
  9. endif
  10. # Commands
  11. .PHONY: help build clean dist test phpstan
  12. .DEFAULT_GOAL := help
  13. help:
  14. @echo "\033[33mUsage:\033[0m\n make TARGET\n\n\033[33mTargets:\033[0m"
  15. @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[32m%-7s\033[0m %s\n", $$1, $$2}'
  16. build: ## Compile PHARs (use `build/psysh/psysh` for just the default build!)
  17. build: build/psysh/psysh build/psysh-php70/psysh
  18. clean: ## Clean all created artifacts
  19. rm -rf build/*
  20. rm -rf dist/*
  21. rm -rf vendor-bin/*/vendor/
  22. dist: ## Build tarballs for distribution
  23. dist: dist/psysh-$(VERSION).tar.gz dist/psysh-$(VERSION)-php70.tar.gz
  24. test: ## Run unit tests
  25. test: vendor/bin/phpunit
  26. $< $(PHPUNIT_OPTS)
  27. phpstan: ## Run static analysis
  28. phpstan: vendor/bin/phpstan vendor/bin/phpunit
  29. vendor/bin/phpstan --memory-limit=1G analyse
  30. # All the composer stuffs
  31. composer.lock: composer.json
  32. composer install
  33. touch $@
  34. vendor/autoload.php: composer.lock
  35. composer install
  36. touch $@
  37. vendor-bin/%/vendor/autoload.php: vendor/autoload.php vendor-bin/%/composer.json
  38. composer bin $* install
  39. touch $@
  40. vendor/bin/box: vendor-bin/box/vendor/autoload.php
  41. composer bin box install
  42. ln -sf ../../vendor-bin/box/vendor/humbug/box/bin/box $@
  43. vendor/bin/phpunit: vendor-bin/phpunit/vendor/autoload.php
  44. composer bin phpunit install --ignore-platform-reqs
  45. ln -sf ../../vendor-bin/phpunit/vendor/phpunit/phpunit/phpunit $@
  46. vendor/bin/phpstan: vendor-bin/phpstan/vendor/autoload.php
  47. composer bin phpstan install --ignore-platform-reqs
  48. ln -sf ../../vendor-bin/phpstan/vendor/phpstan/phpstan/phpstan $@
  49. # Lots of PHARs
  50. build/stub: bin/build-stub bin/psysh LICENSE
  51. bin/build-stub
  52. build/psysh: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
  53. rm -rf $@ || true
  54. mkdir $@
  55. cp -R $(PSYSH_SRC) $@/
  56. sed -i -e "/^ *const VERSION =/ s/'.*'/'$(VERSION)'/" $@/src/Shell.php
  57. composer config --working-dir $@ platform.php 7.2.5
  58. composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) php:'>=7.2.5'
  59. composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) symfony/polyfill-iconv symfony/polyfill-mbstring
  60. composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) --dev roave/security-advisories:dev-latest
  61. composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
  62. build/psysh-php70: $(PSYSH_SRC) $(PSYSH_SRC_FILES)
  63. rm -rf $@ || true
  64. mkdir $@
  65. cp -R $(PSYSH_SRC) $@/
  66. sed -i -e "/^ *const VERSION =/ s/'.*'/'$(VERSION)+php70'/" $@/src/Shell.php
  67. composer config --working-dir $@ platform.php 7.0.8
  68. composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) symfony/polyfill-iconv symfony/polyfill-mbstring
  69. composer require --working-dir $@ $(COMPOSER_REQUIRE_OPTS) --dev roave/security-advisories:dev-latest
  70. composer update --working-dir $@ $(COMPOSER_UPDATE_OPTS)
  71. build/%/psysh: vendor/bin/box build/%
  72. vendor/bin/box compile --no-parallel --working-dir $(dir $@)
  73. # Dist packages
  74. dist/psysh-$(VERSION).tar.gz: build/psysh/psysh
  75. @mkdir -p $(@D)
  76. tar -C $(dir $<) -czf $@ $(notdir $<)
  77. dist/psysh-$(VERSION)-%.tar.gz: build/psysh-%/psysh
  78. @mkdir -p $(@D)
  79. tar -C $(dir $<) -czf $@ $(notdir $<)