|
1 |
|
2 ################################################################ |
|
3 # Standard GNU Makefile settings. |
|
4 |
|
5 SHELL = /bin/sh |
|
6 export PATH := /bin:/usr/bin:${PATH} |
|
7 |
|
8 # Disable built in pattern rules. |
|
9 MAKEFLAGS += -r |
|
10 # Disable built in variables. |
|
11 MAKEFLAGS += -R |
|
12 # Disable built in suffix rules. |
|
13 .SUFFIXES: |
|
14 # Delete target file if command fails. |
|
15 .DELETE_ON_ERROR: |
|
16 # Default target. |
|
17 .DEFAULT_GOAL = all |
|
18 |
|
19 ################################################################ |
|
20 # Platform definition. |
|
21 |
|
22 host_os := linux |
|
23 ifneq '' '$(WINDIR)' |
|
24 host_os := cygwin |
|
25 endif |
|
26 target_os := $(host_os) |
|
27 |
|
28 ################################################################ |
|
29 # Build tool definition/switches. |
|
30 |
|
31 RST2HTML := rst2html |
|
32 ifeq '$(host_os)' 'cygwin' |
|
33 RST2HTML := rst2html.py |
|
34 endif |
|
35 |
|
36 RST_WARNING_FLAGS := --halt warning |
|
37 RST_RENDER_FLAGS := --strip-comments --embed-stylesheet --no-xml-declaration --math-output=HTML --initial-header-level=2 |
|
38 RST_FLAGS := $(RST_WARNING_FLAGS) $(RST_RENDER_FLAGS) |
|
39 |
|
40 ################################################################ |
|
41 # Proj dirs/files. |
|
42 |
|
43 RST_FILES := $(wildcard *.rst) |
|
44 |
|
45 TMPL_DIR := tmpl |
|
46 |
|
47 HTML_DIR := dist/multi-html |
|
48 RST_HTML_FILES := $(patsubst %.rst,$(HTML_DIR)/%.html,$(RST_FILES)) |
|
49 HTML_FILES := $(RST_HTML_FILES) $(HTML_DIR)/iframe.html |
|
50 |
|
51 ################################################################ |
|
52 # Deploy targets. |
|
53 |
|
54 WWW_SRV_NAME := defun.work |
|
55 WWW_SRV_USER := user |
|
56 HG_SRV_NAME := hg.defun.work |
|
57 HG_SRV_USER := user |
|
58 LOCAL_DIR := /srv/www/stat |
|
59 |
|
60 ifneq '' '$(filter deploy%,$(MAKECMDGOALS))' |
|
61 $(shell rm -f $(HTML_DIR)/rst.tmpl) |
|
62 endif |
|
63 |
|
64 .PHONY: deploy |
|
65 deploy: deploy2defun-web deploy2defun-hg |
|
66 |
|
67 # Will be accessible via: http://stat.defun.work/ |
|
68 .PHONY: deploy2defun-web |
|
69 deploy2defun-web: html |
|
70 rsync --delete -avP -e ssh $(HTML_DIR)/ $(WWW_SRV_USER)@$(WWW_SRV_NAME):/srv/www/stat/ |
|
71 |
|
72 .PHONY: deploy2defun-hg |
|
73 deploy2defun-hg: |
|
74 hg push ssh://$(HG_SRV_USER)@$(HG_SRV_NAME)//srv/hg/tips || [ $$? = 1 ] |
|
75 |
|
76 .PHONY: deploy2local |
|
77 deploy2local: html |
|
78 rsync --delete -avP $(HTML_DIR)/ $(LOCAL_DIR) |
|
79 |
|
80 ################################################################ |
|
81 # Build targets. |
|
82 |
|
83 .PHONY: all |
|
84 all: |
|
85 |
|
86 .PHONY: html |
|
87 html: $(HTML_FILES) |
|
88 |
|
89 $(HTML_DIR)/%.html: %.rst $(TMPL_DIR)/rst.css $(TMPL_DIR)/rst.tmpl $(MAKEFILE_LIST) | $(HTML_DIR) |
|
90 $(RST2HTML) $(RST_FLAGS) --stylesheet=$(TMPL_DIR)/rst.css --template=$(TMPL_DIR)/rst.tmpl $*.rst $@ |
|
91 |
|
92 $(HTML_DIR)/iframe.html: $(RST_FILES) $(MAKEFILE_LIST) | $(HTML_DIR) |
|
93 { \ |
|
94 echo '<html><head>'; \ |
|
95 echo '<meta charset="utf-8">'; \ |
|
96 echo '<style>'; \ |
|
97 echo 'a { text-decoration: none; color: hsl(240, 100%, 50%); }'; \ |
|
98 echo 'a:hover { opacity: .5; }'; \ |
|
99 echo '</style></head><body>'; \ |
|
100 echo '<ul style="padding-left: 1em;">'; \ |
|
101 for f in $(sort $(RST_FILES)); do \ |
|
102 n=$${f%.rst}; \ |
|
103 printf '<li><a target="_parent" href="%s.html">%s</a></li>\n' $$n $$n; \ |
|
104 done; \ |
|
105 echo '</ul>'; \ |
|
106 echo '</body></html>'; \ |
|
107 } >$@ |
|
108 |
|
109 $(TMPL_DIR)/rst.tmpl: $(TMPL_DIR)/rst.tmpl.in $(MAKEFILE_LIST) |
|
110 sed -e "s|{date}|$$(date +%F)|" -e "s|{rev}|$$(hg id -i)|" <$< >$@ |
|
111 |
|
112 ################################################################ |
|
113 # Init targets. |
|
114 |
|
115 $(HTML_DIR): |
|
116 mkdir -p $@ |
|
117 |
|
118 ################################################################ |
|
119 # Clean targets. |
|
120 |
|
121 .PHONY: distclean |
|
122 distclean: clean |
|
123 |
|
124 .PHONY: clean |
|
125 clean: |
|
126 rm -r -f $(HTML_DIR) |
|
127 |
|
128 ################################################################ |
|
129 # Helper target. |
|
130 |
|
131 .PHONY: help |
|
132 help: |
|
133 @echo Supported targets: |
|
134 @sed -n -e '/^[[:alnum:]_-]*:/{s=^\(.*\):.*= \1=;p;}' $(MAKEFILE_LIST) |
|
135 |
|
136 .PHONY: check-format-policy |
|
137 check-format-policy: |
|
138 \ |
|
139 for f in $(RST_FILES); do \ |
|
140 if grep '^.. -\*- coding: utf-8; -\*-' $$f >/dev/null; then :; else \ |
|
141 echo $$f:1:" Has no 'coding: utf-8' directive."; \ |
|
142 fi; \ |
|
143 if grep '^.. contents::' $$f >/dev/null; then :; else \ |
|
144 echo $$f:7:" Has no 'contents::' directive."; \ |
|
145 fi; \ |
|
146 if grep '^ :local:' $$f >/dev/null; then :; else \ |
|
147 echo $$f:7:" Has no ':local:' directive."; \ |
|
148 fi; \ |
|
149 done |
|
150 |