-
Notifications
You must be signed in to change notification settings - Fork 82
Expand file tree
/
Copy pathMakefile
More file actions
134 lines (98 loc) · 3.21 KB
/
Copy pathMakefile
File metadata and controls
134 lines (98 loc) · 3.21 KB
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
# 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) -m pip install -e .
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 venv ## Make Python source distribution
source $(VENV_DIR)/bin/activate && python -m build
###########
# Testing #
###########
.PHONY: test integration integration_partial
test: mypy unit pytest
unit: venv ## Run unit tests
source $(VENV_DIR)/bin/activate && \
python -m unittest discover -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 build_manpages.py
#######################
# 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