# Spúšťaj z priečinka src/:  cd src && make
# alebo z koreňa repozitára:    make -C src …   alebo pri použití Makefile v kořeni repo.

PYTHON   = python3
PIP      = pip3
LOGIN    = xpomie00_xsoboth00_xdvora00

REPO_ROOT     := ..
REQ_TXT       := $(REPO_ROOT)/requirements.txt

GUI_PKG       := gui
TEST_DIR      := Tests
PROF_DIR_R    := $(REPO_ROOT)/profiling

DEB_BUILD     := $(REPO_ROOT)/build
DEB_DIST      := $(REPO_ROOT)/dist
PROJECT_NAME  := ivs_project

STAGING       := $(DEB_BUILD)/$(PROJECT_NAME)
OPT_INSTALL   := /opt/$(PROJECT_NAME)

STDDEV_PY     := stddev.py
GEN_DATA_PY   := gen_data.py

DATA_10       := data_10.txt
DATA_1000     := data_1000.txt
DATA_1M       := data_1000000.txt

DATA_FILE     := $(PROF_DIR_R)/data.txt

.PHONY: all run test doc deb clean pack stddev help

all:
	$(PIP) install --break-system-packages -r $(REQ_TXT)

run:
	PYTHONPATH=. $(PYTHON) -m $(GUI_PKG).gui

test:
	PYTHONPATH=. $(PYTHON) -m pytest -v $(TEST_DIR)/

doc:
	doxygen Doxyfile

deb:
	rm -rf $(DEB_BUILD) $(DEB_DIST)

	mkdir -p $(STAGING)/DEBIAN $(STAGING)/opt/$(PROJECT_NAME)/src $(STAGING)/usr/local/bin $(DEB_DIST)

	rsync -a --exclude 'Tests/' ./ $(STAGING)/opt/$(PROJECT_NAME)/src/
	cp -a $(PROF_DIR_R) $(STAGING)/opt/$(PROJECT_NAME)/
	cp -a $(REPO_ROOT)/DEBIAN/control $(STAGING)/DEBIAN/control

	printf '%s\n' \
		'#!/bin/sh' \
		'export PYTHONPATH=$(OPT_INSTALL)/src' \
		'exec python3 $(OPT_INSTALL)/src/gui/gui.py "$$@"' \
		> "$(STAGING)/usr/local/bin/calculator-launch"
	chmod 755 "$(STAGING)/usr/local/bin/calculator-launch"

	printf '%s\n' \
		'#!/bin/sh' \
		'export PYTHONPATH=$(OPT_INSTALL)/src' \
		'exec python3 $(OPT_INSTALL)/src/stddev.py "$$@"' \
		> "$(STAGING)/usr/local/bin/stddev-launch"
	chmod 755 "$(STAGING)/usr/local/bin/stddev-launch"

	dpkg-deb --build $(STAGING) $(DEB_DIST)/$(PROJECT_NAME).deb


clean:
	rm -rf __pycache__ $(GUI_PKG)/__pycache__ $(TEST_DIR)/__pycache__
	rm -rf $(PROF_DIR_R)/__pycache__
	rm -rf .pytest_cache $(REPO_ROOT)/doc/html $(REPO_ROOT)/doc/latex
	rm -f $(DATA_FILE)
	find . -name "*.pyc" -delete
	rm -f $(DATA_10) $(DATA_1000) $(DATA_1M) $(PROF_DIR_R)/data.txt

pack: clean
	cd $(REPO_ROOT) && zip -r $(LOGIN).zip . \
		--exclude "*.git*" \
		--exclude ".venv/*" \
		--exclude "venv/*" \
		--exclude "__pycache__/*" \
		--exclude "*.pyc"


stddev:
	$(PYTHON) $(GEN_DATA_PY)
	PYTHONPATH=. $(PYTHON) $(STDDEV_PY) < $(DATA_10)
	PYTHONPATH=. $(PYTHON) $(STDDEV_PY) < $(DATA_1000)
	PYTHONPATH=. $(PYTHON) $(STDDEV_PY) < $(DATA_1M)


help:
	@echo "  make          - download requirements "
	@echo "  make run      - start calculator"
	@echo "  make test     - start automatic test for mathematical library"
	@echo "  make doc      - generate program documentation"
	@echo "  make deb      - build Debian package -> ../dist/$(PROJECT_NAME).deb"
	@echo "  make clean    - delete temporary files"
	@echo "  make pack     - zip whole repo from root ($(LOGIN).zip)"
	@echo "  make stddev   - standard deviation profiling sample runs"
	@echo "  make help     - show description of comands"
