42 endif |
42 endif |
43 |
43 |
44 ################################################################ |
44 ################################################################ |
45 # Version extracting/generation. |
45 # Version extracting/generation. |
46 |
46 |
|
47 VER_FILE := dist/misc/VERSION |
|
48 |
47 # Prevent making distribution with wrong version. |
49 # Prevent making distribution with wrong version. |
48 ifneq '' '$(filter deploy% dist%,$(MAKECMDGOALS))' |
50 ifneq '' '$(filter deploy% dist%,$(MAKECMDGOALS))' |
49 ifeq '' '$(MAKE_RESTARTS)' |
51 ifeq '' '$(MAKE_RESTARTS)' |
50 $(info $(shell rm -f VERSION)) |
52 $(shell rm -f $(VER_FILE)) |
51 endif |
53 endif |
52 endif |
54 endif |
53 |
55 |
54 # Here are vmajor and vminor. Look README section "Versioning rules." |
56 # Here are vmajor and vminor. Look README section "Versioning rules." |
55 -include VERSION |
57 -include $(VER_FILE) |
56 |
58 |
57 VERSION: |
59 $(VER_FILE): | $(dir $(VER_FILE)) |
58 \ |
60 \ |
59 vtagdist=$$(hg log -r . --template '{latesttagdistance}'); \ |
61 vtagdist=$$(hg log -r . --template '{latesttagdistance}'); \ |
60 vatrelease=$$([ $$vtagdist -le 1 ] && echo yes || echo no); \ |
62 vatrelease=$$([ $$vtagdist -le 1 ] && echo yes || echo no); \ |
61 vtag=$$(hg log -r . --template '{latesttag}'); \ |
63 vtag=$$(hg log -r . --template '{latesttag}'); \ |
62 vmajor=$${vtag#v}; \ |
64 vmajor=$${vtag#v}; \ |
71 echo "vtagdist=$$vtagdist"; \ |
73 echo "vtagdist=$$vtagdist"; \ |
72 echo "visclean=$$visclean"; \ |
74 echo "visclean=$$visclean"; \ |
73 echo "vatrelease=$$vatrelease"; \ |
75 echo "vatrelease=$$vatrelease"; \ |
74 echo "vmajor=$$vmajor"; \ |
76 echo "vmajor=$$vmajor"; \ |
75 echo "vminor=$$vminor"; \ |
77 echo "vminor=$$vminor"; \ |
76 } >VERSION |
78 } >$@ |
77 |
79 |
78 ################################################################ |
80 ################################################################ |
79 # Determine platform/environment. |
81 # Determine platform/environment. |
80 |
82 |
81 host_os = unix |
83 host_os = unix |
126 # Project dirs/files. |
129 # Project dirs/files. |
127 |
130 |
128 pkgname = gadict |
131 pkgname = gadict |
129 fullpkgname = $(pkgname)-$(vmajor).$(vminor) |
132 fullpkgname = $(pkgname)-$(vmajor).$(vminor) |
130 |
133 |
|
134 GADICT_FILES := $(wildcard *.gadict) |
|
135 |
131 C5_FILES := $(wildcard *.dict-c5) |
136 C5_FILES := $(wildcard *.dict-c5) |
132 DICT_FILES := $(C5_FILES:.dict-c5=.dict) |
137 DICT_FILES := $(C5_FILES:.dict-c5=.dict) |
133 DICTDZ_FILES := $(C5_FILES:.dict-c5=.dict.dz) |
138 DICTDZ_FILES := $(C5_FILES:.dict-c5=.dict.dz) |
134 INDEX_FILES := $(C5_FILES:.dict-c5=.index) |
139 INDEX_FILES := $(C5_FILES:.dict-c5=.index) |
135 |
140 |
136 RST_GEN_FILES := VERSION.rst STAT.rst index.rst |
141 RST_TMPL_FILE = dist/misc/rst.tmpl |
137 RST_COMMON_FILES := VERSION.rst header.rst |
142 RST_CSS_FILE = www/tmpl/rst.css |
138 RST_FILES := $(filter-out $(RST_COMMON_FILES),$(sort $(wildcard *.rst) $(RST_GEN_FILES))) |
143 |
139 RST_HTML_FILES := $(RST_FILES:.rst=.html) |
144 RST_GEN_FILES := STAT.rst |
|
145 RST_COMMON_FILES := header.rst |
|
146 RST_FILES := $(wildcard www/*.rst) |
|
147 RST_HTML_FILES := $(patsubst www/%.rst,dist/www/%.html,$(RST_FILES)) |
|
148 |
|
149 INDEX_HTML_FILE := dist/www/index.html |
|
150 |
|
151 STAT_RST_FILE := dist/misc/STAT.rst |
|
152 STAT_HTML_FILE := dist/www/STAT.html |
|
153 |
|
154 HTML_FILES := $(RST_HTML_FILES) $(INDEX_HTML_FILE) $(STAT_HTML_FILE) |
140 |
155 |
141 LOGO_NAME := logo |
156 LOGO_NAME := logo |
142 LOGO_SVG := $(LOGO_NAME).svg |
157 LOGO_SVG := $(LOGO_NAME).svg |
143 LOGO_DIM := 32x32 48x48 64x64 |
158 LOGO_DIM := 32x32 48x48 64x64 |
144 LOGO_PNG_FILES := $(patsubst %,$(LOGO_NAME)-%.png,$(LOGO_DIM)) |
159 LOGO_PNG_FILES := $(patsubst %,$(LOGO_NAME)-%.png,$(LOGO_DIM)) |
145 |
160 |
146 DIST_DIR = $(fullpkgname) |
161 DIST_DIR = $(fullpkgname) |
147 DISTSRC_DIR = $(fullpkgname)_src |
162 DISTSRC_DIR = $(fullpkgname)_src |
148 |
163 |
149 DIST_FILES = $(DICTDZ_FILES) $(INDEX_FILES) $(RST_HTML_FILES) $(RST_FILES) VERSION |
164 DIST_FILES = $(DICTDZ_FILES) $(INDEX_FILES) $(RST_HTML_FILES) $(RST_FILES) |
150 |
165 |
151 DISTSRC_HELPER_FILES = VERSION Makefile rst.css .dir-locals.el |
166 DISTSRC_HELPER_FILES = Makefile rst.css .dir-locals.el |
152 DISTSRC_FILES = $(C5_FILES) $(RST_FILES) $(DISTSRC_HELPER_FILES) |
167 DISTSRC_FILES = $(C5_FILES) $(RST_FILES) $(DISTSRC_HELPER_FILES) |
153 |
168 |
154 DIST_TARBALLS = $(DIST_DIR).tar.gz $(DIST_DIR).tar.bz2 |
169 DIST_TARBALLS = $(DIST_DIR).tar.gz $(DIST_DIR).tar.bz2 |
155 DISTSRC_TARBALLS = $(DISTSRC_DIR).tar.gz $(DISTSRC_DIR).tar.bz2 |
170 DISTSRC_TARBALLS = $(DISTSRC_DIR).tar.gz $(DISTSRC_DIR).tar.bz2 |
156 |
171 |
157 ################################################################ |
172 ################################################################ |
158 # Deploy targets. |
173 # Deploy/release targets. |
159 |
174 |
160 .PHONY: deploy |
175 .PHONY: deploy |
161 deploy: deploy2defun deploy2sf |
176 deploy: deploy2defun deploy2sf |
|
177 |
|
178 .PHONY: release |
|
179 release: release2defun release2sf |
|
180 |
|
181 .PHONY: release2defun |
|
182 release2defun: validate-release deploy2defun |
|
183 |
|
184 .PHONY: release2sf |
|
185 release2defun: validate-release deploy2sf |
162 |
186 |
163 |
187 |
164 DEFUN_USER ?= user |
188 DEFUN_USER ?= user |
165 DEFUN_HG_SRV ?= hg.defun.work |
189 DEFUN_HG_SRV ?= hg.defun.work |
166 DEFUN_HG_DIR ?= /srv/hg/gadict |
190 DEFUN_HG_DIR ?= /srv/hg/gadict |
173 .PHONY: deploy2defun-src |
197 .PHONY: deploy2defun-src |
174 deploy2defun-src: |
198 deploy2defun-src: |
175 hg push ssh://$(DEFUN_USER)@$(DEFUN_HG_SRV)/$(DEFUN_HG_DIR) || [ $$? = 1 ] |
199 hg push ssh://$(DEFUN_USER)@$(DEFUN_HG_SRV)/$(DEFUN_HG_DIR) || [ $$? = 1 ] |
176 |
200 |
177 .PHONY: deploy2defun-www |
201 .PHONY: deploy2defun-www |
178 deploy2defun-www: $(RST_HTML_FILES) |
202 deploy2defun-www: $(HTML_FILES) |
179 ( \ |
203 ( \ |
180 echo 'cd $(DEFUN_WWW_DIR)'; \ |
204 echo 'cd $(DEFUN_WWW_DIR)'; \ |
181 for f in $(RST_HTML_FILES); do \ |
205 for f in $(HTML_FILES); do \ |
182 echo "put $$f"; \ |
206 n=$${f##*/}; \ |
183 echo "chmod 644 $$f"; \ |
207 echo "put $$f $$n"; \ |
|
208 echo "chmod 644 $$n"; \ |
184 done; \ |
209 done; \ |
185 echo 'quit'; \ |
210 echo 'quit'; \ |
186 ) | sftp -b - $(DEFUN_USER)@$(DEFUN_WWW_SRV) |
211 ) | sftp -b - $(DEFUN_USER)@$(DEFUN_WWW_SRV) |
187 |
212 |
188 |
213 |
192 # $ sftp $(SF_USER),$(pkgname)@web.sourceforge.net |
217 # $ sftp $(SF_USER),$(pkgname)@web.sourceforge.net |
193 # as it may require interactive input for accepting server public key. |
218 # as it may require interactive input for accepting server public key. |
194 # Next time any action fully automated. |
219 # Next time any action fully automated. |
195 |
220 |
196 .PHONY: deploy2sf |
221 .PHONY: deploy2sf |
197 deploy2sf: deploy2sf-src deploy2sf-www deploy2sf-voa deploy2sf-release |
222 deploy2sf: deploy2sf-src deploy2sf-www deploy2sf-voa |
198 |
223 |
199 .PHONY: deploy2sf-src |
224 .PHONY: deploy2sf-src |
200 deploy2sf-src: |
225 deploy2sf-src: |
201 hg push ssh://$(SF_USER)@hg.code.sf.net/p/$(pkgname)/code || [ $$? = 1 ] |
226 hg push ssh://$(SF_USER)@hg.code.sf.net/p/$(pkgname)/code || [ $$? = 1 ] |
202 |
227 |
203 # Will be accessed via http://$(pkgname).sourceforge.net |
228 # Will be accessed via http://$(pkgname).sourceforge.net |
204 .PHONY: deploy2sf-www |
229 .PHONY: deploy2sf-www |
205 deploy2sf-www: deploy-check $(RST_HTML_FILES) |
230 deploy2sf-www: $(HTML_FILES) |
206 ( echo 'cd htdocs'; \ |
231 ( echo 'cd htdocs'; \ |
207 for f in $(RST_HTML_FILES); do \ |
232 for f in $(HTML_FILES); do \ |
208 echo "put $$f"; \ |
233 n=$${f##*/}; \ |
209 echo "chmod 644 $$f"; \ |
234 echo "put $$f $$n"; \ |
|
235 echo "chmod 644 $$n"; \ |
210 done; \ |
236 done; \ |
211 echo 'quit'; \ |
237 echo 'quit'; \ |
212 ) | sftp -b - $(SF_USER),$(pkgname)@web.sourceforge.net |
238 ) | sftp -b - $(SF_USER),$(pkgname)@web.sourceforge.net |
213 |
239 |
214 .PHONY: deploy2sf-voa |
240 .PHONY: deploy2sf-voa |
217 echo "put voa-special.pdf"; \ |
243 echo "put voa-special.pdf"; \ |
218 echo "chmod 644 voa-special.pdf"; \ |
244 echo "chmod 644 voa-special.pdf"; \ |
219 echo 'quit'; \ |
245 echo 'quit'; \ |
220 ) | sftp -b - $(SF_USER),$(pkgname)@web.sourceforge.net |
246 ) | sftp -b - $(SF_USER),$(pkgname)@web.sourceforge.net |
221 |
247 |
222 .PHONY: deploy2sf-release |
248 .PHONY: release2sf |
223 deploy2sf-release: deploy-check $(DIST_TARBALLS) $(DISTSRC_TARBALLS) |
249 deploy2sf-release: validate-release $(DIST_TARBALLS) $(DISTSRC_TARBALLS) |
|
250 exit 1 |
|
251 : TODO broken due to new project hierarchy |
224 ( echo 'cd /home/frs/project/$(shell v=$(pkgname); echo $${v:0:1}/$${v:0:2})/$(pkgname)'; \ |
252 ( echo 'cd /home/frs/project/$(shell v=$(pkgname); echo $${v:0:1}/$${v:0:2})/$(pkgname)'; \ |
225 echo "put README.rst"; \ |
253 echo "put README.rst"; \ |
226 echo "chmod 644 README.rst"; \ |
254 echo "chmod 644 README.rst"; \ |
227 echo "mkdir v$(vmajor).$(vminor)"; \ |
255 echo "mkdir v$(vmajor).$(vminor)"; \ |
228 echo "cd v$(vmajor).$(vminor)"; \ |
256 echo "cd v$(vmajor).$(vminor)"; \ |
318 docs: html |
346 docs: html |
319 |
347 |
320 .PHONY: html |
348 .PHONY: html |
321 html: $(RST_HTML_FILES) |
349 html: $(RST_HTML_FILES) |
322 |
350 |
323 $(RST_HTML_FILES): %.html: %.rst $(RST_COMMON_FILES) rst.css $(BUILD_SCRIPTS) |
351 $(INDEX_HTML_FILE): dist/www/README.html |
324 $(RST2HTML) $(RST2HTML_FLAGS) --stylesheet=rst.css $*.rst $@ |
352 cp $< $@ |
325 |
353 |
326 VERSION.rst: VERSION $(BUILD_SCRIPTS) |
354 $(RST_HTML_FILES): dist/www/%.html: www/%.rst $(RST_CSS_FILE) $(RST_TMPL_FILE) $(BUILD_SCRIPTS) | dist/www |
|
355 $(RST2HTML) $(RST2HTML_FLAGS) --stylesheet=$(RST_CSS_FILE) --template=$(RST_TMPL_FILE) www/$*.rst $@ |
|
356 |
|
357 dist/www: |
|
358 mkdir -p $@ |
|
359 |
|
360 $(RST_TMPL_FILE): www/tmpl/rst.tmpl.in $(BUILD_SCRIPTS) | $(dir $(RST_TMPL_FILE)) |
|
361 \ |
|
362 [[ ${visclean} = no ]] && warn1='<b>Warning</b>: Build done with local changes!' || :; \ |
|
363 [[ ${vatrelease} = no ]] && warn2='<b>Warning</b>: Build is far from latest <tt>$(vtag)</tt> release state by $(vtagdist) changes.' || :; \ |
|
364 sed -e "s|{date}|$$(date +%F)|" -e "s|{rev}|$$(hg id -i)|" -e "s|{warn1}|$$warn1|" -e "s|{warn2}|$$warn2|" <$< >$@ |
|
365 |
|
366 ################################################################ |
|
367 # Article statistics. |
|
368 |
|
369 .PHONY: stat |
|
370 stat: $(STAT_HTML_FILE) |
|
371 |
|
372 $(STAT_HTML_FILE): $(STAT_RST_FILE) $(RST_CSS_FILE) $(RST_TMPL_FILE) | dist/www |
|
373 $(RST2HTML) $(RST2HTML_FLAGS) --stylesheet=$(RST_CSS_FILE) --template=$(RST_TMPL_FILE) $< $@ |
|
374 |
|
375 $(STAT_RST_FILE): $(GADICT_FILES) $(BUILD_SCRIPTS) |
327 { \ |
376 { \ |
328 echo '``$(pkgname)`` ``v$(vmajor).$(vminor)`` built on ``'$$(date +%F)'`` from revision ``$(vrev)``.'; \ |
377 echo '==========================='; \ |
329 echo; \ |
378 echo ' gadict project statistics'; \ |
330 case ${visclean} in \ |
379 echo '==========================='; \ |
331 yes) : ;; \ |
380 echo '.. contents::'; \ |
332 no) echo 'WARNING!! Source tree has local changes!';; \ |
381 echo ' :local:'; \ |
333 esac; \ |
382 echo; \ |
334 echo; \ |
383 echo '======================================== ====='; \ |
335 case ${vatrelease} in \ |
384 echo ' Dictionary Count'; \ |
336 yes) : ;; \ |
385 echo '======================================== ====='; \ |
337 no) echo 'Package is far from release state by $(vtagdist) changes.';; \ |
386 total=0; \ |
338 esac; \ |
387 for dic in $(GADICT_FILES); do \ |
339 } >$@ |
388 cnt=`grep '^__' $$dic | wc -l`; \ |
340 |
389 printf '%40s %5s\n' $${dic%.dict-c5} $$cnt; \ |
341 index.rst: README.rst |
390 total=$$(($$total + $$cnt)); \ |
342 cp $< $@ |
391 done; \ |
|
392 printf '%40s %5s\n' '**Total**' $$total; \ |
|
393 echo '======================================== ====='; \ |
|
394 } >$@ |
343 |
395 |
344 ################################################################ |
396 ################################################################ |
345 # Misc targets. |
397 # Misc targets. |
346 |
398 |
347 .PHONY: logo |
399 .PHONY: logo |
385 |
437 |
386 .PHONY: todo |
438 .PHONY: todo |
387 todo: |
439 todo: |
388 grep -nH 'TODO\|XXX' $(RST_FILES) $(C5_FILES) |
440 grep -nH 'TODO\|XXX' $(RST_FILES) $(C5_FILES) |
389 |
441 |
390 .PHONY: stat |
|
391 stat: STAT.rst |
|
392 |
|
393 STAT.rst: $(C5_FILES) header.rst VERSION.rst $(BUILD_SCRIPTS) |
|
394 { \ |
|
395 echo '.. include:: header.rst'; \ |
|
396 echo; \ |
|
397 echo '============================'; \ |
|
398 echo ' gadict project statistics.'; \ |
|
399 echo '============================'; \ |
|
400 echo '.. contents::'; \ |
|
401 echo; \ |
|
402 echo 'Document version.'; \ |
|
403 echo '================='; \ |
|
404 echo; \ |
|
405 echo '.. include:: VERSION.rst'; \ |
|
406 echo; \ |
|
407 echo 'Statistics on count of articles in gadict dictionaries.'; \ |
|
408 echo '======================================================='; \ |
|
409 echo; \ |
|
410 echo 'You must know that some words have articles (usually but not always same) in'; \ |
|
411 echo 'several dictionaries. So real count of words is less then total count.'; \ |
|
412 echo; \ |
|
413 echo '======================================== ====='; \ |
|
414 echo ' Dictionary Count'; \ |
|
415 echo '======================================== ====='; \ |
|
416 total=0; \ |
|
417 for dic in $(C5_FILES); do \ |
|
418 cnt=`grep '^_____' $$dic | wc -l`; \ |
|
419 printf '%40s %5s\n' $${dic%.dict-c5} $$cnt; \ |
|
420 total=$$(($$total + $$cnt)); \ |
|
421 done; \ |
|
422 printf '%40s %5s\n' '**Total**' $$total; \ |
|
423 echo '======================================== ====='; \ |
|
424 } >$@ |
|
425 |
|
426 .PHONY: logo-png |
442 .PHONY: logo-png |
427 logo-png: logo-64x64.png |
443 logo-png: logo-64x64.png |
428 |
444 |
429 # Require: |
445 # Require: |
430 # $ sudo apt-get install imagemagick librsvg2-bin |
446 # $ sudo apt-get install imagemagick librsvg2-bin |