]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - cabal-package.mk
Unfoldable Dispatcher
[Lucu.git] / cabal-package.mk
index ca291ff93111587ba2f4d30245a97c94713e84a3..bec1d1419da2a391f41db8acf50c6422ae8ed693 100644 (file)
@@ -13,11 +13,20 @@ FIND     ?= find
 RM_RF    ?= rm -rf
 SUDO     ?= sudo
 AUTOCONF ?= autoconf
+HLINT    ?= hlint
+HPC      ?= hpc
+DITZ     ?= ditz
 
 CONFIGURE_ARGS ?= --disable-optimization
+HADDOCK_OPTS   ?= --hyperlink-source
+HLINT_OPTS     ?= \
+       --hint=Default --hint=Dollar --hint=Generalise \
+       --cross \
+       --report=dist/report.html
 
 SETUP_FILE := $(wildcard Setup.*hs)
 CABAL_FILE := $(wildcard *.cabal)
+PKG_NAME   := $(CABAL_FILE:.cabal=)
 
 ifeq ($(shell ls configure.ac 2>/dev/null),configure.ac)
   AUTOCONF_AC_FILE := configure.ac
@@ -39,6 +48,7 @@ all: build
 
 build: setup-config build-hook
        ./Setup build
+       $(RM_RF) *.tix
 
 build-hook:
 
@@ -68,14 +78,18 @@ $(BUILDINFO_FILE): $(BUILDINFO_IN_FILE) configure
 Setup: $(SETUP_FILE)
        $(GHC) --make Setup
 
+reconfigure:
+       rm -f dist/setup-config
+       $(MAKE) setup-config
+
 clean: clean-hook
-       $(RM_RF) dist Setup *.o *.hi .setup-config *.buildinfo
+       $(RM_RF) dist Setup *.o *.hi .setup-config *.buildinfo *.tix .hpc
        $(FIND) . -name '*~' -exec rm -f {} \;
 
 clean-hook:
 
 doc: setup-config
-       ./Setup haddock
+       ./Setup haddock $(HADDOCK_OPTS)
 
 install: build
        $(SUDO) ./Setup install
@@ -84,6 +98,69 @@ sdist: setup-config
        ./Setup sdist
 
 test: build
+       $(RM_RF) dist/test
        ./Setup test
+       if ls *.tix >/dev/null 2>&1; then \
+               $(HPC) sum --output="merged.tix" --union --exclude=Main *.tix; \
+               $(HPC) markup --destdir="dist/hpc" --fun-entry-count "merged.tix"; \
+       fi
+
+# -- Find FIXME Tags ----------------------------------------------------------
+fixme:
+       @$(FIND) . \
+               \( -name 'dist' -or -name '.git' -or -name '_darcs' \) -prune \
+               -or \
+               \( -name '*.c'   -or -name '*.h'   -or \
+                  -name '*.hs'  -or -name '*.lhs' -or \
+                  -name '*.hsc' -or -name '*.cabal' \) \
+               -exec egrep 'FIXME|THINKME|TODO' {} \+ \
+               || echo 'No FIXME, THINKME, nor TODO found.'
+
+# -- HLint --------------------------------------------------------------------
+HLINT_TARGETS ?= $$(find -E . -type d -name dist -prune -o -regex '.*\.(hsc?|lhs)' -print)
+lint:
+       $(HLINT) $(HLINT_TARGETS) $(HLINT_OPTS)
+
+# -- Ditz the Distributed Issue Tracker ---------------------------------------
+ifeq (,$(wildcard .ditz-config))
+ditz:
+else
+ditz:
+       $(DITZ) html dist/ditz
+
+ChangeLog:
+       rm -f $@
+       $(DITZ) releases | awk '{print $$1}' | sort --reverse | while read i; do \
+               $(DITZ) changelog $$i >> $@; \
+       done
+       head $@
+endif
 
-.PHONY: build build-hook setup-config setup-config-hook run clean clean-hook install doc sdist test
+# -- Pushing to remote hosts --------------------------------------------------
+push: push-repo push-ditz push-doc
+
+push-repo:
+       if [ -d "_darcs" ]; then \
+               darcs push; \
+       elif [ -d ".git" ]; then \
+               git push --all && git push --tags; \
+       fi
+
+push-ditz: ditz
+       if [ -d "dist/ditz" ]; then \
+               rsync -av --delete \
+                       dist/ditz/ \
+                       www@nem.cielonegro.org:static.cielonegro.org/htdocs/ditz/$(PKG_NAME); \
+       fi
+
+push-doc: doc
+       if [ -d "dist/doc" ]; then \
+               rsync -av --delete \
+                       dist/doc/html/$(PKG_NAME)/ \
+                       www@nem.cielonegro.org:static.cielonegro.org/htdocs/doc/$(PKG_NAME); \
+       fi
+
+# -- Phony Targets ------------------------------------------------------------
+.PHONY: build build-hook setup-config setup-config-hook run clean clean-hook \
+               install doc sdist test lint push push-repo push-ditz push-doc \
+               ChangeLog