view GNUmakefile @ 2846:fdf1464e1977

Moved banner to the external file to make partial rollout possible. An idea is to have several banners and show them with different probability specified by split directive in the nginx.conf
author Sergey Budnevitch <sb@waeme.net>
date Tue, 10 May 2022 18:07:27 +0400
parents 7fb8f484166d
children c704a743f269
line wrap: on
line source


OUT =		libxslt
TEXT =		text
BANNER =	banner
ZIP =		gzip
NGINX_ORG =	/data/www/nginx.org
SHELL =		./umasked.sh

XSLS ?=		xslscript.pl
RSYNC =		rsync -v -rpc
CHMOD =		/bin/chmod -R g=u


define	XSLScript
	$(XSLS) -o $(2) $(1)
endef

define	XSLT
	xmllint --noout --valid $2
	xsltproc -o $3							\
		$(shell ff="$(strip $2)"; f=$${ff#xml/*/};		\
		if [ "$$f" != "$$ff" ]; then				\
		[ -f xml/en/$$f ] && echo --stringparam ORIGIN "en/$$f";\
		t=; for l in $(LANGS); do				\
		[ -f "xml/$$l/$$f" ] && t="$$t$$l "; done;		\
		echo --stringparam TRANS "\"$$t\"";			\
		fi)							\
		$(if $4,--stringparam $4 $5)				\
		$1 $2
endef

define 	JPEGNORM
	jpegtopnm $1							\
		| pamscale -width=150					\
		| pnmtojpeg -quality=95 -optimize -dct=float		\
		> $2
endef


COMMON_DEPS =								\
		xml/menu.xml						\
		xml/i18n.xml						\
		dtd/content.dtd						\
		xslt/dirname.xslt					\
		xslt/link.xslt						\
		xslt/style.xslt						\
		xslt/body.xslt						\
		xslt/menu.xslt						\
		xslt/banner.xslt					\
		xslt/ga.xslt						\
		xslt/content.xslt					\

ARTICLE_DEPS =								\
		$(COMMON_DEPS)						\
		xml/versions.xml					\
		dtd/article.dtd						\
		dtd/module.dtd						\
		xslt/article.xslt					\
		xslt/books.xslt						\
		xslt/directive.xslt					\
		xslt/donate.xslt					\
		xslt/download.xslt					\
		xslt/security.xslt					\
		xslt/versions.xslt					\

NEWS_DEPS =								\
		$(COMMON_DEPS)						\
		dtd/news.dtd						\
		xslt/news.xslt						\

LANGS =		en ru

YEARS = 								\
		2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019	\
		2020 2021

all:		news arx 404 $(LANGS)

news:		$(OUT)/index.html $(OUT)/index.rss
arx:		$(foreach year,$(YEARS),$(OUT)/$(year).html)
404:		$(OUT)/404.html


DIRIND_DEPS =
VARIND_DEPS =

define lang-specific

TOP=
DOCS=
REFS=
FAQ=
include xml/$(lang)/GNUmakefile

$(lang):								\
		$$(foreach f,index $$(TOP),$(OUT)/$(lang)/$$(f).html)	\
		$$(foreach f,index $$(DOCS) $$(REFS) $$(FAQ),		\
		$(OUT)/$(lang)/docs/$$(f).html)

$(OUT)/$(lang)/docs/index.html:						\
		$$(foreach f,$$(DOCS) $$(REFS),				\
		$(OUT)/$(lang)/docs/$$(f).html)

$(OUT)/$(lang)/docs/faq.html:						\
		$$(foreach f,$$(FAQ),$(OUT)/$(lang)/docs/$$(f).html)

ifneq (,$$(filter dirindex,$$(DOCS)))
DIRIND_DEPS +=	xml/$(lang)/docs/dirindex.xml
xml/$(lang)/docs/dirindex.xml:						\
		$$(foreach f,$$(REFS),xml/$(lang)/docs/$$(f).xml)	\
		xslt/dirindex.xslt
	echo "<modules>$$(patsubst %,					\
	<module name=\"%\"/>, $$(filter %.xml,$$^))</modules>" |	\
	xsltproc -o - --stringparam LANG $(lang)			\
	xslt/dirindex.xslt - |						\
	sed 's;xml/[^/]*/docs/;;g' > $$@
endif

ifneq (,$$(filter varindex,$$(DOCS)))
VARIND_DEPS +=	xml/$(lang)/docs/varindex.xml
xml/$(lang)/docs/varindex.xml:						\
		$$(foreach f,$$(REFS),xml/$(lang)/docs/$$(f).xml)	\
		xslt/varindex.xslt
	echo "<modules>$$(patsubst %,					\
	<module name=\"%\"/>, $$(filter %.xml,$$^))</modules>" |	\
	xsltproc -o - --stringparam LANG $(lang)			\
	xslt/varindex.xslt - |						\
	sed 's;xml/[^/]*/docs/;;g' > $$@
endif

endef

$(foreach lang, $(LANGS), $(eval $(call lang-specific)))

$(foreach lang, $(LANGS), $(OUT)/$(lang)/docs/dirindex.html): $(DIRIND_DEPS)

$(foreach lang, $(LANGS), $(OUT)/$(lang)/docs/varindex.html): $(VARIND_DEPS)

$(OUT)/index.html:							\
		xml/index.xml						\
		$(NEWS_DEPS)
	$(call XSLT, xslt/news.xslt, $<, $@)

$(OUT)/index.rss:							\
		xml/index.xml						\
		$(NEWS_DEPS)						\
		xslt/rss.xslt
	$(call XSLT, xslt/rss.xslt, $<, $@)


$(foreach year,$(YEARS),$(OUT)/$(year).html):				\
		xml/index.xml						\
		$(NEWS_DEPS)
	$(call XSLT, xslt/news.xslt, $<, $@, YEAR, $(basename $(notdir $@)))

$(OUT)/404.html:							\
		xml/404.xml						\
		$(COMMON_DEPS)						\
		dtd/error.dtd						\
		xslt/error.xslt
	$(call XSLT, xslt/error.xslt, $<, $@)

$(OUT)/%.html:	xml/%.xml						\
		$(ARTICLE_DEPS)
	$(call XSLT, xslt/article.xslt, $<, $@)


# Prevent intermediate .xslt files from being removed.
$(patsubst xsls/%.xsls,xslt/%.xslt,$(wildcard xsls/*.xsls)):

xslt/%.xslt:	xsls/%.xsls
	mkdir -p $(dir $@)
	$(call XSLScript, $<, $@)


genapi:
	$(MAKE) -C yaml


images:									\
		binary/books/complete_nginx_cookbook_2019.jpg		\
		binary/books/deploying_nginx_as_api_gateway.jpg		\
		binary/books/high_performance_caching.jpg		\
		binary/books/loadbalancing_cloud.jpg			\
		binary/books/f5_to_nginx_migration.jpg			\
		binary/books/cisco_ace_to_nginx.jpg			\
		binary/books/modsec3_and_nginx.jpg			\
		binary/books/nginx_cookbook.jpg				\
		binary/books/nginx_http_server_3rd_ed.jpg		\
		binary/books/nginx_troubleshooting.jpg			\
		binary/books/nginx_richtig_konfigurieren.jpg		\
		binary/books/practical_nginx_guide_jp.jpg		\
		binary/books/nginx_pocket_reference_jp.jpg		\
		binary/books/nginx_http_server_jp.jpg			\
		binary/books/nginx_1_web_server.jpg			\
		binary/books/nginx_http_server.jpg			\
		binary/books/nginx_in_practice.jpg			\
		binary/books/mastering_nginx.jpg			\
		binary/books/nginx_http_server_2nd_ed.jpg		\
		binary/books/instant_nginx_starter.jpg			\
		binary/books/nginx_module_extension.jpg			\
		binary/books/nginx_high_performance.jpg			\
		binary/books/nginx_essentials.jpg			\
		binary/books/nginx_http_server_4th_ed.jpg

binary/books/complete_nginx_cookbook_2019.jpg:				\
		sources/ebk-ORM-NGINX-Cookbook-mega-2019-150x185.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/deploying_nginx_as_api_gateway.jpg:			\
		sources/ebk-Deploying-NGINX-Plus-as-API-Gateway-150x185.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/high_performance_caching.jpg:				\
		sources/ebk-High-Performance-Caching-150x185.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/loadbalancing_cloud.jpg:					\
		sources/ebk-ORM-Load-Balancing-in-the-Cloud-150x185.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/f5_to_nginx_migration.jpg:				\
		sources/ebk-F5-BIG-IP-to-NGINX-Plus-150x185.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/cisco_ace_to_nginx.jpg:					\
		sources/ebk-Cisco-ACE-to-NGINX-150x185.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/modsec3_and_nginx.jpg:					\
		sources/ebk-ModSecurity-3.0-and-NGINX-150x185.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_cookbook.jpg:	sources/B05431_0.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_http_server_3rd_ed.jpg:				\
		sources/0337OS_4846_Nginx.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_troubleshooting.jpg:					\
		sources/51T7ds6JdBL._SX404_BO1,204,203,200_.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_richtig_konfigurieren.jpg:	sources/5106%2B0b2pbL.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/practical_nginx_guide_jp.jpg:	sources/9784774178660.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_pocket_reference_jp.jpg:				\
		sources/51JYTdy8jrL._SX335_BO1,204,203,200_.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_http_server_jp.jpg:	sources/1106030720.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_1_web_server.jpg:					\
		sources/Nginx\ 1\ Web\ Server\ Implementation\ Cookbook.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, "$<", $@)

binary/books/nginx_http_server.jpg:	sources/0868OS_MockupCover.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_in_practice.jpg:	sources/20807089-1_o.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/mastering_nginx.jpg:	sources/3311OS_4851_Mastering\ NGINX_0.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, "$<", $@)

binary/books/nginx_http_server_2nd_ed.jpg:	sources/2322OS_cov.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/instant_nginx_starter.jpg:	sources/5125OS_cov.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_module_extension.jpg:	sources/3046OS_cover.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_high_performance.jpg:	sources/1839OS.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_essentials.jpg:	sources/B04282_MockupCover_Normal.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

binary/books/nginx_http_server_4th_ed.jpg:	sources/9781788623551.jpg
	mkdir -p $(dir $@)
	$(call JPEGNORM, $<, $@)

.PHONY:	gzip
gzip:	rsync_gzip
	$(MAKE) do_gzip

rsync_gzip:
	$(CHMOD) $(OUT) $(TEXT) $(BANNER)
	$(RSYNC) --delete --exclude='*.gz' $(OUT)/ $(TEXT)/ $(BANNER) $(ZIP)/

do_gzip:	$(addsuffix .gz, $(wildcard $(ZIP)/*.html))		\
		$(addsuffix .gz,					\
			$(foreach lang, $(LANGS),			\
			$(foreach dir, . docs docs/dev docs/faq docs/http docs/mail docs/njs docs/stream, \
			$(wildcard $(ZIP)/$(lang)/$(dir)/*.html))))	\
		$(addsuffix .gz, $(wildcard $(ZIP)/$(BANNER)/*.html))	\
		$(ZIP)/index.rss.gz					\
		$(ZIP)/LICENSE.gz					\
		$(ZIP)/en/CHANGES.gz					\
		$(addsuffix .gz, $(wildcard $(ZIP)/en/CHANGES-?.?))	\
		$(addsuffix .gz, $(wildcard $(ZIP)/en/CHANGES-?.??))	\
		$(ZIP)/ru/CHANGES.ru.gz					\
		$(addsuffix .gz, $(wildcard $(ZIP)/ru/CHANGES.ru-?.?))	\
		$(addsuffix .gz, $(wildcard $(ZIP)/ru/CHANGES.ru-?.??))	\
		$(addsuffix .gz, $(wildcard $(ZIP)/keys/*.key))		\

	find $(ZIP) -type f ! -name '*.gz' -exec test \! -e {}.gz \; -print

	find $(ZIP) -type f -name '*.gz' | \
		while read f ; do test -e "$${f%.gz}" || rm -fv "$$f" ; done

$(ZIP)/%.gz:		$(ZIP)/%
		rm -f $<.gz
		gzip -9cn $< > $<.gz
		touch -r $< $<.gz

draft:	all
	$(CHMOD) $(OUT)
	$(RSYNC) --delete $(OUT)/ $(NGINX_ORG)/$(OUT)/

.PHONY:	binary
binary:
	$(CHMOD) binary
	$(RSYNC) binary/ $(NGINX_ORG)/

copy:
	$(CHMOD) $(ZIP) binary
	$(RSYNC) $(ZIP)/ binary/ $(NGINX_ORG)/
	$(RSYNC) --delete $(foreach lang, $(LANGS), $(ZIP)/$(lang))	\
		$(NGINX_ORG)/

dev:	xslt/version.xslt sign
dev:	NGINX:=$(shell xsltproc xslt/version.xslt xml/versions.xml)

stable:	xslt/version.xslt sign
stable:	NGINX:=$(shell xsltproc --stringparam VERSION stable		\
	xslt/version.xslt xml/versions.xml)

legacy:	xslt/version.xslt sign
legacy:	NGINX:=$(shell xsltproc --stringparam VERSION legacy		\
	xslt/version.xslt xml/versions.xml)

any:	sign
any:	NGINX=0.7.69


sign:
	@echo sign nginx-$(NGINX)

	gpg -sab binary/download/nginx-$(NGINX).tar.gz
	gpg -sab binary/download/nginx-$(NGINX).zip


dir.map:	xslt/dirmap.xslt xml/en/docs/dirindex.xml		\
		xml/en/docs/varindex.xml
	@xsltproc -o - xslt/dirmap.xslt xml/en/docs/dirindex.xml	\
	xml/en/docs/varindex.xml > $@

ifeq ($(patsubst %.nginx.com,YES,$(shell hostname)), YES)
all:	images

ifeq ($(NGINX_ORG), /data/www/nginx.org)
all:	dir.map
copy:	copy_dirmap
.PHONY:	copy_dirmap
copy_dirmap:
	/usr/local/bin/copy_dirmap.sh dir.map $(NGINX_ORG)
endif

draft:	copy_draft
.PHONY:	copy_draft
copy_draft:
	/usr/local/bin/copy_draft.sh $(NGINX_ORG)
endif

clean:
	rm -rf $(ZIP) $(OUT) xml/*/docs/dirindex.xml dir.map 		\
	xml/*/docs/varindex.xml

.DELETE_ON_ERROR: