]> gitweb @ CieloNegro.org - Lucu.git/blob - cabal-package.mk
() should be an instance of Dispatchable.
[Lucu.git] / cabal-package.mk
1 # -*- makefile-gmake -*-
2 #
3 # Variables:
4 #
5 #   CONFIGURE_ARGS :: arguments to be passed to ./Setup configure
6 #     default: --disable-optimization
7 #
8 #   RUN_COMMAND :: command to be run for "make run"
9 #
10
11 GHC      ?= ghc
12 FIND     ?= find
13 RM_RF    ?= rm -rf
14 SUDO     ?= sudo
15 AUTOCONF ?= autoconf
16 HLINT    ?= hlint
17 HPC      ?= hpc
18 DITZ     ?= ditz
19
20 CONFIGURE_ARGS ?= --disable-optimization
21 HADDOCK_OPTS   ?= --hyperlink-source
22 HLINT_OPTS     ?= --cross --report=dist/report.html
23
24 SETUP_FILE := $(wildcard Setup.*hs)
25 CABAL_FILE := $(wildcard *.cabal)
26 PKG_NAME   := $(CABAL_FILE:.cabal=)
27
28 ifeq ($(shell ls configure.ac 2>/dev/null),configure.ac)
29   AUTOCONF_AC_FILE := configure.ac
30   AUTOCONF_FILE    := configure
31 else
32   ifeq ($(shell ls configure.in 2>/dev/null),configure.in)
33     AUTOCONF_AC_FILE := configure.in
34     AUTOCONF_FILE    := configure
35   else
36     AUTOCONF_AC_FILE :=
37     AUTOCONF_FILE    :=
38   endif
39 endif
40
41 BUILDINFO_IN_FILE := $(wildcard *.buildinfo.in)
42 BUILDINFO_FILE    := $(BUILDINFO_IN_FILE:.in=)
43
44 all: build
45
46 build: setup-config build-hook
47         ./Setup build
48         $(RM_RF) *.tix
49
50 build-hook:
51
52 ifeq ($(RUN_COMMAND),)
53 run:
54         @echo "cabal-package.mk: No command to run."
55         @echo "cabal-package.mk: If you want to run something, define RUN_COMMAND variable."
56 else
57 run: build
58         @echo ".:.:. Let's go .:.:."
59         $(RUN_COMMAND)
60 endif
61
62 setup-config: dist/setup-config setup-config-hook $(BUILDINFO_FILE)
63
64 setup-config-hook:
65
66 dist/setup-config: $(CABAL_FILE) Setup $(AUTOCONF_FILE)
67         ./Setup configure $(CONFIGURE_ARGS)
68
69 $(AUTOCONF_FILE): $(AUTOCONF_AC_FILE)
70         $(AUTOCONF)
71
72 $(BUILDINFO_FILE): $(BUILDINFO_IN_FILE) configure
73         ./Setup configure $(CONFIGURE_ARGS)
74
75 Setup: $(SETUP_FILE)
76         $(GHC) --make Setup
77
78 clean: clean-hook
79         $(RM_RF) dist Setup *.o *.hi .setup-config *.buildinfo *.tix .hpc
80         $(FIND) . -name '*~' -exec rm -f {} \;
81
82 clean-hook:
83
84 doc: setup-config
85         ./Setup haddock $(HADDOCK_OPTS)
86
87 install: build
88         $(SUDO) ./Setup install
89
90 sdist: setup-config
91         ./Setup sdist
92
93 test: build
94         $(RM_RF) dist/test
95         ./Setup test
96         if ls *.tix >/dev/null 2>&1; then \
97                 $(HPC) sum --output="merged.tix" --union --exclude=Main *.tix; \
98                 $(HPC) markup --destdir="dist/hpc" --fun-entry-count "merged.tix"; \
99         fi
100
101 ditz:
102         $(DITZ) html dist/ditz
103
104 ChangeLog:
105         rm -f $@
106         $(DITZ) releases | awk '{print $$1}' | sort --reverse | while read i; do \
107                 $(DITZ) changelog $$i >> $@; \
108         done
109         head $@
110
111 fixme:
112         @$(FIND) . \
113                 \( -name 'dist' -or -name '.git' -or -name '_darcs' \) -prune \
114                 -or \
115                 \( -name '*.c'   -or -name '*.h'   -or \
116                    -name '*.hs'  -or -name '*.lhs' -or \
117                    -name '*.hsc' -or -name '*.cabal' \) \
118                 -exec egrep 'FIXME|THINKME|TODO' {} \+ \
119                 || echo 'No FIXME or THINKME found.'
120
121 lint:
122         $(HLINT) . $(HLINT_OPTS)
123
124 push: push-repo push-ditz push-doc
125
126 push-repo:
127         if [ -d "_darcs" ]; then \
128                 darcs push; \
129         elif [ -d ".git" ]; then \
130                 git push --all && git push --tags; \
131         fi
132
133 push-ditz: ditz
134         rsync -av --delete \
135                 dist/ditz/ \
136                 www@nem.cielonegro.org:static.cielonegro.org/htdocs/ditz/$(PKG_NAME)
137
138 push-doc: doc
139         if [ -d "dist/doc" ]; then \
140                 rsync -av --delete \
141                         dist/doc/html/$(PKG_NAME)/ \
142                         www@nem.cielonegro.org:static.cielonegro.org/htdocs/doc/$(PKG_NAME); \
143         fi
144
145 .PHONY: build build-hook setup-config setup-config-hook run clean clean-hook \
146                 install doc sdist test lint push push-repo push-ditz push-doc \
147                 ChangeLog