-
Notifications
You must be signed in to change notification settings - Fork 152
/
Makefile
176 lines (156 loc) · 5.98 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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
buildroot = /
docdir = /usr/share/doc/packages
python_version = 3
python_lookup_name = python$(python_version)
python = $(shell which $(python_lookup_name))
sc_disable = SC1091,SC1090,SC2001,SC2174,SC1117,SC2048,SC2004
LC = LC_MESSAGES
version := $(shell \
$(python) -c \
'from kiwi.version import __version__; print(__version__)'\
)
install_dracut:
for dracut in dracut/modules.d/*; do \
${MAKE} -C $$dracut install ;\
done
install_package_docs:
install -d -m 755 ${buildroot}${docdir}/python-kiwi
install -m 644 LICENSE \
${buildroot}${docdir}/python-kiwi/LICENSE
install -m 644 README.rst \
${buildroot}${docdir}/python-kiwi/README
install:
# apart from python sources there are also
# the manual pages and the completion
# Note: These information will be missing when installed from pip
# manual pages
install -d -m 755 ${buildroot}usr/share/man/man8
for man in doc/build/man/*.8; do \
install -m 644 $$man ${buildroot}usr/share/man/man8 ;\
done
# completion
install -d -m 755 ${buildroot}usr/share/bash-completion/completions
$(python) helper/completion_generator.py \
> ${buildroot}usr/share/bash-completion/completions/kiwi-ng
# kiwi default configuration
install -d -m 755 ${buildroot}etc
install -m 644 kiwi.yml ${buildroot}etc/kiwi.yml
# kiwi old XSL stylesheets for upgrade
install -d -m 755 ${buildroot}usr/share/kiwi
cp -a helper/xsl_to_v74 ${buildroot}usr/share/kiwi/
kiwi/schema/kiwi.rng: kiwi/schema/kiwi.rnc
# whenever the schema is changed this target will convert
# the short form of the RelaxNG schema to the format used
# in code and auto generates the python data structures
@type -p trang &>/dev/null || \
(echo "ERROR: trang not found in path: $(PATH)"; exit 1)
trang -I rnc -O rng kiwi/schema/kiwi.rnc kiwi/schema/kiwi.rng
# XML parser code is auto generated from schema using generateDS
# http://pythonhosted.org/generateDS
# ---
# a) modify arch-name xsd:token pattern to be generic because
# generateDS translates the regular expression into another
# expression which is different and wrong compared to the
# expression in the schema
cat kiwi/schema/kiwi.rnc | sed -e \
s'@arch-name = xsd:token.*@arch-name = xsd:token {pattern = ".*"}@' >\
kiwi/schema/kiwi_modified_for_generateDS.rnc
# convert schema rnc format into xsd format and call generateDS
trang -I rnc -O xsd kiwi/schema/kiwi_modified_for_generateDS.rnc \
kiwi/schema/kiwi_for_generateDS.xsd
generateDS.py -f --external-encoding='utf-8' --no-dates --no-warnings \
-o kiwi/xml_parse.py kiwi/schema/kiwi_for_generateDS.xsd
rm kiwi/schema/kiwi_for_generateDS.xsd
rm kiwi/schema/kiwi_modified_for_generateDS.rnc
obs_test_status:
./.obs_test_status
valid:
for i in `find build-tests test kiwi -name *.xml -o -name *.kiwi`; do \
if [ ! -L $$i ];then \
xsltproc -o $$i.converted kiwi/xsl/master.xsl $$i && \
mv $$i.converted $$i ;\
fi \
done
git_attributes:
# the following is required to update the $Format:%H$ git attribute
# for details on when this target is called see setup.py
git archive HEAD kiwi/version.py | tar -x
clean_git_attributes:
# cleanup version.py to origin state
# for details on when this target is called see setup.py
git checkout kiwi/version.py
setup:
poetry install --all-extras
docs: setup
poetry run make -C doc man html
docs_suse: setup
poetry run make -C doc xml
rm -rf doc/build/restxml
mv doc/build/xml doc/build/restxml
poetry run pip install \
git+https://github.com/openSUSE/rstxml2docbook.git@feature/kiwi
poetry run bash -c 'pushd doc && rstxml2docbook \
-v --no-split -o build/xml/book.xml build/restxml/index.xml'
bash -c 'mkdir -p doc/build/images/src/png && \
cp -a doc/source/.images/* doc/build/images/src/png'
cp doc/DC-kiwi doc/build/
bash -c 'pushd doc/build && daps -d DC-kiwi html'
test_scripts: setup
poetry run bash -c \
'pip install pytest-container && pushd test/scripts && pytest -s -vv'
check: setup
# shell code checks
bash -c 'shellcheck -e ${sc_disable} dracut/modules.d/*/*.sh -s bash'
bash -c 'shellcheck -e ${sc_disable} kiwi/config/functions.sh -s bash'
# python flake tests
poetry run flake8 --statistics -j auto --count kiwi
poetry run flake8 --statistics -j auto --count test/unit
poetry run flake8 --statistics -j auto --count test/scripts
test: setup
# python static code checks
poetry run mypy kiwi
# unit tests
poetry run bash -c 'pushd test/unit && pytest -n 5 \
--doctest-modules --no-cov-on-fail --cov=kiwi \
--cov-report=term-missing --cov-fail-under=100 \
--cov-config .coveragerc'
build: clean check test
# build the sdist source tarball
poetry build --format=sdist
# provide rpm source tarball
mv dist/kiwi-${version}.tar.gz dist/python-kiwi.tar.gz
# update rpm changelog using reference file
helper/update_changelog.py --since package/python-kiwi.changes --fix > \
dist/python-kiwi.changes
helper/update_changelog.py --file package/python-kiwi.changes >> \
dist/python-kiwi.changes
# update package version in spec file
cat package/python-kiwi-spec-template | sed -e s'@%%VERSION@${version}@' \
> dist/python-kiwi.spec
# update package version in PKGBUILD file
md5sums=$$(md5sum dist/python-kiwi.tar.gz | cut -d" " -f1); \
cat package/python-kiwi-pkgbuild-template | sed \
-e s'@%%VERSION@${version}@' \
-e s"@%%MD5SUM@$${md5sums}@" > dist/PKGBUILD
# provide rpm rpmlintrc
cp package/python-kiwi-rpmlintrc dist
# provide patches
cp package/*.patch dist
prepare_for_pypi: clean setup
# documentation render and tests
poetry run make -C doc man
# sdist tarball, the actual publishing happens via the
# ci-publish-to-pypi.yml github action
poetry build --format=sdist
prepare_for_docs: clean setup
# documentation man pages
poetry run make -C doc man
# documentation github pages, the actual publishing via
# the ci-publish-pages.yml github action
poetry run bash -c 'pushd doc && \
travis-sphinx --outdir build_gh_pages build --nowarn --source ./source'
bash -c 'touch ./doc/build_gh_pages/.nojekyll'
clean: clean_git_attributes
rm -rf dist
rm -rf doc/build
rm -rf doc/dist