Bug#889565: libical3: please make the build reproducible

2018-02-05 Thread Chris Lamb
Hi,

> libical3: please make the build reproducible

Updated patch attached.


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-
--- a/debian/patches/0002-reproducible-build.patch  1970-01-01 
01:00:00.0 +0100
--- b/debian/patches/0002-reproducible-build.patch  2018-02-04 
14:23:38.286140899 +
@@ -0,0 +1,63 @@
+Description: Make the build reproducible
+Author: Chris Lamb 
+Last-Update: 2018-02-04
+
+--- libical3-3.0.1.orig/src/libical-glib/tools/generator.c
 libical3-3.0.1/src/libical-glib/tools/generator.c
+@@ -1096,6 +1096,7 @@ void generate_forward_declarations_heade
+ gchar *typeName;
+ gchar *typeKind;
+ GList *link;
++GList *typeNamesList = NULL;
+ GHashTable *typeNames;
+ GHashTableIter iter_table;
+ gpointer key;
+@@ -1156,13 +1157,18 @@ void generate_forward_declarations_heade
+ if (g_strcmp0(buffer, "forward_declarations") == 0) {
+ g_hash_table_iter_init(_table, typeNames);
+ while (g_hash_table_iter_next(_table, , )) {
+-typeName = (gchar *)key;
++typeNamesList = g_list_prepend(typeNamesList, 
g_strdup(key));
++}
++typeNamesList = g_list_sort(typeNamesList, 
(GCompareFunc)g_strcmp0);
++for (link = g_list_first(typeNamesList); link != NULL; link = 
g_list_next(link)) {
++typeName = link->data;
+ write_str(out, "typedef struct _");
+ write_str(out, typeName);
+ write_str(out, " ");
+ write_str(out, typeName);
+ write_str(out, ";\n");
+ }
++g_list_free_full(typeNamesList, g_free);
+ } else if (g_strcmp0(buffer, "upperSnake") == 0) {
+ write_str(out, "I_CAL_FORWARD_DECLARATIONS");
+ } else {
+@@ -2156,6 +2162,8 @@ static gint generate_library(const gchar
+ gchar *buffer;
+ GList *structures;
+ GList *iter_list;
++GList *filenames = NULL;
++GList *iter_filenames;
+ GDir *dir;
+ GError *local_error = NULL;
+ gint res = 0;
+@@ -2186,6 +2194,11 @@ static gint generate_library(const gchar
+ 
+ /* Parse the all the XML files into the Structure */
+ while (filename = g_dir_read_name(dir), filename) {
++filenames = g_list_prepend(filenames, g_strdup(filename));
++}
++filenames = g_list_sort(filenames, (GCompareFunc)g_strcmp0);
++for (iter_filenames = g_list_first(filenames); iter_filenames != NULL; 
iter_filenames = g_list_next(iter_filenames)) {
++filename = iter_filenames->data;
+ gint len = (gint)strlen(filename);
+ 
+ if (len <= 4 || g_ascii_strncasecmp(filename + len - 4, ".xml", 4) != 
0)
+@@ -2280,6 +2293,7 @@ static gint generate_library(const gchar
+ g_hash_table_destroy(type2structure);
+ g_hash_table_destroy(defaultValues);
+ g_list_free_full(structures, (GDestroyNotify)structure_free);
++g_list_free_full(filenames, g_free);
+ g_free(buffer);
+ 
+ return res;
--- a/debian/patches/series 2018-02-04 13:36:45.872268239 +
--- b/debian/patches/series 2018-02-04 13:57:47.788970001 +
@@ -1 +1,2 @@
 0001-reproducible-build.patch
+0002-reproducible-build.patch


Bug#889565: libical3: please make the build reproducible

2018-02-04 Thread Chris Lamb
forwarded 889565 https://github.com/libical/libical/pull/324
thanks

I've forwarded this upstream here:

  https://github.com/libical/libical/pull/324


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-



Bug#889565: libical3: please make the build reproducible

2018-02-04 Thread Chris Lamb
Source: libical3
Version: 3.0.1-5
Severity: wishlist
Tags: patch
User: reproducible-bui...@lists.alioth.debian.org
Usertags: randomness fileordering
X-Debbugs-Cc: reproducible-b...@lists.alioth.debian.org

Hi,

Whilst working on the Reproducible Builds effort [0], we noticed
that libical3 could not be built reproducibly.

Patch attached.

 [0] https://reproducible-builds.org/


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-
--- a/debian/patches/0002-reproducible-build.patch  1970-01-01 
01:00:00.0 +0100
--- b/debian/patches/0002-reproducible-build.patch  2018-02-04 
14:23:38.286140899 +
@@ -0,0 +1,63 @@
+Description: Make the build reproducible
+Author: Chris Lamb 
+Last-Update: 2018-02-04
+
+--- libical3-3.0.1.orig/src/libical-glib/tools/generator.c
 libical3-3.0.1/src/libical-glib/tools/generator.c
+@@ -1096,6 +1096,7 @@ void generate_forward_declarations_heade
+ gchar *typeName;
+ gchar *typeKind;
+ GList *link;
++GList *typeNamesList = NULL;
+ GHashTable *typeNames;
+ GHashTableIter iter_table;
+ gpointer key;
+@@ -1156,13 +1157,18 @@ void generate_forward_declarations_heade
+ if (g_strcmp0(buffer, "forward_declarations") == 0) {
+ g_hash_table_iter_init(_table, typeNames);
+ while (g_hash_table_iter_next(_table, , )) {
+-typeName = (gchar *)key;
++typeNamesList = g_list_prepend(typeNamesList, 
g_strdup(key));
++}
++typeNamesList = g_list_sort(typeNamesList, 
(GCompareFunc)g_strcmp0);
++for (link = g_list_first(typeNamesList); link != NULL; link = 
g_list_next(link)) {
++typeName = link->data;
+ write_str(out, "typedef struct _");
+ write_str(out, typeName);
+ write_str(out, " ");
+ write_str(out, typeName);
+ write_str(out, ";\n");
+ }
++g_list_free_full(typeNamesList, g_free);
+ } else if (g_strcmp0(buffer, "upperSnake") == 0) {
+ write_str(out, "I_CAL_FORWARD_DECLARATIONS");
+ } else {
+@@ -2156,6 +2162,8 @@ static gint generate_library(const gchar
+ gchar *buffer;
+ GList *structures;
+ GList *iter_list;
++GList *filenames;
++GList *iter_filenames;
+ GDir *dir;
+ GError *local_error = NULL;
+ gint res = 0;
+@@ -2186,6 +2194,11 @@ static gint generate_library(const gchar
+ 
+ /* Parse the all the XML files into the Structure */
+ while (filename = g_dir_read_name(dir), filename) {
++filenames = g_list_prepend(filenames, g_strdup(filename));
++}
++filenames = g_list_sort(filenames, (GCompareFunc)g_strcmp0);
++for (iter_filenames = g_list_first(filenames); iter_filenames != NULL; 
iter_filenames = g_list_next(iter_filenames)) {
++filename = iter_filenames->data;
+ gint len = (gint)strlen(filename);
+ 
+ if (len <= 4 || g_ascii_strncasecmp(filename + len - 4, ".xml", 4) != 
0)
+@@ -2280,6 +2293,7 @@ static gint generate_library(const gchar
+ g_hash_table_destroy(type2structure);
+ g_hash_table_destroy(defaultValues);
+ g_list_free_full(structures, (GDestroyNotify)structure_free);
++g_list_free_full(filenames, g_free);
+ g_free(buffer);
+ 
+ return res;
--- a/debian/patches/series 2018-02-04 13:36:45.872268239 +
--- b/debian/patches/series 2018-02-04 13:57:47.788970001 +
@@ -1 +1,2 @@
 0001-reproducible-build.patch
+0002-reproducible-build.patch