summaryrefslogtreecommitdiff
path: root/solenv
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2012-12-02 10:51:37 +0100
committerDavid Tardon <dtardon@redhat.com>2012-12-02 10:56:48 +0100
commitc2eca359af3eb88ebde341df5b87c24e178f5d5c (patch)
tree349c09453bbb3514bd67332f6be3c16702a6ee56 /solenv
parentf02ac6e7c8da9e6e3b2263f028637723a8cf4829 (diff)
move setting up of ext. executables out of gbuild.mk
Change-Id: Icacd44abfa5bf5f75f0ee719b39fba6821976a8a
Diffstat (limited to 'solenv')
-rw-r--r--solenv/gbuild/ComponentTarget.mk5
-rw-r--r--solenv/gbuild/ComponentsTarget.mk5
-rw-r--r--solenv/gbuild/Configuration.mk29
-rw-r--r--solenv/gbuild/ExternalExecutable.mk127
-rw-r--r--solenv/gbuild/Rdb.mk4
-rw-r--r--solenv/gbuild/UnoApiTarget.mk2
-rw-r--r--solenv/gbuild/gbuild.mk48
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)