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
|
# Copyright (c) 2013, 2014, 2016 Yu-Jie Lin
# Licensed under the BSD License, for detailed license information, see COPYING
PACKAGE=smartypants
SCRIPT=smartypants
PY2_CMD=python2
PY3_CMD=python3
INSTALL_TEST_DIR=/tmp/$(PACKAGE)_install_test
BUILD_CMD=./setup.py sdist --formats gztar,zip bdist_wheel
DOC_FILES = CHANGES.rst COPYING docs/conf.py $(wildcard docs/*.rst)
# ============================================================================
build:
$(BUILD_CMD)
upload:
$(BUILD_CMD) upload
upload_doc: doc
$(PY2_CMD) setup.py upload_sphinx
# ============================================================================
doc: docs/_build/html
docs/_build/html: $(DOC_FILES) smartypants.py smartypants_command.py
make -C docs html
# FIXME making a symlink is just an workaround since smartypants script isn't
# importable, therefore Sphinx autodoc cannot pick it up. There are a couple of
# options:
#
# 1. making a `main()` function in smartypants.py, the module file. However,
# you can't use section heading inside the docstring of a function, or it
# would result an error about unexpected section heading.
#
# 2. making a smartypants.py as a package, so a new module like
# smartypants.cli, just for the command-line script
#
# If you know a better solution for making documentation for smartypants
# command, please open an issue to discuss. Right now, stick with this ugly
# symlink.
smartypants_command.py: smartypants
ln -sf smartypants $@
# ============================================================================
test: test_isort test_doc8 test_pep8 test_pyflakes test_test test_setup
test_%:
@echo '========================================================================================='
$(PY2_CMD) setup.py $(subst test_,,$@)
@echo '-----------------------------------------------------------------------------------------'
$(PY3_CMD) setup.py $(subst test_,,$@)
test_doc8:
@echo '========================================================================================='
doc8 $(filter %.rst,$(DOC_FILES))
test_setup: test_setup_py2 test_setup_py3
test_setup_py2 test_setup_py3:
@echo '========================================================================================='
rm -rf $(INSTALL_TEST_DIR)
$(eval PY_CMD = \
$(if $(findstring py2,$@),\
$(PY2_CMD),\
$(if $(findstring py3,$@),\
$(PY3_CMD),\
$(error Do not know what to do with $@)\
)\
)\
)
$(PY_CMD) -m virtualenv $(INSTALL_TEST_DIR)
LC_ALL=C $(PY_CMD) setup.py --version >/dev/null
$(PY_CMD) $(BUILD_CMD)
$(PY_CMD) setup.py sdist --dist-dir $(INSTALL_TEST_DIR)
$(INSTALL_TEST_DIR)/bin/pip install $(INSTALL_TEST_DIR)/*.tar.gz
@\
CHK_VER="`$(PY_CMD) $(SCRIPT) --version 2>&1`";\
cd $(INSTALL_TEST_DIR);\
. bin/activate;\
[ "`type $(SCRIPT)`" = "$(SCRIPT) is $(INSTALL_TEST_DIR)/bin/$(SCRIPT)" ] &&\
[ "$$CHK_VER" = "`bin/$(SCRIPT) --version 2>&1`" ] &&\
[ "`echo '"foobar"' | bin/$(SCRIPT)`" = '“foobar”' ]
rm -rf $(INSTALL_TEST_DIR)
# ============================================================================
clean:
rm -rf *.pyc build dist __pycache__
rm smartypants_command.py
make -C docs clean
# ============================================================================
.PHONY: build upload doc test_setup test_setup_py2 test_setup_py3 clean
|