forked from sagemath/cysignals
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
150 lines (109 loc) · 3.99 KB
/
Makefile
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
# Optional Makefile for easier development
VERSION = $(shell cat VERSION)
PYTHON = python3
PIP = $(PYTHON) -m pip -v
LS_R = ls -Ra1
DOCTEST = $(PYTHON) -B rundoctests.py
#####################
# Build
#####################
all: build doc
build: configure
$(PYTHON) setup.py build
install: configure
$(PIP) install --no-index --ignore-installed --no-deps .
dist: configure
chmod -R go+rX-w .
umask 0022 && $(PYTHON) setup.py sdist --formats=gztar
doc:
cd docs && $(MAKE) html
#####################
# Clean
#####################
clean: clean-doc clean-build
rm -rf tmp
clean-build:
rm -rf build example/build example/*.cpp
clean-doc:
rm -rf docs/build
distclean: clean
rm -rf .eggs example/.eggs
rm -rf autom4te.cache
rm -f config.log config.status
rm -f src/config.h src/cysignals/signals.pxd src/cysignals/cysignals_config.h
#####################
# Check
#####################
test: check
check: check-tmp
check-all: check-tmp
$(MAKE) check-install
# Install and check
check-install: check-doctest check-example
check-doctest: install
$(DOCTEST) src/cysignals/*.pyx
check-example: install
cd example && $(PYTHON) setup.py clean build
check-gdb: install
$(PYTHON) testgdb.py
#####################
# Check installation
#####################
#
# Test 2 installation scenarios without a real installation
# - prefix (with --prefix and --root)
# - user (with --user)
check-tmp:
$(MAKE) check-prefix
$(MAKE) check-user
prefix-install: configure
rm -rf tmp/local tmp/build tmp/site-packages
$(PYTHON) setup.py install --prefix="`pwd`/tmp/local" --root=tmp/build
cd tmp && mv "build/`pwd`/local" local
cd tmp && cp -R local/lib*/python*/site-packages site-packages
check-prefix: check-prefix-doctest check-prefix-example
check-prefix-doctest: prefix-install
export PYTHONPATH="`pwd`/tmp/site-packages" && $(DOCTEST) src/cysignals/*.pyx
check-prefix-example: prefix-install
rm -rf example/build
export PYTHONPATH="`pwd`/tmp/site-packages" && cd example && $(PYTHON) setup.py clean build
check-user: check-user-doctest check-user-example
user-install: configure
rm -rf tmp/user
export PYTHONUSERBASE="`pwd`/tmp/user" && $(PYTHON) setup.py install --user --old-and-unmanageable
check-user-doctest: user-install
export PYTHONUSERBASE="`pwd`/tmp/user" && $(DOCTEST) src/cysignals/*.pyx
check-user-example: user-install
export PYTHONUSERBASE="`pwd`/tmp/user" && cd example && $(PYTHON) setup.py clean build
distcheck: dist
rm -rf dist/check
mkdir -p dist/check
cd dist/check && tar xzf ../cysignals-$(VERSION).tar.gz
cd dist/check/cysignals-$(VERSION) && $(LS_R) >../dist0.ls
cd dist/check/cysignals-$(VERSION) && $(MAKE) all
cd dist/check/cysignals-$(VERSION) && $(MAKE) distclean
cd dist/check/cysignals-$(VERSION) && $(LS_R) >../dist1.ls
cd dist/check; diff -u dist0.ls dist1.ls || { echo >&2 "Error: distclean after all leaves garbage"; exit 1; }
cd dist/check/cysignals-$(VERSION) && $(MAKE) check-user
cd dist/check/cysignals-$(VERSION) && ./configure --enable-debug
cd dist/check/cysignals-$(VERSION) && $(MAKE) check-prefix
cd dist/check/cysignals-$(VERSION) && $(MAKE) distclean
cd dist/check/cysignals-$(VERSION) && $(LS_R) >../dist2.ls
cd dist/check; diff -u dist0.ls dist2.ls || { echo >&2 "Error: distclean after check-tmp leaves garbage"; exit 1; }
cd dist/check/cysignals-$(VERSION) && $(MAKE) dist
cd dist/check/cysignals-$(VERSION) && tar xzf dist/cysignals-$(VERSION).tar.gz
cd dist/check/cysignals-$(VERSION)/cysignals-$(VERSION) && $(LS_R) >../../dist3.ls
cd dist/check; diff -u dist0.ls dist3.ls || { echo >&2 "Error: sdist is not reproducible"; exit 1; }
rm -rf dist/check
#####################
# Maintain
#####################
configure: configure.ac
autoconf
autoheader
@rm -f src/config.h.in~
.PHONY: all build doc install dist doc clean clean-build clean-doc \
distclean test check check-all check-tmp check-install \
check-doctest check-example \
check-prefix prefix-install check-prefix-doctest check-prefix-example \
check-user user-install check-user-doctest check-user-example