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 | |
235173ed MW |
35 | OPTS-install += --prefix $(prefix) \ |
36 | $(and $(DESTDIR),--root $(DESTDIR)) | |
1a7628a4 MW |
37 | |
38 | PYTARGETS += check | |
8a060232 MW |
39 | CMD-check ?= test |
40 | $(foreach p,$(PYTHONS),check/$p):: check/%: all/% | |
1a7628a4 MW |
41 | |
42 | ###-------------------------------------------------------------------------- | |
43 | ### Interfacing `setup.py' to make. | |
44 | ||
0ebebfc0 | 45 | pysetup = $(or $2,$(PYTHON)) setup.py \ |
1a7628a4 | 46 | $(if $(filter-out undefined,$(origin CMD-$1)),$(CMD-$1),$1) \ |
0ebebfc0 | 47 | $(OPTS-$1) $(OPTS-$1/$(or $2,$(PYTHON))) |
1a7628a4 | 48 | |
0ebebfc0 MW |
49 | PYTHON_PYTARGETS = $(foreach t, $(PYTARGETS), \ |
50 | $(foreach p, $(PYTHONS), \ | |
51 | $t/$p)) | |
52 | ALL_PYTARGETS = $(PYTARGETS) | |
53 | ALL_PYTARGETS += $(SINGLE_PYTARGETS) $(PYTHON_PYTARGETS) | |
54 | ||
55 | $(foreach t, $(ALL_PYTARGETS), $t-hook):: %: | |
56 | ||
57 | $(SINGLE_PYTARGETS):: %: %-hook setup.py | |
1a7628a4 | 58 | $(call pysetup,$*) |
0ebebfc0 MW |
59 | $(PYTARGETS):: %: %-hook $(foreach p, $(PYTHONS), %/$p) |
60 | $(PYTHON_PYTARGETS):: %: %-hook setup.py | |
61 | $(call pysetup,$(patsubst %/,%,$(dir $*)),$(notdir $*)) | |
1a7628a4 | 62 | |
0ebebfc0 | 63 | .PHONY: $(ALL_PYTARGETS) |
1a7628a4 MW |
64 | |
65 | ###-------------------------------------------------------------------------- | |
66 | ### Release builds. | |
67 | ||
68 | distcheck: | |
69 | rm -rf _distcheck | |
70 | $(PYTHON) setup.py sdist --dist-dir _distcheck | |
71 | cd _distcheck && tar xvfz $(distdir).tar.gz | |
184efd38 | 72 | cd _distcheck/$(distdir) && $(MAKE) check && $(MAKE) dist |
1a7628a4 MW |
73 | cp _distcheck/$(distdir)/$(distdir).tar.gz . |
74 | rm -rf _distcheck | |
75 | ||
76 | ###----- That's all, folks -------------------------------------------------- |