- # 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): 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)" update
- # 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))))
|