# Makefile for PHP code analysis & testing, documentation and release generation
BIN = vendor/bin
-PHP_SOURCE = index.php application tests plugins
-PHP_COMMA_SOURCE = index.php,application,tests,plugins
all: static_analysis_summary check_permissions test
rsync -az /shaarli/ ~/shaarli/
cd ~/shaarli && make $*
-##
-# Concise status of the project
-# These targets are non-blocking: || exit 0
-##
-
-static_analysis_summary: code_sniffer_source copy_paste mess_detector_summary
- @echo
-
##
# PHP_CodeSniffer
# Detects PHP syntax errors
# - http://pear.php.net/manual/en/package.php.php-codesniffer.usage.php
# - http://pear.php.net/manual/en/package.php.php-codesniffer.reporting.php
##
+PHPCS := $(BIN)/phpcs
-code_sniffer: code_sniffer_full
+code_sniffer:
+ @$(PHPCS)
### - errors filtered by coding standard: PEAR, PSR1, PSR2, Zend...
PHPCS_%:
- @$(BIN)/phpcs $(PHP_SOURCE) --report-full --report-width=200 --standard=$*
+ @$(PHPCS) --report-full --report-width=200 --standard=$*
### - errors by Git author
code_sniffer_blame:
- @$(BIN)/phpcs $(PHP_SOURCE) --report-gitblame
+ @$(PHPCS) --report-gitblame
### - all errors/warnings
code_sniffer_full:
- @$(BIN)/phpcs $(PHP_SOURCE) --report-full --report-width=200
+ @$(PHPCS) --report-full --report-width=200
### - errors grouped by kind
code_sniffer_source:
- @$(BIN)/phpcs $(PHP_SOURCE) --report-source || exit 0
-
-##
-# PHP Copy/Paste Detector
-# Detects code redundancy
-# Documentation: https://github.com/sebastianbergmann/phpcpd
-##
-
-copy_paste:
- @echo "-----------------------"
- @echo "PHP COPY/PASTE DETECTOR"
- @echo "-----------------------"
- @$(BIN)/phpcpd $(PHP_SOURCE) || exit 0
- @echo
-
-##
-# PHP Mess Detector
-# Detects PHP syntax errors, sorted by category
-# Rules documentation: http://phpmd.org/rules/index.html
-##
-MESS_DETECTOR_RULES = cleancode,codesize,controversial,design,naming,unusedcode
-
-mess_title:
- @echo "-----------------"
- @echo "PHP MESS DETECTOR"
- @echo "-----------------"
-
-### - all warnings
-mess_detector: mess_title
- @$(BIN)/phpmd $(PHP_COMMA_SOURCE) text $(MESS_DETECTOR_RULES) | sed 's_.*\/__'
-
-### - all warnings + HTML output contains links to PHPMD's documentation
-mess_detector_html:
- @$(BIN)/phpmd $(PHP_COMMA_SOURCE) html $(MESS_DETECTOR_RULES) \
- --reportfile phpmd.html || exit 0
-
-### - warnings grouped by message, sorted by descending frequency order
-mess_detector_grouped: mess_title
- @$(BIN)/phpmd $(PHP_SOURCE) text $(MESS_DETECTOR_RULES) \
- | cut -f 2 | sort | uniq -c | sort -nr
-
-### - summary: number of warnings by rule set
-mess_detector_summary: mess_title
- @for rule in $$(echo $(MESS_DETECTOR_RULES) | tr ',' ' '); do \
- warnings=$$($(BIN)/phpmd $(PHP_COMMA_SOURCE) text $$rule | wc -l); \
- printf "$$warnings\t$$rule\n"; \
- done;
+ @$(PHPCS) --report-source || exit 0
##
# Checks source file & script permissions
--testsuite language-$(firstword $(subst _, ,$*))
all_tests: test locale_test_de_DE locale_test_en_US locale_test_fr_FR
- @$(BIN)/phpcov merge --html coverage coverage
+ @# --The current version is not compatible with PHP 7.2
+ @#$(BIN)/phpcov merge --html coverage coverage
@# --text doesn't work with phpunit 4.* (v5 requires PHP 5.6)
@#$(BIN)/phpcov merge --text coverage/txt coverage
git archive --prefix=$(ARCHIVE_PREFIX) -o $(ARCHIVE_VERSION).tar HEAD
tar rvf $(ARCHIVE_VERSION).tar --transform "s|^vendor|$(ARCHIVE_PREFIX)vendor|" vendor/
tar rvf $(ARCHIVE_VERSION).tar --transform "s|^doc/html|$(ARCHIVE_PREFIX)doc/html|" doc/html/
+ tar rvf $(ARCHIVE_VERSION).tar --transform "s|^tpl|$(ARCHIVE_PREFIX)tpl|" tpl/
gzip $(ARCHIVE_VERSION).tar
### generate a release zip and include 3rd-party dependencies and translations
release_zip: composer_dependencies htmldoc translate build_frontend
git archive --prefix=$(ARCHIVE_PREFIX) -o $(ARCHIVE_VERSION).zip -9 HEAD
- mkdir -p $(ARCHIVE_PREFIX)/{doc,vendor}
+ mkdir -p $(ARCHIVE_PREFIX)/doc
+ mkdir -p $(ARCHIVE_PREFIX)/vendor
rsync -a doc/html/ $(ARCHIVE_PREFIX)doc/html/
zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)doc/
rsync -a vendor/ $(ARCHIVE_PREFIX)vendor/
zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)vendor/
+ rsync -a tpl/ $(ARCHIVE_PREFIX)tpl/
+ zip -r $(ARCHIVE_VERSION).zip $(ARCHIVE_PREFIX)tpl/
rm -rf $(ARCHIVE_PREFIX)
##
@git shortlog -sne > AUTHORS
@rm .mailmap
-### generate Doxygen documentation
-doxygen: clean
- @rm -rf doxygen
- @doxygen Doxyfile
+### generate phpDocumentor documentation
+phpdoc: clean
+ @docker run --rm -v $(PWD):/data -u `id -u`:`id -g` phpdoc/phpdoc
### generate HTML documentation from Markdown pages with MkDocs
htmldoc:
python3 -m venv venv/
bash -c 'source venv/bin/activate; \
+ pip install wheel; \
pip install mkdocs; \
mkdocs build --clean'
find doc/html/ -type f -exec chmod a-x '{}' \;