# 1:source 2:locales define SOURCE_template $(1): $$($(1)_MODULES) $(dummy_MODULES) .PHONY: $(1) endef $(foreach source,$(SOURCES),$(eval $(call SOURCE_template,$(source),$($(source)_LOCALES)))) # Initially clone, and later pull, all Git repositories: # * Clone master branches from remote origin # * Clone each non-master from local master # 1:moduledir 2:locale 3:mastermodule 4:source define MODULE_template $(3)_BRANCHES += $$(subst -LOCALE,$(2:%=-$(2)),$$($(4)_BRANCH)) $(4): $(1) ifneq ($(2),) $(1): $$(subst module,$(3),$$(masterdir)) endif $(1): action = $$(if $(wildcard $(1)/.git),update,init) $(1): origin = $$(if $(2),$(3),$$(subst MODULE,$(3),$$($(4)_ORIGIN))) $(1): master = $$(subst -LOCALE,$(2:%=-$(2)),$$($(4)_BRANCH)) $(1): branches = $$(if $(2),,$$(filter-out $$(master),$$($(3)_BRANCHES))) $(1): @[ -d "$$(dir $$@)" ] || ( echo mkdir -p "$$(dir $$@)" && mkdir -p "$$(dir $$@)" ) @[ -d "$$@" ] || ( echo git clone "$$(origin)" "$$@" && git clone -o "$(4)" "$$(origin)" "$$@" ) @$(MAKE) -f "$$(CURDIR)/make/git.mk" -C "$$@" master="$$(master)" branches="$$(branches)" origin="$(4)" "$$(action)" # WARNING: this may wipe unrelated files too! ultraclean:: rm -rf "$(1)" ifneq ($(2),) rm -rf "$(dir $(1))" endif .PHONY: $(1) endef $(foreach source,$(SOURCES),$(foreach module,$($(source)_MODULES),$(eval $(call MODULE_template,$(masterdir),,$(module),$(source))))) $(foreach source,$(SOURCES),$(foreach module,$($(source)_MODULES),$(foreach locale,$($(source)_LOCALES),$(eval $(call MODULE_template,$(l10ndir),$(locale),$(module),$(source)))))) # Override po4a with local Markdown-supportive text module export PERL5LIB = $(CURDIR)/perl # 1:moduledir 2:locale 3:mastermodule 4:source define POT_template fileformat = $(if $(filter templates,$(3)),htmltemplate,text) filetype = $(if $(filter templates,$(3)),tmpl,mdwn) ALL_POTFILES += $(podir)/$(3).pot $(3)_L10NFILES = $$(patsubst $(1)/%,%,$$(shell find $(1) -type f -name '*.$$(filetype)' | LANG=C sort)) MASTER_L10NFILES += $$(patsubst %,$(1)/%,$$($(3)_L10NFILES)) $(podir)/$(3).pot: $(1) $(MAKE) -f "$$(CURDIR)/make/po4a.mk" -C "$(1)" fileformat="$$(fileformat)" l10nfiles="$$($(3)_L10NFILES)" potfile="$(CURDIR)/$$@" mkpot; \ .PHONY: $(1) endef $(foreach source,$(SOURCES),$(foreach module,$($(source)_POMODULES),$(eval $(call POT_template,$(masterdir),,$(module),$(source))))) # 1:moduledir 2:locale 3:mastermodule 4:source 5:originmodule define INITPO_template fileformat = $(if $(filter templates,$(3)),htmltemplate,text) filetype = $(if $(filter templates,$(3)),tmpl,mdwn) ALL_POFILES += $(podir)/$(3).$(2).po LOCALE_L10NFILES += $$(patsubst %,$(1)/%,$$($(3)_L10NFILES)) $(4)_POMODULES := $(filter-out $(3),$$($(4)_POMODULES)) $(4)_POLOCALES := $(filter-out $(2),$$($(4)_POLOCALES)) $(podir)/$(3).$(2).po: $(3) $(5) $(MAKE) -f "$$(CURDIR)/make/po4a.mk" -C "$(3)" fileformat="$$(fileformat)" l10nfiles="$$($(3)_L10NFILES)" masterdir="$$(CURDIR)/$(1)" pofile="$(CURDIR)/$$@" mkpo # TODO: Implement the below for automated tests, after unfuzzing the above like this: # grep -v '^#, fuzzy$' | sed 's/^#, fuzzy,/#,/' # #$$(patsubst %,$(1)/%,$$($(3)_L10NFILES)): $(podir)/$(3).$(2).po # mkdir -p $(1) # $(MAKE) -f "$$(CURDIR)/make/po4a.mk" -C "$(1)" fileformat="$$(fileformat)" l10nfiles="$$($(3)_L10NFILES)" masterdir="$$(CURDIR)/$(3)" pofile="$(CURDIR)/$(podir)/$(3).$(locale).po" threshold=0 "$(CURDIR)/$$@" endef $(foreach source,$(SOURCES),$(foreach module,$(po-init-modules),$(foreach locale,$(po-init-locales),$(eval $(call INITPO_template,$(l10ndir),$(locale),$(module),$(source),$(if $(po-init-fromlocale),$(module)_l10n/$(po-init-fromlocale),$(module))))))) # 1:moduledir 2:locale 3:mastermodule 4:source define PO_template fileformat = $(if $(filter templates,$(3)),htmltemplate,text) filetype = $(if $(filter templates,$(3)),tmpl,mdwn) ALL_POFILES += $(podir)/$(3).$(2).po LOCALE_L10NFILES += $$(patsubst %,$(1)/%,$$($(3)_L10NFILES)) $(podir)/$(3).$(2).po: $(3) $(MAKE) -f "$$(CURDIR)/make/po4a.mk" -C "$(3)" fileformat="$$(fileformat)" l10nfiles="$$($(3)_L10NFILES)" pofile="$(CURDIR)/$$@" updatepo $$(patsubst %,$(1)/%,$$($(3)_L10NFILES)): $(podir)/$(3).$(2).po mkdir -p $(1) $(MAKE) -f "$$(CURDIR)/make/po4a.mk" -C "$(1)" fileformat="$$(fileformat)" l10nfiles="$$($(3)_L10NFILES)" masterdir="$$(CURDIR)/$(3)" pofile="$(CURDIR)/$(podir)/$(3).$(locale).po" "$$(patsubst $(1)/%,%,$$@)" endef # Only update if not initializing - can't do both at once ifeq ($(po-init-modules),) $(foreach source,$(SOURCES),$(foreach module,$($(source)_POMODULES),$(foreach locale,$($(source)_POLOCALES),$(eval $(call PO_template,$(l10ndir),$(locale),$(module),$(source)))))) endif # 1:dummydir define DUMMYMODULE_template $(1): mkdir -p $$@ # WARNING: this may wipe unrelated files too! ultraclean:: rm -rf "$(1)" endef $(foreach module,$(dummy_MODULES),$(eval $(call DUMMYMODULE_template,$(masterdir)))) # 1:configfile define CONFIG_template $(1): mkdir -p $$@ # WARNING: this may wipe unrelated files too! install:: ikiwiki --setup $(1) --rebuild endef $(foreach config,$(CONFIGS),$(eval $(call CONFIG_template,$(config))))