diff options
Diffstat (limited to 'solenv')
-rw-r--r-- | solenv/gbuild/Helper.mk | 7 | ||||
-rw-r--r-- | solenv/gbuild/Library.mk | 18 | ||||
-rw-r--r-- | solenv/gbuild/LinkTarget.mk | 42 |
3 files changed, 65 insertions, 2 deletions
diff --git a/solenv/gbuild/Helper.mk b/solenv/gbuild/Helper.mk index 4d2fdd698005..9f3e92e02ec4 100644 --- a/solenv/gbuild/Helper.mk +++ b/solenv/gbuild/Helper.mk @@ -199,6 +199,13 @@ $(if $(filter UNOVERLIBS RTVERLIBS,$(1)),\ endef +# a plugin is a library, why can't be dynamically linked and must be dlopen'd, but must be linked static +define gb_Helper_register_plugins_for_install +$(call gb_Helper_register_libraries_for_install,$(1),$(2),$(3)) +gb_Library_KNOWNPLUGINS += $(3) + +endef + define gb_Helper__register_jars $(foreach group,$(gb_Jar_VALIDGROUPS),\ $(foreach target,$(2),\ diff --git a/solenv/gbuild/Library.mk b/solenv/gbuild/Library.mk index 6562cbf41d34..2fb98bcf622f 100644 --- a/solenv/gbuild/Library.mk +++ b/solenv/gbuild/Library.mk @@ -172,6 +172,23 @@ gb_Library__COMPONENTPREFIXES := \ gb_Library_get_runtime_filename = $(call gb_Library_get_filename,$(1)) gb_Library_get_runtime_filename_for_build = $(call gb_Library_get_filename_for_build,$(1)) +# instead of setting nodep use gb_Library_set_plugin_for_nodep +# +# call gb_Library_set_plugin_for,library,loader,nodep +define gb_Library_set_plugin_for +ifneq (,$$(filter-out $(gb_Library_KNOWNPLUGINS),$(1))) +$$(eval $$(call gb_Output_info,currently known plugins are: $(sort $(gb_Library_KNOWNPLUGINS)),ALL)) +$$(eval $$(call gb_Output_error,Unknown plugin(s) '$$(filter-out $(gb_Library_KNOWNPLUGINS),$(1)))'. Plugins must be registered in Repository.mk or RepositoryExternal.mk)) +endif + +$(call gb_LinkTarget_get_target,$(call gb_Library_get_linktarget,$(2))) : PLUGINS += $(1) +$(eval $(call gb_LinkTarget__add_plugin,$(call gb_Library_get_linktarget,$(2)),$(1))) +$(eval $(call gb_LinkTarget__set_plugin_for,$(call gb_Library_get_linktarget,$(1)),$(2),$(3))) +endef + +# call gb_Library_set_plugin_for_nodep,library,loader +gb_Library_set_plugin_for_nodep = $(call gb_Library_set_plugin_for,$(1),$(2),$(true)) + # forward the call to the gb_LinkTarget implementation # (note: because the function name is in $(1), the other args are shifted by 1) define gb_Library__forward_to_Linktarget @@ -182,7 +199,6 @@ endef # copy pasta for forwarding: this could be (and was) done more elegantly, but # these here can be found by both git grep and ctags gb_Library_add_cobject = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3)) -gb_Library_add_cobject = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3)) gb_Library_add_cobjects = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3)) gb_Library_add_cxxobject = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3)) gb_Library_add_cxxobjects = $(call gb_Library__forward_to_Linktarget,$(0),$(1),$(2),$(3)) diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk index 783f6022abe6..a5306eeb38b9 100644 --- a/solenv/gbuild/LinkTarget.mk +++ b/solenv/gbuild/LinkTarget.mk @@ -1225,6 +1225,7 @@ ifeq ($(DISABLE_DYNLOADING),) $(call gb_LinkTarget_get_target,$(1)) : \ $(foreach lib,$(3),$(call gb_Library_get_exports_target,$(lib))) endif + $(call gb_LinkTarget_get_headers_target,$(1)) : \ $(foreach lib,$(2),$(call gb_Library_get_headers_target,$(lib))) $(foreach lib,$(2),$(call gb_LinkTarget__lib_dummy_depend,$(lib))) @@ -1273,7 +1274,12 @@ endef define gb_LinkTarget_use_libraries ifneq (,$$(filter-out $(gb_Library_KNOWNLIBS),$(2))) $$(eval $$(call gb_Output_info,currently known libraries are: $(sort $(gb_Library_KNOWNLIBS)),ALL)) -$$(eval $$(call gb_Output_error,Cannot link against library/libraries $$(filter-out $(gb_Library_KNOWNLIBS),$(2)). Libraries must be registered in Repository.mk or RepositoryExternal.mk)) +$$(eval $$(call gb_Output_error,Cannot link against library/libraries '$$(filter-out $(gb_Library_KNOWNLIBS),$(2))'. Libraries must be registered in Repository.mk or RepositoryExternal.mk)) +endif +ifneq (,$$(filter $(2),$(gb_Library_KNOWNPLUGINS))) +ifneq (,$$(filter $(1),$$(foreach plugin,$(gb_Library_KNOWNPLUGINS),$(call gb_Library__get_workdir_linktargetname,$(plugin))))) +$$(eval $$(call gb_Output_error,Cannot link against plugin library/libraries '$$(filter $(2),$(gb_Library_KNOWNPLUGINS))'. Only plugins are allowed to do that.)) +endif endif ifeq ($(call gb_LinkTarget__is_build_tool,$(1)),$(true)) @@ -2102,4 +2108,38 @@ endif endef +gb_LinkTarget__get_plugins_var = $(call gb_LinkTarget__get_workdir_linktargetname,$(1))<>PLUGINS +gb_LinkTarget__get_plugins = $($(call gb_LinkTarget__get_plugins_var,$(1))) +gb_Library__get_plugins = $($(call gb_LinkTarget__get_plugins_var,$(call gb_Library_get_linktarget,$(1)))) + +define gb_LinkTarget__add_plugin +$(call gb_LinkTarget__get_plugins_var,$(1)) += $(2) + +endef + +# Instead of setting nodep use gb_LinkTarget__set_plugin_for_nodep +# +# call gb_LinkTarget__set_plugin_for,linktarget,loader,nodep +define gb_LinkTarget__set_plugin_for +ifneq (,$$(filter-out $(gb_Library_KNOWNLIBS),$(2))) +$$(eval $$(call gb_Output_info,currently known libraries are: $(sort $(gb_Library_KNOWNLIBS)),ALL)) +$$(eval $$(call gb_Output_error,Cannot link against library/libraries $$(filter-out $(gb_Library_KNOWNLIBS),$(2)). Libraries must be registered in Repository.mk or RepositoryExternal.mk)) +endif +ifeq (,$(filter $(1),$(foreach plugin,$(gb_Library_KNOWNPLUGINS),$(call gb_Library_get_linktarget,$(plugin))))) +$$(eval $$(call gb_Output_error,Unknown plugin(s) '$(filter $(1),$(foreach plugin,$(gb_Library_KNOWNPLUGINS),$(call gb_Library_get_linktarget,$(plugin))))'. Plugins must be registered in Repository.mk or RepositoryExternal.mk)) +endif +ifneq (,$(filter $(1),$(foreach lib,$(gb_MERGEDLIBS),$(call gb_Library_get_linktarget,$(lib))))) +$$(eval $$(call gb_Output_error,Plugins can't be in mergelibs)) +endif +ifeq ($(call gb_LinkTarget__is_build_tool,$(1)),$(true)) +$$(eval $$(call gb_Output_error,Plugin support for build tools not implemented)) +endif + +$(if $(3),,$(call gb_LinkTarget__use_libraries,$(1),$(2),$(2))) + +endef + +# call gb_LinkTarget__set_plugin_for_nodep,linktarget,loader +gb_LinkTarget__set_plugin_for_nodep = $(call gb_LinkTarget__set_plugin_for,$(1),$(2),$(true)) + # vim: set noet sw=4: |