-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
162 lines (116 loc) · 5.96 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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#
# PROJECT: gcreds
# Makefile, version shell 2.0
#
# --- declarations --------------------------------------------------------------------------------
PROJECT := gcreds
CUR_DIR = $(shell pwd)
VENV_DIR := $(CUR_DIR)/p3_venv
LIB_DIR = $(CUR_DIR)/core
SCRIPT_DIR := $(CUR_DIR)/scripts
PYTHON_VERSION := python3
PYTHON3_PATH := $(shell which $(PYTHON_VERSION))
BUILDDEB_ROOT = $(CUR_DIR)/packaging/deb
BUILDRPM_ROOT = $(CUR_DIR)/packaging/rpm
GIT := $(shell which git)
DOCKER := $(shell which docker)
PIP_CALL := $(VENV_DIR)/bin/pip3
ACTIVATE = $(shell . $(VENV_DIR)/bin/activate)
MAKE = $(shell which make)
MODULE_PATH := $(LIB_DIR)
DOC_PATH := $(CUR_DIR)/docs
REQUIREMENT = $(CUR_DIR)/requirements.txt
VERSION_FILE = $(LIB_DIR)/version.py
# --- rollup targets ------------------------------------------------------------------------------
.PHONY: zero-builddeb zero-buildrpm zero-installdeb zero-installrpm
build-all: clean builddeb buildrpm ## Clean and Build Debian & RPM pkgs
zero-builddeb: clean deplist builddeb ## Clean and Build Debian (.deb) pkg
zero-buildrpm: clean deplist buildrpm ## Clean and Build Redhat (.rpm) pkg
zero-installdeb: clean builddeb installdeb ## Clean, Build & Install Debian (.deb) pkg
zero-installrpm: clean buildrpm installrpm ## Clean, Build & Install Redhat (.rpm) pkg
# --- targets -------------------------------------------------------------------------------------
.PHONY: pre-build
pre-build: ## Remove residual build artifacts
rm -rf $(CUR_DIR)/dist
mkdir $(CUR_DIR)/dist
setup-venv: $(VENV_DIR)
$(VENV_DIR): pre-build ## Create and activiate python venv
$(PYTHON3_PATH) -m venv $(VENV_DIR); \
. $(VENV_DIR)/bin/activate && $(PIP_CALL) install -U setuptools pip && \
$(PIP_CALL) install -r $(REQUIREMENT);
.PHONY: test
test: ## Run pytest unittests
@echo "Executing Tests..."; \
if [ $(PDB) ]; then PDB = "true"; \
bash $(CUR_DIR)/scripts/make-test.sh $(CUR_DIR) $(VENV_DIR) $(MODULE_PATH) $(PDB); \
elif [ $(MODULE) ]; then PDB = "false"; \
bash $(CUR_DIR)/scripts/make-test.sh $(CUR_DIR) $(VENV_DIR) $(MODULE_PATH) $(PDB) $(MODULE); \
elif [ $(COMPLEXITY) ]; then COMPLEXITY = "run"; \
bash $(CUR_DIR)/scripts/make-test.sh $(CUR_DIR) $(VENV_DIR) $(MODULE_PATH) $(COMPLEXITY) $(MODULE); \
else bash $(CUR_DIR)/scripts/make-test.sh $(CUR_DIR) $(VENV_DIR) $(MODULE_PATH); fi
docs: clean setup-venv ## Generate sphinx documentation
. $(VENV_DIR)/bin/activate && \
$(PIP_CALL) install -r $(DOC_PATH)/requirements.txt
cd $(CUR_DIR) && $(MAKE) clean-docs
cd $(DOC_PATH) && . $(VENV_DIR)/bin/activate && $(MAKE) html
.PHONY: deplist
deplist: pre-build setup-venv ## Gen OS pkg desc files. FORCE=x to force regen
if [ $(FORCE) ]; then . $(VENV_DIR)/bin/activate && \
$(PYTHON3_PATH) $(SCRIPT_DIR)/build_deplist.py --force; \
else . $(VENV_DIR)/bin/activate && $(PYTHON3_PATH) $(SCRIPT_DIR)/build_deplist.py; fi
.PHONY: builddeb
builddeb: clean setup-venv ## Build Debian distribution (.deb) os package
@echo "Building Debian package format of $(PROJECT)"; \
if [ ! -d $(VENV_DIR) ]; then $(MAKE) setup-venv; fi; \
if [ $(VERSION) ]; then . $(VENV_DIR)/bin/activate && \
$(PYTHON3_PATH) $(SCRIPT_DIR)/builddeb.py --build --set-version $(VERSION); \
else cd $(CUR_DIR) && . $(VENV_DIR)/bin/activate && $(PYTHON3_PATH) $(SCRIPT_DIR)/builddeb.py --build; fi
.PHONY: buildrpm
buildrpm: setup-venv ## Build Redhat distribution (.rpm) os package
@echo "Building RPM package format of $(PROJECT)"; \
if [ $(VERSION) ]; then cd $(CUR_DIR) && . $(VENV_DIR)/bin/activate && \
$(PYTHON3_PATH) $(SCRIPT_DIR)/buildrpm.py --build --set-version $(VERSION); else \
cd $(CUR_DIR) && . $(VENV_DIR)/bin/activate && $(PYTHON3_PATH) $(SCRIPT_DIR)/buildrpm.py --build; fi
.PHONY: installdeb
installdeb: builddeb ## Install (source: pypi). Build artifacts exist
if [ ! -d $(VENV_DIR) ]; then $(MAKE) setup-venv; fi; \
cd $(CUR_DIR) && . $(VENV_DIR)/bin/activate && bash $(SCRIPT_DIR)/installdeb.sh
.PHONY: installrpm
installrpm: buildrpm ## Install (source: pypi). Build artifacts exist
if [ ! -d $(VENV_DIR) ]; then $(MAKE) setup-venv; fi; \
cd $(CUR_DIR) && . $(VENV_DIR)/bin/activate && bash $(SCRIPT_DIR)/installrpm.sh
.PHONY: rebuild-docs
rebuild-docs: ## Regenerate sphinx documentation
cd $(CUR_DIR)/docs && . $(VENV_DIR)/bin/activate && $(MAKE) html && cd $(CUR_DIR);
.PHONY: upload-images
upload-images: ## Upload README images to Amazon S3
bash $(CUR_DIR)/scripts/s3upload.sh
.PHONY: help
help: ## Print help index
@printf "\n\033[0m %-15s\033[0m %-13s\u001b[37;1m%-15s\u001b[0m\n\n" " " "make targets: " $(PROJECT)
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {sub("\\\\n",sprintf("\n%22c"," "), $$2);printf "\033[0m%-2s\033[36m%-20s\033[33m %-8s\033[0m%-5s\n\n"," ", $$1, "-->", $$2}' $(MAKEFILE_LIST)
@printf "\u001b[37;0m%-2s\u001b[37;0m%-2s\n\n" " " "______________________________________________________________________"
@printf "\u001b[37;1m%-3s\u001b[37;1m%-3s\033[0m %-6s\u001b[44;1m%-9s\u001b[37;0m%-15s\n\n" " " " make" "zero-build[deb|rpm] " "VERSION=X" " to build specific version id"
.PHONY: debian-help
debian-help: ## print help menu options for the debian package creation script
$(PYTHON3_PATH) $(SCRIPT_DIR)/builddeb.py
.PHONY: rpm-help
rpm-help: ## print help menu options for the redhat rpm package creation script
$(PYTHON3_PATH) $(SCRIPT_DIR)/buildrpm.py
.PHONY: clean-docs
clean-docs: ## Remove build artifacts for documentation only
@echo "Clean docs build"
if [ -d $(VENV_DIR) ]; then . $(VENV_DIR)/bin/activate && \
cd $(DOC_PATH) && $(MAKE) clean || true; fi
.PHONY: clean
clean: ## Remove all build artifacts generated by make
@echo "Clean build artifacts"
rm -rf $(VENV_DIR) || true
rm -rf $(CUR_DIR)/dist || true
rm -rf $(CUR_DIR)/*.egg-info || true
rm -rf $(SCRIPT_DIR)/__pycache__ || true
rm -rf $(LIB_DIR)/__pycache__ || true
rm -rf $(CUR_DIR)/tests/__pycache__ || true
rm -rf $(CUR_DIR)/.pytest_cache || true
rm -f $(SCRIPT_DIR)/version.py || true
rm -fr $(BUILDDEB_ROOT)/gcreds-*_amd64