1 # The default target of this Makefile is...
6 # make V=1 # generate files; V=1 increases verbosity
7 # make test [flags=...] # run tests; flags=-x fails fast
8 # make test V=2 # V=2 increases test verbosity
9 # make doc # build docs
10 # make flake8 # python style checks
11 # make pylint [color=1] # run pylint; color=1 colorizes output
12 # make pylint3k [color=1] # run python2+3 compatibility checks
13 # make format # run the black python formatter
14 # make check [color=1] # run test, doc, flake8, pylint3k, and pylint
15 # make check file=<filename> # run checks on <filename>
19 # make pot # update main translation template
20 # make po # merge translations
21 # make mo # generate message files
22 # make i18n # all three of the above
26 # make prefix=<path> install
27 # DESTDIR is also supported.
29 # To disable distutil's replacement of "#!/usr/bin/env python" with
30 # the path to the build environment's python, pass USE_ENV_PYTHON=1
33 # The external commands used by this Makefile are...
49 PYTEST
= $(PYTHON
) -m pytest
62 TEST_VERBOSE
= --verbose
71 FLAKE8_FLAGS
= $(VERBOSE
)
73 PYTEST_FLAGS
= $(QUIET
) $(TEST_VERBOSE
)
74 PYTEST_FLAGS
+= --doctest-modules
75 uname_S
:= $(shell uname
-s
)
76 ifneq ($(uname_S
),Linux
)
77 PYTEST_FLAGS
+= --ignore
=cola
/inotify.py
80 TOX_FLAGS
= $(VERBOSE_SHORT
) --develop
--skip-missing-interpreters
81 TOX_ENVS ?
= py
{27,34,35,36,37},pylint
{2,36,37}
83 PYLINT_FLAGS
= --rcfile
=.pylintrc
84 PYLINT_FLAGS
+= --score
=no
86 PYLINT_FLAGS
+= --output-format
=colorized
90 # These values can be overridden on the command-line or via config.mak
92 bindir = $(prefix)/bin
93 datadir = $(prefix)/share
/git-cola
94 python_lib
:= $(shell $(PYTHON
) -c \
95 'import distutils.sysconfig as sc; print(sc.get_python_lib(prefix=""))')
96 pythondir
= $(prefix)/$(python_lib
)
97 hicolordir
= $(prefix)/share
/icons
/hicolor
/scalable
/apps
100 cola_base
:= git-cola
101 cola_app_base
= $(cola_base
).app
102 cola_app
= $(CURDIR
)/$(cola_app_base
)
103 cola_version
= $(shell $(PYTHON
) bin
/git-cola version
--brief
)
104 cola_dist
:= $(cola_base
)-$(cola_version
)
106 SETUP ?
= $(PYTHON
) setup.py
110 build_args
+= --use-env-python
113 install_args
+= install
114 install_args
+= --prefix="$(prefix)"
115 install_args
+= --force
116 install_args
+= --install-scripts
="$(bindir)"
117 install_args
+= --record
=build
/MANIFEST
119 install_args
+= --root
="$(DESTDIR)"
124 ifdef NO_PRIVATE_LIBS
125 install_args
+= --no-private-libs
128 install_args
+= --no-vendor-libs
134 ALL_PYTHON_DIRS
= $(PYTHON_DIRS
)
135 ALL_PYTHON_DIRS
+= extras
137 PYTHON_SOURCES
= bin
/git-cola
138 PYTHON_SOURCES
+= bin
/git-cola-sequence-editor
139 PYTHON_SOURCES
+= bin
/git-dag
140 PYTHON_SOURCES
+= setup.py
142 # User customizations
148 .PHONY
: build_version
150 @GIT
=$(GIT
) .
/extras
/generate-build-version.sh
2>/dev
/null || true
154 $(SETUP
) $(QUIET
) $(VERBOSE
) $(build_args
)
158 $(SETUP
) $(QUIET
) $(VERBOSE
) $(install_args
)
159 $(MKDIR_P
) "$(DESTDIR)$(hicolordir)"
160 $(LN_S
) "$(datadir)/icons/git-cola.svg" \
161 "$(DESTDIR)$(hicolordir)/git-cola.svg"
162 $(LN_S
) git-cola
"$(DESTDIR)$(bindir)/cola"
164 # Maintainer's dist target
167 $(GIT
) archive
--format
=tar --prefix=$(cola_dist
)/ HEAD^
{tree
} | \
168 $(GZIP
) -f
-9 - >$(cola_dist
).
tar.gz
172 $(MAKE
) -C share
/doc
/git-cola
all
176 $(MAKE
) -C share
/doc
/git-cola html
180 $(MAKE
) -C share
/doc
/git-cola man
184 $(MAKE
) -C share
/doc
/git-cola
install
188 $(MAKE
) -C share
/doc
/git-cola install-html
192 $(MAKE
) -C share
/doc
/git-cola install-man
196 $(RM
) "$(DESTDIR)$(prefix)"/bin
/git-cola
197 $(RM
) "$(DESTDIR)$(prefix)"/bin
/git-cola-sequence-editor
198 $(RM
) "$(DESTDIR)$(prefix)"/bin
/git-dag
199 $(RM
) "$(DESTDIR)$(prefix)"/bin
/cola
200 $(RM
) "$(DESTDIR)$(prefix)"/share
/applications
/git-cola.desktop
201 $(RM
) "$(DESTDIR)$(prefix)"/share
/applications
/git-cola-folder-handler.desktop
202 $(RM
) "$(DESTDIR)$(prefix)"/share
/applications
/git-dag.desktop
203 $(RM
) "$(DESTDIR)$(prefix)"/share
/appdata
/git-dag.appdata.xml
204 $(RM
) "$(DESTDIR)$(prefix)"/share
/appdata
/git-cola.appdata.xml
205 $(RM
) "$(DESTDIR)$(prefix)"/share
/icons
/hicolor
/scalable
/apps
/git-cola.svg
206 $(RM_R
) "$(DESTDIR)$(prefix)"/share
/doc
/git-cola
207 $(RM_R
) "$(DESTDIR)$(prefix)"/share
/git-cola
208 $(RM
) "$(DESTDIR)$(prefix)"/share
/locale
/*/LC_MESSAGES
/git-cola.mo
209 $(RM_R
) "$(DESTDIR)$(pythondir)"/git_cola-
*
210 $(RM_R
) "$(DESTDIR)$(pythondir)"/cola
211 $(RMDIR
) -p
"$(DESTDIR)$(pythondir)" 2>/dev
/null || true
212 $(RMDIR
) "$(DESTDIR)$(prefix)"/share
/applications
2>/dev
/null || true
213 $(RMDIR
) "$(DESTDIR)$(prefix)"/share
/appdata
2>/dev
/null || true
214 $(RMDIR
) "$(DESTDIR)$(prefix)"/share
/doc
2>/dev
/null || true
215 $(RMDIR
) "$(DESTDIR)$(prefix)"/share
/locale
/*/LC_MESSAGES
2>/dev
/null || true
216 $(RMDIR
) "$(DESTDIR)$(prefix)"/share
/locale
/* 2>/dev
/null || true
217 $(RMDIR
) "$(DESTDIR)$(prefix)"/share
/locale
2>/dev
/null || true
218 $(RMDIR
) "$(DESTDIR)$(prefix)"/share
/icons
/hicolor
/scalable
/apps
2>/dev
/null || true
219 $(RMDIR
) "$(DESTDIR)$(prefix)"/share
/icons
/hicolor
/scalable
2>/dev
/null || true
220 $(RMDIR
) "$(DESTDIR)$(prefix)"/share
/icons
/hicolor
2>/dev
/null || true
221 $(RMDIR
) "$(DESTDIR)$(prefix)"/share
/icons
2>/dev
/null || true
222 $(RMDIR
) "$(DESTDIR)$(prefix)"/share
2>/dev
/null || true
223 $(RMDIR
) "$(DESTDIR)$(prefix)"/bin
2>/dev
/null || true
224 $(RMDIR
) "$(DESTDIR)$(prefix)" 2>/dev
/null || true
228 $(PYTEST
) $(PYTEST_FLAGS
) $(flags
) $(PYTHON_DIRS
)
232 $(PYTEST
) $(PYTEST_FLAGS
) --cov
=cola
$(flags
) $(PYTHON_DIRS
)
236 $(FIND
) $(ALL_PYTHON_DIRS
) -name
'*.py[cod]' -print0 |
$(XARGS
) -0 $(RM
)
237 $(FIND
) $(ALL_PYTHON_DIRS
) -name __pycache__
-print0 |
$(XARGS
) -0 $(RM_R
)
238 $(RM_R
) build
dist tags git-cola.app
240 $(MAKE
) -C share
/doc
/git-cola
clean
244 $(FIND
) $(ALL_PYTHON_DIRS
) -name
'*.py' -print0 |
$($XARGS) -0 $(CTAGS
) -f
tags
254 $(SETUP
) build_pot
--build-dir
=po
--no-lang
258 $(SETUP
) build_pot
--build-dir
=po
262 $(SETUP
) build_mo
--force
266 $(MKDIR_P
) $(cola_app
)/Contents
/MacOS
267 $(MKDIR_P
) $(cola_app
)/Contents
/Resources
268 $(CP
) contrib
/darwin
/Info.plist contrib
/darwin
/PkgInfo \
270 $(CP
) contrib
/darwin
/git-cola
$(cola_app
)/Contents
/MacOS
271 $(CP
) contrib
/darwin
/git-cola.icns
$(cola_app
)/Contents
/Resources
272 $(MAKE
) prefix=$(cola_app
)/Contents
/Resources
install install-doc
275 app-tarball
: git-cola.app
276 $(TAR
) czf
$(cola_dist
).app.
tar.gz
$(cola_app_base
)
278 # Preview the markdown using "make README.html"
285 $(FLAKE8
) $(FLAKE8_FLAGS
) $(flags
) \
286 $(PYTHON_SOURCES
) $(ALL_PYTHON_DIRS
) contrib
291 $(PYLINT
) $(PYLINT_FLAGS
) --py3k
$(flags
) \
292 $(PYTHON_SOURCES
) $(ALL_PYTHON_DIRS
)
297 $(PYLINT
) $(PYLINT_FLAGS
) $(flags
) \
298 $(PYTHON_SOURCES
) $(ALL_PYTHON_DIRS
)
304 $(FLAKE8
) $(FLAKE8_FLAGS
) $(flags
) $(file
)
305 $(PYLINT
) $(PYLINT_FLAGS
) --output-format
=colorized
$(flags
) $(file
)
306 $(PYLINT
) $(PYLINT_FLAGS
) --output-format
=colorized
--py3k
$(flags
) $(file
)
318 $(GIT
) ls-files
-- '*.py' | \
320 $(XARGS
) $(BLACK
) --skip-string-normalization
--target-version
=py27
321 $(BLACK
) --skip-string-normalization
--target-version
=py27
$(PYTHON_SOURCES
)
325 $(PIP
) install --requirement requirements
/requirements.txt
327 .PHONY
: requirements-dev
329 $(PIP
) install --requirement requirements
/requirements-dev.txt
333 $(TOX
) $(TOX_FLAGS
) $(flags
)
337 $(TOX
) $(TOX_FLAGS
) -e
"$(TOX_ENVS)" $(flags
)