diff --git a/Makefile b/Makefile index af2844b..18617e6 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,141 @@ -all: +REPO ?= riak +RIAK_TAG = $(shell git describe --tags) +REVISION ?= $(shell echo $(RIAK_TAG) | sed -e 's/^$(REPO)-//') +PKG_VERSION ?= $(shell echo $(REVISION) | tr - .) + +.PHONY: rel stagedevrel deps + +all: deps compile + +compile: ./rebar compile +deps: + ./rebar get-deps + clean: ./rebar clean -test: all - ./rebar eunit +distclean: clean devclean relclean ballclean + ./rebar delete-deps + +test: + ./rebar skip_deps=true eunit + +## +## Release targets +## +rel: deps + ./rebar compile generate + +relclean: + rm -rf rel/riak + +## +## Developer targets +## +stagedevrel: dev1 dev2 dev3 dev4 + $(foreach dev,$^,\ + $(foreach dep,$(wildcard deps/*), rm -rf dev/$(dev)/lib/$(shell basename $(dep))-* && ln -sf $(abspath $(dep)) dev/$(dev)/lib;)) + +devrel: dev1 dev2 dev3 dev4 + +dev1 dev2 dev3 dev4: + mkdir -p dev + (cd rel && ../rebar generate target_dir=../dev/$@ overlay_vars=vars/$@_vars.config) + +devclean: clean + rm -rf dev + +stage : rel + $(foreach dep,$(wildcard deps/*), rm -rf rel/riak/lib/$(shell basename $(dep))-* && ln -sf $(abspath $(dep)) rel/riak/lib;) + +## +## Doc targets +## +docs: + ./rebar skip_deps=true doc + @cp -R apps/luke/doc doc/luke + @cp -R apps/riak_core/doc doc/riak_core + @cp -R apps/riak_kv/doc doc/riak_kv + +orgs: orgs-doc orgs-README + +orgs-doc: + @emacs -l orgbatch.el -batch --eval="(riak-export-doc-dir \"doc\" 'html)" + +orgs-README: + @emacs -l orgbatch.el -batch --eval="(riak-export-doc-file \"README.org\" 'ascii)" + @mv README.txt README + +APPS = kernel stdlib sasl erts ssl tools os_mon runtime_tools crypto inets \ + xmerl webtool snmp public_key mnesia eunit syntax_tools compiler +COMBO_PLT = $(HOME)/.riak_combo_dialyzer_plt + +check_plt: compile + dialyzer --check_plt --plt $(COMBO_PLT) --apps $(APPS) \ + deps/*/ebin + +build_plt: compile + dialyzer --build_plt --output_plt $(COMBO_PLT) --apps $(APPS) \ + deps/*/ebin + +dialyzer: compile + @echo + @echo Use "'make check_plt'" to check PLT prior to using this target. + @echo Use "'make build_plt'" to build PLT prior to using this target. + @echo + @sleep 1 + dialyzer -Wno_return --plt $(COMBO_PLT) deps/*/ebin | \ + fgrep -v -f ./dialyzer.ignore-warnings + +cleanplt: + @echo + @echo "Are you sure? It takes about 1/2 hour to re-build." + @echo Deleting $(COMBO_PLT) in 5 seconds. + @echo + sleep 5 + rm $(COMBO_PLT) + +# Release tarball creation +# Generates a tarball that includes all the deps sources so no checkouts are necessary +archivegit = git archive --format=tar --prefix=$(1)/ HEAD | (cd $(2) && tar xf -) +archivehg = hg archive $(2)/$(1) +archive = if [ -d ".git" ]; then \ + $(call archivegit,$(1),$(2)); \ + else \ + $(call archivehg,$(1),$(2)); \ + fi + +buildtar = mkdir distdir && \ + git clone . distdir/riak-clone && \ + cd distdir/riak-clone && \ + git checkout $(RIAK_TAG) && \ + $(call archive,$(RIAK_TAG),..) && \ + mkdir ../$(RIAK_TAG)/deps && \ + make deps; \ + for dep in deps/*; do \ + cd $${dep} && \ + $(call archive,$${dep},../../../$(RIAK_TAG)) && \ + mkdir -p ../../../$(RIAK_TAG)/$${dep}/priv && \ + git rev-list --max-count=1 HEAD > ../../../$(RIAK_TAG)/$${dep}/priv/git.vsn && \ + cd ../..; done + +distdir: + $(if $(RIAK_TAG), $(call buildtar), $(error "You can't generate a release tarball from a non-tagged revision. Run 'git checkout ', then 'make dist'")) + +dist $(RIAK_TAG).tar.gz: distdir + cd distdir; \ + tar czf ../$(RIAK_TAG).tar.gz $(RIAK_TAG) + +ballclean: + rm -rf $(RIAK_TAG).tar.gz distdir + +package: dist + $(MAKE) -C package package + +pkgclean: + $(MAKE) -C package pkgclean + +.PHONY: package +export PKG_VERSION REPO REVISION RIAK_TAG diff --git a/rebar b/rebar index e048a8a..f2bc4b8 100755 Binary files a/rebar and b/rebar differ diff --git a/rebar.config b/rebar.config index 06012b0..3da68bb 100644 --- a/rebar.config +++ b/rebar.config @@ -1,2 +1,7 @@ {erl_opts, [debug_info, fail_on_warning]}. + + +{deps, [ + {riak_err, "1.0.*", {git, "git://github.com/basho/riak_err.git", {branch, "master"}}} +]}.