95 lines
2.5 KiB
Makefile
95 lines
2.5 KiB
Makefile
SHELL:=/usr/bin/env bash
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
# Makefile
|
|
# NOTE: Do not change the contents of this file!
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
include .env
|
|
|
|
################################
|
|
# VARIABLES
|
|
################################
|
|
|
|
ARTEFACT_NAME:=${APPNAME}
|
|
PYTHON:=python3
|
|
ifeq ($(OS),Windows_NT)
|
|
ARTEFACT_NAME:=${APPNAME}.exe
|
|
PYTHON=py -3
|
|
endif
|
|
|
|
################################
|
|
# Macros
|
|
################################
|
|
|
|
define create_file_if_not_exists
|
|
@touch "$(1)";
|
|
endef
|
|
|
|
define create_folder_if_not_exists
|
|
if ! [ -d "$(1)" ]; then mkdir "$(1)"; fi
|
|
endef
|
|
|
|
define delete_if_file_exists
|
|
@if [ -f "$(1)" ]; then rm "$(1)"; fi
|
|
endef
|
|
|
|
define delete_if_folder_exists
|
|
@if [ -d "$(1)" ]; then rm -rf "$(1)"; fi
|
|
endef
|
|
|
|
define clean_all_files
|
|
@find . -type f -name "$(1)" -exec basename {} \;
|
|
@find . -type f -name "$(1)" -exec rm {} \; 2> /dev/null
|
|
endef
|
|
|
|
define clean_all_folders
|
|
@find . -type d -name "$(1)" -exec basename {} \;
|
|
@find . -type d -name "$(1)" -exec rm -rf {} \; 2> /dev/null
|
|
endef
|
|
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
# TARGETS
|
|
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
################################
|
|
# BASIC TARGETS: setup, build, run
|
|
################################
|
|
setup: check-system-requirements setup-no-checks
|
|
setup-no-checks:
|
|
@${PYTHON} -m pip install -r "requirements"
|
|
run:
|
|
@${PYTHON} src/main.py;
|
|
all: setup run
|
|
################################
|
|
# TARGETS: testing
|
|
################################
|
|
tests: unit-tests
|
|
unit-tests:
|
|
@# For logging purposes (since stdout is rechanneled):
|
|
@$(call delete_if_file_exists,logs/debug.log)
|
|
@$(call create_folder_if_not_exists,logs)
|
|
@$(call create_file_if_not_exists,logs/debug.log)
|
|
@# for python unit tests:
|
|
@${PYTHON} -m pytest tests --cache-clear --verbose -k test_
|
|
@cat logs/debug.log
|
|
################################
|
|
# AUXILIARY (INTERNAL TARGETS)
|
|
################################
|
|
check-system-requirements:
|
|
@if ! ( ${PYTHON} --version >> /dev/null 2> /dev/null ); then \
|
|
echo "Install Python 3.10.x first!"; \
|
|
exit 1; \
|
|
fi
|
|
@${PYTHON} --version
|
|
################################
|
|
# TARGETS: clean
|
|
################################
|
|
clean:
|
|
@echo "All system artefacts will be force removed."
|
|
@$(call clean_all_files,.DS_Store)
|
|
@echo "All build artefacts will be force removed."
|
|
@$(call clean_all_folders,__pycache__)
|
|
@$(call clean_all_folders,.pytest_cache)
|
|
@$(call delete_if_file_exists,dist/${ARTEFACT_NAME})
|
|
@exit 0
|