summaryrefslogtreecommitdiff
path: root/solenv/gbuild/UnoApiTarget.mk
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2013-09-19 15:11:30 +0200
committerStephan Bergmann <sbergman@redhat.com>2013-09-19 15:50:04 +0200
commit6db34b6b33ba8e3b13683efd05df8441b87e9c92 (patch)
tree8a4084e9f1757276d6e99ea9ba6caf9db9271fc7 /solenv/gbuild/UnoApiTarget.mk
parent02ee39c1de1d9e5cd556a9e1aab5b6925e65ebec (diff)
Directly build UNOIDL .rdb files from .idl files
...via unoidl-write and the new source-format registry provicers, instead of using idlc to produce .urd files, regmerge to merge them into legacy .rdb files, and unoidl-write to translate those to new UNOIDL .rdb files. gb_UnoApi and gb_InternalUnoApi ctors take an additional argument now that is the path (below $(SRCDIR)) of the source-format registry from which to obtain UNOIDL entity definitions. It can either be an .idl file (in which case no *_add_idlfiles calls should be used and the resulting .rdb will contain all the entities from that one .idl file; used in some tests to conveniently define all test-specific entities in a single file) or a directory denoting the root of an .idl file tree (in which case *_add_idlfiles calls specify the entites to include in the resulting .idl file). (In the first case, the generated .rdb file needs to depend on that single .idl file, so the gb_UnoApiTarget ctor contains a dependency on that additional argument, which happens, as a side effect, to trigger rebuilds in the second, tree-based case when addition/removal of .idl files in the tree causes updates of directory time-stamps.) UnoApiPartTarget and all the dependency-tracking logic based on .urd files in solenv/gbuild/UnoApiTarget.mk is gone. Generation of an .rdb file now depends on its source registry (see previous paragraph) and all the .idl files specified with *_add_idlfiles (in the second, tree-based case above). A consequence of that is that gb_UnoApi_add_idlfile, -_nohdl, and -_noheader all do the same now. I left them in for now anyway, maybe they become relevant again when the use of cppumaker is changed to read directly from a source-format registry instead of going via a .rdb registry. The legacy tools idlc, regcompare, regmerge, and regview are still contained in the URE or SDK for now. cb344cd59e1ddb7c6db66dbd9263b4755969d4ba "Revert 'Looks like idlc resolved typedefs inside sequence<...>'" is re-reverted as now "the current offapi.rdb is generated via unoidl-write instead of idlc." Change-Id: I3d9d92f17326bc9f49dd934c85aab6a17951d06d
Diffstat (limited to 'solenv/gbuild/UnoApiTarget.mk')
-rw-r--r--solenv/gbuild/UnoApiTarget.mk202
1 files changed, 20 insertions, 182 deletions
diff --git a/solenv/gbuild/UnoApiTarget.mk b/solenv/gbuild/UnoApiTarget.mk
index 7fef39244deb..adab8cc2f080 100644
--- a/solenv/gbuild/UnoApiTarget.mk
+++ b/solenv/gbuild/UnoApiTarget.mk
@@ -17,202 +17,57 @@
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
#
-# UnoApiPartTarget
-
-gb_UnoApiPartTarget_IDLCDEPS := $(call gb_Executable_get_runtime_dependencies,idlc)
-gb_UnoApiPartTarget_IDLCCOMMAND := SOLARBINDIR=$(OUTDIR_FOR_BUILD)/bin $(call gb_Executable_get_command,idlc)
-
-# The .urd files are actually created by the gb_UnoApiPartTarget__command,
-# invoked for the per-directory .done files.
-# The reason why .urd files are tracked is so new files that are added are
-# picked up and cause a rebuild, even if older than the .done file (also, as a
-# convenience for users who delete them from the workdir by hand; this dummy
-# rule plus the dependency from the .done target to the .urd file plus the
-# sort/patsubst call in gb_UnoApiPartTarget__command cause command to be
-# invoked with the .idl file corresponding to the .urd in that case.
-# Touch the .urd file, so it is newer than the .done file, causing that to
-# be rebuilt and overwriting the .urd file again.
-# the .dir is for make 3.81, which ignores trailing /
-$(dir $(call gb_UnoApiPartTarget_get_target,))%/.dir :
- $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
-
-$(call gb_UnoApiPartTarget_get_target,%.urd) :
- touch $@
-
-# TODO:
-# - get idlc switch "-P" (generate .urd into package dir)
-# - empty $? in headertarget?
-
-define gb_UnoApiPartTarget__command
- $(call gb_Output_announce,$(2),$(true),IDL,2)
- mkdir -p $(call gb_UnoApiPartTarget_get_target,$(dir $(2))) && \
- RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),500,\
- $(sort $(patsubst $(call gb_UnoApiPartTarget_get_target,%.urd),$(SRCDIR)/%.idl,$(3)))) && \
- $(gb_UnoApiPartTarget_IDLCCOMMAND) \
- $(INCLUDE) \
- -M $(basename $(call gb_UnoApiPartTarget_get_dep_target,$(dir $(2)))) \
- -O $(call gb_UnoApiPartTarget_get_target,$(dir $(2))) -verbose \
- @$${RESPONSEFILE} > /dev/null && \
- rm -f $${RESPONSEFILE} && \
- touch $(1)
-
-endef
-
-# If idlc changed, rebuild everything; otherwise just the changed files.
-# In order for this to work the .urd files need to have a dependency on
-# idlc as well so their dummy rule fires if that changes.
-$(call gb_UnoApiPartTarget_get_target,%.done) : $(gb_UnoApiPartTarget_IDLCDEPS)
- $(call gb_UnoApiPartTarget__command,$@,$*,$(filter-out $(gb_UnoApiPartTarget_IDLCDEPS),$(if $(filter $(gb_UnoApiPartTarget_IDLCDEPS),$?),$^,$?)))
-
-ifeq ($(gb_FULLDEPS),$(true))
-$(dir $(call gb_UnoApiPartTarget_get_dep_target,%)).dir :
- $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
-
-$(dir $(call gb_UnoApiPartTarget_get_dep_target,%))%/.dir :
- $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
-
-$(call gb_UnoApiPartTarget_get_dep_target,%) :
- $(if $(wildcard $@),touch $@)
-
-endif
-
# UnoApiTarget
+gb_UnoApiTarget_UNOIDLWRITEDEPS := $(call gb_Executable_get_runtime_dependencies,unoidl-write)
+gb_UnoApiTarget_UNOIDLWRITECOMMAND := SOLARBINDIR=$(OUTDIR_FOR_BUILD)/bin $(call gb_Executable_get_command,unoidl-write)
+
gb_UnoApiTarget_UNOIDLCHECKDEPS := $(call gb_Executable_get_runtime_dependencies,unoidl-check)
gb_UnoApiTarget_UNOIDLCHECKCOMMAND := SOLARBINDIR=$(OUTDIR_FOR_BUILD)/bin $(call gb_Executable_get_command,unoidl-check)
-gb_UnoApiTarget_REGMERGEDEPS := $(call gb_Executable_get_runtime_dependencies,regmerge) $(call gb_Executable_get_runtime_dependencies,unoidl-write)
-gb_UnoApiTarget_REGMERGECOMMAND := SOLARBINDIR=$(OUTDIR_FOR_BUILD)/bin $(call gb_Executable_get_command,regmerge)
-
-gb_UnoApiTarget_TYPESRDB := $(call gb_UnoApiTarget_get_target,types)
-
-define gb_UnoApiTarget__command_impl
-RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),500,$(1).oldformat $(2) $(3)) && \
-$(gb_UnoApiTarget_REGMERGECOMMAND) @$${RESPONSEFILE} && \
-rm -f $${RESPONSEFILE} && \
-SOLARBINDIR=$(OUTDIR_FOR_BUILD)/bin \
- $(call gb_Executable_get_command,unoidl-write) \
- $(foreach rdb,$(4),$(call gb_UnoApiTarget_get_target,$(rdb))) \
- $(1).oldformat $(1)
-endef
-# first delete target rdb file to detect problems when removing IDL files
define gb_UnoApiTarget__command
$(call gb_Output_announce,$(2),$(true),UNO,4)
-mkdir -p $(dir $(1)) && \
-rm -f $(1) && \
-$(call gb_UnoApiTarget__command_impl,$(1),$(UNOAPI_ROOT),$(UNOAPI_FILES),$(UNOAPI_DEPRDBS)) \
+mkdir -p $(dir $(1)) \
+$(if $(UNOAPI_ENTITIES), \
+ && RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),500,$(UNOAPI_ENTITIES))) \
+&& $(gb_UnoApiTarget_UNOIDLWRITECOMMAND) \
+ $(foreach rdb,$(UNOAPI_DEPRDBS),$(call gb_UnoApiTarget_get_target,$(rdb))) \
+ $(SRCDIR)/$(gb_UnoApiTarget_REG_$(2)) $(if $(UNOAPI_ENTITIES),@$${RESPONSEFILE}) $(1) \
+$(if $(UNOAPI_ENTITIES),&& rm -f $${RESPONSEFILE}) \
$(if $(UNOAPI_REFERENCE), \
$(call gb_Output_announce,$(2),$(true),DBc,3) \
&& $(gb_UnoApiTarget_UNOIDLCHECKCOMMAND) $(UNOAPI_REFERENCE) -- \
- $(foreach rdb,$(4),$(call gb_UnoApiTarget_get_target,$(rdb))) $(1))
+ $(foreach rdb,$(UNOAPI_DEPRDBS),$(call gb_UnoApiTarget_get_target,$(rdb))) \
+ $(1))
endef
-define gb_UnoApiTarget__check_mode
-$(if $(UNOAPI_FILES),,$(error No IDL files have been set for the rdb file))
-$(if $(UNOAPI_ROOT),,$(error No root has been set for the rdb file))
-endef
-
-# This recipe actually also builds the dep-target as a side-effect, which
-# is an optimization to reduce incremental build time.
-# Note this requires the variable UNOAPI_DEPFILES to be in sync on both targets.
$(call gb_UnoApiTarget_get_target,%) :
-ifeq ($(gb_FULLDEPS),$(true))
- $(call gb_UnoApiTarget__command_dep,$(call gb_UnoApiTarget_get_dep_target,$*),$*)
-endif
- $(call gb_UnoApiTarget__check_mode)
$(call gb_UnoApiTarget__command,$@,$*)
.PHONY : $(call gb_UnoApiTarget_get_clean_target,%)
$(call gb_UnoApiTarget_get_clean_target,%) :
$(call gb_Output_announce,$*,$(false),UNO,4)
-$(call gb_Helper_abbreviate_dirs,\
- rm -rf $(call gb_UnoApiTarget_get_target,$*) \
- $(call gb_UnoApiTarget_get_target,$*).oldformat \
- $(call gb_UnoApiTarget_get_dep_target,$*) \
- $(basename $(call gb_UnoApiPartTarget_get_dep_target,$*)) \
- $(call gb_UnoApiPartTarget_get_target,$*))
-
-# cat the deps of all IDLs in one file, then we need only open that one file
-define gb_UnoApiTarget__command_dep
-$(call gb_Output_announce,IDL:$(2),$(true),DEP,1)
-$(call gb_Helper_abbreviate_dirs,\
- mkdir -p $(dir $(1)) && \
- RESPONSEFILE=$(call var2file,$(shell $(gb_MKTEMP)),200,\
- $(foreach idl,$(UNOAPI_DEPFILES),$(call gb_UnoApiPartTarget_get_dep_target,$(idl)))) && \
- $(call gb_Executable_get_command,concat-deps) $${RESPONSEFILE} > $(1)) && \
- rm -f $${RESPONSEFILE}
-
-endef
-
-ifeq ($(gb_FULLDEPS),$(true))
-$(dir $(call gb_UnoApiTarget_get_dep_target,%)).dir :
- $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
-
-$(dir $(call gb_UnoApiTarget_get_dep_target,%))%/.dir :
- $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
-
-$(call gb_UnoApiTarget_get_dep_target,%) : $(call gb_Executable_get_runtime_dependencies,concat-deps)
- $(call gb_UnoApiTarget__command_dep,$@,$*)
-
-endif
+ rm -rf $(call gb_UnoApiTarget_get_target,$*))
define gb_UnoApiTarget_UnoApiTarget
-$(call gb_UnoApiTarget_get_target,$(1)) : INCLUDE :=
-$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_FILES :=
+gb_UnoApiTarget_REG_$(1) := $(2)
+$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_ENTITIES :=
$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_REFERENCE :=
-$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_ROOT :=
$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_DEPRDBS :=
-
-ifeq ($(gb_FULLDEPS),$(true))
-$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_DEPFILES :=
-$(call gb_UnoApiTarget_get_dep_target,$(1)) : UNOAPI_DEPFILES :=
--include $(call gb_UnoApiTarget_get_dep_target,$(1))
-$(call gb_UnoApiTarget_get_dep_target,$(1)) :| $(dir $(call gb_UnoApiTarget_get_dep_target,$(1))).dir
-endif
-
-endef
-
-define gb_UnoApiTarget__add_urdfile
-$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_FILES += $(2)
-$(call gb_UnoApiTarget_get_target,$(1)) : $(2)
-
-endef
-
-define gb_UnoApiTarget__add_idlfile
-$(call gb_UnoApiPartTarget_get_target,$(2)/idl.done) : \
- $(call gb_UnoApiPartTarget_get_target,$(2)/$(3).urd)
-$(call gb_UnoApiTarget__add_urdfile,$(1),$(call gb_UnoApiPartTarget_get_target,$(2)/$(3).urd))
-$(call gb_UnoApiPartTarget_get_target,$(2)/$(3).urd) \
- : $(gb_UnoApiPartTarget_IDLCDEPS) \
- | $(call gb_UnoApiPartTarget_get_target,$(2)/.dir)
-
-ifeq ($(gb_FULLDEPS),$(true))
-$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_DEPFILES += $(2)/$(3)
-$(call gb_UnoApiTarget_get_dep_target,$(1)) : UNOAPI_DEPFILES += $(2)/$(3)
-$(call gb_UnoApiTarget_get_dep_target,$(1)) : \
- $(call gb_UnoApiPartTarget_get_dep_target,$(2)/$(3))
-$(call gb_UnoApiPartTarget_get_dep_target,$(2)/$(3)) :| $(dir $(call gb_UnoApiPartTarget_get_dep_target,$(2)/$(3))).dir
-endif
+$(call gb_UnoApiTarget_get_target,$(1)) : $(gb_UnoApiTarget_UNOIDLWRITEDEPS)
+$(call gb_UnoApiTarget_get_target,$(1)) : $(SRCDIR)/$(2) # may be dir, though
endef
-define gb_UnoApiTarget__add_idlfiles
-$(call gb_UnoApiTarget_get_target,$(1)) : \
- $(call gb_UnoApiPartTarget_get_target,$(2)/idl.done)
-$(call gb_UnoApiPartTarget_get_target,$(2)/idl.done) : \
- $(foreach idl,$(3),$(SRCDIR)/$(2)/$(idl).idl)
+define gb_UnoApiTarget_add_idlfile
+$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_ENTITIES += $(subst /,.,$(2))$(if $(2),.)$(3)
+$(call gb_UnoApiTarget_get_target,$(1)) : $(SRCDIR)/$(gb_UnoApiTarget_REG_$(1))/$(2)/$(3).idl
endef
define gb_UnoApiTarget_add_idlfiles
$(foreach idl,$(3),$(call gb_UnoApiTarget_add_idlfile,$(1),$(2),$(idl)))
-$(call gb_UnoApiTarget__add_idlfiles,$(1),$(2),$(3))
-$(call gb_UnoApiTarget_get_target,$(1)) : $(gb_UnoApiTarget_REGMERGEDEPS)
-
-endef
-
-define gb_UnoApiTarget_add_idlfile
-$(call gb_UnoApiTarget__add_idlfile,$(1),$(2),$(3))
endef
@@ -223,16 +78,6 @@ $(call gb_UnoApiTarget_get_target,$(1)) : $(gb_UnoApiTarget_UNOIDLCHECKDEPS)
endef
-define gb_UnoApiTarget_set_include
-$(call gb_UnoApiTarget_get_target,$(1)) : INCLUDE := $(2)
-
-endef
-
-define gb_UnoApiTarget_set_root
-$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_ROOT := $(2)
-
-endef
-
define gb_UnoApiTarget_use_api
$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_DEPRDBS += $(2)
$(call gb_UnoApiTarget_get_target,$(1)) : $(call gb_UnoApiTarget_get_target,$(2))
@@ -357,13 +202,6 @@ $(call gb_UnoApiHeadersTarget_get_real_comprehensive_dir,$(1))/%.hpp :| \
endef
-# ensure that new urd triggers the dummy rule to rebuild the headers
-define gb_UnoApiHeadersTarget_add_headerfile
-$(call gb_UnoApiHeadersTarget_get_dir,$(1))/$(3) : \
- $(call gb_UnoApiPartTarget_get_target,$(basename $(2)).urd)
-
-endef
-
define gb_UnoApiHeadersTarget__use_api_for_target
$(call gb_UnoApiHeadersTarget_get_$(3),$(1)) : $(call gb_UnoApiTarget_get_target,$(2))
$(call gb_UnoApiHeadersTarget_get_$(3),$(1)) : UNOAPI_DEPS += -X$(call gb_UnoApiTarget_get_target,$(2))