db3a61cd95
...instead of by listing the content somewhat redundantly in the Rdb_*.mk files, to avoid duplication of logic for components that are only built conditionally (and thus should only be included conditionally in the corresponding Rdb). To achieve that, add an "rdb" parameter to gb_ComponentTarget_ComponentTarget (and to the gb_*_set_componentfile macros that internally call gb_ComponentTarget_ComponentTarget), which is used to make the appropriate gb_Rdb_add_component call internally from within gb_ComponentTarget_ComponentTarget. (As a special case, gb_CppunitTest_set_componentfile shall not call gb_Rdb_add_component, as that has already been done by the corresponding gb_Library_set_componentfile call, so allow the gb_ComponentTarget_ComponentTarget "rdb" parameter to be empty to support that special case.) Most Rdb_*.mk files are thus mostly empty now. One exception is i18npool/Rdb_saxparser.mk, which duplicates some of the Rdb_services content as needed during the build in CustomTarget_i18npool/localedata.1c9a40299d
"gbuild: create services.rdb from built components" had already tried to do something similar (in addition to other things) under a new --enable-services-rdb-from-build option. However, that approach had four drawbacks that this approach here addresses (and which thus partly reverts1c9a40299d
): 1 Rdb_services shall not contain the component files of all libraries that are built. While that commit filtered out the component files that go into Rdb_ure/services (ure/Rdb_ure.mk), it failed to filter out the component files that go into others like Rdb_postgresql-sdbc (connectivity/Rdb_postgresql-sdbc.mk). 2 The code added by that commit to Makefile.gbuild codified the knowledge that there is an Rdb_services, which is brittle. 3 The code added by that commit to solenv/gbuild/Rdb.mk codified the knowledge (for gb_Rdb__URECOMPONENTS) that there is an Rdb_ure/services, which is brittle. 4 Introducing an --enable-services-rdb-from-build option needlessly provided two different ways how the content of Rdb_services is assembled. The changes done here would leave --enable-services-rdb-from-build as a misnomer, as it no longer controls how Rdb_services is assembled. I thus renamed it to --enable-customtarget-components, as that is apparently what it still does now. Change-Id: Ia5e8df4b640146c77421fcec6daa11a9cd260265 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126577 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
75 lines
2.8 KiB
Makefile
75 lines
2.8 KiB
Makefile
# -*- 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/.
|
|
#
|
|
|
|
gb_Rdb__get_install_target = $(INSTROOT)/$(LIBO_ETC_FOLDER)/services/$(1).rdb
|
|
|
|
define gb_Rdb__command
|
|
$(call gb_Helper_abbreviate_dirs,\
|
|
RESPONSEFILE=$(call gb_var2file,$(shell $(call gb_MKTEMP)),70,\
|
|
<list> \
|
|
$(foreach component,$(COMPONENTS),\
|
|
<filename>$(call gb_ComponentTarget_get_target,$(component))</filename>) \
|
|
</list>) && \
|
|
mkdir -p $(dir $@) && \
|
|
$(call gb_ExternalExecutable_get_command,xsltproc) --nonet -o $(1) \
|
|
$(SRCDIR)/solenv/bin/packcomponents.xslt $$RESPONSEFILE && \
|
|
rm $$RESPONSEFILE)
|
|
endef
|
|
|
|
$(call gb_Rdb_get_target,%) :| $(call gb_ExternalExecutable_get_dependencies,xsltproc)
|
|
$(call gb_Output_announce,$*,$(true),RDB,1)
|
|
$(call gb_Trace_StartRange,$*,RDB)
|
|
$(call gb_Rdb__command,$@,$*,$?,$^)
|
|
$(call gb_Trace_EndRange,$*,RDB)
|
|
|
|
.PHONY : $(call gb_Rdb_get_clean_target,%)
|
|
$(call gb_Rdb_get_clean_target,%) :
|
|
$(call gb_Output_announce,$*,$(false),RDB,1)
|
|
$(call gb_Helper_abbreviate_dirs,\
|
|
rm -f $(call gb_Rdb__get_install_target,$*) $(call gb_Rdb_get_target,$*))
|
|
|
|
define gb_Rdb__Rdb_impl
|
|
# gb_Rdb_add_component, which adds to the target-specific COMPONENTS variable, can be called (from
|
|
# gb_ComponentTarget_ComponentTarget) before gb_Rdb__Rdb_impl is called, so using `COMPONENTS :=`
|
|
# here could lose content; but still use `COMPONENTS ?=` here to establish COMPONENTS as target-
|
|
# specific even in the corner case of an empty Rdb with no gb_Rdb_add_component calls, so that the
|
|
# use of $(COMPONENTS) in gb_Rdb__command would not accidentally pick a global COMPONENTS variable:
|
|
$(call gb_Rdb_get_target,$(1)) : COMPONENTS ?=
|
|
$(call gb_Rdb_get_target,$(1)) : $(gb_Module_CURRENTMAKEFILE)
|
|
$$(eval $$(call gb_Module_register_target,$(2),$(call gb_Rdb_get_clean_target,$(1))))
|
|
$(call gb_Helper_make_userfriendly_targets,$(1),Rdb,$(2))
|
|
|
|
endef
|
|
|
|
define gb_Rdb_Rdb
|
|
$(call gb_Rdb__Rdb_impl,$(1),$(call gb_Rdb_get_target,$(1)))
|
|
|
|
endef
|
|
|
|
# FIXME this needs some layer-like thing for the special case in URE
|
|
define gb_Rdb_Rdb_install
|
|
$(call gb_Rdb__Rdb_impl,$(1),$(if $(2),$(INSTROOT)/$(2),$(call gb_Rdb__get_install_target,$(1))))
|
|
$(call gb_Helper_install_final, \
|
|
$(if $(2),$(INSTROOT)/$(2),$(call gb_Rdb__get_install_target,$(1))), \
|
|
$(call gb_Rdb_get_target,$(1)))
|
|
|
|
endef
|
|
|
|
define gb_Rdb_add_component
|
|
$(call gb_Rdb_get_target,$(1)) : $(call gb_ComponentTarget_get_target,$(2))
|
|
$(call gb_Rdb_get_target,$(1)) : COMPONENTS += $(2)
|
|
|
|
endef
|
|
|
|
define gb_Rdb_add_components
|
|
$(foreach component,$(2),$(call gb_Rdb_add_component,$(1),$(component)))
|
|
|
|
endef
|
|
|
|
# vim: set noet sw=4 ts=4:
|