summaryrefslogtreecommitdiffstats
path: root/solenv/gbuild/Dictionary.mk
diff options
context:
space:
mode:
Diffstat (limited to 'solenv/gbuild/Dictionary.mk')
-rw-r--r--solenv/gbuild/Dictionary.mk401
1 files changed, 401 insertions, 0 deletions
diff --git a/solenv/gbuild/Dictionary.mk b/solenv/gbuild/Dictionary.mk
new file mode 100644
index 000000000..12a42d16f
--- /dev/null
+++ b/solenv/gbuild/Dictionary.mk
@@ -0,0 +1,401 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+# ThesaurusIndexTarget class
+
+gb_ThesaurusIndexTarget_CHECK_TARGET := $(SRCDIR)/dictionaries/util/th_check.pl
+gb_ThesaurusIndexTarget_CHECK_COMMAND := PERL_UNICODE=0 $(PERL) -w $(gb_ThesaurusIndexTarget_CHECK_TARGET)
+gb_ThesaurusIndexTarget_INDEX_DEPS := $(call gb_Executable_get_runtime_dependencies,idxdict)
+gb_ThesaurusIndexTarget_INDEX_COMMAND := $(call gb_Executable_get_command,idxdict)
+
+define gb_ThesaurusIndexTarget__command
+$(call gb_Helper_abbreviate_dirs,\
+ $(gb_ThesaurusIndexTarget_INDEX_COMMAND) -o $(1) < $(THESAURUS_FILE) \
+)
+endef
+ #$(gb_ThesaurusIndexTarget_CHECK_COMMAND) $(THESAURUS_FILE) && \
+
+$(dir $(call gb_ThesaurusIndexTarget_get_target,%)).dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
+$(dir $(call gb_ThesaurusIndexTarget_get_target,%))%/.dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
+$(call gb_ThesaurusIndexTarget_get_target,%) : $(gb_ThesaurusIndexTarget_INDEX_DEPS) | $(gb_ThesaurusIndexTarget_CHECK_TARGET)
+ $(call gb_Output_announce,$*,$(true),THI,1)
+ $(call gb_Trace_StartRange,$*,THI)
+ $(call gb_ThesaurusIndexTarget__command,$@,$*)
+ $(call gb_Trace_EndRange,$*,THI)
+
+.PHONY : $(call gb_ThesaurusIndexTarget_get_clean_target,%)
+$(call gb_ThesaurusIndexTarget_get_clean_target,%) :
+ $(call gb_Output_announce,$*,$(false),THI,1)
+ $(call gb_Helper_abbreviate_dirs,\
+ rm -f $(call gb_ThesaurusIndexTarget_get_target,$*) \
+ )
+
+# Creates an index for a given thesaurus
+#
+# The thesaurus' file path is relative to $(SRCDIR).
+#
+# gb_ThesaurusIndexTarget_ThesaurusIndexTarget thesaurus
+define gb_ThesaurusIndexTarget_ThesaurusIndexTarget
+$(call gb_ThesaurusIndexTarget_get_target,$(1)) : THESAURUS_FILE := $(SRCDIR)/$(1)
+$(call gb_ThesaurusIndexTarget_get_target,$(1)) : $(SRCDIR)/$(1)
+$(call gb_ThesaurusIndexTarget_get_target,$(1)) :| $(dir $(call gb_ThesaurusIndexTarget_get_target,$(1))).dir
+
+endef
+
+# PropertiesTranslateTarget class
+
+# Handles translation of .properties files in dictionaries.
+
+gb_PropertiesTranslateTarget_COMMAND := $(call gb_Executable_get_command,propex)
+gb_PropertiesTranslateTarget_DEPS := $(call gb_Executable_get_runtime_dependencies,propex)
+
+define gb_PropertiesTranslateTarget__command
+$(call gb_Helper_abbreviate_dirs, \
+ $(if $(filter-out qtz,$(LANGUAGE)), \
+ MERGEINPUT=$(call var2file,$(shell $(gb_MKTEMP)),100,$(POFILE)) && \
+ $(gb_PropertiesTranslateTarget_COMMAND) \
+ -i $(PROPERTIES_FILE) \
+ -l $(LANGUAGE) \
+ -m $${MERGEINPUT} \
+ -o $(1) && \
+ rm -f $${MERGEINPUT} \
+ , \
+ $(gb_PropertiesTranslateTarget_COMMAND) \
+ -i $(PROPERTIES_FILE) \
+ -l $(LANGUAGE) \
+ -m \
+ -o $(1) \
+ ) \
+)
+endef
+
+$(dir $(call gb_PropertiesTranslateTarget_get_target,%)).dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
+$(dir $(call gb_PropertiesTranslateTarget_get_target,%))%/.dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
+$(call gb_PropertiesTranslateTarget_get_target,%) : $(gb_PropertiesTranslateTarget_DEPS)
+ $(call gb_Output_announce,$*,$(true),PRP,1)
+ $(call gb_Trace_StartRange,$*,PRP)
+ $(call gb_PropertiesTranslateTarget__command,$@,$*)
+ $(call gb_Trace_EndRange,$*,PRP)
+
+.PHONY : $(call gb_PropertiesTranslateTarget_get_clean_target,%)
+$(call gb_PropertiesTranslateTarget_get_clean_target,%) :
+ $(call gb_Output_announce,$*,$(false),PRP,1)
+ rm -f $(call gb_PropertiesTranslateTarget_get_target,$*)
+
+# gb_PropertiesTranslateTarget_PropertiesTranslateTarget target source lang
+define gb_PropertiesTranslateTarget_PropertiesTranslateTarget
+$(call gb_PropertiesTranslateTarget_get_target,$(1)) : LANGUAGE := $(3)
+$(call gb_PropertiesTranslateTarget_get_target,$(1)) : POFILE := $(gb_POLOCATION)/$(3)/$(patsubst %/,%,$(dir $(2))).po
+$(call gb_PropertiesTranslateTarget_get_target,$(1)) : PROPERTIES_FILE := $(SRCDIR)/$(2)
+
+$(call gb_PropertiesTranslateTarget_get_target,$(1)) : $(SRCDIR)/$(2)
+$(call gb_PropertiesTranslateTarget_get_target,$(1)) :| $(dir $(call gb_PropertiesTranslateTarget_get_target,$(1))).dir
+
+$(if $(filter-out qtz,$(3)),\
+ $(call gb_PropertiesTranslateTarget__PropertiesTranslateTarget_onelang,$(1),$(gb_POLOCATION)/$(3)/$(patsubst %/,%,$(dir $(2))).po) \
+)
+
+endef
+
+# gb_PropertiesTranslateTarget__PropertiesTranslateTarget_onelang target pofile
+define gb_PropertiesTranslateTarget__PropertiesTranslateTarget_onelang
+$(call gb_PropertiesTranslateTarget_get_target,$(1)) : $(2)
+$(2) :
+
+endef
+
+# DescriptionTranslateTarget class
+
+# Handles translation of description.xml files in dictionaries.
+
+gb_DescriptionTranslateTarget_COMMAND := $(call gb_Executable_get_command,xrmex)
+gb_DescriptionTranslateTarget_DEPS := $(call gb_Executable_get_runtime_dependencies,xrmex)
+
+define gb_DescriptionTranslateTarget__command
+$(call gb_Helper_abbreviate_dirs,\
+ MERGEINPUT=$(call var2file,$(shell $(gb_MKTEMP)),100,$(POFILES)) && \
+ $(gb_DescriptionTranslateTarget_COMMAND) \
+ -i $(DESCRIPTION_XML) \
+ -l all \
+ -m $${MERGEINPUT} \
+ -o $(1) && \
+ rm -f $${MERGEINPUT} \
+)
+endef
+
+$(dir $(call gb_DescriptionTranslateTarget_get_target,%)).dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
+$(dir $(call gb_DescriptionTranslateTarget_get_target,%))%/.dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
+$(call gb_DescriptionTranslateTarget_get_target,%) : $(gb_DescriptionTranslateTarget_DEPS)
+ $(call gb_Output_announce,$*,$(true),XRM,1)
+ $(call gb_Trace_StartRange,$*,XRM)
+ $(call gb_DescriptionTranslateTarget__command,$@,$*)
+ $(call gb_Trace_EndRange,$*,XRM)
+
+.PHONY : $(call gb_DescriptionTranslateTarget_get_clean_target,%)
+$(call gb_DescriptionTranslateTarget_get_clean_target,%) :
+ $(call gb_Output_announce,$*,$(false),XRM,1)
+ rm -f $(call gb_DescriptionTranslateTarget_get_target,$*)
+
+# gb_DescriptionTranslateTarget_DescriptionTranslateTarget target source langs
+define gb_DescriptionTranslateTarget_DescriptionTranslateTarget
+$(call gb_DescriptionTranslateTarget_get_target,$(1)) : DESCRIPTION_XML := $(SRCDIR)/$(2)
+$(call gb_DescriptionTranslateTarget_get_target,$(1)) : POFILES :=
+
+$(call gb_DescriptionTranslateTarget_get_target,$(1)) : $(SRCDIR)/$(2)
+$(call gb_DescriptionTranslateTarget_get_target,$(1)) :| $(dir $(call gb_DescriptionTranslateTarget_get_target,$(1))).dir
+
+$(foreach lang,$(3),\
+ $(call gb_DescriptionTranslateTarget__DescriptionTranslateTarget_onelang,$(1),$(patsubst %/,%,$(dir $(2))),$(lang)) \
+)
+
+endef
+
+# gb_DescriptionTranslateTarget__DescriptionTranslateTarget_onelang target pobase lang
+define gb_DescriptionTranslateTarget__DescriptionTranslateTarget_onelang
+$(call gb_DescriptionTranslateTarget_get_target,$(1)) : POFILES += $(if $(filter-out qtz,$(3)),$(gb_POLOCATION)/$(3)/$(2).po)
+$(if $(filter-out qtz,$(3)),\
+ $(call gb_DescriptionTranslateTarget__DescriptionTranslateTarget_onelang_podeps,$(1),$(gb_POLOCATION)/$(3)/$(2).po))
+
+endef
+
+# gb_DescriptionTranslateTarget__DescriptionTranslateTarget_onelang_podeps target pofile
+define gb_DescriptionTranslateTarget__DescriptionTranslateTarget_onelang_podeps
+$(call gb_DescriptionTranslateTarget_get_target,$(1)) : $(2)
+$(2) :
+
+endef
+
+# Dictionary class
+
+# Handles creation and delivery of dictionary extensions.
+#
+# This class provides a filelist called Dictionary/<name> that contains
+# all installed files of the dictionary.
+
+gb_Dictionary_ALL_LANGS := $(filter-out en-US,$(gb_WITH_LANG))
+gb_Dictionary_INSTDIR := $(LIBO_SHARE_FOLDER)/extensions
+
+$(dir $(call gb_Dictionary_get_target,%)).dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
+$(dir $(call gb_Dictionary_get_target,%))%/.dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
+$(call gb_Dictionary_get_target,%) :
+ $(call gb_Output_announce,$*,$(true),DIC,3)
+ $(call gb_Trace_MakeMark,$*,DIC)
+ touch $@
+
+.PHONY : $(call gb_Dictionary_get_clean_target,%)
+$(call gb_Dictionary_get_clean_target,%) :
+ $(call gb_Output_announce,$*,$(false),DIC,3)
+ rm -f $(call gb_Dictionary_get_target,$*)
+
+gb_Dictionary_get_packagename = Dictionary/$(1)
+gb_Dictionary_get_packagesetname = Dictionary/$(1)
+
+# Creates a dictionary extension
+#
+# gb_Dictionary_Dictionary dictionary srcdir
+define gb_Dictionary_Dictionary
+$(call gb_Package_Package_internal,$(call gb_Dictionary_get_packagename,$(1)),$(SRCDIR))
+$(call gb_Package_Package_internal,$(call gb_Dictionary_get_packagename,$(1)_generated),$(WORKDIR))
+$(call gb_PackageSet_PackageSet_internal,$(call gb_Dictionary_get_packagesetname,$(1)))
+
+$(call gb_PackageSet_add_package,$(call gb_Dictionary_get_packagesetname,$(1)),$(call gb_Dictionary_get_packagename,$(1)))
+
+ifeq (,$(gb_Dictionary_ALL_LANGS))
+$(call gb_Dictionary_add_root_file,$(1),$(2)/description.xml)
+else
+$(call gb_Dictionary__add_description_translations,$(1),$(2)/description.xml)
+endif
+$(call gb_Dictionary_add_root_file,$(1),$(2)/dictionaries.xcu)
+$(call gb_Dictionary_add_file,$(1),META-INF/manifest.xml,$(2)/META-INF/manifest.xml)
+
+$(call gb_Dictionary_get_target,$(1)) : $(call gb_PackageSet_get_target,$(call gb_Dictionary_get_packagesetname,$(1)))
+$(call gb_Dictionary_get_target,$(1)) :| $(dir $(call gb_Dictionary_get_target,$(1))).dir
+$(call gb_Dictionary_get_clean_target,$(1)) : $(call gb_PackageSet_get_clean_target,$(call gb_Dictionary_get_packagesetname,$(1)))
+
+$$(eval $$(call gb_Module_register_target,$(call gb_Dictionary_get_target,$(1)),$(call gb_Dictionary_get_clean_target,$(1))))
+$(call gb_Helper_make_userfriendly_targets,$(1),Dictionary)
+
+endef
+
+# gb_Dictionary__add_description_translation_impl dictionary desctarget descxml
+define gb_Dictionary__add_description_translation_impl
+$(call gb_DescriptionTranslateTarget_DescriptionTranslateTarget,$(2),$(3),$(gb_Dictionary_ALL_LANGS))
+$(call gb_Dictionary_add_generated_file,$(1),description.xml,$(call gb_DescriptionTranslateTarget_get_target,$(2)))
+
+$(call gb_Dictionary_get_target,$(1)) : $(call gb_DescriptionTranslateTarget_get_target,$(2))
+$(call gb_Dictionary_get_clean_target,$(1)) : $(call gb_DescriptionTranslateTarget_get_clean_target,$(2))
+
+endef
+
+# gb_Dictionary__add_description_translations dictionary descxml
+define gb_Dictionary__add_description_translations
+$(call gb_Dictionary__add_description_translation_impl,$(1),$(basename $(2)),$(2))
+
+endef
+
+# gb_Dictionary__add_file dictionary package-base destfile sourcefile
+define gb_Dictionary__add_file
+$(call gb_Package_add_file,$(call gb_Dictionary_get_packagename,$(2)),$(gb_Dictionary_INSTDIR)/$(1)/$(3),$(4))
+
+endef
+
+# Adds a file from $(SRCDIR) to the dictionary under chosen name
+#
+# gb_Dictionary_add_file dictionary destfile sourcefile
+define gb_Dictionary_add_file
+$(call gb_Dictionary__add_file,$(1),$(1),$(2),$(3))
+
+endef
+
+# Adds several files from $(SRCDIR) to the dictionary at once
+#
+# The files are put into the chosen directory.
+#
+# gb_Dictionary_add_files dictionary destdir file(s)
+define gb_Dictionary_add_files
+$(foreach file,$(3),$(call gb_Dictionary_add_file,$(1),$(2)/$(notdir $(file)),$(file)))
+
+endef
+
+# Adds an arbitrary file to the dictionary under chosen name
+#
+# gb_Dictionary_add_file dictionary destfile sourcefile
+define gb_Dictionary_add_generated_file
+$(call gb_Dictionary__add_file,$(1),$(1)_generated,$(2),$(subst $(WORKDIR)/,,$(3)))
+$(call gb_PackageSet_add_package,$(call gb_Dictionary_get_packagesetname,$(1)),$(call gb_Dictionary_get_packagename,$(1)_generated))
+
+endef
+
+# Adds several arbitrary files to the dictionary at once
+#
+# The files are put into the chosen directory.
+#
+# gb_Dictionary_add_files dictionary destdir file(s)
+define gb_Dictionary_add_generated_files
+$(foreach file,$(3),$(call gb_Dictionary_add_generated_file,$(1),$(2)/$(notdir $(file)),$(file)))
+
+endef
+
+# Adds a localized xcu file, which needs special handling because it may be
+# in $(WORKDIR) or $(SRCDIR) depending on whether translations are built.
+#
+# gb_Dictionary_add_localized_xcu_file dictionary destdir file
+define gb_Dictionary_add_localized_xcu_file
+ifeq ($(gb_WITH_LANG),)
+$(call gb_Dictionary__add_file,$(1),$(1),$(2)/$(notdir $(3)),$(strip $(3)))
+else
+$(call gb_Dictionary__add_file,$(1),$(1)_generated,$(2)/$(notdir $(3)),$(subst $(WORKDIR)/,,$(call gb_XcuFile_for_extension,$(strip $(3)))))
+$(call gb_PackageSet_add_package,$(call gb_Dictionary_get_packagesetname,$(1)),$(call gb_Dictionary_get_packagename,$(1)_generated))
+endif
+
+endef
+
+# Adds a file to the root dir of the dictionary
+#
+# gb_Dictionary_add_root_file dictionary file
+define gb_Dictionary_add_root_file
+$(call gb_Dictionary_add_file,$(1),$(notdir $(2)),$(2))
+
+endef
+
+# Adds several files to the root dir of the dictionary
+#
+# gb_Dictionary_add_root_files dictionary file(s)
+define gb_Dictionary_add_root_files
+$(foreach file,$(2),$(call gb_Dictionary_add_root_file,$(1),$(file)))
+
+endef
+
+define gb_Dictionary__add_thesaurus
+$(call gb_Dictionary__add_file,$(1),$(1)_generated,$(notdir $(3)),$(subst $(WORKDIR)/,,$(3)))
+$(call gb_PackageSet_add_package,$(call gb_Dictionary_get_packagesetname,$(1)),$(call gb_Dictionary_get_packagename,$(1)_generated))
+
+endef
+
+# Adds a thesaurus to the dictionary
+#
+# An index for the thesaurus is generated and added to the dictionary as
+# well.
+#
+# gb_Dictionary_add_thesaurus dictionary thesaurus
+define gb_Dictionary_add_thesaurus
+$(call gb_ThesaurusIndexTarget_ThesaurusIndexTarget,$(2))
+$(call gb_Dictionary_add_root_file,$(1),$(2))
+$(call gb_Dictionary__add_thesaurus,$(1),$(2),$(call gb_ThesaurusIndexTarget_get_target,$(2)))
+
+endef
+
+# Adds several thesauri to the dictionary at once
+#
+# Indexes for the thesauri are generated and added to the dictionary as
+# well.
+#
+# gb_Dictionary_add_thesauri dictionary thesauri
+define gb_Dictionary_add_thesauri
+$(foreach thesaurus,$(2),$(call gb_Dictionary_add_thesaurus,$(1),$(thesaurus)))
+
+endef
+
+# gb_Dictionary__translate_propertyfile_impl dictionary destfile propertyfile propertyname lang
+define gb_Dictionary__translate_propertyfile_impl
+$(call gb_PropertiesTranslateTarget_PropertiesTranslateTarget,$(4),$(3),$(5))
+$(call gb_Dictionary_add_generated_file,$(1),$(2),$(call gb_PropertiesTranslateTarget_get_target,$(4)))
+
+endef
+
+# gb_Dictionary__translate_propertyfile dictionary destdir propertyfile propertyname lang
+define gb_Dictionary__translate_propertyfile
+$(call gb_Dictionary__translate_propertyfile_impl,$(1),$(2)$(notdir $(4)).properties,$(3),$(4),$(5))
+
+endef
+
+# gb_Dictionary__add_propertyfile_translations dictionary destfile propertyfile
+define gb_Dictionary__add_propertyfile_translations
+$(foreach lang,$(gb_Dictionary_ALL_LANGS),$(call gb_Dictionary__translate_propertyfile,$(1),$(dir $(2)),$(3),$(subst en_US,$(subst -,_,$(lang)),$(basename $(3))),$(lang)))
+
+endef
+
+# Adds a .property file to the dictionary under chosen name
+#
+# The file is localized automatically.
+#
+# gb_Dictionary_add_propertyfile dictionary destfile propertyfile
+define gb_Dictionary_add_propertyfile
+$(call gb_Dictionary__add_file,$(1),$(1),$(2),$(3))
+$(call gb_Dictionary__add_propertyfile_translations,$(1),$(2),$(3))
+
+endef
+
+# Adds several .property files to the dictionary at once
+#
+# The files are put into chosen directory. They are localized automatically.
+#
+# gb_Dictionary_add_propertyfiles dictionary destdir propertyfile(s)
+define gb_Dictionary_add_propertyfiles
+$(foreach propertyfile,$(3),$(call gb_Dictionary_add_propertyfile,$(1),$(2)/$(notdir $(propertyfile)),$(propertyfile)))
+
+endef
+
+# vim: set noet sw=4 ts=4: