# -*- 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/.
#
# This file incorporates work covered by the following license notice:
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright
# ownership. The ASF licenses this file to you under the Apache
# License, Version 2.0 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
# Configuration files: a bit of an overview of the targets:
#
# Configuration
# => XcsTarget: schemas
# => buildtools
# => Xcs source
# => XcuDataTarget: data
# => buildtools
# => XcsTarget (schema)
# => Xcu data source
# => XcuModuleTaret: modules
# => buildtools
# => Xcu data source
# => XcuLangpackTarget: langpack (per lang)
# => buildtools
# => Xcu data source
# => XcuResTarget: resources (per lang)
# => buildtools
# => XcuMergeTarget: merge
# => buildtools (cfgex)
# => Xcu data source
# => *.po
# => XcsTarget (schema)
# The main LibreOffice registry (cf. officecfg/Configuration_officecfg.mk):
gb_Configuration_PRIMARY_REGISTRY_NAME := registry
gb_Configuration_PRIMARY_REGISTRY_SCHEMA_ROOT = \
$(SRCDIR)/officecfg/registry/schema
gb_Configuration__stringparam_schemaRoot = --stringparam schemaRoot \
$(
if $(PRIMARY_REGISTRY), \
$(gb_Configuration_PRIMARY_REGISTRY_SCHEMA_ROOT), \
$(
call gb_XcsTarget_get_target,))
gb_Configuration_XSLTCOMMAND = $(
call gb_ExternalExecutable_get_command,xsltproc)
gb_Configuration_XSLTCOMMAND_DEPS = $(
call gb_ExternalExecutable_get_dependencies,x
sltproc)
# XcsTarget class
# need to locate a schema file corresponding to some XCU file in the outdir
define gb_XcsTarget_for_XcuTarget
$(call gb_XcsTarget_get_target,$(basename $(1 )).xcs)
endef
gb_Configuration_LANGS := en-US $(filter-out en-US,$(gb_WITH_LANG))
gb_XcsTarget_XSLT_SchemaVal := $(SRCDIR)/officecfg/util/schema_val.xsl
gb_XcsTarget_XSLT_SchemaTrim := $(SRCDIR)/officecfg/util/schema_trim.xsl
gb_XcsTarget_DTD_Schema := $(SRCDIR)/officecfg/registry/component-schema.dtd
define gb_XcsTarget__command
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $(1 )) && \
$(gb_Configuration_XSLTCOMMAND) --nonet \
--noout \
--stringparam componentName $(subst /,.,$(basename $(2 ))) \
--stringparam root $(subst $(2 ),,$(3 )) \
$(gb_Configuration__stringparam_schemaRoot) \
$(gb_XcsTarget_XSLT_SchemaVal) \
$(3 ) && \
$(gb_Configuration_XSLTCOMMAND) --nonet \
-o $(1 ) \
--stringparam LIBO_SHARE_FOLDER $(LIBO_SHARE_FOLDER) \
--stringparam LIBO_SHARE_HELP_FOLDER $(LIBO_SHARE_HELP_FOLDER) \
$(gb_XcsTarget_XSLT_SchemaTrim) \
$(3 ))
endef
$(call gb_XcsTarget_get_target,%) : \
$(gb_XcsTarget_XSLT_SchemaVal) \
$(gb_XcsTarget_XSLT_SchemaTrim) $(gb_XcsTarget_DTD_Schema) \
| $(gb_Configuration_XSLTCOMMAND_DEPS)
$(call gb_Output_announce,$*,$(true),XCS,1 )
$(call gb_Trace_StartRange,$*,XCS)
$(call gb_XcsTarget__command,$@,$*,$(filter %.xcs,$^))
$(call gb_Trace_EndRange,$*,XCS)
$(call gb_XcsTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCS,1 )
rm -f $(call gb_XcsTarget_get_target,$*)
# XcuDataTarget class
gb_XcuTarget_XSLT_AllLang := $(SRCDIR)/officecfg/util/alllang.xsl
gb_XcuDataTarget_XSLT_DataVal := $(SRCDIR)/officecfg/util/data_val.xsl
gb_XcuDataTarget_DTD_ComponentUpdate := $(SRCDIR)/officecfg/registry/component-update.dtd
define gb_XcuDataTarget__command
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $(1 )) && \
$(gb_Configuration_XSLTCOMMAND) --nonet \
--noout \
--stringparam xcs $(call gb_XcsTarget_for_XcuTarget,$(XCUFILE)) \
$(gb_Configuration__stringparam_schemaRoot) \
--path $(SRCDIR)/officecfg/registry \
$(gb_XcuDataTarget_XSLT_DataVal) \
$(3 ) && \
$(gb_Configuration_XSLTCOMMAND) --nonet \
-o $(1 ) \
--stringparam xcs $(call gb_XcsTarget_for_XcuTarget,$(XCUFILE)) \
$(gb_Configuration__stringparam_schemaRoot) \
--stringparam LIBO_SHARE_FOLDER $(LIBO_SHARE_FOLDER) \
--stringparam LIBO_SHARE_HELP_FOLDER $(LIBO_SHARE_HELP_FOLDER) \
--path $(SRCDIR)/officecfg/registry \
$(gb_XcuTarget_XSLT_AllLang) \
$(3 ))
endef
$(call gb_XcuDataTarget_get_target,%) : $(gb_XcuDataTarget_XSLT_DataVal) \
$(gb_XcuTarget_XSLT_AllLang) $(gb_XcuDataTarget_DTD_ComponentUpdate) \
| $(gb_Configuration_XSLTCOMMAND_DEPS)
$(call gb_Output_announce,$*,$(true),XCU,2 )
$(call gb_Trace_StartRange,$*,XCU)
$(call gb_XcuDataTarget__command,$@,$*,$(filter %.xcu,$^))
$(call gb_Trace_EndRange,$*,XCU)
$(call gb_XcuDataTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCU,2 )
$(call gb_Helper_abbreviate_dirs,\
rm -f $(call gb_XcuDataTarget_get_target,$*))
# XcuModuleTarget class
define gb_XcuDataSource_for_XcuModuleTarget
$(SRCDIR)/$(basename $(subst -,.,$(basename $(1 )))).xcu
endef
define gb_XcsTarget_for_XcuModuleTarget
$(call gb_XcsTarget_get_target,$(basename $(subst -,.,$(basename $(1 )))).xcs)
endef
define gb_XcuModuleTarget__command
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $(1 )) && \
$(gb_Configuration_XSLTCOMMAND) --nonet \
-o $(1 ) \
--stringparam xcs $(4 ) \
$(gb_Configuration__stringparam_schemaRoot) \
--stringparam module $(notdir $(subst -,/,$(basename $(notdir $(2 ))))) \
--stringparam LIBO_SHARE_FOLDER $(LIBO_SHARE_FOLDER) \
--stringparam LIBO_SHARE_HELP_FOLDER $(LIBO_SHARE_HELP_FOLDER) \
$(gb_XcuTarget_XSLT_AllLang) \
$(3 ))
endef
$(call gb_XcuModuleTarget_get_target,%) : $(gb_XcuTarget_XSLT_AllLang) \
| $(gb_Configuration_XSLTCOMMAND_DEPS)
$(if $(filter %.xcu,$^),,$(error There is no target $(call gb_XcuModuleTarget_get_target,$*)))
$(call gb_Output_announce,$*,$(true),XCM,3 )
$(call gb_Trace_StartRange,$*,XCM)
$(call gb_XcuModuleTarget__command,$@,$*,$(filter %.xcu,$^),$(filter %.xcs,$^))
$(call gb_Trace_EndRange,$*,XCM)
$(call gb_XcuModuleTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCM,3 )
$(call gb_Helper_abbreviate_dirs,\
rm -f $(call gb_XcuModuleTarget_get_target,$*))
# XcuLangpackTarget class
gb_XcuLangpackTarget__get_name_with_lang = $(basename $(1 ))-$(2 )$(suffix $(1 ))
gb_XcuLangpackTarget__get_target_with_lang = \
$(call gb_XcuLangpackTarget_get_target,$(call gb_XcuLangpackTarget__get_name_with_lang,$(1 ),$(2 )))
gb_XcuLangpackTarget_SED_delcomment := $(SRCDIR)/officecfg/util/delcomment.sed
define gb_XcuLangpackTarget__command
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $(1 )) && \
sed -e "s/__LANGUAGE__/$(LANGUAGE)/" -f $(gb_XcuLangpackTarget_SED_delcomment)\
$(3 ) > $(1 ))
endef
$(call gb_XcuLangpackTarget_get_target,%) : \
$(gb_XcuLangpackTarget_SED_delcomment)
$(call gb_Output_announce,$*,$(true),XCL,1 )
$(call gb_Trace_StartRange,$*,XCL)
$(call gb_XcuLangpackTarget__command,$@,$*,$(filter %.tmpl,$^))
$(call gb_Trace_EndRange,$*,XCL)
$(call gb_XcuLangpackTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCL,1 )
$(call gb_Helper_abbreviate_dirs,\
rm -f $(foreach lang,$(gb_Configuration_LANGS),\
$(call gb_XcuLangpackTarget__get_target_with_lang,$*,$(lang))))
# XcuMergeTarget class
gb_XcuMergeTarget_CFGEXDEPS := $(call gb_Executable_get_runtime_dependencies,cfgex)
gb_XcuMergeTarget_CFGEXCOMMAND := $(call gb_Executable_get_command,cfgex)
define gb_XcuMergeTarget__command
MERGEINPUT=$(call gb_var2file,$(shell $(gb_MKTEMP)),$(POFILES)) && \
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $(1 )) && \
$(gb_XcuMergeTarget_CFGEXCOMMAND) \
-i $(3 ) \
-o $(1 ) \
-m $${MERGEINPUT} \
-l all ) && \
rm -rf $${MERGEINPUT}
endef
$(call gb_XcuMergeTarget_get_target,%) : $(gb_XcuMergeTarget_CFGEXDEPS)
$(call gb_Output_announce,$*,$(true),XCX,1 )
$(call gb_Trace_StartRange,$*,XCX)
$(if $(filter $(words $(POFILES)),$(words $(wildcard $(POFILES)))),\
$(call gb_XcuMergeTarget__command,$@,$*,$(filter %.xcu,$^)),\
mkdir -p $(dir $@) && cp $(filter %.xcu,$^) $@)
$(call gb_Trace_EndRange,$*,XCX)
$(call gb_XcuMergeTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCX,1 )
$(call gb_Helper_abbreviate_dirs,\
rm -f $(call gb_XcuMergeTarget_get_target,$*))
# $(call gb_XcuMergeTarget_XcuMergeTarget,target,configuration,prefix,xcufile)
define gb_XcuMergeTarget_XcuMergeTarget
$(call gb_XcuMergeTarget_get_target,$(1 )) : \
$(SRCDIR)/$(3 )/$(4 ) \
$(wildcard $(foreach lang,$(gb_TRANS_LANGS),$(gb_POLOCATION)/$(lang)/$(patsubst %/,%,$(dir $(1 ))).po))
$(call gb_XcuMergeTarget_get_target,$(1 )) : \
POFILES := $(foreach lang,$(gb_TRANS_LANGS),$(gb_POLOCATION)/$(lang)/$(patsubst %/,%,$(dir $(1 ))).po)
$(foreach lang,$(gb_TRANS_LANGS),$(gb_POLOCATION)/$(lang)/$(patsubst %/,%,$(dir $(1 ))).po) :
endef
# XcuResTarget class
# locale is extracted from the stem (parameter $(2))
define gb_XcuResTarget__command
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $(1 )) && \
$(gb_Configuration_XSLTCOMMAND) --nonet \
-o $(1 ) \
--stringparam xcs $(call gb_XcsTarget_for_XcuTarget,$(XCUFILE)) \
$(gb_Configuration__stringparam_schemaRoot) \
--stringparam locale $(word 2 ,$(subst /, ,$(2 ))) \
--stringparam LIBO_SHARE_FOLDER $(LIBO_SHARE_FOLDER) \
--stringparam LIBO_SHARE_HELP_FOLDER $(LIBO_SHARE_HELP_FOLDER) \
--path $(SRCDIR)/officecfg/registry \
$(gb_XcuTarget_XSLT_AllLang) \
$(3 ))
endef
$(call gb_XcuResTarget_get_target,%) : $(gb_XcuTarget_XSLT_AllLang) \
| $(gb_Configuration_XSLTCOMMAND_DEPS)
$(call gb_Output_announce,$*,$(true),XCR,2 )
$(call gb_Trace_StartRange,$*,XCR)
$(call gb_XcuResTarget__command,$@,$*,$(filter %.xcu,$^))
$(call gb_Trace_EndRange,$*,XCR)
$(call gb_XcuResTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCR,2 )
$(call gb_Helper_abbreviate_dirs,\
rm -f $(call gb_XcuResTarget_get_target,$*))
# $(call gb_XcuResTarget_XcuResTarget,target,configuration,prefix,xcufile,lang)
# this depends either on the source or on the merge target (if WITH_LANG)
define gb_XcuResTarget_XcuResTarget
ifeq ($(strip $(gb_WITH_LANG)),)
$(call gb_XcuResTarget_get_target,$(1 )) : $(SRCDIR)/$(3 )/$(4 )
else
$(call gb_XcuResTarget_get_target,$(1 )) : \
$(call gb_XcuMergeTarget_get_target,$(3 )/$(4 ))
endif
$(call gb_XcuResTarget_get_target,$(1 )) : \
$(call gb_XcsTarget_for_XcuTarget,$(4 ))
$(call gb_XcuResTarget_get_target,$(1 )) : PRIMARY_REGISTRY := $(filter $(2 ),$(gb_Configuration_PRIMARY_REGISTRY_NAME))
$(call gb_XcuResTarget_get_target,$(1 )) : XCUFILE := $(4 )
endef
# Configuration class
$(call gb_Configuration_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),CFG,4 )
$(call gb_Helper_abbreviate_dirs,\
rm -f $(call gb_Configuration_get_target,$*) $(call gb_Configuration_get_preparation_target,$*))
$(call gb_Configuration_get_target,%) :
$(call gb_Output_announce,$*,$(true),CFG,4 )
$(call gb_Trace_MakeMark,$*,CFG)
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $@) && touch $@)
$(call gb_Configuration_get_preparation_target,%) :
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $@) && touch $@)
# $(call gb_Configuration_Configuration,configuration,nodeliver)
# last parameter may be used to turn off delivering of files
# FIXME: not anymore, no files are delivered now
define gb_Configuration_Configuration
$(eval gb_Configuration_NODELIVER_$(1 ) := $(2 ))
$$(eval $$(call gb_Module_register_target,$(call gb_Configuration_get_target,$(1 )),$(call gb_Configuration_get_clean_target,$(1 ))))
$(call gb_Helper_make_userfriendly_targets,$(1 ),Configuration)
endef
# $(call gb_Configuration_add_schema,configuration,prefix,xcsfile)
# hopefully extensions do not need to add schemas with same name as officecfg
define gb_Configuration_add_schema
$(call gb_Configuration_get_clean_target,$(1 )) : \
$(call gb_XcsTarget_get_clean_target,$(3 ))
$(call gb_XcsTarget_get_target,$(3 )) : \
$(SRCDIR)/$(2 )/$(3 ) \
$(call gb_Configuration_get_preparation_target,$(1 ))
$(call gb_XcsTarget_get_target,$(3 )) : PRIMARY_REGISTRY := $(filter $(1 ),$(gb_Configuration_PRIMARY_REGISTRY_NAME))
$(call gb_Configuration_get_target,$(1 )) : \
$(call gb_XcsTarget_get_target,$(3 ))
endef
#$(call gb_Configuration_add_schemas,configuration,prefix,xcsfiles)
define gb_Configuration_add_schemas
$(foreach xcs,$(3 ),$(call gb_Configuration_add_schema,$(1 ),$(2 ),$(xcs)))
endef
# $(call gb_Configuration_add_data,configuration,prefix,xcufile)
define gb_Configuration_add_data
$(call gb_Configuration_get_clean_target,$(1 )) : \
$(call gb_XcuDataTarget_get_clean_target,$(2 )/$(3 ))
$(call gb_XcuDataTarget_get_target,$(2 )/$(3 )) : \
$(SRCDIR)/$(2 )/$(3 ) \
$(call gb_Configuration_get_preparation_target,$(1 )) \
$(call gb_XcsTarget_for_XcuTarget,$(3 ))
$(call gb_XcuDataTarget_get_target,$(2 )/$(3 )) : PRIMARY_REGISTRY := $(filter $(1 ),$(gb_Configuration_PRIMARY_REGISTRY_NAME))
$(call gb_XcuDataTarget_get_target,$(2 )/$(3 )) : XCUFILE := $(3 )
$(call gb_Configuration_get_target,$(1 )) : \
$(call gb_XcuDataTarget_get_target,$(2 )/$(3 ))
endef
#$(call gb_Configuration_add_datas,configuration,prefix,xcufiles)
define gb_Configuration_add_datas
$(foreach xcu,$(3 ),$(call gb_Configuration_add_data,$(1 ),$(2 ),$(xcu)))
endef
# $(call gb_Configuration_add_spool_module,configuration,prefix,xcufile)
define gb_Configuration_add_spool_module
$(call gb_Configuration_get_clean_target,$(1 )) : \
$(call gb_XcuModuleTarget_get_clean_target,$(2 )/$(3 ))
$(call gb_XcuModuleTarget_get_target,$(2 )/$(3 )) : \
$(call gb_XcuDataSource_for_XcuModuleTarget,$(2 )/$(3 )) \
$(call gb_Configuration_get_preparation_target,$(1 )) \
$(call gb_XcsTarget_for_XcuModuleTarget,$(3 ))
$(call gb_XcuModuleTarget_get_target,$(2 )/$(3 )) : PRIMARY_REGISTRY := $(filter $(1 ),$(gb_Configuration_PRIMARY_REGISTRY_NAME))
$(call gb_Configuration_get_target,$(1 )) : \
$(call gb_XcuModuleTarget_get_target,$(2 )/$(3 ))
endef
# $(call gb_Configuration_add_spool_modules,configuration,prefix,xcufiles)
define gb_Configuration_add_spool_modules
$(foreach xcu,$(3 ),$(call gb_Configuration_add_spool_module,$(1 ),$(2 ),$(xcu)))
endef
define gb_Configuration__add_langpack
$(if $(gb_Configuration_NODELIVER_$(1 )),\
$(error TODO not needed yet: cannot add langpack if nodeliver))
$(call gb_Configuration_get_target,$(1 )) : \
$(call gb_XcuLangpackTarget__get_target_with_lang,$(3 ),$(4 ))
$(call gb_XcuLangpackTarget__get_target_with_lang,$(3 ),$(4 )) : \
$(SRCDIR)/$(2 )/$(3 ).tmpl
$(call gb_XcuLangpackTarget__get_target_with_lang,$(3 ),$(4 )) : LANGUAGE := $(4 )
endef
# $(call gb_Configuration_add_spool_langpack,configuration,prefix,xcufile)
define gb_Configuration_add_spool_langpack
$(foreach lang,$(gb_Configuration_LANGS),$(eval \
$(call gb_Configuration__add_langpack,$(1 ),$(2 ),$(strip $(3 )),$(lang))))
$(call gb_Configuration_get_clean_target,$(1 )) : \
$(call gb_XcuLangpackTarget_get_clean_target,$(strip $(3 )))
endef
# $(call gb_Configuration_add_localized_data,configuration,prefix,xcufile)
define gb_Configuration_add_localized_data
$(eval $(call gb_Configuration_add_data,$(1 ),$(2 ),$(3 )))
ifneq ($(strip $(gb_WITH_LANG)),)
$(eval $(call gb_XcuMergeTarget_XcuMergeTarget,$(2 )/$(3 ),$(1 ),$(2 ),$(3 )))
$(eval $(call gb_Configuration_get_clean_target,$(1 )) : \
$(call gb_XcuMergeTarget_get_clean_target,$(2 )/$(3 )))
endif
$(foreach lang,$(gb_Configuration_LANGS),$(eval \
$(call gb_XcuResTarget_XcuResTarget,$(1 )/$(lang)/$(3 ),$(1 ),$(2 ),$(3 ),$(lang))))
$(foreach lang,$(gb_Configuration_LANGS),$(eval \
$(call gb_Configuration_get_target,$(1 )) : \
$(call gb_XcuResTarget_get_target,$(1 )/$(lang)/$(3 ))))
$(foreach lang,$(gb_Configuration_LANGS),$(eval \
$(call gb_Configuration_get_clean_target,$(1 )) : \
$(call gb_XcuResTarget_get_clean_target,$(1 )/$(lang)/$(3 ))))
endef
# $(call gb_Configuration_add_localized_datas,configuration,prefix,xcufile)
define gb_Configuration_add_localized_datas
$(foreach xcu,$(3 ),$(call gb_Configuration_add_localized_data,$(1 ),$(2 ),$(xcu)))
endef
# Set extra registry this configuration can use schemas from.
#
# Example:
# # foo needs schemas from the main configuration
# $(eval $(call gb_Configuration_use_configuration,foo,registry))
define gb_Configuration_use_configuration
$(call gb_Configuration_get_preparation_target,$(1 )) : $(call gb_Configuration_get_target,$(2 ))
endef
# apparently extensions package the XcuMergeTarget directly...
# trivial convenience function to get the right file:
ifeq ($(gb_WITH_LANG),)
gb_XcuFile_for_extension = $(SRCDIR)/$(1 )
else
gb_XcuFile_for_extension = $(call gb_XcuMergeTarget_get_target,$(1 ))
endif
# vim: set noet sw=4 ts=4:
Messung V0.5 in Prozent C=80 H=92 G=86
¤ Dauer der Verarbeitung: 0.14 Sekunden
(vorverarbeitet am 2026-06-06)
¤
*© Formatika GbR, Deutschland