summaryrefslogtreecommitdiff
path: root/Makefile
blob: 15c685b7f926dae8f823001023c3ecf53ac05f4e (plain)
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 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