forked from devinus/poolboy
-
Notifications
You must be signed in to change notification settings - Fork 26
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Brett Hazen
committed
Jan 5, 2017
1 parent
be8f60f
commit 2b41ca9
Showing
3 changed files
with
177 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,34 +1,23 @@ | ||
REBAR = $(shell command -v rebar || echo ./rebar) | ||
.PHONY: deps test | ||
|
||
DIALYZER = dialyzer | ||
DIALYZER_FLAGS = | ||
|
||
DIALYZER_WARNINGS = -Wunmatched_returns -Werror_handling \ | ||
-Wrace_conditions -Wunderspecs | ||
all: deps compile | ||
|
||
.PHONY: all compile test qc clean get-deps build-plt dialyze | ||
compile: deps | ||
./rebar compile | ||
|
||
all: compile | ||
|
||
compile: | ||
@$(REBAR) compile | ||
|
||
test: compile | ||
@$(REBAR) eunit skip_deps=true | ||
|
||
qc: compile | ||
@$(REBAR) qc skip_deps=true | ||
deps: | ||
./rebar get-deps | ||
|
||
clean: | ||
@$(REBAR) clean | ||
|
||
get-deps: | ||
@$(REBAR) get-deps | ||
./rebar clean | ||
rm -rf test.*-temp-data | ||
|
||
.dialyzer_plt: | ||
@$(DIALYZER) --build_plt --output_plt .dialyzer_plt \ | ||
--apps kernel stdlib | ||
distclean: clean | ||
./rebar delete-deps | ||
|
||
build-plt: .dialyzer_plt | ||
DIALYZER_APPS = kernel stdlib sasl erts ssl tools os_mon runtime_tools crypto inets \ | ||
xmerl public_key mnesia eunit syntax_tools compiler | ||
|
||
dialyze: build-plt | ||
@$(DIALYZER) --src src --plt .dialyzer_plt $(DIALYZER_WARNINGS) | ||
include tools.mk |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
# ------------------------------------------------------------------- | ||
# | ||
# Copyright (c) 2014-2016 Basho Technologies, Inc. | ||
# | ||
# This file is provided to you under the Apache License, | ||
# Version 2.0 (the "License"); you may not use this file | ||
# except in compliance with the License. You may obtain | ||
# a copy of the License at | ||
# | ||
# http://www.apache.org/licenses/LICENSE-2.0 | ||
# | ||
# Unless required by applicable law or agreed to in writing, | ||
# software distributed under the License is distributed on an | ||
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||
# KIND, either express or implied. See the License for the | ||
# specific language governing permissions and limitations | ||
# under the License. | ||
# | ||
# ------------------------------------------------------------------- | ||
|
||
# ------------------------------------------------------------------- | ||
# NOTE: This file is is from https://github.com/basho/tools.mk. | ||
# It should not be edited in a project. It should simply be updated | ||
# wholesale when a new version of tools.mk is released. | ||
# ------------------------------------------------------------------- | ||
|
||
REBAR ?= ./rebar | ||
REVISION ?= $(shell git rev-parse --short HEAD) | ||
PROJECT ?= $(shell basename `find src -name "*.app.src"` .app.src) | ||
REBAR_DEPS_DIR ?= deps | ||
EUNIT_OPTS ?= | ||
|
||
ifeq ($(shell uname -s),Linux) | ||
ESED ?= sed -r | ||
else | ||
ESED ?= sed -E | ||
endif | ||
|
||
.PHONY: compile-no-deps test docs xref dialyzer-run dialyzer-quick dialyzer \ | ||
cleanplt upload-docs | ||
|
||
compile-no-deps: | ||
${REBAR} compile skip_deps=true | ||
|
||
test: ct eunit | ||
|
||
eunit: compile | ||
${REBAR} ${EUNIT_OPTS} eunit skip_deps=true | ||
|
||
ct: compile | ||
${REBAR} ct skip_deps=true | ||
|
||
upload-docs: docs | ||
@if [ -z "${BUCKET}" -o -z "${PROJECT}" -o -z "${REVISION}" ]; then \ | ||
echo "Set BUCKET, PROJECT, and REVISION env vars to upload docs"; \ | ||
exit 1; fi | ||
@cd doc; s3cmd put -P * "s3://${BUCKET}/${PROJECT}/${REVISION}/" > /dev/null | ||
@echo "Docs built at: http://${BUCKET}.s3-website-us-east-1.amazonaws.com/${PROJECT}/${REVISION}" | ||
|
||
docs: | ||
${REBAR} doc skip_deps=true | ||
|
||
xref: compile | ||
${REBAR} xref skip_deps=true | ||
|
||
PLT ?= $(HOME)/.combo_dialyzer_plt | ||
LOCAL_PLT ?= .local_dialyzer_plt | ||
DIALYZER_FLAGS ?= -Wunmatched_returns | ||
|
||
${PLT}: compile | ||
@if [ -f $(PLT) ]; then \ | ||
dialyzer --check_plt --plt $(PLT) --apps $(DIALYZER_APPS) && \ | ||
dialyzer --add_to_plt --plt $(PLT) --output_plt $(PLT) --apps $(DIALYZER_APPS) ; test $$? -ne 1; \ | ||
else \ | ||
dialyzer --build_plt --output_plt $(PLT) --apps $(DIALYZER_APPS); test $$? -ne 1; \ | ||
fi | ||
|
||
${LOCAL_PLT}: compile | ||
@if [ -d $(REBAR_DEPS_DIR) ]; then \ | ||
if [ -f $(LOCAL_PLT) ]; then \ | ||
dialyzer --check_plt --plt $(LOCAL_PLT) $(REBAR_DEPS_DIR)/*/ebin && \ | ||
dialyzer --add_to_plt --plt $(LOCAL_PLT) --output_plt $(LOCAL_PLT) $(REBAR_DEPS_DIR)/*/ebin ; test $$? -ne 1; \ | ||
else \ | ||
dialyzer --build_plt --output_plt $(LOCAL_PLT) $(REBAR_DEPS_DIR)/*/ebin ; test $$? -ne 1; \ | ||
fi \ | ||
fi | ||
|
||
dialyzer-run: | ||
@echo "==> $(shell basename $(shell pwd)) (dialyzer)" | ||
# The bulk of the code below deals with the dialyzer.ignore-warnings file | ||
# which contains strings to ignore if output by dialyzer. | ||
# Typically the strings include line numbers. Using them exactly is hard | ||
# to maintain as the code changes. This approach instead ignores the line | ||
# numbers, but takes into account the number of times a string is listed | ||
# for a given file. So if one string is listed once, for example, and it | ||
# appears twice in the warnings, the user is alerted. It is possible but | ||
# unlikely that this approach could mask a warning if one ignored warning | ||
# is removed and two warnings of the same kind appear in the file, for | ||
# example. But it is a trade-off that seems worth it. | ||
# Details of the cryptic commands: | ||
# - Remove line numbers from dialyzer.ignore-warnings | ||
# - Pre-pend duplicate count to each warning with sort | uniq -c | ||
# - Remove annoying white space around duplicate count | ||
# - Save in dialyer.ignore-warnings.tmp | ||
# - Do the same to dialyzer_warnings | ||
# - Remove matches from dialyzer.ignore-warnings.tmp from output | ||
# - Remove duplicate count | ||
# - Escape regex special chars to use lines as regex patterns | ||
# - Add pattern to match any line number (file.erl:\d+:) | ||
# - Anchor to match the entire line (^entire line$) | ||
# - Save in dialyzer_unhandled_warnings | ||
# - Output matches for those patterns found in the original warnings | ||
@if [ -f $(LOCAL_PLT) ]; then \ | ||
PLTS="$(PLT) $(LOCAL_PLT)"; \ | ||
else \ | ||
PLTS=$(PLT); \ | ||
fi; \ | ||
if [ -f dialyzer.ignore-warnings ]; then \ | ||
if [ $$(grep -cvE '[^[:space:]]' dialyzer.ignore-warnings) -ne 0 ]; then \ | ||
echo "ERROR: dialyzer.ignore-warnings contains a blank/empty line, this will match all messages!"; \ | ||
exit 1; \ | ||
fi; \ | ||
dialyzer $(DIALYZER_FLAGS) --plts $${PLTS} -c ebin > dialyzer_warnings ; \ | ||
cat dialyzer.ignore-warnings \ | ||
| $(ESED) 's/^([^:]+:)[^:]+:/\1/' \ | ||
| sort \ | ||
| uniq -c \ | ||
| $(ESED) '/.*\.erl: /!s/^[[:space:]]*[0-9]+[[:space:]]*//' \ | ||
> dialyzer.ignore-warnings.tmp ; \ | ||
egrep -v "^[[:space:]]*(done|Checking|Proceeding|Compiling)" dialyzer_warnings \ | ||
| $(ESED) 's/^([^:]+:)[^:]+:/\1/' \ | ||
| sort \ | ||
| uniq -c \ | ||
| $(ESED) '/.*\.erl: /!s/^[[:space:]]*[0-9]+[[:space:]]*//' \ | ||
| grep -F -f dialyzer.ignore-warnings.tmp -v \ | ||
| $(ESED) 's/^[[:space:]]*[0-9]+[[:space:]]*//' \ | ||
| $(ESED) 's/([]\^:+?|()*.$${}\[])/\\\1/g' \ | ||
| $(ESED) 's/(\\\.erl\\\:)/\1[[:digit:]]+:/g' \ | ||
| $(ESED) 's/^(.*)$$/^[[:space:]]*\1$$/g' \ | ||
> dialyzer_unhandled_warnings ; \ | ||
rm dialyzer.ignore-warnings.tmp; \ | ||
if [ $$(cat dialyzer_unhandled_warnings | wc -l) -gt 0 ]; then \ | ||
egrep -f dialyzer_unhandled_warnings dialyzer_warnings ; \ | ||
found_warnings=1; \ | ||
fi; \ | ||
[ "$$found_warnings" != 1 ] ; \ | ||
else \ | ||
dialyzer $(DIALYZER_FLAGS) --plts $${PLTS} -c ebin; \ | ||
fi | ||
|
||
dialyzer-quick: compile-no-deps dialyzer-run | ||
|
||
dialyzer: ${PLT} ${LOCAL_PLT} dialyzer-run | ||
|
||
cleanplt: | ||
@echo | ||
@echo "Are you sure? It takes several minutes to re-build." | ||
@echo Deleting $(PLT) and $(LOCAL_PLT) in 5 seconds. | ||
@echo | ||
sleep 5 | ||
rm $(PLT) | ||
rm $(LOCAL_PLT) |