diff options
-rwxr-xr-x | Repository.mk | 8 | ||||
-rw-r--r-- | RepositoryExternal.mk | 81 | ||||
-rw-r--r-- | extras/CustomTarget_autocorr.mk | 5 | ||||
-rw-r--r-- | filter/Configuration_filter.mk | 9 | ||||
-rw-r--r-- | filter/CustomTarget_svg.mk | 4 | ||||
-rw-r--r-- | i18npool/CustomTarget_localedata.mk | 5 | ||||
-rw-r--r-- | officecfg/CustomTarget_registry.mk | 5 | ||||
-rw-r--r-- | readlicense_oo/CustomTarget_readme.mk | 5 | ||||
-rw-r--r-- | solenv/gbuild/ComponentTarget.mk | 5 | ||||
-rw-r--r-- | solenv/gbuild/ComponentsTarget.mk | 5 | ||||
-rw-r--r-- | solenv/gbuild/Configuration.mk | 29 | ||||
-rw-r--r-- | solenv/gbuild/ExternalExecutable.mk | 127 | ||||
-rw-r--r-- | solenv/gbuild/Rdb.mk | 4 | ||||
-rw-r--r-- | solenv/gbuild/UnoApiTarget.mk | 2 | ||||
-rw-r--r-- | solenv/gbuild/gbuild.mk | 48 | ||||
-rw-r--r-- | writerfilter/CustomTarget_source.mk | 42 |
16 files changed, 286 insertions, 98 deletions
diff --git a/Repository.mk b/Repository.mk index 61d3ce90b8ec..d4e430811334 100755 --- a/Repository.mk +++ b/Repository.mk @@ -759,4 +759,12 @@ $(eval $(call gb_Helper_register_jars,OXT, \ sun-report-builder \ )) +# External executables +$(eval $(call gb_ExternalExecutable_register_executables,\ + python \ + ucpp \ + xmllint \ + xsltproc \ +)) + # vim: set noet sw=4 ts=4: diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk index 5f02c49df08b..bec2abd7593e 100644 --- a/RepositoryExternal.mk +++ b/RepositoryExternal.mk @@ -2398,4 +2398,85 @@ endef endif # SYSTEM_JFREEREPORT + +# Executables + +ifneq ($(SYSTEM_LIBXML_FOR_BUILD),YES) + +gb_ExternalExecutable__register_xmllint := + +else # ! SYSTEM_LIBXML_FOR_BUILD + +define gb_ExternalExecutable__register_xmllint +gb_ExternalExecutable__xmllint_TARGET := $(call gb_Executable_get_target_for_build,xmllint) +gb_ExternalExecutable__xmllint_COMMAND := $(gb_Helper_set_ld_path) $(ICECREAM_RUN) $(gb_ExternalExecutable__xmllint_TARGET) + +endef + +endif # SYSTEM_LIBXML_FOR_BUILD + +ifeq ($(SYSTEM_LIBXSLT_FOR_BUILD),YES) + +gb_ExternalExecutable__register_xsltproc := + +else # ! SYSTEM_LIBXSLT_FOR_BUILD + +define gb_ExternalExecutable__register_xsltproc +gb_ExternalExecutable__xsltproc_TARGET := $(call gb_Executable_get_target_for_build,xsltproc) +gb_ExternalExecutable__xsltproc_COMMAND := $(gb_Helper_set_ld_path) $(ICECREAM_RUN) $(gb_ExternalExecutable__xsltproc_TARGET) + +endef + +endif # SYSTEM_LIBXSLT_FOR_BUILD + +ifneq (,$(SYSTEM_UCPP)) + +gb_ExternalExecutable__register_ucpp := + +else # ! SYSTEM_UCPP + +define gb_ExternalExecutable__register_ucpp +gb_ExternalExecutable__ucpp_TARGET := $(call gb_Executable_get_target_for_build,ucpp) + +endef + +endif # SYSTEM_UCPP + +# TODO what do do with gb_PYTHON_PRECOMMAND? Move here? +ifeq ($(SYSTEM_PYTHON),YES) + +define gb_ExternalExecutable__register_python +gb_ExternalExecutable__python_COMMAND := $(ICECREAM_RUN) $(PYTHON) + +endef + +else ifeq ($(OS),MACOSX) + +#fixme: remove this MACOSX ifeq branch by filling in gb_PYTHON_PRECOMMAND in +#gbuild/platform/macosx.mk correctly for mac, e.g. PYTHONPATH and PYTHONHOME +#dirs for in-tree internal python +define gb_ExternalExecutable__register_python +gb_ExternalExecutable__python_COMMAND := $(ICECREAM_RUN) $(PYTHON) + +endef + +else ifeq ($(DISABLE_PYTHON),TRUE) + +# Build-time python +gb_ExternalExecutable__register_python := + +else # ! SYSTEM_PYTHON + +# internal python +define gb_ExternalExecutable__register_python +gb_ExternalExecutable__python_TARGET := $(call gb_Executable_get_target_for_build,python) +gb_ExternalExecutable__python_PRECOMMAND := $(gb_PYTHON_PRECOMMAND) +gb_ExternalExecutable__python_DEPS := \ + $(call gb_Executable_get_target_for_build,python) \ + $(call gb_Package_get_target,python3) + +endef + +endif # SYSTEM_PYTHON + # vim: set noet sw=4 ts=4: diff --git a/extras/CustomTarget_autocorr.mk b/extras/CustomTarget_autocorr.mk index e621b348542f..0c6809bc7a66 100644 --- a/extras/CustomTarget_autocorr.mk +++ b/extras/CustomTarget_autocorr.mk @@ -281,9 +281,10 @@ $(call gb_CustomTarget_get_workdir,extras/source/autotext)/%/mimetype : $(SRCDIR $(call gb_Output_announce,$*/mimetype,$(true),CPY,1) cp $< $@ -$(call gb_CustomTarget_get_workdir,extras/source/autotext)/%.xml : $(SRCDIR)/extras/source/autotext/lang/%.xml +$(call gb_CustomTarget_get_workdir,extras/source/autotext)/%.xml : $(SRCDIR)/extras/source/autotext/lang/%.xml \ + | $(call gb_ExternalExecutable_get_deps,xsltproc) $(call gb_Output_announce,$*.xml,$(true),XSL,1) - $(gb_XSLTPROC) -o $@ $(SRCDIR)/extras/util/compact.xsl $< + $(call gb_ExternalExecutable_get_command,xsltproc) -o $@ $(SRCDIR)/extras/util/compact.xsl $< $(call gb_CustomTarget_get_workdir,extras/source/autotext)/%.dat : $(call gb_Output_announce,$*.dat,$(true),ZIP,2) diff --git a/filter/Configuration_filter.mk b/filter/Configuration_filter.mk index dd4a09d8a9a5..d7fbe1e80537 100644 --- a/filter/Configuration_filter.mk +++ b/filter/Configuration_filter.mk @@ -22,9 +22,9 @@ # semi-integrated with the stuff from Configuration.mk; not exactly pretty... ifeq ($(SOLAR_JAVA),) -filter_MERGE_TARGET := $(gb_PYTHONTARGET) \ +filter_MERGE_TARGET := $(call gb_ExternalExecutable_get_deps,python) \ $(SRCDIR)/filter/source/config/tools/merge/pyAltFCFGMerge -filter_MERGE := $(gb_PYTHON) \ +filter_MERGE := $(call gb_ExternalExecutable_get_command,python) \ $(SRCDIR)/filter/source/config/tools/merge/pyAltFCFGMerge else # SOLAR_JAVA filter_MERGE_TARGET := $(OUTDIR_FOR_BUILD)/bin/FCFGMerge.jar @@ -229,11 +229,12 @@ $(call gb_Configuration_get_clean_target,fcfg_langpack) : \ # so generate non-pattern rules which have higher priority even in GNUmake 3.81 define filter_XcuResTarget__rule $$(call filter_XcuResTarget_get_target,$(1)) : \ - $(filter_XSLT_langfilter) $(filter_XcuFilterUiTarget) + $(filter_XSLT_langfilter) $(filter_XcuFilterUiTarget) \ + | $(call gb_ExternalExecutable_get_deps,xsltproc) $$(call gb_Output_announce,$(1),$(true),XCU,1) $$(call gb_Helper_abbreviate_dirs,\ mkdir -p $$(dir $$@) && \ - $(gb_XSLTPROC) --nonet --stringparam lang $(1) \ + $(call gb_ExternalExecutable_get_command,xsltproc) --nonet --stringparam lang $(1) \ $(filter_XSLT_langfilter) \ $(filter_XcuFilterUiTarget) > $$@) endef diff --git a/filter/CustomTarget_svg.mk b/filter/CustomTarget_svg.mk index 1b374ff6969a..461907e93907 100644 --- a/filter/CustomTarget_svg.mk +++ b/filter/CustomTarget_svg.mk @@ -59,12 +59,12 @@ $(filter_GEN_svg_Tokens_cxx) : $(filter_GEN_svg_Tokens_gperf) > $(filter_GEN_svg_Tokens_cxx)) $(filter_GEN_svg_Script_hxx) : \ - $(gb_PYTHONTARGET) \ + $(call gb_ExternalExecutable_get_deps,python) \ $(filter_SRC_svg_PresentationEngine) $(filter_SRC_svg_Js2Hxx) \ | $(filter_SVGWORK)/.dir $(call gb_Output_announce,$@,build,PY ,1) $(call gb_Helper_abbreviate_dirs, \ - $(gb_PYTHON) $(filter_SRC_svg_Js2Hxx) \ + $(call gb_ExternalExecutable_get_command,python) $(filter_SRC_svg_Js2Hxx) \ $(filter_SRC_svg_PresentationEngine) \ $(filter_GEN_svg_Script_hxx)) diff --git a/i18npool/CustomTarget_localedata.mk b/i18npool/CustomTarget_localedata.mk index 92101429caec..f7dbcd2d7d4e 100644 --- a/i18npool/CustomTarget_localedata.mk +++ b/i18npool/CustomTarget_localedata.mk @@ -53,10 +53,11 @@ $(i18npool_LDDIR)/localedata_%.cxx : \ rm $@.tmp) $(i18npool_LDDIR)/saxparser.rdb : $(i18npool_LDDIR)/saxparser.input \ - $(gb_XSLTPROCTARGET) $(SOLARENV)/bin/packcomponents.xslt + $(SOLARENV)/bin/packcomponents.xslt \ + | $(call gb_ExternalExecutable_get_deps,xsltproc) $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),RDB,1) $(call gb_Helper_abbreviate_dirs, \ - $(gb_XSLTPROC) --nonet --stringparam prefix $(OUTDIR_FOR_BUILD)/xml/ \ + $(call gb_ExternalExecutable_get_command,xsltproc) --nonet --stringparam prefix $(OUTDIR_FOR_BUILD)/xml/ \ -o $@ $(SOLARENV)/bin/packcomponents.xslt $<) $(i18npool_LDDIR)/saxparser.input : $(call gb_ComponentTarget_get_outdir_target,sax/source/expatwrap/expwrap) | $(i18npool_LDDIR)/.dir diff --git a/officecfg/CustomTarget_registry.mk b/officecfg/CustomTarget_registry.mk index c655ff3c8203..c947aa67129c 100644 --- a/officecfg/CustomTarget_registry.mk +++ b/officecfg/CustomTarget_registry.mk @@ -46,9 +46,10 @@ officecfg_xsltparams=$(if $(filter-out $(lastword $1),$1),$(call officecfg_xsltp $(call gb_CustomTarget_get_workdir,officecfg/registry)/%.hxx: \ $(SRCDIR)/officecfg/registry/schema/org/openoffice/%.xcs \ - $(SRCDIR)/officecfg/registry/cppheader.xsl | $(gb_XSLTPROCTARGET) + $(SRCDIR)/officecfg/registry/cppheader.xsl\ + | $(call gb_ExternalExecutable_get_deps,xsltproc) $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),XSL,1) $(call gb_Helper_abbreviate_dirs, \ mkdir -p $(dir $@) && \ - $(gb_XSLTPROC) --nonet $(call officecfg_xsltparams,$(subst /, ,$*)) \ + $(call gb_ExternalExecutable_get_command,xsltproc) --nonet $(call officecfg_xsltparams,$(subst /, ,$*)) \ -o $@ $(SRCDIR)/officecfg/registry/cppheader.xsl $<) diff --git a/readlicense_oo/CustomTarget_readme.mk b/readlicense_oo/CustomTarget_readme.mk index 50c2b09409b3..2f2ddda88789 100644 --- a/readlicense_oo/CustomTarget_readme.mk +++ b/readlicense_oo/CustomTarget_readme.mk @@ -55,10 +55,11 @@ endif $(readlicense_oo_README_PATTERN) : \ $(SRCDIR)/readlicense_oo/docs/readme.xsl \ $(readlicense_oo_README_XRM) \ - | $(readlicense_oo_DIR)/.dir + | $(readlicense_oo_DIR)/.dir \ + $(call gb_ExternalExecutable_get_deps,xsltproc) $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),XSL,1) $(call gb_Helper_abbreviate_dirs, \ - $(gb_XSLTPROC) --nonet --novalid -o $@.out \ + $(call gb_ExternalExecutable_get_command,xsltproc) --nonet --novalid -o $@.out \ --stringparam com1 $(COM) \ --stringparam cp1 $(CPUNAME) \ --stringparam gui1 $(GUI) \ diff --git a/solenv/gbuild/ComponentTarget.mk b/solenv/gbuild/ComponentTarget.mk index e99ffababcf5..1b77e0eb76ff 100644 --- a/solenv/gbuild/ComponentTarget.mk +++ b/solenv/gbuild/ComponentTarget.mk @@ -39,7 +39,7 @@ $(call gb_Output_announce,$(3),$(true),CMP,1) $(if $(LIBFILENAME),,$(call gb_Output_error,No LIBFILENAME set at component target: $(1))) $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) && \ - $(gb_XSLTPROC) --nonet --stringparam uri \ + $(call gb_ExternalExecutable_get_command,xsltproc) --nonet --stringparam uri \ '$(if $(filter TRUE,$(DISABLE_DYNLOADING)),,$(subst \d,$$,$(COMPONENTPREFIX)))$(LIBFILENAME)' -o $(1) \ $(gb_ComponentTarget_XSLTCOMMANDFILE) $(2)) endef @@ -52,7 +52,8 @@ $(call gb_ComponentTarget_get_clean_target,%) : $(call gb_ComponentTarget_get_target,%) : \ - $(call gb_ComponentTarget_get_source,%) $(gb_XSLTPROCTARGET) + $(call gb_ComponentTarget_get_source,%) \ + | $(call gb_ExternalExecutable_get_deps,xsltproc) $(call gb_ComponentTarget__command,$@,$<,$*) # the .dir is for make 3.81, which ignores trailing / diff --git a/solenv/gbuild/ComponentsTarget.mk b/solenv/gbuild/ComponentsTarget.mk index b211488a42ba..94ecfffff25a 100644 --- a/solenv/gbuild/ComponentsTarget.mk +++ b/solenv/gbuild/ComponentsTarget.mk @@ -47,12 +47,13 @@ $(call gb_ComponentsTarget_get_target,$(1)).input: COMPONENTFILES += $(2) endef $(call gb_ComponentsTarget_get_target,%): \ - $(call gb_ComponentsTarget_get_target,%).input + $(call gb_ComponentsTarget_get_target,%).input \ + | $(call gb_ExternalExecutable_get_deps,xsltproc) $(call gb_Output_announce,$*,$(true),CPS,1) $(call gb_Helper_abbreviate_dirs, \ mkdir -p $(dir $@)) $(call gb_Helper_abbreviate_dirs, \ - $(gb_XSLTPROC) --nonet --stringparam prefix $(WORKDIR) -o $@ \ + $(call gb_ExternalExecutable_get_command,xsltproc) --nonet --stringparam prefix $(WORKDIR) -o $@ \ $(SOLARENV)/bin/packcomponents.xslt $@.input) $(call gb_ComponentsTarget_get_clean_target,%): \ diff --git a/solenv/gbuild/Configuration.mk b/solenv/gbuild/Configuration.mk index 1de28add495f..05a096fc94ec 100644 --- a/solenv/gbuild/Configuration.mk +++ b/solenv/gbuild/Configuration.mk @@ -57,6 +57,9 @@ gb_Configuration__get_source = $(SRCDIR)/$(2) # The main LibreOffice registry gb_Configuration_PRIMARY_REGISTRY_NAME := registry +gb_Configuration_XSLTCOMMAND = $(call gb_ExternalExecutable_get_command,xsltproc) +gb_Configuration_XSLTCOMMAND_DEPS = $(call gb_ExternalExecutable_get_deps,xsltproc) + # XcsTarget class # need to locate a schema file corresponding to some XCU file in the outdir @@ -75,18 +78,18 @@ define gb_XcsTarget__command $(call gb_Output_announce,$(2),$(true),XCS,1) $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) && \ - $(gb_XSLTPROC) --nonet \ + $(gb_Configuration_XSLTCOMMAND) --nonet \ --noout \ --stringparam componentName $(subst /,.,$(basename $(XCSFILE))) \ --stringparam root $(subst $(XCSFILE),,$(3)) \ $(if $(PRIMARY_REGISTRY),,--stringparam schemaRoot $(call gb_XcsTarget_get_outdir_target,)) \ $(gb_XcsTarget_XSLT_SchemaVal) \ $(3) && \ - $(gb_XSLTPROC) --nonet \ + $(gb_Configuration_XSLTCOMMAND) --nonet \ --noout \ $(gb_XcsTarget_XSLT_Sanity) \ $(3) && \ - $(gb_XSLTPROC) --nonet \ + $(gb_Configuration_XSLTCOMMAND) --nonet \ -o $(1) \ $(gb_XcsTarget_XSLT_SchemaTrim) \ $(3)) @@ -94,7 +97,8 @@ endef $(call gb_XcsTarget_get_target,%) : \ $(gb_XcsTarget_XSLT_SchemaVal) $(gb_XcsTarget_XSLT_Sanity) \ - $(gb_XcsTarget_XSLT_SchemaTrim) $(gb_XcsTarget_DTD_Schema) + $(gb_XcsTarget_XSLT_SchemaTrim) $(gb_XcsTarget_DTD_Schema) \ + | $(gb_Configuration_XSLTCOMMAND_DEPS) $(call gb_XcsTarget__command,$@,$*,$(filter %.xcs,$^)) $(call gb_XcsTarget_get_clean_target,%) : @@ -124,14 +128,14 @@ define gb_XcuDataTarget__command $(call gb_Output_announce,$(2),$(true),XCU,2) $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) && \ - $(gb_XSLTPROC) --nonet \ + $(gb_Configuration_XSLTCOMMAND) --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 \ + $(gb_Configuration_XSLTCOMMAND) --nonet \ -o $(1) \ --stringparam xcs $(call gb_XcsTarget_for_XcuTarget,$(XCUFILE)) \ --stringparam schemaRoot $(call gb_XcsTarget_get_outdir_target,) \ @@ -141,7 +145,8 @@ $(call gb_Helper_abbreviate_dirs,\ endef $(call gb_XcuDataTarget_get_target,%) : $(gb_XcuDataTarget_XSLT_DataVal) \ - $(gb_XcuTarget_XSLT_AllLang) $(gb_XcuDataTarget_DTD_ComponentUpdate) + $(gb_XcuTarget_XSLT_AllLang) $(gb_XcuDataTarget_DTD_ComponentUpdate) \ + | $(gb_Configuration_XSLTCOMMAND_DEPS) $(call gb_XcuDataTarget__command,$@,$*,$(filter %.xcu,$^)) $(call gb_XcuDataTarget_get_clean_target,%) : @@ -175,7 +180,7 @@ define gb_XcuModuleTarget__command $(call gb_Output_announce,$(2),$(true),XCU,3) $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) && \ - $(gb_XSLTPROC) --nonet \ + $(gb_Configuration_XSLTCOMMAND) --nonet \ -o $(1) \ --stringparam xcs $(4) \ --stringparam schemaRoot $(call gb_XcsTarget_get_outdir_target,) \ @@ -184,7 +189,8 @@ $(call gb_Helper_abbreviate_dirs,\ $(3)) endef -$(call gb_XcuModuleTarget_get_target,%) : $(gb_XcuTarget_XSLT_AllLang) +$(call gb_XcuModuleTarget_get_target,%) : $(gb_XcuTarget_XSLT_AllLang) \ + | $(gb_Configuration_XSLTCOMMAND_DEPS) $(call gb_XcuModuleTarget__command,$@,$*,$(filter %.xcu,$^),$(filter %.xcs,$^)) $(call gb_XcuModuleTarget_get_clean_target,%) : @@ -294,7 +300,7 @@ define gb_XcuResTarget__command $(call gb_Output_announce,$(2),$(true),XCU,6) $(call gb_Helper_abbreviate_dirs,\ mkdir -p $(dir $(1)) && \ - $(gb_XSLTPROC) --nonet \ + $(gb_Configuration_XSLTCOMMAND) --nonet \ -o $(1) \ --stringparam xcs $(call gb_XcsTarget_for_XcuTarget,$(XCUFILE)) \ --stringparam schemaRoot $(call gb_XcsTarget_get_outdir_target,) \ @@ -304,7 +310,8 @@ $(call gb_Helper_abbreviate_dirs,\ $(3)) endef -$(call gb_XcuResTarget_get_target,%) : $(gb_XcuTarget_XSLT_AllLang) +$(call gb_XcuResTarget_get_target,%) : $(gb_XcuTarget_XSLT_AllLang) \ + | $(gb_Configuration_XSLTCOMMAND_DEPS) $(call gb_XcuResTarget__command,$@,$*,$(filter %.xcu,$^)) $(call gb_XcuResTarget_get_clean_target,%) : diff --git a/solenv/gbuild/ExternalExecutable.mk b/solenv/gbuild/ExternalExecutable.mk new file mode 100644 index 000000000000..bbdc190bfa8e --- /dev/null +++ b/solenv/gbuild/ExternalExecutable.mk @@ -0,0 +1,127 @@ +# -*- 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/. +# + +# class ExternalExecutable + +# ExternalExecutable is a little helper for using executables that might +# either come from system or be built internally. +# +# The configuration for an external executable is done in +# RepositoryExternal.mk by defining function +# gb_ExternalExecutable__register_EXECUTABLE, which should set up to 4 +# variables. The variables are (presuming the executable is named foo): + +# * gb_ExternalExecutable__foo_COMMAND +# Defines the complete command for the executable. This must include +# shell variables, if required. Defaults to +# $(gb_ExternalExecutable__foo_PRECOMMAND) $(ICECREAM_RUN) $(gb_ExternalExecutable__foo_TARGET) +# (if gb_ExternalExecutable__foo_TARGET is not defined, plain "foo" is substituted). +# +# * gb_ExternalExecutable__foo_DEPS +# The complete dependencies needed for running the executable. Only +# useful for internally built executables to make sure all data, +# config. files etc. are present. Defaults to +# $(gb_ExternalExecutable__foo_TARGET). +# +# * gb_ExternalExecutable__foo_PRECOMMAND +# Any variables that need to be set for running the executable. +# Typical example is use of $(gb_Helper_set_ld_path) for internally +# built executables. +# +# * gb_ExternalExecutable__foo_TARGET +# A full path to the executable. Typical definition for internally built +# executable is $(call gb_Executable_get_target_for_build,foo). +# +# Because of the particular choice of the defaults, there is typically +# nothing that needs to be set for a system executable. +# +# All external executables must be registered (by listing the executable +# name in gb_ExternalExecutable_register_executables call). This is done in +# Repository.mk . + +# The list of registered executables. +gb_ExternalExecutable_REGISTERED_EXECUTABLES := + +define gb_ExternalExecutable__add_executable +$(if $(filter $(executable),$(gb_ExternalExecutable_REGISTERED_EXECUTABLES)),\ + $(call gb_Output_error,external executable $(executable) has already been registered) \ +) +gb_ExternalExecutable_REGISTERED_EXECUTABLES += $(1) + +endef + +# Register one or more external executables. +# +# gb_ExternalExecutable_register_executables executable(s) +define gb_ExternalExecutable_register_executables +$(foreach executable,$(1),$(call gb_ExternalExecutable__add_executable,$(executable))) + +endef + +define gb_ExternalExecutable__process_registration +$(if $(filter undefined,$(origin gb_ExternalExecutable__register_$(executable))),\ + $(call gb_Output_error,there is no definition for external executable $(executable)) \ +) +$(call gb_ExternalExecutable__register_$(executable)) + +endef + +# Collect definitions for registered executables. +# +# The registration functions will be run. +# +# gb_ExternalExecutable_collect_registrations +define gb_ExternalExecutable_collect_registrations +$(foreach executable,$(gb_ExternalExecutable_REGISTERED_EXECUTABLES),$(call gb_ExternalExecutable__process_registration,$(executable))) + +endef + +define gb_ExternalExecutale__check_registration +$(if $(filter $(1),$(gb_ExternalExecutable_REGISTERED_EXECUTABLES)),,\ + $(call gb_Output_error,external executable $(1) has not been registered) \ +) + +endef + +define gb_ExternalExecutable__get_command +$(call gb_ExternalExecutale__check_registration,$(1)) +$(if $(filter undefined,$(origin gb_ExternalExecutable__$(1)_COMMAND)) \ + ,$(gb_ExternalExecutable__$(1)_PRECOMMAND) $(ICECREAM_RUN) \ + $(if $(gb_ExternalExecutable__$(1)_TARGET),$(gb_ExternalExecutable__$(1)_TARGET),$(1)) \ + ,$(gb_ExternalExecutable__$(1)_COMMAND) \ +) +endef + +# Return the command for running an external executable. +# +# The command includes the required shell variables, if any (e.g., +# LD_LIBRARY_PATH for internally built executables), and icerun wrapper +# for limiting the maximum number of processes, if available. +# +# gb_ExternalExecutable_get_command executable +define gb_ExternalExecutable_get_command +$(strip $(call gb_ExternalExecutable__get_command,$(1))) +endef + +define gb_ExternalExecutable__get_deps +$(call gb_ExternalExecutale__check_registration,$(1)) +$(if $(filter undefined,$(origin gb_ExternalExecutable__$(1)_DEPS)) \ + ,$(gb_ExternalExecutable__$(1)_TARGET) \ + ,$(gb_ExternalExecutable__$(1)_DEPS) \ +) +endef + +# Return the deps needed for running an external executable. +# +# gb_ExternalExecutable_get_deps executable +define gb_ExternalExecutable_get_deps +$(strip $(call gb_ExternalExecutable__get_deps,$(1))) +endef + +# vim: set noet sw=4 ts=4: diff --git a/solenv/gbuild/Rdb.mk b/solenv/gbuild/Rdb.mk index 03281567c805..ad4562d10462 100644 --- a/solenv/gbuild/Rdb.mk +++ b/solenv/gbuild/Rdb.mk @@ -33,11 +33,11 @@ $(call gb_Helper_abbreviate_dirs,\ $(foreach component,$(COMPONENTS),echo "<filename>$(call gb_ComponentTarget_get_outdir_target,$(component))</filename>" &&) \ echo '</list>' \ ) > $(1).input && \ - $(gb_XSLTPROC) --nonet -o $(1) $(SOLARENV)/bin/packcomponents.xslt $(1).input && \ + $(call gb_ExternalExecutable_get_command,xsltproc) --nonet -o $(1) $(SOLARENV)/bin/packcomponents.xslt $(1).input && \ rm $(1).input) endef -$(call gb_Rdb_get_target,%) : +$(call gb_Rdb_get_target,%) :| $(call gb_ExternalExecutable_get_deps,xsltproc) $(call gb_Output_announce,$*,$(true),RDB,1) $(call gb_Rdb__command,$@,$*,$?,$^) diff --git a/solenv/gbuild/UnoApiTarget.mk b/solenv/gbuild/UnoApiTarget.mk index 9246938c247a..12e592dce42e 100644 --- a/solenv/gbuild/UnoApiTarget.mk +++ b/solenv/gbuild/UnoApiTarget.mk @@ -72,7 +72,7 @@ endef # idlc as well so their dummy rule fires if that changes. $(call gb_UnoApiPartTarget_get_target,%.done) : \ $(gb_UnoApiPartTarget_IDLCTARGET) \ - | $(gb_UCPPTARGET) + | $(call gb_ExternalExecutable_get_deps,ucpp) $(call gb_UnoApiPartTarget__command,$@,$*,$(filter-out $(gb_UnoApiPartTarget_IDLCTARGET),$(if $(filter $(gb_UnoApiPartTarget_IDLCTARGET),$?),$^,$?))) ifeq ($(gb_FULLDEPS),$(true)) diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk index 1d1e304c578e..40372e18ea94 100644 --- a/solenv/gbuild/gbuild.mk +++ b/solenv/gbuild/gbuild.mk @@ -159,6 +159,7 @@ ifneq ($(strip $(ENVCFLAGSCXX)),) gb__ENV_CXXFLAGS := $(ENVCFLAGSCXX) endif +include $(GBUILDDIR)/ExternalExecutable.mk include $(GBUILDDIR)/Helper.mk include $(GBUILDDIR)/TargetLocations.mk include $(GBUILDDIR)/Tempfile.mk @@ -167,6 +168,7 @@ $(eval $(call gb_Helper_init_registries)) include $(SRCDIR)/Repository.mk include $(SRCDIR)/RepositoryExternal.mk $(eval $(call gb_Helper_collect_knownlibs)) +$(eval $(call gb_ExternalExecutable_collect_registrations)) gb_Library_DLLPOSTFIX := lo @@ -175,52 +177,6 @@ include $(GBUILDDIR)/platform/$(OS)_$(CPUNAME)_$(COM).mk include $(SRCDIR)/RepositoryFixes.mk -# Set up build tools that can be either internal or system. It is -# necessary to do it before we start including gbuild class makefiles, -# so the classes can add dependencies on them. -# -# TODO: As more external modules are converted, we would need more of -# these (e.g., ICU tools). Maybe the definitions should be moved to -# RepositoryExternal.mk ? -ifeq ($(SYSTEM_LIBXSLT_FOR_BUILD),YES) -gb_XSLTPROCTARGET := -gb_XSLTPROC := $(ICECREAM_RUN) xsltproc -else -gb_XSLTPROCTARGET := $(call gb_Executable_get_target_for_build,xsltproc) -gb_XSLTPROC := $(gb_Helper_set_ld_path) $(ICECREAM_RUN) $(gb_XSLTPROCTARGET) -endif - -ifeq ($(SYSTEM_LIBXML_FOR_BUILD),YES) -gb_XMLLINTTARGET := -gb_XMLLINT := $(ICECREAM_RUN) xsltproc -else -gb_XMLLINTTARGET := $(call gb_Executable_get_target_for_build,xsltproc) -gb_XMLLINT := $(gb_Helper_set_ld_path) $(ICECREAM_RUN) $(gb_XMLLINTTARGET) -endif - -ifeq ($(SYSTEM_PYTHON),YES) -gb_PYTHONTARGET := -gb_PYTHON := $(PYTHON) -else ifeq ($(OS),MACOSX) -#fixme: remove this MACOSX ifeq branch by filling in gb_PYTHON_PRECOMMAND in -#gbuild/platform/macosx.mk correctly for mac, e.g. PYTHONPATH and PYTHONHOME -#dirs for in-tree internal python -gb_PYTHONTARGET := -gb_PYTHON := $(PYTHON) -else ifeq ($(DISABLE_PYTHON),TRUE) -# Build-time python -gb_PYTHON := python -else -gb_PYTHONTARGET := $(call gb_Executable_get_target_for_build,python) -gb_PYTHON := $(gb_PYTHON_PRECOMMAND) $(gb_PYTHONTARGET) -endif - -ifneq (,$(SYSTEM_UCPP)) -gb_UCPPTARGET := -else -gb_UCPPTARGET := $(call gb_Executable_get_target_for_build,ucpp) -endif - # add user-supplied flags ifneq ($(strip gb__ENV_CFLAGS),) gb_LinkTarget_CFLAGS += $(gb__ENV_CFLAGS) diff --git a/writerfilter/CustomTarget_source.mk b/writerfilter/CustomTarget_source.mk index 5ee30418d987..bc0c3bf98bf5 100644 --- a/writerfilter/CustomTarget_source.mk +++ b/writerfilter/CustomTarget_source.mk @@ -12,6 +12,8 @@ $(eval $(call gb_CustomTarget_CustomTarget,writerfilter/source)) writerfilter_WORK := $(call gb_CustomTarget_get_workdir,writerfilter/source) writerfilter_SRC := $(SRCDIR)/writerfilter/source +writerfilter_XSLTCOMMAND := $(call gb_ExternalExecutable_get_command,xsltproc) + writerfilter_OOXMLNAMESPACES= \ dml-baseStylesheet \ dml-baseTypes \ @@ -103,23 +105,23 @@ writerfilter_SRC_ooxml_ResourceIds_xsl=$(writerfilter_SRC)/ooxml/resourceids.xsl $(writerfilter_GEN_doctok_QNameToStr_cxx): $(writerfilter_SRC_doctok_QNameToStr_xsl) $(writerfilter_SRC_doctok_Model) $(writerfilter_SRC_doctok_ResourceTools_xsl) | $(writerfilter_WORK)/.dir $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_doctok_QNameToStr_xsl) $(writerfilter_SRC_doctok_Model)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_doctok_QNameToStr_xsl) $(writerfilter_SRC_doctok_Model)) > $@ $(writerfilter_GEN_doctok_ResourceIds_hxx) : $(writerfilter_SRC_doctok_Model) $(writerfilter_SRC_doctok_ResourceIds_xsl) | $(writerfilter_WORK)/doctok/.dir $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_doctok_ResourceIds_xsl) $(writerfilter_SRC_doctok_Model)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_doctok_ResourceIds_xsl) $(writerfilter_SRC_doctok_Model)) > $@ $(writerfilter_GEN_doctok_Resources_cxx) : $(writerfilter_SRC_doctok_Model) $(writerfilter_SRC_doctok_ResourcesImpl_xsl) $(writerfilter_SRC_doctok_ResourceTools_xsl) | $(writerfilter_WORK)/doctok/.dir $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_doctok_ResourcesImpl_xsl) $(writerfilter_SRC_doctok_Model)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_doctok_ResourcesImpl_xsl) $(writerfilter_SRC_doctok_Model)) > $@ $(writerfilter_GEN_doctok_Resources_hxx) : $(writerfilter_SRC_doctok_Model) $(writerfilter_SRC_doctok_Resources_xsl) | $(writerfilter_WORK)/doctok/.dir $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_doctok_Resources_xsl) $(writerfilter_SRC_doctok_Model)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_doctok_Resources_xsl) $(writerfilter_SRC_doctok_Model)) > $@ $(writerfilter_GEN_doctok_SprmIds_hxx) : $(writerfilter_SRC_doctok_Model) $(writerfilter_SRC_doctok_SprmIds_xsl) | $(writerfilter_WORK)/doctok/.dir $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_doctok_SprmIds_xsl) $(writerfilter_SRC_doctok_Model)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_doctok_SprmIds_xsl) $(writerfilter_SRC_doctok_Model)) > $@ $(writerfilter_GEN_model_SprmCodeToStr_cxx): $(writerfilter_SRC)/resourcemodel/sprmcodetostrheader $(writerfilter_GEN_model_SprmCodeToStr_tmp) $(writerfilter_SRC)/resourcemodel/sprmcodetostrfooter $(call gb_Output_announce,$@,build,CAT,1) @@ -127,44 +129,44 @@ $(writerfilter_GEN_model_SprmCodeToStr_cxx): $(writerfilter_SRC)/resourcemodel/s $(writerfilter_GEN_model_SprmCodeToStr_tmp) : $(writerfilter_SRC_doctok_SprmCodeToStr_xsl) $(writerfilter_SRC_doctok_Model) | $(writerfilter_WORK)/.dir $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_doctok_SprmCodeToStr_xsl) $(writerfilter_SRC_doctok_Model)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_doctok_SprmCodeToStr_xsl) $(writerfilter_SRC_doctok_Model)) > $@ $(writerfilter_GEN_ooxml_Factory_cxx) : $(writerfilter_SRC)/ooxml/factoryimpl.xsl $(writerfilter_GEN_ooxml_Model_processed) $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $< $(writerfilter_GEN_ooxml_Model_processed)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $< $(writerfilter_GEN_ooxml_Model_processed)) > $@ $(writerfilter_GEN_ooxml_Factory_hxx) : $(writerfilter_SRC)/ooxml/factoryinc.xsl $(writerfilter_GEN_ooxml_Model_processed) $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $< $(writerfilter_GEN_ooxml_Model_processed)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $< $(writerfilter_GEN_ooxml_Model_processed)) > $@ $(writerfilter_GEN_ooxml_FactoryValues_cxx) : $(writerfilter_SRC_ooxml_FactoryValuesImpl_xsl) $(writerfilter_GEN_ooxml_Model_processed) $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_ooxml_FactoryValuesImpl_xsl) $(writerfilter_GEN_ooxml_Model_processed)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_ooxml_FactoryValuesImpl_xsl) $(writerfilter_GEN_ooxml_Model_processed)) > $@ $(writerfilter_GEN_ooxml_FactoryValues_hxx) : $(writerfilter_SRC_ooxml_FactoryValues_xsl) $(writerfilter_GEN_ooxml_Model_processed) $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_ooxml_FactoryValues_xsl) $(writerfilter_GEN_ooxml_Model_processed)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_ooxml_FactoryValues_xsl) $(writerfilter_GEN_ooxml_Model_processed)) > $@ $(writerfilter_GEN_ooxml_FastTokens_hxx) : $(writerfilter_SRC_ooxml_FastTokens_xsl) $(writerfilter_GEN_ooxml_Token_xml) | $(writerfilter_WORK)/ooxml/.dir $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_ooxml_FastTokens_xsl) $(writerfilter_GEN_ooxml_Token_xml)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_ooxml_FastTokens_xsl) $(writerfilter_GEN_ooxml_Token_xml)) > $@ $(writerfilter_GEN_ooxml_GperfFastToken_hxx) : $(writerfilter_SRC_ooxml_GperfFastTokenHandler_xsl) $(writerfilter_GEN_ooxml_Token_xml) $(call gb_Output_announce,$@,build,GPF,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_ooxml_GperfFastTokenHandler_xsl) $(writerfilter_GEN_ooxml_Token_xml)) \ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_ooxml_GperfFastTokenHandler_xsl) $(writerfilter_GEN_ooxml_Token_xml)) \ | tr -d '\r' | $(GPERF) -c -E -G -I -LC++ -S1 -t > $@ $(writerfilter_GEN_ooxml_Model_analyzed) : $(writerfilter_SRC_ooxml_Analyze_model_xsl) $(writerfilter_SRC_ooxml_Model) | $(writerfilter_WORK)/ooxml/.dir $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $^) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $^) > $@ $(writerfilter_GEN_ooxml_Model_processed) : $(writerfilter_GEN_ooxml_Namespacesmap_xsl) $(writerfilter_GEN_ooxml_Preprocess_xsl) $(writerfilter_SRC_ooxml_Model) $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_GEN_ooxml_Namespacesmap_xsl) $(writerfilter_SRC_ooxml_Model)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_GEN_ooxml_Namespacesmap_xsl) $(writerfilter_SRC_ooxml_Model)) > $@ $(writerfilter_GEN_ooxml_NamespaceIds_hxx) : $(writerfilter_SRC_ooxml_NamespaceIds_xsl) $(writerfilter_GEN_ooxml_Model_processed) | $(writerfilter_WORK)/ooxml/.dir $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_ooxml_NamespaceIds_xsl) $(writerfilter_GEN_ooxml_Model_processed)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_ooxml_NamespaceIds_xsl) $(writerfilter_GEN_ooxml_Model_processed)) > $@ $(writerfilter_GEN_ooxml_Namespacesmap_xsl) : $(writerfilter_SRC_ooxml_Model) $(writerfilter_DEP_ooxml_Namespaces_txt) \ $(writerfilter_SRC_model_NamespacePreprocess) | $(writerfilter_WORK)/.dir @@ -177,11 +179,11 @@ $(writerfilter_GEN_ooxml_Preprocess_xsl) : $(writerfilter_SRC_ooxml_Preprocess_x $(writerfilter_GEN_ooxml_QNameToStr_cxx): $(writerfilter_SRC_ooxml_QNameToStr_xsl) $(writerfilter_SRC_ooxml_FactoryTools_xsl) $(writerfilter_GEN_ooxml_Model_processed) $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_ooxml_QNameToStr_xsl) $(writerfilter_GEN_ooxml_Model_processed)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_ooxml_QNameToStr_xsl) $(writerfilter_GEN_ooxml_Model_processed)) > $@ $(writerfilter_GEN_ooxml_ResourceIds_hxx) : $(writerfilter_SRC_ooxml_ResourceIds_xsl) $(writerfilter_GEN_ooxml_Model_processed) | $(writerfilter_WORK)/ooxml/.dir $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) $(writerfilter_SRC_ooxml_ResourceIds_xsl) $(writerfilter_GEN_ooxml_Model_processed)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) $(writerfilter_SRC_ooxml_ResourceIds_xsl) $(writerfilter_GEN_ooxml_Model_processed)) > $@ $(writerfilter_GEN_ooxml_Token_tmp) : $(OUTDIR)/inc/oox/tokens.txt | $(writerfilter_WORK)/.dir $(call gb_Output_announce,$@,build,CAT,1) @@ -193,15 +195,15 @@ $(writerfilter_GEN_ooxml_Token_xml) : $(writerfilter_SRC)/ooxml/tokenxmlheader $ $(writerfilter_WORK)/OOXMLFactory%.cxx : $(writerfilter_SRC)/ooxml/factoryimpl_ns.xsl $(writerfilter_GEN_ooxml_Model_processed) $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) --stringparam file $@ $< $(writerfilter_GEN_ooxml_Model_processed)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) --stringparam file $@ $< $(writerfilter_GEN_ooxml_Model_processed)) > $@ $(writerfilter_WORK)/OOXMLFactory%.hxx : $(writerfilter_SRC)/ooxml/factory_ns.xsl $(writerfilter_GEN_ooxml_Model_processed) $(call gb_Output_announce,$@,build,XSL,1) - $(call gb_Helper_abbreviate_dirs, $(gb_XSLTPROC) --stringparam file $@ $< $(writerfilter_GEN_ooxml_Model_processed)) > $@ + $(call gb_Helper_abbreviate_dirs, $(writerfilter_XSLTCOMMAND) --stringparam file $@ $< $(writerfilter_GEN_ooxml_Model_processed)) > $@ $(call gb_CustomTarget_get_target,writerfilter/source) : $(writerfilter_ALL) -$(writerfilter_ALL) :| $(gb_XSLTPROCTARGET) $(writerfilter_WORK)/.dir +$(writerfilter_ALL) :| $(call gb_ExternalExecutable_get_deps,xsltproc) $(writerfilter_WORK)/.dir # vim: set noet sw=4 ts=4: |