Group :: Gráficos
RPM: blender
Main Changelog Spec Patches Sources Download Gear Bugs e FR Repocop
Patch: blender-2.93.0-suse-reproducible.patch
Download
Download
commit 2115054bb8a41bb7ddffce32e396d9ffced300b1
Author: Bernhard M. Wiedemann <bwiedemann@suse.de>
Date: Sat Sep 7 06:19:50 2019 +0200
Sort list of .dat files
Sort list of .dat files
in .png generation to make builds reproducible.
See https://reproducible-builds.org/ for why this matters.
Note: scandir is only available on POSIX-compliant platforms (Linux,
BSD, MacOSX, cygwin) - so others would need some compat layer.
Reviewers: mont29
Differential Revision: https://developer.blender.org/D5858
Index: blender-2.91.0/source/blender/datatoc/datatoc_icon.c
===================================================================
--- blender-2.91.0.orig/source/blender/datatoc/datatoc_icon.c
+++ blender-2.91.0/source/blender/datatoc/datatoc_icon.c
@@ -308,7 +308,8 @@ static bool icon_merge(const char *file_
static bool icondir_to_png(const char *path_src, const char *file_dst)
{
/* Takes a path full of 'dat' files and writes out */
- DIR *dir;
+ struct dirent **namelist;
+ int dirn;
const struct dirent *fname;
char filepath[1024];
char *filename;
@@ -319,8 +320,8 @@ static bool icondir_to_png(const char *p
unsigned int canvas_w = 0, canvas_h = 0;
errno = 0;
- dir = opendir(path_src);
- if (dir == NULL) {
+ dirn = scandir(path_src, &namelist, NULL, alphasort);
+ if (dirn == -1) {
printf(
"%s: failed to dir '%s', (%s)\n", __func__, path_src, errno ? strerror(errno) : "unknown");
return false;
@@ -330,7 +331,8 @@ static bool icondir_to_png(const char *p
path_str_len = path_ensure_slash(filepath);
filename = &filepath[path_str_len];
- while ((fname = readdir(dir)) != NULL) {
+ while (dirn--) {
+ fname = namelist[dirn];
if (path_test_extension(fname->d_name, ".dat")) {
strcpy(filename, fname->d_name);
@@ -342,9 +344,10 @@ static bool icondir_to_png(const char *p
fail++;
}
}
+ free(fname);
}
icon_merge_context_free(&context);
- closedir(dir);
+ free(namelist);
if (found == 0) {
printf("%s: dir '%s' has no icons\n", __func__, path_src);
Index: blender-2.91.0/source/blender/datatoc/datatoc_icon.py
===================================================================
--- blender-2.91.0.orig/source/blender/datatoc/datatoc_icon.py
+++ blender-2.91.0/source/blender/datatoc/datatoc_icon.py
@@ -113,7 +113,7 @@ def icondir_to_png(path_src, file_dst):
import os
import array
- files = [os.path.join(path_src, f) for f in os.listdir(path_src) if f.endswith(".dat")]
+ files = [os.path.join(path_src, f) for f in sorted(os.listdir(path_src)) if f.endswith(".dat")]
# First check if we need to bother.
if os.path.exists(file_dst):