mirror of
https://github.com/KevinMidboe/python-gpiozero.git
synced 2025-10-29 09:40:36 +00:00
Add epub output, fix PDF output to include page-numbers in links (for printed output), reduce the (now ridiculous) length of the ToC by dropping it to one level, add numbering to chapters
177 lines
5.9 KiB
Makefile
177 lines
5.9 KiB
Makefile
# vim: set noet sw=4 ts=4 fileencoding=utf-8:
|
|
|
|
# External utilities
|
|
PYTHON=python
|
|
PIP=pip
|
|
PYTEST=py.test
|
|
COVERAGE=coverage
|
|
PYFLAGS=
|
|
DEST_DIR=/
|
|
|
|
# Horrid hack to ensure setuptools is installed in our python environment. This
|
|
# is necessary with Python 3.3's venvs which don't install it by default.
|
|
ifeq ($(shell python -c "import setuptools" 2>&1),)
|
|
SETUPTOOLS:=
|
|
else
|
|
SETUPTOOLS:=$(shell wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | $(PYTHON))
|
|
endif
|
|
|
|
# Calculate the base names of the distribution, the location of all source,
|
|
# documentation, packaging, icon, and executable script files
|
|
NAME:=$(shell $(PYTHON) $(PYFLAGS) setup.py --name)
|
|
VER:=$(shell $(PYTHON) $(PYFLAGS) setup.py --version)
|
|
ifeq ($(shell lsb_release -si),Ubuntu)
|
|
DEB_SUFFIX:=ubuntu1
|
|
else
|
|
DEB_SUFFIX:=
|
|
endif
|
|
DEB_ARCH:=$(shell dpkg --print-architecture)
|
|
PYVER:=$(shell $(PYTHON) $(PYFLAGS) -c "import sys; print('py%d.%d' % sys.version_info[:2])")
|
|
PY_SOURCES:=$(shell \
|
|
$(PYTHON) $(PYFLAGS) setup.py egg_info >/dev/null 2>&1 && \
|
|
grep -v "\.egg-info" $(NAME).egg-info/SOURCES.txt)
|
|
DEB_SOURCES:=debian/changelog \
|
|
debian/control \
|
|
debian/copyright \
|
|
debian/rules \
|
|
debian/docs \
|
|
$(wildcard debian/*.init) \
|
|
$(wildcard debian/*.default) \
|
|
$(wildcard debian/*.manpages) \
|
|
$(wildcard debian/*.docs) \
|
|
$(wildcard debian/*.doc-base) \
|
|
$(wildcard debian/*.desktop)
|
|
DOC_SOURCES:=
|
|
SUBDIRS:=
|
|
|
|
# Calculate the name of all outputs
|
|
DIST_EGG=dist/$(NAME)-$(VER)-$(PYVER).egg
|
|
DIST_TAR=dist/$(NAME)-$(VER).tar.gz
|
|
DIST_ZIP=dist/$(NAME)-$(VER).zip
|
|
DIST_DEB=dist/python-$(NAME)_$(VER)$(DEB_SUFFIX)_all.deb \
|
|
dist/python3-$(NAME)_$(VER)$(DEB_SUFFIX)_all.deb \
|
|
dist/python-$(NAME)-doc_$(VER)$(DEB_SUFFIX)_all.deb \
|
|
dist/$(NAME)_$(VER)$(DEB_SUFFIX)_$(DEB_ARCH).changes
|
|
DIST_DSC=dist/$(NAME)_$(VER)$(DEB_SUFFIX).tar.gz \
|
|
dist/$(NAME)_$(VER)$(DEB_SUFFIX).dsc \
|
|
dist/$(NAME)_$(VER)$(DEB_SUFFIX)_source.changes
|
|
MAN_PAGES=
|
|
|
|
|
|
# Default target
|
|
all:
|
|
@echo "make install - Install on local system"
|
|
@echo "make develop - Install symlinks for development"
|
|
@echo "make test - Run tests"
|
|
@echo "make doc - Generate HTML and PDF documentation"
|
|
@echo "make source - Create source package"
|
|
@echo "make egg - Generate a PyPI egg package"
|
|
@echo "make zip - Generate a source zip package"
|
|
@echo "make tar - Generate a source tar package"
|
|
@echo "make deb - Generate Debian packages"
|
|
@echo "make dist - Generate all packages"
|
|
@echo "make clean - Get rid of all generated files"
|
|
@echo "make release - Create and tag a new release"
|
|
@echo "make upload - Upload the new release to repositories"
|
|
|
|
install: $(SUBDIRS)
|
|
$(PYTHON) $(PYFLAGS) setup.py install --root $(DEST_DIR)
|
|
|
|
doc: $(DOC_SOURCES)
|
|
$(MAKE) -C docs clean
|
|
$(MAKE) -C docs html
|
|
$(MAKE) -C docs epub
|
|
$(MAKE) -C docs latexpdf
|
|
|
|
source: $(DIST_TAR) $(DIST_ZIP)
|
|
|
|
egg: $(DIST_EGG)
|
|
|
|
zip: $(DIST_ZIP)
|
|
|
|
tar: $(DIST_TAR)
|
|
|
|
deb: $(DIST_DEB) $(DIST_DSC)
|
|
|
|
dist: $(DIST_EGG) $(DIST_DEB) $(DIST_DSC) $(DIST_TAR) $(DIST_ZIP)
|
|
|
|
develop: tags
|
|
@# These have to be done separately to avoid a cockup...
|
|
$(PIP) install -U setuptools
|
|
$(PIP) install -U pip
|
|
$(PIP) install -e .[doc,test]
|
|
|
|
test:
|
|
$(COVERAGE) run -m $(PYTEST) tests -v -r sx
|
|
$(COVERAGE) report --rcfile coverage.cfg
|
|
|
|
clean:
|
|
$(PYTHON) $(PYFLAGS) setup.py clean
|
|
$(MAKE) -f $(CURDIR)/debian/rules clean
|
|
rm -fr build/ dist/ $(NAME).egg-info/ tags
|
|
for dir in $(SUBDIRS); do \
|
|
$(MAKE) -C $$dir clean; \
|
|
done
|
|
find $(CURDIR) -name "*.pyc" -delete
|
|
|
|
tags: $(PY_SOURCES)
|
|
ctags -R --exclude="build/*" --exclude="debian/*" --exclude="docs/*" --languages="Python"
|
|
|
|
$(SUBDIRS):
|
|
$(MAKE) -C $@
|
|
|
|
$(MAN_PAGES): $(DOC_SOURCES)
|
|
$(PYTHON) $(PYFLAGS) setup.py build_sphinx -b man
|
|
mkdir -p man/
|
|
cp build/sphinx/man/*.[0-9] man/
|
|
|
|
$(DIST_TAR): $(PY_SOURCES) $(SUBDIRS)
|
|
$(PYTHON) $(PYFLAGS) setup.py sdist --formats gztar
|
|
|
|
$(DIST_ZIP): $(PY_SOURCES) $(SUBDIRS)
|
|
$(PYTHON) $(PYFLAGS) setup.py sdist --formats zip
|
|
|
|
$(DIST_EGG): $(PY_SOURCES) $(SUBDIRS)
|
|
$(PYTHON) $(PYFLAGS) setup.py bdist_egg
|
|
|
|
$(DIST_DEB): $(PY_SOURCES) $(SUBDIRS) $(DEB_SOURCES) $(MAN_PAGES)
|
|
# build the binary package in the parent directory then rename it to
|
|
# project_version.orig.tar.gz
|
|
$(PYTHON) $(PYFLAGS) setup.py sdist --dist-dir=../
|
|
rename -f 's/$(NAME)-(.*)\.tar\.gz/$(NAME)_$$1\.orig\.tar\.gz/' ../*
|
|
debuild -b -i -I -Idist -Ibuild -Idocs/_build -Icoverage -I__pycache__ -I.coverage -Itags -I*.pyc -I*.vim -I*.xcf -rfakeroot
|
|
mkdir -p dist/
|
|
for f in $(DIST_DEB); do cp ../$${f##*/} dist/; done
|
|
|
|
$(DIST_DSC): $(PY_SOURCES) $(SUBDIRS) $(DEB_SOURCES) $(MAN_PAGES)
|
|
# build the source package in the parent directory then rename it to
|
|
# project_version.orig.tar.gz
|
|
$(PYTHON) $(PYFLAGS) setup.py sdist --dist-dir=../
|
|
rename -f 's/$(NAME)-(.*)\.tar\.gz/$(NAME)_$$1\.orig\.tar\.gz/' ../*
|
|
debuild -S -i -I -Idist -Ibuild -Idocs/_build -Icoverage -I__pycache__ -I.coverage -Itags -I*.pyc -I*.vim -I*.xcf -rfakeroot
|
|
mkdir -p dist/
|
|
for f in $(DIST_DSC); do cp ../$${f##*/} dist/; done
|
|
|
|
release: $(PY_SOURCES) $(DOC_SOURCES) $(DEB_SOURCES)
|
|
$(MAKE) clean
|
|
# ensure there are no current uncommitted changes
|
|
test -z "$(shell git status --porcelain)"
|
|
# update the debian changelog with new release information
|
|
dch --newversion $(VER)$(DEB_SUFFIX) --controlmaint
|
|
# commit the changes and add a new tag
|
|
git commit debian/changelog -m "Updated changelog for release $(VER)"
|
|
git tag -s v$(VER) -m "Release v$(VER)"
|
|
# update the package's registration on PyPI (in case any metadata's changed)
|
|
$(PYTHON) $(PYFLAGS) setup.py register -r https://pypi.python.org/pypi
|
|
|
|
upload: $(PY_SOURCES) $(DOC_SOURCES) $(DIST_DEB) $(DIST_DSC)
|
|
# build a source archive and upload to PyPI
|
|
$(PYTHON) $(PYFLAGS) setup.py sdist upload -r https://pypi.python.org/pypi
|
|
# build the deb source archive and upload to Raspbian
|
|
dput raspberrypi dist/$(NAME)_$(VER)$(DEB_SUFFIX)_source.changes
|
|
dput raspberrypi dist/$(NAME)_$(VER)$(DEB_SUFFIX)_$(DEB_ARCH).changes
|
|
git push --tags
|
|
|
|
.PHONY: all install develop test doc source egg zip tar deb dist clean tags release upload $(SUBDIRS)
|
|
|