Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

file 167 lines (136 sloc) 4.074 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
# -*- makefile-gmake -*-
#
# Variables:
#
# CONFIGURE_ARGS :: arguments to be passed to ./Setup configure
# default: --disable-optimization
#
# RUN_COMMAND :: command to be run for "make run"
#

GHC ?= ghc
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 \
--ignore="Parse error" \
--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
  AUTOCONF_FILE := configure
else
ifeq ($(shell ls configure.in 2>/dev/null),configure.in)
    AUTOCONF_AC_FILE := configure.in
    AUTOCONF_FILE := configure
else
    AUTOCONF_AC_FILE :=
    AUTOCONF_FILE :=
endif
endif

BUILDINFO_IN_FILE := $(wildcard *.buildinfo.in)
BUILDINFO_FILE := $(BUILDINFO_IN_FILE:.in=)

all: build

build: setup-config build-hook
./Setup build
$(RM_RF) *.tix

build-hook:

ifeq ($(RUN_COMMAND),)
run:
@echo "cabal-package.mk: No command to run."
@echo "cabal-package.mk: If you want to run something, define RUN_COMMAND variable."
else
run: build
@echo ".:.:. Let's go .:.:."
$(RUN_COMMAND)
endif

setup-config: dist/setup-config setup-config-hook $(BUILDINFO_FILE)

setup-config-hook:

dist/setup-config: $(CABAL_FILE) Setup $(AUTOCONF_FILE)
./Setup configure $(CONFIGURE_ARGS)

$(AUTOCONF_FILE): $(AUTOCONF_AC_FILE)
$(AUTOCONF)

$(BUILDINFO_FILE): $(BUILDINFO_IN_FILE) configure
./Setup configure $(CONFIGURE_ARGS)

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 *.tix .hpc
$(FIND) . -name '*~' -exec rm -f {} \;

clean-hook:

doc: setup-config
./Setup haddock $(HADDOCK_OPTS)

install: build
$(SUDO) ./Setup install

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

# -- 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
Something went wrong with that request. Please try again.