SHELL=bash CFLAGS=-std=gnu99 -static -s -Wall -Werror -O3 TEST_PACKAGE_DEPS := build-essential python python-pip procps python-dev python-setuptools DOCKER_RUN_TEST := docker run -v $(PWD):/mnt:ro # test installation using Debian packages DOCKER_DEB_TEST := sh -euxc ' \ apt-get update \ && apt-get install -y --no-install-recommends $(TEST_PACKAGE_DEPS) \ && dpkg -i /mnt/dist/*.deb \ && tmp=$$(mktemp -d) \ && cp -r /mnt/* "$$tmp" \ && cd "$$tmp" \ && pip install --upgrade pip \ && hash -r \ && pip --version \ && pip install --upgrade setuptools distribute \ && pip install -r requirements-dev.txt \ && py.test tests/ \ && exec dumb-init /mnt/tests/test-zombies \ ' # test installation using `pip install` DOCKER_PYTHON_TEST := sh -uexc ' \ apt-get update \ && apt-get install -y --no-install-recommends $(TEST_PACKAGE_DEPS) \ && tmp=$$(mktemp -d) \ && cp -r /mnt/* "$$tmp" \ && cd "$$tmp" \ && python setup.py clean \ && python setup.py sdist \ && pip install --upgrade pip \ && hash -r \ && pip install --upgrade setuptools distribute \ && pip install -vv dist/*.tar.gz \ && pip install -r requirements-dev.txt \ && py.test tests/ \ && exec dumb-init /mnt/tests/test-zombies \ ' # test several Python versions using tox DOCKER_TOX_TEST := sh -uexc ' \ apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0x5BB92C09DB82666C \ && echo "deb http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu xenial main" >> /etc/apt/sources.list \ && apt-get update \ && apt-get install -y --no-install-recommends python2.6-dev python2.7-dev python3.4-dev python3.5-dev git $(TEST_PACKAGE_DEPS) \ && echo "We cannot use the Ubuntu versions of tox or virtualenv:" \ && echo "https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=754248" \ && pip install tox virtualenv \ && hash -r \ && tmp=$$(mktemp -du) \ && cp -r /mnt "$$tmp" \ && cd "$$tmp" \ && tox \ ' .PHONY: build build: VERSION.h $(CC) $(CFLAGS) -o dumb-init dumb-init.c VERSION.h: VERSION echo '// THIS FILE IS AUTOMATICALLY GENERATED' > VERSION.h echo '// Run `make VERSION.h` to update it after modifying VERSION.' >> VERSION.h xxd -i VERSION >> VERSION.h .PHONY: clean clean: clean-tox rm -rf dumb-init dist/ *.deb .PHONY: clean-tox clean-tox: rm -rf .tox .PHONY: release release: builddeb-docker sdist $(eval VERSION := $(shell cat VERSION)) # extract the built binary from the Debian package dpkg-deb --fsys-tarfile dist/dumb-init_$(VERSION)_amd64.deb | \ tar -C dist --strip=3 -xvf - ./usr/bin/dumb-init mv dist/dumb-init dist/dumb-init_$(VERSION)_amd64 cd dist && \ sha256sum --binary dumb-init_$(VERSION)_amd64.deb dumb-init_$(VERSION)_amd64 \ > sha256sums .PHONY: sdist sdist: VERSION.h python setup.py sdist .PHONY: builddeb builddeb: debuild --set-envvar=CC=musl-gcc -us -uc -b mkdir -p dist mv ../dumb-init_*.deb dist/ .PHONY: builddeb-docker builddeb-docker: docker-image mkdir -p dist docker run -v $(PWD):/mnt dumb-init-build .PHONY: docker-image docker-image: docker build -t dumb-init-build . .PHONY: test test: tox .PHONY: install-hooks install-hooks: tox -e pre-commit -- install -f --install-hooks ITEST_TARGETS = itest_lucid itest_precise itest_trusty itest_xenial itest_wheezy itest_jessie itest_stretch .PHONY: itest $(ITEST_TARGETS) itest: $(ITEST_TARGETS) itest_lucid: _itest-ubuntu-lucid itest_precise: _itest-ubuntu-precise itest_trusty: _itest-ubuntu-trusty itest_xenial: _itest-ubuntu-xenial itest_wheezy: _itest-debian-wheezy itest_jessie: _itest-debian-jessie itest_stretch: _itest-debian-stretch itest_tox: $(DOCKER_RUN_TEST) ubuntu:xenial $(DOCKER_TOX_TEST) _itest-%: _itest_deb-% _itest_python-% @true _itest_python-%: $(DOCKER_RUN_TEST) $(shell sed 's/-/:/' <<< "$*") $(DOCKER_PYTHON_TEST) _itest_deb-%: builddeb-docker $(DOCKER_RUN_TEST) $(shell sed 's/-/:/' <<< "$*") $(DOCKER_DEB_TEST)