-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
156 lines (128 loc) · 4.13 KB
/
Copy pathMakefile
File metadata and controls
156 lines (128 loc) · 4.13 KB
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
151
152
153
154
155
156
# vim: set noet sw=4 ts=4 fileencoding=utf-8:
# External utilities
PYTHON=python3
PIP=pip3
PYTEST=pytest
TWINE=twine
PYFLAGS=
MSGINIT=msginit
MSGMERGE=msgmerge
MSGFMT=msgfmt
XGETTEXT=xgettext
DESTDIR=/
BUILDDIR=build
# Find the location of the GObject introspection libs and cairo (required for
# the develop target)
GI:=$(wildcard /usr/lib/python3/dist-packages/gi)
GOBJECT:=
GLIB:=
# Calculate the base names of the distribution, the location of all source,
# documentation, packaging, icon, and executable script files
NAME:=$(shell $(PYTHON) $(PYFLAGS) -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['name'])")
WHEEL_NAME:=$(subst -,_,$(NAME))
VER:=$(shell $(PYTHON) $(PYFLAGS) -c "import tomllib; print(tomllib.load(open('pyproject.toml', 'rb'))['project']['version'])")
PY_SOURCES:=$(wildcard pemmican/*.py)
DOC_SOURCES:=docs/conf.py \
$(wildcard docs/*.png) \
$(wildcard docs/*.svg) \
$(wildcard docs/*.dot) \
$(wildcard docs/*.mscgen) \
$(wildcard docs/*.gpi) \
$(wildcard docs/*.rst) \
$(wildcard docs/*.pdf)
# Calculate the name of all outputs
DIST_WHEEL=dist/$(WHEEL_NAME)-$(VER)-py3-none-any.whl
DIST_TAR=dist/$(NAME)-$(VER).tar.gz
POT_FILE=po/$(NAME).pot
PO_FILES:=$(wildcard po/*.po)
MO_FILES:=$(patsubst po/%.po,po/mo/%/LC_MESSAGES/$(NAME).mo,$(PO_FILES))
MAN_PAGES=\
man/pemmican-cli.1 \
man/pemmican-mon.1 \
man/pemmican-reset.1
# Default target
all:
@echo "make install - Install on local system"
@echo "make develop - Install symlinks for development"
@echo "make pot - Update translation template and sources"
@echo "make mo - Generate translation files"
@echo "make test - Run tests"
@echo "make doc - Generate HTML and PDF documentation"
@echo "make source - Create source package"
@echo "make wheel - Generate a PyPI wheel package"
@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:
$(PIP) install . --root $(DESTDIR)
doc: $(DOC_SOURCES)
$(MAKE) -C docs clean
$(MAKE) -C docs html
$(MAKE) -C docs epub
$(MAKE) -C docs latexpdf
$(MAKE) $(MAN_PAGES)
preview:
$(MAKE) -C docs preview
source: $(DIST_TAR)
wheel: $(DIST_WHEEL)
dist: $(DIST_WHEEL) $(DIST_TAR) $(DIST_ZIP)
pot: $(POT_FILE) $(PO_FILES)
mo: $(MO_FILES)
develop:
@# These have to be done separately to avoid a cockup...
$(PIP) install -U setuptools
$(PIP) install -U pip
$(PIP) install -U twine
$(PIP) install -U tox
$(PIP) install -e .[gui,doc,test]
@# If we're in a venv, link the system's GObject Introspection (gi) into it
ifeq ($(VIRTUAL_ENV),)
@echo "Virtualenv not detected! You may need to link gi manually"
else
ifeq ($(GI),)
@echo "ERROR: gi not found. Install the python{,3}-gi packages"
else
ln -sf $(GI) $(VIRTUAL_ENV)/lib/python*/site-packages/
endif
ifneq ($(GLIB),)
ln -sf $(GLIB) $(VIRTUAL_ENV)/lib/python*/site-packages/
endif
ifneq ($(GOBJECT),)
ln -sf $(GOBJECT) $(VIRTUAL_ENV)/lib/python*/site-packages/
endif
endif
test:
$(PYTEST)
clean:
rm -rf $(BUILDDIR) .pytest_cache/ .mypy_cache/ $(WHEEL_NAME).egg-info/ tags .coverage
find $(CURDIR) -name "*.pyc" -delete
find $(CURDIR) -name "__pycache__" -delete
tags: $(PY_SOURCES)
ctags -R --exclude="build/*" --exclude="docs/*" --languages="Python"
lint: $(PY_SOURCES)
pylint $(WHEEL_NAME)
$(MAN_PAGES): $(DOC_SOURCES)
$(MAKE) -C docs man
mkdir -p man/
cp build/man/*.[0-9] man/
$(POT_FILE): $(PY_SOURCES)
$(XGETTEXT) -o $@ $(filter %.py,$^) $(filter %.ui,$^)
po/%.po: $(POT_FILE)
$(MSGMERGE) -U $@ $<
po/mo/%/LC_MESSAGES/$(NAME).mo: po/%.po
mkdir -p $(dir $@)
$(MSGFMT) $< -o $@
$(DIST_TAR): $(PY_SOURCES)
$(PYTHON) $(PYFLAGS) -m build --sdist -o $(BUILDDIR)/dist .
$(DIST_WHEEL): $(PY_SOURCES)
$(PYTHON) $(PYFLAGS) -m build --wheel -o $(BUILDDIR)/dist .
release:
$(MAKE) clean
test -z "$(shell git status --porcelain)"
git tag -s v$(VER) -m "Release $(VER)"
git push origin v$(VER)
upload: $(DIST_TAR) $(DIST_WHEEL)
$(TWINE) check $(DIST_TAR) $(DIST_WHEEL)
$(TWINE) upload $(DIST_TAR) $(DIST_WHEEL)
.PHONY: all install develop test doc source wheel zip tar dist clean tags release upload