Commit | Line | Data |
---|---|---|
1a7628a4 MW |
1 | ### -*-makefile-*- |
2 | ### | |
3 | ### Standard Makefile for Python packages. | |
4 | ||
5 | default: all | |
6 | ||
7 | PYTHON ?= python | |
0ebebfc0 | 8 | PYTHONS ?= $(PYTHON) |
1a7628a4 MW |
9 | prefix ?= /usr/local |
10 | ||
11 | ###-------------------------------------------------------------------------- | |
12 | ### Version information. | |
13 | ||
14 | distdir := $(shell $(PYTHON) setup.py -q distdir) | |
15 | ||
16 | ###-------------------------------------------------------------------------- | |
17 | ### Useful targets implemented by the `setup.py' program. | |
18 | ||
0ebebfc0 | 19 | SINGLE_PYTARGETS += gen |
36bcba75 MW |
20 | CMD-gen ?= build_gen |
21 | ||
1a7628a4 MW |
22 | PYTARGETS += all |
23 | CMD-all ?= build | |
0ebebfc0 | 24 | $(foreach p,$(PYTHONS),all/$p):: all/%: gen |
1a7628a4 MW |
25 | |
26 | PYTARGETS += clean | |
27 | OPTS-clean ?= --all | |
28 | clean-hook::; rm -f MANIFEST RELEASE | |
29 | ||
0ebebfc0 | 30 | SINGLE_PYTARGETS += dist |
1a7628a4 MW |
31 | CMD-dist ?= sdist |
32 | OPTS-dist += --dist-dir . | |
33 | ||
34 | PYTARGETS += install | |
35 | OPTS-install += --prefix $(prefix) | |
36 | ||
37 | PYTARGETS += check | |
8a060232 MW |
38 | CMD-check ?= test |
39 | $(foreach p,$(PYTHONS),check/$p):: check/%: all/% | |
1a7628a4 MW |
40 | |
41 | ###-------------------------------------------------------------------------- | |
42 | ### Interfacing `setup.py' to make. | |
43 | ||
0ebebfc0 | 44 | pysetup = $(or $2,$(PYTHON)) setup.py \ |
1a7628a4 | 45 | $(if $(filter-out undefined,$(origin CMD-$1)),$(CMD-$1),$1) \ |
0ebebfc0 | 46 | $(OPTS-$1) $(OPTS-$1/$(or $2,$(PYTHON))) |
1a7628a4 | 47 | |
0ebebfc0 MW |
48 | PYTHON_PYTARGETS = $(foreach t, $(PYTARGETS), \ |
49 | $(foreach p, $(PYTHONS), \ | |
50 | $t/$p)) | |
51 | ALL_PYTARGETS = $(PYTARGETS) | |
52 | ALL_PYTARGETS += $(SINGLE_PYTARGETS) $(PYTHON_PYTARGETS) | |
53 | ||
54 | $(foreach t, $(ALL_PYTARGETS), $t-hook):: %: | |
55 | ||
56 | $(SINGLE_PYTARGETS):: %: %-hook setup.py | |
1a7628a4 | 57 | $(call pysetup,$*) |
0ebebfc0 MW |
58 | $(PYTARGETS):: %: %-hook $(foreach p, $(PYTHONS), %/$p) |
59 | $(PYTHON_PYTARGETS):: %: %-hook setup.py | |
60 | $(call pysetup,$(patsubst %/,%,$(dir $*)),$(notdir $*)) | |
1a7628a4 | 61 | |
0ebebfc0 | 62 | .PHONY: $(ALL_PYTARGETS) |
1a7628a4 MW |
63 | |
64 | ###-------------------------------------------------------------------------- | |
65 | ### Release builds. | |
66 | ||
67 | distcheck: | |
68 | rm -rf _distcheck | |
69 | $(PYTHON) setup.py sdist --dist-dir _distcheck | |
70 | cd _distcheck && tar xvfz $(distdir).tar.gz | |
184efd38 | 71 | cd _distcheck/$(distdir) && $(MAKE) check && $(MAKE) dist |
1a7628a4 MW |
72 | cp _distcheck/$(distdir)/$(distdir).tar.gz . |
73 | rm -rf _distcheck | |
74 | ||
75 | ###----- That's all, folks -------------------------------------------------- |