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
|