1 # -*- makefile-gmake -*-
5 # USE_CABAL_COMMAND :: whether to use the cabal(1) command instead
7 # default: "YES" if it's in the PATH, "NO" otherwise.
9 # CONFIGURE_ARGS :: arguments to be passed to ./Setup configure
10 # default: --disable-optimization
12 # RUN_COMMAND :: command to be run for "make run"
29 ifndef USE_CABAL_COMMAND
30 ifeq ($(shell which $(CABAL) >/dev/null 2>&1; echo $$?),0)
31 USE_CABAL_COMMAND := YES
33 USE_CABAL_COMMAND := NO
37 ifeq ($(strip $(USE_CABAL_COMMAND)),YES)
38 SETUP_CMD := $(shell which $(CABAL))
43 CONFIGURE_ARGS ?= --disable-optimization
44 HADDOCK_OPTS ?= --hyperlink-source
46 --hint=Default --hint=Dollar --hint=Generalise \
48 --ignore="Parse error" \
49 --report=dist/report.html
51 SETUP_FILE := $(wildcard Setup.*hs)
52 CABAL_FILE := $(wildcard *.cabal)
53 PKG_NAME := $(CABAL_FILE:.cabal=)
55 ifeq ($(shell ls configure.ac 2>/dev/null),configure.ac)
56 AUTOCONF_AC_FILE := configure.ac
57 AUTOCONF_FILE := configure
59 ifeq ($(shell ls configure.in 2>/dev/null),configure.in)
60 AUTOCONF_AC_FILE := configure.in
61 AUTOCONF_FILE := configure
68 BUILDINFO_IN_FILE := $(wildcard *.buildinfo.in)
69 BUILDINFO_FILE := $(BUILDINFO_IN_FILE:.in=)
73 build: setup-config build-hook
79 ifeq ($(RUN_COMMAND),)
81 @echo "cabal-package.mk: No command to run."
82 @echo "cabal-package.mk: If you want to run something, define RUN_COMMAND variable."
85 @echo ".:.:. Let's go .:.:."
89 setup-config: dist/setup-config setup-config-hook $(BUILDINFO_FILE)
93 dist/setup-config: $(CABAL_FILE) $(SETUP_CMD) $(AUTOCONF_FILE)
94 $(SETUP_CMD) configure $(CONFIGURE_ARGS)
96 $(AUTOCONF_FILE): $(AUTOCONF_AC_FILE)
99 $(BUILDINFO_FILE): $(BUILDINFO_IN_FILE) configure
100 $(SETUP_CMD) configure $(CONFIGURE_ARGS)
106 rm -f dist/setup-config
110 $(RM_RF) dist Setup *.o *.hi .setup-config *.buildinfo *.tix .hpc
111 $(FIND) . -name '*~' -exec rm -f {} \;
116 $(SETUP_CMD) haddock $(HADDOCK_OPTS)
119 $(SUDO) $(SETUP_CMD) install
127 if ls *.tix >/dev/null 2>&1; then \
128 $(HPC) sum --output="merged.tix" --union --exclude=Main *.tix; \
129 $(HPC) markup --destdir="dist/hpc" --fun-entry-count "merged.tix"; \
132 # -- Find FIXME Tags ----------------------------------------------------------
133 ifeq ($(shell ls -d .git 2>/dev/null),.git)
136 -depth 1 -not -name '*.mk' \
137 -exec $(GIT) grep -E 'FIXME|THINKME|TODO' {} + \
138 || echo 'No FIXME, THINKME, nor TODO found.'
142 \( -name 'dist' -or -name '.git' -or -name '_darcs' \) -prune \
144 \( -name '*.c' -or -name '*.h' -or \
145 -name '*.hs' -or -name '*.lhs' -or \
146 -name '*.hsc' -or -name '*.cabal' \) \
147 -exec $(GREP) -n -E 'FIXME|THINKME|TODO' {} + \
148 || echo 'No FIXME, THINKME, nor TODO found.'
151 # -- HLint --------------------------------------------------------------------
152 HLINT_TARGETS ?= $$(find -E . -type d -name dist -prune -o -regex '.*\.(hsc?|lhs)' -print)
154 $(HLINT) $(HLINT_TARGETS) $(HLINT_OPTS)
156 # -- Ditz the Distributed Issue Tracker ---------------------------------------
157 ifeq (,$(wildcard .ditz-config))
161 $(DITZ) html dist/ditz
165 $(DITZ) releases | awk '{print $$1}' | sort --reverse | while read i; do \
166 $(DITZ) changelog $$i >> $@; \
171 # -- Pushing to remote hosts --------------------------------------------------
172 push: push-repo push-ditz push-doc
175 if [ -d "_darcs" ]; then \
177 elif [ -d ".git" ]; then \
178 $(GIT) push --all && git push --tags; \
182 if [ -d "dist/ditz" ]; then \
183 $(RSYNC) -av --delete \
185 www@nem.cielonegro.org:static.cielonegro.org/htdocs/ditz/$(PKG_NAME); \
189 if [ -d "dist/doc" ]; then \
190 $(RSYNC) -av --delete \
191 dist/doc/html/$(PKG_NAME)/ \
192 www@nem.cielonegro.org:static.cielonegro.org/htdocs/doc/$(PKG_NAME); \
195 # -- Phony Targets ------------------------------------------------------------
196 .PHONY: build build-hook setup-config setup-config-hook run clean clean-hook \
197 install doc sdist test lint push push-repo push-ditz push-doc \