242 lines
8.3 KiB
Makefile
242 lines
8.3 KiB
Makefile
# ==============================================================================
|
|
# Makefile for HSRTReport LaTeX Template
|
|
# ==============================================================================
|
|
# Description: Build automation for LaTeX documents with chapter management
|
|
# Usage: make [target]
|
|
# Author: HSRTReport Template
|
|
# ==============================================================================
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Configuration
|
|
# ------------------------------------------------------------------------------
|
|
LATEX = latexmk
|
|
LATEX_FLAGS = -xelatex -shell-escape -synctex=1 -interaction=nonstopmode
|
|
BIBER = biber
|
|
MAKEGLOSSARIES = makeglossaries
|
|
|
|
# Main document
|
|
SOURCE = Main.tex
|
|
PDF = $(SOURCE:.tex=.pdf)
|
|
|
|
# Directories
|
|
BUILD_DIR = Build
|
|
OUT_DIR = Output
|
|
CHAPTERS_DIR = Content/Chapters
|
|
SCRIPTS_DIR = scripts
|
|
|
|
# Output files
|
|
PDF_SOURCE = $(BUILD_DIR)/$(PDF)
|
|
PDF_TARGET = $(OUT_DIR)/$(PDF)
|
|
|
|
# Platform detection for opening PDF
|
|
UNAME := $(shell uname)
|
|
ifeq ($(UNAME), Linux)
|
|
OPEN_CMD = xdg-open
|
|
else ifeq ($(UNAME), Darwin)
|
|
OPEN_CMD = open
|
|
else
|
|
OPEN_CMD = start
|
|
endif
|
|
|
|
# Colors for output
|
|
RED = \033[0;31m
|
|
GREEN = \033[0;32m
|
|
YELLOW = \033[1;33m
|
|
BLUE = \033[0;34m
|
|
NC = \033[0m # No Color
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Main Targets
|
|
# ------------------------------------------------------------------------------
|
|
.PHONY: all
|
|
all: compile view
|
|
@echo -e "$(GREEN)✓ Document built and opened successfully$(NC)"
|
|
|
|
.PHONY: compile
|
|
compile:
|
|
@echo -e "$(BLUE)=== Building LaTeX Document ===$(NC)"
|
|
@[ -d $(BUILD_DIR) ] || mkdir -p $(BUILD_DIR)
|
|
@echo -e "$(YELLOW)→ Running XeLaTeX...$(NC)"
|
|
$(LATEX) $(LATEX_FLAGS) -output-directory=$(BUILD_DIR) $(SOURCE)
|
|
@[ -d $(OUT_DIR) ] || mkdir -p $(OUT_DIR)
|
|
@cp $(PDF_SOURCE) $(PDF_TARGET)
|
|
@echo -e "$(GREEN)✓ PDF created: $(PDF_TARGET)$(NC)"
|
|
|
|
.PHONY: full
|
|
full: clean-aux compile
|
|
@echo -e "$(GREEN)✓ Full build completed$(NC)"
|
|
|
|
.PHONY: view
|
|
view:
|
|
@echo -e "$(BLUE)→ Opening PDF...$(NC)"
|
|
@if [ -f $(PDF_TARGET) ]; then \
|
|
$(OPEN_CMD) $(PDF_TARGET); \
|
|
else \
|
|
echo -e "$(RED)✗ PDF not found. Run 'make compile' first$(NC)"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Clean Targets
|
|
# ------------------------------------------------------------------------------
|
|
.PHONY: clean
|
|
clean: clean-aux clean-output
|
|
@echo -e "$(GREEN)✓ All files cleaned$(NC)"
|
|
|
|
.PHONY: clean-aux
|
|
clean-aux:
|
|
@echo -e "$(YELLOW)→ Cleaning auxiliary files...$(NC)"
|
|
@rm -rf $(BUILD_DIR)
|
|
@rm -f *.aux *.log *.out *.toc *.lof *.lot *.lol *.bbl *.blg *.synctex.gz
|
|
@rm -f *.fdb_latexmk *.fls *.idx *.ind *.ilg *.glo *.gls *.glg
|
|
@rm -f Content/*.aux Content/Chapters/*.aux
|
|
@echo -e "$(GREEN)✓ Auxiliary files cleaned$(NC)"
|
|
|
|
.PHONY: clean-output
|
|
clean-output:
|
|
@echo -e "$(YELLOW)→ Cleaning output files...$(NC)"
|
|
@rm -rf $(OUT_DIR)
|
|
@echo -e "$(GREEN)✓ Output files cleaned$(NC)"
|
|
|
|
.PHONY: distclean
|
|
distclean: clean
|
|
@echo -e "$(YELLOW)→ Removing all generated files...$(NC)"
|
|
@git clean -dfX 2>/dev/null || rm -rf $(BUILD_DIR) $(OUT_DIR)
|
|
@echo -e "$(GREEN)✓ Distribution clean completed$(NC)"
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Chapter Management Targets
|
|
# ------------------------------------------------------------------------------
|
|
.PHONY: chapter
|
|
chapter:
|
|
@if [ -z "$(NUM)" ] || [ -z "$(NAME)" ]; then \
|
|
echo -e "$(RED)✗ Usage: make chapter NUM=02 NAME=methodology$(NC)"; \
|
|
exit 1; \
|
|
fi
|
|
@echo -e "$(BLUE)=== Creating New Chapter ===$(NC)"
|
|
@$(SCRIPTS_DIR)/create_chapter.sh $(NUM) $(NAME)
|
|
|
|
.PHONY: chapters
|
|
chapters: list-chapters
|
|
|
|
.PHONY: list-chapters
|
|
list-chapters:
|
|
@echo -e "$(BLUE)=== Chapter Overview ===$(NC)"
|
|
@$(SCRIPTS_DIR)/list_chapters.sh
|
|
|
|
.PHONY: show-chapter
|
|
show-chapter:
|
|
@if [ -z "$(NAME)" ]; then \
|
|
echo -e "$(RED)✗ Usage: make show-chapter NAME=02_methodology$(NC)"; \
|
|
exit 1; \
|
|
fi
|
|
@$(SCRIPTS_DIR)/show_chapter.sh $(NAME)
|
|
|
|
.PHONY: delete-chapter
|
|
delete-chapter:
|
|
@if [ -z "$(NAME)" ]; then \
|
|
echo -e "$(RED)✗ Usage: make delete-chapter NAME=02_methodology$(NC)"; \
|
|
exit 1; \
|
|
fi
|
|
@echo -e "$(YELLOW)⚠ Warning: This will delete the chapter file$(NC)"
|
|
@$(SCRIPTS_DIR)/delete_chapter.sh $(NAME)
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Development Targets
|
|
# ------------------------------------------------------------------------------
|
|
.PHONY: watch
|
|
watch:
|
|
@echo -e "$(BLUE)=== Starting continuous build ===$(NC)"
|
|
@echo -e "$(YELLOW)→ Watching for changes... (Ctrl+C to stop)$(NC)"
|
|
$(LATEX) $(LATEX_FLAGS) -pvc -output-directory=$(BUILD_DIR) $(SOURCE)
|
|
|
|
.PHONY: draft
|
|
draft:
|
|
@echo -e "$(BLUE)=== Building draft version ===$(NC)"
|
|
$(LATEX) -xelatex -interaction=nonstopmode -output-directory=$(BUILD_DIR) $(SOURCE)
|
|
@[ -d $(OUT_DIR) ] || mkdir -p $(OUT_DIR)
|
|
@cp $(PDF_SOURCE) $(OUT_DIR)/$(SOURCE:.tex=_draft.pdf)
|
|
@echo -e "$(GREEN)✓ Draft created: $(OUT_DIR)/$(SOURCE:.tex=_draft.pdf)$(NC)"
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Utility Targets
|
|
# ------------------------------------------------------------------------------
|
|
.PHONY: count
|
|
count:
|
|
@echo -e "$(BLUE)=== Document Statistics ===$(NC)"
|
|
@echo -n "Chapters: "
|
|
@ls -1 $(CHAPTERS_DIR)/*.tex 2>/dev/null | wc -l
|
|
@echo -n "Total lines: "
|
|
@wc -l $(CHAPTERS_DIR)/*.tex 2>/dev/null | tail -1 | awk '{print $$1}'
|
|
@echo -n "Approx. words: "
|
|
@cat $(CHAPTERS_DIR)/*.tex 2>/dev/null | \
|
|
sed 's/\\[a-zA-Z]*\({[^}]*}\)\?//g' | wc -w
|
|
|
|
.PHONY: check
|
|
check:
|
|
@echo -e "$(BLUE)=== Checking Prerequisites ===$(NC)"
|
|
@command -v xelatex >/dev/null 2>&1 && \
|
|
echo -e "$(GREEN)✓ XeLaTeX found$(NC)" || \
|
|
echo -e "$(RED)✗ XeLaTeX not found$(NC)"
|
|
@command -v biber >/dev/null 2>&1 && \
|
|
echo -e "$(GREEN)✓ Biber found$(NC)" || \
|
|
echo -e "$(RED)✗ Biber not found$(NC)"
|
|
@command -v makeglossaries >/dev/null 2>&1 && \
|
|
echo -e "$(GREEN)✓ makeglossaries found$(NC)" || \
|
|
echo -e "$(RED)✗ makeglossaries not found$(NC)"
|
|
@command -v latexmk >/dev/null 2>&1 && \
|
|
echo -e "$(GREEN)✓ latexmk found$(NC)" || \
|
|
echo -e "$(RED)✗ latexmk not found$(NC)"
|
|
|
|
.PHONY: structure
|
|
structure:
|
|
@echo -e "$(BLUE)=== Project Structure ===$(NC)"
|
|
@tree -d -L 2 --charset ascii 2>/dev/null || \
|
|
find . -type d -maxdepth 2 | sed 's|./||' | sort
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# Help Target
|
|
# ------------------------------------------------------------------------------
|
|
.PHONY: help
|
|
help:
|
|
@echo -e "$(BLUE)==============================================================================="
|
|
@echo "HSRTReport LaTeX Template - Makefile Targets"
|
|
@echo -e "===============================================================================$(NC)"
|
|
@echo ""
|
|
@echo -e "$(GREEN)Main Targets:$(NC)"
|
|
@echo " make - Build document and open PDF"
|
|
@echo " make compile - Build the LaTeX document"
|
|
@echo " make full - Clean and rebuild everything"
|
|
@echo " make view - Open the PDF file"
|
|
@echo ""
|
|
@echo -e "$(GREEN)Chapter Management:$(NC)"
|
|
@echo " make chapter NUM=02 NAME=methodology - Create a new chapter"
|
|
@echo " make chapters - List all chapters"
|
|
@echo " make show-chapter NAME=02_methodology - Display chapter content"
|
|
@echo " make delete-chapter NAME=02_methodology - Delete a chapter (with backup)"
|
|
@echo ""
|
|
@echo -e "$(GREEN)Cleaning:$(NC)"
|
|
@echo " make clean - Remove all generated files"
|
|
@echo " make clean-aux - Remove auxiliary files only"
|
|
@echo " make clean-output - Remove output files only"
|
|
@echo " make distclean - Remove everything (git clean)"
|
|
@echo ""
|
|
@echo -e "$(GREEN)Development:$(NC)"
|
|
@echo " make watch - Continuous compilation on file changes"
|
|
@echo " make draft - Quick draft compilation"
|
|
@echo ""
|
|
@echo -e "$(GREEN)Utilities:$(NC)"
|
|
@echo " make count - Show document statistics"
|
|
@echo " make check - Check for required tools"
|
|
@echo " make structure - Show project structure"
|
|
@echo " make help - Show this help message"
|
|
@echo ""
|
|
@echo -e "$(YELLOW)Examples:$(NC)"
|
|
@echo " make chapter NUM=01 NAME=introduction"
|
|
@echo " make chapter NUM=02 NAME=literature_review"
|
|
@echo " make show-chapter NAME=01_introduction"
|
|
@echo ""
|
|
|
|
# Default target
|
|
.DEFAULT_GOAL := help
|