diff options
Diffstat (limited to 'solenv/gbuild/UnoApiTarget.mk')
-rw-r--r-- | solenv/gbuild/UnoApiTarget.mk | 202 |
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)) |