name-website/Makefile

72 lines
1.9 KiB
Makefile

# ΞSUS Website Build System
# Environment variables:
# ESUS_PUBLISH_HOST - target host for deployment
PANDOC = pandoc
SRC_DIR = src
STATIC_DIR = static
STAGING_DIR = staging
PAPER_DIR = $(SRC_DIR)/paper
TEMPLATE = pandoc-template.html
MD_FILES := $(wildcard $(SRC_DIR)/*.md)
TEX_FILES := $(wildcard $(PAPER_DIR)/*.tex)
HTML_FILES := $(patsubst $(SRC_DIR)/%.md,$(STAGING_DIR)/%.html,$(MD_FILES))
# Default target
all: build
# Build HTML from markdown
build: $(HTML_FILES) copy-static
# Create staging directory
$(STAGING_DIR):
mkdir -p $(STAGING_DIR)
# Convert markdown to HTML
$(STAGING_DIR)/esus-philosophy.pdf: $(TEX_FILES) $(PAPER_DIR)/compile.sh | $(STAGING_DIR)
( cd $(SRC_DIR)/paper && ./compile.sh )
cp $(PAPER_DIR)/main_document.pdf $@
$(STAGING_DIR)/%.html: $(SRC_DIR)/%.md $(TEMPLATE) | $(STAGING_DIR)
$(PANDOC) \
--from markdown \
--to html5 \
--template=$(TEMPLATE) \
--standalone \
--css=css/style.css \
--toc \
--output=$@ \
$<
# Copy static files
copy-static: $(STAGING_DIR)/esus-philosophy.pdf | $(STAGING_DIR)
rsync -avz --exclude='.*' --delete $(STATIC_DIR)/* $(STAGING_DIR)/
# Clean staging directory
clean:
rm -rf $(STAGING_DIR)
# Upload to server (requires ESUS_PUBLISH_HOST environment variable)
upload: build
@if [ -z "$(ESUS_PUBLISH_HOST)" ]; then \
echo "Error: ESUS_PUBLISH_HOST environment variable not set"; \
exit 1; \
fi
rsync -avz --exclude='.*' --delete $(STAGING_DIR)/ $(ESUS_PUBLISH_HOST):/var/www/html/
# Development server (requires Python)
serve: build
@echo "Starting development server at http://localhost:8000"
cd $(STAGING_DIR) && python3 -m http.server 8000
# Watch for changes (requires inotify-tools)
watch:
@echo "Watching for changes..."
while inotifywait -e modify -r $(SRC_DIR) $(STATIC_DIR) $(TEMPLATE) 2>/dev/null; do \
make build; \
echo "Site rebuilt"; \
done
.PHONY: all build copy-static clean upload serve watch