office-gobmx/solenv/gbuild/Configuration.mk
Michael Stahl ba1f609d0d extensions: convert update stuff to gbuild
The updchk is renamed to updatecheckui so it does not collide with
updchk.uno.
2011-12-14 19:57:14 +01:00

471 lines
17 KiB
Makefile

#***************************************************************
# 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
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#***************************************************************
# 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
# => zip (per lang)
# => XcuResTarget: resources (per lang)
# => buildtools
# => XcuMergeTarget: merge
# => buildtools (cfgex)
# => Xcu data source
# => localize.sdf
# => XcsTarget (schema)
# Per-repo pattern rules for each repository do not work for all targets
# because the prerequisites of some targets need to have the stem mangled
# and this does not seem to be possible in GNU make because when the stem is
# matched variables have already been expanded (this was possible in dmake).
#
# So to keep things consistent the Configuration takes a parameter for the
# repository and all targets use that to find the source file.
#
# Targets where % rule per repo works: XcsTarget XcuDataTarget XcuMergeTarget
# fails: XcuModuleTarget XcuLangpackTarget XcuResTarget
#
gb_Configuration__get_source = $(SRCDIR)/$(2)
# 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_outdir_target,$(basename $(1)).xcs)
endef
gb_Configuration_LANGS := en-US $(filter-out en-US,$(gb_WITH_LANG))
gb_XcsTarget_XSLT_SchemaVal := $(OUTDIR)/xml/processing/schema_val.xsl
gb_XcsTarget_XSLT_Sanity := $(OUTDIR)/xml/processing/sanity.xsl
gb_XcsTarget_XSLT_SchemaTrim := $(OUTDIR)/xml/processing/schema_trim.xsl
gb_XcsTarget_DTD_Schema := $(OUTDIR)/xml/registry/component-schema.dtd
define gb_XcsTarget__command
$(call gb_Output_announce,$(2),$(true),XCS,1)
$(call gb_Helper_abbreviate_dirs_native,\
mkdir -p $(dir $(1)) && \
$(gb_XSLTPROC) --nonet \
--noout \
--stringparam componentName $(subst /,.,$(basename $(XCSFILE))) \
--stringparam root $(subst $(XCSFILE),,$(3)) \
$(gb_XcsTarget_XSLT_SchemaVal) \
$(3) && \
$(gb_XSLTPROC) --nonet \
--noout \
$(gb_XcsTarget_XSLT_Sanity) \
$(3) && \
$(gb_XSLTPROC) --nonet \
-o $(1) \
$(gb_XcsTarget_XSLT_SchemaTrim) \
$(3))
endef
$(call gb_XcsTarget_get_target,%) : \
$(gb_XcsTarget_XSLT_SchemaVal) $(gb_XcsTarget_XSLT_Sanity) \
$(gb_XcsTarget_XSLT_SchemaTrim) $(gb_XcsTarget_DTD_Schema)
$(call gb_XcsTarget__command,$@,$*,$(filter %.xcs,$^))
$(call gb_XcsTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCS,1)
$(call gb_Helper_abbreviate_dirs,\
rm -f $(call gb_XcsTarget_get_target,$*) \
$(call gb_XcsTarget_get_outdir_target,$(XCSFILE)))
$(call gb_XcsTarget_get_outdir_target,%) :
$(call gb_Helper_abbreviate_dirs,\
$(call gb_Deliver_deliver,$<,$@))
# XcuDataTarget class
gb_XcuTarget_XSLT_AllLang := $(OUTDIR)/xml/processing/alllang.xsl
gb_XcuDataTarget_XSLT_DataVal := $(OUTDIR)/xml/processing/data_val.xsl
gb_XcuDataTarget_DTD_ComponentUpdate := $(OUTDIR)/xml/registry/component-update.dtd
define gb_XcuDataTarget__command
$(call gb_Output_announce,$(2),$(true),XCU,2)
$(call gb_Helper_abbreviate_dirs_native,\
mkdir -p $(dir $(1)) && \
$(gb_XSLTPROC) --nonet \
--noout \
--stringparam xcs $(call gb_XcsTarget_for_XcuTarget,$(XCUFILE)) \
--stringparam schemaRoot $(call gb_XcsTarget_get_outdir_target,) \
--path $(gb_Configuration_registry) \
$(gb_XcuDataTarget_XSLT_DataVal) \
$(3) && \
$(gb_XSLTPROC) --nonet \
-o $(1) \
--stringparam xcs $(call gb_XcsTarget_for_XcuTarget,$(XCUFILE)) \
--stringparam schemaRoot $(call gb_XcsTarget_get_outdir_target,) \
--path $(gb_Configuration_registry) \
$(gb_XcuTarget_XSLT_AllLang) \
$(3))
endef
$(call gb_XcuDataTarget_get_target,%) : $(gb_XcuDataTarget_XSLT_DataVal) \
$(gb_XcuTarget_XSLT_AllLang) $(gb_XcuDataTarget_DTD_ComponentUpdate)
$(call gb_XcuDataTarget__command,$@,$*,$(filter %.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,$*) \
$(call gb_XcuDataTarget_get_outdir_target,$(XCUFILE)))
$(call gb_XcuDataTarget_get_outdir_target,%) :
$(call gb_Helper_abbreviate_dirs,\
$(call gb_Deliver_deliver,$<,$@))
# XcuModuleTarget class
define gb_XcuDataSource_for_XcuModuleTarget
$(call gb_Configuration__get_source,$(1),$(basename $(subst -,.,$(basename $(2)))).xcu)
endef
define gb_XcsTarget_for_XcuModuleTarget
$(call gb_XcsTarget_get_outdir_target,$(basename $(subst -,.,$(basename $(1)))).xcs)
endef
define gb_XcuModuleTarget__command
$(call gb_Output_announce,$(2),$(true),XCU,3)
$(call gb_Helper_abbreviate_dirs_native,\
mkdir -p $(dir $(1)) && \
$(gb_XSLTPROC) --nonet \
-o $(1) \
--stringparam xcs $(4) \
--stringparam schemaRoot $(call gb_XcsTarget_get_outdir_target,) \
--stringparam module $(notdir $(subst -,/,$(basename $(notdir $(2))))) \
$(gb_XcuTarget_XSLT_AllLang) \
$(3))
endef
$(call gb_XcuModuleTarget_get_target,%) : $(gb_XcuTarget_XSLT_AllLang)
$(call gb_XcuModuleTarget__command,$@,$*,$(filter %.xcu,$^),$(filter %.xcs,$^))
$(call gb_XcuModuleTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCU,3)
$(call gb_Helper_abbreviate_dirs,\
rm -f $(call gb_XcuModuleTarget_get_target,$*) \
$(call gb_XcuModuleTarget_get_outdir_target,$(XCUFILE)))
$(call gb_XcuModuleTarget_get_outdir_target,%) :
$(call gb_Helper_abbreviate_dirs,\
$(call gb_Deliver_deliver,$<,$@))
# XcuLangpackTarget class
gb_XcuLangpackTarget__get_name_with_lang = $(basename $(1))-$(2)$(suffix $(1))
gb_XcuLangpackTarget__get_outdir_target_with_lang = \
$(call gb_XcuLangpackTarget_get_outdir_target,$(call gb_XcuLangpackTarget__get_name_with_lang,$(1),$(2)))
gb_XcuLangpackTarget__get_target_with_lang = \
$(call gb_XcuLangpackTarget_get_target,$(call gb_XcuLangpackTarget__get_name_with_lang,$(1),$(2)))
gb_XcuLangpackTarget_SED_delcomment := $(OUTDIR)/xml/processing/delcomment.sed
define gb_XcuLangpackTarget__command
$(call gb_Output_announce,$(2),$(true),XCU,4)
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $(1)) && \
sed -e "s/__LANGUAGE__/$(LANG)/" -f $(gb_XcuLangpackTarget_SED_delcomment)\
$(3) > $(1))
endef
$(call gb_XcuLangpackTarget_get_target,%) : \
$(gb_XcuLangpackTarget_SED_delcomment)
$(call gb_XcuLangpackTarget__command,$@,$*,$(filter %.tmpl,$^))
$(call gb_XcuLangpackTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCU,4)
$(call gb_Helper_abbreviate_dirs,\
rm -f $(foreach lang,$(gb_Configuration_LANGS),\
$(call gb_XcuLangpackTarget__get_target_with_lang,$*,$(lang)) \
$(call gb_XcuLangpackTarget__get_outdir_target_with_lang,$(XCUFILE),$(lang))))
$(call gb_XcuLangpackTarget_get_outdir_target,%) :
$(call gb_Helper_abbreviate_dirs,\
$(call gb_Deliver_deliver,$<,$@))
# XcuMergeTarget class
gb_XcuMergeTarget_CFGEXTARGET := $(call gb_Executable_get_target,cfgex)
gb_XcuMergeTarget_CFGEXCOMMAND := $(gb_Helper_set_ld_path) $(gb_XcuMergeTarget_CFGEXTARGET)
gb_XcuMergeTarget_SDFLOCATION := $(SRCDIR)/translations/$(INPATH)/misc/sdf/
# PRJNAME is computed from the stem (parameter $(2))
define gb_XcuMergeTarget__command
$(call gb_Output_announce,$(2),$(true),XCU,5)
$(call gb_Helper_abbreviate_dirs_native,\
mkdir -p $(dir $(1)) && \
$(gb_XcuMergeTarget_CFGEXCOMMAND) \
-p $(firstword $(subst /, ,$(2))) \
-i $(3) \
-o $(1) \
-m $(SDF) \
-l all)
endef
$(call gb_XcuMergeTarget_get_target,%) : | $(gb_XcuMergeTarget_CFGEXTARGET)
$(if $(SDF),$(call gb_XcuMergeTarget__command,$@,$*,$(filter %.xcu,$^)),mkdir -p $(dir $@) && cp $(filter %.xcu,$^) $@)
$(call gb_XcuMergeTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCU,5)
$(call gb_Helper_abbreviate_dirs,\
rm -f $(call gb_XcuMergeTarget_get_target,$*))
# $(call gb_XcuMergeTarget_XcuMergeTarget,target,zipfile,prefix,xcufile)
define gb_XcuMergeTarget_XcuMergeTarget
$(call gb_XcuMergeTarget_get_target,$(1)) : \
$(call gb_Configuration__get_source,$(2),$(3)/$(4)) \
$(realpath $(gb_XcuMergeTarget_SDFLOCATION)$(dir $(1))localize.sdf)
$(call gb_XcuMergeTarget_get_target,$(1)) : \
SDF := $(realpath $(gb_XcuMergeTarget_SDFLOCATION)$(dir $(1))localize.sdf)
endef
# XcuResTarget class
# locale is extracted from the stem (parameter $(2))
define gb_XcuResTarget__command
$(call gb_Output_announce,$(2),$(true),XCU,6)
$(call gb_Helper_abbreviate_dirs_native,\
mkdir -p $(dir $(1)) && \
$(gb_XSLTPROC) --nonet \
-o $(1) \
--stringparam xcs $(call gb_XcsTarget_for_XcuTarget,$(XCUFILE)) \
--stringparam schemaRoot $(call gb_XcsTarget_get_outdir_target,) \
--stringparam locale $(word 2,$(subst /, ,$(2))) \
--path $(gb_Configuration_registry) \
$(gb_XcuTarget_XSLT_AllLang) \
$(3))
endef
$(call gb_XcuResTarget_get_target,%) : $(gb_XcuTarget_XSLT_AllLang)
$(call gb_XcuResTarget__command,$@,$*,$(filter %.xcu,$^))
$(call gb_XcuResTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),XCU,6)
$(call gb_Helper_abbreviate_dirs,\
rm -f $(call gb_XcuResTarget_get_target,$*))
# $(call gb_XcuResTarget_XcuResTarget,target,zipfile,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)) : \
$(call gb_Configuration__get_source,$(2),$(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)) : XCUFILE := $(4)
endef
# Configuration class
$(call gb_Configuration_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),CFG,1)
$(call gb_Helper_abbreviate_dirs,\
rm -f $(call gb_Configuration_get_target,$*))
$(call gb_Configuration_get_target,%) :
$(call gb_Output_announce,$*,$(true),CFG,1)
$(call gb_Helper_abbreviate_dirs,\
mkdir -p $(dir $@) && touch $@)
# TODO: ?
define gb_Configuration_Configuration_nozip
$$(eval $$(call gb_Module_register_target,$(call gb_Configuration_get_target,$(1)),$(call gb_Configuration_get_clean_target,$(1))))
endef
# $(call gb_Configuration_Configuration,zipfile,repo,nodeliver)
# cannot use target local variable for REPO because it's needed in prereq
# last parameter may be used to turn off delivering of files
define gb_Configuration_Configuration
$(eval gb_Configuration_NODELIVER_$(1) := $(2))
$(foreach lang,$(gb_Configuration_LANGS),$(eval \
$(call gb_Zip_Zip,$(1)_$(lang),$(call gb_XcuResTarget_get_target,$(1)/$(lang)))))
$(foreach lang,$(gb_Configuration_LANGS),$(eval \
$(call gb_Configuration_get_target,$(1)) : \
$(call gb_Zip_get_final_target,$(1)_$(lang))))
$(foreach lang,$(gb_Configuration_LANGS),$(eval \
$(call gb_Configuration_get_clean_target,$(1)) : \
$(call gb_Zip_get_clean_target,$(1)_$(lang))))
$$(eval $$(call gb_Module_register_target,$(call gb_Configuration_get_target,$(1)),$(call gb_Configuration_get_clean_target,$(1))))
endef
# $(call gb_Configuration_add_schema,zipfile,prefix,xcsfile)
# FIXME this is always delivered because commands depend on it...
# 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,$(2)/$(3))
$(call gb_XcsTarget_get_target,$(2)/$(3)) : \
$(call gb_Configuration__get_source,$(1),$(2)/$(3))
$(call gb_XcsTarget_get_target,$(2)/$(3)) : XCSFILE := $(3)
$(call gb_XcsTarget_get_clean_target,$(2)/$(3)) : XCSFILE := $(3)
$(call gb_Configuration_get_target,$(1)) : \
$(call gb_XcsTarget_get_outdir_target,$(3))
$(call gb_XcsTarget_get_outdir_target,$(3)) : \
$(call gb_XcsTarget_get_target,$(2)/$(3))
$(call gb_Deliver_add_deliverable,$(call gb_XcsTarget_get_outdir_target,$(3)),\
$(call gb_XcsTarget_get_target,$(2)/$(3)),$(2)/$(3))
endef
#$(call gb_Configuration_add_schemas,zipfile,prefix,xcsfiles)
define gb_Configuration_add_schemas
$(foreach xcs,$(3),$(call gb_Configuration_add_schema,$(1),$(2),$(xcs)))
endef
# $(call gb_Configuration_add_data,zipfile,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)) : \
$(call gb_Configuration__get_source,$(1),$(2)/$(3)) \
$(call gb_XcsTarget_for_XcuTarget,$(3))
$(call gb_XcuDataTarget_get_target,$(2)/$(3)) : XCUFILE := $(3)
$(call gb_XcuDataTarget_get_clean_target,$(2)/$(3)) : XCUFILE := $(3)
ifeq ($(strip $(gb_Configuration_NODELIVER_$(1))),)
$(call gb_Configuration_get_target,$(1)) : \
$(call gb_XcuDataTarget_get_outdir_target,$(3))
$(call gb_XcuDataTarget_get_outdir_target,$(3)) : \
$(call gb_XcuDataTarget_get_target,$(2)/$(3))
$(call gb_Deliver_add_deliverable,\
$(call gb_XcuDataTarget_get_outdir_target,$(3)),\
$(call gb_XcuDataTarget_get_target,$(2)/$(3)),\
$(2)/$(3))
else
$(call gb_Configuration_get_target,$(1)) : \
$(call gb_XcuDataTarget_get_target,$(2)/$(3))
endif
endef
#$(call gb_Configuration_add_schemas,zipfile,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,zipfile,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,$(1),$(2)/$(3)) \
$(call gb_XcsTarget_for_XcuModuleTarget,$(3))
$(call gb_XcuModuleTarget_get_clean_target,$(2)/$(3)) : XCUFILE := $(3)
ifeq ($(strip $(gb_Configuration_NODELIVER_$(1))),)
$(call gb_Configuration_get_target,$(1)) : \
$(call gb_XcuModuleTarget_get_outdir_target,$(3))
$(call gb_XcuModuleTarget_get_outdir_target,$(3)) : \
$(call gb_XcuModuleTarget_get_target,$(2)/$(3))
$(call gb_Deliver_add_deliverable,\
$(call gb_XcuModuleTarget_get_outdir_target,$(3)),\
$(call gb_XcuModuleTarget_get_target,$(2)/$(3)),\
$(2)/$(3))
else
$(call gb_Configuration_get_target,$(1)) : \
$(call gb_XcuModuleTarget_get_target,$(2)/$(3))
endif
endef
# $(call gb_Configuration_add_spool_modules,zipfile,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_clean_target,$(1)) : \
$(call gb_XcuLangpackTarget_get_clean_target,$(2)/$(3))
$(call gb_Configuration_get_target,$(1)) : \
$(call gb_XcuLangpackTarget__get_outdir_target_with_lang,$(3),$(4))
$(call gb_XcuLangpackTarget__get_target_with_lang,$(2)/$(3),$(4)) : \
$(SRCDIR)/$(2)/$(3).tmpl
$(call gb_XcuLangpackTarget_get_clean_target,$(2)/$(3)) : XCUFILE := $(3)
$(call gb_XcuLangpackTarget__get_target_with_lang,$(2)/$(3),$(4)) : LANG := $(4)
$(call gb_XcuLangpackTarget__get_outdir_target_with_lang,$(3),$(4)) : \
$(call gb_XcuLangpackTarget__get_target_with_lang,$(2)/$(3),$(4))
$(call gb_Deliver_add_deliverable,\
$(call gb_XcuLangpackTarget__get_outdir_target_with_lang,$(3),$(4)),\
$(call gb_XcuLangpackTarget__get_target_with_lang,$(2)/$(3),$(4)),\
$(call gb_XcuLangpackTarget__get_name_with_lang,$(2)/$(3),$(4)))
endef
# $(call gb_Configuration_add_spool_langpack,zipfile,prefix,xcufile)
define gb_Configuration_add_spool_langpack
$(foreach lang,$(gb_Configuration_LANGS),$(eval \
$(call gb_Configuration__add_langpack,$(1),$(2),$(strip $(3)),$(lang))))
endef
# $(call gb_Configuration_add_localized_data,zipfile,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_Zip_add_file,$(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,zipfile,prefix,xcufile)
define gb_Configuration_add_localized_datas
$(foreach xcu,$(3),$(call gb_Configuration_add_localized_data,$(1),$(2),$(xcu)))
endef
# vim: set noet sw=4 ts=4: