summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2012-12-30 12:20:50 +0100
committerDavid Tardon <dtardon@redhat.com>2012-12-30 17:15:48 +0100
commit0d6f8e5c048d3caef43bf26f2ae683224dec6921 (patch)
tree8df46c6ea9777a4a46518b4fab0ab57c2b33dba6
parentecc9896c9be9669ec1ea13a99c9aa624356b07aa (diff)
allow setting runtime deps of executables in one place
Change-Id: I325287cba773df848a8797486c149502abae9c9d
-rwxr-xr-xsolenv/bin/concat-depsbin0 -> 15522 bytes
-rw-r--r--solenv/gbuild/Executable.mk46
-rw-r--r--solenv/gbuild/Helper.mk10
-rw-r--r--solenv/gbuild/TargetLocations.mk1
-rw-r--r--solenv/gbuild/gbuild.mk2
5 files changed, 58 insertions, 1 deletions
diff --git a/solenv/bin/concat-deps b/solenv/bin/concat-deps
new file mode 100755
index 000000000000..6391ed6f98f8
--- /dev/null
+++ b/solenv/bin/concat-deps
Binary files differ
diff --git a/solenv/gbuild/Executable.mk b/solenv/gbuild/Executable.mk
index 2fa67509e989..4683d0ec4163 100644
--- a/solenv/gbuild/Executable.mk
+++ b/solenv/gbuild/Executable.mk
@@ -31,10 +31,20 @@
# defined by platform
# gb_Executable_Executable_platform
+$(dir $(call gb_Executable_get_runtime_target,%)).dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
+$(dir $(call gb_Executable_get_runtime_target,%))%/.dir :
+ $(if $(wildcard $(dir $@)),,mkdir -p $(dir $@))
+
+$(call gb_Executable_get_runtime_target,%) : $(call gb_Executable_get_target,%)
+ touch $@
+
.PHONY : $(call gb_Executable_get_clean_target,%)
$(call gb_Executable_get_clean_target,%) :
$(call gb_Helper_abbreviate_dirs,\
rm -f $(call gb_Executable_get_target,$*) \
+ $(call gb_Executable_get_runtime_target,$*) \
$(AUXTARGETS))
define gb_Executable_Executable
@@ -52,6 +62,7 @@ $(call gb_LinkTarget_set_targettype,$(2),Executable)
$(call gb_LinkTarget_add_libs,$(2),$(gb_STDLIBS))
$(call gb_Executable_get_target,$(1)) : $(call gb_LinkTarget_get_target,$(2)) \
| $(dir $(call gb_Executable_get_target,$(1))).dir
+$(call gb_Executable_get_runtime_target,$(1)) :| $(dir $(call gb_Executable_get_runtime_target,$(1))).dir
$(call gb_Executable_get_clean_target,$(1)) : $(call gb_LinkTarget_get_clean_target,$(2))
$(call gb_Executable_get_clean_target,$(1)) : AUXTARGETS :=
$(call gb_Executable_Executable_platform,$(1),$(2))
@@ -148,4 +159,39 @@ $(eval $(foreach method,\
$(call gb_Executable_forward_to_Linktarget,$(method))\
))
+# Run-time use
+
+# Add dependencies needed for running the executable
+#
+# gb_Executable_add_runtime_dependencies executable dependencies
+define gb_Executable_add_runtime_dependencies
+$(call gb_Executable_get_runtime_target,$(1)) : $(2)
+
+endef
+
+# Get dependencies needed for running the executable
+#
+# This is not strictly necessary, but it makes the use more similar to
+# ExternalExecutable.
+#
+# gb_Executable_get_runtime_dependencies executable
+define gb_Executable_get_runtime_dependencies
+$(call gb_Executable_get_runtime_target,$(1))
+endef
+
+define gb_Executable__get_command
+$(if $(filter NONE,$(gb_Executable_VALIDGROUPS)),,$(call gb_Output_error,executable group NONE does not exist!))
+$(if $(filter $(1),$(gb_Executable_NONE)),,$(gb_Helper_set_ld_path)) \
+ $(call gb_Executable_get_target_for_build,$(1))
+endef
+
+# Get complete command-line for running the executable
+#
+# This includes setting library path, if necessary.
+#
+# gb_Executable_get_command executable
+define gb_Executable_get_command
+$(strip $(call gb_Executable__get_command,$(1)))
+endef
+
# vim: set noet sw=4:
diff --git a/solenv/gbuild/Helper.mk b/solenv/gbuild/Helper.mk
index 9c6b6e91d0e1..c7ffdc6ae398 100644
--- a/solenv/gbuild/Helper.mk
+++ b/solenv/gbuild/Helper.mk
@@ -133,6 +133,14 @@ gb_Jar_KNOWN := $$(foreach group,$$(gb_Jar_VALIDGROUPS),$$(gb_Jar_$$(group)))
endef
+define gb_Helper_process_executable_registrations
+$(foreach group,$(gb_Executable_VALIDGROUPS),\
+ $(foreach executable,$(gb_Executable_$(group)),\
+ $(if $(filter-out undefined,$(origin gb_Executable__register_$(executable))),\
+ $(call gb_Executable__register_$(executable)))))
+
+endef
+
define gb_Helper_register_executables
ifeq ($$(filter $(1),$$(gb_Executable_VALIDGROUPS)),)
$$(eval $$(call gb_Output_error,$(1) is not a valid group for executables. Valid groups are: $$(gb_Executable_VALIDGROUPS)))
@@ -198,7 +206,7 @@ $(foreach def,$(1),$(if $(filter TRUE YES,$($(def))),-D$(def)))
endef
define gb_Helper_execute
-$(gb_Helper_set_ld_path) $(OUTDIR_FOR_BUILD)/bin/$(1)
+$(call gb_Executable_get_command,$(1))
endef
# gb_Helper_OUTDIRLIBDIR is set by the platform to the path the dynamic linker need to use
diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk
index d9213ec7dc91..b201fbbb4359 100644
--- a/solenv/gbuild/TargetLocations.mk
+++ b/solenv/gbuild/TargetLocations.mk
@@ -106,6 +106,7 @@ gb_CxxObject_get_target = $(WORKDIR)/CxxObject/$(1).o
gb_GenCxxObject_get_target = $(WORKDIR)/GenCxxObject/$(1).o
gb_Executable_get_external_headers_target = $(WORKDIR)/ExternalHeaders/Executable/$(1)
gb_Executable_get_headers_target = $(WORKDIR)/Headers/Executable/$(1)
+gb_Executable_get_runtime_target = $(WORKDIR)/Executable/$(1).run
gb_ExtensionTarget_get_target = $(WORKDIR)/ExtensionTarget/$(1).oxt
gb_ExtensionTarget_get_rootdir = $(WORKDIR)/ExtensionTarget/$(1)/root
gb_ExtensionTarget_get_workdir = $(WORKDIR)/ExtensionTarget/$(1)
diff --git a/solenv/gbuild/gbuild.mk b/solenv/gbuild/gbuild.mk
index edb95c5b2f7f..d7b804deab39 100644
--- a/solenv/gbuild/gbuild.mk
+++ b/solenv/gbuild/gbuild.mk
@@ -337,6 +337,8 @@ include $(foreach class, \
InstallScript \
,$(GBUILDDIR)/$(class).mk)
+$(eval $(call gb_Helper_process_executable_registrations))
+
# optional extensions that should never be essential
ifneq ($(wildcard $(GBUILDDIR)/extensions/post_*.mk),)
include $(wildcard $(GBUILDDIR)/extensions/post_*.mk)