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