diff options
-rw-r--r-- | solenv/gbuild/LinkTarget.mk | 23 | ||||
-rw-r--r-- | solenv/gbuild/extensions/final_ObjectOwner.mk | 47 |
2 files changed, 70 insertions, 0 deletions
diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk index 49ce493b609e..45df7b2beb40 100644 --- a/solenv/gbuild/LinkTarget.mk +++ b/solenv/gbuild/LinkTarget.mk @@ -240,6 +240,9 @@ gb_ObjCxxObject_ObjCxxObject = # LinkTarget class gb_LinkTarget_DEFAULTDEFS := $(gb_GLOBALDEFS) +gb_LinkTarget_OBJECTOWNER := +gb_LinkTarget_OBJECTS := + # defined by platform # gb_LinkTarget_CXXFLAGS # gb_LinkTarget_LDFLAGS @@ -531,6 +534,11 @@ $(call gb_LinkTarget_get_dep_target,$(1)) : COBJECTS += $(2) $(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_CObject_get_dep_target,$(2)) endif +ifeq ($(gb_CHECKOBJECTOWNER),$(true)) +gb_LinkTarget_OBJECTOWNER += $(call gb_CObject_get_target,$(2)):$(1) +gb_LinkTarget_OBJECTS += $(call gb_CObject_get_target,$(2)) +endif + endef define gb_LinkTarget_add_cxxobject @@ -546,6 +554,11 @@ $(call gb_LinkTarget_get_dep_target,$(1)) : CXXOBJECTS += $(2) $(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_CxxObject_get_dep_target,$(2)) endif +ifeq ($(gb_CHECKOBJECTOWNER),$(true)) +gb_LinkTarget_OBJECTOWNER += $(call gb_CxxObject_get_target,$(2)):$(1) +gb_LinkTarget_OBJECTS += $(call gb_CxxObject_get_target,$(2)) +endif + endef define gb_LinkTarget_add_objcxxobject @@ -561,6 +574,11 @@ $(call gb_LinkTarget_get_dep_target,$(1)) : OBJCXXOBJECTS += $(2) $(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_ObjCxxObject_get_dep_target,$(2)) endif +ifeq ($(gb_CHECKOBJECTOWNER),$(true)) +gb_LinkTarget_OBJECTOWNER += $(call gb_ObjCxxObject_get_target,$(2)):$(1) +gb_LinkTarget_OBJECTS += $(call gb_ObjCxxObject_get_target,$(2)) +endif + endef define gb_LinkTarget_add_generated_cxx_object @@ -576,6 +594,11 @@ $(call gb_LinkTarget_get_dep_target,$(1)) : GENCXXOBJECTS += $(2) $(call gb_LinkTarget_get_dep_target,$(1)) : $(call gb_GenCxxObject_get_dep_target,$(2)) endif +ifeq ($(gb_CHECKOBJECTOWNER),$(true)) +gb_LinkTarget_OBJECTOWNER += $(call gb_GenCxxObject_get_target,$(2)):$(1) +gb_LinkTarget_OBJECTS += $(call gb_GenCxxObject_get_target,$(2)) +endif + endef define gb_LinkTarget_add_noexception_object diff --git a/solenv/gbuild/extensions/final_ObjectOwner.mk b/solenv/gbuild/extensions/final_ObjectOwner.mk new file mode 100644 index 000000000000..c00dcb897143 --- /dev/null +++ b/solenv/gbuild/extensions/final_ObjectOwner.mk @@ -0,0 +1,47 @@ +# Version: MPL 1.1 / GPLv3+ / LGPLv3+ +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License or as specified alternatively below. You may obtain a copy of +# the License at http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Initial Developer of the Original Code is +# Bjoern Michaelsen, Canonical Ltd. <bjoern.michaelsen@canonical.com> +# Portions created by the Initial Developer are Copyright (C) 2010 the +# Initial Developer. All Rights Reserved. +# +# Major Contributor(s): +# +# For minor contributions see the git repository. +# +# Alternatively, the contents of this file may be used under the terms of +# either the GNU General Public License Version 3 or later (the "GPLv3+"), or +# the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), +# in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable +# instead of those above. + +ifeq ($(gb_CHECKOBJECTOWNER),$(true)) + +define gb_LinkTarget_check_object_owner +ifneq (1,$$(words $$(filter $(1):%,$$(gb_LinkTarget_OBJECTOWNER)))) +$$(info \ + $(patsubst $(WORKDIR)/%,%,$(1))\ + is linked in by\ + $$(patsubst $(1):%,%,$$(filter $(1):%,$$(gb_LinkTarget_OBJECTOWNER)))) +gb_CHECKOBJECTOWNER_VALID := $(false) +endif +endef + +gb_CHECKOBJECTOWNER_VALID := $(true) +$(foreach object,$(sort $(gb_LinkTarget_OBJECTS)),$(eval $(call gb_LinkTarget_check_object_owner,$(object)))) +ifneq ($(gb_CHECKOBJECTOWNER_VALID),$(true)) +$(eval $(call gb_Output_error,duplicate linked objects)) +endif + +endif +# vim: set noet ts=4 sw=4: |