Include only local subsections into TOC. This prevent duplication of
TOC when build single page HTML document. Also this make unnecessary CSS hack
to hide document title as top level section.
################################################################
# Standard GNU Makefile settings.
SHELL = /bin/sh
export PATH := /bin:/usr/bin:${PATH}
# Disable built in pattern rules.
MAKEFLAGS += -r
# Disable built in variables.
MAKEFLAGS += -R
# Disable built in suffix rules.
.SUFFIXES:
# Delete target file if command fails.
.DELETE_ON_ERROR:
# Default target.
.DEFAULT_GOAL = all
################################################################
# Platform definition.
host_os := linux
ifneq '' '$(WINDIR)'
host_os := cygwin
endif
target_os := $(host_os)
################################################################
# Build tool definition/switches.
RST2HTML := rst2html
ifeq '$(host_os)' 'cygwin'
RST2HTML := rst2html.py
endif
RST_WARNING_FLAGS := --halt warning
RST_RENDER_FLAGS := --strip-comments --embed-stylesheet --no-xml-declaration --math-output=MathJax
RST_FLAGS := $(RST_WARNING_FLAGS) $(RST_RENDER_FLAGS)
################################################################
# Proj dirs/files.
RST_FILES := $(filter-out HEADER.rst,$(wildcard *.rst))
TXT_FILES := $(wildcard *.txt)
HTML_DIR := tips-html
RST_HTML_FILES := $(patsubst %.rst,$(HTML_DIR)/%.html,$(RST_FILES))
HTML_FILES := $(RST_HTML_FILES) \
$(HTML_DIR)/index.html $(HTML_DIR)/iframe.html
TXT__FILES := $(addprefix $(HTML_DIR)/,$(TXT_FILES))
CHM_FILES := $(addprefix $(HTML_DIR)/,chm.hhp chm.hhc chm.stp)
DIRS := $(HTML_DIR)
################################################################
# Deploy targets.
WWW_SRV_NAME := defun.work
WWW_SRV_USER := user
HG_SRV_NAME := hg.defun.work
HG_SRV_USER := user
LOCAL_DIR := /srv/www/tips
ifneq '' '$(filter deploy%,$(MAKECMDGOALS))'
$(shell rm -f HEADER.rst)
endif
.PHONY: deploy
deploy: deploy2defun-web deploy2defun-hg deploy2sf-web deploy2sf-hg
# Will be accessible via: http://tips.defun.work/
.PHONY: deploy2defun-web
deploy2defun-web: html
rsync --delete -avP -e ssh tips-html/ $(WWW_SRV_USER)@$(WWW_SRV_NAME):/srv/www/tips/
.PHONY: deploy2defun-hg
deploy2defun-hg:
hg push ssh://$(HG_SRV_USER)@$(HG_SRV_NAME)//srv/hg/tips || [ $$? = 1 ]
# Will be accessible via: http://gavenkoa.users.sourceforge.net/tips-html/
.PHONY: deploy2sf-web
deploy2sf-web: html
rsync --delete -avP -e ssh tips-html/ gavenkoa@frs.sourceforge.net:/home/user-web/g/ga/gavenkoa/htdocs/tips-html/
.PHONY: deploy2sf-hg
deploy2sf-hg:
hg push ssh://gavenkoa@hg.code.sf.net/u/gavenkoa/tips || [ $$? = 1 ]
.PHONY: deploy2local
deploy2local: html
rsync --delete -avP tips-html/ $(LOCAL_DIR)
################################################################
# Build targets.
.PHONY: all
all:
.PHONY: html
html: $(HTML_FILES) $(TXT__FILES)
$(HTML_DIR)/%.html: %.rst HEADER.rst rst.css rst.tmpl $(MAKEFILE_LIST) | $(HTML_DIR)
$(RST2HTML) $(RST_FLAGS) --stylesheet=rst.css --template=rst.tmpl $*.rst $@
$(HTML_DIR)/iframe.html: $(RST_FILES) $(MAKEFILE_LIST) | $(HTML_DIR)
{ \
echo '<html><head>'; \
echo '<meta charset="utf-8">'; \
echo '<style>'; \
echo 'a { text-decoration: none; color: hsl(240, 100%, 50%); }'; \
echo 'a:hover { opacity: .5; }'; \
echo '</style></head><body>'; \
echo '<ul style="padding-left: 1em;">'; \
for f in $(sort $(RST_FILES)); do \
n=$${f%.rst}; \
printf '<li><a target="_parent" href="%s.html">%s</a></li>\n' $$n $$n; \
done; \
echo '</ul>'; \
echo '</body></html>'; \
} >$@
HEADER.rst: $(MAKEFILE_LIST)
{ \
echo '.. raw:: html'; \
echo; \
echo ' <div id="sidebar"><iframe src="iframe.html"></iframe></div>'; \
echo; \
echo '.. _About: README.html'; \
echo '.. _`Contacts`: http://resume.defun.work/'; \
echo '.. _`Oleksandr Gavenko`: http://resume.defun.work/'; \
echo '.. _`gavenkoa`: http://resume.defun.work/'; \
echo '.. _Licence: README.html#tips-licence'; \
echo; \
echo '.. container:: header'; \
echo; \
echo ' [ About_ | Licence_ | `Contacts`_ ]'; \
echo '.. container:: header small'; \
echo; \
echo ' Written by Oleksandr Gavenko (AKA gavenkoa), compiled at ``'`date +%F`'`` from rev ``'`hg id -i`'``.'; \
} >$@
$(HTML_DIR)/index.html: $(HTML_DIR)/README.html $(MAKEFILE_LIST) | $(HTML_DIR)
cp $< $@
$(HTML_DIR)/%.html: %.html $(MAKEFILE_LIST) | $(HTML_DIR)
cp $< $@
$(HTML_DIR)/%.txt: %.txt $(MAKEFILE_LIST) | $(HTML_DIR)
cp $< $@
.PHONY: chm
chm: html $(CHM_FILES) $(HTML_DIR)/iframe.html
cd $(HTML_DIR); for file in *.html; do sed -i '/<\?xml.*\?>/d' $$file; done
$(HTML_DIR)/%.stp: %.stp $(MAKEFILE_LIST) | $(HTML_DIR)
cp $< $@
$(HTML_DIR)/chm.hhp: chm-hhp.sh $(MAKEFILE_LIST) | $(HTML_DIR)
./chm-hhp.sh >$@
$(HTML_DIR)/chm.hhc: chm-hhc.sh $(MAKEFILE_LIST) | $(HTML_DIR)
./chm-hhc.sh >$@
################################################################
# Init targets.
$(DIRS):
mkdir -p $@
################################################################
# Clean targets.
.PHONY: distclean
distclean: clean
.PHONY: clean
clean:
rm -r -f $(DIRS) HEADER.rst
################################################################
# Helper target.
.PHONY: help
help:
@echo Supported targets:
@sed -n -e '/^[[:alnum:]_-]*:/{s=^\(.*\):.*= \1=;p;}' $(MAKEFILE_LIST)
.PHONY: check-format-policy
check-format-policy:
\
for f in *.rst; do \
if grep '.. -\*- coding: utf-8; -\*-' $$f >/dev/null; then :; else \
echo $$f:1:" Has no 'coding: utf-8' directive."; \
fi; \
if grep '.. include:: HEADER.rst' $$f >/dev/null; then :; else \
echo $$f:2:" Has no 'include:: HEADER.rst' directive."; \
fi; \
if grep '.. contents::' $$f >/dev/null; then :; else \
echo $$f:7:" Has no 'contents::' directive."; \
fi; \
done