Files
COBOL-to-JavaTX/Makefile
2025-09-12 14:02:37 +02:00

93 lines
3.2 KiB
Makefile

.PHONY: help build-thesis build-expose clean clean-paper check-variables set-shell set-directory
.DEFAULT_GOAL := help
# --- Load .env if it exists (no error if missing) ---
-include .env
# --- Set default directory if not defined ---
DIRECTORY ?= $(shell pwd)
# Variables
LATEX_DIR = paper
LATEX_CONTAINER = texlive/texlive:TL2024-historic
THESIS_SRC = dokumentation.tex
EXPOSE_SRC = expose.tex
# Colors
GREEN := \033[1;32m
WHITE := \033[0;37m
GRAY := \033[0;37m
RESET := \033[0m
help: ## Show this help message
@echo "Available commands:"
@grep -E "^[a-zA-Z_-]+:.*?## .*$$" "$(firstword $(MAKEFILE_LIST))" \
| sort \
| awk -v GREEN="$(GREEN)" -v RESET="$(RESET)" -v GRAY="$(GRAY)" 'BEGIN {FS=":.*?## "} {printf " %smake %-15s%s %s%s\n", GREEN, $$1, RESET, GRAY, $$2}'
clean: clean-paper ## Remove all auxiliary files (calls clean-paper)
clean-paper: ## Remove LaTeX auxiliary files from the 'paper' directory
@rm -f $(LATEX_DIR)/*.aux \
$(LATEX_DIR)/*.log \
$(LATEX_DIR)/*.out \
$(LATEX_DIR)/*.toc \
$(LATEX_DIR)/*.bbl \
$(LATEX_DIR)/*.blg \
$(LATEX_DIR)/*.fls \
$(LATEX_DIR)/*.fdb_latexmk \
$(LATEX_DIR)/*.bcf \
$(LATEX_DIR)/*.run.xml
build-thesis: clean-paper ## Build the main thesis PDF (dokumentation.tex) using DockerJa, and latexmk
@docker run --rm -v "$(DIRECTORY)/$(LATEX_DIR):/data" -w //data $(LATEX_CONTAINER) latexmk -pdf $(THESIS_SRC)
build-expose: clean-paper ## Build the expose PDF (expose.tex) using Docker and latexmk
@docker run --rm -v "$(DIRECTORY)/$(LATEX_DIR):/data" -w //data $(LATEX_CONTAINER) latexmk -pdf $(EXPOSE_SRC)
set-shell: ## Set the shell Make should use
ifeq ($(LOCAL_SHELL),)
@echo "Usage: make set-shell LOCAL_SHELL=<path to shell> [LOCAL_SHELLFLAGS='<flags>']"
@echo "Example: make set-shell LOCAL_SHELL=\"C:/Progra~1/Git/usr/bin/bash.exe\" LOCAL_SHELLFLAGS=\"--login -i -c\""
else
@echo "LOCAL_SHELL parameter detected, updating .env..."
@if grep -q '^SHELL=' .env 2>/dev/null; then \
sed -i 's|^SHELL=.*|SHELL=$(LOCAL_SHELL)|' .env; \
echo "Updated SHELL in .env"; \
else \
echo "SHELL=$(LOCAL_SHELL)" >> .env; \
echo "Added SHELL to .env"; \
fi
ifneq ($(LOCAL_SHELLFLAGS),)
@echo "LOCAL_SHELLFLAGS parameter detected, updating .env..."
@if grep -q '^SHELLFLAGS=' .env 2>/dev/null; then \
sed -i 's|^SHELLFLAGS=.*|SHELLFLAGS=$(LOCAL_SHELLFLAGS)|' .env; \
echo "Updated SHELLFLAGS in .env"; \
else \
echo "SHELLFLAGS=$(LOCAL_SHELLFLAGS)" >> .env; \
echo "Added SHELLFLAGS to .env"; \
fi
endif
endif
set-directory: ## Set the project directory Make should use
ifeq ($(LOCAL_DIRECTORY),)
@echo "Usage: make set-directory LOCAL_DIRECTORY=<path to project>"
else
@echo "LOCAL_DIRECTORY parameter detected, updating .env..."
@if grep -q '^DIRECTORY=' .env 2>/dev/null; then \
sed -i 's|^DIRECTORY=.*|DIRECTORY=$(LOCAL_DIRECTORY)|' .env; \
echo "Updated DIRECTORY in .env"; \
else \
echo "DIRECTORY=$(LOCAL_DIRECTORY)" >> .env; \
echo "Added DIRECTORY to .env"; \
fi
endif
check-variables: ## Checks which variables Make is using (SHELL, SHELLFLAGS, DIRECTORY)
@echo "---- Makefile Variables Check ----"
@echo "SHELL = $(SHELL)"
@echo "SHELLFLAGS = $(SHELLFLAGS)"
@echo "DIRECTORY = $(DIRECTORY)"