-
Notifications
You must be signed in to change notification settings - Fork 75
/
Makefile
133 lines (97 loc) · 3.17 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
# Makefile for easier installation and cleanup.
#
# Uses self-documenting macros from here:
# http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
SHELL := bash
.SHELLFLAGS := -eu -o pipefail -c
MAKEFLAGS += --no-builtin-rules
PACKAGE=clevercsv
DOC_DIR=./docs/
VENV_DIR=/tmp/clevercsv_venv
PYTHON ?= python
.PHONY: help
.DEFAULT_GOAL := help
help:
@grep -E '^[0-9a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) |\
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m\
%s\n", $$1, $$2}'
################
# Installation #
################
.PHONY: inplace install
inplace:
$(PYTHON) setup.py build_ext -i
install: dist ## Install for the current user using the default python command
$(PYTHON) -m pip install --user ./dist/$(PACKAGE)-*.tar.gz
################
# Distribution #
################
.PHONY: release dist
release: ## Make a release
$(PYTHON) make_release.py
dist: man ## Make Python source distribution
$(PYTHON) setup.py sdist
###########
# Testing #
###########
.PHONY: test integration integration_partial
test: mypy green pytest
green: venv ## Run unit tests
source $(VENV_DIR)/bin/activate && green -a -vv ./tests/test_unit
pytest: venv ## Run unit tests with PyTest
source $(VENV_DIR)/bin/activate && pytest -ra -m 'not network'
mypy: venv ## Run type checks
source $(VENV_DIR)/bin/activate && \
mypy --check-untyped-defs ./stubs $(PACKAGE) ./tests
integration: venv ## Run integration tests
source $(VENV_DIR)/bin/activate && python ./tests/test_integration/test_dialect_detection.py -v
integration_partial: venv ## Run partial integration tests
source $(VENV_DIR)/bin/activate && python ./tests/test_integration/test_dialect_detection.py -v --partial
#################
# Documentation #
#################
.PHONY: docs doc man
docs: doc
doc: venv ## Build documentation with Sphinx
source $(VENV_DIR)/bin/activate && m2r2 README.md && mv README.rst $(DOC_DIR)
source $(VENV_DIR)/bin/activate && m2r2 CHANGELOG.md && mv CHANGELOG.rst $(DOC_DIR)
cd $(DOC_DIR) && \
rm source/* && \
source $(VENV_DIR)/bin/activate && \
sphinx-apidoc -H 'CleverCSV API Documentation' -o source ../$(PACKAGE) && \
touch source/AUTOGENERATED
source $(VENV_DIR)/bin/activate && $(MAKE) -C $(DOC_DIR) html
man: venv ## Build man pages using Wilderness
source $(VENV_DIR)/bin/activate && \
python setup.py build_manpages
#######################
# Virtual environment #
#######################
.PHONY: venv clean_venv
venv: $(VENV_DIR)/bin/activate
$(VENV_DIR)/bin/activate:
test -d $(VENV_DIR) || $(PYTHON) -m venv $(VENV_DIR)
source $(VENV_DIR)/bin/activate && python -m pip install -e .[dev]
touch $(VENV_DIR)/bin/activate
clean_venv:
rm -rf $(VENV_DIR)
############
# Clean up #
############
.PHONY: clean
clean: clean_venv ## Clean build dist and egg directories left after install
rm -rf ./dist
rm -rf ./build
rm -rf ./$(PACKAGE).egg-info
rm -rf ./cover
rm -f MANIFEST
rm -f ./$(PACKAGE)/*.so
rm -f ./*_valgrind.log*
rm -f ./man/*
find . -type f -iname '*.pyc' -delete
find . -type d -name '__pycache__' -empty -delete
# Testing
#
gh130: venv
source $(VENV_DIR)/bin/activate && \
python -m unittest -k '*github_issue_130' tests/test_unit/test_reader.py