File: Makefile

package info (click to toggle)
snuffleupagus 0.12.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 3,828 kB
  • sloc: ansic: 6,265; php: 127; makefile: 98; python: 79; sh: 3
file content (85 lines) | stat: -rw-r--r-- 3,565 bytes parent folder | download
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
.DEFAULT_GOAL=help
.PHONY=help
SHELL = /bin/bash

SRC := src

clean:  ## clean everything
	make -C $(SRC) clean
	cd $(SRC); phpize --clean

release:  ## compile with releases flags
	cd $(SRC); phpize
	cd $(SRC); ./configure --enable-snuffleupagus
	make -C $(SRC)
	strip $(SRC)/.libs/snuffleupagus.so

install: release  ## compile and install snuffleupagus
	make -C $(SRC) install

compile_debug:  ## compile a debug build
	cd $(SRC); if [[ ! -f configure ]]; then phpize; fi; \
	./configure --enable-snuffleupagus --enable-debug --enable-debug-stderr && \
	make clean ; make -j4

DOCKER_IMAGE := php:latest
docker: ## start docker container with current PHP
	@echo "Starting new docker container with snuffleupagus bind-mounted to /sp"
	docker run -it -v "$$(pwd)":/sp $(DOCKER_IMAGE) /bin/bash

linked-clone:
	@if [[ "$(CLONE)" == "" ]]; then echo -e "==> Please provide clone name, e.g.\n  make linked-clone CLONE=php8.1\n"; exit 1; fi
	@if [[ -d "src-$(CLONE)" ]]; then echo -e "==> Clone '$(CLONE)' already exists.\n"; exit 1; fi
	@echo "==> CREATING LINKED CLONE IN 'src-$(CLONE)' <=="
	mkdir "src-$(CLONE)"; cd "src-$(CLONE)"; \
	SRCDIR=../src; ln -s $$SRCDIR/*.[hc] $$SRCDIR/config.m4 $$SRCDIR/snuffleupagus.php $$SRCDIR/Makefile.frag $$SRCDIR/*.re .; \
	cp -r $$SRCDIR/tests .
	@echo -e "==> DONE. <==\nCompile a debug build with\n  make compile_debug SRC=src-$(CLONE)"

tests: release tests-incremental  ## compile a release build and run the testsuite

tests-incremental:  ## perform an incremental build and run the testsuite
	make -C $(SRC)
	TEST_PHP_ARGS='-q' REPORT_EXIT_STATUS=1 make -C $(SRC) test

coverage:  ## compile snuffleugpaus, and run the testsuite with coverage
	cd $(SRC); phpize
ifeq ($(CC),clang)
	cd $(SRC); CFLAGS="-fprofile-instr-generate -fcoverage-mapping" ./configure --enable-snuffleupagus
	make -C $(SRC)
	sed -i "s/\$$ext_params -d display_errors=0 -r/-d display_errors=0 -r/" $(SRC)/run-tests.php
	LLVM_PROFILE_FILE="sp_%p_%m.profraw" TEST_PHP_ARGS='-q' REPORT_EXIT_STATUS=1 make -C $(SRC) test
	llvm-profdata-4.0 merge ./$(SRC)/*.profraw -o ./$(SRC)/sp.profdata
	llvm-cov report -instr-profile=./$(SRC)/sp.profdata ./$(SRC)/modules/snuffleupagus.so
else
	cd $(SRC); ./configure --enable-snuffleupagus --enable-coverage
	make -C $(SRC)
	rm -Rf $(SRC)/COV.html
	sed -i "s/\$$ext_params -d display_errors=0 -r/-d display_errors=0 -r/" $(SRC)/run-tests.php
	TEST_PHP_ARGS='-q' REPORT_EXIT_STATUS=1 make -C $(SRC) test
	lcov --base-directory ./$(SRC) --directory ./$(SRC) -c -o ./$(SRC)/COV.info --rc lcov_branch_coverage=1 
	lcov --remove $(SRC)/COV.info '/usr/*' --remove $(SRC)/COV.info '*tweetnacl.c' -o $(SRC)/COV.info --rc lcov_branch_coverage=1
	genhtml --show-details -o $(SRC)/COV.html ./$(SRC)/COV.info  --branch-coverage
endif

bench: joomla  ## run the benchmark

joomla:
	if [ ! -d "joomla-cms" ]; then \
		git clone --depth 1 https://github.com/joomla/joomla-cms.git >/dev/null; \
	fi
	cd joomla-cms; composer install >/dev/null 2>/dev/null
	echo "\nWith snuffleupagus:"
	cd joomla-cms; time php -d "extension=../$(SRC)/modules/snuffleupagus.so" -d "sp.configuration_file=../config/default.rules" libraries/vendor/phpunit/phpunit/phpunit --no-coverage >/dev/null
	echo "\nWithout snuffleupagus:"
	cd joomla-cms; time php libraries/vendor/phpunit/phpunit/phpunit --no-coverage >/dev/null

packages: debian  ## produce packages

debian:
	dpkg-buildpackage -i -us -uc -tc -I -rfakeroot

help:
	@awk -F ':|##' '/^[^\t].+?:.*?##/ { printf "\033[36m%-30s\033[0m %s\n", $$1, $$NF }' $(MAKEFILE_LIST) | sort

.PHONY: debian