diff options
author | David Tardon <dtardon@redhat.com> | 2012-12-02 10:51:37 +0100 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2012-12-02 10:56:48 +0100 |
commit | c2eca359af3eb88ebde341df5b87c24e178f5d5c (patch) | |
tree | 349c09453bbb3514bd67332f6be3c16702a6ee56 /solenv/gbuild | |
parent | f02ac6e7c8da9e6e3b2263f028637723a8cf4829 (diff) |
move setting up of ext. executables out of gbuild.mk
Change-Id: Icacd44abfa5bf5f75f0ee719b39fba6821976a8a
Diffstat (limited to 'solenv/gbuild')
-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 |
7 files changed, 156 insertions, 64 deletions
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) |