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
|
# 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
autoreconf -i -f -I m4
@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
|