Improve split message generation

Changes the way message files are generated to be driven by make as
rules rather than from explicit macro calls causing their regeneration
every build.

A secondary benefit is that errors in message generation actually stop
the build instead of being ignored

Each frontend will require its filter settings updated to avoid
getting the default message filter of "any". Initially gtk has been
adapted as proof of concept.
This commit is contained in:
Vincent Sanders 2015-04-07 00:08:14 +01:00
parent 05c742df09
commit a838fa3ee9
8 changed files with 66 additions and 36 deletions

5
.gitignore vendored
View File

@ -13,6 +13,11 @@ windows/res/preferences
\!NetSurf/Resources/nl/Templates,fec
\!NetSurf/Resources/nl/Messages
\!NetSurf/Resources/it/Messages
gtk/res/en/Messages
gtk/res/fr/Messages
gtk/res/de/Messages
gtk/res/nl/Messages
gtk/res/it/Messages
test/nsoption
test/nsurl
test/urldbtest

View File

@ -122,9 +122,23 @@ ifeq ($(filter $(VLDTARGET),$(TARGET)),)
$(error Unknown TARGET "$(TARGET)", Must be one of $(VLDTARGET))
endif
SUBTARGET =
RESOURCES =
# ensure empty values for base variables
# Sub target for build
SUBTARGET=
# Resources executable target depends upon
RESOURCES=
# Messages executable target depends on
MESSAGES:=
# The filter applied to the fat (full) messages to generate split messages
MESSAGES_FILTER=any
# The languages in the fat messages to convert
MESSAGES_LANGUAGES=de en fr it nl
# The target directory for the split messages
MESSAGES_TARGET=!NetSurf/Resources
# Defaults for tools
PERL=perl
MKDIR=mkdir
TOUCH=touch
@ -521,8 +535,7 @@ $(TOOLROOT)/created: $(OBJROOT)/created
$(Q)$(MKDIR) $(TOOLROOT)
$(Q)$(TOUCH) $(TOOLROOT)/created
CLEANS := clean-target clean-testament
CLEANS :=
POSTEXES :=
# ----------------------------------------------------------------------------
@ -567,6 +580,39 @@ S_COMMON := $(S_CONTENT) $(S_FETCHERS) $(S_CSS) $(S_RENDER) $(S_UTILS) \
$(S_HTTP) $(S_DESKTOP) $(S_JAVASCRIPT)
# ----------------------------------------------------------------------------
# Message targets
# ----------------------------------------------------------------------------
# Message splitting rule generation macro
# 1 = Language
define split_messages
.INTERMEDIATE:$$(MESSAGES_TARGET)/$(1)/Messages.tmp
$$(MESSAGES_TARGET)/$(1)/Messages.tmp: resources/FatMessages
$$(VQ)echo "MSGSPLIT: Language: $(1) Filter: $$(MESSAGES_FILTER)"
$$(Q)mkdir -p $$(MESSAGES_TARGET)/$(1)
$$(Q)$$(SPLIT_MESSAGES) -l $(1) -p $$(MESSAGES_FILTER) -f messages -o $$@ $$<
$$(MESSAGES_TARGET)/$(1)/Messages: $$(MESSAGES_TARGET)/$(1)/Messages.tmp
$$(VQ)echo "COMPRESS: $$@"
$$(Q)gzip -9n < $$< > $$@
CLEAN_MESSAGES += $$(MESSAGES_TARGET)/$(1)/Messages
MESSAGES += $$(MESSAGES_TARGET)/$(1)/Messages
endef
# geenrate the message file rules
$(eval $(foreach LANG,$(MESSAGES_LANGUAGES), \
$(call split_messages,$(LANG))))
clean-messages:
$(VQ)echo " CLEAN: $(CLEAN_MESSAGES)"
$(Q)$(RM) $(CLEAN_MESSAGES)
CLEANS += clean-messages
# ----------------------------------------------------------------------------
# Source file setup
# ----------------------------------------------------------------------------
@ -580,7 +626,7 @@ endif
OBJECTS := $(sort $(addprefix $(OBJROOT)/,$(subst /,_,$(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(patsubst %.m,%.o,$(patsubst %.s,%.o,$(SOURCES))))))))
$(EXETARGET): $(OBJECTS) $(RESOURCES)
$(EXETARGET): $(OBJECTS) $(RESOURCES) $(MESSAGES)
$(VQ)echo " LINK: $(EXETARGET)"
ifneq ($(TARGET)$(SUBTARGET),riscos-elf)
$(Q)$(CC) -o $(EXETARGET) $(OBJECTS) $(LDFLAGS)
@ -615,11 +661,12 @@ endif
clean-target:
$(VQ)echo " CLEAN: $(EXETARGET)"
$(Q)$(RM) $(EXETARGET)
$(call clean_install_messages, !NetSurf/Resources)
CLEANS += clean-target
clean-testament:
$(VQ)echo " CLEAN: testament.h"
$(Q)$(RM) $(OBJROOT)/testament.h
CLEANS += clean-testament
clean-builddir:
$(VQ)echo " CLEAN: $(OBJROOT)"
@ -627,15 +674,12 @@ clean-builddir:
CLEANS += clean-builddir
.PHONY: all-program all-messages testament
.PHONY: all-program testament
testament $(OBJROOT)/testament.h:
$(Q)$(PERL) utils/git-testament.pl $(CURDIR) $(OBJROOT)/testament.h
all-messages:
$(call split_install_messages, any, !NetSurf/Resources)
all-program: all-messages $(EXETARGET) $(POSTEXES)
all-program: $(EXETARGET) $(POSTEXES)
.SUFFIXES:
@ -758,25 +802,6 @@ clean: $(CLEANS)
# Target builds a distribution package
package: all-program package-$(TARGET)
FAT_LANGUAGES=de en fr it nl
# 1 = front end name (gtk, ro, ami, etc)
# 2 = Destination directory (where resources being installed, creates en/Messages etc)
# 3 = suffix after language name
define split_install_messages
$(foreach LANG, $(FAT_LANGUAGES), @echo MSGSPLIT: $(1)/$(LANG) to $(2)
$(Q)mkdir -p $(2)/$(LANG)$(3)
$(Q)$(SPLIT_MESSAGES) -l $(LANG) -p $(1) -f messages resources/FatMessages | gzip -9n > $(2)$(3)/$(LANG)/Messages
)
endef
# Clean Message target
# 1 = Destination directory (where resources being installed, creates en/Messages etc)
# 2 = suffix after language name
define clean_install_messages
$(foreach LANG, $(FAT_LANGUAGES), @echo MSGCLEAN: $(LANG) in $(1)
$(Q)$(RM) -f $(1)$(2)/$(LANG)/Messages
)
endef
.PHONY: messages-split-tfx messages-fetch-tfx messages-import-tfx

View File

@ -121,8 +121,14 @@ S_GTK := $(addprefix gtk/,$(S_GTK)) $(addprefix utils/,container.c)
# Note this is deliberately *not* expanded here as common and image
# are not yet available
SOURCES = $(S_COMMON) $(S_IMAGE) $(S_BROWSER) $(S_PIXBUF) $(S_GTK)
# The gtk binary target
EXETARGET := nsgtk
# The filter and target for split messages
MESSAGES_FILTER=gtk
MESSAGES_TARGET=gtk/res
# ----------------------------------------------------------------------------
# Install target
# ----------------------------------------------------------------------------
@ -150,7 +156,6 @@ install-gtk:
$(Q)install -m 0644 gtk/res/throbber/*.png $(DESTDIR)$(NETSURF_GTK_RESOURCES)/throbber
$(Q)tar -c -h -C gtk/res -f - themes | tar -xv -C $(DESTDIR)$(NETSURF_GTK_RESOURCES) -f -
$(Q)tar -c -h -C gtk/res -f - $(GTK_TRANSLATIONS_HTML) | tar -xv -C $(DESTDIR)$(NETSURF_GTK_RESOURCES) -f -
$(call split_install_messages, gtk, $(DESTDIR)$(NETSURF_GTK_RESOURCES))
$(Q)install -m 0644 $(GTK_RESOURCES_LIST) $(DESTDIR)$(NETSURF_GTK_RESOURCES)
# ----------------------------------------------------------------------------

View File

@ -1 +0,0 @@
../../../!NetSurf/Resources/de/Messages

View File

@ -1 +0,0 @@
../../../!NetSurf/Resources/en/Messages

View File

@ -1 +0,0 @@
../../../!NetSurf/Resources/fr/Messages

View File

@ -1 +0,0 @@
../../../!NetSurf/Resources/it/Messages

View File

@ -1 +0,0 @@
../../../!NetSurf/Resources/nl/Messages