summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2012-03-08 09:55:50 +0100
committerMichael Stahl <mstahl@redhat.com>2012-03-08 10:01:48 +0100
commit294b86e3dbbdb9b136cb17a51687f4e2762711cf (patch)
tree510d4355bdc4825d4b7e6ea5a1a102bdbd410fc3
parentf4926f2310be4870c948df806053f6573259e10f (diff)
gbuild: fix mkdir optimization with make 3.81
The problem is that make 3.81 does not match pattern rules whose target ends with '/' against directories. (regression from 408822b54724f8170a1296ddd67e50d8291c8ee1, 90491a073c5b5faee782ad5eab63276fda2342e6) So use a fake file ".dir" in the respective directory, and try not to spawn unnecessary mkdir processes by checking for existence via realpath. This is all quite ugly and should be reverted once support for make 3.81 is dropped. Also, fix a pre-existing problem of pattern rules with multiple targets that used to work by accident in Package.mk.
-rw-r--r--solenv/gbuild/AllLangResTarget.mk3
-rw-r--r--solenv/gbuild/ComponentTarget.mk7
-rw-r--r--solenv/gbuild/Configuration.mk34
-rw-r--r--solenv/gbuild/Executable.mk2
-rw-r--r--solenv/gbuild/Package.mk19
-rw-r--r--solenv/gbuild/Rdb.mk8
-rw-r--r--solenv/gbuild/UnoApiTarget.mk9
-rw-r--r--solenv/gbuild/Zip.mk2
8 files changed, 54 insertions, 30 deletions
diff --git a/solenv/gbuild/AllLangResTarget.mk b/solenv/gbuild/AllLangResTarget.mk
index 344f6d827a84..1df1fb1220ae 100644
--- a/solenv/gbuild/AllLangResTarget.mk
+++ b/solenv/gbuild/AllLangResTarget.mk
@@ -356,7 +356,8 @@ $(call gb_ResTarget_get_imagelist_target,$(1)) : $(call gb_ResTarget_get_target,
$(call gb_ResTarget_get_outdir_target,$(1)) : $(call gb_ResTarget_get_target,$(1))
$(call gb_ResTarget_get_outdir_target,$(1)) : ILSTTARGET = $(call gb_ResTarget_get_outdir_imagelist_target,$(1))
-$(call gb_ResTarget_get_outdir_imagelist_target,$(1)) :| $(dir $(call gb_ResTarget_get_outdir_imagelist_target,$(1)))
+$(call gb_ResTarget_get_outdir_imagelist_target,$(1)) :| \
+ $(dir $(call gb_ResTarget_get_outdir_imagelist_target,$(1))).dir
$(call gb_Deliver_add_deliverable,$(call gb_ResTarget_get_outdir_target,$(1)),$(call gb_ResTarget_get_target,$(1)),$(1))
$(call gb_Deliver_add_deliverable,$(call gb_ResTarget_get_outdir_imagelist_target,$(1)),$(call gb_ResTarget_get_imagelist_target,$(1)),$(1))
diff --git a/solenv/gbuild/ComponentTarget.mk b/solenv/gbuild/ComponentTarget.mk
index adec783c7824..9eb0ea55a7d3 100644
--- a/solenv/gbuild/ComponentTarget.mk
+++ b/solenv/gbuild/ComponentTarget.mk
@@ -52,8 +52,9 @@ $(call gb_ComponentTarget_get_target,%) : $(call gb_ComponentTarget_get_source,$
$(call gb_ComponentTarget_get_target,%) :
$(eval $(call gb_Outpt_error,Unable to find component file $(call gb_ComponentTarget_get_source,,$*) in the repositories: $(gb_ComponentTarget_REPOS) or xsltproc is missing.))
-$(call gb_ComponentTarget_get_outdir_target,%/) :
- mkdir -p $@
+# the .dir is for make 3.81, which ignores trailing /
+$(dir $(call gb_ComponentTarget_get_outdir_target,))%/.dir :
+ mkdir -p $(dir $@)
$(call gb_ComponentTarget_get_outdir_target,%) :
$(call gb_Deliver_deliver,$<,$@)
@@ -63,7 +64,7 @@ $(call gb_ComponentTarget_get_target,$(1)) : COMPONENTPREFIX := $(2)
$(call gb_ComponentTarget_get_target,$(1)) : LIBFILENAME := $(3)
$(call gb_ComponentTarget_get_outdir_target,$(1)) : \
$(call gb_ComponentTarget_get_target,$(1)) \
- | $(dir $(call gb_ComponentTarget_get_outdir_target,$(1)))
+ | $(dir $(call gb_ComponentTarget_get_outdir_target,$(1))).dir
$(call gb_Deliver_add_deliverable,$(call gb_ComponentTarget_get_outdir_target,$(1)),$(call gb_ComponentTarget_get_target,$(1)),$(1))
endef
diff --git a/solenv/gbuild/Configuration.mk b/solenv/gbuild/Configuration.mk
index c16bc1306d5e..ffced850a4e6 100644
--- a/solenv/gbuild/Configuration.mk
+++ b/solenv/gbuild/Configuration.mk
@@ -101,8 +101,11 @@ $(call gb_XcsTarget_get_clean_target,%) :
rm -f $(call gb_XcsTarget_get_target,$*) \
$(call gb_XcsTarget_get_outdir_target,$(XCSFILE)))
-$(call gb_XcsTarget_get_outdir_target,%/) :
- mkdir -p $@
+# the .dir is for make 3.81, which ignores trailing /
+$(dir $(call gb_XcsTarget_get_outdir_target,%))%/.dir :
+ $(if $(realpath $(dir $@)),,mkdir -p $(dir $@))
+$(dir $(call gb_XcsTarget_get_outdir_target,%)).dir :
+ $(if $(realpath $(dir $@)),,mkdir -p $(dir $@))
$(call gb_XcsTarget_get_outdir_target,%) :
$(call gb_Helper_abbreviate_dirs,\
@@ -145,8 +148,11 @@ $(call gb_XcuDataTarget_get_clean_target,%) :
rm -f $(call gb_XcuDataTarget_get_target,$*) \
$(call gb_XcuDataTarget_get_outdir_target,$(XCUFILE)))
-$(call gb_XcuDataTarget_get_outdir_target,%/) :
- mkdir -p $@
+# the .dir is for make 3.81, which ignores trailing /
+$(dir $(call gb_XcuDataTarget_get_outdir_target,))%/.dir :
+ $(if $(realpath $(dir $@)),,mkdir -p $(dir $@))
+$(dir $(call gb_XcuDataTarget_get_outdir_target,)).dir :
+ $(if $(realpath $(dir $@)),,mkdir -p $(dir $@))
$(call gb_XcuDataTarget_get_outdir_target,%) :
$(call gb_Helper_abbreviate_dirs,\
@@ -185,8 +191,9 @@ $(call gb_XcuModuleTarget_get_clean_target,%) :
rm -f $(call gb_XcuModuleTarget_get_target,$*) \
$(call gb_XcuModuleTarget_get_outdir_target,$(XCUFILE)))
-$(call gb_XcuModuleTarget_get_outdir_target,%/) :
- mkdir -p $@
+# the .dir is for make 3.81, which ignores trailing /
+$(dir $(call gb_XcuModuleTarget_get_outdir_target,))%/.dir :
+ $(if $(realpath $(dir $@)),,mkdir -p $(dir $@))
$(call gb_XcuModuleTarget_get_outdir_target,%) :
$(call gb_Helper_abbreviate_dirs,\
@@ -223,8 +230,11 @@ $(call gb_XcuLangpackTarget_get_clean_target,%) :
$(call gb_XcuLangpackTarget__get_target_with_lang,$*,$(lang)) \
$(call gb_XcuLangpackTarget__get_outdir_target_with_lang,$(XCUFILE),$(lang))))
-$(call gb_XcuLangpackTarget_get_outdir_target,%/) :
- mkdir -p $@
+# the .dir is for make 3.81, which ignores trailing /
+$(dir $(call gb_XcuLangpackTarget_get_outdir_target,))%/.dir :
+ $(if $(realpath $(dir $@)),,mkdir -p $(dir $@))
+$(dir $(call gb_XcuLangpackTarget_get_outdir_target,)).dir :
+ $(if $(realpath $(dir $@)),,mkdir -p $(dir $@))
$(call gb_XcuLangpackTarget_get_outdir_target,%) :
$(call gb_Helper_abbreviate_dirs,\
@@ -356,7 +366,7 @@ $(call gb_Configuration_get_target,$(1)) : \
$(call gb_XcsTarget_get_outdir_target,$(3))
$(call gb_XcsTarget_get_outdir_target,$(3)) : \
$(call gb_XcsTarget_get_target,$(2)/$(3)) \
- | $(dir $(call gb_XcsTarget_get_outdir_target,$(3)))
+ | $(dir $(call gb_XcsTarget_get_outdir_target,$(3))).dir
$(call gb_Deliver_add_deliverable,$(call gb_XcsTarget_get_outdir_target,$(3)),\
$(call gb_XcsTarget_get_target,$(2)/$(3)),$(2)/$(3))
@@ -382,7 +392,7 @@ $(call gb_Configuration_get_target,$(1)) : \
$(call gb_XcuDataTarget_get_outdir_target,$(3))
$(call gb_XcuDataTarget_get_outdir_target,$(3)) : \
$(call gb_XcuDataTarget_get_target,$(2)/$(3)) \
- | $(dir $(call gb_XcuDataTarget_get_outdir_target,$(3)))
+ | $(dir $(call gb_XcuDataTarget_get_outdir_target,$(3))).dir
$(call gb_Deliver_add_deliverable,\
$(call gb_XcuDataTarget_get_outdir_target,$(3)),\
$(call gb_XcuDataTarget_get_target,$(2)/$(3)),\
@@ -413,7 +423,7 @@ $(call gb_Configuration_get_target,$(1)) : \
$(call gb_XcuModuleTarget_get_outdir_target,$(3))
$(call gb_XcuModuleTarget_get_outdir_target,$(3)) : \
$(call gb_XcuModuleTarget_get_target,$(2)/$(3)) \
- | $(dir $(call gb_XcuModuleTarget_get_outdir_target,$(3)))
+ | $(dir $(call gb_XcuModuleTarget_get_outdir_target,$(3))).dir
$(call gb_Deliver_add_deliverable,\
$(call gb_XcuModuleTarget_get_outdir_target,$(3)),\
$(call gb_XcuModuleTarget_get_target,$(2)/$(3)),\
@@ -444,7 +454,7 @@ $(call gb_XcuLangpackTarget_get_clean_target,$(2)/$(3)) : XCUFILE := $(3)
$(call gb_XcuLangpackTarget__get_target_with_lang,$(2)/$(3),$(4)) : LANG := $(4)
$(call gb_XcuLangpackTarget__get_outdir_target_with_lang,$(3),$(4)) : \
$(call gb_XcuLangpackTarget__get_target_with_lang,$(2)/$(3),$(4)) \
- | $(dir $(call gb_XcuLangpackTarget__get_outdir_target_with_lang,$(3),$(4)))
+ | $(dir $(call gb_XcuLangpackTarget__get_outdir_target_with_lang,$(3),$(4))).dir
$(call gb_Deliver_add_deliverable,\
$(call gb_XcuLangpackTarget__get_outdir_target_with_lang,$(3),$(4)),\
$(call gb_XcuLangpackTarget__get_target_with_lang,$(2)/$(3),$(4)),\
diff --git a/solenv/gbuild/Executable.mk b/solenv/gbuild/Executable.mk
index af248758731b..90d1f09923a3 100644
--- a/solenv/gbuild/Executable.mk
+++ b/solenv/gbuild/Executable.mk
@@ -56,7 +56,7 @@ $(call gb_Executable_set_targettype_gui,$(2))
$(call gb_LinkTarget_LinkTarget,$(2))
$(call gb_LinkTarget_set_targettype,$(2),Executable)
$(call gb_Executable_get_target,$(1)) : $(call gb_LinkTarget_get_target,$(2)) \
- | $(dir $(call gb_Executable_get_target,$(1)))
+ | $(dir $(call gb_Executable_get_target,$(1))).dir
$(call gb_Executable_get_clean_target,$(1)) : $(call gb_LinkTarget_get_clean_target,$(2))
$(call gb_Executable_Executable_platform,$(1),$(2))
$$(eval $$(call gb_Module_register_target,$(call gb_Executable_get_target,$(1)),$(call gb_Executable_get_clean_target,$(1))))
diff --git a/solenv/gbuild/Package.mk b/solenv/gbuild/Package.mk
index c8fd57521f00..611373d81e6f 100644
--- a/solenv/gbuild/Package.mk
+++ b/solenv/gbuild/Package.mk
@@ -29,14 +29,23 @@
# PackagePart class
-$(foreach destination,$(call gb_PackagePart_get_destinations), $(destination)/%/) :
- mkdir -p $@
+# a pattern rule with multiple targets is actually executed only once for each
+# match, so define only pattern rules with one target here
+# the .dir is for make 3.81, which ignores trailing /
+define gb_PackagePart__rule
+$(1)/.dir :
+ $$(if $$(realpath $$(dir $$@)),,mkdir -p $$(dir $$@))
+$(1)/%/.dir :
+ $$(if $$(realpath $$(dir $$@)),,mkdir -p $$(dir $$@))
+$(1)/% :
+ $$(call gb_Deliver_deliver,$$<,$$@)
+endef
-$(foreach destination,$(call gb_PackagePart_get_destinations), $(destination)/%) :
- $(call gb_Deliver_deliver,$<,$@)
+$(foreach destination,$(call gb_PackagePart_get_destinations),$(eval \
+ $(call gb_PackagePart__rule,$(destination))))
define gb_PackagePart_PackagePart
-$(OUTDIR)/$(1) : $(2) | $(dir $(OUTDIR)/$(1))
+$(OUTDIR)/$(1) : $(2) | $(dir $(OUTDIR)/$(1)).dir
$(2) :| $(3)
$(call gb_Deliver_add_deliverable,$(OUTDIR)/$(1),$(2),$(3))
endef
diff --git a/solenv/gbuild/Rdb.mk b/solenv/gbuild/Rdb.mk
index 2aaca0a37039..86aee2d532b9 100644
--- a/solenv/gbuild/Rdb.mk
+++ b/solenv/gbuild/Rdb.mk
@@ -59,8 +59,10 @@ $(call gb_Rdb_get_clean_target,%) :
$(call gb_Helper_abbreviate_dirs_native,\
rm -f $(call gb_Rdb_get_outdir_target,$*) $(call gb_Rdb_get_target,$*))
-$(call gb_Rdb_get_outdir_target,%/) :
- mkdir -p $@
+# DO NOT DEFINE: it overwrites the definition from Package.mk for xml/
+# and doesn't work on 3.81
+#$(dir $(call gb_Rdb_get_outdir_target,))%/.dir :
+# mkdir -p $(dir $@)
$(call gb_Rdb_get_outdir_target,%) :
$(call gb_Deliver_deliver,$<,$@)
@@ -69,7 +71,7 @@ define gb_Rdb_Rdb
$(call gb_Rdb_get_target,$(1)) : COMPONENTS :=
$(call gb_Rdb_get_clean_target,$(1)) : COMPONENTS :=
$(call gb_Rdb_get_outdir_target,$(1)) : $(call gb_Rdb_get_target,$(1)) \
- | $(dir $(call gb_Rdb_get_outdir_target,$(1)))
+ | $(dir $(call gb_Rdb_get_outdir_target,$(1))).dir
$(call gb_Deliver_add_deliverable,$(call gb_ResTarget_get_outdir_target,$(1)),$(call gb_Rdb_get_target,$(1)),$(1))
$$(eval $$(call gb_Module_register_target,$(call gb_Rdb_get_outdir_target,$(1)),$(call gb_Rdb_get_clean_target,$(1))))
diff --git a/solenv/gbuild/UnoApiTarget.mk b/solenv/gbuild/UnoApiTarget.mk
index 9d0cfc6faeb2..c751dd451a93 100644
--- a/solenv/gbuild/UnoApiTarget.mk
+++ b/solenv/gbuild/UnoApiTarget.mk
@@ -56,7 +56,7 @@ endef
define gb_UnoApiTarget_UnoApiTarget
$$(eval $$(call gb_Module_register_target,$(call gb_UnoApiOutTarget_get_target,$(1)),$(call gb_UnoApiOutTarget_get_clean_target,$(1))))
$(call gb_UnoApiOutTarget_get_target,$(1)) : $(call gb_UnoApiTarget_get_target,$(1)) \
- | $(dir $(call gb_UnoApiOutTarget_get_target,$(1)))
+ | $(dir $(call gb_UnoApiOutTarget_get_target,$(1))).dir
$(call gb_UnoApiOutTarget_get_clean_target,$(1)) : $(call gb_UnoApiTarget_get_clean_target,$(1))
$(call gb_UnoApiTarget_get_target,$(1)) : INCLUDE :=
$(call gb_UnoApiTarget_get_target,$(1)) : UNOAPI_DEPS :=
@@ -74,7 +74,7 @@ define gb_UnoApiTarget__add_idlfile
$(call gb_UnoApiPartTarget_get_target,$(2)/idl.done) : \
$(call gb_UnoApiPartTarget_get_target,$(2)/$(3).urd)
$(call gb_UnoApiPartTarget_get_target,$(2)/$(3).urd) :| \
- $(call gb_UnoApiPartTarget_get_target,$(2)/)
+ $(call gb_UnoApiPartTarget_get_target,$(2)/.dir)
gb_UnoApiTarget_IDLFILES_$(1) += $(2)/$(3).idl
ifeq ($(gb_FULLDEPS),$(true))
@@ -202,8 +202,9 @@ $(call gb_UnoApiTarget_get_clean_target,%) :
# 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.
-$(call gb_UnoApiPartTarget_get_target,%/) :
- mkdir -p $@
+# the .dir is for make 3.81, which ignores trailing /
+$(dir $(call gb_UnoApiPartTarget_get_target,))%/.dir :
+ $(if $(realpath $(dir $@)),,mkdir -p $(dir $@))
$(call gb_UnoApiPartTarget_get_target,%.urd) :
touch $@
diff --git a/solenv/gbuild/Zip.mk b/solenv/gbuild/Zip.mk
index 0ae4c26b8679..38f133536455 100644
--- a/solenv/gbuild/Zip.mk
+++ b/solenv/gbuild/Zip.mk
@@ -77,7 +77,7 @@ gb_Package_Location_$(1) := $(2)
$(eval $(call gb_Module_register_target,$(call gb_Zip_get_final_target,$(1)),$(call gb_Zip_get_clean_target,$(1))))
$(call gb_Deliver_add_deliverable,$(call gb_Zip_get_outdir_target,$(1)),$(call gb_Zip_get_target,$(1)),$(1))
$(call gb_Zip_get_outdir_target,$(1)) : $(call gb_Zip_get_target,$(1)) \
- | $(dir $(call gb_Zip_get_outdir_target,$(1)))
+ | $(dir $(call gb_Zip_get_outdir_target,$(1))).dir
endef