File: Makefile

package info (click to toggle)
python-clevercsv 0.8.3%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,076 kB
  • sloc: python: 6,184; ansic: 870; makefile: 90
file content (133 lines) | stat: -rw-r--r-- 3,244 bytes parent folder | download
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