[Libreoffice-commits] .: 4 commits - libwps/Module_libwps.mk libwps/StaticLibrary_wps.mk libwps/UnpackedTarball_wps.mk solenv/bin solenv/gbuild

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Mon Oct 29 15:42:34 PDT 2012


 libwps/Module_libwps.mk                 |   21 ++++++++
 libwps/StaticLibrary_wps.mk             |   20 --------
 libwps/UnpackedTarball_wps.mk           |   25 ++++++++++
 solenv/bin/concat-deps.c                |   75 +++++++++++++++++++++++++-------
 solenv/gbuild/TargetLocations.mk        |    1 
 solenv/gbuild/platform/IOS_ARM_GCC.mk   |    1 
 solenv/gbuild/platform/WNT_INTEL_GCC.mk |    1 
 solenv/gbuild/platform/macosx.mk        |    1 
 solenv/gbuild/platform/solaris.mk       |    1 
 solenv/gbuild/platform/unxgcc.mk        |    1 
 10 files changed, 113 insertions(+), 34 deletions(-)

New commits:
commit 1f62a036155b7559703c08fcbc8204498ed7343c
Author: Michael Stahl <mstahl at redhat.com>
Date:   Mon Oct 29 23:30:04 2012 +0100

    gbuild: remove .a file before AR invocations:
    
    Solves 2 problems:
    1. it can happen that AR decides not to write to the .a file at all,
       because no input file is newer than the archive content; then the
       timestamp of the .a file does not get updated
    2. if an object file is removed from the makefile the .a file would
       still contain it after an incremental build
    
    Change-Id: I30737c6454dc06c89ccf233e06d430d2ddc5bc33

diff --git a/solenv/gbuild/platform/IOS_ARM_GCC.mk b/solenv/gbuild/platform/IOS_ARM_GCC.mk
index 9f2f54e..5ef325b 100644
--- a/solenv/gbuild/platform/IOS_ARM_GCC.mk
+++ b/solenv/gbuild/platform/IOS_ARM_GCC.mk
@@ -169,6 +169,7 @@ endef
 define gb_LinkTarget__command_staticlink
 $(call gb_Helper_abbreviate_dirs,\
 	mkdir -p $(dir $(1)) && \
+	rm -f $(1) && \
 	$(gb_AR) -rsu $(1) \
 		$(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
 		$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
diff --git a/solenv/gbuild/platform/WNT_INTEL_GCC.mk b/solenv/gbuild/platform/WNT_INTEL_GCC.mk
index ae1e785..c54a710 100644
--- a/solenv/gbuild/platform/WNT_INTEL_GCC.mk
+++ b/solenv/gbuild/platform/WNT_INTEL_GCC.mk
@@ -167,6 +167,7 @@ endef
 define gb_LinkTarget__command_staticlinklibrary
 $(call gb_Helper_abbreviate_dirs,\
 	mkdir -p $(dir $(1)) && \
+	rm -f $(1) && \
 	$(gb_AR) -rsu $(1) \
 		$(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
 		$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
diff --git a/solenv/gbuild/platform/macosx.mk b/solenv/gbuild/platform/macosx.mk
index 59f6c56..f6a75b6 100644
--- a/solenv/gbuild/platform/macosx.mk
+++ b/solenv/gbuild/platform/macosx.mk
@@ -219,6 +219,7 @@ endef
 define gb_LinkTarget__command_staticlink
 $(call gb_Helper_abbreviate_dirs,\
 	mkdir -p $(dir $(1)) && \
+	rm -f $(1) && \
 	$(gb_AR) -rsu $(1) \
 		$(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
 		$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
diff --git a/solenv/gbuild/platform/solaris.mk b/solenv/gbuild/platform/solaris.mk
index 31e8e05..52c7a0f 100644
--- a/solenv/gbuild/platform/solaris.mk
+++ b/solenv/gbuild/platform/solaris.mk
@@ -204,6 +204,7 @@ endef
 define gb_LinkTarget__command_staticlink
 $(call gb_Helper_abbreviate_dirs,\
 	mkdir -p $(dir $(1)) && \
+	rm -f $(1) && \
 	$(gb_AR) -rsu $(1) \
 		$(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
 		$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
diff --git a/solenv/gbuild/platform/unxgcc.mk b/solenv/gbuild/platform/unxgcc.mk
index 843ec18..87e57a8 100644
--- a/solenv/gbuild/platform/unxgcc.mk
+++ b/solenv/gbuild/platform/unxgcc.mk
@@ -209,6 +209,7 @@ endef
 define gb_LinkTarget__command_staticlink
 $(call gb_Helper_abbreviate_dirs,\
 	mkdir -p $(dir $(1)) && \
+	rm -f $(1) && \
 	$(gb_AR) -rsu $(1) \
 		$(foreach object,$(COBJECTS),$(call gb_CObject_get_target,$(object))) \
 		$(foreach object,$(CXXOBJECTS),$(call gb_CxxObject_get_target,$(object))) \
commit 3f0f07c748375ec9165ea3a3d1751f84d3528972
Author: Michael Stahl <mstahl at redhat.com>
Date:   Mon Oct 29 23:25:46 2012 +0100

    gbuild: solve the UnpackedTarball header problem in concat-deps:
    
    Mangle all included files in the UnpackedTarball directory in
    the generated dependency files to point to the target of the
    UnpackedTarball instead.  This will cause all files that include them to
    be rebuilt on every unpack, which is sound and much easier to maintain
    than manually enumerating all internal header files somewhere.
    
    Change-Id: Iaaa9b27450549d26b40d32ae0f740c2d5ef0edc5

diff --git a/solenv/bin/concat-deps.c b/solenv/bin/concat-deps.c
index 50e9a98..6db6e71 100644
--- a/solenv/bin/concat-deps.c
+++ b/solenv/bin/concat-deps.c
@@ -714,7 +714,9 @@ static inline void eat_space(char ** token)
  * Prune LibreOffice specific duplicate dependencies to improve
  * gnumake startup time, and shrink the disk-space footprint.
  */
-static inline int elide_dependency(const char* key, int key_len, int *boost_count)
+static inline int
+elide_dependency(const char* key, int key_len,
+        int *boost_count, const char **unpacked_end)
 {
 #if 0
     {
@@ -732,24 +734,48 @@ static inline int elide_dependency(const char* key, int key_len, int *boost_coun
         return 1;
 
     /* boost brings a plague of header files */
-    if (internal_boost)
+    int i;
+    int boost = 0;
+    int unpacked = 0;
+    /* walk down path elements */
+    for (i = 0; i < key_len - 1; i++)
     {
-        int i;
-        int hit = 0;
-        /* walk down path elements */
-        for (i = 0; i < key_len - 1; i++)
+        if (key[i] == '/')
         {
-            if (key[i] == '/')
+            if (internal_boost)
             {
-                if (!strncmp(key + i + 1, "solver/", 7))
-                    hit++;
-                if (hit > 0 && !strncmp(key + i + 1, "inc/external/boost/", 19))
+                if (0 == boost)
+                {
+                    if (!strncmp(key + i + 1, "solver/", 7))
+                    {
+                        boost++;
+                        continue;
+                    }
+                }
+                else if (!strncmp(key + i + 1, "inc/external/boost/", 19))
                 {
                     if (boost_count)
                         (*boost_count)++;
                     return 1;
                 }
             }
+            if (0 == unpacked)
+            {
+                if (!strncmp(key + i + 1, "workdir/", 8))
+                {
+                    unpacked = 1;
+                    continue;
+                }
+            }
+            else
+            {
+                if (!strncmp(key + i + 1, "UnpackedTarball/", 16))
+                {
+                    if (unpacked_end)
+                        *unpacked_end = strchr(key + i + 17, '/');
+                    return 1;
+                }
+            }
         }
     }
 
@@ -766,12 +792,24 @@ static void emit_single_boost_header(void)
     fprintf(stdout, "%s" BOOST_HEADER " ", out_dir);
 }
 
+static void emit_unpacked_target(char const*const token, char const*const end)
+{
+    /* is there some obvious way to printf N characters that i'm missing? */
+    size_t size = end - token + 1;
+    char tmp[size];
+    snprintf(tmp, size, "%s", token);
+    fputs(tmp, stdout);
+    fputs(".done ", stdout);
+}
+
 /* prefix paths to absolute */
 static inline void print_fullpaths(char* line)
 {
     char* token;
     char* end;
     int boost_count = 0;
+    const char * unpacked_end = 0; /* end of UnpackedTarget match (if any) */
+    int first = 1; /* for UnpackedTarget the first (target) is GenCxxObject! */
 
     token = line;
     eat_space(&token);
@@ -782,9 +820,15 @@ static inline void print_fullpaths(char* line)
             ++end;
         }
         int token_len = end - token;
-        if(elide_dependency(token, token_len, &boost_count))
+        if (!first &&
+            elide_dependency(token, token_len, &boost_count, &unpacked_end))
         {
-            if (boost_count == 1)
+            if (unpacked_end)
+            {
+                emit_unpacked_target(token, unpacked_end);
+                unpacked_end = 0;
+            }
+            else if (boost_count == 1)
                 emit_single_boost_header();
             else
             {
@@ -808,6 +852,7 @@ static inline void print_fullpaths(char* line)
                 abort();
             fputc(' ', stdout);
         }
+        first = 0;
         token = end;
         eat_space(&token);
     }
@@ -880,8 +925,8 @@ off_t size;
                              * duplicate out
                              */
                             int key_len = eat_space_at_end(cursor_out) - base;
-                            if(!elide_dependency(base,key_len + 1, NULL) &&
-                               hash_store(dep_hash, base, key_len))
+                            if (!elide_dependency(base,key_len + 1, NULL, NULL)
+                                && hash_store(dep_hash, base, key_len))
                             {
                                 /* DO NOT modify base after it has been added
                                    as key by hash_store */
@@ -926,7 +971,7 @@ off_t size;
             if(last_ns == ':')
             {
                 int key_len = eat_space_at_end(cursor_out) - base;
-                if (!elide_dependency(base,key_len + 1, NULL) &&
+                if (!elide_dependency(base,key_len + 1, NULL, NULL) &&
                     hash_store(dep_hash, base, key_len))
                 {
                     puts(base);
diff --git a/solenv/gbuild/TargetLocations.mk b/solenv/gbuild/TargetLocations.mk
index 36ff8ed..85fd678 100644
--- a/solenv/gbuild/TargetLocations.mk
+++ b/solenv/gbuild/TargetLocations.mk
@@ -180,6 +180,7 @@ gb_UnoApiPartTarget_get_target = $(WORKDIR)/UnoApiPartTarget/$(1)
 gb_UnpackedTarball_get_dir = $(WORKDIR)/UnpackedTarball/$(1)
 gb_UnpackedTarball_get_pristine_dir = $(WORKDIR)/UnpackedTarball/$(1).org
 gb_UnpackedTarball_get_final_target = $(WORKDIR)/UnpackedTarball/$(1).update
+# NOTE: the .done target is hardcoded in solenv/bin/concat-deps.c !
 gb_UnpackedTarball_get_target = $(WORKDIR)/UnpackedTarball/$(1).done
 gb_UnpackedTarball_get_preparation_target = $(WORKDIR)/UnpackedTarball/$(1).prepare
 gb_UnpackedTarget_get_target = $(WORKDIR)/UnpackedTarget/$(1)
commit 45c7a7f5dc3057b283513e4516b7b59f21e46fde
Author: Michael Stahl <mstahl at redhat.com>
Date:   Mon Oct 29 21:32:02 2012 +0100

    libwps: need to depend on unpacked private headers:
    
    The generated cxx files that are built in the StaticLibrary depend on
    the header from the UnpackedTarball.  When the tarball gets unpacked
    again in an incremental build, the headers may have changed and the cxx
    files that include them must be rebuilt.  This works for those headers
    that are added to a Package, because they are make targets, but not for
    those that are not delivered and just sit in the unpacked directory.
    These need to be manually enumerated in order to turn them into make
    targets, which is not entirely satisfying.
    
    A little grepping in the .d file for the StaticLibrary can help:
    
     grep "UnpackedTarball.*\.h" workdir/*/Dep/LinkTarget/StaticLibrary/libwpslib.a.d | sed 's,:* \+[^ ]*$,,' | sed 's,^.*UnpackedTarball/[a-zA-Z0-9]*/,,' | sort | uniq
    
    Change-Id: I9fd4ee0cd6646c834118cf172e39a24d2833c439

diff --git a/libwps/UnpackedTarball_wps.mk b/libwps/UnpackedTarball_wps.mk
index 0a9521c..6a2bf3a 100644
--- a/libwps/UnpackedTarball_wps.mk
+++ b/libwps/UnpackedTarball_wps.mk
@@ -20,6 +20,27 @@ $(eval $(call gb_UnpackedTarball_add_patches,wps,\
 
 $(eval $(call gb_UnpackedTarball_mark_output_files,wps,\
 	$(addsuffix .cpp,$(libwps_SOURCEFILES)) \
+	src/lib/libwps_internal.h \
+	src/lib/libwps_tools_win.h \
+	src/lib/WPS4Graph.h \
+	src/lib/WPS4.h \
+	src/lib/WPS4Text.h \
+	src/lib/WPS8.h \
+	src/lib/WPSCell.h \
+	src/lib/WPSContentListener.h \
+	src/lib/WPSDebug.h \
+	src/lib/WPSEntry.h \
+	src/lib/WPS.h \
+	src/lib/WPSHeader.h \
+	src/lib/WPSList.h \
+	src/lib/WPSOLEParser.h \
+	src/lib/WPSOLEStream.h \
+	src/lib/WPSPageSpan.h \
+	src/lib/WPSParagraph.h \
+	src/lib/WPSParser.h \
+	src/lib/WPSPosition.h \
+	src/lib/WPSSubDocument.h \
+	src/lib/WPSTable.h \
 ))
 
 # vim: set noet sw=4 ts=4:
commit 7963c0952823affb8045817cba677ed7b6e4051c
Author: Michael Stahl <mstahl at redhat.com>
Date:   Mon Oct 29 16:29:19 2012 +0100

    libwps: ensure that generated cxx files get built after unpack
    
    Change-Id: I75c754a9b1cb59936f1ea6acac92ad47ac417f27

diff --git a/libwps/Module_libwps.mk b/libwps/Module_libwps.mk
index a903fa9..c84dcbe 100644
--- a/libwps/Module_libwps.mk
+++ b/libwps/Module_libwps.mk
@@ -11,6 +11,27 @@ $(eval $(call gb_Module_Module,libwps))
 
 ifeq ($(SYSTEM_LIBWPS),NO)
 
+libwps_SOURCEFILES := \
+	src/lib/libwps_internal \
+	src/lib/libwps_tools_win \
+	src/lib/WPS4 \
+	src/lib/WPS4Graph \
+	src/lib/WPS4Text \
+	src/lib/WPS8 \
+	src/lib/WPSCell \
+	src/lib/WPSContentListener \
+	src/lib/WPSDebug \
+	src/lib/WPSDocument \
+	src/lib/WPSHeader \
+	src/lib/WPSList \
+	src/lib/WPSOLEParser \
+	src/lib/WPSOLEStream \
+	src/lib/WPSPageSpan \
+	src/lib/WPSParagraph \
+	src/lib/WPSParser \
+	src/lib/WPSSubDocument \
+	src/lib/WPSTable \
+
 $(eval $(call gb_Module_add_targets,libwps,\
 	ExternalPackage_libwps \
 	StaticLibrary_wps \
diff --git a/libwps/StaticLibrary_wps.mk b/libwps/StaticLibrary_wps.mk
index b18b583..51d89b0 100644
--- a/libwps/StaticLibrary_wps.mk
+++ b/libwps/StaticLibrary_wps.mk
@@ -22,25 +22,7 @@ $(eval $(call gb_StaticLibrary_use_externals,wpslib,\
 $(eval $(call gb_StaticLibrary_set_generated_cxx_suffix,wpslib,cpp))
 
 $(eval $(call gb_StaticLibrary_add_generated_exception_objects,wpslib,\
-	UnpackedTarball/wps/src/lib/libwps_internal \
-	UnpackedTarball/wps/src/lib/libwps_tools_win \
-	UnpackedTarball/wps/src/lib/WPS4 \
-	UnpackedTarball/wps/src/lib/WPS4Graph \
-	UnpackedTarball/wps/src/lib/WPS4Text \
-	UnpackedTarball/wps/src/lib/WPS8 \
-	UnpackedTarball/wps/src/lib/WPSCell \
-	UnpackedTarball/wps/src/lib/WPSContentListener \
-	UnpackedTarball/wps/src/lib/WPSDebug \
-	UnpackedTarball/wps/src/lib/WPSDocument \
-	UnpackedTarball/wps/src/lib/WPSHeader \
-	UnpackedTarball/wps/src/lib/WPSList \
-	UnpackedTarball/wps/src/lib/WPSOLEParser \
-	UnpackedTarball/wps/src/lib/WPSOLEStream \
-	UnpackedTarball/wps/src/lib/WPSPageSpan \
-	UnpackedTarball/wps/src/lib/WPSParagraph \
-	UnpackedTarball/wps/src/lib/WPSParser \
-	UnpackedTarball/wps/src/lib/WPSSubDocument \
-	UnpackedTarball/wps/src/lib/WPSTable \
+	$(addprefix UnpackedTarball/wps/,$(libwps_SOURCEFILES)) \
 ))
 
 # vim: set noet sw=4 ts=4:
diff --git a/libwps/UnpackedTarball_wps.mk b/libwps/UnpackedTarball_wps.mk
index e573928..0a9521c 100644
--- a/libwps/UnpackedTarball_wps.mk
+++ b/libwps/UnpackedTarball_wps.mk
@@ -18,4 +18,8 @@ $(eval $(call gb_UnpackedTarball_add_patches,wps,\
     libwps/libwps.gcc.warnings.patch \
 ))
 
+$(eval $(call gb_UnpackedTarball_mark_output_files,wps,\
+	$(addsuffix .cpp,$(libwps_SOURCEFILES)) \
+))
+
 # vim: set noet sw=4 ts=4:


More information about the Libreoffice-commits mailing list