[Libreoffice-commits] .: solenv/gbuild

Norbert Thiebaud nthiebaud at kemper.freedesktop.org
Mon Apr 4 07:17:31 PDT 2011


 solenv/gbuild/CppunitTest.mk     |    2 ++
 solenv/gbuild/Library.mk         |    1 +
 solenv/gbuild/LinkTarget.mk      |   28 ++++++++++++++++++++++++++++
 solenv/gbuild/TargetLocations.mk |    1 +
 solenv/gbuild/platform/unxgcc.mk |    1 +
 5 files changed, 33 insertions(+)

New commits:
commit 4fc158f95323091fb4a6fd52a4acab6140bba541
Author: Norbert Thiebaud <nthiebaud at gmail.com>
Date:   Mon Apr 4 09:16:54 2011 -0500

    add the ability to imports objects directly into a CppUnitTest Link
    
    some cppunit test need to link directly with the object of the module
    they are meant to test, due to the fact that the API they use/test
    are not necessarily exported in the public interface of the
    module's dynamic library.
    
    This patch add the mean to export the list of objects used in the link of
    specific target library, and a mean to import these into the link of
    a cppunit.
    
    Only unxgcc.mk has been modified so far to support the later
    
    This is not intended to be use to import objects accross module boundaries

diff --git a/solenv/gbuild/CppunitTest.mk b/solenv/gbuild/CppunitTest.mk
index 59f6f33..9184ec5 100644
--- a/solenv/gbuild/CppunitTest.mk
+++ b/solenv/gbuild/CppunitTest.mk
@@ -98,6 +98,8 @@ $(eval $(foreach method,\
 	add_package_headers \
 	add_sdi_headers \
 	add_precompiled_header \
+	add_extra_object \
+	add_extra_objects \
 ,\
 	$(call gb_CppunitTest__forward_to_Linktarget,$(method))\
 ))
diff --git a/solenv/gbuild/Library.mk b/solenv/gbuild/Library.mk
index 3c8d2f5..d95a06a 100644
--- a/solenv/gbuild/Library.mk
+++ b/solenv/gbuild/Library.mk
@@ -126,6 +126,7 @@ $(eval $(foreach method,\
 	add_package_headers \
 	add_sdi_headers \
 	add_precompiled_header \
+	export_objects_list \
 ,\
 	$(call gb_Library__forward_to_Linktarget,$(method))\
 ))
diff --git a/solenv/gbuild/LinkTarget.mk b/solenv/gbuild/LinkTarget.mk
index 3572b10..fd9bad4 100644
--- a/solenv/gbuild/LinkTarget.mk
+++ b/solenv/gbuild/LinkTarget.mk
@@ -387,6 +387,7 @@ $(call gb_LinkTarget_get_target,$(1)) : PCH_NAME :=
 $(call gb_LinkTarget_get_target,$(1)) : PCHOBJS :=
 $(call gb_LinkTarget_get_headers_target,$(1)) \
 $(call gb_LinkTarget_get_target,$(1)) : PDBFILE :=
+$(call gb_LinkTarget_get_target,$(1)) : EXTRAOBJECTS := 
 
 ifeq ($(gb_FULLDEPS),$(true))
 ifneq ($(wildcard $(call gb_LinkTarget_get_dep_target,$(1))),)
@@ -408,6 +409,7 @@ $(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE := $$(gb_LinkTarget_INCLUDE)
 $(call gb_LinkTarget_get_dep_target,$(1)) : INCLUDE_STL := $$(gb_LinkTarget_INCLUDE_STL)
 $(call gb_LinkTarget_get_dep_target,$(1)) : TARGETTYPE := 
 $(call gb_LinkTarget_get_dep_target,$(1)) : PCH_NAME :=
+$(call gb_LinkTarget_get_dep_target,$(1)) : EXTRAOBJECTS := 
 endif
 
 endef
@@ -518,6 +520,11 @@ endif
 
 endef
 
+define gb_LinkTarget_add_extra_object
+$(call gb_LinkTarget_get_target,$(1)) : EXTRAOBJECTS += $(2)
+
+endef
+
 define gb_LinkTarget_add_cxxobject
 $(call gb_LinkTarget_get_target,$(1)) : CXXOBJECTS += $(2)
 $(call gb_LinkTarget_get_clean_target,$(1)) : CXXOBJECTS += $(2)
@@ -575,6 +582,27 @@ define gb_LinkTarget_add_cobjects
 $(foreach obj,$(2),$(call gb_LinkTarget_add_cobject,$(1),$(obj),$(3)))
 endef
 
+define gb_LinkTarget_export_objects_list
+$(call gb_LinkTarget_get_target,$(1)) : $(call gb_LinkTarget_get_objects_list,$(1))
+
+$(call gb_LinkTarget_get_objects_list,$(1)):
+	echo "foobar $(1)" && \
+	RESPONSEFILE=$$(call var2file,$$(call gb_LinkTarget_get_objects_list,$(1)),200,\
+		$$(foreach object,$$(COBJECTS),$$(call gb_CObject_get_target,$$(object))) \
+		$$(foreach object,$$(CXXOBJECTS),$$(call gb_CxxObject_get_target,$$(object))) \
+		$$(foreach object,$$(OBJCXXOBJECTS),$$(call gb_ObjCxxObject_get_target,$$(object))) \
+		$$(foreach object,$$(GENCXXOBJECTS),$$(call gb_GenCxxObject_get_target,$$(object))))
+endef
+
+define gb_LinkTarget_add_extra_objects
+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 import objects library/libraries $$(filter-out $(gb_Library_KNOWNLIBS),$(2)). Libraries must be registered in Repository.mk))
+endif
+$(call gb_LinkTarget_get_target,$(1)) : $$(foreach lib,$(2),$$(call gb_Library_get_target,$$(lib)))
+$(foreach lib,$(2),$(foreach obj,$(shell cat $(call gb_LinkTarget_get_objects_list,Library/$(notdir $(call gb_Library_get_target,$(lib))))),$(call gb_LinkTarget_add_extra_object,$(1),$(obj))))
+endef
+
 define gb_LinkTarget_add_cxxobjects
 $(foreach obj,$(2),$(call gb_LinkTarget_add_cxxobject,$(1),$(obj),$(3)))
 endef
diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk
index 23df7b1..726a223 100644
--- a/solenv/gbuild/TargetLocations.mk
+++ b/solenv/gbuild/TargetLocations.mk
@@ -65,6 +65,7 @@ gb_JunitTest_get_userdir = $(WORKDIR)/JunitTest/$(1)/user
 gb_LinkTarget_get_external_headers_target = $(WORKDIR)/ExternalHeaders/$(1)
 gb_LinkTarget_get_headers_target = $(WORKDIR)/Headers/$(1)
 gb_LinkTarget_get_target = $(WORKDIR)/LinkTarget/$(1)
+gb_LinkTarget_get_objects_list = $(WORKDIR)/LinkTarget/$(1).objlist
 gb_Module_get_check_target = $(WORKDIR)/Module/check/$(1)
 gb_Module_get_subsequentcheck_target = $(WORKDIR)/Module/subsequentcheck/$(1)
 gb_Module_get_target = $(WORKDIR)/Module/$(1)
diff --git a/solenv/gbuild/platform/unxgcc.mk b/solenv/gbuild/platform/unxgcc.mk
index b25101d..72e6d0c 100755
--- a/solenv/gbuild/platform/unxgcc.mk
+++ b/solenv/gbuild/platform/unxgcc.mk
@@ -242,6 +242,7 @@ $(call gb_Helper_abbreviate_dirs,\
 		$(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
 		$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
 		$(foreach object,$(GENCXXOBJECTS),$(call gb_GenCxxObject_get_target,$(object))) \
+		$(EXTRAOBJECTS) \
 		-Wl$(COMMA)--start-group $(foreach lib,$(LINKED_STATIC_LIBS),$(call gb_StaticLibrary_get_target,$(lib))) -Wl$(COMMA)--end-group \
 		$(patsubst lib%.so,-l%,$(foreach lib,$(LINKED_LIBS),$(call gb_Library_get_filename,$(lib)))) \
 		-o $(1))


More information about the Libreoffice-commits mailing list