From c0bb7178be39fc5424c9f48e9c9f2d10d39b142b Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Wed, 23 Nov 2016 00:14:29 -0500 Subject: gnu: libtiff: Update to 4.0.7. * gnu/packages/image.scm (libtiff): Update to 4.0.7. [source]: Update URL and remove obsolete patches. [home-page]: Update URL. (libtiff-4.0.7): Delete variable. * gnu/packages/patches/libtiff-CVE-2015-8665+CVE-2015-8683.patch, gnu/packages/patches/libtiff-CVE-2016-3623.patch, gnu/packages/patches/libtiff-CVE-2016-3945.patch, gnu/packages/patches/libtiff-CVE-2016-3990.patch, gnu/packages/patches/libtiff-CVE-2016-3991.patch, gnu/packages/patches/libtiff-CVE-2016-5314.patch, gnu/packages/patches/libtiff-CVE-2016-5321.patch, gnu/packages/patches/libtiff-CVE-2016-5323.patch, gnu/packages/patches/libtiff-oob-accesses-in-decode.patch, gnu/packages/patches/libtiff-oob-write-in-nextdecode.patch: Delete files. * gnu/local.mk (dist_patch_DATA): Remove them. --- gnu/local.mk | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 49137277f..52e074230 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -664,16 +664,6 @@ dist_patch_DATA = \ %D%/packages/patches/libssh-0.6.5-CVE-2016-0739.patch \ %D%/packages/patches/libtar-CVE-2013-4420.patch \ %D%/packages/patches/libtheora-config-guess.patch \ - %D%/packages/patches/libtiff-CVE-2015-8665+CVE-2015-8683.patch \ - %D%/packages/patches/libtiff-CVE-2016-3623.patch \ - %D%/packages/patches/libtiff-CVE-2016-3945.patch \ - %D%/packages/patches/libtiff-CVE-2016-3990.patch \ - %D%/packages/patches/libtiff-CVE-2016-3991.patch \ - %D%/packages/patches/libtiff-CVE-2016-5314.patch \ - %D%/packages/patches/libtiff-CVE-2016-5321.patch \ - %D%/packages/patches/libtiff-CVE-2016-5323.patch \ - %D%/packages/patches/libtiff-oob-accesses-in-decode.patch \ - %D%/packages/patches/libtiff-oob-write-in-nextdecode.patch \ %D%/packages/patches/libtool-skip-tests2.patch \ %D%/packages/patches/libunwind-CVE-2015-3239.patch \ %D%/packages/patches/libupnp-CVE-2016-6255.patch \ -- cgit v1.3 From f265a3cee55c5fbbd9e05ec351ae562274b55df6 Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Mon, 28 Nov 2016 21:09:44 -0500 Subject: gnu: libarchive: Update to 3.2.2. * gnu/packages/backup.scm (libarchive): Update to 3.2.2. [source]: Remove obsolete patches. * gnu/packages/patches/libarchive-7zip-heap-overflow.patch, gnu/packages/patches/libarchive-fix-filesystem-attacks.patch, gnu/packages/patches/libarchive-fix-symlink-check.patch, gnu/packages/patches/libarchive-safe_fprintf-buffer-overflow.patch: Delete files. * gnu/local.mk (dist_patch_DATA): Remove them. --- gnu/local.mk | 4 - gnu/packages/backup.scm | 9 +- .../patches/libarchive-7zip-heap-overflow.patch | 77 ---- .../libarchive-fix-filesystem-attacks.patch | 445 --------------------- .../patches/libarchive-fix-symlink-check.patch | 60 --- .../libarchive-safe_fprintf-buffer-overflow.patch | 44 -- 6 files changed, 2 insertions(+), 637 deletions(-) delete mode 100644 gnu/packages/patches/libarchive-7zip-heap-overflow.patch delete mode 100644 gnu/packages/patches/libarchive-fix-filesystem-attacks.patch delete mode 100644 gnu/packages/patches/libarchive-fix-symlink-check.patch delete mode 100644 gnu/packages/patches/libarchive-safe_fprintf-buffer-overflow.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index ea5100141..ac21c9e07 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -647,10 +647,6 @@ dist_patch_DATA = \ %D%/packages/patches/liba52-link-with-libm.patch \ %D%/packages/patches/liba52-set-soname.patch \ %D%/packages/patches/liba52-use-mtune-not-mcpu.patch \ - %D%/packages/patches/libarchive-7zip-heap-overflow.patch \ - %D%/packages/patches/libarchive-fix-symlink-check.patch \ - %D%/packages/patches/libarchive-fix-filesystem-attacks.patch \ - %D%/packages/patches/libarchive-safe_fprintf-buffer-overflow.patch \ %D%/packages/patches/libbonobo-activation-test-race.patch \ %D%/packages/patches/libcanberra-sound-theme-freedesktop.patch \ %D%/packages/patches/libcmis-fix-test-onedrive.patch \ diff --git a/gnu/packages/backup.scm b/gnu/packages/backup.scm index 203ff4c9d..d12776998 100644 --- a/gnu/packages/backup.scm +++ b/gnu/packages/backup.scm @@ -172,20 +172,15 @@ backups (called chunks) to allow easy burning to CD/DVD.") (define-public libarchive (package (name "libarchive") - (version "3.2.1") + (version "3.2.2") (source (origin (method url-fetch) (uri (string-append "http://libarchive.org/downloads/libarchive-" version ".tar.gz")) - (patches (search-patches - "libarchive-7zip-heap-overflow.patch" - "libarchive-fix-symlink-check.patch" - "libarchive-fix-filesystem-attacks.patch" - "libarchive-safe_fprintf-buffer-overflow.patch")) (sha256 (base32 - "1lngng84k1kkljl74q0cdqc3s82vn2kimfm02dgm4d6m7x71mvkj")))) + "03q6y428rg723c9fj1vidzjw46w1vf8z0h95lkvz1l9jw571j739")))) (build-system gnu-build-system) ;; TODO: Add -L/path/to/nettle in libarchive.pc. (inputs diff --git a/gnu/packages/patches/libarchive-7zip-heap-overflow.patch b/gnu/packages/patches/libarchive-7zip-heap-overflow.patch deleted file mode 100644 index bef628f0a..000000000 --- a/gnu/packages/patches/libarchive-7zip-heap-overflow.patch +++ /dev/null @@ -1,77 +0,0 @@ -Fix buffer overflow reading 7Zip files: - -https://github.com/libarchive/libarchive/issues/761 - -Patch copied from upstream repository: - -https://github.com/libarchive/libarchive/commit/7f17c791dcfd8c0416e2cd2485b19410e47ef126 - -From 7f17c791dcfd8c0416e2cd2485b19410e47ef126 Mon Sep 17 00:00:00 2001 -From: Tim Kientzle -Date: Sun, 18 Sep 2016 18:14:58 -0700 -Subject: [PATCH] Issue 761: Heap overflow reading corrupted 7Zip files - -The sample file that demonstrated this had multiple 'EmptyStream' -attributes. The first one ended up being used to calculate -certain statistics, then was overwritten by the second which -was incompatible with those statistics. - -The fix here is to reject any header with multiple EmptyStream -attributes. While here, also reject headers with multiple -EmptyFile, AntiFile, Name, or Attributes markers. ---- - libarchive/archive_read_support_format_7zip.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/libarchive/archive_read_support_format_7zip.c b/libarchive/archive_read_support_format_7zip.c -index 1dfe52b..c0a536c 100644 ---- a/libarchive/archive_read_support_format_7zip.c -+++ b/libarchive/archive_read_support_format_7zip.c -@@ -2431,6 +2431,8 @@ read_Header(struct archive_read *a, struct _7z_header_info *h, - - switch (type) { - case kEmptyStream: -+ if (h->emptyStreamBools != NULL) -+ return (-1); - h->emptyStreamBools = calloc((size_t)zip->numFiles, - sizeof(*h->emptyStreamBools)); - if (h->emptyStreamBools == NULL) -@@ -2451,6 +2453,8 @@ read_Header(struct archive_read *a, struct _7z_header_info *h, - return (-1); - break; - } -+ if (h->emptyFileBools != NULL) -+ return (-1); - h->emptyFileBools = calloc(empty_streams, - sizeof(*h->emptyFileBools)); - if (h->emptyFileBools == NULL) -@@ -2465,6 +2469,8 @@ read_Header(struct archive_read *a, struct _7z_header_info *h, - return (-1); - break; - } -+ if (h->antiBools != NULL) -+ return (-1); - h->antiBools = calloc(empty_streams, - sizeof(*h->antiBools)); - if (h->antiBools == NULL) -@@ -2491,6 +2497,8 @@ read_Header(struct archive_read *a, struct _7z_header_info *h, - if ((ll & 1) || ll < zip->numFiles * 4) - return (-1); - -+ if (zip->entry_names != NULL) -+ return (-1); - zip->entry_names = malloc(ll); - if (zip->entry_names == NULL) - return (-1); -@@ -2543,6 +2551,8 @@ read_Header(struct archive_read *a, struct _7z_header_info *h, - if ((p = header_bytes(a, 2)) == NULL) - return (-1); - allAreDefined = *p; -+ if (h->attrBools != NULL) -+ return (-1); - h->attrBools = calloc((size_t)zip->numFiles, - sizeof(*h->attrBools)); - if (h->attrBools == NULL) --- -2.10.0 - diff --git a/gnu/packages/patches/libarchive-fix-filesystem-attacks.patch b/gnu/packages/patches/libarchive-fix-filesystem-attacks.patch deleted file mode 100644 index bce63d5e4..000000000 --- a/gnu/packages/patches/libarchive-fix-filesystem-attacks.patch +++ /dev/null @@ -1,445 +0,0 @@ -This patch fixes two bugs that allow attackers to overwrite or change -the permissions of arbitrary files: - -https://github.com/libarchive/libarchive/issues/745 -https://github.com/libarchive/libarchive/issues/746 - -Patch copied from upstream repository: - -https://github.com/libarchive/libarchive/commit/dfd6b54ce33960e420fb206d8872fb759b577ad9 - -From dfd6b54ce33960e420fb206d8872fb759b577ad9 Mon Sep 17 00:00:00 2001 -From: Tim Kientzle -Date: Sun, 11 Sep 2016 13:21:57 -0700 -Subject: [PATCH] Fixes for Issue #745 and Issue #746 from Doran Moppert. - ---- - libarchive/archive_write_disk_posix.c | 294 ++++++++++++++++++++++++++-------- - 1 file changed, 227 insertions(+), 67 deletions(-) - -diff --git a/libarchive/archive_write_disk_posix.c b/libarchive/archive_write_disk_posix.c -index 8f0421e..abe1a86 100644 ---- a/libarchive/archive_write_disk_posix.c -+++ b/libarchive/archive_write_disk_posix.c -@@ -326,12 +326,14 @@ struct archive_write_disk { - - #define HFS_BLOCKS(s) ((s) >> 12) - -+static int check_symlinks_fsobj(char *path, int *error_number, struct archive_string *error_string, int flags); - static int check_symlinks(struct archive_write_disk *); - static int create_filesystem_object(struct archive_write_disk *); - static struct fixup_entry *current_fixup(struct archive_write_disk *, const char *pathname); - #if defined(HAVE_FCHDIR) && defined(PATH_MAX) - static void edit_deep_directories(struct archive_write_disk *ad); - #endif -+static int cleanup_pathname_fsobj(char *path, int *error_number, struct archive_string *error_string, int flags); - static int cleanup_pathname(struct archive_write_disk *); - static int create_dir(struct archive_write_disk *, char *); - static int create_parent_dir(struct archive_write_disk *, char *); -@@ -2014,6 +2016,10 @@ create_filesystem_object(struct archive_write_disk *a) - const char *linkname; - mode_t final_mode, mode; - int r; -+ /* these for check_symlinks_fsobj */ -+ char *linkname_copy; /* non-const copy of linkname */ -+ struct archive_string error_string; -+ int error_number; - - /* We identify hard/symlinks according to the link names. */ - /* Since link(2) and symlink(2) don't handle modes, we're done here. */ -@@ -2022,6 +2028,27 @@ create_filesystem_object(struct archive_write_disk *a) - #if !HAVE_LINK - return (EPERM); - #else -+ archive_string_init(&error_string); -+ linkname_copy = strdup(linkname); -+ if (linkname_copy == NULL) { -+ return (EPERM); -+ } -+ /* TODO: consider using the cleaned-up path as the link target? */ -+ r = cleanup_pathname_fsobj(linkname_copy, &error_number, &error_string, a->flags); -+ if (r != ARCHIVE_OK) { -+ archive_set_error(&a->archive, error_number, "%s", error_string.s); -+ free(linkname_copy); -+ /* EPERM is more appropriate than error_number for our callers */ -+ return (EPERM); -+ } -+ r = check_symlinks_fsobj(linkname_copy, &error_number, &error_string, a->flags); -+ if (r != ARCHIVE_OK) { -+ archive_set_error(&a->archive, error_number, "%s", error_string.s); -+ free(linkname_copy); -+ /* EPERM is more appropriate than error_number for our callers */ -+ return (EPERM); -+ } -+ free(linkname_copy); - r = link(linkname, a->name) ? errno : 0; - /* - * New cpio and pax formats allow hardlink entries -@@ -2362,115 +2389,228 @@ current_fixup(struct archive_write_disk *a, const char *pathname) - * recent paths. - */ - /* TODO: Extend this to support symlinks on Windows Vista and later. */ -+ -+/* -+ * Checks the given path to see if any elements along it are symlinks. Returns -+ * ARCHIVE_OK if there are none, otherwise puts an error in errmsg. -+ */ - static int --check_symlinks(struct archive_write_disk *a) -+check_symlinks_fsobj(char *path, int *error_number, struct archive_string *error_string, int flags) - { - #if !defined(HAVE_LSTAT) - /* Platform doesn't have lstat, so we can't look for symlinks. */ - (void)a; /* UNUSED */ -+ (void)path; /* UNUSED */ -+ (void)error_number; /* UNUSED */ -+ (void)error_string; /* UNUSED */ -+ (void)flags; /* UNUSED */ - return (ARCHIVE_OK); - #else -- char *pn; -+ int res = ARCHIVE_OK; -+ char *tail; -+ char *head; -+ int last; - char c; - int r; - struct stat st; -+ int restore_pwd; -+ -+ /* Nothing to do here if name is empty */ -+ if(path[0] == '\0') -+ return (ARCHIVE_OK); - - /* - * Guard against symlink tricks. Reject any archive entry whose - * destination would be altered by a symlink. -+ * -+ * Walk the filename in chunks separated by '/'. For each segment: -+ * - if it doesn't exist, continue -+ * - if it's symlink, abort or remove it -+ * - if it's a directory and it's not the last chunk, cd into it -+ * As we go: -+ * head points to the current (relative) path -+ * tail points to the temporary \0 terminating the segment we're currently examining -+ * c holds what used to be in *tail -+ * last is 1 if this is the last tail - */ -- /* Whatever we checked last time doesn't need to be re-checked. */ -- pn = a->name; -- if (archive_strlen(&(a->path_safe)) > 0) { -- char *p = a->path_safe.s; -- while ((*pn != '\0') && (*p == *pn)) -- ++p, ++pn; -- } -+ restore_pwd = open(".", O_RDONLY | O_BINARY | O_CLOEXEC); -+ __archive_ensure_cloexec_flag(restore_pwd); -+ if (restore_pwd < 0) -+ return (ARCHIVE_FATAL); -+ head = path; -+ tail = path; -+ last = 0; -+ /* TODO: reintroduce a safe cache here? */ - /* Skip the root directory if the path is absolute. */ -- if(pn == a->name && pn[0] == '/') -- ++pn; -- c = pn[0]; -- /* Keep going until we've checked the entire name. */ -- while (pn[0] != '\0' && (pn[0] != '/' || pn[1] != '\0')) { -+ if(tail == path && tail[0] == '/') -+ ++tail; -+ /* Keep going until we've checked the entire name. -+ * head, tail, path all alias the same string, which is -+ * temporarily zeroed at tail, so be careful restoring the -+ * stashed (c=tail[0]) for error messages. -+ * Exiting the loop with break is okay; continue is not. -+ */ -+ while (!last) { -+ /* Skip the separator we just consumed, plus any adjacent ones */ -+ while (*tail == '/') -+ ++tail; - /* Skip the next path element. */ -- while (*pn != '\0' && *pn != '/') -- ++pn; -- c = pn[0]; -- pn[0] = '\0'; -+ while (*tail != '\0' && *tail != '/') -+ ++tail; -+ /* is this the last path component? */ -+ last = (tail[0] == '\0') || (tail[0] == '/' && tail[1] == '\0'); -+ /* temporarily truncate the string here */ -+ c = tail[0]; -+ tail[0] = '\0'; - /* Check that we haven't hit a symlink. */ -- r = lstat(a->name, &st); -+ r = lstat(head, &st); - if (r != 0) { -+ tail[0] = c; - /* We've hit a dir that doesn't exist; stop now. */ - if (errno == ENOENT) { - break; - } else { -- /* Note: This effectively disables deep directory -+ /* Treat any other error as fatal - best to be paranoid here -+ * Note: This effectively disables deep directory - * support when security checks are enabled. - * Otherwise, very long pathnames that trigger - * an error here could evade the sandbox. - * TODO: We could do better, but it would probably - * require merging the symlink checks with the - * deep-directory editing. */ -- return (ARCHIVE_FAILED); -+ if (error_number) *error_number = errno; -+ if (error_string) -+ archive_string_sprintf(error_string, -+ "Could not stat %s", -+ path); -+ res = ARCHIVE_FAILED; -+ break; -+ } -+ } else if (S_ISDIR(st.st_mode)) { -+ if (!last) { -+ if (chdir(head) != 0) { -+ tail[0] = c; -+ if (error_number) *error_number = errno; -+ if (error_string) -+ archive_string_sprintf(error_string, -+ "Could not chdir %s", -+ path); -+ res = (ARCHIVE_FATAL); -+ break; -+ } -+ /* Our view is now from inside this dir: */ -+ head = tail + 1; - } - } else if (S_ISLNK(st.st_mode)) { -- if (c == '\0') { -+ if (last) { - /* - * Last element is symlink; remove it - * so we can overwrite it with the - * item being extracted. - */ -- if (unlink(a->name)) { -- archive_set_error(&a->archive, errno, -- "Could not remove symlink %s", -- a->name); -- pn[0] = c; -- return (ARCHIVE_FAILED); -+ if (unlink(head)) { -+ tail[0] = c; -+ if (error_number) *error_number = errno; -+ if (error_string) -+ archive_string_sprintf(error_string, -+ "Could not remove symlink %s", -+ path); -+ res = ARCHIVE_FAILED; -+ break; - } -- a->pst = NULL; - /* - * Even if we did remove it, a warning - * is in order. The warning is silly, - * though, if we're just replacing one - * symlink with another symlink. - */ -- if (!S_ISLNK(a->mode)) { -- archive_set_error(&a->archive, 0, -- "Removing symlink %s", -- a->name); -+ tail[0] = c; -+ /* FIXME: not sure how important this is to restore -+ if (!S_ISLNK(path)) { -+ if (error_number) *error_number = 0; -+ if (error_string) -+ archive_string_sprintf(error_string, -+ "Removing symlink %s", -+ path); - } -+ */ - /* Symlink gone. No more problem! */ -- pn[0] = c; -- return (0); -- } else if (a->flags & ARCHIVE_EXTRACT_UNLINK) { -+ res = ARCHIVE_OK; -+ break; -+ } else if (flags & ARCHIVE_EXTRACT_UNLINK) { - /* User asked us to remove problems. */ -- if (unlink(a->name) != 0) { -- archive_set_error(&a->archive, 0, -- "Cannot remove intervening symlink %s", -- a->name); -- pn[0] = c; -- return (ARCHIVE_FAILED); -+ if (unlink(head) != 0) { -+ tail[0] = c; -+ if (error_number) *error_number = 0; -+ if (error_string) -+ archive_string_sprintf(error_string, -+ "Cannot remove intervening symlink %s", -+ path); -+ res = ARCHIVE_FAILED; -+ break; - } -- a->pst = NULL; -+ tail[0] = c; - } else { -- archive_set_error(&a->archive, 0, -- "Cannot extract through symlink %s", -- a->name); -- pn[0] = c; -- return (ARCHIVE_FAILED); -+ tail[0] = c; -+ if (error_number) *error_number = 0; -+ if (error_string) -+ archive_string_sprintf(error_string, -+ "Cannot extract through symlink %s", -+ path); -+ res = ARCHIVE_FAILED; -+ break; - } - } -- pn[0] = c; -- if (pn[0] != '\0') -- pn++; /* Advance to the next segment. */ -+ /* be sure to always maintain this */ -+ tail[0] = c; -+ if (tail[0] != '\0') -+ tail++; /* Advance to the next segment. */ - } -- pn[0] = c; -- /* We've checked and/or cleaned the whole path, so remember it. */ -- archive_strcpy(&a->path_safe, a->name); -- return (ARCHIVE_OK); -+ /* Catches loop exits via break */ -+ tail[0] = c; -+#ifdef HAVE_FCHDIR -+ /* If we changed directory above, restore it here. */ -+ if (restore_pwd >= 0) { -+ r = fchdir(restore_pwd); -+ if (r != 0) { -+ if(error_number) *error_number = errno; -+ if(error_string) -+ archive_string_sprintf(error_string, -+ "chdir() failure"); -+ } -+ close(restore_pwd); -+ restore_pwd = -1; -+ if (r != 0) { -+ res = (ARCHIVE_FATAL); -+ } -+ } -+#endif -+ /* TODO: reintroduce a safe cache here? */ -+ return res; - #endif - } - -+/* -+ * Check a->name for symlinks, returning ARCHIVE_OK if its clean, otherwise -+ * calls archive_set_error and returns ARCHIVE_{FATAL,FAILED} -+ */ -+static int -+check_symlinks(struct archive_write_disk *a) -+{ -+ struct archive_string error_string; -+ int error_number; -+ int rc; -+ archive_string_init(&error_string); -+ rc = check_symlinks_fsobj(a->name, &error_number, &error_string, a->flags); -+ if (rc != ARCHIVE_OK) { -+ archive_set_error(&a->archive, error_number, "%s", error_string.s); -+ } -+ archive_string_free(&error_string); -+ a->pst = NULL; /* to be safe */ -+ return rc; -+} -+ -+ - #if defined(__CYGWIN__) - /* - * 1. Convert a path separator from '\' to '/' . -@@ -2544,15 +2684,17 @@ cleanup_pathname_win(struct archive_write_disk *a) - * is set) if the path is absolute. - */ - static int --cleanup_pathname(struct archive_write_disk *a) -+cleanup_pathname_fsobj(char *path, int *error_number, struct archive_string *error_string, int flags) - { - char *dest, *src; - char separator = '\0'; - -- dest = src = a->name; -+ dest = src = path; - if (*src == '\0') { -- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, -- "Invalid empty pathname"); -+ if (error_number) *error_number = ARCHIVE_ERRNO_MISC; -+ if (error_string) -+ archive_string_sprintf(error_string, -+ "Invalid empty pathname"); - return (ARCHIVE_FAILED); - } - -@@ -2561,9 +2703,11 @@ cleanup_pathname(struct archive_write_disk *a) - #endif - /* Skip leading '/'. */ - if (*src == '/') { -- if (a->flags & ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS) { -- archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, -- "Path is absolute"); -+ if (flags & ARCHIVE_EXTRACT_SECURE_NOABSOLUTEPATHS) { -+ if (error_number) *error_number = ARCHIVE_ERRNO_MISC; -+ if (error_string) -+ archive_string_sprintf(error_string, -+ "Path is absolute"); - return (ARCHIVE_FAILED); - } - -@@ -2590,10 +2734,11 @@ cleanup_pathname(struct archive_write_disk *a) - } else if (src[1] == '.') { - if (src[2] == '/' || src[2] == '\0') { - /* Conditionally warn about '..' */ -- if (a->flags & ARCHIVE_EXTRACT_SECURE_NODOTDOT) { -- archive_set_error(&a->archive, -- ARCHIVE_ERRNO_MISC, -- "Path contains '..'"); -+ if (flags & ARCHIVE_EXTRACT_SECURE_NODOTDOT) { -+ if (error_number) *error_number = ARCHIVE_ERRNO_MISC; -+ if (error_string) -+ archive_string_sprintf(error_string, -+ "Path contains '..'"); - return (ARCHIVE_FAILED); - } - } -@@ -2624,7 +2769,7 @@ cleanup_pathname(struct archive_write_disk *a) - * We've just copied zero or more path elements, not including the - * final '/'. - */ -- if (dest == a->name) { -+ if (dest == path) { - /* - * Nothing got copied. The path must have been something - * like '.' or '/' or './' or '/././././/./'. -@@ -2639,6 +2784,21 @@ cleanup_pathname(struct archive_write_disk *a) - return (ARCHIVE_OK); - } - -+static int -+cleanup_pathname(struct archive_write_disk *a) -+{ -+ struct archive_string error_string; -+ int error_number; -+ int rc; -+ archive_string_init(&error_string); -+ rc = cleanup_pathname_fsobj(a->name, &error_number, &error_string, a->flags); -+ if (rc != ARCHIVE_OK) { -+ archive_set_error(&a->archive, error_number, "%s", error_string.s); -+ } -+ archive_string_free(&error_string); -+ return rc; -+} -+ - /* - * Create the parent directory of the specified path, assuming path - * is already in mutable storage. diff --git a/gnu/packages/patches/libarchive-fix-symlink-check.patch b/gnu/packages/patches/libarchive-fix-symlink-check.patch deleted file mode 100644 index f042c31a8..000000000 --- a/gnu/packages/patches/libarchive-fix-symlink-check.patch +++ /dev/null @@ -1,60 +0,0 @@ -Make sure to check for symlinks even if the pathname is very long: - -https://github.com/libarchive/libarchive/issues/744 - -Patch copied from upstream repository: - -https://github.com/libarchive/libarchive/commit/1fa9c7bf90f0862036a99896b0501c381584451a - -From 1fa9c7bf90f0862036a99896b0501c381584451a Mon Sep 17 00:00:00 2001 -From: Tim Kientzle -Date: Sun, 21 Aug 2016 17:11:45 -0700 -Subject: [PATCH] Issue #744 (part of Issue #743): Enforce sandbox with very - long pathnames - -Because check_symlinks is handled separately from the deep-directory -support, very long pathnames cause problems. Previously, the code -ignored most failures to lstat() a path component. In particular, -this led to check_symlinks always passing for very long paths, which -in turn provides a way to evade the symlink checks in the sandboxing -code. - -We now fail on unrecognized lstat() failures, which plugs this -hole at the cost of disabling deep directory support when the -user requests sandboxing. - -TODO: This probably cannot be completely fixed without -entirely reimplementing the deep directory support to -integrate the symlink checks. I want to reimplement the -deep directory hanlding someday anyway; openat() and -related system calls now provide a much cleaner way to -handle deep directories than the chdir approach used by this -code. ---- - libarchive/archive_write_disk_posix.c | 12 +++++++++++- - 1 file changed, 11 insertions(+), 1 deletion(-) - -diff --git a/libarchive/archive_write_disk_posix.c b/libarchive/archive_write_disk_posix.c -index 39ee3b6..8f0421e 100644 ---- a/libarchive/archive_write_disk_posix.c -+++ b/libarchive/archive_write_disk_posix.c -@@ -2401,8 +2401,18 @@ check_symlinks(struct archive_write_disk *a) - r = lstat(a->name, &st); - if (r != 0) { - /* We've hit a dir that doesn't exist; stop now. */ -- if (errno == ENOENT) -+ if (errno == ENOENT) { - break; -+ } else { -+ /* Note: This effectively disables deep directory -+ * support when security checks are enabled. -+ * Otherwise, very long pathnames that trigger -+ * an error here could evade the sandbox. -+ * TODO: We could do better, but it would probably -+ * require merging the symlink checks with the -+ * deep-directory editing. */ -+ return (ARCHIVE_FAILED); -+ } - } else if (S_ISLNK(st.st_mode)) { - if (c == '\0') { - /* diff --git a/gnu/packages/patches/libarchive-safe_fprintf-buffer-overflow.patch b/gnu/packages/patches/libarchive-safe_fprintf-buffer-overflow.patch deleted file mode 100644 index 7ffff297c..000000000 --- a/gnu/packages/patches/libarchive-safe_fprintf-buffer-overflow.patch +++ /dev/null @@ -1,44 +0,0 @@ -Fixes this buffer overflow: -https://github.com/libarchive/libarchive/issues/767 - -Patch copied from upstream source repository: -https://github.com/libarchive/libarchive/commit/e37b620fe8f14535d737e89a4dcabaed4517bf1a - -From e37b620fe8f14535d737e89a4dcabaed4517bf1a Mon Sep 17 00:00:00 2001 -From: Tim Kientzle -Date: Sun, 21 Aug 2016 10:51:43 -0700 -Subject: [PATCH] Issue #767: Buffer overflow printing a filename - -The safe_fprintf function attempts to ensure clean output for an -arbitrary sequence of bytes by doing a trial conversion of the -multibyte characters to wide characters -- if the resulting wide -character is printable then we pass through the corresponding bytes -unaltered, otherwise, we convert them to C-style ASCII escapes. - -The stack trace in Issue #767 suggest that the 20-byte buffer -was getting overflowed trying to format a non-printable multibyte -character. This should only happen if there is a valid multibyte -character of more than 5 bytes that was unprintable. (Each byte -would get expanded to a four-charcter octal-style escape of the form -"\123" resulting in >20 characters for the >5 byte multibyte character.) - -I've not been able to reproduce this, but have expanded the conversion -buffer to 128 bytes on the belief that no multibyte character set -has a single character of more than 32 bytes. ---- - tar/util.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tar/util.c b/tar/util.c -index 9ff22f2..2b4aebe 100644 ---- a/tar/util.c -+++ b/tar/util.c -@@ -182,7 +182,7 @@ safe_fprintf(FILE *f, const char *fmt, ...) - } - - /* If our output buffer is full, dump it and keep going. */ -- if (i > (sizeof(outbuff) - 20)) { -+ if (i > (sizeof(outbuff) - 128)) { - outbuff[i] = '\0'; - fprintf(f, "%s", outbuff); - i = 0; -- cgit v1.3 From 83dcfa72d4d7aadf7c772607a97f6501de106dca Mon Sep 17 00:00:00 2001 From: David Craven Date: Sat, 29 Oct 2016 16:48:43 +0200 Subject: gnu: flex: Update to 2.6.2. * gnu/packages/flex.scm (flex): Update to 2.6.2. [native-inputs]: Add help2man. [origin]: Update uri to github. Remove CVE-2016-6354 patch. (flex-2.6.1): Remove variable. * gnu/packages/patches/flex-CVE-2016-6354.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Update. * gnu/packages/kde-frameworks.scm (solid, kservice)[native-inputs]: Use flex. --- gnu/local.mk | 1 - gnu/packages/flex.scm | 61 +++++++++++---------------- gnu/packages/kde-frameworks.scm | 12 +----- gnu/packages/patches/flex-CVE-2016-6354.patch | 30 ------------- 4 files changed, 26 insertions(+), 78 deletions(-) delete mode 100644 gnu/packages/patches/flex-CVE-2016-6354.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index ac21c9e07..fdd5e3c81 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -536,7 +536,6 @@ dist_patch_DATA = \ %D%/packages/patches/fasthenry-spFactor.patch \ %D%/packages/patches/findutils-localstatedir.patch \ %D%/packages/patches/findutils-test-xargs.patch \ - %D%/packages/patches/flex-CVE-2016-6354.patch \ %D%/packages/patches/flint-ldconfig.patch \ %D%/packages/patches/fltk-shared-lib-defines.patch \ %D%/packages/patches/fltk-xfont-on-demand.patch \ diff --git a/gnu/packages/flex.scm b/gnu/packages/flex.scm index c1f74d65a..d9abbfa4e 100644 --- a/gnu/packages/flex.scm +++ b/gnu/packages/flex.scm @@ -24,6 +24,7 @@ #:use-module (guix build-system gnu) #:use-module (gnu packages) #:use-module (gnu packages m4) + #:use-module (gnu packages man) #:use-module (gnu packages bison) #:use-module (gnu packages indent) #:use-module (srfi srfi-1)) @@ -31,29 +32,32 @@ (define-public flex (package (name "flex") - (version "2.6.0") + (version "2.6.2") (source (origin - (method url-fetch) - (uri (string-append "mirror://sourceforge/flex/flex-" - version ".tar.bz2")) - (patches (search-patches "flex-CVE-2016-6354.patch")) - (sha256 - (base32 - "1sdqx63yadindzafrq1w31ajblf9gl1c301g068s20s7bbpi3ri4")))) + (method url-fetch) + (uri (string-append + "https://github.com/westes/flex" + "/releases/download/v" version "/" + "flex-" version ".tar.gz")) + (sha256 + (base32 + "1jdjghh1qjq3z7snphshcak6p07gch2n4215vjvrkism25x460cs")))) (build-system gnu-build-system) (inputs (let ((bison-for-tests ;; Work around an incompatibility with Bison 3.0: ;; . - (package (inherit bison) + (package + (inherit bison) (version "2.7.1") (source (origin - (method url-fetch) - (uri (string-append "mirror://gnu/bison/bison-" - version ".tar.xz")) - (sha256 - (base32 - "1yx7isx67sdmyijvihgyra1f59fwdz7sqriginvavfj5yb5ss2dl")))) + (method url-fetch) + (uri (string-append + "mirror://gnu/bison/" + "bison-" version ".tar.xz")) + (sha256 + (base32 + "1yx7isx67sdmyijvihgyra1f59fwdz7sqriginvavfj5yb5ss2dl")))) ;; Unlike Bison 3.0, this version did not need Flex for its ;; tests, so it allows us to break the cycle. @@ -61,9 +65,11 @@ `(("bison" ,bison-for-tests) ("indent" ,indent)))) ;; m4 is not present in PATH when cross-building - (native-inputs `(("m4" ,m4))) + (native-inputs + `(("help2man" ,help2man) + ("m4" ,m4))) (propagated-inputs `(("m4" ,m4))) - (home-page "http://flex.sourceforge.net/") + (home-page "https://github.com/westes/flex") (synopsis "Fast lexical analyser generator") (description "Flex is a tool for generating scanners. A scanner, sometimes @@ -78,23 +84,4 @@ is run, it analyzes its input for occurrences of text matching the regular expressions for each rule. Whenever it finds a match, it executes the corresponding C code.") (license (non-copyleft "file://COPYING" - "See COPYING in the distribution.")))) - -(define-public flex-2.6.1 - ;; The kservice and solid packages use flex. extra-cmake-modules - ;; forces C89 for all C files for compatibility with windows. - ;; Flex 2.6.0 generates a lexer containing a single line comment. Single - ;; line comments are part of the C99 standard, so the lexer won't compile - ;; if C89 is used. - (package - (inherit flex) - (version "2.6.1") - (source (origin - (method url-fetch) - (uri (string-append - "https://github.com/westes/flex" - "/releases/download/v" version "/" - "flex-" version ".tar.gz")) - (sha256 - (base32 - "0fy14c35yz2m1n1m4f02by3501fn0cca37zn7jp8lpp4b3kgjhrw")))))) + "See COPYING in the distribution.")))) diff --git a/gnu/packages/kde-frameworks.scm b/gnu/packages/kde-frameworks.scm index 9df37ac38..d285faecb 100644 --- a/gnu/packages/kde-frameworks.scm +++ b/gnu/packages/kde-frameworks.scm @@ -1049,11 +1049,7 @@ which are used in DBus communication.") (native-inputs `(("bison" ,bison) ("extra-cmake-modules" ,extra-cmake-modules) - ;; extra-cmake-modules forces C89 for all C files for compatibility with - ;; Windows. Flex 2.6.0 generates a lexer containing a single line - ;; comment. Single line comments are part of the C99 standard, so the - ;; lexer won't compile if C89 is used. - ("flex" ,flex-2.6.1) + ("flex" ,flex) ("qttools" ,qttools))) (inputs `(("qtbase" ,qtbase) @@ -2456,11 +2452,7 @@ typed.") (native-inputs `(("bison" ,bison) ("extra-cmake-modules" ,extra-cmake-modules) - ;; extra-cmake-modules forces C89 for all C files for compatibility with - ;; Windows. Flex 2.6.0 generates a lexer containing a single line - ;; comment. Single line comments are part of the C99 standard, so the - ;; lexer won't compile if C89 is used. - ("flex" ,flex-2.6.1))) + ("flex" ,flex))) (inputs `(("kcrash" ,kcrash) ("kdbusaddons" ,kdbusaddons) diff --git a/gnu/packages/patches/flex-CVE-2016-6354.patch b/gnu/packages/patches/flex-CVE-2016-6354.patch deleted file mode 100644 index 1f3cb028d..000000000 --- a/gnu/packages/patches/flex-CVE-2016-6354.patch +++ /dev/null @@ -1,30 +0,0 @@ -Fix CVE-2016-6354 (Buffer overflow in generated code (yy_get_next_buffer). - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6354 -https://security-tracker.debian.org/tracker/CVE-2016-6354 - -Patch copied from upstream source repository: -https://github.com/westes/flex/commit/a5cbe929ac3255d371e698f62dc256afe7006466 - -From a5cbe929ac3255d371e698f62dc256afe7006466 Mon Sep 17 00:00:00 2001 -From: Will Estes -Date: Sat, 27 Feb 2016 11:56:05 -0500 -Subject: [PATCH] Fixed incorrect integer type - ---- - src/flex.skl | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/flex.skl b/src/flex.skl -index 36a526a..64f853d 100644 ---- a/src/flex.skl -+++ b/src/flex.skl -@@ -1703,7 +1703,7 @@ int yyFlexLexer::yy_get_next_buffer() - - else - { -- yy_size_t num_to_read = -+ int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) -- cgit v1.3 From b810a85019ab3c4ee1f889d0751b8eb06157dadc Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 12 Dec 2016 01:01:13 +0100 Subject: gnu: Default to GCC 5. This reinstates and adjusts commit e3d0fcbf7e55e8cbe8d0a1c5a24d73f341d7243b. * gnu/packages/patches/gcc-libiberty-printf-decl.patch: New file. * gnu/packages/gcc.scm (gcc-5)[source]: Use it. [patches]: Add "gcc-arm-bug-71399.patch". (gcc): Switch to GCC-5. * gnu/packages/commencement.scm (libstdc++-boot0): New variable. (gcc-boot0)[inputs]: Add it. (gcc-toolchain-4.9): Switch to GCC-4.9. (gcc-toolchain-5): Switch to GCC-FINAL. * gnu/local.mk (dist_patch_DATA): Add 'gcc-libiberty-printf-decl.patch'. --- gnu/local.mk | 1 + gnu/packages/commencement.scm | 27 +++++++++++++++++++-- gnu/packages/gcc.scm | 5 ++-- .../patches/gcc-libiberty-printf-decl.patch | 28 ++++++++++++++++++++++ 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 gnu/packages/patches/gcc-libiberty-printf-decl.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index fdd5e3c81..79d6b14a2 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -546,6 +546,7 @@ dist_patch_DATA = \ %D%/packages/patches/gcc-arm-bug-71399.patch \ %D%/packages/patches/gcc-arm-link-spec-fix.patch \ %D%/packages/patches/gcc-cross-environment-variables.patch \ + %D%/packages/patches/gcc-libiberty-printf-decl.patch \ %D%/packages/patches/gcc-libvtv-runpath.patch \ %D%/packages/patches/gcc-strmov-store-file-names.patch \ %D%/packages/patches/gcc-5.0-libvtv-runpath.patch \ diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index 2431babca..1238f5cf5 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -172,6 +172,26 @@ ,cf))))) (inputs %boot0-inputs)))) +(define libstdc++-boot0 + ;; GCC's libcc1 is always built as a shared library (the top-level + ;; 'Makefile.def' forcefully adds --enable-shared) and thus needs to refer + ;; to libstdc++.so. We cannot build libstdc++-5.3 because it relies on + ;; C++14 features missing in our bootstrap compiler. + (let ((lib (package-with-bootstrap-guile (make-libstdc++ gcc-4.9)))) + (package + (inherit lib) + (name "libstdc++-boot0") + (arguments + `(#:guile ,%bootstrap-guile + #:implicit-inputs? #f + + ;; XXX: libstdc++.so NEEDs ld.so for some reason. + #:validate-runpath? #f + + ,@(package-arguments lib))) + (inputs %boot0-inputs) + (native-inputs '())))) + (define gcc-boot0 (package-with-bootstrap-guile (package (inherit gcc) @@ -257,6 +277,9 @@ ("mpc-source" ,(package-source mpc)) ("binutils-cross" ,binutils-boot0) + ;; The libstdc++ that libcc1 links against. + ("libstdc++" ,libstdc++-boot0) + ;; Call it differently so that the builder can check whether ;; the "libc" input is #f. ("libc-native" ,@(assoc-ref %boot0-inputs "libc")) @@ -986,10 +1009,10 @@ and binaries, plus debugging symbols in the 'debug' output), and Binutils.") (gcc-toolchain gcc-4.8)) (define-public gcc-toolchain-4.9 - (gcc-toolchain gcc-final)) + (gcc-toolchain gcc-4.9)) (define-public gcc-toolchain-5 - (gcc-toolchain gcc-5)) + (gcc-toolchain gcc-final)) (define-public gcc-toolchain-6 (gcc-toolchain gcc-6)) diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index c26cc4f49..acc57c820 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -358,7 +358,8 @@ Go. It also includes runtime support libraries for these languages.") (sha256 (base32 "0fihlcy5hnksdxk0sn6bvgnyq8gfrgs8m794b1jxwd1dxinzg3b0")) - (patches (search-patches "gcc-strmov-store-file-names.patch" + (patches (search-patches "gcc-arm-bug-71399.patch" + "gcc-strmov-store-file-names.patch" "gcc-5.0-libvtv-runpath.patch")))))) (define-public gcc-6 @@ -377,7 +378,7 @@ Go. It also includes runtime support libraries for these languages.") ;; Note: When changing the default gcc version, update ;; the gcc-toolchain-* definitions accordingly. -(define-public gcc gcc-4.9) +(define-public gcc gcc-5) (define-public (make-libstdc++ gcc) "Return a libstdc++ package based on GCC. The primary use case is when diff --git a/gnu/packages/patches/gcc-libiberty-printf-decl.patch b/gnu/packages/patches/gcc-libiberty-printf-decl.patch new file mode 100644 index 000000000..a612c9e00 --- /dev/null +++ b/gnu/packages/patches/gcc-libiberty-printf-decl.patch @@ -0,0 +1,28 @@ +This patch makes the exeception specifier of libiberty's 'asprintf' +and 'vasprintf' declarations match those of glibc to work around the +problem described at . + +The problem in part stems from the fact that libiberty is configured +without _GNU_SOURCE (thus, it sets HAVE_DECL_ASPRINTF to 0), whereas libcc1 +is configured and built with _GNU_SOURCE, hence the conflicting declarations. + +--- gcc-5.3.0/include/libiberty.h 2016-04-23 22:45:46.262709079 +0200 ++++ gcc-5.3.0/include/libiberty.h 2016-04-23 22:45:37.110635439 +0200 +@@ -625,7 +625,7 @@ extern int pwait (int, int *, int); + /* Like sprintf but provides a pointer to malloc'd storage, which must + be freed by the caller. */ + +-extern int asprintf (char **, const char *, ...) ATTRIBUTE_PRINTF_2; ++extern int asprintf (char **, const char *, ...) __THROWNL ATTRIBUTE_PRINTF_2; + #endif + + /* Like asprintf but allocates memory without fail. This works like +@@ -637,7 +637,7 @@ extern char *xasprintf (const char *, .. + /* Like vsprintf but provides a pointer to malloc'd storage, which + must be freed by the caller. */ + +-extern int vasprintf (char **, const char *, va_list) ATTRIBUTE_PRINTF(2,0); ++extern int vasprintf (char **, const char *, va_list) __THROWNL ATTRIBUTE_PRINTF(2,0); + #endif + + /* Like vasprintf but allocates memory without fail. This works like -- cgit v1.3 From 20be64dcf7d4d08e75eb56c34890420bea7882ec Mon Sep 17 00:00:00 2001 From: Alex Vong Date: Sat, 31 Dec 2016 00:05:49 +0800 Subject: gnu: tar: Fix CVE-2016-6321. * gnu/packages/patches/tar-CVE-2016-6321.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/base.scm (tar)[source]: Use it. Signed-off-by: Leo Famulari --- gnu/local.mk | 1 + gnu/packages/base.scm | 3 +- gnu/packages/patches/tar-CVE-2016-6321.patch | 51 ++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/tar-CVE-2016-6321.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 79d6b14a2..00f47e316 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -857,6 +857,7 @@ dist_patch_DATA = \ %D%/packages/patches/t1lib-CVE-2010-2642.patch \ %D%/packages/patches/t1lib-CVE-2011-0764.patch \ %D%/packages/patches/t1lib-CVE-2011-1552+CVE-2011-1553+CVE-2011-1554.patch \ + %D%/packages/patches/tar-CVE-2016-6321.patch \ %D%/packages/patches/tar-skip-unreliable-tests.patch \ %D%/packages/patches/tcl-mkindex-deterministic.patch \ %D%/packages/patches/tclxml-3.2-install.patch \ diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index 30364f373..196208616 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -162,7 +162,8 @@ implementation offers several extensions over the standard utility.") (sha256 (base32 "097hx7sbzp8qirl4m930lw84kn0wmxhmq7v1qpra3mrg0b8cyba0")) - (patches (search-patches "tar-skip-unreliable-tests.patch")))) + (patches (search-patches "tar-CVE-2016-6321.patch" + "tar-skip-unreliable-tests.patch")))) (build-system gnu-build-system) ;; Note: test suite requires ~1GiB of disk space. (arguments diff --git a/gnu/packages/patches/tar-CVE-2016-6321.patch b/gnu/packages/patches/tar-CVE-2016-6321.patch new file mode 100644 index 000000000..b79be9bc9 --- /dev/null +++ b/gnu/packages/patches/tar-CVE-2016-6321.patch @@ -0,0 +1,51 @@ +Fix CVE-2016-6321: + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6321 +https://security-tracker.debian.org/tracker/CVE-2016-6321 + +Patch adapted from upstream source repository (the changes to 'NEWS' +don't apply to the Tar 1.29 release tarball). + +http://git.savannah.gnu.org/cgit/tar.git/commit/?id=7340f67b9860ea0531c1450e5aa261c50f67165d + +From 7340f67b9860ea0531c1450e5aa261c50f67165d Mon Sep 17 00:00:00 2001 +From: Paul Eggert +Date: Sat, 29 Oct 2016 21:04:40 -0700 +Subject: [PATCH] When extracting, skip ".." members + +* NEWS: Document this. +* src/extract.c (extract_archive): Skip members whose names +contain "..". +--- + NEWS | 8 +++++++- + src/extract.c | 8 ++++++++ + 2 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/src/extract.c b/src/extract.c +index f982433..7904148 100644 +--- a/src/extract.c ++++ b/src/extract.c +@@ -1629,12 +1629,20 @@ extract_archive (void) + { + char typeflag; + tar_extractor_t fun; ++ bool skip_dotdot_name; + + fatal_exit_hook = extract_finish; + + set_next_block_after (current_header); + ++ skip_dotdot_name = (!absolute_names_option ++ && contains_dot_dot (current_stat_info.orig_file_name)); ++ if (skip_dotdot_name) ++ ERROR ((0, 0, _("%s: Member name contains '..'"), ++ quotearg_colon (current_stat_info.orig_file_name))); ++ + if (!current_stat_info.file_name[0] ++ || skip_dotdot_name + || (interactive_option + && !confirm ("extract", current_stat_info.file_name))) + { +-- +2.11.0 + -- cgit v1.3 From 7d7ea947f56e5080c9913f311ede71475045b9d6 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Wed, 4 Jan 2017 16:47:48 +0100 Subject: gnu: sed: Update to 4.3. * gnu/packages/base.scm (sed): Update to 4.3. [source]: Use xz tarball. Remove upstreamed patch. [arguments]: Fix '/bin/sh' -> 'bash' substitution. [home-page]: Use https. [native-inputs]: Add perl. * gnu/packages/patches/sed-hurd-path-max.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - gnu/packages/base.scm | 13 ++++++----- gnu/packages/patches/sed-hurd-path-max.patch | 34 ---------------------------- 3 files changed, 7 insertions(+), 41 deletions(-) delete mode 100644 gnu/packages/patches/sed-hurd-path-max.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 00f47e316..55d56e185 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -835,7 +835,6 @@ dist_patch_DATA = \ %D%/packages/patches/ruby-symlinkfix.patch \ %D%/packages/patches/ruby-tzinfo-data-ignore-broken-test.patch\ %D%/packages/patches/ruby-yard-fix-skip-of-markdown-tests.patch \ - %D%/packages/patches/sed-hurd-path-max.patch \ %D%/packages/patches/scheme48-tests.patch \ %D%/packages/patches/scotch-test-threading.patch \ %D%/packages/patches/sdl-libx11-1.6.patch \ diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index 196208616..66c5e0cdc 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -117,15 +117,14 @@ including, for example, recursive directory searching.") (define-public sed (package (name "sed") - (version "4.2.2") + (version "4.3") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/sed/sed-" version - ".tar.bz2")) + ".tar.xz")) (sha256 (base32 - "1myvrmh99jsvk7v3d7crm0gcrq51hmmm1r2kjyyci152in1x2j7h")) - (patches (search-patches "sed-hurd-path-max.patch")))) + "1anhdgah8h423hlmn9hwzxzr7hjbqjm6hxq3z1p7p7nf8640vhj7")))) (build-system gnu-build-system) (synopsis "Stream editor") (arguments @@ -140,8 +139,10 @@ including, for example, recursive directory searching.") (substitute* '("testsuite/bsd.sh" "testsuite/bug-regex9.c") (("/bin/sh") - (string-append bash "/bin/bash"))) + (string-append bash "/bin/sh"))) #t))))))) + (native-inputs + `(("perl" ,perl))) ; for build-aux/help2man (description "Sed is a non-interactive, text stream editor. It receives a text input from a file or from standard input and it then applies a series of text @@ -149,7 +150,7 @@ editing commands to the stream and prints its output to standard output. It is often used for substituting text patterns in a stream. The GNU implementation offers several extensions over the standard utility.") (license gpl3+) - (home-page "http://www.gnu.org/software/sed/"))) + (home-page "https://www.gnu.org/software/sed/"))) (define-public tar (package diff --git a/gnu/packages/patches/sed-hurd-path-max.patch b/gnu/packages/patches/sed-hurd-path-max.patch deleted file mode 100644 index 5226cba4c..000000000 --- a/gnu/packages/patches/sed-hurd-path-max.patch +++ /dev/null @@ -1,34 +0,0 @@ -7bb8d35d0330161a5af5341471d0c183a067e8c2 -Author: Jose E. Marchesi -Date: Sun Oct 6 14:43:38 2013 +0200 - - Set PATH_MAX to some constant in case it is not defined in system - headers. - - 2013-10-06 Jose E. Marchesi - - * basicdefs.h (PATH_MAX): Defined to some constant in case it is - not defined by system headers. - * sed/utils.c: Do not include pathmax.h anymore. - * bootstrap.conf (gnulib_modules): Do not use the gnulib module - pathmax. - -diff --git a/basicdefs.h b/basicdefs.h -index 0d28a97..09f5beb 100644 ---- a/basicdefs.h -+++ b/basicdefs.h -@@ -40,6 +41,13 @@ typedef unsigned long countT; - #define obstack_chunk_alloc ck_malloc - #define obstack_chunk_free free - -+/* MAX_PATH is not defined in some platforms, most notably GNU/Hurd. -+ In that case we define it here to some constant. Note however that -+ this relies in the fact that sed does reallocation if a buffer -+ needs to be larger than PATH_MAX. */ -+#ifndef PATH_MAX -+# define PATH_MAX 200 -+#endif - - /* handle misdesigned macros (snarfed from lib/regex.c) */ - /* Jim Meyering writes: - -- cgit v1.3 From 8c6b077bfae3c257ad7b9967f63428f8504d61f0 Mon Sep 17 00:00:00 2001 From: Danny Milosavljevic Date: Mon, 16 Jan 2017 16:27:51 +0100 Subject: gnu: gdk-pixbuf: Make it reproducible. Fixes . * gnu/packages/gtk.scm (gdk-pixbuf)[source](patches): New field. --- gnu/local.mk | 1 + gnu/packages/gtk.scm | 3 ++- gnu/packages/patches/gdk-pixbuf-list-dir.patch | 35 ++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/gdk-pixbuf-list-dir.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 7e816f79a..34c4587db 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -568,6 +568,7 @@ dist_patch_DATA = \ %D%/packages/patches/gcc-6-arm-none-eabi-multilib.patch \ %D%/packages/patches/gcc-6-cross-environment-variables.patch \ %D%/packages/patches/gcj-arm-mode.patch \ + %D%/packages/patches/gdk-pixbuf-list-dir.patch \ %D%/packages/patches/gd-CVE-2016-7568.patch \ %D%/packages/patches/gd-CVE-2016-8670.patch \ %D%/packages/patches/gd-fix-chunk-size-on-boundaries.patch \ diff --git a/gnu/packages/gtk.scm b/gnu/packages/gtk.scm index a506949ab..8f9d5f478 100644 --- a/gnu/packages/gtk.scm +++ b/gnu/packages/gtk.scm @@ -433,7 +433,8 @@ highlighting and other features typical of a source code editor.") name "-" version ".tar.xz")) (sha256 (base32 - "1v1rssjd8p5s3lymsfhiq5mbs2pc0h1r6jd0asrwdbrign7i68sj")))) + "1v1rssjd8p5s3lymsfhiq5mbs2pc0h1r6jd0asrwdbrign7i68sj")) + (patches (search-patches "gdk-pixbuf-list-dir.patch")))) (build-system gnu-build-system) (arguments '(#:configure-flags '("--with-x11") diff --git a/gnu/packages/patches/gdk-pixbuf-list-dir.patch b/gnu/packages/patches/gdk-pixbuf-list-dir.patch new file mode 100644 index 000000000..137914a19 --- /dev/null +++ b/gnu/packages/patches/gdk-pixbuf-list-dir.patch @@ -0,0 +1,35 @@ +Sort directory entries so that the output of +‘gdk-pixbuf-query-loaders’ is deterministic. + +See: https://bugzilla.gnome.org/show_bug.cgi?id=777332 +--- gdk-pixbuf-2.34.0/gdk-pixbuf/queryloaders.c.orig 2017-01-11 00:17:32.865843062 +0100 ++++ gdk-pixbuf-2.34.0/gdk-pixbuf/queryloaders.c 2017-01-16 16:12:03.420667874 +0100 +@@ -354,16 +354,27 @@ + + dir = g_dir_open (path, 0, NULL); + if (dir) { ++ GList *entries = NULL; + const char *dent; + + while ((dent = g_dir_read_name (dir))) { + gint len = strlen (dent); + if (len > SOEXT_LEN && + strcmp (dent + len - SOEXT_LEN, SOEXT) == 0) { +- query_module (contents, path, dent); ++ entries = g_list_append (entries, g_strdup (dent)); + } + } + g_dir_close (dir); ++ /* Sort directory entries so that the output of ++ ‘gdk-pixbuf-query-loaders’ is deterministic. */ ++ entries = g_list_sort (entries, (GCompareFunc) strcmp); ++ GList *xentries; ++ for (xentries = entries; xentries; xentries = g_list_next (xentries)) { ++ dent = xentries->data; ++ query_module (contents, path, dent); ++ g_free (xentries->data); ++ } ++ g_list_free (entries); + } + #else + g_string_append_printf (contents, "# dynamic loading of modules not supported\n"); -- cgit v1.3 From 0e88ada940953ac6b12fcbfd2add08835edcf49d Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Mon, 23 Jan 2017 10:28:15 +0200 Subject: gnu: Remove pcre-CVE-2016-3191.patch. This is a follow-up to 026ee1a5a669658c8d4745c2733b4c201ca0e48e. * gnu/packages/patches/pcre-CVE-2016-3191.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - gnu/packages/patches/pcre-CVE-2016-3191.patch | 151 -------------------------- 2 files changed, 152 deletions(-) delete mode 100644 gnu/packages/patches/pcre-CVE-2016-3191.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 6dcd174bc..d1efdbdf6 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -769,7 +769,6 @@ dist_patch_DATA = \ %D%/packages/patches/patchelf-rework-for-arm.patch \ %D%/packages/patches/patchutils-xfail-gendiff-tests.patch \ %D%/packages/patches/patch-hurd-path-max.patch \ - %D%/packages/patches/pcre-CVE-2016-3191.patch \ %D%/packages/patches/pcre2-CVE-2016-3191.patch \ %D%/packages/patches/perl-autosplit-default-time.patch \ %D%/packages/patches/perl-deterministic-ordering.patch \ diff --git a/gnu/packages/patches/pcre-CVE-2016-3191.patch b/gnu/packages/patches/pcre-CVE-2016-3191.patch deleted file mode 100644 index 89cce2a36..000000000 --- a/gnu/packages/patches/pcre-CVE-2016-3191.patch +++ /dev/null @@ -1,151 +0,0 @@ -Fix for CVE-2016-3191. -See . -This is svn r1631 at . - -Index: trunk/testdata/testoutput11-16 -=================================================================== ---- trunk/testdata/testoutput11-16 (revision 1630) -+++ trunk/testdata/testoutput11-16 (revision 1631) -@@ -765,4 +765,7 @@ - 25 End - ------------------------------------------------------------------ - -+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ -+Failed: regular expression is too complicated at offset 490 -+ - /-- End of testinput11 --/ -Index: trunk/testdata/testinput11 -=================================================================== ---- trunk/testdata/testinput11 (revision 1630) -+++ trunk/testdata/testinput11 (revision 1631) -@@ -138,4 +138,6 @@ - - /.((?2)(?R)\1)()/B - -+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ -+ - /-- End of testinput11 --/ -Index: trunk/testdata/testoutput11-8 -=================================================================== ---- trunk/testdata/testoutput11-8 (revision 1630) -+++ trunk/testdata/testoutput11-8 (revision 1631) -@@ -765,4 +765,7 @@ - 38 End - ------------------------------------------------------------------ - -+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ -+Failed: missing ) at offset 509 -+ - /-- End of testinput11 --/ -Index: trunk/testdata/testoutput11-32 -=================================================================== ---- trunk/testdata/testoutput11-32 (revision 1630) -+++ trunk/testdata/testoutput11-32 (revision 1631) -@@ -765,4 +765,7 @@ - 25 End - ------------------------------------------------------------------ - -+/([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00]([00](*ACCEPT)/ -+Failed: missing ) at offset 509 -+ - /-- End of testinput11 --/ -Index: trunk/pcre_internal.h -=================================================================== ---- trunk/pcre_internal.h (revision 1630) -+++ trunk/pcre_internal.h (revision 1631) -@@ -7,7 +7,7 @@ - and semantics are as close as possible to those of the Perl 5 language. - - Written by Philip Hazel -- Copyright (c) 1997-2014 University of Cambridge -+ Copyright (c) 1997-2016 University of Cambridge - - ----------------------------------------------------------------------------- - Redistribution and use in source and binary forms, with or without -@@ -2289,7 +2289,7 @@ - ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59, - ERR60, ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69, - ERR70, ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79, -- ERR80, ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERRCOUNT }; -+ ERR80, ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERR87, ERRCOUNT }; - - /* JIT compiling modes. The function list is indexed by them. */ - -Index: trunk/pcre_compile.c -=================================================================== ---- trunk/pcre_compile.c (revision 1630) -+++ trunk/pcre_compile.c (revision 1631) -@@ -6,7 +6,7 @@ - and semantics are as close as possible to those of the Perl 5 language. - - Written by Philip Hazel -- Copyright (c) 1997-2014 University of Cambridge -+ Copyright (c) 1997-2016 University of Cambridge - - ----------------------------------------------------------------------------- - Redistribution and use in source and binary forms, with or without -@@ -560,6 +560,7 @@ - /* 85 */ - "parentheses are too deeply nested (stack check)\0" - "digits missing in \\x{} or \\o{}\0" -+ "regular expression is too complicated\0" - ; - - /* Table to identify digits and hex digits. This is used when compiling -@@ -4591,7 +4592,8 @@ - if (code > cd->start_workspace + cd->workspace_size - - WORK_SIZE_SAFETY_MARGIN) /* Check for overrun */ - { -- *errorcodeptr = ERR52; -+ *errorcodeptr = (code >= cd->start_workspace + cd->workspace_size)? -+ ERR52 : ERR87; - goto FAILED; - } - -@@ -6626,8 +6628,21 @@ - cd->had_accept = TRUE; - for (oc = cd->open_caps; oc != NULL; oc = oc->next) - { -- *code++ = OP_CLOSE; -- PUT2INC(code, 0, oc->number); -+ if (lengthptr != NULL) -+ { -+#ifdef COMPILE_PCRE8 -+ *lengthptr += 1 + IMM2_SIZE; -+#elif defined COMPILE_PCRE16 -+ *lengthptr += 2 + IMM2_SIZE; -+#elif defined COMPILE_PCRE32 -+ *lengthptr += 4 + IMM2_SIZE; -+#endif -+ } -+ else -+ { -+ *code++ = OP_CLOSE; -+ PUT2INC(code, 0, oc->number); -+ } - } - setverb = *code++ = - (cd->assert_depth > 0)? OP_ASSERT_ACCEPT : OP_ACCEPT; -Index: trunk/pcreposix.c -=================================================================== ---- trunk/pcreposix.c (revision 1630) -+++ trunk/pcreposix.c (revision 1631) -@@ -6,7 +6,7 @@ - and semantics are as close as possible to those of the Perl 5 language. - - Written by Philip Hazel -- Copyright (c) 1997-2014 University of Cambridge -+ Copyright (c) 1997-2016 University of Cambridge - - ----------------------------------------------------------------------------- - Redistribution and use in source and binary forms, with or without -@@ -173,7 +173,8 @@ - REG_BADPAT, /* group name must start with a non-digit */ - /* 85 */ - REG_BADPAT, /* parentheses too deeply nested (stack check) */ -- REG_BADPAT /* missing digits in \x{} or \o{} */ -+ REG_BADPAT, /* missing digits in \x{} or \o{} */ -+ REG_BADPAT /* pattern too complicated */ - }; - - /* Table of texts corresponding to POSIX error codes */ -- cgit v1.3 From d71d6fe85c4db778be6a2081cbbec6a3a494e4f9 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Sat, 21 Jan 2017 12:31:49 +0100 Subject: gnu: gcc@5: Respect SOURCE_DATE_EPOCH in __DATE__ and __TIME__ macros. * gnu/packages/patches/gcc-5-source-date-epoch-1.patch, gnu/packages/patches/gcc-5-source-date-epoch-2.patch: New files. * gnu/local.mk (dist_patch_DATA): Register them. * gnu/packages/gcc.scm (gcc-5)[source]: Use them. --- gnu/local.mk | 2 + gnu/packages/gcc.scm | 4 +- .../patches/gcc-5-source-date-epoch-1.patch | 190 +++++++++++ .../patches/gcc-5-source-date-epoch-2.patch | 353 +++++++++++++++++++++ 4 files changed, 548 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/gcc-5-source-date-epoch-1.patch create mode 100644 gnu/packages/patches/gcc-5-source-date-epoch-2.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index d1efdbdf6..ca14a8557 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -561,6 +561,8 @@ dist_patch_DATA = \ %D%/packages/patches/gcc-strmov-store-file-names.patch \ %D%/packages/patches/gcc-4.9.3-mingw-gthr-default.patch \ %D%/packages/patches/gcc-5.0-libvtv-runpath.patch \ + %D%/packages/patches/gcc-5-source-date-epoch-1.patch \ + %D%/packages/patches/gcc-5-source-date-epoch-2.patch \ %D%/packages/patches/gcc-6-arm-none-eabi-multilib.patch \ %D%/packages/patches/gcc-6-cross-environment-variables.patch \ %D%/packages/patches/gcj-arm-mode.patch \ diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index 0cdef6dec..075642ebd 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -376,7 +376,9 @@ Go. It also includes runtime support libraries for these languages.") "0fihlcy5hnksdxk0sn6bvgnyq8gfrgs8m794b1jxwd1dxinzg3b0")) (patches (search-patches "gcc-arm-bug-71399.patch" "gcc-strmov-store-file-names.patch" - "gcc-5.0-libvtv-runpath.patch")))))) + "gcc-5.0-libvtv-runpath.patch" + "gcc-5-source-date-epoch-1.patch" + "gcc-5-source-date-epoch-2.patch")))))) (define-public gcc-6 (package diff --git a/gnu/packages/patches/gcc-5-source-date-epoch-1.patch b/gnu/packages/patches/gcc-5-source-date-epoch-1.patch new file mode 100644 index 000000000..8c94a026b --- /dev/null +++ b/gnu/packages/patches/gcc-5-source-date-epoch-1.patch @@ -0,0 +1,190 @@ +Make GCC respect SOURCE_DATE_EPOCH in __DATE__ and __TIME__ macros. + +Patch adapted from upstream source repository: + +https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=e3e8c48c4a494d9da741c1c8ea6c4c0b7c4ff934 + +From e3e8c48c4a494d9da741c1c8ea6c4c0b7c4ff934 Mon Sep 17 00:00:00 2001 +From: doko +Date: Thu, 28 Apr 2016 09:12:05 +0000 +Subject: [PATCH] gcc/c-family/ChangeLog: + +diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c +index 1bf5d080034..6f0898a38d7 100644 +--- a/gcc/c-family/c-common.c ++++ b/gcc/c-family/c-common.c +@@ -12318,4 +12318,37 @@ pointer_to_zero_sized_aggr_p (tree t) + return (TYPE_SIZE (t) && integer_zerop (TYPE_SIZE (t))); + } + ++/* Read SOURCE_DATE_EPOCH from environment to have a deterministic ++ timestamp to replace embedded current dates to get reproducible ++ results. Returns -1 if SOURCE_DATE_EPOCH is not defined. */ ++time_t ++get_source_date_epoch () ++{ ++ char *source_date_epoch; ++ long long epoch; ++ char *endptr; ++ ++ source_date_epoch = getenv ("SOURCE_DATE_EPOCH"); ++ if (!source_date_epoch) ++ return (time_t) -1; ++ ++ errno = 0; ++ epoch = strtoll (source_date_epoch, &endptr, 10); ++ if ((errno == ERANGE && (epoch == LLONG_MAX || epoch == LLONG_MIN)) ++ || (errno != 0 && epoch == 0)) ++ fatal_error (UNKNOWN_LOCATION, "environment variable $SOURCE_DATE_EPOCH: " ++ "strtoll: %s\n", xstrerror(errno)); ++ if (endptr == source_date_epoch) ++ fatal_error (UNKNOWN_LOCATION, "environment variable $SOURCE_DATE_EPOCH: " ++ "no digits were found: %s\n", endptr); ++ if (*endptr != '\0') ++ fatal_error (UNKNOWN_LOCATION, "environment variable $SOURCE_DATE_EPOCH: " ++ "trailing garbage: %s\n", endptr); ++ if (epoch < 0) ++ fatal_error (UNKNOWN_LOCATION, "environment variable $SOURCE_DATE_EPOCH: " ++ "value must be nonnegative: %lld \n", epoch); ++ ++ return (time_t) epoch; ++} ++ + #include "gt-c-family-c-common.h" +diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h +index fdb227f85c3..ba0a5d7df50 100644 +--- a/gcc/c-family/c-common.h ++++ b/gcc/c-family/c-common.h +@@ -1437,4 +1437,10 @@ extern bool contains_cilk_spawn_stmt (tree); + extern tree cilk_for_number_of_iterations (tree); + extern bool check_no_cilk (tree, const char *, const char *, + location_t loc = UNKNOWN_LOCATION); ++ ++/* Read SOURCE_DATE_EPOCH from environment to have a deterministic ++ timestamp to replace embedded current dates to get reproducible ++ results. Returns -1 if SOURCE_DATE_EPOCH is not defined. */ ++extern time_t get_source_date_epoch (void); ++ + #endif /* ! GCC_C_COMMON_H */ +diff --git a/gcc/c-family/c-lex.c b/gcc/c-family/c-lex.c +index bb55be8063e..e68471b9d2b 100644 +--- a/gcc/c-family/c-lex.c ++++ b/gcc/c-family/c-lex.c +@@ -402,6 +402,9 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags, + enum cpp_ttype type; + unsigned char add_flags = 0; + enum overflow_type overflow = OT_NONE; ++ time_t source_date_epoch = get_source_date_epoch (); ++ ++ cpp_init_source_date_epoch (parse_in, source_date_epoch); + + timevar_push (TV_CPP); + retry: +diff --git a/gcc/doc/cppenv.texi b/gcc/doc/cppenv.texi +index 100811dc637..3b5317beb53 100644 +--- a/gcc/doc/cppenv.texi ++++ b/gcc/doc/cppenv.texi +@@ -79,4 +79,21 @@ main input file is omitted. + @ifclear cppmanual + @xref{Preprocessor Options}. + @end ifclear ++ ++@item SOURCE_DATE_EPOCH ++ ++If this variable is set, its value specifies a UNIX timestamp to be ++used in replacement of the current date and time in the @code{__DATE__} ++and @code{__TIME__} macros, so that the embedded timestamps become ++reproducible. ++ ++The value of @env{SOURCE_DATE_EPOCH} must be a UNIX timestamp, ++defined as the number of seconds (excluding leap seconds) since ++01 Jan 1970 00:00:00 represented in ASCII, identical to the output of ++@samp{@command{date +%s}}. ++ ++The value should be a known timestamp such as the last modification ++time of the source or package and it should be set by the build ++process. ++ + @end vtable +diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h +index 1b731d1a3ad..7a5481219be 100644 +--- a/libcpp/include/cpplib.h ++++ b/libcpp/include/cpplib.h +@@ -775,6 +775,9 @@ extern void cpp_init_special_builtins (cpp_reader *); + /* Set up built-ins like __FILE__. */ + extern void cpp_init_builtins (cpp_reader *, int); + ++/* Initialize the source_date_epoch value. */ ++extern void cpp_init_source_date_epoch (cpp_reader *, time_t); ++ + /* This is called after options have been parsed, and partially + processed. */ + extern void cpp_post_options (cpp_reader *); +diff --git a/libcpp/init.c b/libcpp/init.c +index 45a4d13ffa3..a8d00f4628b 100644 +--- a/libcpp/init.c ++++ b/libcpp/init.c +@@ -530,6 +530,13 @@ cpp_init_builtins (cpp_reader *pfile, int hosted) + _cpp_define_builtin (pfile, "__OBJC__ 1"); + } + ++/* Initialize the source_date_epoch value. */ ++void ++cpp_init_source_date_epoch (cpp_reader *pfile, time_t source_date_epoch) ++{ ++ pfile->source_date_epoch = source_date_epoch; ++} ++ + /* Sanity-checks are dependent on command-line options, so it is + called as a subroutine of cpp_read_main_file (). */ + #if ENABLE_CHECKING +diff --git a/libcpp/internal.h b/libcpp/internal.h +index c2d08168945..8507eba1747 100644 +--- a/libcpp/internal.h ++++ b/libcpp/internal.h +@@ -502,6 +502,10 @@ struct cpp_reader + const unsigned char *date; + const unsigned char *time; + ++ /* Externally set timestamp to replace current date and time useful for ++ reproducibility. */ ++ time_t source_date_epoch; ++ + /* EOF token, and a token forcing paste avoidance. */ + cpp_token avoid_paste; + cpp_token eof; +diff --git a/libcpp/macro.c b/libcpp/macro.c +index eb32a6f8c98..3f3b278e97d 100644 +--- a/libcpp/macro.c ++++ b/libcpp/macro.c +@@ -350,13 +350,20 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node) + time_t tt; + struct tm *tb = NULL; + +- /* (time_t) -1 is a legitimate value for "number of seconds +- since the Epoch", so we have to do a little dance to +- distinguish that from a genuine error. */ +- errno = 0; +- tt = time(NULL); +- if (tt != (time_t)-1 || errno == 0) +- tb = localtime (&tt); ++ /* Set a reproducible timestamp for __DATE__ and __TIME__ macro ++ usage if SOURCE_DATE_EPOCH is defined. */ ++ if (pfile->source_date_epoch != (time_t) -1) ++ tb = gmtime (&pfile->source_date_epoch); ++ else ++ { ++ /* (time_t) -1 is a legitimate value for "number of seconds ++ since the Epoch", so we have to do a little dance to ++ distinguish that from a genuine error. */ ++ errno = 0; ++ tt = time (NULL); ++ if (tt != (time_t)-1 || errno == 0) ++ tb = localtime (&tt); ++ } + + if (tb) + { +-- +2.11.0 + diff --git a/gnu/packages/patches/gcc-5-source-date-epoch-2.patch b/gnu/packages/patches/gcc-5-source-date-epoch-2.patch new file mode 100644 index 000000000..ed2580679 --- /dev/null +++ b/gnu/packages/patches/gcc-5-source-date-epoch-2.patch @@ -0,0 +1,353 @@ +Continuation of the SOURCE_DATE_EPOCH patch. + +Patch adapted from upstream source repository: + +https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=dfa5c0d3f3e23e4fdb14857a42de376d9ff8601c + +From dfa5c0d3f3e23e4fdb14857a42de376d9ff8601c Mon Sep 17 00:00:00 2001 +From: doko +Date: Wed, 1 Jun 2016 16:42:41 +0000 +Subject: [PATCH] gcc/c-family/ChangeLog: + +diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c +index 6f0898a38d7..efbc78ef218 100644 +--- a/gcc/c-family/c-common.c ++++ b/gcc/c-family/c-common.c +@@ -12321,8 +12321,9 @@ pointer_to_zero_sized_aggr_p (tree t) + /* Read SOURCE_DATE_EPOCH from environment to have a deterministic + timestamp to replace embedded current dates to get reproducible + results. Returns -1 if SOURCE_DATE_EPOCH is not defined. */ ++ + time_t +-get_source_date_epoch () ++cb_get_source_date_epoch (cpp_reader *pfile ATTRIBUTE_UNUSED) + { + char *source_date_epoch; + long long epoch; +@@ -12334,19 +12335,14 @@ get_source_date_epoch () + + errno = 0; + epoch = strtoll (source_date_epoch, &endptr, 10); +- if ((errno == ERANGE && (epoch == LLONG_MAX || epoch == LLONG_MIN)) +- || (errno != 0 && epoch == 0)) +- fatal_error (UNKNOWN_LOCATION, "environment variable $SOURCE_DATE_EPOCH: " +- "strtoll: %s\n", xstrerror(errno)); +- if (endptr == source_date_epoch) +- fatal_error (UNKNOWN_LOCATION, "environment variable $SOURCE_DATE_EPOCH: " +- "no digits were found: %s\n", endptr); +- if (*endptr != '\0') +- fatal_error (UNKNOWN_LOCATION, "environment variable $SOURCE_DATE_EPOCH: " +- "trailing garbage: %s\n", endptr); +- if (epoch < 0) +- fatal_error (UNKNOWN_LOCATION, "environment variable $SOURCE_DATE_EPOCH: " +- "value must be nonnegative: %lld \n", epoch); ++ if (errno != 0 || endptr == source_date_epoch || *endptr != '\0' ++ || epoch < 0 || epoch > MAX_SOURCE_DATE_EPOCH) ++ { ++ error_at (input_location, "environment variable SOURCE_DATE_EPOCH must " ++ "expand to a non-negative integer less than or equal to %wd", ++ MAX_SOURCE_DATE_EPOCH); ++ return (time_t) -1; ++ } + + return (time_t) epoch; + } +diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h +index ba0a5d7df50..977ae9df5ea 100644 +--- a/gcc/c-family/c-common.h ++++ b/gcc/c-family/c-common.h +@@ -1063,6 +1063,16 @@ extern vec *make_tree_vector_copy (const vec *); + c_register_builtin_type. */ + extern GTY(()) tree registered_builtin_types; + ++/* Read SOURCE_DATE_EPOCH from environment to have a deterministic ++ timestamp to replace embedded current dates to get reproducible ++ results. Returns -1 if SOURCE_DATE_EPOCH is not defined. */ ++extern time_t cb_get_source_date_epoch (cpp_reader *pfile); ++ ++/* The value (as a unix timestamp) corresponds to date ++ "Dec 31 9999 23:59:59 UTC", which is the latest date that __DATE__ and ++ __TIME__ can store. */ ++#define MAX_SOURCE_DATE_EPOCH HOST_WIDE_INT_C (253402300799) ++ + /* In c-gimplify.c */ + extern void c_genericize (tree); + extern int c_gimplify_expr (tree *, gimple_seq *, gimple_seq *); +@@ -1438,9 +1448,4 @@ extern tree cilk_for_number_of_iterations (tree); + extern bool check_no_cilk (tree, const char *, const char *, + location_t loc = UNKNOWN_LOCATION); + +-/* Read SOURCE_DATE_EPOCH from environment to have a deterministic +- timestamp to replace embedded current dates to get reproducible +- results. Returns -1 if SOURCE_DATE_EPOCH is not defined. */ +-extern time_t get_source_date_epoch (void); +- + #endif /* ! GCC_C_COMMON_H */ +diff --git a/gcc/c-family/c-lex.c b/gcc/c-family/c-lex.c +index e68471b9d2b..3f78073f640 100644 +--- a/gcc/c-family/c-lex.c ++++ b/gcc/c-family/c-lex.c +@@ -97,6 +97,7 @@ init_c_lex (void) + cb->valid_pch = c_common_valid_pch; + cb->read_pch = c_common_read_pch; + cb->has_attribute = c_common_has_attribute; ++ cb->get_source_date_epoch = cb_get_source_date_epoch; + + /* Set the debug callbacks if we can use them. */ + if ((debug_info_level == DINFO_LEVEL_VERBOSE +@@ -402,9 +403,6 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags, + enum cpp_ttype type; + unsigned char add_flags = 0; + enum overflow_type overflow = OT_NONE; +- time_t source_date_epoch = get_source_date_epoch (); +- +- cpp_init_source_date_epoch (parse_in, source_date_epoch); + + timevar_push (TV_CPP); + retry: +diff --git a/gcc/doc/cppenv.texi b/gcc/doc/cppenv.texi +index 3b5317beb53..7b4cf6adc11 100644 +--- a/gcc/doc/cppenv.texi ++++ b/gcc/doc/cppenv.texi +@@ -81,7 +81,6 @@ main input file is omitted. + @end ifclear + + @item SOURCE_DATE_EPOCH +- + If this variable is set, its value specifies a UNIX timestamp to be + used in replacement of the current date and time in the @code{__DATE__} + and @code{__TIME__} macros, so that the embedded timestamps become +@@ -89,8 +88,9 @@ reproducible. + + The value of @env{SOURCE_DATE_EPOCH} must be a UNIX timestamp, + defined as the number of seconds (excluding leap seconds) since +-01 Jan 1970 00:00:00 represented in ASCII, identical to the output of +-@samp{@command{date +%s}}. ++01 Jan 1970 00:00:00 represented in ASCII; identical to the output of ++@samp{@command{date +%s}} on GNU/Linux and other systems that support the ++@code{%s} extension in the @code{date} command. + + The value should be a known timestamp such as the last modification + time of the source or package and it should be set by the build +diff --git a/gcc/gcc.c b/gcc/gcc.c +index d956c36b151..2709f295734 100644 +--- a/gcc/gcc.c ++++ b/gcc/gcc.c +@@ -3328,6 +3328,29 @@ save_switch (const char *opt, size_t n_args, const char *const *args, + n_switches++; + } + ++/* Set the SOURCE_DATE_EPOCH environment variable to the current time if it is ++ not set already. */ ++ ++static void ++set_source_date_epoch_envvar () ++{ ++ /* Array size is 21 = ceil(log_10(2^64)) + 1 to hold string representations ++ of 64 bit integers. */ ++ char source_date_epoch[21]; ++ time_t tt; ++ ++ errno = 0; ++ tt = time (NULL); ++ if (tt < (time_t) 0 || errno != 0) ++ tt = (time_t) 0; ++ ++ snprintf (source_date_epoch, 21, "%llu", (unsigned long long) tt); ++ /* Using setenv instead of xputenv because we want the variable to remain ++ after finalizing so that it's still set in the second run when using ++ -fcompare-debug. */ ++ setenv ("SOURCE_DATE_EPOCH", source_date_epoch, 0); ++} ++ + /* Handle an option DECODED that is unknown to the option-processing + machinery. */ + +@@ -3628,6 +3651,7 @@ driver_handle_option (struct gcc_options *opts, + else + compare_debug_opt = arg; + save_switch (compare_debug_replacement_opt, 0, NULL, validated, true); ++ set_source_date_epoch_envvar (); + return true; + + case OPT_fdiagnostics_color_: +diff --git a/gcc/testsuite/gcc.dg/cpp/source_date_epoch-1.c b/gcc/testsuite/gcc.dg/cpp/source_date_epoch-1.c +new file mode 100644 +index 00000000000..f6aa1a360ff +--- /dev/null ++++ b/gcc/testsuite/gcc.dg/cpp/source_date_epoch-1.c +@@ -0,0 +1,11 @@ ++/* { dg-do run } */ ++/* { dg-set-compiler-env-var SOURCE_DATE_EPOCH "630333296" } */ ++ ++int ++main(void) ++{ ++ __builtin_printf ("%s %s\n", __DATE__, __TIME__); ++ return 0; ++} ++ ++/* { dg-output "^Dec 22 1989 12:34:56\n$" } */ +diff --git a/gcc/testsuite/gcc.dg/cpp/source_date_epoch-2.c b/gcc/testsuite/gcc.dg/cpp/source_date_epoch-2.c +new file mode 100644 +index 00000000000..ae18362ae87 +--- /dev/null ++++ b/gcc/testsuite/gcc.dg/cpp/source_date_epoch-2.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-set-compiler-env-var SOURCE_DATE_EPOCH "AAA" } */ ++ ++/* Make sure that SOURCE_DATE_EPOCH is only parsed once */ ++ ++int ++main(void) ++{ ++ __builtin_printf ("%s %s\n", __DATE__, __TIME__); /* { dg-error "SOURCE_DATE_EPOCH must expand" } */ ++ __builtin_printf ("%s %s\n", __DATE__, __TIME__); ++ return 0; ++} +diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp +index 4fa433d9954..7656b2254a1 100644 +--- a/gcc/testsuite/lib/gcc-dg.exp ++++ b/gcc/testsuite/lib/gcc-dg.exp +@@ -324,6 +324,38 @@ proc restore-target-env-var { } { + } + } + ++proc dg-set-compiler-env-var { args } { ++ global set_compiler_env_var ++ global saved_compiler_env_var ++ if { [llength $args] != 3 } { ++ error "dg-set-compiler-env-var: need two arguments" ++ return ++ } ++ set var [lindex $args 1] ++ set value [lindex $args 2] ++ if [info exists ::env($var)] { ++ lappend saved_compiler_env_var [list $var 1 $::env($var)] ++ } else { ++ lappend saved_compiler_env_var [list $var 0] ++ } ++ setenv $var $value ++ lappend set_compiler_env_var [list $var $value] ++} ++ ++proc restore-compiler-env-var { } { ++ global saved_compiler_env_var ++ for { set env_vari [llength $saved_compiler_env_var] } { ++ [incr env_vari -1] >= 0 } {} { ++ set env_var [lindex $saved_compiler_env_var $env_vari] ++ set var [lindex $env_var 0] ++ if [lindex $env_var 1] { ++ setenv $var [lindex $env_var 2] ++ } else { ++ unsetenv $var ++ } ++ } ++} ++ + # Utility routines. + + # +@@ -785,6 +817,11 @@ if { [info procs saved-dg-test] == [list] } { + if [info exists set_target_env_var] { + unset set_target_env_var + } ++ if [info exists set_compiler_env_var] { ++ restore-compiler-env-var ++ unset set_compiler_env_var ++ unset saved_compiler_env_var ++ } + unset_timeout_vars + if [info exists compiler_conditional_xfail_data] { + unset compiler_conditional_xfail_data +diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h +index 7a5481219be..867aeebc39f 100644 +--- a/libcpp/include/cpplib.h ++++ b/libcpp/include/cpplib.h +@@ -585,6 +585,9 @@ struct cpp_callbacks + + /* Callback that can change a user builtin into normal macro. */ + bool (*user_builtin_macro) (cpp_reader *, cpp_hashnode *); ++ ++ /* Callback to parse SOURCE_DATE_EPOCH from environment. */ ++ time_t (*get_source_date_epoch) (cpp_reader *); + }; + + #ifdef VMS +@@ -775,9 +778,6 @@ extern void cpp_init_special_builtins (cpp_reader *); + /* Set up built-ins like __FILE__. */ + extern void cpp_init_builtins (cpp_reader *, int); + +-/* Initialize the source_date_epoch value. */ +-extern void cpp_init_source_date_epoch (cpp_reader *, time_t); +- + /* This is called after options have been parsed, and partially + processed. */ + extern void cpp_post_options (cpp_reader *); +diff --git a/libcpp/init.c b/libcpp/init.c +index a8d00f4628b..61c9bbbf945 100644 +--- a/libcpp/init.c ++++ b/libcpp/init.c +@@ -254,6 +254,9 @@ cpp_create_reader (enum c_lang lang, cpp_hash_table *table, + /* Do not force token locations by default. */ + pfile->forced_token_location_p = NULL; + ++ /* Initialize source_date_epoch to -2 (not yet set). */ ++ pfile->source_date_epoch = (time_t) -2; ++ + /* The expression parser stack. */ + _cpp_expand_op_stack (pfile); + +@@ -530,13 +533,6 @@ cpp_init_builtins (cpp_reader *pfile, int hosted) + _cpp_define_builtin (pfile, "__OBJC__ 1"); + } + +-/* Initialize the source_date_epoch value. */ +-void +-cpp_init_source_date_epoch (cpp_reader *pfile, time_t source_date_epoch) +-{ +- pfile->source_date_epoch = source_date_epoch; +-} +- + /* Sanity-checks are dependent on command-line options, so it is + called as a subroutine of cpp_read_main_file (). */ + #if ENABLE_CHECKING +diff --git a/libcpp/internal.h b/libcpp/internal.h +index 8507eba1747..226ae328e76 100644 +--- a/libcpp/internal.h ++++ b/libcpp/internal.h +@@ -503,7 +503,8 @@ struct cpp_reader + const unsigned char *time; + + /* Externally set timestamp to replace current date and time useful for +- reproducibility. */ ++ reproducibility. It should be initialized to -2 (not yet set) and ++ set to -1 to disable it or to a non-negative value to enable it. */ + time_t source_date_epoch; + + /* EOF token, and a token forcing paste avoidance. */ +diff --git a/libcpp/macro.c b/libcpp/macro.c +index 3f3b278e97d..756c7c6e0c6 100644 +--- a/libcpp/macro.c ++++ b/libcpp/macro.c +@@ -351,9 +351,13 @@ _cpp_builtin_macro_text (cpp_reader *pfile, cpp_hashnode *node) + struct tm *tb = NULL; + + /* Set a reproducible timestamp for __DATE__ and __TIME__ macro +- usage if SOURCE_DATE_EPOCH is defined. */ +- if (pfile->source_date_epoch != (time_t) -1) +- tb = gmtime (&pfile->source_date_epoch); ++ if SOURCE_DATE_EPOCH is defined. */ ++ if (pfile->source_date_epoch == (time_t) -2 ++ && pfile->cb.get_source_date_epoch != NULL) ++ pfile->source_date_epoch = pfile->cb.get_source_date_epoch (pfile); ++ ++ if (pfile->source_date_epoch >= (time_t) 0) ++ tb = gmtime (&pfile->source_date_epoch); + else + { + /* (time_t) -1 is a legitimate value for "number of seconds +-- +2.11.0 + -- cgit v1.3 From c134959b969303ae0c49a63399e6908c91eaa974 Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Wed, 25 Jan 2017 13:03:04 -0500 Subject: gnu: gd: Incorporate grafted changes. * gnu/packages/gd.scm (gd)[replacement]: Remove field. [source]: Update to 2.2.4. Remove patches 'gd-CVE-2016-7568.patch' and 'gd-CVE-2016-8670.patch'. [arguments]: New field. (gd-2.2.4): Remove variable. * gnu/packages/patches/gd-CVE-2016-7568.patch, gnu/packages/patches/gd-CVE-2016-8670.patch: Delete files. * gnu/local.mk (dist_patch_DATA): Remove them. --- gnu/local.mk | 2 -- gnu/packages/gd.scm | 46 +++++++++-------------------- gnu/packages/patches/gd-CVE-2016-7568.patch | 44 --------------------------- gnu/packages/patches/gd-CVE-2016-8670.patch | 38 ------------------------ 4 files changed, 14 insertions(+), 116 deletions(-) delete mode 100644 gnu/packages/patches/gd-CVE-2016-7568.patch delete mode 100644 gnu/packages/patches/gd-CVE-2016-8670.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 9d835a825..19048561d 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -569,8 +569,6 @@ dist_patch_DATA = \ %D%/packages/patches/gcc-6-arm-none-eabi-multilib.patch \ %D%/packages/patches/gcc-6-cross-environment-variables.patch \ %D%/packages/patches/gcj-arm-mode.patch \ - %D%/packages/patches/gd-CVE-2016-7568.patch \ - %D%/packages/patches/gd-CVE-2016-8670.patch \ %D%/packages/patches/gd-fix-chunk-size-on-boundaries.patch \ %D%/packages/patches/gd-fix-gd2-read-test.patch \ %D%/packages/patches/gd-fix-tests-on-i686.patch \ diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm index 713f7ae91..1c2be119b 100644 --- a/gnu/packages/gd.scm +++ b/gnu/packages/gd.scm @@ -36,12 +36,11 @@ (define-public gd (package (name "gd") - (replacement gd-2.2.4) ;; Note: With libgd.org now pointing to github.com, genuine old ;; tarballs are no longer available. Notably, versions 2.0.x are ;; missing. - (version "2.2.3") + (version "2.2.4") (source (origin (method url-fetch) @@ -50,12 +49,21 @@ version "/libgd-" version ".tar.xz")) (sha256 (base32 - "0g3xz8jpz1pl2zzmssglrpa9nxiaa7rmcmvgpbrjz8k9cyynqsvl")) - (patches (search-patches "gd-CVE-2016-7568.patch" - "gd-CVE-2016-8670.patch" - "gd-fix-gd2-read-test.patch" + "1rp4v7n1dq38b92kl7gkvpvqqkw7nvdfnz6d5kip5klkxfki6zqk")) + (patches (search-patches "gd-fix-gd2-read-test.patch" "gd-fix-tests-on-i686.patch")))) (build-system gnu-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + ;; This test is known to fail on i686-linux: + ;; https://github.com/libgd/libgd/issues/359 + ;; TODO Replace this substitution with an upstream bug fix. + (add-after 'unpack 'disable-failing-test + (lambda _ + (substitute* "tests/gdimagegrayscale/basic.c" + (("return gdNumFailures\\(\\)") + "return 0"))))))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs @@ -78,32 +86,6 @@ most common applications of GD involve website development.") "See COPYING file in the distribution.")) (properties '((cpe-name . "libgd"))))) -(define gd-2.2.4 - (package - (inherit gd) - (version "2.2.4") - (source - (origin - (method url-fetch) - (uri (string-append "https://github.com/libgd/libgd/releases/download/" - "gd-" version "/libgd-" version ".tar.xz")) - (patches (search-patches "gd-fix-gd2-read-test.patch" - "gd-fix-tests-on-i686.patch")) - (sha256 - (base32 - "1rp4v7n1dq38b92kl7gkvpvqqkw7nvdfnz6d5kip5klkxfki6zqk")))) - (arguments - `(#:phases - (modify-phases %standard-phases - ;; This test is known to fail on i686-linux: - ;; https://github.com/libgd/libgd/issues/359 - ;; TODO Replace this substitution with an upstream bug fix. - (add-after 'unpack 'disable-failing-test - (lambda _ - (substitute* "tests/gdimagegrayscale/basic.c" - (("return gdNumFailures\\(\\)") - "return 0"))))))))) - (define-public perl-gd (package (name "perl-gd") diff --git a/gnu/packages/patches/gd-CVE-2016-7568.patch b/gnu/packages/patches/gd-CVE-2016-7568.patch deleted file mode 100644 index 6a1a63296..000000000 --- a/gnu/packages/patches/gd-CVE-2016-7568.patch +++ /dev/null @@ -1,44 +0,0 @@ -Fix CVE-2016-7568 (integer overflow in gdImageWebpCtx()): - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-7568 - -Patch copied from upstream source repository: - -https://github.com/libgd/libgd/commit/2806adfdc27a94d333199345394d7c302952b95f - -From 2806adfdc27a94d333199345394d7c302952b95f Mon Sep 17 00:00:00 2001 -From: trylab -Date: Tue, 6 Sep 2016 18:35:32 +0800 -Subject: [PATCH] Fix integer overflow in gdImageWebpCtx - -Integer overflow can be happened in expression gdImageSX(im) * 4 * -gdImageSY(im). It could lead to heap buffer overflow in the following -code. This issue has been reported to the PHP Bug Tracking System. The -proof-of-concept file will be supplied some days later. This issue was -discovered by Ke Liu of Tencent's Xuanwu LAB. ---- - src/gd_webp.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/src/gd_webp.c b/src/gd_webp.c -index 8eb4dee..9886399 100644 ---- a/src/gd_webp.c -+++ b/src/gd_webp.c -@@ -199,6 +199,14 @@ BGD_DECLARE(void) gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quality) - quality = 80; - } - -+ if (overflow2(gdImageSX(im), 4)) { -+ return; -+ } -+ -+ if (overflow2(gdImageSX(im) * 4, gdImageSY(im))) { -+ return; -+ } -+ - argb = (uint8_t *)gdMalloc(gdImageSX(im) * 4 * gdImageSY(im)); - if (!argb) { - return; --- -2.10.0 - diff --git a/gnu/packages/patches/gd-CVE-2016-8670.patch b/gnu/packages/patches/gd-CVE-2016-8670.patch deleted file mode 100644 index 39ee99ac3..000000000 --- a/gnu/packages/patches/gd-CVE-2016-8670.patch +++ /dev/null @@ -1,38 +0,0 @@ -Fix CVE-2016-8670 (buffer overflow in dynamicGetbuf()): - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-8670 -http://seclists.org/oss-sec/2016/q4/138 - -Patch copied from upstream source repository: - -https://github.com/libgd/libgd/commit/53110871935244816bbb9d131da0bccff734bfe9 - -From 53110871935244816bbb9d131da0bccff734bfe9 Mon Sep 17 00:00:00 2001 -From: "Christoph M. Becker" -Date: Wed, 12 Oct 2016 11:15:32 +0200 -Subject: [PATCH] Avoid potentially dangerous signed to unsigned conversion - -We make sure to never pass a negative `rlen` as size to memcpy(). See -also . - -Patch provided by Emmanuel Law. ---- - src/gd_io_dp.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/gd_io_dp.c b/src/gd_io_dp.c -index 135eda3..228bfa5 100644 ---- a/src/gd_io_dp.c -+++ b/src/gd_io_dp.c -@@ -276,7 +276,7 @@ static int dynamicGetbuf(gdIOCtxPtr ctx, void *buf, int len) - if(remain >= len) { - rlen = len; - } else { -- if(remain == 0) { -+ if(remain <= 0) { - /* 2.0.34: EOF is incorrect. We use 0 for - * errors and EOF, just like fileGetbuf, - * which is a simple fread() wrapper. --- -2.10.1 - -- cgit v1.3 From 82a7a8c6671cb50a7886983af0c2d58d1cf62bc9 Mon Sep 17 00:00:00 2001 From: Manolis Ragkousis Date: Wed, 18 Jan 2017 20:48:27 +0200 Subject: gnu: coreutils: Fix cross-compilation. * gnu/packages/patches/coreutils-fix-cross-compilation.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/base.scm (coreutils)[source]: Use it. --- gnu/local.mk | 1 + gnu/packages/base.scm | 3 ++- .../patches/coreutils-fix-cross-compilation.patch | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/coreutils-fix-cross-compilation.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 19048561d..8c915741b 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -510,6 +510,7 @@ dist_patch_DATA = \ %D%/packages/patches/clx-remove-demo.patch \ %D%/packages/patches/cmake-fix-tests.patch \ %D%/packages/patches/coda-use-system-libs.patch \ + %D%/packages/patches/coreutils-fix-cross-compilation.patch \ %D%/packages/patches/cpio-CVE-2016-2037.patch \ %D%/packages/patches/cpufrequtils-fix-aclocal.patch \ %D%/packages/patches/cracklib-CVE-2016-6318.patch \ diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index f6946f3c9..703274d0c 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -291,7 +291,8 @@ used to apply commands with arbitrarily long arguments.") version ".tar.xz")) (sha256 (base32 - "13lspazc7xkviy93qz7ks9jv4sldvgmwpq36ghrbrqpq93br8phm")))) + "13lspazc7xkviy93qz7ks9jv4sldvgmwpq36ghrbrqpq93br8phm")) + (patches (search-patches "coreutils-fix-cross-compilation.patch")))) (build-system gnu-build-system) (inputs `(("acl" ,acl) ; TODO: add SELinux ("gmp" ,gmp) ;bignums in 'expr', yay! diff --git a/gnu/packages/patches/coreutils-fix-cross-compilation.patch b/gnu/packages/patches/coreutils-fix-cross-compilation.patch new file mode 100644 index 000000000..3f0d35c33 --- /dev/null +++ b/gnu/packages/patches/coreutils-fix-cross-compilation.patch @@ -0,0 +1,15 @@ +Coreutils fails to cross compile for other platforms because cu_install_program +is not being evaluated properly. This patch fixes it. +See +--- a/Makefile.in ++++ b/Makefile.in +@@ -5023,7 +5023,7 @@ pr = progs-readme + @CROSS_COMPILING_FALSE@cu_install_program = src/ginstall + + # Use the just-built 'ginstall', when not cross-compiling. +-@CROSS_COMPILING_TRUE@cu_install_program = @INSTALL_PROGRAM@ ++@CROSS_COMPILING_TRUE@cu_install_program := @INSTALL@ + info_TEXINFOS = doc/coreutils.texi + doc_coreutils_TEXINFOS = \ + doc/perm.texi \ + -- cgit v1.3 From e83ef684fc1b490cd54612339a909203d5b94fa4 Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Thu, 2 Feb 2017 10:48:53 -0500 Subject: gnu: libevent-2.0: Include CVE IDs in patches. * gnu/packages/patches/libevent-2.0-evdns-fix-remote-stack-overread.patch, gnu/packages/patches/libevent-2.0-evutil-fix-buffer-overflow.patch, gnu/packages/patches/libevent-2.0-evdns-fix-searching-empty-hostnames.patch: Rename to ... * gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch, gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch, gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch: ... new files. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. * gnu/packages/libevent.scm (libevent-2.0)[sources]: Likewise. --- gnu/local.mk | 6 ++-- gnu/packages/libevent.scm | 6 ++-- .../patches/libevent-2.0-CVE-2016-10195.patch | 41 +++++++++++++++++++++ .../patches/libevent-2.0-CVE-2016-10196.patch | 41 +++++++++++++++++++++ .../patches/libevent-2.0-CVE-2016-10197.patch | 39 ++++++++++++++++++++ ...event-2.0-evdns-fix-remote-stack-overread.patch | 42 ---------------------- ...t-2.0-evdns-fix-searching-empty-hostnames.patch | 40 --------------------- .../libevent-2.0-evutil-fix-buffer-overflow.patch | 42 ---------------------- 8 files changed, 127 insertions(+), 130 deletions(-) create mode 100644 gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch create mode 100644 gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch create mode 100644 gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch delete mode 100644 gnu/packages/patches/libevent-2.0-evdns-fix-remote-stack-overread.patch delete mode 100644 gnu/packages/patches/libevent-2.0-evdns-fix-searching-empty-hostnames.patch delete mode 100644 gnu/packages/patches/libevent-2.0-evutil-fix-buffer-overflow.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index e1b478014..ad3be4b13 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -668,9 +668,9 @@ dist_patch_DATA = \ %D%/packages/patches/libdrm-symbol-check.patch \ %D%/packages/patches/libepoxy-gl-null-checks.patch \ %D%/packages/patches/libevent-dns-tests.patch \ - %D%/packages/patches/libevent-2.0-evdns-fix-remote-stack-overread.patch \ - %D%/packages/patches/libevent-2.0-evdns-fix-searching-empty-hostnames.patch \ - %D%/packages/patches/libevent-2.0-evutil-fix-buffer-overflow.patch \ + %D%/packages/patches/libevent-2.0-CVE-2016-10195.patch \ + %D%/packages/patches/libevent-2.0-CVE-2016-10196.patch \ + %D%/packages/patches/libevent-2.0-CVE-2016-10197.patch \ %D%/packages/patches/libevent-2.1-dns-tests.patch \ %D%/packages/patches/libevent-2.1-skip-failing-test.patch \ %D%/packages/patches/libextractor-ffmpeg-3.patch \ diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm index bef09f953..f26ce6338 100644 --- a/gnu/packages/libevent.scm +++ b/gnu/packages/libevent.scm @@ -80,9 +80,9 @@ loop.") "18qz9qfwrkakmazdlwxvjmw8p76g70n3faikwvdwznns1agw9hki")) (patches (search-patches "libevent-dns-tests.patch" - "libevent-2.0-evdns-fix-remote-stack-overread.patch" - "libevent-2.0-evutil-fix-buffer-overflow.patch" - "libevent-2.0-evdns-fix-searching-empty-hostnames.patch")))))) + "libevent-2.0-CVE-2016-10195.patch" + "libevent-2.0-CVE-2016-10196.patch" + "libevent-2.0-CVE-2016-10197.patch")))))) (define-public libev (package diff --git a/gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch b/gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch new file mode 100644 index 000000000..bffe2c454 --- /dev/null +++ b/gnu/packages/patches/libevent-2.0-CVE-2016-10195.patch @@ -0,0 +1,41 @@ +Fix CVE-2016-10195 (buffer overread in libevent's DNS code): + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10195 +https://github.com/libevent/libevent/issues/317 + +Patch copied from upstream source repository: + +https://github.com/libevent/libevent/commit/96f64a022014a208105ead6c8a7066018449d86d + +From 3c570970516f48da35f42fef98276531fcc0abaa Mon Sep 17 00:00:00 2001 +From: Azat Khuzhin +Date: Mon, 1 Feb 2016 17:32:09 +0300 +Subject: [PATCH] evdns: name_parse(): fix remote stack overread + +--- + evdns.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/evdns.c b/evdns.c +index 60b10485..137c24ea 100644 +--- a/evdns.c ++++ b/evdns.c +@@ -960,7 +960,6 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, int name_out_len) { + + for (;;) { + u8 label_len; +- if (j >= length) return -1; + GET8(label_len); + if (!label_len) break; + if (label_len & 0xc0) { +@@ -981,6 +980,7 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, int name_out_len) { + *cp++ = '.'; + } + if (cp + label_len >= end) return -1; ++ if (j + label_len > length) return -1; + memcpy(cp, packet + j, label_len); + cp += label_len; + j += label_len; +-- +2.11.0 + diff --git a/gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch b/gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch new file mode 100644 index 000000000..03f96e938 --- /dev/null +++ b/gnu/packages/patches/libevent-2.0-CVE-2016-10196.patch @@ -0,0 +1,41 @@ +Fix CVE-2016-10196 (buffer overflow in evutil): + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10196 +https://github.com/libevent/libevent/issues/318 + +Patch copied from upstream source repository: + +https://github.com/libevent/libevent/commit/329acc18a0768c21ba22522f01a5c7f46cacc4d5 + +From 28bdc2f3f62259d21ccaf7be2b60ef0a53e6f342 Mon Sep 17 00:00:00 2001 +From: Azat Khuzhin +Date: Sun, 31 Jan 2016 00:57:16 +0300 +Subject: [PATCH] evutil_parse_sockaddr_port(): fix buffer overflow + +--- + evutil.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/evutil.c b/evutil.c +index 33445170..e2dfe6e4 100644 +--- a/evutil.c ++++ b/evutil.c +@@ -1808,12 +1808,12 @@ evutil_parse_sockaddr_port(const char *ip_as_string, struct sockaddr *out, int * + + cp = strchr(ip_as_string, ':'); + if (*ip_as_string == '[') { +- int len; ++ size_t len; + if (!(cp = strchr(ip_as_string, ']'))) { + return -1; + } +- len = (int) ( cp-(ip_as_string + 1) ); +- if (len > (int)sizeof(buf)-1) { ++ len = ( cp-(ip_as_string + 1) ); ++ if (len > sizeof(buf)-1) { + return -1; + } + memcpy(buf, ip_as_string+1, len); +-- +2.11.0 + diff --git a/gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch b/gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch new file mode 100644 index 000000000..c62a32862 --- /dev/null +++ b/gnu/packages/patches/libevent-2.0-CVE-2016-10197.patch @@ -0,0 +1,39 @@ +Fix CVE-2016-10197 (out of bounds read on empty hostnames in evdns): + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10197 +https://github.com/libevent/libevent/issues/332 + +Patch copied from upstream source repository: + +https://github.com/libevent/libevent/commit/ec65c42052d95d2c23d1d837136d1cf1d9ecef9e + +From a0305cec166a5bc89f1eb362510cc4cd25ecc0bc Mon Sep 17 00:00:00 2001 +From: Azat Khuzhin +Date: Fri, 25 Mar 2016 00:33:47 +0300 +Subject: [PATCH] evdns: fix searching empty hostnames + +--- + evdns.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/evdns.c b/evdns.c +index 137c24ea..6191c677 100644 +--- a/evdns.c ++++ b/evdns.c +@@ -3122,9 +3122,12 @@ search_set_from_hostname(struct evdns_base *base) { + static char * + search_make_new(const struct search_state *const state, int n, const char *const base_name) { + const size_t base_len = strlen(base_name); +- const char need_to_append_dot = base_name[base_len - 1] == '.' ? 0 : 1; ++ char need_to_append_dot; + struct search_domain *dom; + ++ if (!base_len) return NULL; ++ need_to_append_dot = base_name[base_len - 1] == '.' ? 0 : 1; ++ + for (dom = state->head; dom; dom = dom->next) { + if (!n--) { + /* this is the postfix we want */ +-- +2.11.0 + diff --git a/gnu/packages/patches/libevent-2.0-evdns-fix-remote-stack-overread.patch b/gnu/packages/patches/libevent-2.0-evdns-fix-remote-stack-overread.patch deleted file mode 100644 index f1907d53e..000000000 --- a/gnu/packages/patches/libevent-2.0-evdns-fix-remote-stack-overread.patch +++ /dev/null @@ -1,42 +0,0 @@ -Fix buffer overread in libevents DNS code. - -Upstream bug report: - -https://github.com/libevent/libevent/issues/317 - -Patch copied from upstream source repository: - -https://github.com/libevent/libevent/commit/96f64a022014a208105ead6c8a7066018449d86d - -From 3c570970516f48da35f42fef98276531fcc0abaa Mon Sep 17 00:00:00 2001 -From: Azat Khuzhin -Date: Mon, 1 Feb 2016 17:32:09 +0300 -Subject: [PATCH] evdns: name_parse(): fix remote stack overread - ---- - evdns.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/evdns.c b/evdns.c -index 60b10485..137c24ea 100644 ---- a/evdns.c -+++ b/evdns.c -@@ -960,7 +960,6 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, int name_out_len) { - - for (;;) { - u8 label_len; -- if (j >= length) return -1; - GET8(label_len); - if (!label_len) break; - if (label_len & 0xc0) { -@@ -981,6 +980,7 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, int name_out_len) { - *cp++ = '.'; - } - if (cp + label_len >= end) return -1; -+ if (j + label_len > length) return -1; - memcpy(cp, packet + j, label_len); - cp += label_len; - j += label_len; --- -2.11.0 - diff --git a/gnu/packages/patches/libevent-2.0-evdns-fix-searching-empty-hostnames.patch b/gnu/packages/patches/libevent-2.0-evdns-fix-searching-empty-hostnames.patch deleted file mode 100644 index c4ad0a1a4..000000000 --- a/gnu/packages/patches/libevent-2.0-evdns-fix-searching-empty-hostnames.patch +++ /dev/null @@ -1,40 +0,0 @@ -Fix OOB read on empty hostnames in evdns. - -Upstream bug report: - -https://github.com/libevent/libevent/issues/332 - -Patch copied from upstream source repository: - -https://github.com/libevent/libevent/commit/ec65c42052d95d2c23d1d837136d1cf1d9ecef9e - -From a0305cec166a5bc89f1eb362510cc4cd25ecc0bc Mon Sep 17 00:00:00 2001 -From: Azat Khuzhin -Date: Fri, 25 Mar 2016 00:33:47 +0300 -Subject: [PATCH] evdns: fix searching empty hostnames - ---- - evdns.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/evdns.c b/evdns.c -index 137c24ea..6191c677 100644 ---- a/evdns.c -+++ b/evdns.c -@@ -3122,9 +3122,12 @@ search_set_from_hostname(struct evdns_base *base) { - static char * - search_make_new(const struct search_state *const state, int n, const char *const base_name) { - const size_t base_len = strlen(base_name); -- const char need_to_append_dot = base_name[base_len - 1] == '.' ? 0 : 1; -+ char need_to_append_dot; - struct search_domain *dom; - -+ if (!base_len) return NULL; -+ need_to_append_dot = base_name[base_len - 1] == '.' ? 0 : 1; -+ - for (dom = state->head; dom; dom = dom->next) { - if (!n--) { - /* this is the postfix we want */ --- -2.11.0 - diff --git a/gnu/packages/patches/libevent-2.0-evutil-fix-buffer-overflow.patch b/gnu/packages/patches/libevent-2.0-evutil-fix-buffer-overflow.patch deleted file mode 100644 index 4d16a4b91..000000000 --- a/gnu/packages/patches/libevent-2.0-evutil-fix-buffer-overflow.patch +++ /dev/null @@ -1,42 +0,0 @@ -Fix buffer overflow in evutil. - -Upstream bug report: - -https://github.com/libevent/libevent/issues/318 - -Patch copied from upstream source repository: - -https://github.com/libevent/libevent/commit/329acc18a0768c21ba22522f01a5c7f46cacc4d5 - -From 28bdc2f3f62259d21ccaf7be2b60ef0a53e6f342 Mon Sep 17 00:00:00 2001 -From: Azat Khuzhin -Date: Sun, 31 Jan 2016 00:57:16 +0300 -Subject: [PATCH] evutil_parse_sockaddr_port(): fix buffer overflow - ---- - evutil.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/evutil.c b/evutil.c -index 33445170..e2dfe6e4 100644 ---- a/evutil.c -+++ b/evutil.c -@@ -1808,12 +1808,12 @@ evutil_parse_sockaddr_port(const char *ip_as_string, struct sockaddr *out, int * - - cp = strchr(ip_as_string, ':'); - if (*ip_as_string == '[') { -- int len; -+ size_t len; - if (!(cp = strchr(ip_as_string, ']'))) { - return -1; - } -- len = (int) ( cp-(ip_as_string + 1) ); -- if (len > (int)sizeof(buf)-1) { -+ len = ( cp-(ip_as_string + 1) ); -+ if (len > sizeof(buf)-1) { - return -1; - } - memcpy(buf, ip_as_string+1, len); --- -2.11.0 - -- cgit v1.3 From ed7732bc625585e6ec51c6f60716c8a6a916082b Mon Sep 17 00:00:00 2001 From: Alex Vong Date: Sat, 11 Feb 2017 22:58:19 +0800 Subject: gnu: lcms: Mention CVE-2016-10165. * gnu/packages/patches/lcms-fix-out-of-bounds-read.patch: Rename to ... * gnu/packages/patches/lcms-CVE-2016-10165.patch: ... this. * gnu/local.mk (dist_patch_DATA): Adjust. * gnu/packages/ghostscript.scm (lcms)[source]: Use renamed patch. Signed-off-by: Marius Bakke --- gnu/local.mk | 3 +- gnu/packages/ghostscript.scm | 2 +- gnu/packages/patches/lcms-CVE-2016-10165.patch | 36 ++++++++++++++++++++++ .../patches/lcms-fix-out-of-bounds-read.patch | 34 -------------------- 4 files changed, 39 insertions(+), 36 deletions(-) create mode 100644 gnu/packages/patches/lcms-CVE-2016-10165.patch delete mode 100644 gnu/packages/patches/lcms-fix-out-of-bounds-read.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 753c0ef05..af9dfff0f 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -9,6 +9,7 @@ # Copyright © 2016 Adonay "adfeno" Felipe Nogueira # Copyright © 2016, 2017 Ricardo Wurmus # Copyright © 2016 Ben Woodcroft +# Copyright © 2016, 2017 Alex Vong # # This file is part of GNU Guix. # @@ -656,7 +657,7 @@ dist_patch_DATA = \ %D%/packages/patches/kobodeluxe-midicon-segmentation-fault.patch \ %D%/packages/patches/kobodeluxe-graphics-window-signed-char.patch \ %D%/packages/patches/laby-make-install.patch \ - %D%/packages/patches/lcms-fix-out-of-bounds-read.patch \ + %D%/packages/patches/lcms-CVE-2016-10165.patch \ %D%/packages/patches/ldc-disable-tests.patch \ %D%/packages/patches/ldc-1.1.0-disable-dmd-tests.patch \ %D%/packages/patches/ldc-1.1.0-disable-phobos-tests.patch \ diff --git a/gnu/packages/ghostscript.scm b/gnu/packages/ghostscript.scm index 4b8e62348..826a2fc37 100644 --- a/gnu/packages/ghostscript.scm +++ b/gnu/packages/ghostscript.scm @@ -45,7 +45,7 @@ (method url-fetch) (uri (string-append "mirror://sourceforge/lcms/lcms/" version "/lcms2-" version ".tar.gz")) - (patches (search-patches "lcms-fix-out-of-bounds-read.patch")) + (patches (search-patches "lcms-CVE-2016-10165.patch")) (sha256 (base32 "08pvl289g0mbznzx5l6ibhaldsgx41kwvdn2c974ga9fkli2pl36")))) (build-system gnu-build-system) diff --git a/gnu/packages/patches/lcms-CVE-2016-10165.patch b/gnu/packages/patches/lcms-CVE-2016-10165.patch new file mode 100644 index 000000000..fa4d75c9e --- /dev/null +++ b/gnu/packages/patches/lcms-CVE-2016-10165.patch @@ -0,0 +1,36 @@ +Fix CVE-2016-10165, an out-of-bounds heap read in Type_MLU_Read(): + +https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10165 +http://seclists.org/oss-sec/2016/q3/288 +https://bugzilla.redhat.com/show_bug.cgi?id=1367357 +https://security-tracker.debian.org/tracker/CVE-2016-10165 + +Patch copied from upstream source repository: + +https://github.com/mm2/Little-CMS/commit/5ca71a7bc18b6897ab21d815d15e218e204581e2 + +From 5ca71a7bc18b6897ab21d815d15e218e204581e2 Mon Sep 17 00:00:00 2001 +From: Marti +Date: Mon, 15 Aug 2016 23:31:39 +0200 +Subject: [PATCH] Added an extra check to MLU bounds + +Thanks to Ibrahim el-sayed for spotting the bug +--- + src/cmstypes.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/cmstypes.c b/src/cmstypes.c +index cb61860..c7328b9 100644 +--- a/src/cmstypes.c ++++ b/src/cmstypes.c +@@ -1460,6 +1460,7 @@ void *Type_MLU_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsU + + // Check for overflow + if (Offset < (SizeOfHeader + 8)) goto Error; ++ if ((Offset + Len) > SizeOfTag + 8) goto Error; + + // True begin of the string + BeginOfThisString = Offset - SizeOfHeader - 8; +-- +2.11.0 + diff --git a/gnu/packages/patches/lcms-fix-out-of-bounds-read.patch b/gnu/packages/patches/lcms-fix-out-of-bounds-read.patch deleted file mode 100644 index d9f7ac6a3..000000000 --- a/gnu/packages/patches/lcms-fix-out-of-bounds-read.patch +++ /dev/null @@ -1,34 +0,0 @@ -Fix an out-of-bounds heap read in Type_MLU_Read(): - -http://seclists.org/oss-sec/2016/q3/288 -https://bugzilla.redhat.com/show_bug.cgi?id=1367357 - -Patch copied from upstream source repository: - -https://github.com/mm2/Little-CMS/commit/5ca71a7bc18b6897ab21d815d15e218e204581e2 - -From 5ca71a7bc18b6897ab21d815d15e218e204581e2 Mon Sep 17 00:00:00 2001 -From: Marti -Date: Mon, 15 Aug 2016 23:31:39 +0200 -Subject: [PATCH] Added an extra check to MLU bounds - -Thanks to Ibrahim el-sayed for spotting the bug ---- - src/cmstypes.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/cmstypes.c b/src/cmstypes.c -index cb61860..c7328b9 100644 ---- a/src/cmstypes.c -+++ b/src/cmstypes.c -@@ -1460,6 +1460,7 @@ void *Type_MLU_Read(struct _cms_typehandler_struct* self, cmsIOHANDLER* io, cmsU - - // Check for overflow - if (Offset < (SizeOfHeader + 8)) goto Error; -+ if ((Offset + Len) > SizeOfTag + 8) goto Error; - - // True begin of the string - BeginOfThisString = Offset - SizeOfHeader - 8; --- -2.11.0 - -- cgit v1.3 From b5efd14a9add1bcb4a44fa5b9c1b47706f3df9da Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 14 Feb 2017 00:08:42 +0100 Subject: gnu: guile: Update to 2.0.14. * gnu/packages/guile.scm (guile-2.0): Update to 2.0.14 [source]: Remove 'patches'. * gnu/packages/patches/guile-repl-server-test.patch: Remove. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. --- gnu/local.mk | 1 - gnu/packages/guile.scm | 5 +-- gnu/packages/patches/guile-repl-server-test.patch | 48 ----------------------- 3 files changed, 2 insertions(+), 52 deletions(-) delete mode 100644 gnu/packages/patches/guile-repl-server-test.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index af9dfff0f..2c513dee5 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -612,7 +612,6 @@ dist_patch_DATA = \ %D%/packages/patches/guile-linux-syscalls.patch \ %D%/packages/patches/guile-present-coding.patch \ %D%/packages/patches/guile-relocatable.patch \ - %D%/packages/patches/guile-repl-server-test.patch \ %D%/packages/patches/guile-rsvg-pkgconfig.patch \ %D%/packages/patches/gtk2-respect-GUIX_GTK2_PATH.patch \ %D%/packages/patches/gtk2-respect-GUIX_GTK2_IM_MODULE_FILE.patch \ diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm index a9b3fdfcd..98498ae08 100644 --- a/gnu/packages/guile.scm +++ b/gnu/packages/guile.scm @@ -134,15 +134,14 @@ without requiring the source code to be rewritten.") (define-public guile-2.0 (package (name "guile") - (version "2.0.13") + (version "2.0.14") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/guile/guile-" version ".tar.xz")) (sha256 (base32 - "12yqkr974y91ylgw6jnmci2v90i90s7h9vxa4zk0sai8vjnz4i1p")) - (patches (search-patches "guile-repl-server-test.patch")))) + "10lxc6l5alf3lzbs3ihnbfy6dfcrsyf8667wa57f26vf4mk2ai78")))) (build-system gnu-build-system) (native-inputs `(("pkgconfig" ,pkg-config))) (inputs `(("libffi" ,libffi) diff --git a/gnu/packages/patches/guile-repl-server-test.patch b/gnu/packages/patches/guile-repl-server-test.patch deleted file mode 100644 index 81e724ecc..000000000 --- a/gnu/packages/patches/guile-repl-server-test.patch +++ /dev/null @@ -1,48 +0,0 @@ -commit 8d6209ea56241bb1890c142539927c9ef3fb5a13 -Author: Ludovic Courtès -Date: Fri Nov 4 22:44:32 2016 +0100 - - tests: Throw 'unresolved when the REPL server is too slow. - -commit 2fbde7f02adb8c6585e9baf6e293ee49cd23d4c4 -Author: Ludovic Courtès -Date: Fri Nov 4 22:45:51 2016 +0100 - - tests: Avoid race condition in REPL server test. - -index ca389ba..4b5ec0c 100644 ---- a/test-suite/tests/00-repl-server.test -+++ b/test-suite/tests/00-repl-server.test -@@ -61,10 +61,11 @@ socket connected to that server." - (lambda () - (connect client-socket sockaddr)) - (lambda args -- (when (and (memv (system-error-errno args) -- (list ENOENT ECONNREFUSED)) -- (< tries 3)) -- (sleep 1) -+ (when (memv (system-error-errno args) -+ (list ENOENT ECONNREFUSED)) -+ (when (> tries 30) -+ (throw 'unresolved)) -+ (usleep 100) - (loop (+ tries 1)))))) - - (proc client-socket)) -@@ -104,8 +105,14 @@ reached." - "scheme@(repl-server)> $1 = 42\n" - (with-repl-server socket - (read-until-prompt socket %last-line-before-prompt) -- (display "(+ 40 2)\n(quit)\n" socket) -- (read-string socket))) -+ -+ ;; Wait until 'repl-reader' in boot-9 has written the prompt. -+ ;; Otherwise, if we write too quickly, 'repl-reader' checks for -+ ;; 'char-ready?' and doesn't print the prompt. -+ (match (select (list socket) '() (list socket) 3) -+ (((_) () ()) -+ (display "(+ 40 2)\n(quit)\n" socket) -+ (read-string socket))))) - - (pass-if "HTTP inter-protocol attack" ;CVE-2016-8606 - (with-repl-server socket -- cgit v1.3 From 864738baaa7bb75c08647ccfc684736479e67f7f Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Mon, 20 Feb 2017 09:48:09 +0200 Subject: gnu: libpng: Update to 1.6.28. * gnu/packages/image.scm (libpng): Update to 1.6.28. [source]: Remove patch. * gnu/packages/patches/libpng-CVE-2016-10087.patch: Remove file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - gnu/packages/image.scm | 5 ++-- gnu/packages/patches/libpng-CVE-2016-10087.patch | 37 ------------------------ 3 files changed, 2 insertions(+), 41 deletions(-) delete mode 100644 gnu/packages/patches/libpng-CVE-2016-10087.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 2c513dee5..db15273eb 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -685,7 +685,6 @@ dist_patch_DATA = \ %D%/packages/patches/libmad-armv7-thumb-pt2.patch \ %D%/packages/patches/libmad-frame-length.patch \ %D%/packages/patches/libmad-mips-newgcc.patch \ - %D%/packages/patches/libpng-CVE-2016-10087.patch \ %D%/packages/patches/libssh-0.6.5-CVE-2016-0739.patch \ %D%/packages/patches/libtar-CVE-2013-4420.patch \ %D%/packages/patches/libtheora-config-guess.patch \ diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index 82d909118..cbdc1b39d 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -65,7 +65,7 @@ (define-public libpng (package (name "libpng") - (version "1.6.25") + (version "1.6.28") (source (origin (method url-fetch) (uri (list (string-append "mirror://sourceforge/libpng/libpng16/" @@ -76,9 +76,8 @@ (string-append "ftp://ftp.simplesystems.org/pub/libpng/png/src/history" "/libpng16/libpng-" version ".tar.xz"))) - (patches (search-patches "libpng-CVE-2016-10087.patch")) (sha256 - (base32 "04c8inn745hw25wz2dc5vll5n5d2gsndj01i4srwzgz8861qvzh9")))) + (base32 "0ylgyx93hnk38haqrh8prd3ax5ngzwvjqw5cxw7p9nxmwsfyrlyq")))) (build-system gnu-build-system) ;; libpng.la says "-lz", so propagate it. diff --git a/gnu/packages/patches/libpng-CVE-2016-10087.patch b/gnu/packages/patches/libpng-CVE-2016-10087.patch deleted file mode 100644 index 8093b3e44..000000000 --- a/gnu/packages/patches/libpng-CVE-2016-10087.patch +++ /dev/null @@ -1,37 +0,0 @@ -Fix CVE-2016-10087, a null pointer dereference in png_set_text_2(): - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10087 -http://seclists.org/oss-sec/2016/q4/777 - -Patch adapted from upstream source repository: - -https://sourceforge.net/p/libpng/code/ci/812768d7a9c973452222d454634496b25ed415eb/ - -From 812768d7a9c973452222d454634496b25ed415eb Mon Sep 17 00:00:00 2001 -From: Glenn Randers-Pehrson -Date: Thu, 29 Dec 2016 07:51:33 -0600 -Subject: [PATCH] [libpng16] Fixed a potential null pointer dereference in - png_set_text_2() - -(bug report and patch by Patrick Keshishian). ---- - ANNOUNCE | 2 ++ - CHANGES | 2 ++ - png.c | 1 + - 3 files changed, 5 insertions(+) - -diff --git a/png.c b/png.c -index 8afc28fc2..2e05de159 100644 ---- a/png.c -+++ b/png.c -@@ -477,6 +477,7 @@ png_free_data(png_const_structrp png_ptr, png_inforp info_ptr, png_uint_32 mask, - png_free(png_ptr, info_ptr->text); - info_ptr->text = NULL; - info_ptr->num_text = 0; -+ info_ptr->max_text = 0; - } - } - #endif --- -2.11.0 - -- cgit v1.3 From 3b88f3767d9f3ad2cc64173525cd53d429bfe7e7 Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Sat, 25 Jun 2016 20:53:24 +0300 Subject: gnu: Add bootstrap-binaries for 'aarch64-linux'. These bootstrap-binaries were built against commit 8f8f250bdca917b3ce38aa0902f01b19081859a4. * gnu/packages/bootstrap/aarch64-linux/bash, gnu/packages/bootstrap/aarch64-linux/mkdir, gnu/packages/bootstrap/aarch64-linux/xz, gnu/packages/bootstrap/aarch64-linux/tar: New files. * gnu/local.mk (bootstrap_aarch64_linuxdir) (dist_bootstrap_aarch64_linux_DATA) (nodist_bootstrap_aarch64_linux_DATA): New variables. (DISTCLEANFILES): Add $(nodist_bootstrap_aarch64_linux_DATA). (gnu/packages/bootstrap/aarch64-linux/guile-2.0.14.tar.xz): New target. * build-aux/download.scm (filename->uri): Add aarch64-linux entry. * gnu/packages/bootstrap.scm (raw-build): Use guile-2.0.14.tar.xz on aarch64-linux. (glibc-dynamic-linker, %bootstrap-coreutils&co, %boostrap-binutils) (%bootstrap-glibc, %bootstrap-gcc): Add aarch64-linux cases. * m4/guix.m4 (GUIX_SYSTEM_TYPE): Add aarch64 case. (GUIX_ASSERT_SUPPORTED_SYSTEM): Add aarch64-linux to supported list. * doc/guix.texi (GNU Distribution): Add aarch64-linux to the list of supported systems. * tests/packages.scm (package-search-derivation, snippet): Add aarch64 case. --- build-aux/download.scm | 20 +++++++++++++------- doc/guix.texi | 7 ++++++- gnu/local.mk | 15 +++++++++++++++ gnu/packages/bootstrap.scm | 26 +++++++++++++++++++++++++- gnu/packages/bootstrap/aarch64-linux/bash | Bin 0 -> 1162056 bytes gnu/packages/bootstrap/aarch64-linux/mkdir | Bin 0 -> 558216 bytes gnu/packages/bootstrap/aarch64-linux/tar | Bin 0 -> 1085128 bytes gnu/packages/bootstrap/aarch64-linux/xz | Bin 0 -> 738576 bytes m4/guix.m4 | 3 ++- tests/packages.scm | 2 ++ 10 files changed, 63 insertions(+), 10 deletions(-) create mode 100755 gnu/packages/bootstrap/aarch64-linux/bash create mode 100755 gnu/packages/bootstrap/aarch64-linux/mkdir create mode 100755 gnu/packages/bootstrap/aarch64-linux/tar create mode 100755 gnu/packages/bootstrap/aarch64-linux/xz (limited to 'gnu/local.mk') diff --git a/build-aux/download.scm b/build-aux/download.scm index 1e91e4b87..e0b40e6f2 100644 --- a/build-aux/download.scm +++ b/build-aux/download.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013 Ludovic Courtès ;;; Copyright © 2014, 2015 Mark H Weaver +;;; Copyright © 2017 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -45,13 +46,18 @@ "Return the URI for FILE." (match (string-tokenize file (char-set-complement (char-set #\/))) ((_ ... system basename) - (string->uri (string-append %url-base "/" system - (match system - ("armhf-linux" - "/20150101/") - (_ - "/20131110/")) - basename))))) + (string->uri + (match system + ("aarch64-linux" + (string-append "http://flashner.co.il/guix/bootstrap/aarch64-linux" + "/20170217/" basename)) + (_ (string-append %url-base "/" system + (match system + ("armhf-linux" + "/20150101/") + (_ + "/20131110/")) + basename))))))) (match (command-line) ((_ file expected-hash) diff --git a/doc/guix.texi b/doc/guix.texi index 6cdb5e592..8b97920f2 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -24,7 +24,7 @@ Copyright @copyright{} 2015, 2016, 2017 Leo Famulari@* Copyright @copyright{} 2015, 2016 Ricardo Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{} 2016 Chris Marusich@* -Copyright @copyright{} 2016 Efraim Flashner@* +Copyright @copyright{} 2016, 2017 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* Copyright @copyright{} 2016 ng0@* Copyright @copyright{} 2016 Jan Nieuwenhuizen@* @@ -6710,6 +6710,11 @@ ARMv7-A architecture with hard float, Thumb-2 and NEON, using the EABI hard-float application binary interface (ABI), and Linux-Libre kernel. +@item aarch64-linux +little-endian 64-bit ARMv8-A processors, Linux-Libre kernel. This is +currently in an experimental stage, with limited support. See +@xref{Contributing}, for how to help! + @item mips64el-linux little-endian 64-bit MIPS processors, specifically the Loongson series, n32 ABI, and Linux-Libre kernel. diff --git a/gnu/local.mk b/gnu/local.mk index e7db9a605..7ad66f5df 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -10,6 +10,7 @@ # Copyright © 2016, 2017 Ricardo Wurmus # Copyright © 2016 Ben Woodcroft # Copyright © 2016, 2017 Alex Vong +# Copyright © 2016, 2017 Efraim Flashner # # This file is part of GNU Guix. # @@ -992,6 +993,7 @@ bootstrapdir = $(guilemoduledir)/%D%/packages/bootstrap bootstrap_x86_64_linuxdir = $(bootstrapdir)/x86_64-linux bootstrap_i686_linuxdir = $(bootstrapdir)/i686-linux bootstrap_armhf_linuxdir = $(bootstrapdir)/armhf-linux +bootstrap_aarch64_linuxdir = $(bootstrapdir)/aarch64-linux bootstrap_mips64el_linuxdir = $(bootstrapdir)/mips64el-linux dist_bootstrap_x86_64_linux_DATA = \ @@ -1012,6 +1014,12 @@ dist_bootstrap_armhf_linux_DATA = \ %D%/packages/bootstrap/armhf-linux/tar \ %D%/packages/bootstrap/armhf-linux/xz +dist_bootstrap_aarch64_linux_DATA = \ + %D%/packages/bootstrap/aarch64-linux/bash \ + %D%/packages/bootstrap/aarch64-linux/mkdir \ + %D%/packages/bootstrap/aarch64-linux/tar \ + %D%/packages/bootstrap/aarch64-linux/xz + dist_bootstrap_mips64el_linux_DATA = \ %D%/packages/bootstrap/mips64el-linux/bash \ %D%/packages/bootstrap/mips64el-linux/mkdir \ @@ -1026,6 +1034,8 @@ nodist_bootstrap_i686_linux_DATA = \ %D%/packages/bootstrap/i686-linux/guile-2.0.9.tar.xz nodist_bootstrap_armhf_linux_DATA = \ %D%/packages/bootstrap/armhf-linux/guile-2.0.11.tar.xz +nodist_bootstrap_aarch64_linux_DATA = \ + %D%/packages/bootstrap/aarch64-linux/guile-2.0.14.tar.xz nodist_bootstrap_mips64el_linux_DATA = \ %D%/packages/bootstrap/mips64el-linux/guile-2.0.9.tar.xz @@ -1038,6 +1048,7 @@ DISTCLEANFILES = \ $(nodist_bootstrap_x86_64_linux_DATA) \ $(nodist_bootstrap_i686_linux_DATA) \ $(nodist_bootstrap_armhf_linux_DATA) \ + $(nodist_bootstrap_aarch64_linux_DATA) \ $(nodist_bootstrap_mips64el_linux_DATA) # Method to download a file from an external source. @@ -1058,6 +1069,10 @@ DOWNLOAD_FILE = \ $(AM_V_DL)$(MKDIR_P) `dirname "$@"`; \ $(DOWNLOAD_FILE) "$@" \ "e551d05d4d385d6706ab8d574856a087758294dc90ab4c06e70a157a685e23d6" +%D%/packages/bootstrap/aarch64-linux/guile-2.0.14.tar.xz: + $(AM_V_DL)$(MKDIR_P) `dirname "$@"`; \ + $(DOWNLOAD_FILE) "$@" \ + "3939909f24dcb955621aa7f81ecde6844bea8a083969c2d275c55699af123ebe" %D%/packages/bootstrap/mips64el-linux/guile-2.0.9.tar.xz: $(AM_V_DL)$(MKDIR_P) `dirname "$@"`; \ $(DOWNLOAD_FILE) "$@" \ diff --git a/gnu/packages/bootstrap.scm b/gnu/packages/bootstrap.scm index 251d1fec7..61f1f1ab3 100644 --- a/gnu/packages/bootstrap.scm +++ b/gnu/packages/bootstrap.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017 Ludovic Courtès ;;; Copyright © 2014, 2015 Mark H Weaver +;;; Copyright © 2017 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -203,6 +204,8 @@ successful, or false to signal an error." (guile (->store (match system ("armhf-linux" "guile-2.0.11.tar.xz") + ("aarch64-linux" + "guile-2.0.14.tar.xz") (_ "guile-2.0.9.tar.xz")))) ;; The following code, run by the bootstrap guile after it is @@ -291,7 +294,8 @@ $out/bin/guile --version~%" ;; This is where the initial binaries come from. '("ftp://alpha.gnu.org/gnu/guix/bootstrap" "http://alpha.gnu.org/gnu/guix/bootstrap" - "http://www.fdn.fr/~lcourtes/software/guix/packages")) + "http://www.fdn.fr/~lcourtes/software/guix/packages" + "http://flashner.co.il/guix/bootstrap")) (define %bootstrap-coreutils&co (package-from-tarball "bootstrap-binaries" @@ -302,6 +306,8 @@ $out/bin/guile --version~%" (match system ("armhf-linux" "/20150101/static-binaries.tar.xz") + ("aarch64-linux" + "/20170217/static-binaries.tar.xz") (_ "/20131110/static-binaries.tar.xz"))) %bootstrap-base-urls)) @@ -316,6 +322,9 @@ $out/bin/guile --version~%" ("armhf-linux" (base32 "0gf0fn2kbpxkjixkmx5f4z6hv6qpmgixl69zgg74dbsfdfj8jdv5")) + ("aarch64-linux" + (base32 + "18dfiq6c6xhsdpbidigw6480wh0vdgsxqq3xindq4lpdgqlccpfh")) ("mips64el-linux" (base32 "072y4wyfsj1bs80r6vbybbafy8ya4vfy7qj25dklwk97m6g71753")))))) @@ -345,6 +354,8 @@ $out/bin/guile --version~%" (match system ("armhf-linux" "/20150101/binutils-2.25.tar.xz") + ("aarch64-linux" + "/20170217/binutils-2.27.tar.xz") (_ "/20131110/binutils-2.23.2.tar.xz"))) %bootstrap-base-urls)) @@ -359,6 +370,9 @@ $out/bin/guile --version~%" ("armhf-linux" (base32 "1v7dj6bzn6m36f20gw31l99xaabq4xrhrx3gwqkhhig0mdlmr69q")) + ("aarch64-linux" + (base32 + "111s7ilfiby033rczc71797xrmaa3qlv179wdvsaq132pd51xv3n")) ("mips64el-linux" (base32 "1x8kkhcxmfyzg1ddpz2pxs6fbdl6412r7x0nzbmi5n7mj8zw2gy7")))))) @@ -406,6 +420,8 @@ $out/bin/guile --version~%" (match (%current-system) ("armhf-linux" "/20150101/glibc-2.20.tar.xz") + ("aarch64-linux" + "/20170217/glibc-2.25.tar.xz") (_ "/20131110/glibc-2.18.tar.xz"))) %bootstrap-base-urls)) @@ -420,6 +436,9 @@ $out/bin/guile --version~%" ("armhf-linux" (base32 "18cmgvpllqfpn6khsmivqib7ys8ymnq0hdzi3qp24prik0ykz8gn")) + ("aarch64-linux" + (base32 + "07nx3x8598i2924rjnlrncg6rm61c9bmcczbbcpbx0fb742nvv5c")) ("mips64el-linux" (base32 "0k97a3whzx3apsi9n2cbsrr79ad6lh00klxph9hw4fqyp1abkdsg"))))))))) @@ -484,6 +503,8 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \ (match (%current-system) ("armhf-linux" "/20150101/gcc-4.8.4.tar.xz") + ("aarch64-linux" + "/20170217/gcc-5.4.0.tar.xz") (_ "/20131110/gcc-4.8.2.tar.xz"))) %bootstrap-base-urls)) @@ -498,6 +519,9 @@ exec ~a/bin/.gcc-wrapped -B~a/lib \ ("armhf-linux" (base32 "0ghz825yzp43fxw53kd6afm8nkz16f7dxi9xi40bfwc8x3nbbr8v")) + ("aarch64-linux" + (base32 + "1ar3vdzyqbfm0z36kmvazvfswxhcihlacl2dzdjgiq25cqnq9ih1")) ("mips64el-linux" (base32 "1m5miqkyng45l745n0sfafdpjkqv9225xf44jqkygwsipj2cv9ks"))))))))) diff --git a/gnu/packages/bootstrap/aarch64-linux/bash b/gnu/packages/bootstrap/aarch64-linux/bash new file mode 100755 index 000000000..0bfb9d182 Binary files /dev/null and b/gnu/packages/bootstrap/aarch64-linux/bash differ diff --git a/gnu/packages/bootstrap/aarch64-linux/mkdir b/gnu/packages/bootstrap/aarch64-linux/mkdir new file mode 100755 index 000000000..35cd1815f Binary files /dev/null and b/gnu/packages/bootstrap/aarch64-linux/mkdir differ diff --git a/gnu/packages/bootstrap/aarch64-linux/tar b/gnu/packages/bootstrap/aarch64-linux/tar new file mode 100755 index 000000000..7e68edb0b Binary files /dev/null and b/gnu/packages/bootstrap/aarch64-linux/tar differ diff --git a/gnu/packages/bootstrap/aarch64-linux/xz b/gnu/packages/bootstrap/aarch64-linux/xz new file mode 100755 index 000000000..5aa18c923 Binary files /dev/null and b/gnu/packages/bootstrap/aarch64-linux/xz differ diff --git a/m4/guix.m4 b/m4/guix.m4 index 663059841..e546b8f4d 100644 --- a/m4/guix.m4 +++ b/m4/guix.m4 @@ -1,6 +1,7 @@ dnl GNU Guix --- Functional package management for GNU dnl Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès dnl Copyright © 2014 Mark H Weaver +dnl Copyright © 2017 Efraim Flashner dnl dnl This file is part of GNU Guix. dnl @@ -105,7 +106,7 @@ courageous and port the GNU System distribution to it (see # Currently only Linux-based systems are supported, and only on some # platforms. case "$guix_system" in - x86_64-linux|i686-linux|armhf-linux|mips64el-linux) + x86_64-linux|i686-linux|armhf-linux|aarch64-linux|mips64el-linux) ;; *) if test "x$guix_courageous" = "xyes"; then diff --git a/tests/packages.scm b/tests/packages.scm index 962f120ea..aa2975883 100644 --- a/tests/packages.scm +++ b/tests/packages.scm @@ -380,6 +380,8 @@ (let* ((file (search-bootstrap-binary (match (%current-system) ("armhf-linux" "guile-2.0.11.tar.xz") + ("aarch64-linux" + "guile-2.0.14.tar.xz") (_ "guile-2.0.9.tar.xz")) (%current-system))) -- cgit v1.3 From f12def72ae6e6d06335d726b93bc88e0e896b9ae Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Tue, 21 Feb 2017 14:41:03 +0100 Subject: gnu: xf86-input-wacom: Fix compatibility with xorg ABI 25. * gnu/packages/patches/xf86-input-wacom-xorg-abi-25.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/xdisorg.scm (xf86-input-wacom)[source](patches): Use it. --- gnu/local.mk | 1 + .../patches/xf86-input-wacom-xorg-abi-25.patch | 46 ++++++++++++++++++++++ gnu/packages/xdisorg.scm | 4 +- 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/xf86-input-wacom-xorg-abi-25.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 2ca90dfce..82d9a31bd 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -970,6 +970,7 @@ dist_patch_DATA = \ %D%/packages/patches/wordnet-CVE-2008-3908-pt1.patch \ %D%/packages/patches/wordnet-CVE-2008-3908-pt2.patch \ %D%/packages/patches/xdotool-fix-makefile.patch \ + %D%/packages/patches/xf86-input-wacom-xorg-abi-25.patch \ %D%/packages/patches/xf86-video-ark-remove-mibstore.patch \ %D%/packages/patches/xf86-video-ast-remove-mibstore.patch \ %D%/packages/patches/xf86-video-geode-glibc-2.20.patch \ diff --git a/gnu/packages/patches/xf86-input-wacom-xorg-abi-25.patch b/gnu/packages/patches/xf86-input-wacom-xorg-abi-25.patch new file mode 100644 index 000000000..dc594bdcc --- /dev/null +++ b/gnu/packages/patches/xf86-input-wacom-xorg-abi-25.patch @@ -0,0 +1,46 @@ +Resolves a test compatibility issue with xorg >= 1.19. + +Upstream bug report: + +https://sourceforge.net/p/linuxwacom/bugs/329/ + +Patch copied from upstream source repository: + +https://sourceforge.net/p/linuxwacom/xf86-input-wacom/ci/f0dedf7a610ac97bc45738492b98ce4f1e0514ec/ + +From f0dedf7a610ac97bc45738492b98ce4f1e0514ec Mon Sep 17 00:00:00 2001 +From: Jason Gerecke +Date: Wed, 18 Jan 2017 09:00:10 -0800 +Subject: [PATCH] tests: Fix compilation under ABI 25 and greater + +diff --git a/test/fake-symbols.c b/test/fake-symbols.c +index 6f2c10a..e649fb9 100644 +--- a/test/fake-symbols.c ++++ b/test/fake-symbols.c +@@ -493,6 +493,7 @@ void TimerFree(OsTimerPtr timer) + { + } + ++#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 24 + int + xf86BlockSIGIO (void) + { +@@ -503,6 +504,15 @@ void + xf86UnblockSIGIO (int wasset) + { + } ++#else ++void input_lock (void) ++{ ++} ++ ++void input_unlock (void) ++{ ++} ++#endif + + /* This is not the same as the X server one, but it'll do for the tests */ + #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 14 +-- +2.11.1 + diff --git a/gnu/packages/xdisorg.scm b/gnu/packages/xdisorg.scm index 7b3142657..1b91404db 100644 --- a/gnu/packages/xdisorg.scm +++ b/gnu/packages/xdisorg.scm @@ -796,7 +796,9 @@ Wacom tablet applet.") name "-" version ".tar.bz2")) (sha256 (base32 - "0idhkigl0pnyp08sqm6bqfb4h20v6rjrb71z1gdv59gk7d7qwpgi")))) + "0idhkigl0pnyp08sqm6bqfb4h20v6rjrb71z1gdv59gk7d7qwpgi")) + (patches + (search-patches "xf86-input-wacom-xorg-abi-25.patch")))) (arguments `(#:configure-flags (list (string-append "--with-sdkdir=" -- cgit v1.3 From 827dc6295c3aafd592f3bb5fe151fdc4fd8d35b7 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Wed, 22 Feb 2017 06:29:21 +0100 Subject: gnu: libepoxy: Update to 1.4.0. * gnu/packages/patches/libepoxy-gl-null-checks.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. * gnu/packages/gl.scm (libepoxy): Update to 1.4.0. [source]: Remove patch. Use release tarball and remove explicit file-name. [arguments]: Drop 'autoreconf' phase. Remove obsolete test substitution. [native-inputs]: Remove AUTOCONF, AUTOMAKE and LIBTOOL. --- gnu/local.mk | 1 - gnu/packages/gl.scm | 30 +++--------- gnu/packages/patches/libepoxy-gl-null-checks.patch | 54 ---------------------- 3 files changed, 6 insertions(+), 79 deletions(-) delete mode 100644 gnu/packages/patches/libepoxy-gl-null-checks.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 82d9a31bd..1e919c848 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -673,7 +673,6 @@ dist_patch_DATA = \ %D%/packages/patches/libcanberra-sound-theme-freedesktop.patch \ %D%/packages/patches/libcmis-fix-test-onedrive.patch \ %D%/packages/patches/libdrm-symbol-check.patch \ - %D%/packages/patches/libepoxy-gl-null-checks.patch \ %D%/packages/patches/libevent-dns-tests.patch \ %D%/packages/patches/libevent-2.0-CVE-2016-10195.patch \ %D%/packages/patches/libevent-2.0-CVE-2016-10196.patch \ diff --git a/gnu/packages/gl.scm b/gnu/packages/gl.scm index 775d656e1..53f720ac2 100644 --- a/gnu/packages/gl.scm +++ b/gnu/packages/gl.scm @@ -456,25 +456,20 @@ OpenGL graphics API.") (define-public libepoxy (package (name "libepoxy") - (version "1.3.1") + (version "1.4.0") (source (origin (method url-fetch) (uri (string-append - "https://github.com/anholt/libepoxy/archive/v" + "https://github.com/anholt/libepoxy/releases/download/v" + (version-major+minor version) "/libepoxy-" version - ".tar.gz")) - (file-name (string-append name "-" version ".tar.gz")) + ".tar.xz")) (sha256 (base32 - "1d1brhwfmlzgnphmdwlvn5wbcrxsdyzf1qfcf8nb89xqzznxs037")) - (patches (search-patches "libepoxy-gl-null-checks.patch")))) + "0hdbaapbxjjfdqsdvag460kfjvs800da5sngi2sc46wj9aqhda95")))) (arguments `(#:phases (modify-phases %standard-phases - (add-after - 'unpack 'autoreconf - (lambda _ - (zero? (system* "autoreconf" "-vif")))) (add-before 'configure 'patch-paths (lambda* (#:key inputs #:allow-other-keys) @@ -485,23 +480,10 @@ OpenGL graphics API.") (substitute* (find-files "." "\\.[ch]$") (("libGL.so.1") (string-append mesa "/lib/libGL.so.1")) (("libEGL.so.1") (string-append mesa "/lib/libEGL.so.1"))) - - ;; XXX On armhf systems, we must add "GLIBC_2.4" to the list of - ;; versions in test/dlwrap.c:dlwrap_real_dlsym. It would be - ;; better to make this a normal patch, but for now we do it here - ;; to prevent rebuilding on other platforms. - ,@(if (string-prefix? "arm" (or (%current-target-system) - (%current-system))) - '((substitute* '"test/dlwrap.c" - (("\"GLIBC_2\\.0\"") "\"GLIBC_2.0\", \"GLIBC_2.4\""))) - '()) #t)))))) (build-system gnu-build-system) (native-inputs - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("libtool" ,libtool) - ("pkg-config" ,pkg-config) + `(("pkg-config" ,pkg-config) ("python" ,python))) (inputs `(("mesa" ,mesa))) diff --git a/gnu/packages/patches/libepoxy-gl-null-checks.patch b/gnu/packages/patches/libepoxy-gl-null-checks.patch deleted file mode 100644 index bdc4b0598..000000000 --- a/gnu/packages/patches/libepoxy-gl-null-checks.patch +++ /dev/null @@ -1,54 +0,0 @@ -This patch from adds NULL -checks to avoid crashes when GL support is missing, as is the case when running -Xvfb. - -Upstream issue: . - -diff -ur libepoxy-1.3.1/src/dispatch_common.c libepoxy-1.3.1/src/dispatch_common.c ---- libepoxy-1.3.1/src/dispatch_common.c 2015-07-15 19:46:36.000000000 -0400 -+++ libepoxy-1.3.1/src/dispatch_common.c 2016-11-16 09:03:52.809066247 -0500 -@@ -348,6 +348,8 @@ - epoxy_extension_in_string(const char *extension_list, const char *ext) - { - const char *ptr = extension_list; -+ if (! ptr) return false; -+ if (! ext) return false; - int len = strlen(ext); - - /* Make sure that don't just find an extension with our name as a prefix. */ -@@ -380,6 +382,7 @@ - - for (i = 0; i < num_extensions; i++) { - const char *gl_ext = (const char *)glGetStringi(GL_EXTENSIONS, i); -+ if (! gl_ext) return false; - if (strcmp(ext, gl_ext) == 0) - return true; - } -diff -ur libepoxy-1.3.1/src/dispatch_egl.c libepoxy-1.3.1/src/dispatch_egl.c ---- libepoxy-1.3.1/src/dispatch_egl.c 2015-07-15 19:46:36.000000000 -0400 -+++ libepoxy-1.3.1/src/dispatch_egl.c 2016-11-16 08:40:34.069358709 -0500 -@@ -46,6 +46,7 @@ - int ret; - - version_string = eglQueryString(dpy, EGL_VERSION); -+ if (! version_string) return 0; - ret = sscanf(version_string, "%d.%d", &major, &minor); - assert(ret == 2); - return major * 10 + minor; -diff -ur libepoxy-1.3.1/src/dispatch_glx.c libepoxy-1.3.1/src/dispatch_glx.c ---- libepoxy-1.3.1/src/dispatch_glx.c 2015-07-15 19:46:36.000000000 -0400 -+++ libepoxy-1.3.1/src/dispatch_glx.c 2016-11-16 08:41:03.065730370 -0500 -@@ -57,11 +57,13 @@ - int ret; - - version_string = glXQueryServerString(dpy, screen, GLX_VERSION); -+ if (! version_string) return 0; - ret = sscanf(version_string, "%d.%d", &server_major, &server_minor); - assert(ret == 2); - server = server_major * 10 + server_minor; - - version_string = glXGetClientString(dpy, GLX_VERSION); -+ if (! version_string) return 0; - ret = sscanf(version_string, "%d.%d", &client_major, &client_minor); - assert(ret == 2); - client = client_major * 10 + client_minor; -- cgit v1.3 From ba5e23d605dbbae7541d8d9a680e8fde3ad1d745 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Wed, 22 Feb 2017 12:42:52 +0100 Subject: gnu: xcb-proto: Update to 1.12. * gnu/packages/patches/xcb-proto-python3-print.patch, gnu/packages/patches/xcb-proto-python3-whitespace.patch: New files. * gnu/local.mk (dist_patch_DATA): Add them. * gnu/packages/xorg.scm (xcb-proto): Update to 1.12. [source]: Use patches. Download from new home. [home-page]: Change to new xcb.fd.o home. --- gnu/local.mk | 2 + gnu/packages/patches/xcb-proto-python3-print.patch | 75 +++++++ .../patches/xcb-proto-python3-whitespace.patch | 217 +++++++++++++++++++++ gnu/packages/xorg.scm | 11 +- 4 files changed, 301 insertions(+), 4 deletions(-) create mode 100644 gnu/packages/patches/xcb-proto-python3-print.patch create mode 100644 gnu/packages/patches/xcb-proto-python3-whitespace.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 1e919c848..dec231a08 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -968,6 +968,8 @@ dist_patch_DATA = \ %D%/packages/patches/wordnet-CVE-2008-2149.patch \ %D%/packages/patches/wordnet-CVE-2008-3908-pt1.patch \ %D%/packages/patches/wordnet-CVE-2008-3908-pt2.patch \ + %D%/packages/patches/xcb-proto-python3-print.patch \ + %D%/packages/patches/xcb-proto-python3-whitespace.patch \ %D%/packages/patches/xdotool-fix-makefile.patch \ %D%/packages/patches/xf86-input-wacom-xorg-abi-25.patch \ %D%/packages/patches/xf86-video-ark-remove-mibstore.patch \ diff --git a/gnu/packages/patches/xcb-proto-python3-print.patch b/gnu/packages/patches/xcb-proto-python3-print.patch new file mode 100644 index 000000000..7d5dc9bc2 --- /dev/null +++ b/gnu/packages/patches/xcb-proto-python3-print.patch @@ -0,0 +1,75 @@ +Patch copied from upstream source repository: + +https://cgit.freedesktop.org/xcb/proto/commit/?id=bea5e1c85bdc0950913790364e18228f20395a3d + +From bea5e1c85bdc0950913790364e18228f20395a3d Mon Sep 17 00:00:00 2001 +From: Thomas Klausner +Date: Thu, 19 May 2016 17:30:05 +0200 +Subject: [PATCH] print() is a function and needs parentheses. + +Fixes build with python-3.x. + +Signed-off-by: Thomas Klausner +Signed-off-by: Uli Schlachter +--- + xcbgen/xtypes.py | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/xcbgen/xtypes.py b/xcbgen/xtypes.py +index c3b5758..b83b119 100644 +--- a/xcbgen/xtypes.py ++++ b/xcbgen/xtypes.py +@@ -501,7 +501,7 @@ class ComplexType(Type): + int(required_start_align_element.get('align', "4"), 0), + int(required_start_align_element.get('offset', "0"), 0)) + if verbose_align_log: +- print "Explicit start-align for %s: %s\n" % (self, self.required_start_align) ++ print ("Explicit start-align for %s: %s\n" % (self, self.required_start_align)) + + def resolve(self, module): + if self.resolved: +@@ -592,7 +592,7 @@ class ComplexType(Type): + if verbose_align_log: + print ("calc_required_start_align: %s has start-align %s" + % (str(self), str(self.required_start_align))) +- print "Details:\n" + str(log) ++ print ("Details:\n" + str(log)) + if self.required_start_align.offset != 0: + print (("WARNING: %s\n\thas start-align with non-zero offset: %s" + + "\n\tsuggest to add explicit definition with:" +@@ -619,12 +619,12 @@ class ComplexType(Type): + for offset in range(0,align): + align_candidate = Alignment(align, offset) + if verbose_align_log: +- print "trying %s for %s" % (str(align_candidate), str(self)) ++ print ("trying %s for %s" % (str(align_candidate), str(self))) + my_log = AlignmentLog() + if self.is_possible_start_align(align_candidate, callstack, my_log): + log.append(my_log) + if verbose_align_log: +- print "found start-align %s for %s" % (str(align_candidate), str(self)) ++ print ("found start-align %s for %s" % (str(align_candidate), str(self))) + return align_candidate + else: + my_ok_count = my_log.ok_count() +@@ -641,7 +641,7 @@ class ComplexType(Type): + # none of the candidates applies + # this type has illegal internal aligns for all possible start_aligns + if verbose_align_log: +- print "didn't find start-align for %s" % str(self) ++ print ("didn't find start-align for %s" % str(self)) + log.append(best_log) + return None + +@@ -900,7 +900,7 @@ class SwitchType(ComplexType): + # aux function for unchecked_get_alignment_after + def get_align_for_selected_case_field(self, case_field, start_align, callstack, log): + if verbose_align_log: +- print "get_align_for_selected_case_field: %s, case_field = %s" % (str(self), str(case_field)) ++ print ("get_align_for_selected_case_field: %s, case_field = %s" % (str(self), str(case_field))) + total_align = start_align + for field in self.bitcases: + my_callstack = callstack[:] +-- +2.11.1 + diff --git a/gnu/packages/patches/xcb-proto-python3-whitespace.patch b/gnu/packages/patches/xcb-proto-python3-whitespace.patch new file mode 100644 index 000000000..f0509138b --- /dev/null +++ b/gnu/packages/patches/xcb-proto-python3-whitespace.patch @@ -0,0 +1,217 @@ +Fixes compatibility issue with python > 3.5. + +Patch copied from upstream source repository: + +https://cgit.freedesktop.org/xcb/proto/commit/?id=ea7a3ac6c658164690e0febb55f4467cb9e0bcac + +From ea7a3ac6c658164690e0febb55f4467cb9e0bcac Mon Sep 17 00:00:00 2001 +From: Thomas Klausner +Date: Thu, 19 May 2016 17:30:04 +0200 +Subject: [PATCH] Make whitespace use consistent. + +At least python-3.5.x complains about this forcefully. + +Signed-off-by: Thomas Klausner +Signed-off-by: Uli Schlachter +--- + xcbgen/align.py | 96 ++++++++++++++++++++++++++++----------------------------- + 1 file changed, 48 insertions(+), 48 deletions(-) + +diff --git a/xcbgen/align.py b/xcbgen/align.py +index 5e31838..d4c12ee 100644 +--- a/xcbgen/align.py ++++ b/xcbgen/align.py +@@ -16,12 +16,12 @@ class Alignment(object): + return self.align == other.align and self.offset == other.offset + + def __str__(self): +- return "(align=%d, offset=%d)" % (self.align, self.offset) ++ return "(align=%d, offset=%d)" % (self.align, self.offset) + + @staticmethod + def for_primitive_type(size): +- # compute the required start_alignment based on the size of the type +- if size % 8 == 0: ++ # compute the required start_alignment based on the size of the type ++ if size % 8 == 0: + # do 8-byte primitives require 8-byte alignment in X11? + return Alignment(8,0) + elif size % 4 == 0: +@@ -33,7 +33,7 @@ class Alignment(object): + + + def align_after_fixed_size(self, size): +- new_offset = (self.offset + size) % self.align ++ new_offset = (self.offset + size) % self.align + return Alignment(self.align, new_offset) + + +@@ -41,7 +41,7 @@ class Alignment(object): + ''' + Assuming the given external_align, checks whether + self is fulfilled for all cases. +- Returns True if yes, False otherwise. ++ Returns True if yes, False otherwise. + ''' + if self.align == 1 and self.offset == 0: + # alignment 1 with offset 0 is always fulfilled +@@ -55,9 +55,9 @@ class Alignment(object): + # the external align guarantees less alignment -> not guaranteed + return False + +- if external_align.align % self.align != 0: ++ if external_align.align % self.align != 0: + # the external align cannot be divided by our align +- # -> not guaranteed ++ # -> not guaranteed + # (this can only happen if there are alignments that are not + # a power of 2, which is highly discouraged. But better be + # safe and check for it) +@@ -72,7 +72,7 @@ class Alignment(object): + + def combine_with(self, other): + # returns the alignment that is guaranteed when +- # both, self or other, can happen ++ # both, self or other, can happen + new_align = gcd(self.align, other.align) + new_offset_candidate1 = self.offset % new_align + new_offset_candidate2 = other.offset % new_align +@@ -83,8 +83,8 @@ class Alignment(object): + new_align = gcd(new_align, offset_diff) + new_offset_candidate1 = self.offset % new_align + new_offset_candidate2 = other.offset % new_align +- assert new_offset_candidate1 == new_offset_candidate2 +- new_offset = new_offset_candidate1 ++ assert new_offset_candidate1 == new_offset_candidate2 ++ new_offset = new_offset_candidate1 + # return the result + return Alignment(new_align, new_offset) + +@@ -92,44 +92,44 @@ class Alignment(object): + class AlignmentLog(object): + + def __init__(self): +- self.ok_list = [] +- self.fail_list = [] +- self.verbosity = 1 ++ self.ok_list = [] ++ self.fail_list = [] ++ self.verbosity = 1 + + def __str__(self): +- result = "" ++ result = "" + +- # output the OK-list +- for (align_before, field_name, type_obj, callstack, align_after) in self.ok_list: +- stacksize = len(callstack) ++ # output the OK-list ++ for (align_before, field_name, type_obj, callstack, align_after) in self.ok_list: ++ stacksize = len(callstack) + indent = ' ' * stacksize +- if self.ok_callstack_is_relevant(callstack): ++ if self.ok_callstack_is_relevant(callstack): + if field_name is None or field_name == "": +- result += (" %sok: %s:\n\t%sbefore: %s, after: %s\n" +- % (indent, str(type_obj), indent, str(align_before), str(align_after))) +- else: +- result += (" %sok: field \"%s\" in %s:\n\t%sbefore: %s, after: %s\n" +- % (indent, str(field_name), str(type_obj), +- indent, str(align_before), str(align_after))) ++ result += (" %sok: %s:\n\t%sbefore: %s, after: %s\n" ++ % (indent, str(type_obj), indent, str(align_before), str(align_after))) ++ else: ++ result += (" %sok: field \"%s\" in %s:\n\t%sbefore: %s, after: %s\n" ++ % (indent, str(field_name), str(type_obj), ++ indent, str(align_before), str(align_after))) + if self.verbosity >= 1: +- result += self.callstack_to_str(indent, callstack) ++ result += self.callstack_to_str(indent, callstack) + +- # output the fail-list +- for (align_before, field_name, type_obj, callstack, reason) in self.fail_list: +- stacksize = len(callstack) ++ # output the fail-list ++ for (align_before, field_name, type_obj, callstack, reason) in self.fail_list: ++ stacksize = len(callstack) + indent = ' ' * stacksize +- if field_name is None or field_name == "": +- result += (" %sfail: align %s is incompatible with\n\t%s%s\n\t%sReason: %s\n" +- % (indent, str(align_before), indent, str(type_obj), indent, reason)) +- else: +- result += (" %sfail: align %s is incompatible with\n\t%sfield \"%s\" in %s\n\t%sReason: %s\n" +- % (indent, str(align_before), indent, str(field_name), str(type_obj), indent, reason)) ++ if field_name is None or field_name == "": ++ result += (" %sfail: align %s is incompatible with\n\t%s%s\n\t%sReason: %s\n" ++ % (indent, str(align_before), indent, str(type_obj), indent, reason)) ++ else: ++ result += (" %sfail: align %s is incompatible with\n\t%sfield \"%s\" in %s\n\t%sReason: %s\n" ++ % (indent, str(align_before), indent, str(field_name), str(type_obj), indent, reason)) + + if self.verbosity >= 1: +- result += self.callstack_to_str(indent, callstack) ++ result += self.callstack_to_str(indent, callstack) + + +- return result ++ return result + + + def callstack_to_str(self, indent, callstack): +@@ -137,41 +137,41 @@ class AlignmentLog(object): + for stack_elem in callstack: + result += "\t %s%s\n" % (indent, str(stack_elem)) + result += "\t%s]\n" % indent +- return result ++ return result + + + def ok_callstack_is_relevant(self, ok_callstack): + # determine whether an ok callstack is relevant for logging +- if self.verbosity >= 2: +- return True ++ if self.verbosity >= 2: ++ return True + + # empty callstacks are always relevant +- if len(ok_callstack) == 0: ++ if len(ok_callstack) == 0: + return True + +- # check whether the ok_callstack is a subset or equal to a fail_callstack ++ # check whether the ok_callstack is a subset or equal to a fail_callstack + for (align_before, field_name, type_obj, fail_callstack, reason) in self.fail_list: + if len(ok_callstack) <= len(fail_callstack): + zipped = zip(ok_callstack, fail_callstack[:len(ok_callstack)]) +- is_subset = all([i == j for i, j in zipped]) +- if is_subset: ++ is_subset = all([i == j for i, j in zipped]) ++ if is_subset: + return True + + return False + + + def ok(self, align_before, field_name, type_obj, callstack, align_after): +- self.ok_list.append((align_before, field_name, type_obj, callstack, align_after)) ++ self.ok_list.append((align_before, field_name, type_obj, callstack, align_after)) + + def fail(self, align_before, field_name, type_obj, callstack, reason): +- self.fail_list.append((align_before, field_name, type_obj, callstack, reason)) ++ self.fail_list.append((align_before, field_name, type_obj, callstack, reason)) + + def append(self, other): +- self.ok_list.extend(other.ok_list) +- self.fail_list.extend(other.fail_list) ++ self.ok_list.extend(other.ok_list) ++ self.fail_list.extend(other.fail_list) + + def ok_count(self): +- return len(self.ok_list) ++ return len(self.ok_list) + + + +-- +2.11.1 + diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm index dc500641f..8bc54e6d5 100644 --- a/gnu/packages/xorg.scm +++ b/gnu/packages/xorg.scm @@ -2053,21 +2053,24 @@ emulate a TI-30 or an HP-10C.") (define-public xcb-proto (package (name "xcb-proto") - (version "1.11") + (version "1.12") (source (origin (method url-fetch) (uri (string-append - "mirror://xorg/individual/xcb/xcb-proto-" + "https://xcb.freedesktop.org/dist/xcb-proto-" version ".tar.bz2")) (sha256 (base32 - "0bp3f53l9fy5x3mn1rkj1g81aiyzl90wacwvqdgy831aa3kfxb5l")))) + "01j91946q8f34l1mbvmmgvyc393sm28ym4lxlacpiav4qsjan8jr")) + (patches + (search-patches "xcb-proto-python3-whitespace.patch" + "xcb-proto-python3-print.patch")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config) ("python" ,python-minimal-wrapper))) - (home-page "https://www.x.org/wiki/") + (home-page "https://xcb.freedesktop.org/") (synopsis "XML-XCB protocol descriptions") (description "XCB-Proto provides the XML-XCB protocol descriptions that libxcb -- cgit v1.3 From 2f7b4749e702e6952632e02d2a0791099e4f931e Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Wed, 22 Feb 2017 12:47:02 +0100 Subject: gnu: libxcb: Update to 1.12. * gnu/packages/patches/libxcb-python-3.5-compat.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/xorg.scm (libxcb): Update to 1.12. [source]: Add patch. Download from new home. [home-page]: Change to new xcb.fd.o home. --- gnu/local.mk | 1 + .../patches/libxcb-python-3.5-compat.patch | 64 ++++++++++++++++++++++ gnu/packages/xorg.scm | 10 ++-- 3 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 gnu/packages/patches/libxcb-python-3.5-compat.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index dec231a08..d0afedd6b 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -724,6 +724,7 @@ dist_patch_DATA = \ %D%/packages/patches/libwmf-CVE-2015-0848+CVE-2015-4588.patch \ %D%/packages/patches/libwmf-CVE-2015-4695.patch \ %D%/packages/patches/libwmf-CVE-2015-4696.patch \ + %D%/packages/patches/libxcb-python-3.5-compat.patch \ %D%/packages/patches/libxml2-CVE-2016-4658.patch \ %D%/packages/patches/libxml2-CVE-2016-5131.patch \ %D%/packages/patches/libxslt-generated-ids.patch \ diff --git a/gnu/packages/patches/libxcb-python-3.5-compat.patch b/gnu/packages/patches/libxcb-python-3.5-compat.patch new file mode 100644 index 000000000..f652498aa --- /dev/null +++ b/gnu/packages/patches/libxcb-python-3.5-compat.patch @@ -0,0 +1,64 @@ +Fix compatibility issue with Python 3.5. + +Patch copied from upstream source repository: + +https://cgit.freedesktop.org/xcb/libxcb/commit/?id=8740a288ca468433141341347aa115b9544891d3 + +From 8740a288ca468433141341347aa115b9544891d3 Mon Sep 17 00:00:00 2001 +From: Thomas Klausner +Date: Thu, 19 May 2016 17:31:18 +0200 +Subject: [PATCH] Fix inconsistent use of tabs vs. space. + +Needed for at least python-3.5.x. + +Signed-off-by: Thomas Klausner +Signed-off-by: Uli Schlachter +--- + src/c_client.py | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/src/c_client.py b/src/c_client.py +index 57de3fb..043338d 100644 +--- a/src/c_client.py ++++ b/src/c_client.py +@@ -1364,7 +1364,7 @@ def _c_serialize(context, self): + _c(' unsigned int xcb_align_to = 0;') + if self.is_switch: + _c(' unsigned int xcb_padding_offset = %d;', +- self.get_align_offset() ) ++ self.get_align_offset() ) + prefix = [('_aux', '->', self)] + aux_ptr = 'xcb_out' + +@@ -1390,7 +1390,7 @@ def _c_serialize(context, self): + _c(' unsigned int xcb_align_to = 0;') + if self.is_switch: + _c(' unsigned int xcb_padding_offset = %d;', +- self.get_align_offset() ) ++ self.get_align_offset() ) + + elif 'sizeof' == context: + param_names = [p[2] for p in params] +@@ -1930,14 +1930,14 @@ def _c_accessors_list(self, field): + # from the request size and divide that by the member size + return '(((R->length * 4) - sizeof('+ self.c_type + '))/'+'sizeof('+field.type.member.c_wiretype+'))' + else: +- # use the accessor to get the start of the list, then +- # compute the length of it by subtracting it from ++ # use the accessor to get the start of the list, then ++ # compute the length of it by subtracting it from + # the adress of the first byte after the end of the + # request +- after_end_of_request = '(((char*)R) + R->length * 4)' +- start_of_list = '%s(R)' % (field.c_accessor_name) ++ after_end_of_request = '(((char*)R) + R->length * 4)' ++ start_of_list = '%s(R)' % (field.c_accessor_name) + bytesize_of_list = '%s - (char*)(%s)' % (after_end_of_request, start_of_list) +- return '(%s) / sizeof(%s)' % (bytesize_of_list, field.type.member.c_wiretype) ++ return '(%s) / sizeof(%s)' % (bytesize_of_list, field.type.member.c_wiretype) + else: + raise Exception( + "lengthless lists with varsized members are not supported. Fieldname '%s'" +-- +2.11.1 + diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm index 8bc54e6d5..115f9fb31 100644 --- a/gnu/packages/xorg.scm +++ b/gnu/packages/xorg.scm @@ -4933,15 +4933,17 @@ protocol.") (define-public libxcb (package (name "libxcb") - (version "1.11.1") + (version "1.12") (source (origin (method url-fetch) - (uri (string-append "mirror://xorg/individual/xcb/" + (uri (string-append "https://xcb.freedesktop.org/dist/" name "-" version ".tar.bz2")) (sha256 (base32 - "0c4xyvdyx5adh8dzyhnrmvwwz24gri4z1czxmxqm63i0gmngs85p")))) + "0nvv0la91cf8p5qqlb3r5xnmg1jn2wphn4fb5jfbr6byqsvv3psa")) + (patches + (search-patches "libxcb-python-3.5-compat.patch")))) (build-system gnu-build-system) (propagated-inputs `(("libpthread-stubs" ,libpthread-stubs) @@ -4955,7 +4957,7 @@ protocol.") ("python" ,python-minimal-wrapper))) (arguments `(#:configure-flags '("--enable-xkb"))) - (home-page "https://www.x.org/wiki/") + (home-page "https://xcb.freedesktop.org/") (synopsis "The X C Binding (XCB) library") (description "libxcb provides an interface to the X Window System protocol, -- cgit v1.3 From 5f3070a500f22f32e606d30d0fa1c08a95704fda Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Thu, 23 Feb 2017 10:56:15 +0100 Subject: gnu: alsa-lib: Update to 1.1.3. * gnu/packages/patches/alsa-lib-mips-atomic-fix.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. * gnu/packages/linux.scm (alsa-lib): Update to 1.1.3. [source]: Remove patch. [home-page]: Use HTTPS. --- gnu/local.mk | 1 - gnu/packages/linux.scm | 7 ++-- .../patches/alsa-lib-mips-atomic-fix.patch | 42 ---------------------- 3 files changed, 3 insertions(+), 47 deletions(-) delete mode 100644 gnu/packages/patches/alsa-lib-mips-atomic-fix.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index d0afedd6b..d7c7ed347 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -481,7 +481,6 @@ dist_patch_DATA = \ %D%/packages/patches/aegis-test-fixup-1.patch \ %D%/packages/patches/aegis-test-fixup-2.patch \ %D%/packages/patches/agg-am_c_prototype.patch \ - %D%/packages/patches/alsa-lib-mips-atomic-fix.patch \ %D%/packages/patches/antiword-CVE-2014-8123.patch \ %D%/packages/patches/apr-skip-getservbyname-test.patch \ %D%/packages/patches/arb-ldconfig.patch \ diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index f9b8810b0..eadd18f78 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -865,7 +865,7 @@ intercept and print the system calls executed by the program.") (define-public alsa-lib (package (name "alsa-lib") - (version "1.0.27.1") + (version "1.1.3") (source (origin (method url-fetch) (uri (string-append @@ -873,10 +873,9 @@ intercept and print the system calls executed by the program.") version ".tar.bz2")) (sha256 (base32 - "0fx057746dj7rjdi0jnvx2m9b0y1lgdkh1hks87d8w32xyihf3k9")) - (patches (search-patches "alsa-lib-mips-atomic-fix.patch")))) + "174n2psp0328xcy2f1ayls67598bxli6q9cf00d2qnac3012aa3i")))) (build-system gnu-build-system) - (home-page "http://www.alsa-project.org/") + (home-page "https://www.alsa-project.org/") (synopsis "The Advanced Linux Sound Architecture libraries") (description "The Advanced Linux Sound Architecture (ALSA) provides audio and diff --git a/gnu/packages/patches/alsa-lib-mips-atomic-fix.patch b/gnu/packages/patches/alsa-lib-mips-atomic-fix.patch deleted file mode 100644 index 8c37bd3ac..000000000 --- a/gnu/packages/patches/alsa-lib-mips-atomic-fix.patch +++ /dev/null @@ -1,42 +0,0 @@ -Fix the declarations of inlined atomic ops for mips. - -This patch was copied from Debian. - ---- alsa-lib/include/iatomic.h.orig 2013-05-21 04:48:28.000000000 -0400 -+++ alsa-lib/include/iatomic.h 2013-10-29 13:01:37.055995968 -0400 -@@ -720,7 +720,7 @@ - * Atomically adds @i to @v. Note that the guaranteed useful range - * of an atomic_t is only 24 bits. - */ --extern __inline__ void atomic_add(int i, atomic_t * v) -+static __inline__ void atomic_add(int i, atomic_t * v) - { - unsigned long temp; - -@@ -744,7 +744,7 @@ - * Atomically subtracts @i from @v. Note that the guaranteed - * useful range of an atomic_t is only 24 bits. - */ --extern __inline__ void atomic_sub(int i, atomic_t * v) -+static __inline__ void atomic_sub(int i, atomic_t * v) - { - unsigned long temp; - -@@ -763,7 +763,7 @@ - /* - * Same as above, but return the result value - */ --extern __inline__ int atomic_add_return(int i, atomic_t * v) -+static __inline__ int atomic_add_return(int i, atomic_t * v) - { - unsigned long temp, result; - -@@ -784,7 +784,7 @@ - return result; - } - --extern __inline__ int atomic_sub_return(int i, atomic_t * v) -+static __inline__ int atomic_sub_return(int i, atomic_t * v) - { - unsigned long temp, result; - -- cgit v1.3 From 816417f5a48cbdf8e551b47d36bb56be17dd4b9e Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Fri, 24 Feb 2017 00:13:02 -0500 Subject: gnu: tcsh: Update to 6.20.00. * gnu/packages/shells.scm (tcsh): Update to 6.20.00. [source]: Remove 'tcsh-do-not-define-BSDWAIT.patch'. [inputs]: Remove coreutils. Move autoconf to ... [native-inputs]: ... here. Add perl. * gnu/packages/patches/tcsh-fix-autotest.patch: Adjust patch to upstream changes. * gnu/packages/patches/tcsh-do-not-define-BSDWAIT.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - .../patches/tcsh-do-not-define-BSDWAIT.patch | 33 ------ gnu/packages/patches/tcsh-fix-autotest.patch | 113 ++++++++++----------- gnu/packages/shells.scm | 12 +-- 4 files changed, 58 insertions(+), 101 deletions(-) delete mode 100644 gnu/packages/patches/tcsh-do-not-define-BSDWAIT.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index d7c7ed347..ec9332271 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -918,7 +918,6 @@ dist_patch_DATA = \ %D%/packages/patches/tar-skip-unreliable-tests.patch \ %D%/packages/patches/tcl-mkindex-deterministic.patch \ %D%/packages/patches/tclxml-3.2-install.patch \ - %D%/packages/patches/tcsh-do-not-define-BSDWAIT.patch \ %D%/packages/patches/tcsh-fix-autotest.patch \ %D%/packages/patches/tcsh-fix-out-of-bounds-read.patch \ %D%/packages/patches/teensy-loader-cli-help.patch \ diff --git a/gnu/packages/patches/tcsh-do-not-define-BSDWAIT.patch b/gnu/packages/patches/tcsh-do-not-define-BSDWAIT.patch deleted file mode 100644 index 142688321..000000000 --- a/gnu/packages/patches/tcsh-do-not-define-BSDWAIT.patch +++ /dev/null @@ -1,33 +0,0 @@ -Do not define BSDWAIT to avoid error "storage size of ‘w’ isn’t known". - -This is an adapted version of the upstream patch taken from here: -https://github.com/tcsh-org/tcsh/commit/4689eb60a74bf13bc146ca3d76e9d7a124ab7b49.patch - -From 4689eb60a74bf13bc146ca3d76e9d7a124ab7b49 Mon Sep 17 00:00:00 2001 -From: christos -Date: Fri, 23 Sep 2016 19:17:28 +0000 -Subject: [PATCH] Don't define BSDWAIT for linux anymore. - ---- - sh.proc.c | 8 +++----- - 1 file changed, 3 insertions(+), 5 deletions(-) - -diff --git a/sh.proc.c b/sh.proc.c -index 49b199f..874d67c 100644 ---- sh.proc.c -+++ sh.proc.c -@@ -47,11 +47,9 @@ RCSID("$tcsh$") - # define HZ 16 - #endif /* aiws */ - --#if defined(_BSD) || (defined(IRIS4D) && __STDC__) || defined(__lucid) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__) --# if !defined(__ANDROID__) --# define BSDWAIT --# endif --#endif /* _BSD || (IRIS4D && __STDC__) || __lucid || glibc */ -+#if defined(_BSD) || (defined(IRIS4D) && __STDC__) || defined(__lucid) -+# define BSDWAIT -+#endif /* _BSD || (IRIS4D && __STDC__) || __lucid */ - #ifndef WTERMSIG - # define WTERMSIG(w) (((union wait *) &(w))->w_termsig) - # ifndef BSDWAIT diff --git a/gnu/packages/patches/tcsh-fix-autotest.patch b/gnu/packages/patches/tcsh-fix-autotest.patch index a16980161..78444a1b2 100644 --- a/gnu/packages/patches/tcsh-fix-autotest.patch +++ b/gnu/packages/patches/tcsh-fix-autotest.patch @@ -1,6 +1,6 @@ ---- tests/commands.at 2011-01-22 01:04:02.000000000 +0100 -+++ tests/commands.at 2013-02-04 10:57:24.000000000 +0100 -@@ -919,26 +919,27 @@ +--- tests/commands.at ++++ tests/commands.at +@@ -921,26 +921,27 @@ AT_CLEANUP TCSH_UNTESTED([notify]) @@ -48,27 +48,9 @@ AT_SETUP([popd]) -@@ -1203,11 +1204,12 @@ - AT_DATA([script.csh], - [[set var=$1 - ]]) --AT_CHECK([[tcsh -f -c 'source -h script.csh foo; history' \ -- | sed 's/ [^ ]* / TIME /']], , --[ 1 TIME source -h script.csh foo ; history -- 2 TIME set var=$1 --]) -+# XXX: Not sure why this fails. The output is : "1 TIME set var=$1" -+#AT_CHECK([[tcsh -f -c 'source -h script.csh foo; history' \ -+# | sed 's/ [^ ]* / TIME /']], , -+#[ 1 TIME source -h script.csh foo ; history -+# 2 TIME set var=$1 -+#]) - - AT_CHECK([tcsh -f -c 'source -h script.csh foo; echo $var'], 1, [], - [var: Undefined variable. ---- tests/lexical.at 2011-12-27 22:50:52.000000000 +0100 -+++ tests/lexical.at 2013-02-04 10:53:21.000000000 +0100 -@@ -33,9 +33,9 @@ +--- tests/lexical.at ++++ tests/lexical.at +@@ -35,9 +35,9 @@ AT_CHECK([if [ ! -t 0 ]; then exit 77; fi],, [Skipping comment tests]) AT_CHECK([echo 'echo OK@%:@comment' | tcsh -f], , [OK ]) @@ -81,9 +63,33 @@ AT_DATA([comment2.csh], [[echo testing...@%:@\ ---- tests/subst.at 2011-12-27 22:50:52.000000000 +0100 -+++ tests/subst.at 2013-02-01 08:14:25.000000000 +0100 -@@ -54,7 +54,7 @@ +@@ -567,10 +567,10 @@ run=3 +# Adapt to changes in sed 4.3: +# https://github.com/tcsh-org/tcsh/commit/2ad4fc1705893207598ed5cd21713ddf3f17bba0 + ]]) + AT_DATA([uniformity_test.csh], + [[ +-set SERVICE_NAME_LOG = `cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[:blank:]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g'` ++set SERVICE_NAME_LOG = `cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g'` + echo -n "$SERVICE_NAME_LOG" > ./output1 + +-cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[:blank:]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g' > ./output2 ++cat batchsystem.properties | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\s//g' | perl -pe 's/\)/\\\)/g' | perl -pe 's/\(/\\\(/g' > ./output2 + + diff -uprN ./output1 ./output2 >& /dev/null + +@@ -587,7 +587,7 @@ AT_DATA([quoting_result_test.csh], + echo "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP\)(HOST=db\)(PORT=1521\)\)(CONNECT_DATA=(SERVER=DEDICATED\)(SERVICE_NAME=bns03\)\)\)" > ./expected_result + + set string = "jdbc_url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=bns03)))" +-set SERVICE_NAME_LOG = `echo "$string" | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[:blank:]*\([^$]*\)$/\1/p' | perl -pe 's/\)/\\\)/g'` ++set SERVICE_NAME_LOG = `echo "$string" | grep '^jdbc_url' | sed -ne 's/^[^=]*=[^@]*@[[:blank:]]*\([^$]*\)$/\1/p' | perl -pe 's/\)/\\\)/g'` + + echo "$SERVICE_NAME_LOG" > ./actual_result + +--- tests/subst.at ++++ tests/subst.at +@@ -54,7 +54,7 @@ AT_CHECK([echo 'echo ~; echo "$HOME"' | tcsh -f | uniq | wc -l | tr -d ' \t'], , [1 ]) @@ -92,39 +98,9 @@ | wc -l | tr -d ' \t'], , [1 ]) ---- tests/variables.at 2011-12-27 22:50:52.000000000 +0100 -+++ tests/variables.at 2013-02-04 11:40:35.000000000 +0100 -@@ -317,17 +317,18 @@ - AT_CLEANUP - - --AT_SETUP([$ edit]) -- --AT_CHECK([TERM=something tcsh -f -c 'echo $?edit'], , --[1 --]) -- --AT_CHECK([TERM=dumb tcsh -f -c 'echo $?edit'], , --[0 --]) -- --AT_CLEANUP -+# XXX -+#AT_SETUP([$ edit]) -+# -+#AT_CHECK([TERM=something tcsh -f -c 'echo $?edit'], , -+#[1 -+#]) -+# -+#AT_CHECK([TERM=dumb tcsh -f -c 'echo $?edit'], , -+#[0 -+#]) -+# -+#AT_CLEANUP - - - AT_SETUP([$ ellipsis]) -@@ -642,7 +643,8 @@ +--- tests/variables.at ++++ tests/variables.at +@@ -666,7 +666,8 @@ set listflags=(-xA $cwd/args.sh) ls-F -something . ]]) AT_DATA([args.sh], @@ -134,7 +110,22 @@ ]]) chmod a+x args.sh AT_CHECK([tcsh -f listflags.csh], , -@@ -695,55 +697,57 @@ +@@ -704,9 +705,9 @@ AT_CHECK([tcsh -f mail.csh], , +# This test fails by trying to change to the build user's home +# directory, which does not exist. + AT_CLEANUP + + +-AT_SETUP([$ cdtohome]) +-AT_CHECK([tcsh -f -c 'cd'], 0) +-AT_CLEANUP ++#AT_SETUP([$ cdtohome]) ++#AT_CHECK([tcsh -f -c 'cd'], 0) ++#AT_CLEANUP + AT_SETUP([$ noimplicithome]) + AT_CHECK([tcsh -f -c 'unset cdtohome; cd'], 1, , [cd: Too few arguments. + ]) +@@ -728,55 +729,57 @@ TCSH_UNTESTED([$ oid]) AT_SETUP([$ owd]) AT_DATA([owd.csh], diff --git a/gnu/packages/shells.scm b/gnu/packages/shells.scm index cc3968f9b..d9e0f93a1 100644 --- a/gnu/packages/shells.scm +++ b/gnu/packages/shells.scm @@ -218,7 +218,7 @@ written by Paul Haahr and Byron Rakitzis.") (define-public tcsh (package (name "tcsh") - (version "6.18.01") + (version "6.20.00") (source (origin (method url-fetch) ;; Old tarballs are moved to old/. @@ -228,16 +228,16 @@ written by Paul Haahr and Byron Rakitzis.") "old/tcsh-" version ".tar.gz"))) (sha256 (base32 - "1a4z9kwgx1iqqzvv64si34m60gj34p7lp6rrcrb59s7ka5wa476q")) + "17ggxkkn5skl0v1x0j6hbv5l0sgnidfzwv16992sqkdm983fg7dq")) (patches (search-patches "tcsh-fix-autotest.patch" - "tcsh-do-not-define-BSDWAIT.patch" "tcsh-fix-out-of-bounds-read.patch")) (patch-flags '("-p0")))) (build-system gnu-build-system) - (inputs + (native-inputs `(("autoconf" ,autoconf) - ("coreutils" ,coreutils) - ("ncurses" ,ncurses))) + ("perl" ,perl))) + (inputs + `(("ncurses" ,ncurses))) (arguments `(#:phases (alist-cons-before -- cgit v1.3 From f0a01af5c6e297f9068e4f359488e9fd0417fad2 Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Sat, 25 Feb 2017 21:59:09 -0500 Subject: gnu: eudev: Fix build failure caused by conflicting function type declaration. * gnu/packages/patches/eudev-conflicting-declaration.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/linux.scm (eudev)[source]: Use it. --- gnu/local.mk | 1 + gnu/packages/linux.scm | 3 ++- .../patches/eudev-conflicting-declaration.patch | 31 ++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/eudev-conflicting-declaration.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index ec9332271..fbf0552af 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -541,6 +541,7 @@ dist_patch_DATA = \ %D%/packages/patches/emacs-scheme-complete-scheme-r5rs-info.patch \ %D%/packages/patches/emacs-source-date-epoch.patch \ %D%/packages/patches/eudev-rules-directory.patch \ + %D%/packages/patches/eudev-conflicting-declaration.patch \ %D%/packages/patches/evilwm-lost-focus-bug.patch \ %D%/packages/patches/expat-CVE-2016-0718-fix-regression.patch \ %D%/packages/patches/fastcap-mulGlobal.patch \ diff --git a/gnu/packages/linux.scm b/gnu/packages/linux.scm index b3fd9d260..fe72f98b7 100644 --- a/gnu/packages/linux.scm +++ b/gnu/packages/linux.scm @@ -1741,7 +1741,8 @@ from the module-init-tools project.") (sha256 (base32 "06gyyl90n85x8i7lfhns514y1kg1ians13l467admyzy3kjxkqsp")) - (patches (search-patches "eudev-rules-directory.patch")))) + (patches (search-patches "eudev-rules-directory.patch" + "eudev-conflicting-declaration.patch")))) (build-system gnu-build-system) (native-inputs `(("pkg-config" ,pkg-config) diff --git a/gnu/packages/patches/eudev-conflicting-declaration.patch b/gnu/packages/patches/eudev-conflicting-declaration.patch new file mode 100644 index 000000000..f5399e20d --- /dev/null +++ b/gnu/packages/patches/eudev-conflicting-declaration.patch @@ -0,0 +1,31 @@ +Fix build failure due to conflicting declaration of +keyboard_lookup_key() in gperf-3.1: + +https://bugs.gentoo.org/show_bug.cgi?id=604864 + +Patch copied from upstream source repository: + +https://github.com/gentoo/eudev/commit/5bab4d8de0dcbb8e2e7d4d5125b4aea1652a0d60 + +From 5bab4d8de0dcbb8e2e7d4d5125b4aea1652a0d60 Mon Sep 17 00:00:00 2001 +From: "Anthony G. Basile" +Date: Thu, 5 Jan 2017 16:21:17 -0500 +Subject: [PATCH] src/udev/udev-builtin-keyboard.c: fix build with gperf 3.1 + +Signed-off-by: Anthony G. Basile +--- + src/udev/udev-builtin-keyboard.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/udev/udev-builtin-keyboard.c b/src/udev/udev-builtin-keyboard.c +index 73171c3..fad3520 100644 +--- a/src/udev/udev-builtin-keyboard.c ++++ b/src/udev/udev-builtin-keyboard.c +@@ -28,7 +28,6 @@ + + #include "udev.h" + +-static const struct key *keyboard_lookup_key(const char *str, unsigned len); + #include "keyboard-keys-from-name.h" + #include "keyboard-keys-to-name.h" + -- cgit v1.3 From fe36608f99384f0bb6d3376038b8ddd82841b020 Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Sat, 25 Feb 2017 11:13:16 -0500 Subject: gnu: fontconfig: Fix build failure caused by symbol conflict with glibc@2.25. * gnu/packages/patches/fontconfig-charwidth-symbol-conflict.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/fontutils.scm (fontconfig)[source]: Use it. --- gnu/local.mk | 1 + gnu/packages/fontutils.scm | 1 + .../fontconfig-charwidth-symbol-conflict.patch | 82 ++++++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 gnu/packages/patches/fontconfig-charwidth-symbol-conflict.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index fbf0552af..6f7bed9d1 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -558,6 +558,7 @@ dist_patch_DATA = \ %D%/packages/patches/flint-ldconfig.patch \ %D%/packages/patches/fltk-shared-lib-defines.patch \ %D%/packages/patches/fltk-xfont-on-demand.patch \ + %D%/packages/patches/fontconfig-charwidth-symbol-conflict.patch \ %D%/packages/patches/fontforge-svg-modtime.patch \ %D%/packages/patches/freeimage-CVE-2015-0852.patch \ %D%/packages/patches/freeimage-CVE-2016-5684.patch \ diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm index fad0cb11a..ad15659f6 100644 --- a/gnu/packages/fontutils.scm +++ b/gnu/packages/fontutils.scm @@ -229,6 +229,7 @@ fonts to/from the WOFF2 format.") (uri (string-append "https://www.freedesktop.org/software/fontconfig/release/fontconfig-" version ".tar.bz2")) + (patches (search-patches "fontconfig-charwidth-symbol-conflict.patch")) (sha256 (base32 "1wy7svvp7df6bjpg1m5vizb3ngd7rhb20vpclv3x3qa71khs6jdl")))) (build-system gnu-build-system) diff --git a/gnu/packages/patches/fontconfig-charwidth-symbol-conflict.patch b/gnu/packages/patches/fontconfig-charwidth-symbol-conflict.patch new file mode 100644 index 000000000..8ebe33bc6 --- /dev/null +++ b/gnu/packages/patches/fontconfig-charwidth-symbol-conflict.patch @@ -0,0 +1,82 @@ +The first patch is copied from the upstream source repository: + +https://cgit.freedesktop.org/fontconfig/commit/?id=1ab5258f7c2abfafcd63a760ca08bf93591912da + +The second patch is adapted from a message to from the OpenEmbedded mailing list: + +http://lists.openembedded.org/pipermail/openembedded-core/2016-December/130213.html + +From 1ab5258f7c2abfafcd63a760ca08bf93591912da Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 14 Dec 2016 16:11:05 -0800 +Subject: Avoid conflicts with integer width macros from TS 18661-1:2014 + +glibc 2.25+ has now defined these macros in +https://sourceware.org/git/?p=glibc.git;a=commit;h=5b17fd0da62bf923cb61d1bb7b08cf2e1f1f9c1a + +Create an alias for FC_CHAR_WIDTH for ABI compatibility + +Signed-off-by: Khem Raj + +diff --git a/fontconfig/fontconfig.h b/fontconfig/fontconfig.h +index 5c72b22..070a557 100644 +--- a/fontconfig/fontconfig.h ++++ b/fontconfig/fontconfig.h +@@ -128,7 +128,8 @@ typedef int FcBool; + #define FC_USER_CACHE_FILE ".fonts.cache-" FC_CACHE_VERSION + + /* Adjust outline rasterizer */ +-#define FC_CHAR_WIDTH "charwidth" /* Int */ ++#define FC_CHARWIDTH "charwidth" /* Int */ ++#define FC_CHAR_WIDTH FC_CHARWIDTH + #define FC_CHAR_HEIGHT "charheight"/* Int */ + #define FC_MATRIX "matrix" /* FcMatrix */ + +diff --git a/src/fcobjs.h b/src/fcobjs.h +index 1fc4f65..d27864b 100644 +--- a/src/fcobjs.h ++++ b/src/fcobjs.h +@@ -51,7 +51,7 @@ FC_OBJECT (DPI, FcTypeDouble, NULL) + FC_OBJECT (RGBA, FcTypeInteger, NULL) + FC_OBJECT (SCALE, FcTypeDouble, NULL) + FC_OBJECT (MINSPACE, FcTypeBool, NULL) +-FC_OBJECT (CHAR_WIDTH, FcTypeInteger, NULL) ++FC_OBJECT (CHARWIDTH, FcTypeInteger, NULL) + FC_OBJECT (CHAR_HEIGHT, FcTypeInteger, NULL) + FC_OBJECT (MATRIX, FcTypeMatrix, NULL) + FC_OBJECT (CHARSET, FcTypeCharSet, FcCompareCharSet) +-- +cgit v0.10.2 + +From 20cddc824c6501c2082cac41b162c34cd5fcc530 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 11 Dec 2016 14:32:00 -0800 +Subject: [PATCH] Avoid conflicts with integer width macros from TS + 18661-1:2014 + +glibc 2.25+ has now defined these macros in +https://sourceware.org/git/?p=glibc.git;a=commit;h=5b17fd0da62bf923cb61d1bb7b08cf2e1f1f9c1a + +Signed-off-by: Khem Raj +--- +Upstream-Status: Submitted + + fontconfig/fontconfig.h | 2 +- + src/fcobjs.h | 2 +- + src/fcobjshash.gperf | 2 +- + src/fcobjshash.h | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +Index: fontconfig-2.12.1/src/fcobjshash.h +=================================================================== +--- fontconfig-2.12.1.orig/src/fcobjshash.h ++++ fontconfig-2.12.1/src/fcobjshash.h +@@ -284,7 +284,7 @@ FcObjectTypeLookup (register const char + {(int)(long)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str43,FC_CHARSET_OBJECT}, + {-1}, + #line 47 "fcobjshash.gperf" +- {(int)(long)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str45,FC_CHAR_WIDTH_OBJECT}, ++ {(int)(long)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str45,FC_CHARWIDTH_OBJECT}, + #line 48 "fcobjshash.gperf" + {(int)(long)&((struct FcObjectTypeNamePool_t *)0)->FcObjectTypeNamePool_str46,FC_CHAR_HEIGHT_OBJECT}, + #line 55 "fcobjshash.gperf" -- cgit v1.3 From 56a44e2d5b16ff9b54468f0f48d8fa679b8163ed Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Sun, 26 Feb 2017 15:37:54 -0500 Subject: gnu: gd: Fix test failure with FreeType 2.7. * gnu/packages/patches/gd-freetype-test-failure.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/gd.scm (gd)[source]: Use it. --- gnu/local.mk | 1 + gnu/packages/gd.scm | 3 +- .../patches/gd-freetype-test-failure.patch | 59 ++++++++++++++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/gd-freetype-test-failure.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 6f7bed9d1..dc210c766 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -581,6 +581,7 @@ dist_patch_DATA = \ %D%/packages/patches/gd-fix-gd2-read-test.patch \ %D%/packages/patches/gd-fix-tests-on-i686.patch \ %D%/packages/patches/gd-fix-truecolor-format-correction.patch \ + %D%/packages/patches/gd-freetype-test-failure.patch \ %D%/packages/patches/gegl-CVE-2012-4433.patch \ %D%/packages/patches/geoclue-config.patch \ %D%/packages/patches/ghc-dont-pass-linker-flags-via-response-files.patch \ diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm index 1c2be119b..8cac242b5 100644 --- a/gnu/packages/gd.scm +++ b/gnu/packages/gd.scm @@ -51,7 +51,8 @@ (base32 "1rp4v7n1dq38b92kl7gkvpvqqkw7nvdfnz6d5kip5klkxfki6zqk")) (patches (search-patches "gd-fix-gd2-read-test.patch" - "gd-fix-tests-on-i686.patch")))) + "gd-fix-tests-on-i686.patch" + "gd-freetype-test-failure.patch")))) (build-system gnu-build-system) (arguments `(#:phases diff --git a/gnu/packages/patches/gd-freetype-test-failure.patch b/gnu/packages/patches/gd-freetype-test-failure.patch new file mode 100644 index 000000000..49c16ca08 --- /dev/null +++ b/gnu/packages/patches/gd-freetype-test-failure.patch @@ -0,0 +1,59 @@ +Fix a test failure with freetype 2.7: + +https://github.com/libgd/libgd/commit/a5570d3ed30ff76c2a8bdd54f4ab1825acca0143 + +Patch copied from upstream source repository: + +https://github.com/libgd/libgd/commit/a5570d3ed30ff76c2a8bdd54f4ab1825acca0143 + +From a5570d3ed30ff76c2a8bdd54f4ab1825acca0143 Mon Sep 17 00:00:00 2001 +From: "Christoph M. Becker" +Date: Sun, 29 Jan 2017 17:07:50 +0100 +Subject: [PATCH] Fix #302: Test suite fails with freetype 2.7 + +Actually, the test failures are not necessarily related to freetype +2.7, but rather are caused by subpixel hinting which is enabled by +default in freetype 2.7. Subpixel hinting is, however, already +available in freetype 2.5 and in versions having the "Infinality" +patch. + +To get the expected results in all environments, we have to disable +subpixel hinting, what is easily done by setting a respective +environment variable. + +See also: +* https://www.freetype.org/freetype2/docs/subpixel-hinting.html +* https://www.freetype.org/freetype2/docs/reference/ft2-tt_driver.html +--- + tests/freetype/bug00132.c | 3 +++ + tests/gdimagestringft/gdimagestringft_bbox.c | 3 +++ + 2 files changed, 6 insertions(+) + +diff --git a/tests/freetype/bug00132.c b/tests/freetype/bug00132.c +index 713dd2d..42ed5b1 100644 +--- a/tests/freetype/bug00132.c ++++ b/tests/freetype/bug00132.c +@@ -11,6 +11,9 @@ int main() + char *path; + char *ret = NULL; + ++ /* disable subpixel hinting */ ++ putenv("FREETYPE_PROPERTIES=truetype:interpreter-version=35"); ++ + im = gdImageCreateTrueColor(50, 30); + + if (!im) { +diff --git a/tests/gdimagestringft/gdimagestringft_bbox.c b/tests/gdimagestringft/gdimagestringft_bbox.c +index 0161ec8..1596a9e 100644 +--- a/tests/gdimagestringft/gdimagestringft_bbox.c ++++ b/tests/gdimagestringft/gdimagestringft_bbox.c +@@ -38,6 +38,9 @@ int main() + int error = 0; + FILE *fp; + ++ /* disable subpixel hinting */ ++ putenv("FREETYPE_PROPERTIES=truetype:interpreter-version=35"); ++ + path = gdTestFilePath("freetype/DejaVuSans.ttf"); + im = gdImageCreate(800, 800); + gdImageColorAllocate(im, 0xFF, 0xFF, 0xFF); /* allocate white for background color */ -- cgit v1.3 From ac2d5de3dae5a1854f27e1a0b4c09f71001cb91a Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Sun, 26 Feb 2017 20:12:18 +0100 Subject: gnu: libssh2: Fix build failure after 1.8.0 upgrade. * gnu/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/ssh.scm (libssh2)[source]: Use it. [arguments]: Add 'autoreconf' phase. [native-inputs]: Add AUTOCONF and AUTOMAKE. --- gnu/local.mk | 1 + .../libssh2-fix-build-failure-with-gcrypt.patch | 33 ++++++++++++++++++++++ gnu/packages/ssh.scm | 12 ++++++-- 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index dc210c766..3d9ad7065 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -692,6 +692,7 @@ dist_patch_DATA = \ %D%/packages/patches/libmad-frame-length.patch \ %D%/packages/patches/libmad-mips-newgcc.patch \ %D%/packages/patches/libssh-0.6.5-CVE-2016-0739.patch \ + %D%/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch \ %D%/packages/patches/libtar-CVE-2013-4420.patch \ %D%/packages/patches/libtheora-config-guess.patch \ %D%/packages/patches/libtiff-CVE-2016-10092.patch \ diff --git a/gnu/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch b/gnu/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch new file mode 100644 index 000000000..4133be7fc --- /dev/null +++ b/gnu/packages/patches/libssh2-fix-build-failure-with-gcrypt.patch @@ -0,0 +1,33 @@ +This fixes a regression introduced in 1.8.0 where libssh2 fails to build +with the gcrypt backend. + +Upstream bug URL: + +https://github.com/libssh2/libssh2/issues/150 + +Patch copied from upstream source repository: + +https://github.com/libssh2/libssh2/commit/ced924b78a40126606797ef57a74066eb3b4b83f + +From ced924b78a40126606797ef57a74066eb3b4b83f Mon Sep 17 00:00:00 2001 +From: Sergei Trofimovich +Date: Mon, 31 Oct 2016 09:04:33 +0000 +Subject: [PATCH] acinclude.m4: fix ./configure --with-libgcrypt + +diff --git a/acinclude.m4 b/acinclude.m4 +index 734ef07..c78260c 100644 +--- a/acinclude.m4 ++++ b/acinclude.m4 +@@ -412,9 +412,9 @@ AC_DEFUN([LIBSSH2_CHECKFOR_GCRYPT], [ + + old_LDFLAGS=$LDFLAGS + old_CFLAGS=$CFLAGS +- if test -n "$use_libgcrypt" && test "$use_libgcrypt" != "no"; then +- LDFLAGS="$LDFLAGS -L$use_libgcrypt/lib" +- CFLAGS="$CFLAGS -I$use_libgcrypt/include" ++ if test -n "$with_libgcrypt_prefix" && test "$use_libgcrypt" != "no"; then ++ LDFLAGS="$LDFLAGS -L$with_libgcrypt_prefix/lib" ++ CFLAGS="$CFLAGS -I$with_libgcrypt_prefix/include" + fi + AC_LIB_HAVE_LINKFLAGS([gcrypt], [], [ + #include diff --git a/gnu/packages/ssh.scm b/gnu/packages/ssh.scm index c48e3e6f9..2e502fe7f 100644 --- a/gnu/packages/ssh.scm +++ b/gnu/packages/ssh.scm @@ -93,13 +93,21 @@ remote applications.") version ".tar.gz")) (sha256 (base32 - "1m3n8spv79qhjq4yi0wgly5s5rc8783jb1pyra9bkx1md0plxwrr")))) + "1m3n8spv79qhjq4yi0wgly5s5rc8783jb1pyra9bkx1md0plxwrr")) + (patches + (search-patches "libssh2-fix-build-failure-with-gcrypt.patch")))) (build-system gnu-build-system) ;; The installed libssh2.pc file does not include paths to libgcrypt and ;; zlib libraries, so we need to propagate the inputs. (propagated-inputs `(("libgcrypt" ,libgcrypt) ("zlib" ,zlib))) - (arguments '(#:configure-flags `("--with-libgcrypt"))) + (arguments '(#:configure-flags `("--with-libgcrypt") + #:phases (modify-phases %standard-phases + (add-before 'configure 'autoreconf + (lambda _ + (zero? (system* "autoreconf" "-v"))))))) + (native-inputs `(("autoconf" ,autoconf) + ("automake" ,automake))) (synopsis "Client-side C library implementing the SSH2 protocol") (description "libssh2 is a library intended to allow software developers access to -- cgit v1.3 From 37e78bc7f2707ec621274e4ed8c307a3da9843c6 Mon Sep 17 00:00:00 2001 From: Rene Saavedra Date: Wed, 1 Mar 2017 19:19:01 -0600 Subject: gnu: fontconfig: Fix PATH_MAX for Hurd systems. * gnu/packages/patches/fontconfig-path-max.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/fontutils.scm (fontconfig)[source]: Use it. Signed-off-by: Manolis Ragkousis --- gnu/local.mk | 3 +- gnu/packages/fontutils.scm | 4 +- gnu/packages/patches/fontconfig-path-max.patch | 124 +++++++++++++++++++++++++ 3 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/patches/fontconfig-path-max.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 3d9ad7065..abb1b0405 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -5,7 +5,7 @@ # Copyright © 2013, 2014, 2015, 2016 Mark H Weaver # Copyright © 2016 Chris Marusich # Copyright © 2016, 2017 Kei Kebreau -# Copyright © 2016 Rene Saavedra +# Copyright © 2016, 2017 Rene Saavedra # Copyright © 2016 Adonay "adfeno" Felipe Nogueira # Copyright © 2016, 2017 Ricardo Wurmus # Copyright © 2016 Ben Woodcroft @@ -559,6 +559,7 @@ dist_patch_DATA = \ %D%/packages/patches/fltk-shared-lib-defines.patch \ %D%/packages/patches/fltk-xfont-on-demand.patch \ %D%/packages/patches/fontconfig-charwidth-symbol-conflict.patch \ + %D%/packages/patches/fontconfig-path-max.patch \ %D%/packages/patches/fontforge-svg-modtime.patch \ %D%/packages/patches/freeimage-CVE-2015-0852.patch \ %D%/packages/patches/freeimage-CVE-2016-5684.patch \ diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm index 136b5bc99..d89bd49b7 100644 --- a/gnu/packages/fontutils.scm +++ b/gnu/packages/fontutils.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2014, 2016 Eric Bavier ;;; Copyright © 2016 Mark H Weaver ;;; Copyright © 2016, 2017 Efraim Flashner +;;; Copyright © 2017 Rene Saavedra ;;; ;;; This file is part of GNU Guix. ;;; @@ -229,7 +230,8 @@ fonts to/from the WOFF2 format.") (uri (string-append "https://www.freedesktop.org/software/fontconfig/release/fontconfig-" version ".tar.bz2")) - (patches (search-patches "fontconfig-charwidth-symbol-conflict.patch")) + (patches (search-patches "fontconfig-charwidth-symbol-conflict.patch" + "fontconfig-path-max.patch")) (sha256 (base32 "1wy7svvp7df6bjpg1m5vizb3ngd7rhb20vpclv3x3qa71khs6jdl")))) (build-system gnu-build-system) diff --git a/gnu/packages/patches/fontconfig-path-max.patch b/gnu/packages/patches/fontconfig-path-max.patch new file mode 100644 index 000000000..e12f60ef0 --- /dev/null +++ b/gnu/packages/patches/fontconfig-path-max.patch @@ -0,0 +1,124 @@ +This patch fix the build on GNU/Hurd, due to PATH_MAX isn't defined. + +The patch was adapted from upstream source repository: +'' +Commit: abdb6d658e1a16410dd1c964e365a3ebd5039e7c + +--- + src/fcdefault.c | 34 +++++++++++++++++++++++++++------- + src/fcint.h | 6 ++++++ + src/fcstat.c | 12 +++++++++++- + 3 files changed, 44 insertions(+), 8 deletions(-) + +diff --git a/src/fcdefault.c b/src/fcdefault.c +index 6647a8f..5afd7ec 100644 +--- a/src/fcdefault.c ++++ b/src/fcdefault.c +@@ -148,17 +148,34 @@ retry: + prgname = FcStrdup (""); + #else + # if defined (HAVE_GETEXECNAME) +- const char *p = getexecname (); ++ char *p = FcStrdup(getexecname ()); + # elif defined (HAVE_READLINK) +- char buf[PATH_MAX + 1]; +- int len; ++ size_t size = FC_PATH_MAX; + char *p = NULL; + +- len = readlink ("/proc/self/exe", buf, sizeof (buf) - 1); +- if (len != -1) ++ while (1) + { +- buf[len] = '\0'; +- p = buf; ++ char *buf = malloc (size); ++ ssize_t len; ++ ++ if (!buf) ++ break; ++ ++ len = readlink ("/proc/self/exe", buf, size - 1); ++ if (len < 0) ++ { ++ free (buf); ++ break; ++ } ++ if (len < size - 1) ++ { ++ buf[len] = 0; ++ p = buf; ++ break; ++ } ++ ++ free (buf); ++ size *= 2; + } + # else + char *p = NULL; +@@ -176,6 +193,9 @@ retry: + + if (!prgname) + prgname = FcStrdup (""); ++ ++ if (p) ++ free (p); + #endif + + if (!fc_atomic_ptr_cmpexch (&default_prgname, NULL, prgname)) { +diff --git a/src/fcint.h b/src/fcint.h +index ac911ad..dad34c5 100644 +--- a/src/fcint.h ++++ b/src/fcint.h +@@ -70,6 +70,12 @@ extern pfnSHGetFolderPathA pSHGetFolderPathA; + # define FC_DIR_SEPARATOR_S "/" + #endif + ++#ifdef PATH_MAX ++#define FC_PATH_MAX PATH_MAX ++#else ++#define FC_PATH_MAX 128 ++#endif ++ + #if __GNUC__ >= 4 + #define FC_UNUSED __attribute__((unused)) + #else +diff --git a/src/fcstat.c b/src/fcstat.c +index 1734fa4..f6e1aaa 100644 +--- a/src/fcstat.c ++++ b/src/fcstat.c +@@ -278,8 +278,13 @@ FcDirChecksum (const FcChar8 *dir, time_t *checksum) + { + #endif + struct stat statb; +- char f[PATH_MAX + 1]; ++ char *f = malloc (len + 1 + dlen + 1); + ++ if (!f) ++ { ++ ret = -1; ++ goto bail; ++ } + memcpy (f, dir, len); + f[len] = FC_DIR_SEPARATOR; + memcpy (&f[len + 1], files[n]->d_name, dlen); +@@ -287,11 +292,16 @@ FcDirChecksum (const FcChar8 *dir, time_t *checksum) + if (lstat (f, &statb) < 0) + { + ret = -1; ++ free (f); + goto bail; + } + if (S_ISDIR (statb.st_mode)) ++ { ++ free (f); + goto bail; ++ } + ++ free (f); + dtype = statb.st_mode; + #ifdef HAVE_STRUCT_DIRENT_D_TYPE + } +-- +2.11.0 + -- cgit v1.3 From e8293ef12cd3df77f4111163fa5ac554480d134b Mon Sep 17 00:00:00 2001 From: Julien Lepiller Date: Mon, 27 Feb 2017 11:09:11 +0100 Subject: gnu: gd: Fix an issue with XBM decoding. * gnu/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch: New file. * gnu/local.scm (dist_patch_DATA): Add it. * gnu/packages/gd.scm (gd)[source]: Use it. Signed-off-by: Leo Famulari --- gnu/local.mk | 1 + gnu/packages/gd.scm | 3 +- .../patches/gd-php-73968-Fix-109-XBM-reading.patch | 121 +++++++++++++++++++++ 3 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index abb1b0405..5765a3f33 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -583,6 +583,7 @@ dist_patch_DATA = \ %D%/packages/patches/gd-fix-tests-on-i686.patch \ %D%/packages/patches/gd-fix-truecolor-format-correction.patch \ %D%/packages/patches/gd-freetype-test-failure.patch \ + %D%/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch \ %D%/packages/patches/gegl-CVE-2012-4433.patch \ %D%/packages/patches/geoclue-config.patch \ %D%/packages/patches/ghc-dont-pass-linker-flags-via-response-files.patch \ diff --git a/gnu/packages/gd.scm b/gnu/packages/gd.scm index ea1354041..62c8fd858 100644 --- a/gnu/packages/gd.scm +++ b/gnu/packages/gd.scm @@ -53,7 +53,8 @@ "1rp4v7n1dq38b92kl7gkvpvqqkw7nvdfnz6d5kip5klkxfki6zqk")) (patches (search-patches "gd-fix-gd2-read-test.patch" "gd-fix-tests-on-i686.patch" - "gd-freetype-test-failure.patch")))) + "gd-freetype-test-failure.patch" + "gd-php-73968-Fix-109-XBM-reading.patch")))) (build-system gnu-build-system) (arguments ;; As recommended by github.com/libgd/libgd/issues/278 to fix rounding diff --git a/gnu/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch b/gnu/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch new file mode 100644 index 000000000..a926c1455 --- /dev/null +++ b/gnu/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch @@ -0,0 +1,121 @@ +This bug was first reported to php on https://bugs.php.net/bug.php?id=73968. +php then reported it to gd in https://github.com/libgd/libgd/issues/109. + +Patch adapted from upstream source repository: + +https://github.com/libgd/libgd/commit/082c5444838ea0d84f9fb6441aefdb44d78d9bba + +Binary diffs have been removed from the patch because our patch +procedure doesn't support them. + +From 082c5444838ea0d84f9fb6441aefdb44d78d9bba Mon Sep 17 00:00:00 2001 +From: "Christoph M. Becker" +Date: Fri, 20 Jan 2017 22:48:20 +0100 +Subject: [PATCH] Fix #109: XBM reading fails with printed error + +When calculating the number of required bytes of an XBM image, we have +to take the line padding into account. +--- + src/gd_xbm.c | 2 +- + tests/xbm/CMakeLists.txt | 1 + + tests/xbm/Makemodule.am | 5 ++++- + tests/xbm/github_bug_109.c | 35 +++++++++++++++++++++++++++++++++++ + tests/xbm/github_bug_109.xbm | 5 +++++ + 5 files changed, 47 insertions(+), 2 deletions(-) + create mode 100644 tests/xbm/github_bug_109.c + create mode 100644 tests/xbm/github_bug_109.xbm + create mode 100644 tests/xbm/github_bug_109_exp.png + +diff --git a/src/gd_xbm.c b/src/gd_xbm.c +index 5f09b56..c2ba2ad 100644 +--- a/src/gd_xbm.c ++++ b/src/gd_xbm.c +@@ -108,7 +108,7 @@ BGD_DECLARE(gdImagePtr) gdImageCreateFromXbm(FILE * fd) + max_bit = 32768; + } + if (max_bit) { +- bytes = (width * height / 8) + 1; ++ bytes = (width + 7) / 8 * height; + if (!bytes) { + return 0; + } +diff --git a/tests/xbm/CMakeLists.txt b/tests/xbm/CMakeLists.txt +index 183cf5e..08576e0 100644 +--- a/tests/xbm/CMakeLists.txt ++++ b/tests/xbm/CMakeLists.txt +@@ -1,4 +1,5 @@ + LIST(APPEND TESTS_FILES ++ github_bug_109 + github_bug_170 + ) + +diff --git a/tests/xbm/Makemodule.am b/tests/xbm/Makemodule.am +index ba1eabd..0f5beb6 100644 +--- a/tests/xbm/Makemodule.am ++++ b/tests/xbm/Makemodule.am +@@ -1,5 +1,8 @@ + libgd_test_programs += \ ++ xbm/github_bug_109 \ + xbm/github_bug_170 + + EXTRA_DIST += \ +- xbm/CMakeLists.txt ++ xbm/CMakeLists.txt \ ++ xbm/github_bug_109.xbm \ ++ xbm/github_bug_109_exp.png +diff --git a/tests/xbm/github_bug_109.c b/tests/xbm/github_bug_109.c +new file mode 100644 +index 0000000..1a020c6 +--- /dev/null ++++ b/tests/xbm/github_bug_109.c +@@ -0,0 +1,35 @@ ++/** ++ * Test reading of XBM images with a width that is not a multiple of 8 ++ * ++ * We're reading such an XBM image, and check that we got what we've expected, ++ * instead of an error message. ++ * ++ * See also . ++ */ ++ ++ ++#include "gd.h" ++#include "gdtest.h" ++ ++ ++int main() ++{ ++ gdImagePtr im; ++ FILE *fp; ++ char *path; ++ ++ fp = gdTestFileOpen2("xbm", "github_bug_109.xbm"); ++ im = gdImageCreateFromXbm(fp); ++ fclose(fp); ++ gdTestAssert(im != NULL); ++ gdTestAssert(gdImageGetTrueColorPixel(im, 0, 0) == 0); ++ gdTestAssert(gdImageGetTrueColorPixel(im, 0, 1) == 0xffffff); ++ ++ path = gdTestFilePath2("xbm", "github_bug_109_exp.png"); ++ gdAssertImageEqualsToFile(path, im); ++ gdFree(path); ++ ++ gdImageDestroy(im); ++ ++ return gdNumFailures(); ++} +diff --git a/tests/xbm/github_bug_109.xbm b/tests/xbm/github_bug_109.xbm +new file mode 100644 +index 0000000..f427d86 +--- /dev/null ++++ b/tests/xbm/github_bug_109.xbm +@@ -0,0 +1,5 @@ ++#define test_width 10 ++#define test_height 10 ++static unsigned char test_bits[] = { ++ 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00, ++ 0xFF, 0x03, 0x00, 0x00, 0xFF, 0x03, 0x00, 0x00}; + +-- +2.7.4 + -- cgit v1.3 From 60a5080675e3787c51b6cd61d43c610f85e4028a Mon Sep 17 00:00:00 2001 From: Julien Lepiller Date: Mon, 27 Feb 2017 11:15:29 +0100 Subject: gnu: php: Update to 7.1.2. * gnu/packages/php.scm (php): Update to 7.1.2. [inputs]: Add gnutls. [arguments]: Disable more tests in 'prepare-tests' phase. (gd-for-php): Remove variable. * gnu/packages/patches/gd-fix-chunk-size-on-boundaries.patch, gnu/packages/patches/gd-fix-truecolor-format-correction.patch: Delete files. * gnu/local.mk (dist_patch_DATA): Remove them. Signed-off-by: Leo Famulari --- gnu/local.mk | 2 - .../patches/gd-fix-chunk-size-on-boundaries.patch | 102 --------------------- .../gd-fix-truecolor-format-correction.patch | 95 ------------------- gnu/packages/php.scm | 27 +++--- 4 files changed, 13 insertions(+), 213 deletions(-) delete mode 100644 gnu/packages/patches/gd-fix-chunk-size-on-boundaries.patch delete mode 100644 gnu/packages/patches/gd-fix-truecolor-format-correction.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 5765a3f33..e4114be65 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -578,10 +578,8 @@ dist_patch_DATA = \ %D%/packages/patches/gcc-6-cross-environment-variables.patch \ %D%/packages/patches/gcj-arm-mode.patch \ %D%/packages/patches/gdk-pixbuf-list-dir.patch \ - %D%/packages/patches/gd-fix-chunk-size-on-boundaries.patch \ %D%/packages/patches/gd-fix-gd2-read-test.patch \ %D%/packages/patches/gd-fix-tests-on-i686.patch \ - %D%/packages/patches/gd-fix-truecolor-format-correction.patch \ %D%/packages/patches/gd-freetype-test-failure.patch \ %D%/packages/patches/gd-php-73968-Fix-109-XBM-reading.patch \ %D%/packages/patches/gegl-CVE-2012-4433.patch \ diff --git a/gnu/packages/patches/gd-fix-chunk-size-on-boundaries.patch b/gnu/packages/patches/gd-fix-chunk-size-on-boundaries.patch deleted file mode 100644 index e395c66d8..000000000 --- a/gnu/packages/patches/gd-fix-chunk-size-on-boundaries.patch +++ /dev/null @@ -1,102 +0,0 @@ -This fixes PHP bug #73155: https://bugs.php.net/bug.php?id=73155 - -Patch adapted from upstream source repository: - -https://github.com/libgd/libgd/commit/8067a8ac336dfe0acbe96ec2eb24572209a7f279 - -(.gitignore change removed) - -From 8067a8ac336dfe0acbe96ec2eb24572209a7f279 Mon Sep 17 00:00:00 2001 -From: "Christoph M. Becker" -Date: Fri, 23 Sep 2016 18:29:52 +0200 -Subject: [PATCH] Fix #309: gdImageGd2() writes wrong chunk sizes on boundaries - -(cherry picked from commit bb1998a16e30d542ab22eba5501911a9aa066edb) ---- - src/gd_gd2.c | 4 ++-- - tests/gd2/CMakeLists.txt | 1 + - tests/gd2/Makemodule.am | 1 + - tests/gd2/bug00309.c | 37 +++++++++++++++++++++++++++++++++++++ - 4 files changed, 41 insertions(+), 2 deletions(-) - create mode 100644 tests/gd2/bug00309.c - -diff --git a/src/gd_gd2.c b/src/gd_gd2.c -index 75e5e1f..b9b2f93 100644 ---- a/src/gd_gd2.c -+++ b/src/gd_gd2.c -@@ -938,8 +938,8 @@ _gdImageGd2 (gdImagePtr im, gdIOCtx * out, int cs, int fmt) - }; - - /* Work out number of chunks. */ -- ncx = im->sx / cs + 1; -- ncy = im->sy / cs + 1; -+ ncx = (im->sx + cs - 1) / cs; -+ ncy = (im->sy + cs - 1) / cs; - - /* Write the standard header. */ - _gd2PutHeader (im, out, cs, fmt, ncx, ncy); -diff --git a/tests/gd2/CMakeLists.txt b/tests/gd2/CMakeLists.txt -index 3b650ad..247b466 100644 ---- a/tests/gd2/CMakeLists.txt -+++ b/tests/gd2/CMakeLists.txt -@@ -1,5 +1,6 @@ - SET(TESTS_FILES - bug_289 -+ bug00309 - gd2_empty_file - gd2_im2im - gd2_null -diff --git a/tests/gd2/Makemodule.am b/tests/gd2/Makemodule.am -index b8ee946..d69aee0 100644 ---- a/tests/gd2/Makemodule.am -+++ b/tests/gd2/Makemodule.am -@@ -1,5 +1,6 @@ - libgd_test_programs += \ - gd2/bug_289 \ -+ gd2/bug00309 \ - gd2/gd2_empty_file \ - gd2/php_bug_72339 \ - gd2/gd2_read_corrupt -diff --git a/tests/gd2/bug00309.c b/tests/gd2/bug00309.c -new file mode 100644 -index 0000000..b649cdc ---- /dev/null -+++ b/tests/gd2/bug00309.c -@@ -0,0 +1,37 @@ -+/** -+ * Regression test for . -+ * -+ * We test that an image with 64x64 pixels reports only a single chunk in the -+ * GD2 image header when the chunk size is 64. -+ */ -+ -+ -+#include "gd.h" -+#include "gdtest.h" -+ -+ -+int main() -+{ -+ gdImagePtr im; -+ unsigned char *buf; -+ int size, word; -+ -+ im = gdImageCreate(64, 64); -+ gdImageColorAllocate(im, 0, 0, 0); -+ -+ buf = gdImageGd2Ptr(im, 64, 1, &size); -+ -+ gdImageDestroy(im); -+ -+ word = buf[10] << 8 | buf[11]; -+ gdTestAssertMsg(word == 64, "chunk size is %d, but expected 64\n", word); -+ word = buf[14] << 8 | buf[15]; -+ gdTestAssertMsg(word == 1, "x chunk count is %d, but expected 1\n", word); -+ word = buf[16] << 8 | buf[17]; -+ gdTestAssertMsg(word == 1, "y chunk count is %d, but expected 1\n", word); -+ gdTestAssertMsg(size == 5145, "file size is %d, but expected 5145\n", size); -+ -+ gdFree(buf); -+ -+ return gdNumFailures(); -+} diff --git a/gnu/packages/patches/gd-fix-truecolor-format-correction.patch b/gnu/packages/patches/gd-fix-truecolor-format-correction.patch deleted file mode 100644 index be3eff932..000000000 --- a/gnu/packages/patches/gd-fix-truecolor-format-correction.patch +++ /dev/null @@ -1,95 +0,0 @@ -This fixes PHP bug #73159: https://bugs.php.net/bug.php?id=73159 - -Patch lifted from upstream source repository: - -https://github.com/libgd/libgd/commit/e1f61a4141d2e0937a13b8bfb1992b9f29eb05f5 - -From e1f61a4141d2e0937a13b8bfb1992b9f29eb05f5 Mon Sep 17 00:00:00 2001 -From: "Christoph M. Becker" -Date: Mon, 15 Aug 2016 17:49:40 +0200 -Subject: [PATCH] Fix #289: Passing unrecognized formats to gdImageGd2 results - in corrupted files - -We must not apply the format correction twice for truecolor images. - -(cherry picked from commit 09090c125658e23a4ae2a2e002646bb7278bd89e) ---- - src/gd_gd2.c | 2 +- - tests/gd2/CMakeLists.txt | 1 + - tests/gd2/Makemodule.am | 1 + - tests/gd2/bug_289.c | 33 +++++++++++++++++++++++++++++++++ - 4 files changed, 36 insertions(+), 1 deletion(-) - create mode 100644 tests/gd2/bug_289.c - -diff --git a/src/gd_gd2.c b/src/gd_gd2.c -index 86c881e..75e5e1f 100644 ---- a/src/gd_gd2.c -+++ b/src/gd_gd2.c -@@ -918,7 +918,7 @@ _gdImageGd2 (gdImagePtr im, gdIOCtx * out, int cs, int fmt) - /* Force fmt to a valid value since we don't return anything. */ - /* */ - if ((fmt != GD2_FMT_RAW) && (fmt != GD2_FMT_COMPRESSED)) { -- fmt = im->trueColor ? GD2_FMT_TRUECOLOR_COMPRESSED : GD2_FMT_COMPRESSED; -+ fmt = GD2_FMT_COMPRESSED; - }; - if (im->trueColor) { - fmt += 2; -diff --git a/tests/gd2/CMakeLists.txt b/tests/gd2/CMakeLists.txt -index 8aecacc..3b650ad 100644 ---- a/tests/gd2/CMakeLists.txt -+++ b/tests/gd2/CMakeLists.txt -@@ -1,4 +1,5 @@ - SET(TESTS_FILES -+ bug_289 - gd2_empty_file - gd2_im2im - gd2_null -diff --git a/tests/gd2/Makemodule.am b/tests/gd2/Makemodule.am -index 754a284..b8ee946 100644 ---- a/tests/gd2/Makemodule.am -+++ b/tests/gd2/Makemodule.am -@@ -1,4 +1,5 @@ - libgd_test_programs += \ -+ gd2/bug_289 \ - gd2/gd2_empty_file \ - gd2/php_bug_72339 \ - gd2/gd2_read_corrupt -diff --git a/tests/gd2/bug_289.c b/tests/gd2/bug_289.c -new file mode 100644 -index 0000000..ad311e9 ---- /dev/null -+++ b/tests/gd2/bug_289.c -@@ -0,0 +1,33 @@ -+/** -+ * Passing an unrecognized format to gdImageGd2() should result in -+ * GD2_FMT_TRUECOLOR_COMPRESSED for truecolor images. -+ * -+ * See . -+ */ -+ -+#include "gd.h" -+#include "gdtest.h" -+ -+ -+#define GD2_FMT_UNRECOGNIZED 0 -+#define GD2_FMT_TRUECOLOR_COMPRESSED 4 -+ -+#define MSG "expected %s byte to be %d, but got %d\n" -+ -+ -+int main() -+{ -+ gdImagePtr im; -+ char *buffer; -+ int size; -+ -+ im = gdImageCreateTrueColor(10, 10); -+ gdTestAssert(im != NULL); -+ buffer = (char *) gdImageGd2Ptr(im, 128, GD2_FMT_UNRECOGNIZED, &size); -+ gdTestAssert(buffer != NULL); -+ gdImageDestroy(im); -+ gdTestAssertMsg(buffer[12] == 0, MSG, "1st", 0, buffer[12]); -+ gdTestAssertMsg(buffer[13] == GD2_FMT_TRUECOLOR_COMPRESSED, MSG, "2nd", GD2_FMT_TRUECOLOR_COMPRESSED, buffer[13]); -+ -+ return gdNumFailures(); -+} diff --git a/gnu/packages/php.scm b/gnu/packages/php.scm index 16b098517..0dfee36c1 100644 --- a/gnu/packages/php.scm +++ b/gnu/packages/php.scm @@ -50,21 +50,10 @@ #:use-module (guix build-system gnu) #:use-module ((guix licenses) #:prefix license:)) -;; This fixes PHP bugs 73155 and 73159. Remove when gd -;; is updated to > 2.2.3. -(define gd-for-php - (package (inherit gd) - (source - (origin - (inherit (package-source gd)) - (patches (search-patches - "gd-fix-truecolor-format-correction.patch" - "gd-fix-chunk-size-on-boundaries.patch")))))) - (define-public php (package (name "php") - (version "7.0.14") + (version "7.1.2") (home-page "https://secure.php.net/") (source (origin (method url-fetch) @@ -72,7 +61,7 @@ name "-" version ".tar.xz")) (sha256 (base32 - "12ccgbrfchgvmcfb88rcknq7xmrf19c5ysdr4v8jxk51j9izy78g")) + "0wg9ng230w724rpwsrhcg4pw41xm1xhz0zx76haanyymkz1s05fq")) (modules '((guix build utils))) (snippet '(with-directory-excursion "ext" @@ -179,6 +168,13 @@ "ext/standard/tests/general_functions/bug44667.phpt" "ext/standard/tests/general_functions/proc_open.phpt") (("/bin/cat") (which "cat"))) + + ;; These tests fail because they include a file whose modification + ;; time is 0. Touch them to make the test pass. The issue is reported + ;; upstream as #74137. + (utime "sapi/phpdbg/tests/include.inc" 1 1) + (utime "sapi/phpdbg/tests/phpdbg_get_executable_stream_wrapper.inc" 1 1) + ;; The encoding of this file is not recognized, so we simply drop it. (delete-file "ext/mbstring/tests/mb_send_mail07.phpt") @@ -257,8 +253,10 @@ ;; The test expects an Array, but instead get the contents(?). "ext/gd/tests/bug43073.phpt" ;; imagettftext() returns wrong coordinates. + "ext/gd/tests/bug48732-mb.phpt" "ext/gd/tests/bug48732.phpt" ;; Similarly for imageftbbox(). + "ext/gd/tests/bug48801-mb.phpt" "ext/gd/tests/bug48801.phpt" ;; Different expected output from imagecolorallocate(). "ext/gd/tests/bug53504.phpt" @@ -291,10 +289,11 @@ ("curl" ,curl) ("cyrus-sasl" ,cyrus-sasl) ("freetype" ,freetype) - ("gd" ,gd-for-php) + ("gd" ,gd) ("gdbm" ,gdbm) ("glibc" ,glibc) ("gmp" ,gmp) + ("gnutls" ,gnutls) ("libgcrypt" ,libgcrypt) ("libjpeg" ,libjpeg) ("libpng" ,libpng) -- cgit v1.3 From e4d34cd0f0ced54210ed2df2b251430a9c98c6f4 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Sat, 11 Mar 2017 20:20:50 +0100 Subject: gnu: python@3.5: Fix getentropy() calls on kernels < 3.17. * gnu/packages/patches/python-3.5-getentropy-on-old-kernels.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/python.scm (python-3.5, python-minimal, python-minimal-wrapper, python-wrapper)[source]: Use it. --- gnu/local.mk | 1 + .../python-3.5-getentropy-on-old-kernels.patch | 720 +++++++++++++++++++++ gnu/packages/python.scm | 1 + 3 files changed, 722 insertions(+) create mode 100644 gnu/packages/patches/python-3.5-getentropy-on-old-kernels.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 3356c9e34..c51e04289 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -855,6 +855,7 @@ dist_patch_DATA = \ %D%/packages/patches/python-3-search-paths.patch \ %D%/packages/patches/python-3.4-fix-tests.patch \ %D%/packages/patches/python-3.5-fix-tests.patch \ + %D%/packages/patches/python-3.5-getentropy-on-old-kernels.patch \ %D%/packages/patches/python-dendropy-fix-tests.patch \ %D%/packages/patches/python-file-double-encoding-bug.patch \ %D%/packages/patches/python-fix-tests.patch \ diff --git a/gnu/packages/patches/python-3.5-getentropy-on-old-kernels.patch b/gnu/packages/patches/python-3.5-getentropy-on-old-kernels.patch new file mode 100644 index 000000000..8a12b5b44 --- /dev/null +++ b/gnu/packages/patches/python-3.5-getentropy-on-old-kernels.patch @@ -0,0 +1,720 @@ +This patch resolves a compatibility issue when compiled against glibc 2.25 +and run runder kernels < 3.17: + +https://bugzilla.redhat.com/show_bug.cgi?id=1410175 + +Upstream bug URL: https://bugs.python.org/issue29157 + +Patch copied from upstream source repository: + +https://hg.python.org/cpython/rev/8125d9a8152b + +# HG changeset patch +# User Victor Stinner +# Date 1483957133 -3600 +# Node ID 8125d9a8152b79e712cb09c7094b9129b9bcea86 +# Parent 337461574c90281630751b6095c4e1baf380cf7d +Issue #29157: Prefer getrandom() over getentropy() + +Copy and then adapt Python/random.c from default branch. Difference between 3.5 +and default branches: + +* Python 3.5 only uses getrandom() in non-blocking mode: flags=GRND_NONBLOCK +* If getrandom() fails with EAGAIN: py_getrandom() immediately fails and + remembers that getrandom() doesn't work. +* Python 3.5 has no _PyOS_URandomNonblock() function: _PyOS_URandom() + works in non-blocking mode on Python 3.5 + +diff --git a/Python/random.c b/Python/random.c +--- Python/random.c ++++ Python/random.c +@@ -1,6 +1,9 @@ + #include "Python.h" + #ifdef MS_WINDOWS + # include ++/* All sample MSDN wincrypt programs include the header below. It is at least ++ * required with Min GW. */ ++# include + #else + # include + # ifdef HAVE_SYS_STAT_H +@@ -37,10 +40,9 @@ win32_urandom_init(int raise) + return 0; + + error: +- if (raise) ++ if (raise) { + PyErr_SetFromWindowsErr(0); +- else +- Py_FatalError("Failed to initialize Windows random API (CryptoGen)"); ++ } + return -1; + } + +@@ -53,8 +55,9 @@ win32_urandom(unsigned char *buffer, Py_ + + if (hCryptProv == 0) + { +- if (win32_urandom_init(raise) == -1) ++ if (win32_urandom_init(raise) == -1) { + return -1; ++ } + } + + while (size > 0) +@@ -63,11 +66,9 @@ win32_urandom(unsigned char *buffer, Py_ + if (!CryptGenRandom(hCryptProv, (DWORD)chunk, buffer)) + { + /* CryptGenRandom() failed */ +- if (raise) ++ if (raise) { + PyErr_SetFromWindowsErr(0); +- else +- Py_FatalError("Failed to initialized the randomized hash " +- "secret using CryptoGen)"); ++ } + return -1; + } + buffer += chunk; +@@ -76,58 +77,23 @@ win32_urandom(unsigned char *buffer, Py_ + return 0; + } + +-/* Issue #25003: Don't use getentropy() on Solaris (available since +- * Solaris 11.3), it is blocking whereas os.urandom() should not block. */ +-#elif defined(HAVE_GETENTROPY) && !defined(sun) +-#define PY_GETENTROPY 1 +- +-/* Fill buffer with size pseudo-random bytes generated by getentropy(). +- Return 0 on success, or raise an exception and return -1 on error. +- +- If fatal is nonzero, call Py_FatalError() instead of raising an exception +- on error. */ +-static int +-py_getentropy(unsigned char *buffer, Py_ssize_t size, int fatal) +-{ +- while (size > 0) { +- Py_ssize_t len = Py_MIN(size, 256); +- int res; +- +- if (!fatal) { +- Py_BEGIN_ALLOW_THREADS +- res = getentropy(buffer, len); +- Py_END_ALLOW_THREADS +- +- if (res < 0) { +- PyErr_SetFromErrno(PyExc_OSError); +- return -1; +- } +- } +- else { +- res = getentropy(buffer, len); +- if (res < 0) +- Py_FatalError("getentropy() failed"); +- } +- +- buffer += len; +- size -= len; +- } +- return 0; +-} +- +-#else ++#else /* !MS_WINDOWS */ + + #if defined(HAVE_GETRANDOM) || defined(HAVE_GETRANDOM_SYSCALL) + #define PY_GETRANDOM 1 + +-/* Call getrandom() ++/* Call getrandom() to get random bytes: ++ + - Return 1 on success +- - Return 0 if getrandom() syscall is not available (failed with ENOSYS or +- EPERM) or if getrandom(GRND_NONBLOCK) failed with EAGAIN (system urandom +- not initialized yet) and raise=0. ++ - Return 0 if getrandom() is not available (failed with ENOSYS or EPERM), ++ or if getrandom(GRND_NONBLOCK) failed with EAGAIN (system urandom not ++ initialized yet). + - Raise an exception (if raise is non-zero) and return -1 on error: +- getrandom() failed with EINTR and the Python signal handler raised an +- exception, or getrandom() failed with a different error. */ ++ if getrandom() failed with EINTR, raise is non-zero and the Python signal ++ handler raised an exception, or if getrandom() failed with a different ++ error. ++ ++ getrandom() is retried if it failed with EINTR: interrupted by a signal. */ + static int + py_getrandom(void *buffer, Py_ssize_t size, int raise) + { +@@ -142,16 +108,19 @@ py_getrandom(void *buffer, Py_ssize_t si + * see https://bugs.python.org/issue26839. To avoid this, use the + * GRND_NONBLOCK flag. */ + const int flags = GRND_NONBLOCK; ++ char *dest; + long n; + + if (!getrandom_works) { + return 0; + } + ++ dest = buffer; + while (0 < size) { + #ifdef sun + /* Issue #26735: On Solaris, getrandom() is limited to returning up +- to 1024 bytes */ ++ to 1024 bytes. Call it multiple times if more bytes are ++ requested. */ + n = Py_MIN(size, 1024); + #else + n = Py_MIN(size, LONG_MAX); +@@ -161,34 +130,35 @@ py_getrandom(void *buffer, Py_ssize_t si + #ifdef HAVE_GETRANDOM + if (raise) { + Py_BEGIN_ALLOW_THREADS +- n = getrandom(buffer, n, flags); ++ n = getrandom(dest, n, flags); + Py_END_ALLOW_THREADS + } + else { +- n = getrandom(buffer, n, flags); ++ n = getrandom(dest, n, flags); + } + #else + /* On Linux, use the syscall() function because the GNU libc doesn't +- * expose the Linux getrandom() syscall yet. See: +- * https://sourceware.org/bugzilla/show_bug.cgi?id=17252 */ ++ expose the Linux getrandom() syscall yet. See: ++ https://sourceware.org/bugzilla/show_bug.cgi?id=17252 */ + if (raise) { + Py_BEGIN_ALLOW_THREADS +- n = syscall(SYS_getrandom, buffer, n, flags); ++ n = syscall(SYS_getrandom, dest, n, flags); + Py_END_ALLOW_THREADS + } + else { +- n = syscall(SYS_getrandom, buffer, n, flags); ++ n = syscall(SYS_getrandom, dest, n, flags); + } + #endif + + if (n < 0) { +- /* ENOSYS: getrandom() syscall not supported by the kernel (but +- * maybe supported by the host which built Python). EPERM: +- * getrandom() syscall blocked by SECCOMP or something else. */ ++ /* ENOSYS: the syscall is not supported by the kernel. ++ EPERM: the syscall is blocked by a security policy (ex: SECCOMP) ++ or something else. */ + if (errno == ENOSYS || errno == EPERM) { + getrandom_works = 0; + return 0; + } ++ + if (errno == EAGAIN) { + /* getrandom(GRND_NONBLOCK) fails with EAGAIN if the system + urandom is not initialiazed yet. In this case, fall back on +@@ -202,32 +172,101 @@ py_getrandom(void *buffer, Py_ssize_t si + } + + if (errno == EINTR) { +- if (PyErr_CheckSignals()) { +- if (!raise) { +- Py_FatalError("getrandom() interrupted by a signal"); ++ if (raise) { ++ if (PyErr_CheckSignals()) { ++ return -1; + } +- return -1; + } + +- /* retry getrandom() */ ++ /* retry getrandom() if it was interrupted by a signal */ + continue; + } + + if (raise) { + PyErr_SetFromErrno(PyExc_OSError); + } +- else { +- Py_FatalError("getrandom() failed"); ++ return -1; ++ } ++ ++ dest += n; ++ size -= n; ++ } ++ return 1; ++} ++ ++#elif defined(HAVE_GETENTROPY) ++#define PY_GETENTROPY 1 ++ ++/* Fill buffer with size pseudo-random bytes generated by getentropy(): ++ ++ - Return 1 on success ++ - Return 0 if getentropy() syscall is not available (failed with ENOSYS or ++ EPERM). ++ - Raise an exception (if raise is non-zero) and return -1 on error: ++ if getentropy() failed with EINTR, raise is non-zero and the Python signal ++ handler raised an exception, or if getentropy() failed with a different ++ error. ++ ++ getentropy() is retried if it failed with EINTR: interrupted by a signal. */ ++static int ++py_getentropy(char *buffer, Py_ssize_t size, int raise) ++{ ++ /* Is getentropy() supported by the running kernel? Set to 0 if ++ getentropy() failed with ENOSYS or EPERM. */ ++ static int getentropy_works = 1; ++ ++ if (!getentropy_works) { ++ return 0; ++ } ++ ++ while (size > 0) { ++ /* getentropy() is limited to returning up to 256 bytes. Call it ++ multiple times if more bytes are requested. */ ++ Py_ssize_t len = Py_MIN(size, 256); ++ int res; ++ ++ if (raise) { ++ Py_BEGIN_ALLOW_THREADS ++ res = getentropy(buffer, len); ++ Py_END_ALLOW_THREADS ++ } ++ else { ++ res = getentropy(buffer, len); ++ } ++ ++ if (res < 0) { ++ /* ENOSYS: the syscall is not supported by the running kernel. ++ EPERM: the syscall is blocked by a security policy (ex: SECCOMP) ++ or something else. */ ++ if (errno == ENOSYS || errno == EPERM) { ++ getentropy_works = 0; ++ return 0; ++ } ++ ++ if (errno == EINTR) { ++ if (raise) { ++ if (PyErr_CheckSignals()) { ++ return -1; ++ } ++ } ++ ++ /* retry getentropy() if it was interrupted by a signal */ ++ continue; ++ } ++ ++ if (raise) { ++ PyErr_SetFromErrno(PyExc_OSError); + } + return -1; + } + +- buffer += n; +- size -= n; ++ buffer += len; ++ size -= len; + } + return 1; + } +-#endif ++#endif /* defined(HAVE_GETENTROPY) && !defined(sun) */ ++ + + static struct { + int fd; +@@ -235,136 +274,123 @@ static struct { + ino_t st_ino; + } urandom_cache = { -1 }; + ++/* Read random bytes from the /dev/urandom device: + +-/* Read 'size' random bytes from py_getrandom(). Fall back on reading from +- /dev/urandom if getrandom() is not available. ++ - Return 0 on success ++ - Raise an exception (if raise is non-zero) and return -1 on error + +- Call Py_FatalError() on error. */ +-static void +-dev_urandom_noraise(unsigned char *buffer, Py_ssize_t size) ++ Possible causes of errors: ++ ++ - open() failed with ENOENT, ENXIO, ENODEV, EACCES: the /dev/urandom device ++ was not found. For example, it was removed manually or not exposed in a ++ chroot or container. ++ - open() failed with a different error ++ - fstat() failed ++ - read() failed or returned 0 ++ ++ read() is retried if it failed with EINTR: interrupted by a signal. ++ ++ The file descriptor of the device is kept open between calls to avoid using ++ many file descriptors when run in parallel from multiple threads: ++ see the issue #18756. ++ ++ st_dev and st_ino fields of the file descriptor (from fstat()) are cached to ++ check if the file descriptor was replaced by a different file (which is ++ likely a bug in the application): see the issue #21207. ++ ++ If the file descriptor was closed or replaced, open a new file descriptor ++ but don't close the old file descriptor: it probably points to something ++ important for some third-party code. */ ++static int ++dev_urandom(char *buffer, Py_ssize_t size, int raise) + { + int fd; + Py_ssize_t n; + +- assert (0 < size); ++ if (raise) { ++ struct _Py_stat_struct st; + +-#ifdef PY_GETRANDOM +- if (py_getrandom(buffer, size, 0) == 1) { +- return; ++ if (urandom_cache.fd >= 0) { ++ /* Does the fd point to the same thing as before? (issue #21207) */ ++ if (_Py_fstat_noraise(urandom_cache.fd, &st) ++ || st.st_dev != urandom_cache.st_dev ++ || st.st_ino != urandom_cache.st_ino) { ++ /* Something changed: forget the cached fd (but don't close it, ++ since it probably points to something important for some ++ third-party code). */ ++ urandom_cache.fd = -1; ++ } ++ } ++ if (urandom_cache.fd >= 0) ++ fd = urandom_cache.fd; ++ else { ++ fd = _Py_open("/dev/urandom", O_RDONLY); ++ if (fd < 0) { ++ if (errno == ENOENT || errno == ENXIO || ++ errno == ENODEV || errno == EACCES) { ++ PyErr_SetString(PyExc_NotImplementedError, ++ "/dev/urandom (or equivalent) not found"); ++ } ++ /* otherwise, keep the OSError exception raised by _Py_open() */ ++ return -1; ++ } ++ if (urandom_cache.fd >= 0) { ++ /* urandom_fd was initialized by another thread while we were ++ not holding the GIL, keep it. */ ++ close(fd); ++ fd = urandom_cache.fd; ++ } ++ else { ++ if (_Py_fstat(fd, &st)) { ++ close(fd); ++ return -1; ++ } ++ else { ++ urandom_cache.fd = fd; ++ urandom_cache.st_dev = st.st_dev; ++ urandom_cache.st_ino = st.st_ino; ++ } ++ } ++ } ++ ++ do { ++ n = _Py_read(fd, buffer, (size_t)size); ++ if (n == -1) ++ return -1; ++ if (n == 0) { ++ PyErr_Format(PyExc_RuntimeError, ++ "Failed to read %zi bytes from /dev/urandom", ++ size); ++ return -1; ++ } ++ ++ buffer += n; ++ size -= n; ++ } while (0 < size); + } +- /* getrandom() failed with ENOSYS or EPERM, +- fall back on reading /dev/urandom */ +-#endif +- +- fd = _Py_open_noraise("/dev/urandom", O_RDONLY); +- if (fd < 0) { +- Py_FatalError("Failed to open /dev/urandom"); +- } +- +- while (0 < size) +- { +- do { +- n = read(fd, buffer, (size_t)size); +- } while (n < 0 && errno == EINTR); +- +- if (n <= 0) { +- /* read() failed or returned 0 bytes */ +- Py_FatalError("Failed to read bytes from /dev/urandom"); +- break; +- } +- buffer += n; +- size -= n; +- } +- close(fd); +-} +- +-/* Read 'size' random bytes from py_getrandom(). Fall back on reading from +- /dev/urandom if getrandom() is not available. +- +- Return 0 on success. Raise an exception and return -1 on error. */ +-static int +-dev_urandom_python(char *buffer, Py_ssize_t size) +-{ +- int fd; +- Py_ssize_t n; +- struct _Py_stat_struct st; +-#ifdef PY_GETRANDOM +- int res; +-#endif +- +- if (size <= 0) +- return 0; +- +-#ifdef PY_GETRANDOM +- res = py_getrandom(buffer, size, 1); +- if (res < 0) { +- return -1; +- } +- if (res == 1) { +- return 0; +- } +- /* getrandom() failed with ENOSYS or EPERM, +- fall back on reading /dev/urandom */ +-#endif +- +- if (urandom_cache.fd >= 0) { +- /* Does the fd point to the same thing as before? (issue #21207) */ +- if (_Py_fstat_noraise(urandom_cache.fd, &st) +- || st.st_dev != urandom_cache.st_dev +- || st.st_ino != urandom_cache.st_ino) { +- /* Something changed: forget the cached fd (but don't close it, +- since it probably points to something important for some +- third-party code). */ +- urandom_cache.fd = -1; +- } +- } +- if (urandom_cache.fd >= 0) +- fd = urandom_cache.fd; + else { +- fd = _Py_open("/dev/urandom", O_RDONLY); ++ fd = _Py_open_noraise("/dev/urandom", O_RDONLY); + if (fd < 0) { +- if (errno == ENOENT || errno == ENXIO || +- errno == ENODEV || errno == EACCES) +- PyErr_SetString(PyExc_NotImplementedError, +- "/dev/urandom (or equivalent) not found"); +- /* otherwise, keep the OSError exception raised by _Py_open() */ + return -1; + } +- if (urandom_cache.fd >= 0) { +- /* urandom_fd was initialized by another thread while we were +- not holding the GIL, keep it. */ +- close(fd); +- fd = urandom_cache.fd; +- } +- else { +- if (_Py_fstat(fd, &st)) { ++ ++ while (0 < size) ++ { ++ do { ++ n = read(fd, buffer, (size_t)size); ++ } while (n < 0 && errno == EINTR); ++ ++ if (n <= 0) { ++ /* stop on error or if read(size) returned 0 */ + close(fd); + return -1; + } +- else { +- urandom_cache.fd = fd; +- urandom_cache.st_dev = st.st_dev; +- urandom_cache.st_ino = st.st_ino; +- } ++ ++ buffer += n; ++ size -= n; + } ++ close(fd); + } +- +- do { +- n = _Py_read(fd, buffer, (size_t)size); +- if (n == -1) { +- return -1; +- } +- if (n == 0) { +- PyErr_Format(PyExc_RuntimeError, +- "Failed to read %zi bytes from /dev/urandom", +- size); +- return -1; +- } +- +- buffer += n; +- size -= n; +- } while (0 < size); +- + return 0; + } + +@@ -376,8 +402,8 @@ dev_urandom_close(void) + urandom_cache.fd = -1; + } + } ++#endif /* !MS_WINDOWS */ + +-#endif + + /* Fill buffer with pseudo-random bytes generated by a linear congruent + generator (LCG): +@@ -400,29 +426,98 @@ lcg_urandom(unsigned int x0, unsigned ch + } + } + ++/* Read random bytes: ++ ++ - Return 0 on success ++ - Raise an exception (if raise is non-zero) and return -1 on error ++ ++ Used sources of entropy ordered by preference, preferred source first: ++ ++ - CryptGenRandom() on Windows ++ - getrandom() function (ex: Linux and Solaris): call py_getrandom() ++ - getentropy() function (ex: OpenBSD): call py_getentropy() ++ - /dev/urandom device ++ ++ Read from the /dev/urandom device if getrandom() or getentropy() function ++ is not available or does not work. ++ ++ Prefer getrandom() over getentropy() because getrandom() supports blocking ++ and non-blocking mode and Python requires non-blocking RNG at startup to ++ initialize its hash secret: see the PEP 524. ++ ++ Prefer getrandom() and getentropy() over reading directly /dev/urandom ++ because these functions don't need file descriptors and so avoid ENFILE or ++ EMFILE errors (too many open files): see the issue #18756. ++ ++ Only use RNG running in the kernel. They are more secure because it is ++ harder to get the internal state of a RNG running in the kernel land than a ++ RNG running in the user land. The kernel has a direct access to the hardware ++ and has access to hardware RNG, they are used as entropy sources. ++ ++ Note: the OpenSSL RAND_pseudo_bytes() function does not automatically reseed ++ its RNG on fork(), two child processes (with the same pid) generate the same ++ random numbers: see issue #18747. Kernel RNGs don't have this issue, ++ they have access to good quality entropy sources. ++ ++ If raise is zero: ++ ++ - Don't raise an exception on error ++ - Don't call the Python signal handler (don't call PyErr_CheckSignals()) if ++ a function fails with EINTR: retry directly the interrupted function ++ - Don't release the GIL to call functions. ++*/ ++static int ++pyurandom(void *buffer, Py_ssize_t size, int raise) ++{ ++#if defined(PY_GETRANDOM) || defined(PY_GETENTROPY) ++ int res; ++#endif ++ ++ if (size < 0) { ++ if (raise) { ++ PyErr_Format(PyExc_ValueError, ++ "negative argument not allowed"); ++ } ++ return -1; ++ } ++ ++ if (size == 0) { ++ return 0; ++ } ++ ++#ifdef MS_WINDOWS ++ return win32_urandom((unsigned char *)buffer, size, raise); ++#else ++ ++#if defined(PY_GETRANDOM) || defined(PY_GETENTROPY) ++#ifdef PY_GETRANDOM ++ res = py_getrandom(buffer, size, raise); ++#else ++ res = py_getentropy(buffer, size, raise); ++#endif ++ if (res < 0) { ++ return -1; ++ } ++ if (res == 1) { ++ return 0; ++ } ++ /* getrandom() or getentropy() function is not available: failed with ++ ENOSYS, EPERM or EAGAIN. Fall back on reading from /dev/urandom. */ ++#endif ++ ++ return dev_urandom(buffer, size, raise); ++#endif ++} ++ + /* Fill buffer with size pseudo-random bytes from the operating system random + number generator (RNG). It is suitable for most cryptographic purposes + except long living private keys for asymmetric encryption. + +- Return 0 on success, raise an exception and return -1 on error. */ ++ Return 0 on success. Raise an exception and return -1 on error. */ + int + _PyOS_URandom(void *buffer, Py_ssize_t size) + { +- if (size < 0) { +- PyErr_Format(PyExc_ValueError, +- "negative argument not allowed"); +- return -1; +- } +- if (size == 0) +- return 0; +- +-#ifdef MS_WINDOWS +- return win32_urandom((unsigned char *)buffer, size, 1); +-#elif defined(PY_GETENTROPY) +- return py_getentropy(buffer, size, 0); +-#else +- return dev_urandom_python((char*)buffer, size); +-#endif ++ return pyurandom(buffer, size, 1); + } + + void +@@ -463,13 +558,14 @@ void + } + } + else { +-#ifdef MS_WINDOWS +- (void)win32_urandom(secret, secret_size, 0); +-#elif defined(PY_GETENTROPY) +- (void)py_getentropy(secret, secret_size, 1); +-#else +- dev_urandom_noraise(secret, secret_size); +-#endif ++ int res; ++ ++ /* _PyRandom_Init() is called very early in the Python initialization ++ and so exceptions cannot be used (use raise=0). */ ++ res = pyurandom(secret, secret_size, 0); ++ if (res < 0) { ++ Py_FatalError("failed to get random numbers to initialize Python"); ++ } + } + } + +@@ -481,8 +577,6 @@ void + CryptReleaseContext(hCryptProv, 0); + hCryptProv = 0; + } +-#elif defined(PY_GETENTROPY) +- /* nothing to clean */ + #else + dev_urandom_close(); + #endif + diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 6e41108df..2a7257b21 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -325,6 +325,7 @@ data types.") (patches (search-patches "python-fix-tests.patch" "python-3.5-fix-tests.patch" + "python-3.5-getentropy-on-old-kernels.patch" "python-3-deterministic-build-info.patch" "python-3-search-paths.patch")) (patch-flags '("-p0")) -- cgit v1.3 From 7cb68a3cb3082cb6ae5435c28ae7f9278e4d1a0f Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Mon, 13 Mar 2017 00:11:12 -0400 Subject: gnu: Remove python-3.4. * gnu/packages/python.scm (python-3.4): Remove variable. * gnu/packages/patches/python-3.4-fix-tests.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - gnu/packages/patches/python-3.4-fix-tests.patch | 12 ------------ gnu/packages/python.scm | 17 ----------------- 3 files changed, 30 deletions(-) delete mode 100644 gnu/packages/patches/python-3.4-fix-tests.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index c51e04289..c74418d0d 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -853,7 +853,6 @@ dist_patch_DATA = \ %D%/packages/patches/python-2.7-source-date-epoch.patch \ %D%/packages/patches/python-3-deterministic-build-info.patch \ %D%/packages/patches/python-3-search-paths.patch \ - %D%/packages/patches/python-3.4-fix-tests.patch \ %D%/packages/patches/python-3.5-fix-tests.patch \ %D%/packages/patches/python-3.5-getentropy-on-old-kernels.patch \ %D%/packages/patches/python-dendropy-fix-tests.patch \ diff --git a/gnu/packages/patches/python-3.4-fix-tests.patch b/gnu/packages/patches/python-3.4-fix-tests.patch deleted file mode 100644 index d1f8138e7..000000000 --- a/gnu/packages/patches/python-3.4-fix-tests.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- Lib/test/test_posixpath.py 2014-03-01 05:46:56.984311000 +0100 -+++ Lib/test/test_posixpath.py 2014-03-07 00:59:20.888311000 +0100 -@@ -319,7 +319,11 @@ - del env['HOME'] - home = pwd.getpwuid(os.getuid()).pw_dir - # $HOME can end with a trailing /, so strip it (see #17809) -- self.assertEqual(posixpath.expanduser("~"), home.rstrip("/")) -+ # The Guix builders have '/' as a home directory, so -+ # home.rstrip("/") will be an empty string and the test will -+ # fail. Let's just disable it since it does not really make -+ # sense with such a bizarre setup. -+ # self.assertEqual(posixpath.expanduser("~"), home.rstrip("/")) diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 2a7257b21..60f059445 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -344,23 +344,6 @@ data types.") (version-major+minor version) "/site-packages")))))))) -(define-public python-3.4 - (package (inherit python-3.5) - (version "3.4.5") - (source (origin - (method url-fetch) - (uri (string-append "https://www.python.org/ftp/python/" - version "/Python-" version ".tar.xz")) - (patches (search-patches - "python-fix-tests.patch" - "python-3.4-fix-tests.patch" - "python-3-deterministic-build-info.patch" - "python-3-search-paths.patch")) - (patch-flags '("-p0")) - (sha256 - (base32 - "12l9klp778wklxmckhghniy5hklss8r26995pyd00qbllk4b2r7f")))))) - ;; Current 3.x version. (define-public python-3 python-3.5) -- cgit v1.3 From dc5cec21f275a023a2793befb692a0dc193ed88a Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Mon, 13 Mar 2017 17:11:19 -0400 Subject: gnu: python@2.7: Fix getentropy() calls on kernels < 3.17. * gnu/packages/patches/python-2.7-getentropy-on-old-kernels.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/python.scm (python-2.7)[source]: Use it. --- gnu/local.mk | 1 + .../python-2.7-getentropy-on-old-kernels.patch | 54 ++++++++++++++++++++++ gnu/packages/python.scm | 3 +- 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/python-2.7-getentropy-on-old-kernels.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index f4d3ec152..3c11e3add 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -848,6 +848,7 @@ dist_patch_DATA = \ %D%/packages/patches/pygpgme-disable-problematic-tests.patch \ %D%/packages/patches/pyqt-configure.patch \ %D%/packages/patches/python-2-deterministic-build-info.patch \ + %D%/packages/patches/python-2.7-getentropy-on-old-kernels.patch \ %D%/packages/patches/python-2.7-search-paths.patch \ %D%/packages/patches/python-2.7-site-prefixes.patch \ %D%/packages/patches/python-2.7-source-date-epoch.patch \ diff --git a/gnu/packages/patches/python-2.7-getentropy-on-old-kernels.patch b/gnu/packages/patches/python-2.7-getentropy-on-old-kernels.patch new file mode 100644 index 000000000..5a09b4ac5 --- /dev/null +++ b/gnu/packages/patches/python-2.7-getentropy-on-old-kernels.patch @@ -0,0 +1,54 @@ +This patch resolves a compatibility issue when compiled against glibc +2.25 +and run runder kernels < 3.17: + +https://bugzilla.redhat.com/show_bug.cgi?id=1410175 + +Upstream bug URLs: + +https://bugs.python.org/issue29157 +https://bugs.python.org/issue29188 + +Patch adapted from upstream source repository: + +https://github.com/python/cpython/commit/01bdbad3e951014c58581635b94b22868537901c + +From 01bdbad3e951014c58581635b94b22868537901c Mon Sep 17 00:00:00 2001 +From: Victor Stinner +Date: Mon, 9 Jan 2017 11:10:41 +0100 +Subject: [PATCH] Don't use getentropy() on Linux + +Issue #29188: Support glibc 2.24 on Linux: don't use getentropy() function but +read from /dev/urandom to get random bytes, for example in os.urandom(). On +Linux, getentropy() is implemented which getrandom() is blocking mode, whereas +os.urandom() should not block. +--- + Misc/NEWS | 5 +++++ + Python/random.c | 11 +++++++++-- + 2 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/Python/random.c b/Python/random.c +index 57c41ffcd6..000cb36938 100644 +--- a/Python/random.c ++++ b/Python/random.c +@@ -97,8 +97,15 @@ win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise) + } + + /* Issue #25003: Don't use getentropy() on Solaris (available since +- * Solaris 11.3), it is blocking whereas os.urandom() should not block. */ +-#elif defined(HAVE_GETENTROPY) && !defined(sun) ++ Solaris 11.3), it is blocking whereas os.urandom() should not block. ++ ++ Issue #29188: Don't use getentropy() on Linux since the glibc 2.24 ++ implements it with the getrandom() syscall which can fail with ENOSYS, ++ and this error is not supported in py_getentropy() and getrandom() is called ++ with flags=0 which blocks until system urandom is initialized, which is not ++ the desired behaviour to seed the Python hash secret nor for os.urandom(): ++ see the PEP 524 which was only implemented in Python 3.6. */ ++#elif defined(HAVE_GETENTROPY) && !defined(sun) && !defined(linux) + #define PY_GETENTROPY 1 + + /* Fill buffer with size pseudo-random bytes generated by getentropy(). +-- +2.12.0 + diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 5baf32999..1f375621f 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -133,7 +133,8 @@ (patches (search-patches "python-2.7-search-paths.patch" "python-2-deterministic-build-info.patch" "python-2.7-site-prefixes.patch" - "python-2.7-source-date-epoch.patch")) + "python-2.7-source-date-epoch.patch" + "python-2.7-getentropy-on-old-kernels.patch")) (modules '((guix build utils))) ;; suboptimal to delete failing tests here, but if we delete them in the ;; arguments then we need to make sure to strip out that phase when it -- cgit v1.3 From d027b0011f2dec1c6568381deeb817933fd131a9 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Tue, 14 Mar 2017 22:54:41 +0100 Subject: gnu: nss: Increase test timeouts. * gnu/packages/patches/nss-increase-test-timeout.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/gnuzilla.scm (nss)[source]: Use it. --- gnu/local.mk | 1 + gnu/packages/gnuzilla.scm | 3 ++- .../patches/nss-increase-test-timeout.patch | 25 ++++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/nss-increase-test-timeout.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 3c11e3add..3b2bde729 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -781,6 +781,7 @@ dist_patch_DATA = \ %D%/packages/patches/ninja-tests.patch \ %D%/packages/patches/ninja-zero-mtime.patch \ %D%/packages/patches/node-9077.patch \ + %D%/packages/patches/nss-increase-test-timeout.patch \ %D%/packages/patches/nss-pkgconfig.patch \ %D%/packages/patches/ntfs-3g-CVE-2017-0358.patch \ %D%/packages/patches/nvi-assume-preserve-path.patch \ diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index afb5ad306..4759b9236 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -200,7 +200,8 @@ in the Mozilla clients.") (base32 "149807rmzb76hnh48rw4m9jw83iw0168njzchz0hmbsgc8mk0i5w")) ;; Create nss.pc and nss-config. - (patches (search-patches "nss-pkgconfig.patch")))) + (patches (search-patches "nss-pkgconfig.patch" + "nss-increase-test-timeout.patch")))) (build-system gnu-build-system) (outputs '("out" "bin")) (arguments diff --git a/gnu/packages/patches/nss-increase-test-timeout.patch b/gnu/packages/patches/nss-increase-test-timeout.patch new file mode 100644 index 000000000..c6aac6ac0 --- /dev/null +++ b/gnu/packages/patches/nss-increase-test-timeout.patch @@ -0,0 +1,25 @@ +We've seen some tests take more than 20s to complete on a busy armhf +machine. Even a busy x86_64 machine can use more than 5s on some tests. + +Increase timeouts to increase chances of a successful build. + +--- a/nss/gtests/ssl_gtest/tls_connect.cc 2017-03-14 22:47:30.855813629 +0100 ++++ b/nss/gtests/ssl_gtest/tls_connect.cc 2017-03-14 22:48:49.042335273 +0100 +@@ -245,7 +245,7 @@ + + ASSERT_TRUE_WAIT((client_->state() != TlsAgent::STATE_CONNECTING) && + (server_->state() != TlsAgent::STATE_CONNECTING), +- 5000); ++ 25000); + } + + void TlsConnectTestBase::EnableExtendedMasterSecret() { +@@ -387,7 +387,7 @@ + } else { + fail_agent = server_; + } +- ASSERT_TRUE_WAIT(fail_agent->state() == TlsAgent::STATE_ERROR, 5000); ++ ASSERT_TRUE_WAIT(fail_agent->state() == TlsAgent::STATE_ERROR, 25000); + } + + void TlsConnectTestBase::ConfigureVersion(uint16_t version) { -- cgit v1.3 From 4c20b0bcf7c8396cadc618a3df0127b864fd10f2 Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Sat, 18 Mar 2017 22:58:14 -0400 Subject: gnu: graphite2: Fix test failure caused by rounding error on 32-bit CPUs. * gnu/packages/patches/graphite2-ffloat-store.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/fontutils.scm (graphite2): Use it. --- gnu/local.mk | 1 + gnu/packages/fontutils.scm | 2 ++ gnu/packages/patches/graphite2-ffloat-store.patch | 34 +++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 gnu/packages/patches/graphite2-ffloat-store.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 3b2bde729..9fc595386 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -606,6 +606,7 @@ dist_patch_DATA = \ %D%/packages/patches/gobject-introspection-absolute-shlib-path.patch \ %D%/packages/patches/gobject-introspection-cc.patch \ %D%/packages/patches/gobject-introspection-girepository.patch \ + %D%/packages/patches/graphite2-ffloat-store.patch \ %D%/packages/patches/grep-timing-sensitive-test.patch \ %D%/packages/patches/grub-CVE-2015-8370.patch \ %D%/packages/patches/grub-gets-undeclared.patch \ diff --git a/gnu/packages/fontutils.scm b/gnu/packages/fontutils.scm index 46c658b66..7e7234960 100644 --- a/gnu/packages/fontutils.scm +++ b/gnu/packages/fontutils.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2016 Mark H Weaver ;;; Copyright © 2016, 2017 Efraim Flashner ;;; Copyright © 2017 Rene Saavedra +;;; Copyright © 2017 Leo Famulari ;;; ;;; This file is part of GNU Guix. ;;; @@ -380,6 +381,7 @@ applications should be.") (method url-fetch) (uri (string-append "https://github.com/silnrsi/graphite/releases/" "download/" version "/" name "-" version ".tgz")) + (patches (search-patches "graphite2-ffloat-store.patch")) (sha256 (base32 "0rs5h7m340z75kygx8d72cps0q6yvvqa9i788vym7585cfv8a0gc")))) diff --git a/gnu/packages/patches/graphite2-ffloat-store.patch b/gnu/packages/patches/graphite2-ffloat-store.patch new file mode 100644 index 000000000..f6ee56973 --- /dev/null +++ b/gnu/packages/patches/graphite2-ffloat-store.patch @@ -0,0 +1,34 @@ +Fix test failures of awamicmp1 and awamicmp2. + +Debian bug report: + +https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=855814 + +Patch adapted from upstream source repository: + +https://github.com/silnrsi/graphite/commit/f7bbdd87d510d587c872e314d6458160c0069c65 + +From f7bbdd87d510d587c872e314d6458160c0069c65 Mon Sep 17 00:00:00 2001 +From: Martin Hosken +Date: Tue, 14 Feb 2017 17:00:03 +0000 +Subject: [PATCH] try -ffloat-store for fp stability. Remove nested const to + work around VS bug + +--- + src/CMakeLists.txt | 2 +- + src/inc/locale2lcid.h | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 4f1e7e5..5b61b5c 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -108,7 +108,7 @@ set_target_properties(graphite2 PROPERTIES PUBLIC_HEADER "${GRAPHITE_HEADERS}" + + if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + set_target_properties(graphite2 PROPERTIES +- COMPILE_FLAGS "-Wall -Wextra -Wno-unknown-pragmas -Wendif-labels -Wshadow -Wctor-dtor-privacy -Wnon-virtual-dtor -fno-rtti -fno-exceptions -fvisibility=hidden -fvisibility-inlines-hidden -fno-stack-protector" ++ COMPILE_FLAGS "-Wall -Wextra -Wno-unknown-pragmas -Wendif-labels -Wshadow -Wctor-dtor-privacy -Wnon-virtual-dtor -fno-rtti -fno-exceptions -fvisibility=hidden -fvisibility-inlines-hidden -fno-stack-protector -ffloat-store" + LINK_FLAGS "-nodefaultlibs ${GRAPHITE_LINK_FLAGS}" + LINKER_LANGUAGE C) + if (CMAKE_COMPILER_IS_GNUCXX) -- cgit v1.3 From 80042ae93d80244fff5b8c11e9bcbc164a3320e7 Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Mon, 20 Mar 2017 20:04:11 +0200 Subject: gnu: wget: Fix test-504 failures. * gnu/packages/wget.scm (wget)[source]: Add patch. * gnu/packages/patches/wget-fix-504-test-timeout.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + .../patches/wget-fix-504-test-timeout.patch | 160 +++++++++++++++++++++ gnu/packages/wget.scm | 5 +- 3 files changed, 164 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/patches/wget-fix-504-test-timeout.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index c92a5d09f..40d2e7402 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -977,6 +977,7 @@ dist_patch_DATA = \ %D%/packages/patches/vte-CVE-2012-2738-pt2.patch \ %D%/packages/patches/weechat-python.patch \ %D%/packages/patches/wget-CVE-2017-6508.patch \ + %D%/packages/patches/wget-fix-504-test-timeout.patch \ %D%/packages/patches/wicd-bitrate-none-fix.patch \ %D%/packages/patches/wicd-get-selected-profile-fix.patch \ %D%/packages/patches/wicd-urwid-1.3.patch \ diff --git a/gnu/packages/patches/wget-fix-504-test-timeout.patch b/gnu/packages/patches/wget-fix-504-test-timeout.patch new file mode 100644 index 000000000..d9bf15410 --- /dev/null +++ b/gnu/packages/patches/wget-fix-504-test-timeout.patch @@ -0,0 +1,160 @@ +This patch is from upstream. If a machine is too slow it can cause +test-504.py to fail. +http://git.savannah.gnu.org/cgit/wget.git/patch/?id=ac4fed32204e9ec1874e7cb5ecc55f1b35c1c8de + +From ac4fed32204e9ec1874e7cb5ecc55f1b35c1c8de Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Tim=20R=C3=BChsen?= +Date: Tue, 14 Feb 2017 16:20:26 +0100 +Subject: Fix 504 status handling + +* src/http.c (gethttp): Move 504 handling to correct place. + (http_loop): Fix memeory leak. +* testenv/server/http/http_server.py: Add Content-Length header on non-2xx + status codes with a body + +Reported-by: Adam Sampson +--- + src/http.c | 30 +++++++++++------------------- + testenv/server/http/http_server.py | 9 +++++---- + 2 files changed, 16 insertions(+), 23 deletions(-) + +diff --git a/src/http.c b/src/http.c +index 898e184..d2c5c77 100644 +--- a/src/http.c ++++ b/src/http.c +@@ -3476,7 +3476,7 @@ gethttp (const struct url *u, struct url *original_url, struct http_stat *hs, + + #ifdef HAVE_METALINK + /* We need to check for the Metalink data in the very first response +- we get from the server (before redirectionrs, authorization, etc.). */ ++ we get from the server (before redirections, authorization, etc.). */ + if (metalink) + { + hs->metalink = metalink_from_http (resp, hs, u); +@@ -3496,7 +3496,7 @@ gethttp (const struct url *u, struct url *original_url, struct http_stat *hs, + uerr_t auth_err = RETROK; + bool retry; + /* Normally we are not interested in the response body. +- But if we are writing a WARC file we are: we like to keep everyting. */ ++ But if we are writing a WARC file we are: we like to keep everything. */ + if (warc_enabled) + { + int _err; +@@ -3556,20 +3556,6 @@ gethttp (const struct url *u, struct url *original_url, struct http_stat *hs, + pconn.authorized = true; + } + +- if (statcode == HTTP_STATUS_GATEWAY_TIMEOUT) +- { +- hs->len = 0; +- hs->res = 0; +- hs->restval = 0; +- +- CLOSE_FINISH (sock); +- xfree (hs->message); +- +- retval = GATEWAYTIMEOUT; +- goto cleanup; +- } +- +- + { + uerr_t ret = check_file_output (u, hs, resp, hdrval, sizeof hdrval); + if (ret != RETROK) +@@ -3910,8 +3896,8 @@ gethttp (const struct url *u, struct url *original_url, struct http_stat *hs, + retval = _err; + goto cleanup; + } +- else +- CLOSE_FINISH (sock); ++ ++ CLOSE_FINISH (sock); + } + else + { +@@ -3934,7 +3920,11 @@ gethttp (const struct url *u, struct url *original_url, struct http_stat *hs, + CLOSE_INVALIDATE (sock); + } + +- retval = RETRFINISHED; ++ if (statcode == HTTP_STATUS_GATEWAY_TIMEOUT) ++ retval = GATEWAYTIMEOUT; ++ else ++ retval = RETRFINISHED; ++ + goto cleanup; + } + +@@ -4208,6 +4198,8 @@ http_loop (const struct url *u, struct url *original_url, char **newloc, + bring them to "while" statement at the end, to judge + whether the number of tries was exceeded. */ + printwhat (count, opt.ntry); ++ xfree (hstat.message); ++ xfree (hstat.error); + continue; + case FWRITEERR: case FOPENERR: + /* Another fatal error. */ +diff --git a/testenv/server/http/http_server.py b/testenv/server/http/http_server.py +index e96f6e8..b222df0 100644 +--- a/testenv/server/http/http_server.py ++++ b/testenv/server/http/http_server.py +@@ -204,7 +204,6 @@ class _Handler(BaseHTTPRequestHandler): + + def Response(self, resp_obj): + self.send_response(resp_obj.response_code) +- self.finish_headers() + if resp_obj.response_code == 304: + raise NoBodyServerError("Conditional get falling to head") + raise ServerError("Custom Response code sent.") +@@ -329,7 +328,6 @@ class _Handler(BaseHTTPRequestHandler): + except AuthError as se: + self.send_response(401, "Authorization Required") + self.send_challenge(auth_rule.auth_type, auth_rule.auth_parm) +- self.finish_headers() + raise se + + def handle_auth(self, auth_rule): +@@ -362,7 +360,6 @@ class _Handler(BaseHTTPRequestHandler): + if header_recd is None or header_recd != exp_headers[header_line]: + self.send_error(400, "Expected Header %s not found" % + header_line) +- self.finish_headers() + raise ServerError("Header " + header_line + " not found") + + def RejectHeader(self, header_obj): +@@ -372,7 +369,6 @@ class _Handler(BaseHTTPRequestHandler): + if header_recd and header_recd == rej_headers[header_line]: + self.send_error(400, 'Blacklisted Header %s received' % + header_line) +- self.finish_headers() + raise ServerError("Header " + header_line + ' received') + + def __log_request(self, method): +@@ -400,6 +396,7 @@ class _Handler(BaseHTTPRequestHandler): + + content = self.server.fileSys.get(path) + content_length = len(content) ++ + for rule_name in self.rules: + try: + assert hasattr(self, rule_name) +@@ -410,12 +407,16 @@ class _Handler(BaseHTTPRequestHandler): + return(None, None) + except AuthError as ae: + print(ae.__str__()) ++ self.finish_headers() + return(None, None) + except NoBodyServerError as nbse: + print(nbse.__str__()) ++ self.finish_headers() + return(None, None) + except ServerError as se: + print(se.__str__()) ++ self.add_header("Content-Length", content_length) ++ self.finish_headers() + return(content, None) + + try: +-- +cgit v1.0-41-gc330 + diff --git a/gnu/packages/wget.scm b/gnu/packages/wget.scm index 1c56e14a6..a73c68004 100644 --- a/gnu/packages/wget.scm +++ b/gnu/packages/wget.scm @@ -1,7 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012 Nikita Karetnikov ;;; Copyright © 2014, 2015 Ludovic Courtès -;;; Copyright © 2016 Efraim Flashner +;;; Copyright © 2016, 2017 Efraim Flashner ;;; ;;; This file is part of GNU Guix. ;;; @@ -40,7 +40,8 @@ (method url-fetch) (uri (string-append "mirror://gnu/wget/wget-" version ".tar.xz")) - (patches (search-patches "wget-CVE-2017-6508.patch")) + (patches (search-patches "wget-CVE-2017-6508.patch" + "wget-fix-504-test-timeout.patch")) (sha256 (base32 "1ljcfhbkdsd0zjfm520rbl1ai62fc34i7c45sfj244l8f6b0p58c")))) -- cgit v1.3 From 957699ee92a86367d4ba60d1e3a02431b2852963 Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Mon, 20 Mar 2017 18:16:20 -0400 Subject: gnu: openjpeg: Remove obsolete patches. * gnu/packages/patches/openjpeg-CVE-2016-5157.patch, gnu/packages/patches/openjpeg-CVE-2016-7163.patch: Delete files. * gnu/local.mk (dist_patch_DATA): Remove them. * gnu/packages/image.scm (openjpeg)[source]: Remove them. --- gnu/local.mk | 2 - gnu/packages/image.scm | 4 +- gnu/packages/patches/openjpeg-CVE-2016-5157.patch | 96 ----------------------- gnu/packages/patches/openjpeg-CVE-2016-7163.patch | 71 ----------------- 4 files changed, 1 insertion(+), 172 deletions(-) delete mode 100644 gnu/packages/patches/openjpeg-CVE-2016-5157.patch delete mode 100644 gnu/packages/patches/openjpeg-CVE-2016-7163.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 40d2e7402..a194469c4 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -796,8 +796,6 @@ dist_patch_DATA = \ %D%/packages/patches/omake-fix-non-determinism.patch \ %D%/packages/patches/ola-readdir-r.patch \ %D%/packages/patches/openexr-missing-samples.patch \ - %D%/packages/patches/openjpeg-CVE-2016-5157.patch \ - %D%/packages/patches/openjpeg-CVE-2016-7163.patch \ %D%/packages/patches/openjpeg-CVE-2016-9850-CVE-2016-9851.patch \ %D%/packages/patches/openjpeg-CVE-2016-9572-CVE-2016-9573.patch \ %D%/packages/patches/openjpeg-use-after-free-fix.patch \ diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index 2989ea006..9c0e695f9 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -489,9 +489,7 @@ work.") (sha256 (base32 "19yz4g0c45sm8y1z01j9djsrl1mkz3pmw7fykc6hkvrqymp7prsc")) - (patches (search-patches "openjpeg-CVE-2016-5157.patch" - "openjpeg-CVE-2016-7163.patch" - "openjpeg-CVE-2016-9850-CVE-2016-9851.patch" + (patches (search-patches "openjpeg-CVE-2016-9850-CVE-2016-9851.patch" "openjpeg-CVE-2016-9572-CVE-2016-9573.patch")))) (build-system cmake-build-system) (arguments diff --git a/gnu/packages/patches/openjpeg-CVE-2016-5157.patch b/gnu/packages/patches/openjpeg-CVE-2016-5157.patch deleted file mode 100644 index f83bd9b51..000000000 --- a/gnu/packages/patches/openjpeg-CVE-2016-5157.patch +++ /dev/null @@ -1,96 +0,0 @@ -Fix CVE-2016-5157 (heap overflow in opj_dwt_interleave_v() allowing execution of -arbitrary code): - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5157 -https://pdfium.googlesource.com/pdfium/+/b6befb2ed2485a3805cddea86dc7574510178ea9 -http://seclists.org/oss-sec/2016/q3/441 - -Adapted from upstream source repository: - -https://github.com/uclouvain/openjpeg/commit/e078172b1c3f98d2219c37076b238fb759c751ea - -The final hunk of the patch, affecting -'tests/nonregression/test_suite.ctest.in', had to be adjusted, since it referred -to some context that is not yet provided by a tagged release. - -From c80286a4d573ad07ccc3c8b53289c38bb8256b30 Mon Sep 17 00:00:00 2001 -From: Leo Famulari -Date: Fri, 9 Sep 2016 04:37:40 -0400 -Subject: [PATCH] CVE-2016-5157 adjusted to apply to 2.1.0. - ---- - src/lib/openjp2/tcd.c | 11 +++++++++++ - tests/compare_dump_files.c | 14 +++++++------- - tests/nonregression/test_suite.ctest.in | 2 ++ - 3 files changed, 20 insertions(+), 7 deletions(-) - -diff --git a/src/lib/openjp2/tcd.c b/src/lib/openjp2/tcd.c -index 12da05c..7a29c49 100644 ---- a/src/lib/openjp2/tcd.c -+++ b/src/lib/openjp2/tcd.c -@@ -696,9 +696,20 @@ static INLINE OPJ_BOOL opj_tcd_init_tile(opj_tcd_t *p_tcd, OPJ_UINT32 p_tile_no, - l_tx0 = l_cp->tx0 + p * l_cp->tdx; /* can't be greater than l_image->x1 so won't overflow */ - l_tile->x0 = (OPJ_INT32)opj_uint_max(l_tx0, l_image->x0); - l_tile->x1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_tx0, l_cp->tdx), l_image->x1); -+ /* all those OPJ_UINT32 are casted to OPJ_INT32, let's do some sanity check */ -+ if ((l_tile->x0 < 0) || (l_tile->x1 <= l_tile->x0)) { -+ opj_event_msg(manager, EVT_ERROR, "Tile X coordinates are not supported\n"); -+ return OPJ_FALSE; -+ } - l_ty0 = l_cp->ty0 + q * l_cp->tdy; /* can't be greater than l_image->y1 so won't overflow */ - l_tile->y0 = (OPJ_INT32)opj_uint_max(l_ty0, l_image->y0); - l_tile->y1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_ty0, l_cp->tdy), l_image->y1); -+ /* all those OPJ_UINT32 are casted to OPJ_INT32, let's do some sanity check */ -+ if ((l_tile->y0 < 0) || (l_tile->y1 <= l_tile->y0)) { -+ opj_event_msg(manager, EVT_ERROR, "Tile Y coordinates are not supported\n"); -+ return OPJ_FALSE; -+ } -+ - - /* testcase 1888.pdf.asan.35.988 */ - if (l_tccp->numresolutions == 0) { -diff --git a/tests/compare_dump_files.c b/tests/compare_dump_files.c -index 946c92a..7d22270 100644 ---- a/tests/compare_dump_files.c -+++ b/tests/compare_dump_files.c -@@ -118,10 +118,10 @@ int main(int argc, char **argv) - test_cmp_parameters inParam; - FILE *fbase=NULL, *ftest=NULL; - int same = 0; -- char lbase[256]; -- char strbase[256]; -- char ltest[256]; -- char strtest[256]; -+ char lbase[512]; -+ char strbase[512]; -+ char ltest[512]; -+ char strtest[512]; - - if( parse_cmdline_cmp(argc, argv, &inParam) == 1 ) - { -@@ -154,9 +154,9 @@ int main(int argc, char **argv) - - while (fgets(lbase, sizeof(lbase), fbase) && fgets(ltest,sizeof(ltest),ftest)) - { -- int nbase = sscanf(lbase, "%255[^\r\n]", strbase); -- int ntest = sscanf(ltest, "%255[^\r\n]", strtest); -- assert( nbase != 255 && ntest != 255 ); -+ int nbase = sscanf(lbase, "%511[^\r\n]", strbase); -+ int ntest = sscanf(ltest, "%511[^\r\n]", strtest); -+ assert( nbase != 511 && ntest != 511 ); - if( nbase != 1 || ntest != 1 ) - { - fprintf(stderr, "could not parse line from files\n" ); -diff --git a/tests/nonregression/test_suite.ctest.in b/tests/nonregression/test_suite.ctest.in -index d393e6c..90cfa43 100644 ---- a/tests/nonregression/test_suite.ctest.in -+++ b/tests/nonregression/test_suite.ctest.in -@@ -564,3 +564,5 @@ opj_decompress -i @INPUT_NR_PATH@/issue726.j2k -o @TEMP_PATH@/issue726.png - # issue 775 - !opj_decompress -i @INPUT_NR_PATH@/issue775.j2k -o @TEMP_PATH@/issue775.png - !opj_decompress -i @INPUT_NR_PATH@/issue775-2.j2k -o @TEMP_PATH@/issue775-2.png -+# issue 823 (yes, not a typo, test image is issue822) -+!opj_decompress -i @INPUT_NR_PATH@/issue822.jp2 -o @TEMP_PATH@/issue822.png --- -2.10.0 - diff --git a/gnu/packages/patches/openjpeg-CVE-2016-7163.patch b/gnu/packages/patches/openjpeg-CVE-2016-7163.patch deleted file mode 100644 index a4a24e4ff..000000000 --- a/gnu/packages/patches/openjpeg-CVE-2016-7163.patch +++ /dev/null @@ -1,71 +0,0 @@ -Fix CVE-2016-7613 (Integer overflow in opj_pi_create_decode allowing execution -of arbitrary code): - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-7163 -https://github.com/uclouvain/openjpeg/issues/826 -http://seclists.org/oss-sec/2016/q3/442 - -Copied from upstream repository: - -https://github.com/uclouvain/openjpeg/commit/c16bc057ba3f125051c9966cf1f5b68a05681de4 -https://github.com/uclouvain/openjpeg/commit/ef01f18dfc6780b776d0674ed3e7415c6ef54d24 - -From c16bc057ba3f125051c9966cf1f5b68a05681de4 Mon Sep 17 00:00:00 2001 -From: trylab -Date: Tue, 6 Sep 2016 13:55:49 +0800 -Subject: [PATCH] Fix an integer overflow issue (#809) - -Prevent an integer overflow issue in function opj_pi_create_decode of -pi.c. ---- - src/lib/openjp2/pi.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/src/lib/openjp2/pi.c b/src/lib/openjp2/pi.c -index cffad66..36e2ff0 100644 ---- a/src/lib/openjp2/pi.c -+++ b/src/lib/openjp2/pi.c -@@ -1237,7 +1237,13 @@ opj_pi_iterator_t *opj_pi_create_decode(opj_image_t *p_image, - l_current_pi = l_pi; - - /* memory allocation for include */ -- l_current_pi->include = (OPJ_INT16*) opj_calloc((l_tcp->numlayers +1) * l_step_l, sizeof(OPJ_INT16)); -+ /* prevent an integer overflow issue */ -+ l_current_pi->include = 00; -+ if (l_step_l <= (SIZE_MAX / (l_tcp->numlayers + 1U))) -+ { -+ l_current_pi->include = (OPJ_INT16*) opj_calloc((l_tcp->numlayers +1) * l_step_l, sizeof(OPJ_INT16)); -+ } -+ - if - (!l_current_pi->include) - { --- -2.10.0 - -From ef01f18dfc6780b776d0674ed3e7415c6ef54d24 Mon Sep 17 00:00:00 2001 -From: Matthieu Darbois -Date: Thu, 8 Sep 2016 07:34:46 +0200 -Subject: [PATCH] Cast to size_t before multiplication - -Need to cast to size_t before multiplication otherwise overflow check is useless. ---- - src/lib/openjp2/pi.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/lib/openjp2/pi.c b/src/lib/openjp2/pi.c -index 36e2ff0..809b33d 100644 ---- a/src/lib/openjp2/pi.c -+++ b/src/lib/openjp2/pi.c -@@ -1241,7 +1241,7 @@ opj_pi_iterator_t *opj_pi_create_decode(opj_image_t *p_image, - l_current_pi->include = 00; - if (l_step_l <= (SIZE_MAX / (l_tcp->numlayers + 1U))) - { -- l_current_pi->include = (OPJ_INT16*) opj_calloc((l_tcp->numlayers +1) * l_step_l, sizeof(OPJ_INT16)); -+ l_current_pi->include = (OPJ_INT16*) opj_calloc((size_t)(l_tcp->numlayers + 1U) * l_step_l, sizeof(OPJ_INT16)); - } - - if --- -2.10.0 - -- cgit v1.3 From deee8a9dfcd86e3f97035f2d71e34dfadbc09397 Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Mon, 20 Mar 2017 18:22:14 -0400 Subject: gnu: Remove leftover patch. * gnu/packages/patches/openjpeg-use-after-free-fix.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - .../patches/openjpeg-use-after-free-fix.patch | 48 ---------------------- 2 files changed, 49 deletions(-) delete mode 100644 gnu/packages/patches/openjpeg-use-after-free-fix.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index a194469c4..6e6f03a3e 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -798,7 +798,6 @@ dist_patch_DATA = \ %D%/packages/patches/openexr-missing-samples.patch \ %D%/packages/patches/openjpeg-CVE-2016-9850-CVE-2016-9851.patch \ %D%/packages/patches/openjpeg-CVE-2016-9572-CVE-2016-9573.patch \ - %D%/packages/patches/openjpeg-use-after-free-fix.patch \ %D%/packages/patches/openocd-nrf52.patch \ %D%/packages/patches/openssl-runpath.patch \ %D%/packages/patches/openssl-1.1.0-c-rehash-in.patch \ diff --git a/gnu/packages/patches/openjpeg-use-after-free-fix.patch b/gnu/packages/patches/openjpeg-use-after-free-fix.patch deleted file mode 100644 index 1a9cb1ae1..000000000 --- a/gnu/packages/patches/openjpeg-use-after-free-fix.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 940100c28ae28931722290794889cf84a92c5f6f Mon Sep 17 00:00:00 2001 -From: mayeut -Date: Sun, 6 Sep 2015 17:24:03 +0200 -Subject: [PATCH] Fix potential use-after-free in opj_j2k_write_mco function - -Fixes #563 ---- - src/lib/openjp2/j2k.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/lib/openjp2/j2k.c b/src/lib/openjp2/j2k.c -index 19a48f5..d487d89 100644 ---- a/src/lib/openjp2/j2k.c -+++ b/src/lib/openjp2/j2k.c -@@ -5559,8 +5559,7 @@ static OPJ_BOOL opj_j2k_write_mco( opj_j2k_t *p_j2k, - assert(p_stream != 00); - - l_tcp =&(p_j2k->m_cp.tcps[p_j2k->m_current_tile_number]); -- l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data; -- -+ - l_mco_size = 5 + l_tcp->m_nb_mcc_records; - if (l_mco_size > p_j2k->m_specific_param.m_encoder.m_header_tile_data_size) { - -@@ -5575,6 +5574,8 @@ static OPJ_BOOL opj_j2k_write_mco( opj_j2k_t *p_j2k, - p_j2k->m_specific_param.m_encoder.m_header_tile_data = new_header_tile_data; - p_j2k->m_specific_param.m_encoder.m_header_tile_data_size = l_mco_size; - } -+ l_current_data = p_j2k->m_specific_param.m_encoder.m_header_tile_data; -+ - - opj_write_bytes(l_current_data,J2K_MS_MCO,2); /* MCO */ - l_current_data += 2; -@@ -5586,10 +5587,9 @@ static OPJ_BOOL opj_j2k_write_mco( opj_j2k_t *p_j2k, - ++l_current_data; - - l_mcc_record = l_tcp->m_mcc_records; -- for (i=0;im_nb_mcc_records;++i) { -+ for (i=0;im_nb_mcc_records;++i) { - opj_write_bytes(l_current_data,l_mcc_record->m_index,1);/* Imco -> use the mcc indicated by 1*/ - ++l_current_data; -- - ++l_mcc_record; - } - --- -2.5.0 - -- cgit v1.3 From 7fc72c7731336bbe830ac264ad6470e54058ba35 Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Tue, 21 Mar 2017 03:45:09 -0400 Subject: gnu: libcmis: Update to 0.5.1. * gnu/packages/libreoffice.scm (libcmis): Update to 0.5.1. [source]: Use new source URL. Remove obsolete patch 'libcmis-fix-test-onedrive.patch'. [home-page]: Update URL. * gnu/packages/patches/libcmis-fix-test-onedrive.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Remove it. --- gnu/local.mk | 1 - gnu/packages/libreoffice.scm | 14 ++++----- .../patches/libcmis-fix-test-onedrive.patch | 35 ---------------------- 3 files changed, 7 insertions(+), 43 deletions(-) delete mode 100644 gnu/packages/patches/libcmis-fix-test-onedrive.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 6e6f03a3e..65be56ac4 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -675,7 +675,6 @@ dist_patch_DATA = \ %D%/packages/patches/liba52-use-mtune-not-mcpu.patch \ %D%/packages/patches/libbonobo-activation-test-race.patch \ %D%/packages/patches/libcanberra-sound-theme-freedesktop.patch \ - %D%/packages/patches/libcmis-fix-test-onedrive.patch \ %D%/packages/patches/libdrm-symbol-check.patch \ %D%/packages/patches/libevent-dns-tests.patch \ %D%/packages/patches/libevent-2.0-CVE-2016-10195.patch \ diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm index a962d9a30..52f426692 100644 --- a/gnu/packages/libreoffice.scm +++ b/gnu/packages/libreoffice.scm @@ -243,15 +243,15 @@ working with graphics in the WPG (WordPerfect Graphics) format.") (define-public libcmis (package (name "libcmis") - (version "0.5.0") + (version "0.5.1") (source (origin (method url-fetch) - (uri (string-append "mirror://sourceforge/" name "/" name "-" - version ".tar.gz")) - (sha256 (base32 - "1dprvk4fibylv24l7gr49gfqbkfgmxynvgssvdcycgpf7n8h4zm8")) - (patches (search-patches "libcmis-fix-test-onedrive.patch")))) + (uri (string-append "https://github.com/tdf/libcmis/releases/download/v" + version "/libcmis-" version ".tar.gz")) + (sha256 + (base32 + "03kvl8ywsv5qrxblf0m6955mmvl5q2zpb6vj51vs7ayvxhidzjva")))) (build-system gnu-build-system) (native-inputs `(("cppunit" ,cppunit) @@ -276,7 +276,7 @@ working with graphics in the WPG (WordPerfect Graphics) format.") ;; fails without the following flag. (string-append "--with-boost=" (assoc-ref %build-inputs "boost"))))) - (home-page "https://sourceforge.net/projects/libcmis/") + (home-page "https://github.com/tdf/libcmis") (synopsis "CMIS client library") (description "LibCMIS is a C++ client library for the CMIS interface. It allows C++ applications to connect to any ECM behaving as a CMIS server such diff --git a/gnu/packages/patches/libcmis-fix-test-onedrive.patch b/gnu/packages/patches/libcmis-fix-test-onedrive.patch deleted file mode 100644 index adf2e0b8e..000000000 --- a/gnu/packages/patches/libcmis-fix-test-onedrive.patch +++ /dev/null @@ -1,35 +0,0 @@ -Patch from resolution of http://sourceforge.net/p/libcmis/tickets/13/ - -From 814c7845d53688b35a747cf193c2ff99e40a8652 Mon Sep 17 00:00:00 2001 -From: Jonathan Wakely -Date: Wed, 2 Sep 2015 16:35:45 +0100 -Subject: [PATCH 5/5] Remove invalid comments from test JSON file. - ---- - qa/libcmis/data/onedrive/search-result.json | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/qa/libcmis/data/onedrive/search-result.json b/qa/libcmis/data/onedrive/search-result.json -index 61d250a..2482429 100644 ---- a/qa/libcmis/data/onedrive/search-result.json -+++ b/qa/libcmis/data/onedrive/search-result.json -@@ -8,7 +8,7 @@ - }, - "name":"OneDriveFile", - "description":"", -- "parent_id":"folderA", // path: /A/Wrong File -+ "parent_id":"folderA", - "size":18047, - "upload_location":"https://apis.live.net/v5.0/wrongFileId/content/", - "comments_count":0, -@@ -32,7 +32,7 @@ - }, - "name":"OneDriveFile", - "description":"", -- "parent_id":"folderC", // path: /A/B/C/Right File -+ "parent_id":"folderC", - "size":4, - "upload_location":"https://apis.live.net/v5.0/rightFileId/content/", - "comments_count":0, --- -2.4.3 \ No newline at end of file -- cgit v1.3 From a9681c74cad12488e86d06d37812a732719c4c3a Mon Sep 17 00:00:00 2001 From: Leo Famulari Date: Tue, 21 Mar 2017 16:18:59 -0400 Subject: gnu: python-pillow: Fix test failures with freetype-2.7. * gnu/packages/patches/python-pillow-freetype-2.7-test-failure.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/python.scm (python-pillow, python2-pillow)[source]: Use it. --- gnu/local.mk | 1 + .../python-pillow-freetype-2.7-test-failure.patch | 75 ++++++++++++++++++++++ gnu/packages/python.scm | 1 + 3 files changed, 77 insertions(+) create mode 100644 gnu/packages/patches/python-pillow-freetype-2.7-test-failure.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 65be56ac4..256682eff 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -867,6 +867,7 @@ dist_patch_DATA = \ %D%/packages/patches/python-pandas-skip-failing-tests.patch \ %D%/packages/patches/python-paste-remove-website-test.patch \ %D%/packages/patches/python-paste-remove-timing-test.patch \ + %D%/packages/patches/python-pillow-freetype-2.7-test-failure.patch \ %D%/packages/patches/python-pygit2-disable-network-tests.patch \ %D%/packages/patches/python-pyopenssl-skip-network-test.patch \ %D%/packages/patches/python-pycrypto-CVE-2013-7459.patch \ diff --git a/gnu/packages/patches/python-pillow-freetype-2.7-test-failure.patch b/gnu/packages/patches/python-pillow-freetype-2.7-test-failure.patch new file mode 100644 index 000000000..18bc30bc7 --- /dev/null +++ b/gnu/packages/patches/python-pillow-freetype-2.7-test-failure.patch @@ -0,0 +1,75 @@ +Fix some test failures when building with freetype-2.7. + +https://github.com/python-pillow/Pillow/issues/2116 +https://github.com/python-pillow/Pillow/pull/2286 + +Patch copied from upstream source repository: + +https://github.com/python-pillow/Pillow/commit/acf68c835c93ba144f83198306aa7e6082a43f43 + +From acf68c835c93ba144f83198306aa7e6082a43f43 Mon Sep 17 00:00:00 2001 +From: hugovk +Date: Mon, 12 Dec 2016 15:16:43 +0200 +Subject: [PATCH] Increase epsilon for FreeType 2.7 + +--- + Tests/test_imagefont.py | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +diff --git a/Tests/test_imagefont.py b/Tests/test_imagefont.py +index de89ac92..5207dce3 100644 +--- a/Tests/test_imagefont.py ++++ b/Tests/test_imagefont.py +@@ -125,7 +125,9 @@ try: + + target = 'Tests/images/rectangle_surrounding_text.png' + target_img = Image.open(target) +- self.assert_image_similar(im, target_img, .5) ++ ++ # Epsilon ~.5 fails with FreeType 2.7 ++ self.assert_image_similar(im, target_img, 2.5) + + def test_render_multiline(self): + im = Image.new(mode='RGB', size=(300, 100)) +@@ -144,7 +146,7 @@ try: + # some versions of freetype have different horizontal spacing. + # setting a tight epsilon, I'm showing the original test failure + # at epsilon = ~38. +- self.assert_image_similar(im, target_img, .5) ++ self.assert_image_similar(im, target_img, 6.2) + + def test_render_multiline_text(self): + ttf = ImageFont.truetype(FONT_PATH, FONT_SIZE) +@@ -158,7 +160,8 @@ try: + target = 'Tests/images/multiline_text.png' + target_img = Image.open(target) + +- self.assert_image_similar(im, target_img, .5) ++ # Epsilon ~.5 fails with FreeType 2.7 ++ self.assert_image_similar(im, target_img, 6.2) + + # Test that text() can pass on additional arguments + # to multiline_text() +@@ -178,7 +181,8 @@ try: + target = 'Tests/images/multiline_text'+ext+'.png' + target_img = Image.open(target) + +- self.assert_image_similar(im, target_img, .5) ++ # Epsilon ~.5 fails with FreeType 2.7 ++ self.assert_image_similar(im, target_img, 6.2) + + def test_unknown_align(self): + im = Image.new(mode='RGB', size=(300, 100)) +@@ -227,7 +231,8 @@ try: + target = 'Tests/images/multiline_text_spacing.png' + target_img = Image.open(target) + +- self.assert_image_similar(im, target_img, .5) ++ # Epsilon ~.5 fails with FreeType 2.7 ++ self.assert_image_similar(im, target_img, 6.2) + + def test_rotated_transposed_font(self): + img_grey = Image.new("L", (100, 100)) +-- +2.12.0 + diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 96c424538..1903247d7 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -4537,6 +4537,7 @@ services for your Python modules and applications.") (origin (method url-fetch) (uri (pypi-uri "Pillow" version)) + (patches (search-patches "python-pillow-freetype-2.7-test-failure.patch")) (sha256 (base32 "0xkv0p1d73gz0a1qaasf0ai4262g8f334j07vd60bjrxs2wr3nmj")))) -- cgit v1.3 From dc8a34ed46f58397b5a53c99ec5f718c6d0e4fef Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Wed, 22 Mar 2017 14:45:44 +0100 Subject: gnu: freeimage: Fix build with GCC 5. * gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/image.scm (freeimage)[source]: Add patch. --- gnu/local.mk | 1 + gnu/packages/image.scm | 3 +- .../patches/freeimage-fix-build-with-gcc-5.patch | 1453 ++++++++++++++++++++ 3 files changed, 1456 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index b8db8712d..4d85f15a0 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -563,6 +563,7 @@ dist_patch_DATA = \ %D%/packages/patches/fontforge-svg-modtime.patch \ %D%/packages/patches/freeimage-CVE-2015-0852.patch \ %D%/packages/patches/freeimage-CVE-2016-5684.patch \ + %D%/packages/patches/freeimage-fix-build-with-gcc-5.patch \ %D%/packages/patches/gawk-shell.patch \ %D%/packages/patches/gcc-arm-bug-71399.patch \ %D%/packages/patches/gcc-arm-link-spec-fix.patch \ diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index fb6536b8c..51c465a0c 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -679,7 +679,8 @@ supplies a generic doubly-linked list and some string functions.") (base32 "12bz57asdcfsz3zr9i9nska0fb6h3z2aizy412qjqkixkginbz7v")) (patches (search-patches "freeimage-CVE-2015-0852.patch" - "freeimage-CVE-2016-5684.patch")))) + "freeimage-CVE-2016-5684.patch" + "freeimage-fix-build-with-gcc-5.patch")))) (build-system gnu-build-system) (arguments '(#:phases diff --git a/gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch b/gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch new file mode 100644 index 000000000..2c9f2c335 --- /dev/null +++ b/gnu/packages/patches/freeimage-fix-build-with-gcc-5.patch @@ -0,0 +1,1453 @@ +The original patch was downloaded from here: +https://chromium-review.googlesource.com/c/297211 + +The paths, file names, and line endings have been adapted. + +From eebaf97f5a1cb713d81d311308d8a48c124e5aef Mon Sep 17 00:00:00 2001 +From: James Zern +Date: Wed, 02 Sep 2015 23:21:13 -0700 +Subject: [PATCH] dsp/mips: add whitespace around stringizing operator + +fixes compile with gcc 5.1 +BUG=259 + +Change-Id: Ideb39c6290ab8569b1b6cc835bea11c822d0286c +--- + +diff --git a/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c +index 6590f43..40e4d82 100644 +--- a/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c ++++ b/Source/LibWebP/src/dsp/dsp.dec_mips_dsp_r2.c +@@ -548,10 +548,10 @@ + // TEMP3 = SRC[D + D1 * BPS] + #define LOAD_4_BYTES(TEMP0, TEMP1, TEMP2, TEMP3, \ + A, A1, B, B1, C, C1, D, D1, SRC) \ +- "lbu %["#TEMP0"], "#A"+"#A1"*"XSTR(BPS)"(%["#SRC"]) \n\t" \ +- "lbu %["#TEMP1"], "#B"+"#B1"*"XSTR(BPS)"(%["#SRC"]) \n\t" \ +- "lbu %["#TEMP2"], "#C"+"#C1"*"XSTR(BPS)"(%["#SRC"]) \n\t" \ +- "lbu %["#TEMP3"], "#D"+"#D1"*"XSTR(BPS)"(%["#SRC"]) \n\t" \ ++ "lbu %[" #TEMP0 "], " #A "+" #A1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t" \ ++ "lbu %[" #TEMP1 "], " #B "+" #B1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t" \ ++ "lbu %[" #TEMP2 "], " #C "+" #C1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t" \ ++ "lbu %[" #TEMP3 "], " #D "+" #D1 "*"XSTR(BPS)"(%[" #SRC "]) \n\t" \ + + static void SimpleHFilter16(uint8_t* p, int stride, int thresh) { + int i; +@@ -623,8 +623,8 @@ + // DST[A * BPS] = TEMP0 + // DST[B + C * BPS] = TEMP1 + #define STORE_8_BYTES(TEMP0, TEMP1, A, B, C, DST) \ +- "usw %["#TEMP0"], "#A"*"XSTR(BPS)"(%["#DST"]) \n\t" \ +- "usw %["#TEMP1"], "#B"+"#C"*"XSTR(BPS)"(%["#DST"]) \n\t" ++ "usw %[" #TEMP0 "], " #A "*"XSTR(BPS)"(%[" #DST "]) \n\t" \ ++ "usw %[" #TEMP1 "], " #B "+" #C "*"XSTR(BPS)"(%[" #DST "]) \n\t" + + static void VE4(uint8_t* dst) { // vertical + const uint8_t* top = dst - BPS; +@@ -725,8 +725,8 @@ + // TEMP0 = SRC[A * BPS] + // TEMP1 = SRC[B + C * BPS] + #define LOAD_8_BYTES(TEMP0, TEMP1, A, B, C, SRC) \ +- "ulw %["#TEMP0"], "#A"*"XSTR(BPS)"(%["#SRC"]) \n\t" \ +- "ulw %["#TEMP1"], "#B"+"#C"*"XSTR(BPS)"(%["#SRC"]) \n\t" ++ "ulw %[" #TEMP0 "], " #A "*"XSTR(BPS)"(%[" #SRC "]) \n\t" \ ++ "ulw %[" #TEMP1 "], " #B "+" #C "*"XSTR(BPS)"(%[" #SRC "]) \n\t" + + static void LD4(uint8_t* dst) { // Down-Left + int temp0, temp1, temp2, temp3, temp4; +@@ -873,24 +873,24 @@ + #define CLIPPING(SIZE) \ + "preceu.ph.qbl %[temp2], %[temp0] \n\t" \ + "preceu.ph.qbr %[temp0], %[temp0] \n\t" \ +-".if "#SIZE" == 8 \n\t" \ ++".if " #SIZE " == 8 \n\t" \ + "preceu.ph.qbl %[temp3], %[temp1] \n\t" \ + "preceu.ph.qbr %[temp1], %[temp1] \n\t" \ + ".endif \n\t" \ + "addu.ph %[temp2], %[temp2], %[dst_1] \n\t" \ + "addu.ph %[temp0], %[temp0], %[dst_1] \n\t" \ +-".if "#SIZE" == 8 \n\t" \ ++".if " #SIZE " == 8 \n\t" \ + "addu.ph %[temp3], %[temp3], %[dst_1] \n\t" \ + "addu.ph %[temp1], %[temp1], %[dst_1] \n\t" \ + ".endif \n\t" \ + "shll_s.ph %[temp2], %[temp2], 7 \n\t" \ + "shll_s.ph %[temp0], %[temp0], 7 \n\t" \ +-".if "#SIZE" == 8 \n\t" \ ++".if " #SIZE " == 8 \n\t" \ + "shll_s.ph %[temp3], %[temp3], 7 \n\t" \ + "shll_s.ph %[temp1], %[temp1], 7 \n\t" \ + ".endif \n\t" \ + "precrqu_s.qb.ph %[temp0], %[temp2], %[temp0] \n\t" \ +-".if "#SIZE" == 8 \n\t" \ ++".if " #SIZE " == 8 \n\t" \ + "precrqu_s.qb.ph %[temp1], %[temp3], %[temp1] \n\t" \ + ".endif \n\t" + +@@ -899,7 +899,7 @@ + int dst_1 = ((int)(DST)[-1] << 16) + (DST)[-1]; \ + int temp0, temp1, temp2, temp3; \ + __asm__ volatile ( \ +- ".if "#SIZE" < 8 \n\t" \ ++ ".if " #SIZE " < 8 \n\t" \ + "ulw %[temp0], 0(%[top]) \n\t" \ + "subu.ph %[dst_1], %[dst_1], %[top_1] \n\t" \ + CLIPPING(4) \ +@@ -911,7 +911,7 @@ + CLIPPING(8) \ + "usw %[temp0], 0(%[dst]) \n\t" \ + "usw %[temp1], 4(%[dst]) \n\t" \ +- ".if "#SIZE" == 16 \n\t" \ ++ ".if " #SIZE " == 16 \n\t" \ + "ulw %[temp0], 8(%[top]) \n\t" \ + "ulw %[temp1], 12(%[top]) \n\t" \ + CLIPPING(8) \ +diff --git a/Source/LibWebP/src/dsp/dsp.enc_mips32.c b/Source/LibWebP/src/dsp/dsp.enc_mips32.c +index c5837f1..b50e08b 100644 +--- a/Source/LibWebP/src/dsp/dsp.enc_mips32.c ++++ b/Source/LibWebP/src/dsp/dsp.enc_mips32.c +@@ -31,26 +31,26 @@ + // TEMP0..TEMP3 - registers for corresponding tmp elements + // TEMP4..TEMP5 - temporary registers + #define VERTICAL_PASS(A, B, C, D, TEMP4, TEMP0, TEMP1, TEMP2, TEMP3) \ +- "lh %[temp16], "#A"(%[temp20]) \n\t" \ +- "lh %[temp18], "#B"(%[temp20]) \n\t" \ +- "lh %[temp17], "#C"(%[temp20]) \n\t" \ +- "lh %[temp19], "#D"(%[temp20]) \n\t" \ +- "addu %["#TEMP4"], %[temp16], %[temp18] \n\t" \ +- "subu %[temp16], %[temp16], %[temp18] \n\t" \ +- "mul %["#TEMP0"], %[temp17], %[kC2] \n\t" \ +- "mul %[temp18], %[temp19], %[kC1] \n\t" \ +- "mul %[temp17], %[temp17], %[kC1] \n\t" \ +- "mul %[temp19], %[temp19], %[kC2] \n\t" \ +- "sra %["#TEMP0"], %["#TEMP0"], 16 \n\n" \ +- "sra %[temp18], %[temp18], 16 \n\n" \ +- "sra %[temp17], %[temp17], 16 \n\n" \ +- "sra %[temp19], %[temp19], 16 \n\n" \ +- "subu %["#TEMP2"], %["#TEMP0"], %[temp18] \n\t" \ +- "addu %["#TEMP3"], %[temp17], %[temp19] \n\t" \ +- "addu %["#TEMP0"], %["#TEMP4"], %["#TEMP3"] \n\t" \ +- "addu %["#TEMP1"], %[temp16], %["#TEMP2"] \n\t" \ +- "subu %["#TEMP2"], %[temp16], %["#TEMP2"] \n\t" \ +- "subu %["#TEMP3"], %["#TEMP4"], %["#TEMP3"] \n\t" ++ "lh %[temp16], " #A "(%[temp20]) \n\t" \ ++ "lh %[temp18], " #B "(%[temp20]) \n\t" \ ++ "lh %[temp17], " #C "(%[temp20]) \n\t" \ ++ "lh %[temp19], " #D "(%[temp20]) \n\t" \ ++ "addu %[" #TEMP4 "], %[temp16], %[temp18] \n\t" \ ++ "subu %[temp16], %[temp16], %[temp18] \n\t" \ ++ "mul %[" #TEMP0 "], %[temp17], %[kC2] \n\t" \ ++ "mul %[temp18], %[temp19], %[kC1] \n\t" \ ++ "mul %[temp17], %[temp17], %[kC1] \n\t" \ ++ "mul %[temp19], %[temp19], %[kC2] \n\t" \ ++ "sra %[" #TEMP0 "], %[" #TEMP0 "], 16 \n\n" \ ++ "sra %[temp18], %[temp18], 16 \n\n" \ ++ "sra %[temp17], %[temp17], 16 \n\n" \ ++ "sra %[temp19], %[temp19], 16 \n\n" \ ++ "subu %[" #TEMP2 "], %[" #TEMP0 "], %[temp18] \n\t" \ ++ "addu %[" #TEMP3 "], %[temp17], %[temp19] \n\t" \ ++ "addu %[" #TEMP0 "], %[" #TEMP4 "], %[" #TEMP3 "] \n\t" \ ++ "addu %[" #TEMP1 "], %[temp16], %[" #TEMP2 "] \n\t" \ ++ "subu %[" #TEMP2 "], %[temp16], %[" #TEMP2 "] \n\t" \ ++ "subu %[" #TEMP3 "], %[" #TEMP4 "], %[" #TEMP3 "] \n\t" + + // macro for one horizontal pass in ITransformOne + // MUL and STORE macros inlined +@@ -58,59 +58,59 @@ + // temp0..temp15 holds tmp[0]..tmp[15] + // A - offset in bytes to load from ref and store to dst buffer + // TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements +-#define HORIZONTAL_PASS(A, TEMP0, TEMP4, TEMP8, TEMP12) \ +- "addiu %["#TEMP0"], %["#TEMP0"], 4 \n\t" \ +- "addu %[temp16], %["#TEMP0"], %["#TEMP8"] \n\t" \ +- "subu %[temp17], %["#TEMP0"], %["#TEMP8"] \n\t" \ +- "mul %["#TEMP0"], %["#TEMP4"], %[kC2] \n\t" \ +- "mul %["#TEMP8"], %["#TEMP12"], %[kC1] \n\t" \ +- "mul %["#TEMP4"], %["#TEMP4"], %[kC1] \n\t" \ +- "mul %["#TEMP12"], %["#TEMP12"], %[kC2] \n\t" \ +- "sra %["#TEMP0"], %["#TEMP0"], 16 \n\t" \ +- "sra %["#TEMP8"], %["#TEMP8"], 16 \n\t" \ +- "sra %["#TEMP4"], %["#TEMP4"], 16 \n\t" \ +- "sra %["#TEMP12"], %["#TEMP12"], 16 \n\t" \ +- "subu %[temp18], %["#TEMP0"], %["#TEMP8"] \n\t" \ +- "addu %[temp19], %["#TEMP4"], %["#TEMP12"] \n\t" \ +- "addu %["#TEMP0"], %[temp16], %[temp19] \n\t" \ +- "addu %["#TEMP4"], %[temp17], %[temp18] \n\t" \ +- "subu %["#TEMP8"], %[temp17], %[temp18] \n\t" \ +- "subu %["#TEMP12"], %[temp16], %[temp19] \n\t" \ +- "lw %[temp20], 0(%[args]) \n\t" \ +- "sra %["#TEMP0"], %["#TEMP0"], 3 \n\t" \ +- "sra %["#TEMP4"], %["#TEMP4"], 3 \n\t" \ +- "sra %["#TEMP8"], %["#TEMP8"], 3 \n\t" \ +- "sra %["#TEMP12"], %["#TEMP12"], 3 \n\t" \ +- "lbu %[temp16], 0+"XSTR(BPS)"*"#A"(%[temp20]) \n\t" \ +- "lbu %[temp17], 1+"XSTR(BPS)"*"#A"(%[temp20]) \n\t" \ +- "lbu %[temp18], 2+"XSTR(BPS)"*"#A"(%[temp20]) \n\t" \ +- "lbu %[temp19], 3+"XSTR(BPS)"*"#A"(%[temp20]) \n\t" \ +- "addu %["#TEMP0"], %[temp16], %["#TEMP0"] \n\t" \ +- "addu %["#TEMP4"], %[temp17], %["#TEMP4"] \n\t" \ +- "addu %["#TEMP8"], %[temp18], %["#TEMP8"] \n\t" \ +- "addu %["#TEMP12"], %[temp19], %["#TEMP12"] \n\t" \ +- "slt %[temp16], %["#TEMP0"], $zero \n\t" \ +- "slt %[temp17], %["#TEMP4"], $zero \n\t" \ +- "slt %[temp18], %["#TEMP8"], $zero \n\t" \ +- "slt %[temp19], %["#TEMP12"], $zero \n\t" \ +- "movn %["#TEMP0"], $zero, %[temp16] \n\t" \ +- "movn %["#TEMP4"], $zero, %[temp17] \n\t" \ +- "movn %["#TEMP8"], $zero, %[temp18] \n\t" \ +- "movn %["#TEMP12"], $zero, %[temp19] \n\t" \ +- "addiu %[temp20], $zero, 255 \n\t" \ +- "slt %[temp16], %["#TEMP0"], %[temp20] \n\t" \ +- "slt %[temp17], %["#TEMP4"], %[temp20] \n\t" \ +- "slt %[temp18], %["#TEMP8"], %[temp20] \n\t" \ +- "slt %[temp19], %["#TEMP12"], %[temp20] \n\t" \ +- "movz %["#TEMP0"], %[temp20], %[temp16] \n\t" \ +- "movz %["#TEMP4"], %[temp20], %[temp17] \n\t" \ +- "lw %[temp16], 8(%[args]) \n\t" \ +- "movz %["#TEMP8"], %[temp20], %[temp18] \n\t" \ +- "movz %["#TEMP12"], %[temp20], %[temp19] \n\t" \ +- "sb %["#TEMP0"], 0+"XSTR(BPS)"*"#A"(%[temp16]) \n\t" \ +- "sb %["#TEMP4"], 1+"XSTR(BPS)"*"#A"(%[temp16]) \n\t" \ +- "sb %["#TEMP8"], 2+"XSTR(BPS)"*"#A"(%[temp16]) \n\t" \ +- "sb %["#TEMP12"], 3+"XSTR(BPS)"*"#A"(%[temp16]) \n\t" ++#define HORIZONTAL_PASS(A, TEMP0, TEMP4, TEMP8, TEMP12) \ ++ "addiu %[" #TEMP0 "], %[" #TEMP0 "], 4 \n\t" \ ++ "addu %[temp16], %[" #TEMP0 "], %[" #TEMP8 "] \n\t" \ ++ "subu %[temp17], %[" #TEMP0 "], %[" #TEMP8 "] \n\t" \ ++ "mul %[" #TEMP0 "], %[" #TEMP4 "], %[kC2] \n\t" \ ++ "mul %[" #TEMP8 "], %[" #TEMP12 "], %[kC1] \n\t" \ ++ "mul %[" #TEMP4 "], %[" #TEMP4 "], %[kC1] \n\t" \ ++ "mul %[" #TEMP12 "], %[" #TEMP12 "], %[kC2] \n\t" \ ++ "sra %[" #TEMP0 "], %[" #TEMP0 "], 16 \n\t" \ ++ "sra %[" #TEMP8 "], %[" #TEMP8 "], 16 \n\t" \ ++ "sra %[" #TEMP4 "], %[" #TEMP4 "], 16 \n\t" \ ++ "sra %[" #TEMP12 "], %[" #TEMP12 "], 16 \n\t" \ ++ "subu %[temp18], %[" #TEMP0 "], %[" #TEMP8 "] \n\t" \ ++ "addu %[temp19], %[" #TEMP4 "], %[" #TEMP12 "] \n\t" \ ++ "addu %[" #TEMP0 "], %[temp16], %[temp19] \n\t" \ ++ "addu %[" #TEMP4 "], %[temp17], %[temp18] \n\t" \ ++ "subu %[" #TEMP8 "], %[temp17], %[temp18] \n\t" \ ++ "subu %[" #TEMP12 "], %[temp16], %[temp19] \n\t" \ ++ "lw %[temp20], 0(%[args]) \n\t" \ ++ "sra %[" #TEMP0 "], %[" #TEMP0 "], 3 \n\t" \ ++ "sra %[" #TEMP4 "], %[" #TEMP4 "], 3 \n\t" \ ++ "sra %[" #TEMP8 "], %[" #TEMP8 "], 3 \n\t" \ ++ "sra %[" #TEMP12 "], %[" #TEMP12 "], 3 \n\t" \ ++ "lbu %[temp16], 0+"XSTR(BPS)"*" #A "(%[temp20]) \n\t" \ ++ "lbu %[temp17], 1+"XSTR(BPS)"*" #A "(%[temp20]) \n\t" \ ++ "lbu %[temp18], 2+"XSTR(BPS)"*" #A "(%[temp20]) \n\t" \ ++ "lbu %[temp19], 3+"XSTR(BPS)"*" #A "(%[temp20]) \n\t" \ ++ "addu %[" #TEMP0 "], %[temp16], %[" #TEMP0 "] \n\t" \ ++ "addu %[" #TEMP4 "], %[temp17], %[" #TEMP4 "] \n\t" \ ++ "addu %[" #TEMP8 "], %[temp18], %[" #TEMP8 "] \n\t" \ ++ "addu %[" #TEMP12 "], %[temp19], %[" #TEMP12 "] \n\t" \ ++ "slt %[temp16], %[" #TEMP0 "], $zero \n\t" \ ++ "slt %[temp17], %[" #TEMP4 "], $zero \n\t" \ ++ "slt %[temp18], %[" #TEMP8 "], $zero \n\t" \ ++ "slt %[temp19], %[" #TEMP12 "], $zero \n\t" \ ++ "movn %[" #TEMP0 "], $zero, %[temp16] \n\t" \ ++ "movn %[" #TEMP4 "], $zero, %[temp17] \n\t" \ ++ "movn %[" #TEMP8 "], $zero, %[temp18] \n\t" \ ++ "movn %[" #TEMP12 "], $zero, %[temp19] \n\t" \ ++ "addiu %[temp20], $zero, 255 \n\t" \ ++ "slt %[temp16], %[" #TEMP0 "], %[temp20] \n\t" \ ++ "slt %[temp17], %[" #TEMP4 "], %[temp20] \n\t" \ ++ "slt %[temp18], %[" #TEMP8 "], %[temp20] \n\t" \ ++ "slt %[temp19], %[" #TEMP12 "], %[temp20] \n\t" \ ++ "movz %[" #TEMP0 "], %[temp20], %[temp16] \n\t" \ ++ "movz %[" #TEMP4 "], %[temp20], %[temp17] \n\t" \ ++ "lw %[temp16], 8(%[args]) \n\t" \ ++ "movz %[" #TEMP8 "], %[temp20], %[temp18] \n\t" \ ++ "movz %[" #TEMP12 "], %[temp20], %[temp19] \n\t" \ ++ "sb %[" #TEMP0 "], 0+"XSTR(BPS)"*" #A "(%[temp16]) \n\t" \ ++ "sb %[" #TEMP4 "], 1+"XSTR(BPS)"*" #A "(%[temp16]) \n\t" \ ++ "sb %[" #TEMP8 "], 2+"XSTR(BPS)"*" #A "(%[temp16]) \n\t" \ ++ "sb %[" #TEMP12 "], 3+"XSTR(BPS)"*" #A "(%[temp16]) \n\t" + + // Does one or two inverse transforms. + static WEBP_INLINE void ITransformOne(const uint8_t* ref, const int16_t* in, +@@ -161,9 +161,9 @@ + // K - offset in bytes (kZigzag[n] * 4) + // N - offset in bytes (n * 2) + #define QUANTIZE_ONE(J, K, N) \ +- "lh %[temp0], "#J"(%[ppin]) \n\t" \ +- "lhu %[temp1], "#J"(%[ppsharpen]) \n\t" \ +- "lw %[temp2], "#K"(%[ppzthresh]) \n\t" \ ++ "lh %[temp0], " #J "(%[ppin]) \n\t" \ ++ "lhu %[temp1], " #J "(%[ppsharpen]) \n\t" \ ++ "lw %[temp2], " #K "(%[ppzthresh]) \n\t" \ + "sra %[sign], %[temp0], 15 \n\t" \ + "xor %[coeff], %[temp0], %[sign] \n\t" \ + "subu %[coeff], %[coeff], %[sign] \n\t" \ +@@ -172,9 +172,9 @@ + "addiu %[temp5], $zero, 0 \n\t" \ + "addiu %[level], $zero, 0 \n\t" \ + "beqz %[temp4], 2f \n\t" \ +- "lhu %[temp1], "#J"(%[ppiq]) \n\t" \ +- "lw %[temp2], "#K"(%[ppbias]) \n\t" \ +- "lhu %[temp3], "#J"(%[ppq]) \n\t" \ ++ "lhu %[temp1], " #J "(%[ppiq]) \n\t" \ ++ "lw %[temp2], " #K "(%[ppbias]) \n\t" \ ++ "lhu %[temp3], " #J "(%[ppq]) \n\t" \ + "mul %[level], %[coeff], %[temp1] \n\t" \ + "addu %[level], %[level], %[temp2] \n\t" \ + "sra %[level], %[level], 17 \n\t" \ +@@ -184,8 +184,8 @@ + "subu %[level], %[level], %[sign] \n\t" \ + "mul %[temp5], %[level], %[temp3] \n\t" \ + "2: \n\t" \ +- "sh %[temp5], "#J"(%[ppin]) \n\t" \ +- "sh %[level], "#N"(%[pout]) \n\t" ++ "sh %[temp5], " #J "(%[ppin]) \n\t" \ ++ "sh %[level], " #N "(%[pout]) \n\t" + + static int QuantizeBlock(int16_t in[16], int16_t out[16], + const VP8Matrix* const mtx) { +@@ -253,39 +253,39 @@ + // A - offset in bytes to load from a and b buffers + // E..H - offsets in bytes to store first results to tmp buffer + // E1..H1 - offsets in bytes to store second results to tmp buffer +-#define HORIZONTAL_PASS(A, E, F, G, H, E1, F1, G1, H1) \ +- "lbu %[temp0], 0+"XSTR(BPS)"*"#A"(%[a]) \n\t" \ +- "lbu %[temp1], 1+"XSTR(BPS)"*"#A"(%[a]) \n\t" \ +- "lbu %[temp2], 2+"XSTR(BPS)"*"#A"(%[a]) \n\t" \ +- "lbu %[temp3], 3+"XSTR(BPS)"*"#A"(%[a]) \n\t" \ +- "lbu %[temp4], 0+"XSTR(BPS)"*"#A"(%[b]) \n\t" \ +- "lbu %[temp5], 1+"XSTR(BPS)"*"#A"(%[b]) \n\t" \ +- "lbu %[temp6], 2+"XSTR(BPS)"*"#A"(%[b]) \n\t" \ +- "lbu %[temp7], 3+"XSTR(BPS)"*"#A"(%[b]) \n\t" \ +- "addu %[temp8], %[temp0], %[temp2] \n\t" \ +- "subu %[temp0], %[temp0], %[temp2] \n\t" \ +- "addu %[temp2], %[temp1], %[temp3] \n\t" \ +- "subu %[temp1], %[temp1], %[temp3] \n\t" \ +- "addu %[temp3], %[temp4], %[temp6] \n\t" \ +- "subu %[temp4], %[temp4], %[temp6] \n\t" \ +- "addu %[temp6], %[temp5], %[temp7] \n\t" \ +- "subu %[temp5], %[temp5], %[temp7] \n\t" \ +- "addu %[temp7], %[temp8], %[temp2] \n\t" \ +- "subu %[temp2], %[temp8], %[temp2] \n\t" \ +- "addu %[temp8], %[temp0], %[temp1] \n\t" \ +- "subu %[temp0], %[temp0], %[temp1] \n\t" \ +- "addu %[temp1], %[temp3], %[temp6] \n\t" \ +- "subu %[temp3], %[temp3], %[temp6] \n\t" \ +- "addu %[temp6], %[temp4], %[temp5] \n\t" \ +- "subu %[temp4], %[temp4], %[temp5] \n\t" \ +- "sw %[temp7], "#E"(%[tmp]) \n\t" \ +- "sw %[temp2], "#H"(%[tmp]) \n\t" \ +- "sw %[temp8], "#F"(%[tmp]) \n\t" \ +- "sw %[temp0], "#G"(%[tmp]) \n\t" \ +- "sw %[temp1], "#E1"(%[tmp]) \n\t" \ +- "sw %[temp3], "#H1"(%[tmp]) \n\t" \ +- "sw %[temp6], "#F1"(%[tmp]) \n\t" \ +- "sw %[temp4], "#G1"(%[tmp]) \n\t" ++#define HORIZONTAL_PASS(A, E, F, G, H, E1, F1, G1, H1) \ ++ "lbu %[temp0], 0+"XSTR(BPS)"*" #A "(%[a]) \n\t" \ ++ "lbu %[temp1], 1+"XSTR(BPS)"*" #A "(%[a]) \n\t" \ ++ "lbu %[temp2], 2+"XSTR(BPS)"*" #A "(%[a]) \n\t" \ ++ "lbu %[temp3], 3+"XSTR(BPS)"*" #A "(%[a]) \n\t" \ ++ "lbu %[temp4], 0+"XSTR(BPS)"*" #A "(%[b]) \n\t" \ ++ "lbu %[temp5], 1+"XSTR(BPS)"*" #A "(%[b]) \n\t" \ ++ "lbu %[temp6], 2+"XSTR(BPS)"*" #A "(%[b]) \n\t" \ ++ "lbu %[temp7], 3+"XSTR(BPS)"*" #A "(%[b]) \n\t" \ ++ "addu %[temp8], %[temp0], %[temp2] \n\t" \ ++ "subu %[temp0], %[temp0], %[temp2] \n\t" \ ++ "addu %[temp2], %[temp1], %[temp3] \n\t" \ ++ "subu %[temp1], %[temp1], %[temp3] \n\t" \ ++ "addu %[temp3], %[temp4], %[temp6] \n\t" \ ++ "subu %[temp4], %[temp4], %[temp6] \n\t" \ ++ "addu %[temp6], %[temp5], %[temp7] \n\t" \ ++ "subu %[temp5], %[temp5], %[temp7] \n\t" \ ++ "addu %[temp7], %[temp8], %[temp2] \n\t" \ ++ "subu %[temp2], %[temp8], %[temp2] \n\t" \ ++ "addu %[temp8], %[temp0], %[temp1] \n\t" \ ++ "subu %[temp0], %[temp0], %[temp1] \n\t" \ ++ "addu %[temp1], %[temp3], %[temp6] \n\t" \ ++ "subu %[temp3], %[temp3], %[temp6] \n\t" \ ++ "addu %[temp6], %[temp4], %[temp5] \n\t" \ ++ "subu %[temp4], %[temp4], %[temp5] \n\t" \ ++ "sw %[temp7], " #E "(%[tmp]) \n\t" \ ++ "sw %[temp2], " #H "(%[tmp]) \n\t" \ ++ "sw %[temp8], " #F "(%[tmp]) \n\t" \ ++ "sw %[temp0], " #G "(%[tmp]) \n\t" \ ++ "sw %[temp1], " #E1 "(%[tmp]) \n\t" \ ++ "sw %[temp3], " #H1 "(%[tmp]) \n\t" \ ++ "sw %[temp6], " #F1 "(%[tmp]) \n\t" \ ++ "sw %[temp4], " #G1 "(%[tmp]) \n\t" + + // macro for one vertical pass in Disto4x4 (TTransform) + // two calls of function TTransform are merged into single one +@@ -300,10 +300,10 @@ + // A1..D1 - offsets in bytes to load second results from tmp buffer + // E..H - offsets in bytes to load from w buffer + #define VERTICAL_PASS(A, B, C, D, A1, B1, C1, D1, E, F, G, H) \ +- "lw %[temp0], "#A1"(%[tmp]) \n\t" \ +- "lw %[temp1], "#C1"(%[tmp]) \n\t" \ +- "lw %[temp2], "#B1"(%[tmp]) \n\t" \ +- "lw %[temp3], "#D1"(%[tmp]) \n\t" \ ++ "lw %[temp0], " #A1 "(%[tmp]) \n\t" \ ++ "lw %[temp1], " #C1 "(%[tmp]) \n\t" \ ++ "lw %[temp2], " #B1 "(%[tmp]) \n\t" \ ++ "lw %[temp3], " #D1 "(%[tmp]) \n\t" \ + "addu %[temp8], %[temp0], %[temp1] \n\t" \ + "subu %[temp0], %[temp0], %[temp1] \n\t" \ + "addu %[temp1], %[temp2], %[temp3] \n\t" \ +@@ -324,18 +324,18 @@ + "subu %[temp1], %[temp1], %[temp5] \n\t" \ + "subu %[temp0], %[temp0], %[temp6] \n\t" \ + "subu %[temp8], %[temp8], %[temp7] \n\t" \ +- "lhu %[temp4], "#E"(%[w]) \n\t" \ +- "lhu %[temp5], "#F"(%[w]) \n\t" \ +- "lhu %[temp6], "#G"(%[w]) \n\t" \ +- "lhu %[temp7], "#H"(%[w]) \n\t" \ ++ "lhu %[temp4], " #E "(%[w]) \n\t" \ ++ "lhu %[temp5], " #F "(%[w]) \n\t" \ ++ "lhu %[temp6], " #G "(%[w]) \n\t" \ ++ "lhu %[temp7], " #H "(%[w]) \n\t" \ + "madd %[temp4], %[temp3] \n\t" \ + "madd %[temp5], %[temp1] \n\t" \ + "madd %[temp6], %[temp0] \n\t" \ + "madd %[temp7], %[temp8] \n\t" \ +- "lw %[temp0], "#A"(%[tmp]) \n\t" \ +- "lw %[temp1], "#C"(%[tmp]) \n\t" \ +- "lw %[temp2], "#B"(%[tmp]) \n\t" \ +- "lw %[temp3], "#D"(%[tmp]) \n\t" \ ++ "lw %[temp0], " #A "(%[tmp]) \n\t" \ ++ "lw %[temp1], " #C "(%[tmp]) \n\t" \ ++ "lw %[temp2], " #B "(%[tmp]) \n\t" \ ++ "lw %[temp3], " #D "(%[tmp]) \n\t" \ + "addu %[temp8], %[temp0], %[temp1] \n\t" \ + "subu %[temp0], %[temp0], %[temp1] \n\t" \ + "addu %[temp1], %[temp2], %[temp3] \n\t" \ +@@ -412,71 +412,71 @@ + // temp0..temp15 holds tmp[0]..tmp[15] + // A - offset in bytes to load from src and ref buffers + // TEMP0..TEMP3 - registers for corresponding tmp elements +-#define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3) \ +- "lw %["#TEMP1"], 0(%[args]) \n\t" \ +- "lw %["#TEMP2"], 4(%[args]) \n\t" \ +- "lbu %[temp16], 0+"XSTR(BPS)"*"#A"(%["#TEMP1"]) \n\t" \ +- "lbu %[temp17], 0+"XSTR(BPS)"*"#A"(%["#TEMP2"]) \n\t" \ +- "lbu %[temp18], 1+"XSTR(BPS)"*"#A"(%["#TEMP1"]) \n\t" \ +- "lbu %[temp19], 1+"XSTR(BPS)"*"#A"(%["#TEMP2"]) \n\t" \ +- "subu %[temp20], %[temp16], %[temp17] \n\t" \ +- "lbu %[temp16], 2+"XSTR(BPS)"*"#A"(%["#TEMP1"]) \n\t" \ +- "lbu %[temp17], 2+"XSTR(BPS)"*"#A"(%["#TEMP2"]) \n\t" \ +- "subu %["#TEMP0"], %[temp18], %[temp19] \n\t" \ +- "lbu %[temp18], 3+"XSTR(BPS)"*"#A"(%["#TEMP1"]) \n\t" \ +- "lbu %[temp19], 3+"XSTR(BPS)"*"#A"(%["#TEMP2"]) \n\t" \ +- "subu %["#TEMP1"], %[temp16], %[temp17] \n\t" \ +- "subu %["#TEMP2"], %[temp18], %[temp19] \n\t" \ +- "addu %["#TEMP3"], %[temp20], %["#TEMP2"] \n\t" \ +- "subu %["#TEMP2"], %[temp20], %["#TEMP2"] \n\t" \ +- "addu %[temp20], %["#TEMP0"], %["#TEMP1"] \n\t" \ +- "subu %["#TEMP0"], %["#TEMP0"], %["#TEMP1"] \n\t" \ +- "mul %[temp16], %["#TEMP2"], %[c5352] \n\t" \ +- "mul %[temp17], %["#TEMP2"], %[c2217] \n\t" \ +- "mul %[temp18], %["#TEMP0"], %[c5352] \n\t" \ +- "mul %[temp19], %["#TEMP0"], %[c2217] \n\t" \ +- "addu %["#TEMP1"], %["#TEMP3"], %[temp20] \n\t" \ +- "subu %[temp20], %["#TEMP3"], %[temp20] \n\t" \ +- "sll %["#TEMP0"], %["#TEMP1"], 3 \n\t" \ +- "sll %["#TEMP2"], %[temp20], 3 \n\t" \ +- "addiu %[temp16], %[temp16], 1812 \n\t" \ +- "addiu %[temp17], %[temp17], 937 \n\t" \ +- "addu %[temp16], %[temp16], %[temp19] \n\t" \ +- "subu %[temp17], %[temp17], %[temp18] \n\t" \ +- "sra %["#TEMP1"], %[temp16], 9 \n\t" \ +- "sra %["#TEMP3"], %[temp17], 9 \n\t" ++#define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3) \ ++ "lw %[" #TEMP1 "], 0(%[args]) \n\t" \ ++ "lw %[" #TEMP2 "], 4(%[args]) \n\t" \ ++ "lbu %[temp16], 0+"XSTR(BPS)"*" #A "(%[" #TEMP1 "]) \n\t" \ ++ "lbu %[temp17], 0+"XSTR(BPS)"*" #A "(%[" #TEMP2 "]) \n\t" \ ++ "lbu %[temp18], 1+"XSTR(BPS)"*" #A "(%[" #TEMP1 "]) \n\t" \ ++ "lbu %[temp19], 1+"XSTR(BPS)"*" #A "(%[" #TEMP2 "]) \n\t" \ ++ "subu %[temp20], %[temp16], %[temp17] \n\t" \ ++ "lbu %[temp16], 2+"XSTR(BPS)"*" #A "(%[" #TEMP1 "]) \n\t" \ ++ "lbu %[temp17], 2+"XSTR(BPS)"*" #A "(%[" #TEMP2 "]) \n\t" \ ++ "subu %[" #TEMP0 "], %[temp18], %[temp19] \n\t" \ ++ "lbu %[temp18], 3+"XSTR(BPS)"*" #A "(%[" #TEMP1 "]) \n\t" \ ++ "lbu %[temp19], 3+"XSTR(BPS)"*" #A "(%[" #TEMP2 "]) \n\t" \ ++ "subu %[" #TEMP1 "], %[temp16], %[temp17] \n\t" \ ++ "subu %[" #TEMP2 "], %[temp18], %[temp19] \n\t" \ ++ "addu %[" #TEMP3 "], %[temp20], %[" #TEMP2 "] \n\t" \ ++ "subu %[" #TEMP2 "], %[temp20], %[" #TEMP2 "] \n\t" \ ++ "addu %[temp20], %[" #TEMP0 "], %[" #TEMP1 "] \n\t" \ ++ "subu %[" #TEMP0 "], %[" #TEMP0 "], %[" #TEMP1 "] \n\t" \ ++ "mul %[temp16], %[" #TEMP2 "], %[c5352] \n\t" \ ++ "mul %[temp17], %[" #TEMP2 "], %[c2217] \n\t" \ ++ "mul %[temp18], %[" #TEMP0 "], %[c5352] \n\t" \ ++ "mul %[temp19], %[" #TEMP0 "], %[c2217] \n\t" \ ++ "addu %[" #TEMP1 "], %[" #TEMP3 "], %[temp20] \n\t" \ ++ "subu %[temp20], %[" #TEMP3 "], %[temp20] \n\t" \ ++ "sll %[" #TEMP0 "], %[" #TEMP1 "], 3 \n\t" \ ++ "sll %[" #TEMP2 "], %[temp20], 3 \n\t" \ ++ "addiu %[temp16], %[temp16], 1812 \n\t" \ ++ "addiu %[temp17], %[temp17], 937 \n\t" \ ++ "addu %[temp16], %[temp16], %[temp19] \n\t" \ ++ "subu %[temp17], %[temp17], %[temp18] \n\t" \ ++ "sra %[" #TEMP1 "], %[temp16], 9 \n\t" \ ++ "sra %[" #TEMP3 "], %[temp17], 9 \n\t" + + // macro for one vertical pass in FTransform + // temp0..temp15 holds tmp[0]..tmp[15] + // A..D - offsets in bytes to store to out buffer + // TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements +-#define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12) \ +- "addu %[temp16], %["#TEMP0"], %["#TEMP12"] \n\t" \ +- "subu %[temp19], %["#TEMP0"], %["#TEMP12"] \n\t" \ +- "addu %[temp17], %["#TEMP4"], %["#TEMP8"] \n\t" \ +- "subu %[temp18], %["#TEMP4"], %["#TEMP8"] \n\t" \ +- "mul %["#TEMP8"], %[temp19], %[c2217] \n\t" \ +- "mul %["#TEMP12"], %[temp18], %[c2217] \n\t" \ +- "mul %["#TEMP4"], %[temp19], %[c5352] \n\t" \ +- "mul %[temp18], %[temp18], %[c5352] \n\t" \ +- "addiu %[temp16], %[temp16], 7 \n\t" \ +- "addu %["#TEMP0"], %[temp16], %[temp17] \n\t" \ +- "sra %["#TEMP0"], %["#TEMP0"], 4 \n\t" \ +- "addu %["#TEMP12"], %["#TEMP12"], %["#TEMP4"] \n\t" \ +- "subu %["#TEMP4"], %[temp16], %[temp17] \n\t" \ +- "sra %["#TEMP4"], %["#TEMP4"], 4 \n\t" \ +- "addiu %["#TEMP8"], %["#TEMP8"], 30000 \n\t" \ +- "addiu %["#TEMP12"], %["#TEMP12"], 12000 \n\t" \ +- "addiu %["#TEMP8"], %["#TEMP8"], 21000 \n\t" \ +- "subu %["#TEMP8"], %["#TEMP8"], %[temp18] \n\t" \ +- "sra %["#TEMP12"], %["#TEMP12"], 16 \n\t" \ +- "sra %["#TEMP8"], %["#TEMP8"], 16 \n\t" \ +- "addiu %[temp16], %["#TEMP12"], 1 \n\t" \ +- "movn %["#TEMP12"], %[temp16], %[temp19] \n\t" \ +- "sh %["#TEMP0"], "#A"(%[temp20]) \n\t" \ +- "sh %["#TEMP4"], "#C"(%[temp20]) \n\t" \ +- "sh %["#TEMP8"], "#D"(%[temp20]) \n\t" \ +- "sh %["#TEMP12"], "#B"(%[temp20]) \n\t" ++#define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12) \ ++ "addu %[temp16], %[" #TEMP0 "], %[" #TEMP12 "] \n\t" \ ++ "subu %[temp19], %[" #TEMP0 "], %[" #TEMP12 "] \n\t" \ ++ "addu %[temp17], %[" #TEMP4 "], %[" #TEMP8 "] \n\t" \ ++ "subu %[temp18], %[" #TEMP4 "], %[" #TEMP8 "] \n\t" \ ++ "mul %[" #TEMP8 "], %[temp19], %[c2217] \n\t" \ ++ "mul %[" #TEMP12 "], %[temp18], %[c2217] \n\t" \ ++ "mul %[" #TEMP4 "], %[temp19], %[c5352] \n\t" \ ++ "mul %[temp18], %[temp18], %[c5352] \n\t" \ ++ "addiu %[temp16], %[temp16], 7 \n\t" \ ++ "addu %[" #TEMP0 "], %[temp16], %[temp17] \n\t" \ ++ "sra %[" #TEMP0 "], %[" #TEMP0 "], 4 \n\t" \ ++ "addu %[" #TEMP12 "], %[" #TEMP12 "], %[" #TEMP4 "] \n\t" \ ++ "subu %[" #TEMP4 "], %[temp16], %[temp17] \n\t" \ ++ "sra %[" #TEMP4 "], %[" #TEMP4 "], 4 \n\t" \ ++ "addiu %[" #TEMP8 "], %[" #TEMP8 "], 30000 \n\t" \ ++ "addiu %[" #TEMP12 "], %[" #TEMP12 "], 12000 \n\t" \ ++ "addiu %[" #TEMP8 "], %[" #TEMP8 "], 21000 \n\t" \ ++ "subu %[" #TEMP8 "], %[" #TEMP8 "], %[temp18] \n\t" \ ++ "sra %[" #TEMP12 "], %[" #TEMP12 "], 16 \n\t" \ ++ "sra %[" #TEMP8 "], %[" #TEMP8 "], 16 \n\t" \ ++ "addiu %[temp16], %[" #TEMP12 "], 1 \n\t" \ ++ "movn %[" #TEMP12 "], %[temp16], %[temp19] \n\t" \ ++ "sh %[" #TEMP0 "], " #A "(%[temp20]) \n\t" \ ++ "sh %[" #TEMP4 "], " #C "(%[temp20]) \n\t" \ ++ "sh %[" #TEMP8 "], " #D "(%[temp20]) \n\t" \ ++ "sh %[" #TEMP12 "], " #B "(%[temp20]) \n\t" + + static void FTransform(const uint8_t* src, const uint8_t* ref, int16_t* out) { + int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8; +@@ -516,14 +516,14 @@ + #if !defined(WORK_AROUND_GCC) + + #define GET_SSE_INNER(A, B, C, D) \ +- "lbu %[temp0], "#A"(%[a]) \n\t" \ +- "lbu %[temp1], "#A"(%[b]) \n\t" \ +- "lbu %[temp2], "#B"(%[a]) \n\t" \ +- "lbu %[temp3], "#B"(%[b]) \n\t" \ +- "lbu %[temp4], "#C"(%[a]) \n\t" \ +- "lbu %[temp5], "#C"(%[b]) \n\t" \ +- "lbu %[temp6], "#D"(%[a]) \n\t" \ +- "lbu %[temp7], "#D"(%[b]) \n\t" \ ++ "lbu %[temp0], " #A "(%[a]) \n\t" \ ++ "lbu %[temp1], " #A "(%[b]) \n\t" \ ++ "lbu %[temp2], " #B "(%[a]) \n\t" \ ++ "lbu %[temp3], " #B "(%[b]) \n\t" \ ++ "lbu %[temp4], " #C "(%[a]) \n\t" \ ++ "lbu %[temp5], " #C "(%[b]) \n\t" \ ++ "lbu %[temp6], " #D "(%[a]) \n\t" \ ++ "lbu %[temp7], " #D "(%[b]) \n\t" \ + "subu %[temp0], %[temp0], %[temp1] \n\t" \ + "subu %[temp2], %[temp2], %[temp3] \n\t" \ + "subu %[temp4], %[temp4], %[temp5] \n\t" \ +diff --git a/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c +index 56db07c..44f6fd2 100644 +--- a/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c ++++ b/Source/LibWebP/src/dsp/dsp.enc_mips_dsp_r2.c +@@ -27,25 +27,25 @@ + // I - input (macro doesn't change it) + #define ADD_SUB_HALVES_X4(O0, O1, O2, O3, O4, O5, O6, O7, \ + I0, I1, I2, I3, I4, I5, I6, I7) \ +- "addq.ph %["#O0"], %["#I0"], %["#I1"] \n\t" \ +- "subq.ph %["#O1"], %["#I0"], %["#I1"] \n\t" \ +- "addq.ph %["#O2"], %["#I2"], %["#I3"] \n\t" \ +- "subq.ph %["#O3"], %["#I2"], %["#I3"] \n\t" \ +- "addq.ph %["#O4"], %["#I4"], %["#I5"] \n\t" \ +- "subq.ph %["#O5"], %["#I4"], %["#I5"] \n\t" \ +- "addq.ph %["#O6"], %["#I6"], %["#I7"] \n\t" \ +- "subq.ph %["#O7"], %["#I6"], %["#I7"] \n\t" ++ "addq.ph %[" #O0 "], %[" #I0 "], %[" #I1 "] \n\t" \ ++ "subq.ph %[" #O1 "], %[" #I0 "], %[" #I1 "] \n\t" \ ++ "addq.ph %[" #O2 "], %[" #I2 "], %[" #I3 "] \n\t" \ ++ "subq.ph %[" #O3 "], %[" #I2 "], %[" #I3 "] \n\t" \ ++ "addq.ph %[" #O4 "], %[" #I4 "], %[" #I5 "] \n\t" \ ++ "subq.ph %[" #O5 "], %[" #I4 "], %[" #I5 "] \n\t" \ ++ "addq.ph %[" #O6 "], %[" #I6 "], %[" #I7 "] \n\t" \ ++ "subq.ph %[" #O7 "], %[" #I6 "], %[" #I7 "] \n\t" + + // IO - input/output + #define ABS_X8(IO0, IO1, IO2, IO3, IO4, IO5, IO6, IO7) \ +- "absq_s.ph %["#IO0"], %["#IO0"] \n\t" \ +- "absq_s.ph %["#IO1"], %["#IO1"] \n\t" \ +- "absq_s.ph %["#IO2"], %["#IO2"] \n\t" \ +- "absq_s.ph %["#IO3"], %["#IO3"] \n\t" \ +- "absq_s.ph %["#IO4"], %["#IO4"] \n\t" \ +- "absq_s.ph %["#IO5"], %["#IO5"] \n\t" \ +- "absq_s.ph %["#IO6"], %["#IO6"] \n\t" \ +- "absq_s.ph %["#IO7"], %["#IO7"] \n\t" ++ "absq_s.ph %[" #IO0 "], %[" #IO0 "] \n\t" \ ++ "absq_s.ph %[" #IO1 "], %[" #IO1 "] \n\t" \ ++ "absq_s.ph %[" #IO2 "], %[" #IO2 "] \n\t" \ ++ "absq_s.ph %[" #IO3 "], %[" #IO3 "] \n\t" \ ++ "absq_s.ph %[" #IO4 "], %[" #IO4 "] \n\t" \ ++ "absq_s.ph %[" #IO5 "], %[" #IO5 "] \n\t" \ ++ "absq_s.ph %[" #IO6 "], %[" #IO6 "] \n\t" \ ++ "absq_s.ph %[" #IO7 "], %[" #IO7 "] \n\t" + + // dpa.w.ph $ac0 temp0 ,temp1 + // $ac += temp0[31..16] * temp1[31..16] + temp0[15..0] * temp1[15..0] +@@ -56,15 +56,15 @@ + #define MUL_HALF(O0, I0, I1, I2, I3, I4, I5, I6, I7, \ + I8, I9, I10, I11, I12, I13, I14, I15) \ + "mult $ac0, $zero, $zero \n\t" \ +- "dpa.w.ph $ac0, %["#I2"], %["#I0"] \n\t" \ +- "dpax.w.ph $ac0, %["#I5"], %["#I6"] \n\t" \ +- "dpa.w.ph $ac0, %["#I8"], %["#I9"] \n\t" \ +- "dpax.w.ph $ac0, %["#I11"], %["#I4"] \n\t" \ +- "dpa.w.ph $ac0, %["#I12"], %["#I7"] \n\t" \ +- "dpax.w.ph $ac0, %["#I13"], %["#I1"] \n\t" \ +- "dpa.w.ph $ac0, %["#I14"], %["#I3"] \n\t" \ +- "dpax.w.ph $ac0, %["#I15"], %["#I10"] \n\t" \ +- "mflo %["#O0"], $ac0 \n\t" ++ "dpa.w.ph $ac0, %[" #I2 "], %[" #I0 "] \n\t" \ ++ "dpax.w.ph $ac0, %[" #I5 "], %[" #I6 "] \n\t" \ ++ "dpa.w.ph $ac0, %[" #I8 "], %[" #I9 "] \n\t" \ ++ "dpax.w.ph $ac0, %[" #I11 "], %[" #I4 "] \n\t" \ ++ "dpa.w.ph $ac0, %[" #I12 "], %[" #I7 "] \n\t" \ ++ "dpax.w.ph $ac0, %[" #I13 "], %[" #I1 "] \n\t" \ ++ "dpa.w.ph $ac0, %[" #I14 "], %[" #I3 "] \n\t" \ ++ "dpax.w.ph $ac0, %[" #I15 "], %[" #I10 "] \n\t" \ ++ "mflo %[" #O0 "], $ac0 \n\t" + + #define OUTPUT_EARLY_CLOBBER_REGS_17() \ + OUTPUT_EARLY_CLOBBER_REGS_10(), \ +@@ -77,69 +77,69 @@ + // A - offset in bytes to load from src and ref buffers + // TEMP0..TEMP3 - registers for corresponding tmp elements + #define HORIZONTAL_PASS(A, TEMP0, TEMP1, TEMP2, TEMP3) \ +- "lw %["#TEMP0"], 0(%[args]) \n\t" \ +- "lw %["#TEMP1"], 4(%[args]) \n\t" \ +- "lw %["#TEMP2"], "XSTR(BPS)"*"#A"(%["#TEMP0"]) \n\t" \ +- "lw %["#TEMP3"], "XSTR(BPS)"*"#A"(%["#TEMP1"]) \n\t" \ +- "preceu.ph.qbl %["#TEMP0"], %["#TEMP2"] \n\t" \ +- "preceu.ph.qbl %["#TEMP1"], %["#TEMP3"] \n\t" \ +- "preceu.ph.qbr %["#TEMP2"], %["#TEMP2"] \n\t" \ +- "preceu.ph.qbr %["#TEMP3"], %["#TEMP3"] \n\t" \ +- "subq.ph %["#TEMP0"], %["#TEMP0"], %["#TEMP1"] \n\t" \ +- "subq.ph %["#TEMP2"], %["#TEMP2"], %["#TEMP3"] \n\t" \ +- "rotr %["#TEMP0"], %["#TEMP0"], 16 \n\t" \ +- "addq.ph %["#TEMP1"], %["#TEMP2"], %["#TEMP0"] \n\t" \ +- "subq.ph %["#TEMP3"], %["#TEMP2"], %["#TEMP0"] \n\t" \ +- "seh %["#TEMP0"], %["#TEMP1"] \n\t" \ +- "sra %[temp16], %["#TEMP1"], 16 \n\t" \ +- "seh %[temp19], %["#TEMP3"] \n\t" \ +- "sra %["#TEMP3"], %["#TEMP3"], 16 \n\t" \ +- "subu %["#TEMP2"], %["#TEMP0"], %[temp16] \n\t" \ +- "addu %["#TEMP0"], %["#TEMP0"], %[temp16] \n\t" \ +- "mul %[temp17], %[temp19], %[c2217] \n\t" \ +- "mul %[temp18], %["#TEMP3"], %[c5352] \n\t" \ +- "mul %["#TEMP1"], %[temp19], %[c5352] \n\t" \ +- "mul %[temp16], %["#TEMP3"], %[c2217] \n\t" \ +- "sll %["#TEMP2"], %["#TEMP2"], 3 \n\t" \ +- "sll %["#TEMP0"], %["#TEMP0"], 3 \n\t" \ +- "subu %["#TEMP3"], %[temp17], %[temp18] \n\t" \ +- "addu %["#TEMP1"], %[temp16], %["#TEMP1"] \n\t" \ +- "addiu %["#TEMP3"], %["#TEMP3"], 937 \n\t" \ +- "addiu %["#TEMP1"], %["#TEMP1"], 1812 \n\t" \ +- "sra %["#TEMP3"], %["#TEMP3"], 9 \n\t" \ +- "sra %["#TEMP1"], %["#TEMP1"], 9 \n\t" ++ "lw %[" #TEMP0 "], 0(%[args]) \n\t" \ ++ "lw %[" #TEMP1 "], 4(%[args]) \n\t" \ ++ "lw %[" #TEMP2 "], "XSTR(BPS)"*" #A "(%[" #TEMP0 "]) \n\t" \ ++ "lw %[" #TEMP3 "], "XSTR(BPS)"*" #A "(%[" #TEMP1 "]) \n\t" \ ++ "preceu.ph.qbl %[" #TEMP0 "], %[" #TEMP2 "] \n\t" \ ++ "preceu.ph.qbl %[" #TEMP1 "], %[" #TEMP3 "] \n\t" \ ++ "preceu.ph.qbr %[" #TEMP2 "], %[" #TEMP2 "] \n\t" \ ++ "preceu.ph.qbr %[" #TEMP3 "], %[" #TEMP3 "] \n\t" \ ++ "subq.ph %[" #TEMP0 "], %[" #TEMP0 "], %[" #TEMP1 "] \n\t" \ ++ "subq.ph %[" #TEMP2 "], %[" #TEMP2 "], %[" #TEMP3 "] \n\t" \ ++ "rotr %[" #TEMP0 "], %[" #TEMP0 "], 16 \n\t" \ ++ "addq.ph %[" #TEMP1 "], %[" #TEMP2 "], %[" #TEMP0 "] \n\t" \ ++ "subq.ph %[" #TEMP3 "], %[" #TEMP2 "], %[" #TEMP0 "] \n\t" \ ++ "seh %[" #TEMP0 "], %[" #TEMP1 "] \n\t" \ ++ "sra %[temp16], %[" #TEMP1 "], 16 \n\t" \ ++ "seh %[temp19], %[" #TEMP3 "] \n\t" \ ++ "sra %[" #TEMP3 "], %[" #TEMP3 "], 16 \n\t" \ ++ "subu %[" #TEMP2 "], %[" #TEMP0 "], %[temp16] \n\t" \ ++ "addu %[" #TEMP0 "], %[" #TEMP0 "], %[temp16] \n\t" \ ++ "mul %[temp17], %[temp19], %[c2217] \n\t" \ ++ "mul %[temp18], %[" #TEMP3 "], %[c5352] \n\t" \ ++ "mul %[" #TEMP1 "], %[temp19], %[c5352] \n\t" \ ++ "mul %[temp16], %[" #TEMP3 "], %[c2217] \n\t" \ ++ "sll %[" #TEMP2 "], %[" #TEMP2 "], 3 \n\t" \ ++ "sll %[" #TEMP0 "], %[" #TEMP0 "], 3 \n\t" \ ++ "subu %[" #TEMP3 "], %[temp17], %[temp18] \n\t" \ ++ "addu %[" #TEMP1 "], %[temp16], %[" #TEMP1 "] \n\t" \ ++ "addiu %[" #TEMP3 "], %[" #TEMP3 "], 937 \n\t" \ ++ "addiu %[" #TEMP1 "], %[" #TEMP1 "], 1812 \n\t" \ ++ "sra %[" #TEMP3 "], %[" #TEMP3 "], 9 \n\t" \ ++ "sra %[" #TEMP1 "], %[" #TEMP1 "], 9 \n\t" + + // macro for one vertical pass in FTransform + // temp0..temp15 holds tmp[0]..tmp[15] + // A..D - offsets in bytes to store to out buffer + // TEMP0, TEMP4, TEMP8 and TEMP12 - registers for corresponding tmp elements + #define VERTICAL_PASS(A, B, C, D, TEMP0, TEMP4, TEMP8, TEMP12) \ +- "addu %[temp16], %["#TEMP0"], %["#TEMP12"] \n\t" \ +- "subu %[temp19], %["#TEMP0"], %["#TEMP12"] \n\t" \ +- "addu %[temp17], %["#TEMP4"], %["#TEMP8"] \n\t" \ +- "subu %[temp18], %["#TEMP4"], %["#TEMP8"] \n\t" \ +- "mul %["#TEMP8"], %[temp19], %[c2217] \n\t" \ +- "mul %["#TEMP12"], %[temp18], %[c2217] \n\t" \ +- "mul %["#TEMP4"], %[temp19], %[c5352] \n\t" \ +- "mul %[temp18], %[temp18], %[c5352] \n\t" \ +- "addiu %[temp16], %[temp16], 7 \n\t" \ +- "addu %["#TEMP0"], %[temp16], %[temp17] \n\t" \ +- "sra %["#TEMP0"], %["#TEMP0"], 4 \n\t" \ +- "addu %["#TEMP12"], %["#TEMP12"], %["#TEMP4"] \n\t" \ +- "subu %["#TEMP4"], %[temp16], %[temp17] \n\t" \ +- "sra %["#TEMP4"], %["#TEMP4"], 4 \n\t" \ +- "addiu %["#TEMP8"], %["#TEMP8"], 30000 \n\t" \ +- "addiu %["#TEMP12"], %["#TEMP12"], 12000 \n\t" \ +- "addiu %["#TEMP8"], %["#TEMP8"], 21000 \n\t" \ +- "subu %["#TEMP8"], %["#TEMP8"], %[temp18] \n\t" \ +- "sra %["#TEMP12"], %["#TEMP12"], 16 \n\t" \ +- "sra %["#TEMP8"], %["#TEMP8"], 16 \n\t" \ +- "addiu %[temp16], %["#TEMP12"], 1 \n\t" \ +- "movn %["#TEMP12"], %[temp16], %[temp19] \n\t" \ +- "sh %["#TEMP0"], "#A"(%[temp20]) \n\t" \ +- "sh %["#TEMP4"], "#C"(%[temp20]) \n\t" \ +- "sh %["#TEMP8"], "#D"(%[temp20]) \n\t" \ +- "sh %["#TEMP12"], "#B"(%[temp20]) \n\t" ++ "addu %[temp16], %[" #TEMP0 "], %[" #TEMP12 "] \n\t" \ ++ "subu %[temp19], %[" #TEMP0 "], %[" #TEMP12 "] \n\t" \ ++ "addu %[temp17], %[" #TEMP4 "], %[" #TEMP8 "] \n\t" \ ++ "subu %[temp18], %[" #TEMP4 "], %[" #TEMP8 "] \n\t" \ ++ "mul %[" #TEMP8 "], %[temp19], %[c2217] \n\t" \ ++ "mul %[" #TEMP12 "], %[temp18], %[c2217] \n\t" \ ++ "mul %[" #TEMP4 "], %[temp19], %[c5352] \n\t" \ ++ "mul %[temp18], %[temp18], %[c5352] \n\t" \ ++ "addiu %[temp16], %[temp16], 7 \n\t" \ ++ "addu %[" #TEMP0 "], %[temp16], %[temp17] \n\t" \ ++ "sra %[" #TEMP0 "], %[" #TEMP0 "], 4 \n\t" \ ++ "addu %[" #TEMP12 "], %[" #TEMP12 "], %[" #TEMP4 "] \n\t" \ ++ "subu %[" #TEMP4 "], %[temp16], %[temp17] \n\t" \ ++ "sra %[" #TEMP4 "], %[" #TEMP4 "], 4 \n\t" \ ++ "addiu %[" #TEMP8 "], %[" #TEMP8 "], 30000 \n\t" \ ++ "addiu %[" #TEMP12 "], %[" #TEMP12 "], 12000 \n\t" \ ++ "addiu %[" #TEMP8 "], %[" #TEMP8 "], 21000 \n\t" \ ++ "subu %[" #TEMP8 "], %[" #TEMP8 "], %[temp18] \n\t" \ ++ "sra %[" #TEMP12 "], %[" #TEMP12 "], 16 \n\t" \ ++ "sra %[" #TEMP8 "], %[" #TEMP8 "], 16 \n\t" \ ++ "addiu %[temp16], %[" #TEMP12 "], 1 \n\t" \ ++ "movn %[" #TEMP12 "], %[temp16], %[temp19] \n\t" \ ++ "sh %[" #TEMP0 "], " #A "(%[temp20]) \n\t" \ ++ "sh %[" #TEMP4 "], " #C "(%[temp20]) \n\t" \ ++ "sh %[" #TEMP8 "], " #D "(%[temp20]) \n\t" \ ++ "sh %[" #TEMP12 "], " #B "(%[temp20]) \n\t" + + static void FTransform(const uint8_t* src, const uint8_t* ref, int16_t* out) { + const int c2217 = 2217; +@@ -329,11 +329,11 @@ + // Intra predictions + + #define FILL_PART(J, SIZE) \ +- "usw %[value], 0+"#J"*"XSTR(BPS)"(%[dst]) \n\t" \ +- "usw %[value], 4+"#J"*"XSTR(BPS)"(%[dst]) \n\t" \ +- ".if "#SIZE" == 16 \n\t" \ +- "usw %[value], 8+"#J"*"XSTR(BPS)"(%[dst]) \n\t" \ +- "usw %[value], 12+"#J"*"XSTR(BPS)"(%[dst]) \n\t" \ ++ "usw %[value], 0+" #J "*"XSTR(BPS)"(%[dst]) \n\t" \ ++ "usw %[value], 4+" #J "*"XSTR(BPS)"(%[dst]) \n\t" \ ++ ".if " #SIZE " == 16 \n\t" \ ++ "usw %[value], 8+" #J "*"XSTR(BPS)"(%[dst]) \n\t" \ ++ "usw %[value], 12+" #J "*"XSTR(BPS)"(%[dst]) \n\t" \ + ".endif \n\t" + + #define FILL_8_OR_16(DST, VALUE, SIZE) do { \ +@@ -348,7 +348,7 @@ + FILL_PART( 5, SIZE) \ + FILL_PART( 6, SIZE) \ + FILL_PART( 7, SIZE) \ +- ".if "#SIZE" == 16 \n\t" \ ++ ".if " #SIZE " == 16 \n\t" \ + FILL_PART( 8, 16) \ + FILL_PART( 9, 16) \ + FILL_PART(10, 16) \ +@@ -425,7 +425,7 @@ + CLIPPING() \ + "usw %[temp0], 0(%[dst]) \n\t" \ + "usw %[temp1], 4(%[dst]) \n\t" \ +- ".if "#SIZE" == 16 \n\t" \ ++ ".if " #SIZE " == 16 \n\t" \ + "ulw %[temp0], 8(%[top]) \n\t" \ + "ulw %[temp1], 12(%[top]) \n\t" \ + CLIPPING() \ +@@ -1060,8 +1060,8 @@ + #if !defined(WORK_AROUND_GCC) + + #define GET_SSE_INNER(A) \ +- "lw %[temp0], "#A"(%[a]) \n\t" \ +- "lw %[temp1], "#A"(%[b]) \n\t" \ ++ "lw %[temp0], " #A "(%[a]) \n\t" \ ++ "lw %[temp1], " #A "(%[b]) \n\t" \ + "preceu.ph.qbr %[temp2], %[temp0] \n\t" \ + "preceu.ph.qbl %[temp0], %[temp0] \n\t" \ + "preceu.ph.qbr %[temp3], %[temp1] \n\t" \ +@@ -1185,28 +1185,28 @@ + // N - offset in bytes (n * 2) + // N1 - offset in bytes ((n + 1) * 2) + #define QUANTIZE_ONE(J, K, N, N1) \ +- "ulw %[temp1], "#J"(%[ppin]) \n\t" \ +- "ulw %[temp2], "#J"(%[ppsharpen]) \n\t" \ +- "lhu %[temp3], "#K"(%[ppzthresh]) \n\t" \ +- "lhu %[temp6], "#K"+4(%[ppzthresh]) \n\t" \ ++ "ulw %[temp1], " #J "(%[ppin]) \n\t" \ ++ "ulw %[temp2], " #J "(%[ppsharpen]) \n\t" \ ++ "lhu %[temp3], " #K "(%[ppzthresh]) \n\t" \ ++ "lhu %[temp6], " #K "+4(%[ppzthresh]) \n\t" \ + "absq_s.ph %[temp4], %[temp1] \n\t" \ + "ins %[temp3], %[temp6], 16, 16 \n\t" \ + "addu.ph %[coeff], %[temp4], %[temp2] \n\t" \ + "shra.ph %[sign], %[temp1], 15 \n\t" \ + "li %[level], 0x10001 \n\t" \ + "cmp.lt.ph %[temp3], %[coeff] \n\t" \ +- "lhu %[temp1], "#J"(%[ppiq]) \n\t" \ ++ "lhu %[temp1], " #J "(%[ppiq]) \n\t" \ + "pick.ph %[temp5], %[level], $0 \n\t" \ +- "lw %[temp2], "#K"(%[ppbias]) \n\t" \ ++ "lw %[temp2], " #K "(%[ppbias]) \n\t" \ + "beqz %[temp5], 0f \n\t" \ +- "lhu %[temp3], "#J"(%[ppq]) \n\t" \ ++ "lhu %[temp3], " #J "(%[ppq]) \n\t" \ + "beq %[temp5], %[level], 1f \n\t" \ + "andi %[temp5], %[temp5], 0x1 \n\t" \ + "andi %[temp4], %[coeff], 0xffff \n\t" \ + "beqz %[temp5], 2f \n\t" \ + "mul %[level], %[temp4], %[temp1] \n\t" \ +- "sh $0, "#J"+2(%[ppin]) \n\t" \ +- "sh $0, "#N1"(%[pout]) \n\t" \ ++ "sh $0, " #J "+2(%[ppin]) \n\t" \ ++ "sh $0, " #N1 "(%[pout]) \n\t" \ + "addu %[level], %[level], %[temp2] \n\t" \ + "sra %[level], %[level], 17 \n\t" \ + "slt %[temp4], %[max_level], %[level] \n\t" \ +@@ -1216,15 +1216,15 @@ + "subu %[level], %[level], %[temp6] \n\t" \ + "mul %[temp5], %[level], %[temp3] \n\t" \ + "or %[ret], %[ret], %[level] \n\t" \ +- "sh %[level], "#N"(%[pout]) \n\t" \ +- "sh %[temp5], "#J"(%[ppin]) \n\t" \ ++ "sh %[level], " #N "(%[pout]) \n\t" \ ++ "sh %[temp5], " #J "(%[ppin]) \n\t" \ + "j 3f \n\t" \ + "2: \n\t" \ +- "lhu %[temp1], "#J"+2(%[ppiq]) \n\t" \ ++ "lhu %[temp1], " #J "+2(%[ppiq]) \n\t" \ + "srl %[temp5], %[coeff], 16 \n\t" \ + "mul %[level], %[temp5], %[temp1] \n\t" \ +- "lw %[temp2], "#K"+4(%[ppbias]) \n\t" \ +- "lhu %[temp3], "#J"+2(%[ppq]) \n\t" \ ++ "lw %[temp2], " #K "+4(%[ppbias]) \n\t" \ ++ "lhu %[temp3], " #J "+2(%[ppq]) \n\t" \ + "addu %[level], %[level], %[temp2] \n\t" \ + "sra %[level], %[level], 17 \n\t" \ + "srl %[temp6], %[sign], 16 \n\t" \ +@@ -1233,20 +1233,20 @@ + "xor %[level], %[level], %[temp6] \n\t" \ + "subu %[level], %[level], %[temp6] \n\t" \ + "mul %[temp5], %[level], %[temp3] \n\t" \ +- "sh $0, "#J"(%[ppin]) \n\t" \ +- "sh $0, "#N"(%[pout]) \n\t" \ ++ "sh $0, " #J "(%[ppin]) \n\t" \ ++ "sh $0, " #N "(%[pout]) \n\t" \ + "or %[ret], %[ret], %[level] \n\t" \ +- "sh %[temp5], "#J"+2(%[ppin]) \n\t" \ +- "sh %[level], "#N1"(%[pout]) \n\t" \ ++ "sh %[temp5], " #J "+2(%[ppin]) \n\t" \ ++ "sh %[level], " #N1 "(%[pout]) \n\t" \ + "j 3f \n\t" \ + "1: \n\t" \ +- "lhu %[temp1], "#J"(%[ppiq]) \n\t" \ +- "lw %[temp2], "#K"(%[ppbias]) \n\t" \ +- "ulw %[temp3], "#J"(%[ppq]) \n\t" \ ++ "lhu %[temp1], " #J "(%[ppiq]) \n\t" \ ++ "lw %[temp2], " #K "(%[ppbias]) \n\t" \ ++ "ulw %[temp3], " #J "(%[ppq]) \n\t" \ + "andi %[temp5], %[coeff], 0xffff \n\t" \ + "srl %[temp0], %[coeff], 16 \n\t" \ +- "lhu %[temp6], "#J"+2(%[ppiq]) \n\t" \ +- "lw %[coeff], "#K"+4(%[ppbias]) \n\t" \ ++ "lhu %[temp6], " #J "+2(%[ppiq]) \n\t" \ ++ "lw %[coeff], " #K "+4(%[ppbias]) \n\t" \ + "mul %[level], %[temp5], %[temp1] \n\t" \ + "mul %[temp4], %[temp0], %[temp6] \n\t" \ + "addu %[level], %[level], %[temp2] \n\t" \ +@@ -1259,15 +1259,15 @@ + "subu.ph %[level], %[level], %[sign] \n\t" \ + "mul.ph %[temp3], %[level], %[temp3] \n\t" \ + "or %[ret], %[ret], %[level] \n\t" \ +- "sh %[level], "#N"(%[pout]) \n\t" \ ++ "sh %[level], " #N "(%[pout]) \n\t" \ + "srl %[level], %[level], 16 \n\t" \ +- "sh %[level], "#N1"(%[pout]) \n\t" \ +- "usw %[temp3], "#J"(%[ppin]) \n\t" \ ++ "sh %[level], " #N1 "(%[pout]) \n\t" \ ++ "usw %[temp3], " #J "(%[ppin]) \n\t" \ + "j 3f \n\t" \ + "0: \n\t" \ +- "sh $0, "#N"(%[pout]) \n\t" \ +- "sh $0, "#N1"(%[pout]) \n\t" \ +- "usw $0, "#J"(%[ppin]) \n\t" \ ++ "sh $0, " #N "(%[pout]) \n\t" \ ++ "sh $0, " #N1 "(%[pout]) \n\t" \ ++ "usw $0, " #J "(%[ppin]) \n\t" \ + "3: \n\t" + + static int QuantizeBlock(int16_t in[16], int16_t out[16], +@@ -1326,37 +1326,37 @@ + // A, B, C, D - offset in bytes to load from in buffer + // TEMP0, TEMP1 - registers for corresponding tmp elements + #define HORIZONTAL_PASS_WHT(A, B, C, D, TEMP0, TEMP1) \ +- "lh %["#TEMP0"], "#A"(%[in]) \n\t" \ +- "lh %["#TEMP1"], "#B"(%[in]) \n\t" \ +- "lh %[temp8], "#C"(%[in]) \n\t" \ +- "lh %[temp9], "#D"(%[in]) \n\t" \ +- "ins %["#TEMP1"], %["#TEMP0"], 16, 16 \n\t" \ ++ "lh %[" #TEMP0 "], " #A "(%[in]) \n\t" \ ++ "lh %[" #TEMP1 "], " #B "(%[in]) \n\t" \ ++ "lh %[temp8], " #C "(%[in]) \n\t" \ ++ "lh %[temp9], " #D "(%[in]) \n\t" \ ++ "ins %[" #TEMP1 "], %[" #TEMP0 "], 16, 16 \n\t" \ + "ins %[temp9], %[temp8], 16, 16 \n\t" \ +- "subq.ph %[temp8], %["#TEMP1"], %[temp9] \n\t" \ +- "addq.ph %[temp9], %["#TEMP1"], %[temp9] \n\t" \ +- "precrq.ph.w %["#TEMP0"], %[temp8], %[temp9] \n\t" \ ++ "subq.ph %[temp8], %[" #TEMP1 "], %[temp9] \n\t" \ ++ "addq.ph %[temp9], %[" #TEMP1 "], %[temp9] \n\t" \ ++ "precrq.ph.w %[" #TEMP0 "], %[temp8], %[temp9] \n\t" \ + "append %[temp8], %[temp9], 16 \n\t" \ +- "subq.ph %["#TEMP1"], %["#TEMP0"], %[temp8] \n\t" \ +- "addq.ph %["#TEMP0"], %["#TEMP0"], %[temp8] \n\t" \ +- "rotr %["#TEMP1"], %["#TEMP1"], 16 \n\t" ++ "subq.ph %[" #TEMP1 "], %[" #TEMP0 "], %[temp8] \n\t" \ ++ "addq.ph %[" #TEMP0 "], %[" #TEMP0 "], %[temp8] \n\t" \ ++ "rotr %[" #TEMP1 "], %[" #TEMP1 "], 16 \n\t" + + // macro for one vertical pass in FTransformWHT + // temp0..temp7 holds tmp[0]..tmp[15] + // A, B, C, D - offsets in bytes to store to out buffer + // TEMP0, TEMP2, TEMP4 and TEMP6 - registers for corresponding tmp elements + #define VERTICAL_PASS_WHT(A, B, C, D, TEMP0, TEMP2, TEMP4, TEMP6) \ +- "addq.ph %[temp8], %["#TEMP0"], %["#TEMP4"] \n\t" \ +- "addq.ph %[temp9], %["#TEMP2"], %["#TEMP6"] \n\t" \ +- "subq.ph %["#TEMP2"], %["#TEMP2"], %["#TEMP6"] \n\t" \ +- "subq.ph %["#TEMP6"], %["#TEMP0"], %["#TEMP4"] \n\t" \ +- "addqh.ph %["#TEMP0"], %[temp8], %[temp9] \n\t" \ +- "subqh.ph %["#TEMP4"], %["#TEMP6"], %["#TEMP2"] \n\t" \ +- "addqh.ph %["#TEMP2"], %["#TEMP2"], %["#TEMP6"] \n\t" \ +- "subqh.ph %["#TEMP6"], %[temp8], %[temp9] \n\t" \ +- "usw %["#TEMP0"], "#A"(%[out]) \n\t" \ +- "usw %["#TEMP2"], "#B"(%[out]) \n\t" \ +- "usw %["#TEMP4"], "#C"(%[out]) \n\t" \ +- "usw %["#TEMP6"], "#D"(%[out]) \n\t" ++ "addq.ph %[temp8], %[" #TEMP0 "], %[" #TEMP4 "] \n\t" \ ++ "addq.ph %[temp9], %[" #TEMP2 "], %[" #TEMP6 "] \n\t" \ ++ "subq.ph %[" #TEMP2 "], %[" #TEMP2 "], %[" #TEMP6 "] \n\t" \ ++ "subq.ph %[" #TEMP6 "], %[" #TEMP0 "], %[" #TEMP4 "] \n\t" \ ++ "addqh.ph %[" #TEMP0 "], %[temp8], %[temp9] \n\t" \ ++ "subqh.ph %[" #TEMP4 "], %[" #TEMP6 "], %[" #TEMP2 "] \n\t" \ ++ "addqh.ph %[" #TEMP2 "], %[" #TEMP2 "], %[" #TEMP6 "] \n\t" \ ++ "subqh.ph %[" #TEMP6 "], %[temp8], %[temp9] \n\t" \ ++ "usw %[" #TEMP0 "], " #A "(%[out]) \n\t" \ ++ "usw %[" #TEMP2 "], " #B "(%[out]) \n\t" \ ++ "usw %[" #TEMP4 "], " #C "(%[out]) \n\t" \ ++ "usw %[" #TEMP6 "], " #D "(%[out]) \n\t" + + static void FTransformWHT(const int16_t* in, int16_t* out) { + int temp0, temp1, temp2, temp3, temp4; +@@ -1385,10 +1385,10 @@ + // convert 8 coeffs at time + // A, B, C, D - offsets in bytes to load from out buffer + #define CONVERT_COEFFS_TO_BIN(A, B, C, D) \ +- "ulw %[temp0], "#A"(%[out]) \n\t" \ +- "ulw %[temp1], "#B"(%[out]) \n\t" \ +- "ulw %[temp2], "#C"(%[out]) \n\t" \ +- "ulw %[temp3], "#D"(%[out]) \n\t" \ ++ "ulw %[temp0], " #A "(%[out]) \n\t" \ ++ "ulw %[temp1], " #B "(%[out]) \n\t" \ ++ "ulw %[temp2], " #C "(%[out]) \n\t" \ ++ "ulw %[temp3], " #D "(%[out]) \n\t" \ + "absq_s.ph %[temp0], %[temp0] \n\t" \ + "absq_s.ph %[temp1], %[temp1] \n\t" \ + "absq_s.ph %[temp2], %[temp2] \n\t" \ +diff --git a/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c +index 66f807d..8134af5 100644 +--- a/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c ++++ b/Source/LibWebP/src/dsp/dsp.filters_mips_dsp_r2.c +@@ -48,7 +48,7 @@ + "srl %[temp0], %[length], 0x2 \n\t" \ + "beqz %[temp0], 4f \n\t" \ + " andi %[temp6], %[length], 0x3 \n\t" \ +- ".if "#INVERSE" \n\t" \ ++ ".if " #INVERSE " \n\t" \ + "lbu %[temp1], -1(%[src]) \n\t" \ + "1: \n\t" \ + "lbu %[temp2], 0(%[src]) \n\t" \ +@@ -84,7 +84,7 @@ + "lbu %[temp1], -1(%[src]) \n\t" \ + "lbu %[temp2], 0(%[src]) \n\t" \ + "addiu %[src], %[src], 1 \n\t" \ +- ".if "#INVERSE" \n\t" \ ++ ".if " #INVERSE " \n\t" \ + "addu %[temp3], %[temp1], %[temp2] \n\t" \ + "sb %[temp3], -1(%[src]) \n\t" \ + ".else \n\t" \ +@@ -131,7 +131,7 @@ + "ulw %[temp3], 4(%[src]) \n\t" \ + "ulw %[temp4], 4(%[pred]) \n\t" \ + "addiu %[src], %[src], 8 \n\t" \ +- ".if "#INVERSE" \n\t" \ ++ ".if " #INVERSE " \n\t" \ + "addu.qb %[temp5], %[temp1], %[temp2] \n\t" \ + "addu.qb %[temp6], %[temp3], %[temp4] \n\t" \ + ".else \n\t" \ +@@ -152,7 +152,7 @@ + "lbu %[temp2], 0(%[pred]) \n\t" \ + "addiu %[src], %[src], 1 \n\t" \ + "addiu %[pred], %[pred], 1 \n\t" \ +- ".if "#INVERSE" \n\t" \ ++ ".if " #INVERSE " \n\t" \ + "addu %[temp3], %[temp1], %[temp2] \n\t" \ + ".else \n\t" \ + "subu %[temp3], %[temp1], %[temp2] \n\t" \ +@@ -177,7 +177,7 @@ + __asm__ volatile ( \ + "lbu %[temp1], 0(%[src]) \n\t" \ + "lbu %[temp2], 0(%[pred]) \n\t" \ +- ".if "#INVERSE" \n\t" \ ++ ".if " #INVERSE " \n\t" \ + "addu %[temp3], %[temp1], %[temp2] \n\t" \ + ".else \n\t" \ + "subu %[temp3], %[temp1], %[temp2] \n\t" \ +diff --git a/Source/LibWebP/src/dsp/dsp.lossless_mips32.c b/Source/LibWebP/src/dsp/dsp.lossless_mips32.c +index 8ae5958..cdf0e26 100644 +--- a/Source/LibWebP/src/dsp/dsp.lossless_mips32.c ++++ b/Source/LibWebP/src/dsp/dsp.lossless_mips32.c + +@@ -278,28 +278,28 @@ + // literal_ and successive histograms could be unaligned + // so we must use ulw and usw + #define ADD_TO_OUT(A, B, C, D, E, P0, P1, P2) \ +- "ulw %[temp0], "#A"(%["#P0"]) \n\t" \ +- "ulw %[temp1], "#B"(%["#P0"]) \n\t" \ +- "ulw %[temp2], "#C"(%["#P0"]) \n\t" \ +- "ulw %[temp3], "#D"(%["#P0"]) \n\t" \ +- "ulw %[temp4], "#A"(%["#P1"]) \n\t" \ +- "ulw %[temp5], "#B"(%["#P1"]) \n\t" \ +- "ulw %[temp6], "#C"(%["#P1"]) \n\t" \ +- "ulw %[temp7], "#D"(%["#P1"]) \n\t" \ ++ "ulw %[temp0], " #A "(%[" #P0 "]) \n\t" \ ++ "ulw %[temp1], " #B "(%[" #P0 "]) \n\t" \ ++ "ulw %[temp2], " #C "(%[" #P0 "]) \n\t" \ ++ "ulw %[temp3], " #D "(%[" #P0 "]) \n\t" \ ++ "ulw %[temp4], " #A "(%[" #P1 "]) \n\t" \ ++ "ulw %[temp5], " #B "(%[" #P1 "]) \n\t" \ ++ "ulw %[temp6], " #C "(%[" #P1 "]) \n\t" \ ++ "ulw %[temp7], " #D "(%[" #P1 "]) \n\t" \ + "addu %[temp4], %[temp4], %[temp0] \n\t" \ + "addu %[temp5], %[temp5], %[temp1] \n\t" \ + "addu %[temp6], %[temp6], %[temp2] \n\t" \ + "addu %[temp7], %[temp7], %[temp3] \n\t" \ +- "addiu %["#P0"], %["#P0"], 16 \n\t" \ +- ".if "#E" == 1 \n\t" \ +- "addiu %["#P1"], %["#P1"], 16 \n\t" \ ++ "addiu %[" #P0 "], %[" #P0 "], 16 \n\t" \ ++ ".if " #E " == 1 \n\t" \ ++ "addiu %[" #P1 "], %[" #P1 "], 16 \n\t" \ + ".endif \n\t" \ +- "usw %[temp4], "#A"(%["#P2"]) \n\t" \ +- "usw %[temp5], "#B"(%["#P2"]) \n\t" \ +- "usw %[temp6], "#C"(%["#P2"]) \n\t" \ +- "usw %[temp7], "#D"(%["#P2"]) \n\t" \ +- "addiu %["#P2"], %["#P2"], 16 \n\t" \ +- "bne %["#P0"], %[LoopEnd], 1b \n\t" \ ++ "usw %[temp4], " #A "(%[" #P2 "]) \n\t" \ ++ "usw %[temp5], " #B "(%[" #P2 "]) \n\t" \ ++ "usw %[temp6], " #C "(%[" #P2 "]) \n\t" \ ++ "usw %[temp7], " #D "(%[" #P2 "]) \n\t" \ ++ "addiu %[" #P2 "], %[" #P2 "], 16 \n\t" \ ++ "bne %[" #P0 "], %[LoopEnd], 1b \n\t" \ + ".set pop \n\t" \ + + #define ASM_END_COMMON_0 \ +diff --git a/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c +index ad55f2c..90aed7f 100644 +--- a/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c ++++ b/Source/LibWebP/src/dsp/dsp.lossless_mips_dsp_r2.c +@@ -29,14 +29,14 @@ + for (x = 0; x < (width >> 2); ++x) { \ + int tmp1, tmp2, tmp3, tmp4; \ + __asm__ volatile ( \ +- ".ifc "#TYPE", uint8_t \n\t" \ ++ ".ifc " #TYPE ", uint8_t \n\t" \ + "lbu %[tmp1], 0(%[src]) \n\t" \ + "lbu %[tmp2], 1(%[src]) \n\t" \ + "lbu %[tmp3], 2(%[src]) \n\t" \ + "lbu %[tmp4], 3(%[src]) \n\t" \ + "addiu %[src], %[src], 4 \n\t" \ + ".endif \n\t" \ +- ".ifc "#TYPE", uint32_t \n\t" \ ++ ".ifc " #TYPE ", uint32_t \n\t" \ + "lw %[tmp1], 0(%[src]) \n\t" \ + "lw %[tmp2], 4(%[src]) \n\t" \ + "lw %[tmp3], 8(%[src]) \n\t" \ +@@ -55,7 +55,7 @@ + "lwx %[tmp2], %[tmp2](%[color_map]) \n\t" \ + "lwx %[tmp3], %[tmp3](%[color_map]) \n\t" \ + "lwx %[tmp4], %[tmp4](%[color_map]) \n\t" \ +- ".ifc "#TYPE", uint8_t \n\t" \ ++ ".ifc " #TYPE ", uint8_t \n\t" \ + "ext %[tmp1], %[tmp1], 8, 8 \n\t" \ + "ext %[tmp2], %[tmp2], 8, 8 \n\t" \ + "ext %[tmp3], %[tmp3], 8, 8 \n\t" \ +@@ -66,7 +66,7 @@ + "sb %[tmp4], 3(%[dst]) \n\t" \ + "addiu %[dst], %[dst], 4 \n\t" \ + ".endif \n\t" \ +- ".ifc "#TYPE", uint32_t \n\t" \ ++ ".ifc " #TYPE ", uint32_t \n\t" \ + "sw %[tmp1], 0(%[dst]) \n\t" \ + "sw %[tmp2], 4(%[dst]) \n\t" \ + "sw %[tmp3], 8(%[dst]) \n\t" \ +diff --git a/Source/LibWebP/src/dsp/mips_macro.h b/Source/LibWebP/src/dsp/mips_macro.h +index 4cfb23c..e09d2c4 100644 +--- a/Source/LibWebP/src/dsp/mips_macro.h ++++ b/Source/LibWebP/src/dsp/mips_macro.h +@@ -25,25 +25,25 @@ + // I - input (macro doesn't change it) + #define ADD_SUB_HALVES(O0, O1, \ + I0, I1) \ +- "addq.ph %["#O0"], %["#I0"], %["#I1"] \n\t" \ +- "subq.ph %["#O1"], %["#I0"], %["#I1"] \n\t" ++ "addq.ph %[" #O0 "], %[" #I0 "], %[" #I1 "] \n\t" \ ++ "subq.ph %[" #O1 "], %[" #I0 "], %[" #I1 "] \n\t" + + // O - output + // I - input (macro doesn't change it) + // I[0/1] - offset in bytes + #define LOAD_IN_X2(O0, O1, \ + I0, I1) \ +- "lh %["#O0"], "#I0"(%[in]) \n\t" \ +- "lh %["#O1"], "#I1"(%[in]) \n\t" ++ "lh %[" #O0 "], " #I0 "(%[in]) \n\t" \ ++ "lh %[" #O1 "], " #I1 "(%[in]) \n\t" + + // I0 - location + // I1..I9 - offsets in bytes + #define LOAD_WITH_OFFSET_X4(O0, O1, O2, O3, \ + I0, I1, I2, I3, I4, I5, I6, I7, I8, I9) \ +- "ulw %["#O0"], "#I1"+"XSTR(I9)"*"#I5"(%["#I0"]) \n\t" \ +- "ulw %["#O1"], "#I2"+"XSTR(I9)"*"#I6"(%["#I0"]) \n\t" \ +- "ulw %["#O2"], "#I3"+"XSTR(I9)"*"#I7"(%["#I0"]) \n\t" \ +- "ulw %["#O3"], "#I4"+"XSTR(I9)"*"#I8"(%["#I0"]) \n\t" ++ "ulw %[" #O0 "], " #I1 "+"XSTR(I9)"*" #I5 "(%[" #I0 "]) \n\t" \ ++ "ulw %[" #O1 "], " #I2 "+"XSTR(I9)"*" #I6 "(%[" #I0 "]) \n\t" \ ++ "ulw %[" #O2 "], " #I3 "+"XSTR(I9)"*" #I7 "(%[" #I0 "]) \n\t" \ ++ "ulw %[" #O3 "], " #I4 "+"XSTR(I9)"*" #I8 "(%[" #I0 "]) \n\t" + + // O - output + // IO - input/output +@@ -51,42 +51,42 @@ + #define MUL_SHIFT_SUM(O0, O1, O2, O3, O4, O5, O6, O7, \ + IO0, IO1, IO2, IO3, \ + I0, I1, I2, I3, I4, I5, I6, I7) \ +- "mul %["#O0"], %["#I0"], %[kC2] \n\t" \ +- "mul %["#O1"], %["#I0"], %[kC1] \n\t" \ +- "mul %["#O2"], %["#I1"], %[kC2] \n\t" \ +- "mul %["#O3"], %["#I1"], %[kC1] \n\t" \ +- "mul %["#O4"], %["#I2"], %[kC2] \n\t" \ +- "mul %["#O5"], %["#I2"], %[kC1] \n\t" \ +- "mul %["#O6"], %["#I3"], %[kC2] \n\t" \ +- "mul %["#O7"], %["#I3"], %[kC1] \n\t" \ +- "sra %["#O0"], %["#O0"], 16 \n\t" \ +- "sra %["#O1"], %["#O1"], 16 \n\t" \ +- "sra %["#O2"], %["#O2"], 16 \n\t" \ +- "sra %["#O3"], %["#O3"], 16 \n\t" \ +- "sra %["#O4"], %["#O4"], 16 \n\t" \ +- "sra %["#O5"], %["#O5"], 16 \n\t" \ +- "sra %["#O6"], %["#O6"], 16 \n\t" \ +- "sra %["#O7"], %["#O7"], 16 \n\t" \ +- "addu %["#IO0"], %["#IO0"], %["#I4"] \n\t" \ +- "addu %["#IO1"], %["#IO1"], %["#I5"] \n\t" \ +- "subu %["#IO2"], %["#IO2"], %["#I6"] \n\t" \ +- "subu %["#IO3"], %["#IO3"], %["#I7"] \n\t" ++ "mul %[" #O0 "], %[" #I0 "], %[kC2] \n\t" \ ++ "mul %[" #O1 "], %[" #I0 "], %[kC1] \n\t" \ ++ "mul %[" #O2 "], %[" #I1 "], %[kC2] \n\t" \ ++ "mul %[" #O3 "], %[" #I1 "], %[kC1] \n\t" \ ++ "mul %[" #O4 "], %[" #I2 "], %[kC2] \n\t" \ ++ "mul %[" #O5 "], %[" #I2 "], %[kC1] \n\t" \ ++ "mul %[" #O6 "], %[" #I3 "], %[kC2] \n\t" \ ++ "mul %[" #O7 "], %[" #I3 "], %[kC1] \n\t" \ ++ "sra %[" #O0 "], %[" #O0 "], 16 \n\t" \ ++ "sra %[" #O1 "], %[" #O1 "], 16 \n\t" \ ++ "sra %[" #O2 "], %[" #O2 "], 16 \n\t" \ ++ "sra %[" #O3 "], %[" #O3 "], 16 \n\t" \ ++ "sra %[" #O4 "], %[" #O4 "], 16 \n\t" \ ++ "sra %[" #O5 "], %[" #O5 "], 16 \n\t" \ ++ "sra %[" #O6 "], %[" #O6 "], 16 \n\t" \ ++ "sra %[" #O7 "], %[" #O7 "], 16 \n\t" \ ++ "addu %[" #IO0 "], %[" #IO0 "], %[" #I4 "] \n\t" \ ++ "addu %[" #IO1 "], %[" #IO1 "], %[" #I5 "] \n\t" \ ++ "subu %[" #IO2 "], %[" #IO2 "], %[" #I6 "] \n\t" \ ++ "subu %[" #IO3 "], %[" #IO3 "], %[" #I7 "] \n\t" + + // O - output + // I - input (macro doesn't change it) + #define INSERT_HALF_X2(O0, O1, \ + I0, I1) \ +- "ins %["#O0"], %["#I0"], 16, 16 \n\t" \ +- "ins %["#O1"], %["#I1"], 16, 16 \n\t" ++ "ins %[" #O0 "], %[" #I0 "], 16, 16 \n\t" \ ++ "ins %[" #O1 "], %[" #I1 "], 16, 16 \n\t" + + // O - output + // I - input (macro doesn't change it) + #define SRA_16(O0, O1, O2, O3, \ + I0, I1, I2, I3) \ +- "sra %["#O0"], %["#I0"], 16 \n\t" \ +- "sra %["#O1"], %["#I1"], 16 \n\t" \ +- "sra %["#O2"], %["#I2"], 16 \n\t" \ +- "sra %["#O3"], %["#I3"], 16 \n\t" ++ "sra %[" #O0 "], %[" #I0 "], 16 \n\t" \ ++ "sra %[" #O1 "], %[" #I1 "], 16 \n\t" \ ++ "sra %[" #O2 "], %[" #I2 "], 16 \n\t" \ ++ "sra %[" #O3 "], %[" #I3 "], 16 \n\t" + + // temp0[31..16 | 15..0] = temp8[31..16 | 15..0] + temp12[31..16 | 15..0] + // temp1[31..16 | 15..0] = temp8[31..16 | 15..0] - temp12[31..16 | 15..0] +@@ -96,22 +96,22 @@ + // I - input (macro doesn't change it) + #define SHIFT_R_SUM_X2(O0, O1, O2, O3, O4, O5, O6, O7, \ + I0, I1, I2, I3, I4, I5, I6, I7) \ +- "addq.ph %["#O0"], %["#I0"], %["#I4"] \n\t" \ +- "subq.ph %["#O1"], %["#I0"], %["#I4"] \n\t" \ +- "addq.ph %["#O2"], %["#I1"], %["#I5"] \n\t" \ +- "subq.ph %["#O3"], %["#I1"], %["#I5"] \n\t" \ +- "addq.ph %["#O4"], %["#I2"], %["#I6"] \n\t" \ +- "subq.ph %["#O5"], %["#I2"], %["#I6"] \n\t" \ +- "addq.ph %["#O6"], %["#I3"], %["#I7"] \n\t" \ +- "subq.ph %["#O7"], %["#I3"], %["#I7"] \n\t" \ +- "shra.ph %["#O0"], %["#O0"], 3 \n\t" \ +- "shra.ph %["#O1"], %["#O1"], 3 \n\t" \ +- "shra.ph %["#O2"], %["#O2"], 3 \n\t" \ +- "shra.ph %["#O3"], %["#O3"], 3 \n\t" \ +- "shra.ph %["#O4"], %["#O4"], 3 \n\t" \ +- "shra.ph %["#O5"], %["#O5"], 3 \n\t" \ +- "shra.ph %["#O6"], %["#O6"], 3 \n\t" \ +- "shra.ph %["#O7"], %["#O7"], 3 \n\t" ++ "addq.ph %[" #O0 "], %[" #I0 "], %[" #I4 "] \n\t" \ ++ "subq.ph %[" #O1 "], %[" #I0 "], %[" #I4 "] \n\t" \ ++ "addq.ph %[" #O2 "], %[" #I1 "], %[" #I5 "] \n\t" \ ++ "subq.ph %[" #O3 "], %[" #I1 "], %[" #I5 "] \n\t" \ ++ "addq.ph %[" #O4 "], %[" #I2 "], %[" #I6 "] \n\t" \ ++ "subq.ph %[" #O5 "], %[" #I2 "], %[" #I6 "] \n\t" \ ++ "addq.ph %[" #O6 "], %[" #I3 "], %[" #I7 "] \n\t" \ ++ "subq.ph %[" #O7 "], %[" #I3 "], %[" #I7 "] \n\t" \ ++ "shra.ph %[" #O0 "], %[" #O0 "], 3 \n\t" \ ++ "shra.ph %[" #O1 "], %[" #O1 "], 3 \n\t" \ ++ "shra.ph %[" #O2 "], %[" #O2 "], 3 \n\t" \ ++ "shra.ph %[" #O3 "], %[" #O3 "], 3 \n\t" \ ++ "shra.ph %[" #O4 "], %[" #O4 "], 3 \n\t" \ ++ "shra.ph %[" #O5 "], %[" #O5 "], 3 \n\t" \ ++ "shra.ph %[" #O6 "], %[" #O6 "], 3 \n\t" \ ++ "shra.ph %[" #O7 "], %[" #O7 "], 3 \n\t" + + // precrq.ph.w temp0, temp8, temp2 + // temp0 = temp8[31..16] | temp2[31..16] +@@ -123,14 +123,14 @@ + #define PACK_2_HALVES_TO_WORD(O0, O1, O2, O3, \ + IO0, IO1, IO2, IO3, \ + I0, I1, I2, I3) \ +- "precrq.ph.w %["#O0"], %["#I0"], %["#IO0"] \n\t" \ +- "precrq.ph.w %["#O1"], %["#I1"], %["#IO1"] \n\t" \ +- "ins %["#IO0"], %["#I0"], 16, 16 \n\t" \ +- "ins %["#IO1"], %["#I1"], 16, 16 \n\t" \ +- "precrq.ph.w %["#O2"], %["#I2"], %["#IO2"] \n\t" \ +- "precrq.ph.w %["#O3"], %["#I3"], %["#IO3"] \n\t" \ +- "ins %["#IO2"], %["#I2"], 16, 16 \n\t" \ +- "ins %["#IO3"], %["#I3"], 16, 16 \n\t" ++ "precrq.ph.w %[" #O0 "], %[" #I0 "], %[" #IO0 "] \n\t" \ ++ "precrq.ph.w %[" #O1 "], %[" #I1 "], %[" #IO1 "] \n\t" \ ++ "ins %[" #IO0 "], %[" #I0 "], 16, 16 \n\t" \ ++ "ins %[" #IO1 "], %[" #I1 "], 16, 16 \n\t" \ ++ "precrq.ph.w %[" #O2 "], %[" #I2 "], %[" #IO2 "] \n\t" \ ++ "precrq.ph.w %[" #O3 "], %[" #I3 "], %[" #IO3 "] \n\t" \ ++ "ins %[" #IO2 "], %[" #I2 "], 16, 16 \n\t" \ ++ "ins %[" #IO3 "], %[" #I3 "], 16, 16 \n\t" + + // preceu.ph.qbr temp0, temp8 + // temp0 = 0 | 0 | temp8[23..16] | temp8[7..0] +@@ -140,14 +140,14 @@ + // I - input (macro doesn't change it) + #define CONVERT_2_BYTES_TO_HALF(O0, O1, O2, O3, O4, O5, O6, O7, \ + I0, I1, I2, I3) \ +- "preceu.ph.qbr %["#O0"], %["#I0"] \n\t" \ +- "preceu.ph.qbl %["#O1"], %["#I0"] \n\t" \ +- "preceu.ph.qbr %["#O2"], %["#I1"] \n\t" \ +- "preceu.ph.qbl %["#O3"], %["#I1"] \n\t" \ +- "preceu.ph.qbr %["#O4"], %["#I2"] \n\t" \ +- "preceu.ph.qbl %["#O5"], %["#I2"] \n\t" \ +- "preceu.ph.qbr %["#O6"], %["#I3"] \n\t" \ +- "preceu.ph.qbl %["#O7"], %["#I3"] \n\t" ++ "preceu.ph.qbr %[" #O0 "], %[" #I0 "] \n\t" \ ++ "preceu.ph.qbl %[" #O1 "], %[" #I0 "] \n\t" \ ++ "preceu.ph.qbr %[" #O2 "], %[" #I1 "] \n\t" \ ++ "preceu.ph.qbl %[" #O3 "], %[" #I1 "] \n\t" \ ++ "preceu.ph.qbr %[" #O4 "], %[" #I2 "] \n\t" \ ++ "preceu.ph.qbl %[" #O5 "], %[" #I2 "] \n\t" \ ++ "preceu.ph.qbr %[" #O6 "], %[" #I3 "] \n\t" \ ++ "preceu.ph.qbl %[" #O7 "], %[" #I3 "] \n\t" + + // temp0[31..16 | 15..0] = temp0[31..16 | 15..0] + temp8[31..16 | 15..0] + // temp0[31..16 | 15..0] = temp0[31..16 <<(s) 7 | 15..0 <<(s) 7] +@@ -160,30 +160,30 @@ + #define STORE_SAT_SUM_X2(IO0, IO1, IO2, IO3, IO4, IO5, IO6, IO7, \ + I0, I1, I2, I3, I4, I5, I6, I7, \ + I8, I9, I10, I11, I12, I13) \ +- "addq.ph %["#IO0"], %["#IO0"], %["#I0"] \n\t" \ +- "addq.ph %["#IO1"], %["#IO1"], %["#I1"] \n\t" \ +- "addq.ph %["#IO2"], %["#IO2"], %["#I2"] \n\t" \ +- "addq.ph %["#IO3"], %["#IO3"], %["#I3"] \n\t" \ +- "addq.ph %["#IO4"], %["#IO4"], %["#I4"] \n\t" \ +- "addq.ph %["#IO5"], %["#IO5"], %["#I5"] \n\t" \ +- "addq.ph %["#IO6"], %["#IO6"], %["#I6"] \n\t" \ +- "addq.ph %["#IO7"], %["#IO7"], %["#I7"] \n\t" \ +- "shll_s.ph %["#IO0"], %["#IO0"], 7 \n\t" \ +- "shll_s.ph %["#IO1"], %["#IO1"], 7 \n\t" \ +- "shll_s.ph %["#IO2"], %["#IO2"], 7 \n\t" \ +- "shll_s.ph %["#IO3"], %["#IO3"], 7 \n\t" \ +- "shll_s.ph %["#IO4"], %["#IO4"], 7 \n\t" \ +- "shll_s.ph %["#IO5"], %["#IO5"], 7 \n\t" \ +- "shll_s.ph %["#IO6"], %["#IO6"], 7 \n\t" \ +- "shll_s.ph %["#IO7"], %["#IO7"], 7 \n\t" \ +- "precrqu_s.qb.ph %["#IO0"], %["#IO1"], %["#IO0"] \n\t" \ +- "precrqu_s.qb.ph %["#IO2"], %["#IO3"], %["#IO2"] \n\t" \ +- "precrqu_s.qb.ph %["#IO4"], %["#IO5"], %["#IO4"] \n\t" \ +- "precrqu_s.qb.ph %["#IO6"], %["#IO7"], %["#IO6"] \n\t" \ +- "usw %["#IO0"], "XSTR(I13)"*"#I9"(%["#I8"]) \n\t" \ +- "usw %["#IO2"], "XSTR(I13)"*"#I10"(%["#I8"]) \n\t" \ +- "usw %["#IO4"], "XSTR(I13)"*"#I11"(%["#I8"]) \n\t" \ +- "usw %["#IO6"], "XSTR(I13)"*"#I12"(%["#I8"]) \n\t" ++ "addq.ph %[" #IO0 "], %[" #IO0 "], %[" #I0 "] \n\t" \ ++ "addq.ph %[" #IO1 "], %[" #IO1 "], %[" #I1 "] \n\t" \ ++ "addq.ph %[" #IO2 "], %[" #IO2 "], %[" #I2 "] \n\t" \ ++ "addq.ph %[" #IO3 "], %[" #IO3 "], %[" #I3 "] \n\t" \ ++ "addq.ph %[" #IO4 "], %[" #IO4 "], %[" #I4 "] \n\t" \ ++ "addq.ph %[" #IO5 "], %[" #IO5 "], %[" #I5 "] \n\t" \ ++ "addq.ph %[" #IO6 "], %[" #IO6 "], %[" #I6 "] \n\t" \ ++ "addq.ph %[" #IO7 "], %[" #IO7 "], %[" #I7 "] \n\t" \ ++ "shll_s.ph %[" #IO0 "], %[" #IO0 "], 7 \n\t" \ ++ "shll_s.ph %[" #IO1 "], %[" #IO1 "], 7 \n\t" \ ++ "shll_s.ph %[" #IO2 "], %[" #IO2 "], 7 \n\t" \ ++ "shll_s.ph %[" #IO3 "], %[" #IO3 "], 7 \n\t" \ ++ "shll_s.ph %[" #IO4 "], %[" #IO4 "], 7 \n\t" \ ++ "shll_s.ph %[" #IO5 "], %[" #IO5 "], 7 \n\t" \ ++ "shll_s.ph %[" #IO6 "], %[" #IO6 "], 7 \n\t" \ ++ "shll_s.ph %[" #IO7 "], %[" #IO7 "], 7 \n\t" \ ++ "precrqu_s.qb.ph %[" #IO0 "], %[" #IO1 "], %[" #IO0 "] \n\t" \ ++ "precrqu_s.qb.ph %[" #IO2 "], %[" #IO3 "], %[" #IO2 "] \n\t" \ ++ "precrqu_s.qb.ph %[" #IO4 "], %[" #IO5 "], %[" #IO4 "] \n\t" \ ++ "precrqu_s.qb.ph %[" #IO6 "], %[" #IO7 "], %[" #IO6 "] \n\t" \ ++ "usw %[" #IO0 "], "XSTR(I13)"*" #I9 "(%[" #I8 "]) \n\t" \ ++ "usw %[" #IO2 "], "XSTR(I13)"*" #I10 "(%[" #I8 "]) \n\t" \ ++ "usw %[" #IO4 "], "XSTR(I13)"*" #I11 "(%[" #I8 "]) \n\t" \ ++ "usw %[" #IO6 "], "XSTR(I13)"*" #I12 "(%[" #I8 "]) \n\t" + + #define OUTPUT_EARLY_CLOBBER_REGS_10() \ + : [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), \ +diff --git a/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c +index 9c9665f..46f207b 100644 +--- a/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c ++++ b/Source/LibWebP/src/dsp/dsp.upsampling_mips_dsp_r2.c +@@ -34,15 +34,15 @@ + G = G - t2 + kGCst; \ + B = B + kBCst; \ + __asm__ volatile ( \ +- "shll_s.w %["#R"], %["#R"], 9 \n\t" \ +- "shll_s.w %["#G"], %["#G"], 9 \n\t" \ +- "shll_s.w %["#B"], %["#B"], 9 \n\t" \ +- "precrqu_s.qb.ph %["#R"], %["#R"], $zero \n\t" \ +- "precrqu_s.qb.ph %["#G"], %["#G"], $zero \n\t" \ +- "precrqu_s.qb.ph %["#B"], %["#B"], $zero \n\t" \ +- "srl %["#R"], %["#R"], 24 \n\t" \ +- "srl %["#G"], %["#G"], 24 \n\t" \ +- "srl %["#B"], %["#B"], 24 \n\t" \ ++ "shll_s.w %[" #R "], %[" #R "], 9 \n\t" \ ++ "shll_s.w %[" #G "], %[" #G "], 9 \n\t" \ ++ "shll_s.w %[" #B "], %[" #B "], 9 \n\t" \ ++ "precrqu_s.qb.ph %[" #R "], %[" #R "], $zero \n\t" \ ++ "precrqu_s.qb.ph %[" #G "], %[" #G "], $zero \n\t" \ ++ "precrqu_s.qb.ph %[" #B "], %[" #B "], $zero \n\t" \ ++ "srl %[" #R "], %[" #R "], 24 \n\t" \ ++ "srl %[" #G "], %[" #G "], 24 \n\t" \ ++ "srl %[" #B "], %[" #B "], 24 \n\t" \ + : [R]"+r"(R), [G]"+r"(G), [B]"+r"(B) \ + : \ + ); \ +diff --git a/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c b/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c +index 43f02cc..45a2200 100644 +--- a/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c ++++ b/Source/LibWebP/src/dsp/dsp.yuv_mips_dsp_r2.c +@@ -39,12 +39,12 @@ + "addu %[temp5], %[temp0], %[temp1] \n\t" \ + "subu %[temp6], %[temp0], %[temp2] \n\t" \ + "addu %[temp7], %[temp0], %[temp4] \n\t" \ +-".if "#K" \n\t" \ ++".if " #K " \n\t" \ + "lbu %[temp0], 1(%[y]) \n\t" \ + ".endif \n\t" \ + "shll_s.w %[temp5], %[temp5], 9 \n\t" \ + "shll_s.w %[temp6], %[temp6], 9 \n\t" \ +-".if "#K" \n\t" \ ++".if " #K " \n\t" \ + "mul %[temp0], %[t_con_5], %[temp0] \n\t" \ + ".endif \n\t" \ + "shll_s.w %[temp7], %[temp7], 9 \n\t" \ +@@ -54,9 +54,9 @@ + "srl %[temp5], %[temp5], 24 \n\t" \ + "srl %[temp6], %[temp6], 24 \n\t" \ + "srl %[temp7], %[temp7], 24 \n\t" \ +- "sb %[temp5], "#R"(%[dst]) \n\t" \ +- "sb %[temp6], "#G"(%[dst]) \n\t" \ +- "sb %[temp7], "#B"(%[dst]) \n\t" \ ++ "sb %[temp5], " #R "(%[dst]) \n\t" \ ++ "sb %[temp6], " #G "(%[dst]) \n\t" \ ++ "sb %[temp7], " #B "(%[dst]) \n\t" \ + + #define ASM_CLOBBER_LIST() \ + : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), \ -- cgit v1.3 From 096f0080147c8a1a0285416f5ff0ecfc353414b6 Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Thu, 23 Mar 2017 10:23:04 +0000 Subject: gnu: rcs: Fix build against gcc-5.4.0. * gnu/local.mk (dist_patch_DATA): Add patch. * gnu/packages/patches/rcs-5.9.4-noreturn.patch: New file. * gnu/packages/version-control.scm (rcs)[source]: Applied patch. Signed-off-by: Marius Bakke --- gnu/local.mk | 1 + gnu/packages/patches/rcs-5.9.4-noreturn.patch | 94 +++++++++++++++++++++++++++ gnu/packages/version-control.scm | 3 +- 3 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/rcs-5.9.4-noreturn.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index f02967233..1fa5a339a 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -891,6 +891,7 @@ dist_patch_DATA = \ %D%/packages/patches/quickswitch-fix-dmenu-check.patch \ %D%/packages/patches/rapicorn-isnan.patch \ %D%/packages/patches/ratpoison-shell.patch \ + %D%/packages/patches/rcs-5.9.4-noreturn.patch \ %D%/packages/patches/readline-link-ncurses.patch \ %D%/packages/patches/readline-6.2-CVE-2014-2524.patch \ %D%/packages/patches/readline-7.0-mingw.patch \ diff --git a/gnu/packages/patches/rcs-5.9.4-noreturn.patch b/gnu/packages/patches/rcs-5.9.4-noreturn.patch new file mode 100644 index 000000000..0c0c044ed --- /dev/null +++ b/gnu/packages/patches/rcs-5.9.4-noreturn.patch @@ -0,0 +1,94 @@ +Builds with GCC-5 failed due to misplaced `_Noreturn (__attribute__((noreturn)))` +statement. + +Patch copied from upstream source repository: + +http://git.savannah.gnu.org/cgit/rcs.git/commit/?h=p&id=260704a9164dd34cf7128d6b1e88075ffa3be054 + +Upstream bug URL: + +https://savannah.gnu.org/bugs/?49568 + +commit 260704a9164dd34cf7128d6b1e88075ffa3be054 +Author: Thien-Thi Nguyen +Date: Thu Jun 18 21:25:53 2015 +0200 + + [C slog] Move ‘exiting’ to beginning of func decl. + + Apparently, ‘gcc --std=c11’ does not abide the ‘exiting’ + attribute appearing at the end of the func decl. + Reported by Romain Francoise. + See also . + + * src/b-complain.h (generic_fatal, fatal_syntax, fatal_sys) + * src/b-fb.h (Ierror, Oerror) + * src/base.h (unexpected_EOF, thank_you_and_goodnight): + Move ‘exiting’ attribute to beginning of func decl. + +diff --git a/src/b-complain.h b/src/b-complain.h +index 0ffd157..ea0ffc5 100644 +--- a/src/b-complain.h ++++ b/src/b-complain.h +@@ -32,12 +32,14 @@ extern void generic_warn (char const *who, char const *fmt, ...) + printf_string (2, 3); + extern void generic_error (char const *who, char const *fmt, ...) + printf_string (2, 3); ++exiting + extern void generic_fatal (char const *who, char const *fmt, ...) +- printf_string (2, 3) exiting; ++ printf_string (2, 3); ++exiting + extern void fatal_syntax (size_t lno, char const *fmt, ...) +- printf_string (2, 3) exiting; +-extern void fatal_sys (char const *who) +- exiting; ++ printf_string (2, 3); ++exiting ++extern void fatal_sys (char const *who); + + /* Idioms. Here, prefix P stands for "program" (general operation); + M for "manifestation"; R for "repository". */ +diff --git a/src/b-fb.h b/src/b-fb.h +index c9850e7..bf5eaf8 100644 +--- a/src/b-fb.h ++++ b/src/b-fb.h +@@ -21,9 +21,11 @@ + */ + + extern int change_mode (int fd, mode_t mode); +-extern void Ierror (void) exiting; ++exiting ++extern void Ierror (void); + extern void testIerror (FILE *f); +-extern void Oerror (void) exiting; ++exiting ++extern void Oerror (void); + extern void testOerror (FILE *o); + extern FILE *fopen_safer (char const *filename, char const *type); + extern void Ozclose (FILE **p); +diff --git a/src/base.h b/src/base.h +index 163ee09..5e7a9f8 100644 +--- a/src/base.h ++++ b/src/base.h +@@ -755,8 +755,8 @@ int dorewrite (bool lockflag, int changed); + int donerewrite (int changed, time_t newRCStime); + void ORCSclose (void); + void ORCSerror (void); +-void unexpected_EOF (void) +- exiting; ++exiting ++void unexpected_EOF (void); + void initdiffcmd (struct diffcmd *dc); + int getdiffcmd (struct fro *finfile, bool delimiter, + FILE *foutfile, struct diffcmd *dc); +@@ -831,8 +831,8 @@ char const *date2str (char const date[datesize], + char datebuf[datesize + zonelenmax]); + + /* rcsutil */ +-void thank_you_and_goodnight (int const how) +- exiting; ++exiting ++void thank_you_and_goodnight (int const how); + /* These are for ‘thank_you_and_goodnight’. */ + #define TYAG_ORCSERROR (1 << 3) + #define TYAG_DIRTMPUNLINK (1 << 2) diff --git a/gnu/packages/version-control.scm b/gnu/packages/version-control.scm index 71e499085..9136ea30a 100644 --- a/gnu/packages/version-control.scm +++ b/gnu/packages/version-control.scm @@ -794,7 +794,8 @@ projects, from individuals to large-scale enterprise operations.") version ".tar.xz")) (sha256 (base32 - "1zsx7bb0rgvvvisiy4zlixf56ay8wbd9qqqcp1a1g0m1gl6mlg86")))) + "1zsx7bb0rgvvvisiy4zlixf56ay8wbd9qqqcp1a1g0m1gl6mlg86")) + (patches (search-patches "rcs-5.9.4-noreturn.patch")))) (build-system gnu-build-system) (native-inputs `(("ed" ,ed))) (home-page "http://www.gnu.org/software/rcs/") -- cgit v1.3 From 7fdca77e007f0838ecd32b044827678f2b345ff0 Mon Sep 17 00:00:00 2001 From: rennes Date: Thu, 23 Mar 2017 14:29:26 -0400 Subject: gnu: ustr: Fix build with GCC 5. * gnu/packages/patches/ustr-fix-build-with-gcc-5.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/textutils.scm (ustr)[source]: Use patch. Signed-off-by: Leo Famulari --- gnu/local.mk | 1 + .../patches/ustr-fix-build-with-gcc-5.patch | 880 +++++++++++++++++++++ gnu/packages/textutils.scm | 4 +- 3 files changed, 884 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/ustr-fix-build-with-gcc-5.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 1fa5a339a..c9e3131c0 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -961,6 +961,7 @@ dist_patch_DATA = \ %D%/packages/patches/unzip-initialize-symlink-flag.patch \ %D%/packages/patches/unzip-overflow-long-fsize.patch \ %D%/packages/patches/unzip-remove-build-date.patch \ + %D%/packages/patches/ustr-fix-build-with-gcc-5.patch \ %D%/packages/patches/util-linux-tests.patch \ %D%/packages/patches/util-linux-CVE-2017-2616.patch \ %D%/packages/patches/upower-builddir.patch \ diff --git a/gnu/packages/patches/ustr-fix-build-with-gcc-5.patch b/gnu/packages/patches/ustr-fix-build-with-gcc-5.patch new file mode 100644 index 000000000..f301d4405 --- /dev/null +++ b/gnu/packages/patches/ustr-fix-build-with-gcc-5.patch @@ -0,0 +1,880 @@ +This patch allows to compile the 'ustr' package with gcc-5. + +Patch copied from Debian: + +https://anonscm.debian.org/cgit/users/zito-guest/pkg-ustr.git/commit/?id=fb2528fef188b4de51a27c4f688042c36d2d7a18 + +From: Václav Ovsík +Subject: [PATCH] fixes/gnu-inline + +This patch adds `__attribute__ ((gnu_inline))' into prototype macros +before `inline' to force GNU89 behaviour of inline functions +in C99 mode. +See http://www.gnu.org/software/gcc/gcc-5/porting_to.html + +Signed-off-by: Václav Ovsík + +--- + ustr-b-dbg-code.c | 8 ++++---- + ustr-b-opt-code.c | 8 ++++---- + ustr-cmp-dbg-code.c | 8 ++++---- + ustr-cmp-opt-code.c | 8 ++++---- + ustr-compiler.h | 4 ++-- + ustr-fmt-dbg-code.c | 8 ++++---- + ustr-fmt-opt-code.c | 8 ++++---- + ustr-ins-dbg-code.c | 8 ++++---- + ustr-ins-opt-code.c | 8 ++++---- + ustr-io-dbg-code.c | 8 ++++---- + ustr-io-opt-code.c | 8 ++++---- + ustr-main-dbg-code.c | 2 +- + ustr-main-opt-code.c | 2 +- + ustr-parse-dbg-code.c | 8 ++++---- + ustr-parse-opt-code.c | 8 ++++---- + ustr-pool-dbg-code.c | 8 ++++---- + ustr-pool-opt-code.c | 8 ++++---- + ustr-replace-dbg-code.c | 8 ++++---- + ustr-replace-opt-code.c | 8 ++++---- + ustr-sc-dbg-code.c | 8 ++++---- + ustr-sc-opt-code.c | 8 ++++---- + ustr-set-dbg-code.c | 8 ++++---- + ustr-set-opt-code.c | 8 ++++---- + ustr-split-dbg-code.c | 8 ++++---- + ustr-split-opt-code.c | 8 ++++---- + ustr-spn-dbg-code.c | 8 ++++---- + ustr-spn-opt-code.c | 8 ++++---- + ustr-srch-dbg-code.c | 8 ++++---- + ustr-srch-opt-code.c | 8 ++++---- + ustr-sub-dbg-code.c | 8 ++++---- + ustr-sub-opt-code.c | 8 ++++---- + ustr-utf8-dbg-code.c | 8 ++++---- + ustr-utf8-opt-code.c | 8 ++++---- + 33 files changed, 124 insertions(+), 124 deletions(-) + +diff --git a/ustr-b-dbg-code.c b/ustr-b-dbg-code.c +index 4a7fdac..60e383e 100644 +--- a/ustr-b-dbg-code.c ++++ b/ustr-b-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-b.h" +diff --git a/ustr-b-opt-code.c b/ustr-b-opt-code.c +index 45e9e87..4011898 100644 +--- a/ustr-b-opt-code.c ++++ b/ustr-b-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-b.h" +diff --git a/ustr-cmp-dbg-code.c b/ustr-cmp-dbg-code.c +index 7b8af33..4c3adc2 100644 +--- a/ustr-cmp-dbg-code.c ++++ b/ustr-cmp-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-cmp.h" +diff --git a/ustr-cmp-opt-code.c b/ustr-cmp-opt-code.c +index 2076d1c..ff5d02c 100644 +--- a/ustr-cmp-opt-code.c ++++ b/ustr-cmp-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-cmp.h" +diff --git a/ustr-compiler.h b/ustr-compiler.h +index 9e71276..38ae026 100644 +--- a/ustr-compiler.h ++++ b/ustr-compiler.h +@@ -92,7 +92,7 @@ + #endif + + #if USTR_CONF_COMPILE_USE_INLINE +-#define USTR__INLINE inline ++#define USTR__INLINE __attribute__ ((gnu_inline)) inline + #else + #define USTR__INLINE /* no inline */ + #endif +@@ -123,7 +123,7 @@ + # if USTR_CONF_INCLUDE_CODEONLY_HEADERS + # define USTR_CONF_II_PROTO static USTR__INLINE + # else +-# define USTR_CONF_II_PROTO extern inline ++# define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + # endif + #endif + +diff --git a/ustr-fmt-dbg-code.c b/ustr-fmt-dbg-code.c +index 4249bb1..1f147a0 100644 +--- a/ustr-fmt-dbg-code.c ++++ b/ustr-fmt-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-fmt.h" +diff --git a/ustr-fmt-opt-code.c b/ustr-fmt-opt-code.c +index c73e375..989b29f 100644 +--- a/ustr-fmt-opt-code.c ++++ b/ustr-fmt-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-fmt.h" +diff --git a/ustr-ins-dbg-code.c b/ustr-ins-dbg-code.c +index 39f9bba..4c6d5ea 100644 +--- a/ustr-ins-dbg-code.c ++++ b/ustr-ins-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-fmt.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS +@@ -17,5 +17,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-ins.h" +diff --git a/ustr-ins-opt-code.c b/ustr-ins-opt-code.c +index 1aca827..859b44d 100644 +--- a/ustr-ins-opt-code.c ++++ b/ustr-ins-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-fmt.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS +@@ -17,5 +17,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-ins.h" +diff --git a/ustr-io-dbg-code.c b/ustr-io-dbg-code.c +index c361c93..d42e43f 100644 +--- a/ustr-io-dbg-code.c ++++ b/ustr-io-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-io.h" +diff --git a/ustr-io-opt-code.c b/ustr-io-opt-code.c +index b1b4525..ae8de87 100644 +--- a/ustr-io-opt-code.c ++++ b/ustr-io-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-io.h" +diff --git a/ustr-main-dbg-code.c b/ustr-main-dbg-code.c +index 4b821ce..abaa53a 100644 +--- a/ustr-main-dbg-code.c ++++ b/ustr-main-dbg-code.c +@@ -7,5 +7,5 @@ + #define USTR_CONF_E_PROTO extern + #define USTR_CONF_I_PROTO + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" +diff --git a/ustr-main-opt-code.c b/ustr-main-opt-code.c +index 233fb60..7ef6e98 100644 +--- a/ustr-main-opt-code.c ++++ b/ustr-main-opt-code.c +@@ -7,5 +7,5 @@ + #define USTR_CONF_E_PROTO extern + #define USTR_CONF_I_PROTO + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" +diff --git a/ustr-parse-dbg-code.c b/ustr-parse-dbg-code.c +index c9653af..6e1707d 100644 +--- a/ustr-parse-dbg-code.c ++++ b/ustr-parse-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-parse.h" +diff --git a/ustr-parse-opt-code.c b/ustr-parse-opt-code.c +index 0c8df4d..fc96db2 100644 +--- a/ustr-parse-opt-code.c ++++ b/ustr-parse-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-parse.h" +diff --git a/ustr-pool-dbg-code.c b/ustr-pool-dbg-code.c +index adf7519..957f9ca 100644 +--- a/ustr-pool-dbg-code.c ++++ b/ustr-pool-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-pool.h" +diff --git a/ustr-pool-opt-code.c b/ustr-pool-opt-code.c +index 2b0367c..c1b2413 100644 +--- a/ustr-pool-opt-code.c ++++ b/ustr-pool-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-pool.h" +diff --git a/ustr-replace-dbg-code.c b/ustr-replace-dbg-code.c +index fe02187..90531ac 100644 +--- a/ustr-replace-dbg-code.c ++++ b/ustr-replace-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-set.h" + #include "ustr-srch.h" +@@ -19,5 +19,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-replace.h" +diff --git a/ustr-replace-opt-code.c b/ustr-replace-opt-code.c +index e76b3bb..6232753 100644 +--- a/ustr-replace-opt-code.c ++++ b/ustr-replace-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-set.h" + #include "ustr-srch.h" +@@ -19,5 +19,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-replace.h" +diff --git a/ustr-sc-dbg-code.c b/ustr-sc-dbg-code.c +index 0011c63..d7ce317 100644 +--- a/ustr-sc-dbg-code.c ++++ b/ustr-sc-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-spn.h" + #include "ustr-utf8.h" +@@ -18,5 +18,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-sc.h" +diff --git a/ustr-sc-opt-code.c b/ustr-sc-opt-code.c +index 7cb81ba..4a97ed9 100644 +--- a/ustr-sc-opt-code.c ++++ b/ustr-sc-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-spn.h" + #include "ustr-utf8.h" +@@ -18,5 +18,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-sc.h" +diff --git a/ustr-set-dbg-code.c b/ustr-set-dbg-code.c +index 023875a..cf77071 100644 +--- a/ustr-set-dbg-code.c ++++ b/ustr-set-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-fmt.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS +@@ -17,5 +17,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-set.h" +diff --git a/ustr-set-opt-code.c b/ustr-set-opt-code.c +index e726888..34dcaf6 100644 +--- a/ustr-set-opt-code.c ++++ b/ustr-set-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-fmt.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS +@@ -17,5 +17,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-set.h" +diff --git a/ustr-split-dbg-code.c b/ustr-split-dbg-code.c +index 03e5ca5..e40d2a5 100644 +--- a/ustr-split-dbg-code.c ++++ b/ustr-split-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-set.h" + #include "ustr-spn.h" +@@ -19,5 +19,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-split.h" +diff --git a/ustr-split-opt-code.c b/ustr-split-opt-code.c +index d64e300..74f4b1c 100644 +--- a/ustr-split-opt-code.c ++++ b/ustr-split-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-set.h" + #include "ustr-spn.h" +@@ -19,5 +19,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-split.h" +diff --git a/ustr-spn-dbg-code.c b/ustr-spn-dbg-code.c +index ff97432..b0b09d4 100644 +--- a/ustr-spn-dbg-code.c ++++ b/ustr-spn-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-srch.h" + #include "ustr-utf8.h" +@@ -18,5 +18,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-spn.h" +diff --git a/ustr-spn-opt-code.c b/ustr-spn-opt-code.c +index 3ff0a07..92c5ccc 100644 +--- a/ustr-spn-opt-code.c ++++ b/ustr-spn-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-srch.h" + #include "ustr-utf8.h" +@@ -18,5 +18,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-spn.h" +diff --git a/ustr-srch-dbg-code.c b/ustr-srch-dbg-code.c +index 40e4dbf..0f4da21 100644 +--- a/ustr-srch-dbg-code.c ++++ b/ustr-srch-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-cmp-internal.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS +@@ -17,6 +17,6 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-srch.h" + +diff --git a/ustr-srch-opt-code.c b/ustr-srch-opt-code.c +index 635464d..8dde13d 100644 +--- a/ustr-srch-opt-code.c ++++ b/ustr-srch-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-cmp-internal.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS +@@ -17,6 +17,6 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-srch.h" + +diff --git a/ustr-sub-dbg-code.c b/ustr-sub-dbg-code.c +index f994716..b1712e6 100644 +--- a/ustr-sub-dbg-code.c ++++ b/ustr-sub-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-fmt.h" + #include "ustr-ins.h" +@@ -19,5 +19,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-sub.h" +diff --git a/ustr-sub-opt-code.c b/ustr-sub-opt-code.c +index 8cdb4eb..91780c7 100644 +--- a/ustr-sub-opt-code.c ++++ b/ustr-sub-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #include "ustr-fmt.h" + #include "ustr-ins.h" +@@ -19,5 +19,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-sub.h" +diff --git a/ustr-utf8-dbg-code.c b/ustr-utf8-dbg-code.c +index 2666fc2..30786e9 100644 +--- a/ustr-utf8-dbg-code.c ++++ b/ustr-utf8-dbg-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf-debug.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-utf8.h" +diff --git a/ustr-utf8-opt-code.c b/ustr-utf8-opt-code.c +index 91fa754..abdf4c0 100644 +--- a/ustr-utf8-opt-code.c ++++ b/ustr-utf8-opt-code.c +@@ -3,11 +3,11 @@ + #include "ustr-conf.h" + #define USTR_CONF_USE_DYNAMIC_CONF USTR_CONF_HAVE_DYNAMIC_CONF + #define USTR_CONF_e_PROTO extern +-#define USTR_CONF_i_PROTO extern inline ++#define USTR_CONF_i_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_E_PROTO extern +-#define USTR_CONF_I_PROTO extern inline ++#define USTR_CONF_I_PROTO extern __attribute__ ((gnu_inline)) inline + #define USTR_CONF_EI_PROTO extern +-#define USTR_CONF_II_PROTO extern inline ++#define USTR_CONF_II_PROTO extern __attribute__ ((gnu_inline)) inline + #include "ustr-main.h" + #undef USTR_CONF_INCLUDE_CODEONLY_HEADERS + #define USTR_CONF_INCLUDE_CODEONLY_HEADERS 1 +@@ -16,5 +16,5 @@ + #undef USTR_CONF_I_PROTO + #define USTR_CONF_I_PROTO + #undef USTR_CONF_II_PROTO +-#define USTR_CONF_II_PROTO inline ++#define USTR_CONF_II_PROTO __attribute__ ((gnu_inline)) inline + #include "ustr-utf8.h" +-- +tg: (b148fb7..) fixes/gnu-inline (depends on: upstream) diff --git a/gnu/packages/textutils.scm b/gnu/packages/textutils.scm index 9e6309a0e..dbd71c2e8 100644 --- a/gnu/packages/textutils.scm +++ b/gnu/packages/textutils.scm @@ -9,6 +9,7 @@ ;;; Copyright © 2016 ng0 ;;; Copyright © 2016 Marius Bakke ;;; Copyright © 2017 Eric Bavier +;;; Copyright © 2017 Rene Saavedra ;;; ;;; This file is part of GNU Guix. ;;; @@ -232,7 +233,8 @@ input bits thoroughly but are not suitable for cryptography.") "/ustr-" version ".tar.bz2")) (sha256 (base32 - "1i623ygdj7rkizj7985q9d6vj5amwg686aqb5j3ixpkqkyp6xbrx")))) + "1i623ygdj7rkizj7985q9d6vj5amwg686aqb5j3ixpkqkyp6xbrx")) + (patches (search-patches "ustr-fix-build-with-gcc-5.patch")))) (build-system gnu-build-system) (arguments `(#:make-flags -- cgit v1.3 From 77ab6983a19ef307558ab2607920158d6bb94ba8 Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Fri, 24 Mar 2017 00:12:00 +0100 Subject: gnu: devil: Update to 1.8.0. * gnu/packages/patches/devil-CVE-2009-3994.patch, gnu/packages/patches/devil-fix-libpng.patch: Delete files. * gnu/local.mk (dist_patch_DATA): Remove them. * gnu/packages/image.scm (devil): Update to 1.8.0. [source]: Remove patches and snippet. [build-system]: Change to CMAKE-BUILD-SYSTEM. [arguments]: Disable tests. Remove #:configure-flags and add a 'change-directory' phase. Remove 'fix-tests' phase. [inputs]: Change LIBJPEG to LIBJPEG-TURBO. --- gnu/local.mk | 2 -- gnu/packages/image.scm | 34 +++++++----------------- gnu/packages/patches/devil-CVE-2009-3994.patch | 24 ----------------- gnu/packages/patches/devil-fix-libpng.patch | 36 -------------------------- 4 files changed, 9 insertions(+), 87 deletions(-) delete mode 100644 gnu/packages/patches/devil-CVE-2009-3994.patch delete mode 100644 gnu/packages/patches/devil-fix-libpng.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index c9e3131c0..6df3e5846 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -526,8 +526,6 @@ dist_patch_DATA = \ %D%/packages/patches/cursynth-wave-rand.patch \ %D%/packages/patches/cyrus-sasl-CVE-2013-4122.patch \ %D%/packages/patches/dbus-helper-search-path.patch \ - %D%/packages/patches/devil-CVE-2009-3994.patch \ - %D%/packages/patches/devil-fix-libpng.patch \ %D%/packages/patches/dfu-programmer-fix-libusb.patch \ %D%/packages/patches/diffutils-gets-undeclared.patch \ %D%/packages/patches/doc++-include-directives.patch \ diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index 51c465a0c..51b09680a 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -860,44 +860,28 @@ and XMP metadata of images in various formats.") (define-public devil (package (name "devil") - (version "1.7.8") + (version "1.8.0") (source (origin (method url-fetch) (uri (string-append "http://downloads.sourceforge.net/openil/" "DevIL-" version ".tar.gz")) (sha256 (base32 - "1zd850nn7nvkkhasrv7kn17kzgslr5ry933v6db62s4lr0zzlbv8")) - ;; Backported from upstream: - ;; https://github.com/DentonW/DevIL/commit/724194d7a9a91221a564579f64bdd6f0abd64219.patch - (patches (search-patches "devil-fix-libpng.patch" - "devil-CVE-2009-3994.patch")) - (modules '((guix build utils))) - (snippet - ;; Fix old lcms include directives and lib flags. - '(substitute* '("configure" "src-IL/src/il_profiles.c") - (("-llcms") "-llcms2") - (("lcms/lcms\\.h") "lcms2/lcms2.h") - (("lcms\\.h") "lcms2.h"))))) - (build-system gnu-build-system) + "02dpzvi493r09c9hfjnk54nladl3qw55iqkkg18g12fxwwz9fx80")))) + (build-system cmake-build-system) (arguments - '(#:configure-flags '("--enable-ILUT=yes") ; build utility library + '(;; XXX: Not supported in the released CMakeLists.txt. + ;; Enable this for > 1.8.0. + #:tests? #f #:phases (modify-phases %standard-phases - (add-before 'check 'fix-tests - (lambda* (#:key inputs #:allow-other-keys) - ;; Fix hard-coded /bin/bash reference. - (substitute* '("test/Makefile") - (("TESTS_ENVIRONMENT = /bin/bash") - (string-append "TESTS_ENVIRONMENT = " - (assoc-ref inputs "bash") - "/bin/bash"))) - #t))))) + (add-before 'configure 'change-directory + (lambda _ (chdir "DevIL") #t))))) (native-inputs `(("pkg-config" ,pkg-config))) (inputs `(("lcms" ,lcms) - ("libjpeg" ,libjpeg) + ("libjpeg" ,libjpeg-turbo) ("libmng" ,libmng) ("libpng" ,libpng) ("libtiff" ,libtiff) diff --git a/gnu/packages/patches/devil-CVE-2009-3994.patch b/gnu/packages/patches/devil-CVE-2009-3994.patch deleted file mode 100644 index e009a95c4..000000000 --- a/gnu/packages/patches/devil-CVE-2009-3994.patch +++ /dev/null @@ -1,24 +0,0 @@ -Fix CVE-2009-3994 (buffer overflow in GetUID() allows remote DOS or -arbitrary code execution via crafted DICOM file). - -https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3994 - -Copied from Fedora -https://pkgs.fedoraproject.org/cgit/rpms/DevIL.git/tree/DevIL-1.7.8-CVE-2009-3994.patch?id=9c656a75393d6c455aef9f4968fbbee9c53f4fdb - -diff -up devil-1.7.8/src-IL/src/il_dicom.c~ devil-1.7.8/src-IL/src/il_dicom.c ---- devil-1.7.8/src-IL/src/il_dicom.c~ 2009-03-08 08:10:09.000000000 +0100 -+++ devil-1.7.8/src-IL/src/il_dicom.c 2009-12-03 12:07:45.000000000 +0100 -@@ -427,9 +427,11 @@ ILboolean GetUID(ILubyte *UID) - return IL_FALSE; - - ValLen = GetLittleUShort(); -+ if (ValLen > 64) -+ return IL_FALSE; - if (iread(UID, ValLen, 1) != 1) - return IL_FALSE; -- UID[64] = 0; // Just to make sure that our string is terminated. -+ UID[ValLen] = 0; // Just to make sure that our string is terminated. - - return IL_TRUE; - } diff --git a/gnu/packages/patches/devil-fix-libpng.patch b/gnu/packages/patches/devil-fix-libpng.patch deleted file mode 100644 index a8e90333a..000000000 --- a/gnu/packages/patches/devil-fix-libpng.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 724194d7a9a91221a564579f64bdd6f0abd64219 Mon Sep 17 00:00:00 2001 -From: Noah Mayr -Date: Sun, 1 Mar 2015 10:10:56 +0100 -Subject: [PATCH] Fixed deprecated libpng API usage. - ---- - src-IL/src/il_icon.c | 2 +- - src-IL/src/il_png.c | 4 ++-- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src-IL/src/il_icon.c b/src-IL/src/il_icon.c -index 2ccb1a3..fd9475d 100644 ---- a/src-IL/src/il_icon.c -+++ b/src-IL/src/il_icon.c -@@ -525,7 +525,7 @@ ILboolean ico_readpng_get_image(ICOIMAGE *Icon, ILdouble display_exponent) - - // Expand low-bit-depth grayscale images to 8 bits - if (ico_color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) { -- png_set_gray_1_2_4_to_8(ico_png_ptr); -+ png_set_expand_gray_1_2_4_to_8(ico_png_ptr); - } - - // Expand RGB images with transparency to full alpha channels -diff --git a/src-IL/src/il_png.c b/src-IL/src/il_png.c -index da9517d..2866508 100644 ---- a/src-IL/src/il_png.c -+++ b/src-IL/src/il_png.c -@@ -277,7 +277,7 @@ ILboolean readpng_get_image(ILdouble display_exponent) - - // Expand low-bit-depth grayscale images to 8 bits - if (png_color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) { -- png_set_gray_1_2_4_to_8(png_ptr); -+ png_set_expand_gray_1_2_4_to_8(png_ptr); - } - - // Expand RGB images with transparency to full alpha channels -- cgit v1.3 From d1e3f59c9b8d1be79eded04fe23cceb56b4372f0 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sat, 25 Mar 2017 23:28:54 +0100 Subject: gnu: coreutils: Patch 'cut' unit test on ARM. Fixes . * gnu/packages/patches/coreutils-cut-huge-range-test.patch: New file. * gnu/packages/base.scm (coreutils)[native-inputs]: Add it as an input. [arguments] <#:phases>: On ARM, add 'patch-cut-test' phase. * gnu/local.mk (dist_patch_DATA): Add 'coreutils-cut-huge-range-test.patch'. --- gnu/local.mk | 1 + gnu/packages/base.scm | 31 +++++++++++++++++++--- .../patches/coreutils-cut-huge-range-test.patch | 22 +++++++++++++++ 3 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 gnu/packages/patches/coreutils-cut-huge-range-test.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 6df3e5846..ba908cd4a 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -514,6 +514,7 @@ dist_patch_DATA = \ %D%/packages/patches/clx-remove-demo.patch \ %D%/packages/patches/cmake-fix-tests.patch \ %D%/packages/patches/coda-use-system-libs.patch \ + %D%/packages/patches/coreutils-cut-huge-range-test.patch \ %D%/packages/patches/coreutils-fix-cross-compilation.patch \ %D%/packages/patches/cpio-CVE-2016-2037.patch \ %D%/packages/patches/cpufrequtils-fix-aclocal.patch \ diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm index ba9c820ef..2a6f6a43e 100644 --- a/gnu/packages/base.scm +++ b/gnu/packages/base.scm @@ -307,9 +307,17 @@ used to apply commands with arbitrarily long arguments.") ;; copy of help2man. However, don't pass it when cross-compiling since ;; that would lead it to try to run programs to get their '--help' output ;; for help2man. - (if (%current-target-system) - '() - `(("perl" ,perl)))) + `(,@(if (%current-target-system) + '() + `(("perl" ,perl))) + + ;; Apply this patch only on ARM to avoid a full rebuild. + ;; TODO: Move to 'patches' in the next update cycle. + ,@(if (string-prefix? "arm" (or (%current-target-system) + (%current-system))) + `(("cut-test.patch" + ,(search-patch "coreutils-cut-huge-range-test.patch"))) + '()))) (outputs '("out" "debug")) (arguments `(#:parallel-build? #f ; help2man may be called too early @@ -328,7 +336,22 @@ used to apply commands with arbitrarily long arguments.") (substitute* (find-files "tests" "\\.sh$") (("#!/bin/sh") (format #f "#!~a/bin/sh" bash))))) - %standard-phases))) + + ,@(if (string-prefix? "arm" (or (%current-target-system) + (%current-system))) + '((alist-cons-before + 'build 'patch-cut-test + (lambda* (#:key inputs native-inputs + #:allow-other-keys) + (let ((patch (or (assoc-ref inputs + "cut-test.patch") + (assoc-ref native-inputs + "cut-test.patch")))) + (zero? + (system* "patch" "-p1" "--force" + "--input" patch)))) + %standard-phases)) + '(%standard-phases))))) (synopsis "Core GNU utilities (file, text, shell)") (description "GNU Coreutils includes all of the basic command-line tools that are diff --git a/gnu/packages/patches/coreutils-cut-huge-range-test.patch b/gnu/packages/patches/coreutils-cut-huge-range-test.patch new file mode 100644 index 000000000..0be2cef2b --- /dev/null +++ b/gnu/packages/patches/coreutils-cut-huge-range-test.patch @@ -0,0 +1,22 @@ +This patch fixes 100% reproducible test failures on arm-linux-gnueabihf in our +the build environment chroot, as reported at . +It is a followup to this upstream patch: + + commit 28803c8a3144d5d4363cdbd148bbe067af1a67c2 + Author: Pádraig Brady + Date: Fri Mar 3 00:25:54 2017 -0800 + + tests: avoid a spurious failure on older debian + +... which appeared to be insufficient. + +--- a/tests/misc/cut-huge-range.sh ++++ b/tests/misc/cut-huge-range.sh +@@ -22,6 +22,7 @@ getlimits_ + + vm=$(get_min_ulimit_v_ cut -b1 /dev/null) \ + || skip_ "this shell lacks ulimit support" ++vm=$(($vm + $(getconf PAGESIZE))) # avoid spurious failures + + # sed script to subtract one from the input. + # Each input line should consist of a positive decimal number. -- cgit v1.3 From 3c5698046a4b4c8934866e0195e899f73163020d Mon Sep 17 00:00:00 2001 From: Marius Bakke Date: Sun, 26 Mar 2017 07:49:50 +0200 Subject: gnu: libtorrent-rasterbar: Update to 1.1.2. * gnu/packages/bittorrent.scm (libtorrent-rasterbar): Update to 1.1.2. [source]: Use patch. * gnu/packages/patches/libtorrent-rasterbar-boost-compat.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + gnu/packages/bittorrent.scm | 10 +++++--- .../libtorrent-rasterbar-boost-compat.patch | 27 ++++++++++++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 gnu/packages/patches/libtorrent-rasterbar-boost-compat.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index ba908cd4a..782bf7479 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -712,6 +712,7 @@ dist_patch_DATA = \ %D%/packages/patches/libtiff-invalid-read.patch \ %D%/packages/patches/libtiff-null-dereference.patch \ %D%/packages/patches/libtiff-tiffcp-underflow.patch \ + %D%/packages/patches/libtorrent-rasterbar-boost-compat.patch \ %D%/packages/patches/libtool-skip-tests2.patch \ %D%/packages/patches/libunwind-CVE-2015-3239.patch \ %D%/packages/patches/libvpx-CVE-2016-2818.patch \ diff --git a/gnu/packages/bittorrent.scm b/gnu/packages/bittorrent.scm index 635b94f4a..a0474002b 100644 --- a/gnu/packages/bittorrent.scm +++ b/gnu/packages/bittorrent.scm @@ -31,6 +31,7 @@ #:use-module (guix build-system python) #:use-module (guix build-system glib-or-gtk) #:use-module ((guix licenses) #:prefix l:) + #:use-module (gnu packages) #:use-module (gnu packages adns) #:use-module (gnu packages boost) #:use-module (gnu packages check) @@ -379,16 +380,19 @@ and will take advantage of multiple processor cores where possible.") (define-public libtorrent-rasterbar (package (name "libtorrent-rasterbar") - (version "1.0.10") + (version "1.1.2") (source (origin (method url-fetch) (uri (string-append "https://github.com/arvidn/libtorrent/releases/download/libtorrent-" - "1_0_10" "/libtorrent-rasterbar-" version ".tar.gz")) + (string-join (string-split version #\.) "_") + "/libtorrent-rasterbar-" version ".tar.gz")) + (patches + (search-patches "libtorrent-rasterbar-boost-compat.patch")) (sha256 (base32 - "0gjcr892hzmcngvpw5bycjci4dk49v763lsnpvbwsjmim2ncwrd8")))) + "16im9qsmfrmmkhfjpij9739nqpn4s6wgc9cikdxbcyshfhimzra5")))) (build-system gnu-build-system) (arguments `(#:configure-flags diff --git a/gnu/packages/patches/libtorrent-rasterbar-boost-compat.patch b/gnu/packages/patches/libtorrent-rasterbar-boost-compat.patch new file mode 100644 index 000000000..85bea76ef --- /dev/null +++ b/gnu/packages/patches/libtorrent-rasterbar-boost-compat.patch @@ -0,0 +1,27 @@ +Fix compatibility with Boost 1.63. + +Patch copied from upstream source repository: + +https://github.com/arvidn/libtorrent/commit/6d2d736cecce0af274dd651dd1f562716b625d92 + +From 6d2d736cecce0af274dd651dd1f562716b625d92 Mon Sep 17 00:00:00 2001 +From: arvidn +Date: Sun, 12 Mar 2017 13:03:26 -0400 +Subject: [PATCH] fix test_ssl.cpp build with newer versions of boost + +--- + test/test_ssl.cpp | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/test/test_ssl.cpp b/test/test_ssl.cpp +index 01c5bc7..2903332 100644 +--- a/test/test_ssl.cpp ++++ b/test/test_ssl.cpp +@@ -51,7 +51,6 @@ POSSIBILITY OF SUCH DAMAGE. + #include + + #ifdef TORRENT_USE_OPENSSL +-#include // for asio::error::get_ssl_category() + #include + + #include "libtorrent/aux_/disable_warnings_pop.hpp" -- cgit v1.3 From b85b56dd7bb0185059e81f2aeeb0749e180d2084 Mon Sep 17 00:00:00 2001 From: Thomas Danckaert Date: Mon, 27 Mar 2017 20:16:32 +0200 Subject: gnu: libetonyek: Update to 0.1.6. * gnu/packages/libreoffice.scm (libetonyek): Update to 0.1.6. [arguments]: Add phase 'autoreconf, because configure.ac is patched. Add configure flag "--with-mdds=1.2". [inputs]: Add liblangtag. [native-inputs]: Add autoconf and automake. * gnu/packages/patches/libetonyek-build-with-mdds-1.2.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + gnu/packages/libreoffice.scm | 15 ++++- .../patches/libetonyek-build-with-mdds-1.2.patch | 74 ++++++++++++++++++++++ 3 files changed, 87 insertions(+), 3 deletions(-) create mode 100644 gnu/packages/patches/libetonyek-build-with-mdds-1.2.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 782bf7479..02758dd7e 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -676,6 +676,7 @@ dist_patch_DATA = \ %D%/packages/patches/libbonobo-activation-test-race.patch \ %D%/packages/patches/libcanberra-sound-theme-freedesktop.patch \ %D%/packages/patches/libdrm-symbol-check.patch \ + %D%/packages/patches/libetonyek-build-with-mdds-1.2.patch \ %D%/packages/patches/libevent-dns-tests.patch \ %D%/packages/patches/libevent-2.0-CVE-2016-10195.patch \ %D%/packages/patches/libevent-2.0-CVE-2016-10196.patch \ diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm index a558d8e19..3d056031c 100644 --- a/gnu/packages/libreoffice.scm +++ b/gnu/packages/libreoffice.scm @@ -349,22 +349,31 @@ CorelDRAW documents of all versions.") (define-public libetonyek (package (name "libetonyek") - (version "0.1.3") + (version "0.1.6") (source (origin (method url-fetch) (uri (string-append "http://dev-www.libreoffice.org/src/" name "/" name "-" version ".tar.xz")) (sha256 (base32 - "0mghaqzj0qqza8z1gzprw62702adlww4kgdzynj5qpxxc9m2f4py")))) + "0y60vi1plyq69fqbcjnc0v8mvcjqjsl1ry6rmb3bq3q7j8a2fm6z")) + (patches (search-patches "libetonyek-build-with-mdds-1.2.patch")))) (build-system gnu-build-system) + (arguments + `(#:configure-flags '("--with-mdds=1.2") + #:phases (modify-phases %standard-phases + (add-before 'configure 'autoreconf + (lambda _ (system* "autoreconf")))))) (native-inputs `(("cppunit" ,cppunit) ("doxygen" ,doxygen) ("glm" ,glm) ("gperf" ,gperf) + ("liblangtag" ,liblangtag) ("mdds" ,mdds) - ("pkg-config" ,pkg-config))) + ("pkg-config" ,pkg-config) + ("autoconf" ,autoconf) ; due to patch + ("automake" ,automake))) (propagated-inputs ; in Requires or Requires.private field of .pkg `(("librevenge" ,librevenge) ("libxml2" ,libxml2))) diff --git a/gnu/packages/patches/libetonyek-build-with-mdds-1.2.patch b/gnu/packages/patches/libetonyek-build-with-mdds-1.2.patch new file mode 100644 index 000000000..1ede82ad3 --- /dev/null +++ b/gnu/packages/patches/libetonyek-build-with-mdds-1.2.patch @@ -0,0 +1,74 @@ +Allow building with mdds 1.2. + +Patch taken from upstream commit f6d14b3b510de5c50e45c98fe812a73ba00f3def +see https://gerrit.libreoffice.org/gitweb?p=libetonyek.git;a=commitdiff;h=f6d14b3b510de5c50e45c98fe812a73ba00f3def + +diff --git a/configure.ac b/configure.ac +index ca4bb07..bb946eb 100644 (file) +--- a/configure.ac ++++ b/configure.ac +@@ -24,7 +24,7 @@ AC_LANG([C++]) + # Configure options + # ================= + AC_ARG_WITH([mdds], +- AS_HELP_STRING([--with-mdds=1.0|0.x], [Specify which version of mdds to use (1.0 is the default)]), ++ AS_HELP_STRING([--with-mdds=1.2|1.0|0.x], [Specify which version of mdds to use (1.0 is the default)]), + [], [with_mdds="1.0"]) + + # =========================== +@@ -47,7 +47,7 @@ AC_PROG_SED + + AM_MISSING_PROG([GPERF], [gperf]) + +-AS_IF([test "$with_mdds" = "1.0"], [AX_CXX_COMPILE_STDCXX_11([noext])]) ++AS_IF([test "$with_mdds" = "1.0" -o "$with_mdds" = "1.2" ], [AX_CXX_COMPILE_STDCXX_11([noext])]) + + # =============== + # Find librevenge +@@ -138,25 +138,27 @@ AC_SUBST([GLM_CFLAGS]) + # ========= + # Find mdds + # ========= +-AS_IF([test "$with_mdds" = "1.0"], [ +- PKG_CHECK_MODULES([MDDS], [mdds-1.0]) +-], [ +- PKG_CHECK_MODULES([MDDS], [mdds]) +- AC_MSG_CHECKING([checking if mdds::flat_segment_tree can store values of any type]) +- old_CPPFLAGS="$CPPFLAGS" +- CPPFLAGS="$MDDS_CFLAGS $CPPFLAGS" +- AC_COMPILE_IFELSE([AC_LANG_SOURCE([ +- #include +- struct Value {}; +- mdds::flat_segment_tree tree(0, 4, Value()); +- ])], [ +- AC_MSG_RESULT([yes]) +- ], [ +- AC_MSG_RESULT([no]) +- AC_MSG_ERROR([please install mdds >= 0.12.1]) +- ]) +- CPPFLAGS="$old_CPPFLAGS" +-]) ++AS_CASE(["$with_mdds"], ++ ["1.2"], [PKG_CHECK_MODULES([MDDS], [mdds-1.2])], ++ ["1.0"], [PKG_CHECK_MODULES([MDDS], [mdds-1.0])], ++ [ ++ PKG_CHECK_MODULES([MDDS], [mdds]) ++ AC_MSG_CHECKING([checking if mdds::flat_segment_tree can store values of any type]) ++ old_CPPFLAGS="$CPPFLAGS" ++ CPPFLAGS="$MDDS_CFLAGS $CPPFLAGS" ++ AC_COMPILE_IFELSE([AC_LANG_SOURCE([ ++ #include ++ struct Value {}; ++ mdds::flat_segment_tree tree(0, 4, Value()); ++ ])], [ ++ AC_MSG_RESULT([yes]) ++ ], [ ++ AC_MSG_RESULT([no]) ++ AC_MSG_ERROR([please install mdds >= 0.12.1]) ++ ]) ++ CPPFLAGS="$old_CPPFLAGS" ++ ] ++) + + # ================================= + # Libtool/Version Makefile settings -- cgit v1.3 From 26f38d313bd4ccece05610f762612daa0746dd44 Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Mon, 27 Mar 2017 13:28:33 +0300 Subject: gnu: mozjs@24: Add aarch64-support. * gnu/packages/gnuzilla.scm (mozjs@24)[source]: Add patch. [arguments]: Add flag for building on aarch64-linux, delete failing test. * gnu/packages/patches/mozjs24-aarch64-support.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + gnu/packages/gnuzilla.scm | 12 ++++++++++-- gnu/packages/patches/mozjs24-aarch64-support.patch | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/patches/mozjs24-aarch64-support.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index f69946ba1..9231870a9 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -767,6 +767,7 @@ dist_patch_DATA = \ %D%/packages/patches/mpc123-initialize-ao.patch \ %D%/packages/patches/mplayer2-theora-fix.patch \ %D%/packages/patches/module-init-tools-moduledir.patch \ + %D%/packages/patches/mozjs24-aarch64-support.patch \ %D%/packages/patches/multiqc-fix-git-subprocess-error.patch \ %D%/packages/patches/mumps-build-parallelism.patch \ %D%/packages/patches/mupdf-build-with-openjpeg-2.1.patch \ diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index 97fddc2a8..5c892f197 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -117,16 +117,20 @@ in C/C++.") (base32 "1n1phk8r3l8icqrrap4czplnylawa0ddc2cc4cgdz46x3lrkybz6")) (modules '((guix build utils))) + (patches (search-patches "mozjs24-aarch64-support.patch")) (snippet ;; Fix incompatibility with Perl 5.22+. '(substitute* '("js/src/config/milestone.pl") (("defined\\(@TEMPLATE_FILE)") "@TEMPLATE_FILE"))))) (arguments - '(;; XXX: parallel build fails, lacking: + `(;; XXX: parallel build fails, lacking: ;; mkdir -p "system_wrapper_js/" #:parallel-build? #f #:phases (modify-phases %standard-phases + (add-after 'unpack 'delete-timedout-test + ;; This test times out on slower hardware + (lambda _ (delete-file "js/src/jit-test/tests/basic/bug698584.js"))) (replace 'configure (lambda* (#:key outputs #:allow-other-keys) @@ -139,7 +143,11 @@ in C/C++.") (string-append "--prefix=" out) "--with-system-nspr" "--enable-system-ffi" - "--enable-threadsafe")))))))) + "--enable-threadsafe" + ,@(if (string=? "aarch64-linux" + (%current-system)) + '("--host=aarch64-unknown-linux-gnu") + '()))))))))) (native-inputs `(("perl" ,perl) ("pkg-config" ,pkg-config) diff --git a/gnu/packages/patches/mozjs24-aarch64-support.patch b/gnu/packages/patches/mozjs24-aarch64-support.patch new file mode 100644 index 000000000..9dca8e500 --- /dev/null +++ b/gnu/packages/patches/mozjs24-aarch64-support.patch @@ -0,0 +1,21 @@ +This patch is sourced from Debian's mozjs24 patch set. + +Description: Add arm64 support +Author: Andreas Schwab +Origin: vendor, https://build.opensuse.org/package/view_file/openSUSE:Factory/mozjs17/mozjs-aarch64-support.patch +Forwarded: no +Last-Update: 2014-01-03 + +Index: b/mfbt/double-conversion/utils.h +=================================================================== +--- a/mfbt/double-conversion/utils.h ++++ b/mfbt/double-conversion/utils.h +@@ -58,7 +58,7 @@ + defined(__mips__) || defined(__powerpc__) || \ + defined(__sparc__) || defined(__sparc) || defined(__s390__) || \ + defined(__SH4__) || defined(__alpha__) || \ +- defined(_MIPS_ARCH_MIPS32R2) ++ defined(_MIPS_ARCH_MIPS32R2) || defined(__aarch64__) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 + #elif defined(_M_IX86) || defined(__i386__) || defined(__i386) + #if defined(_WIN32) -- cgit v1.3 From a64b7da5133b1b0f70ba873cab9b3bebfd84a58e Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Mon, 27 Mar 2017 16:19:39 +0300 Subject: gnu: mozjs@17: Add support for aarch64-linux. * gnu/packages/gnuzilla.scm (mozjs@17)[source]: Add patch. [arguments]: Add phase deleting slow test, add configure argument for building on aarch64-linux. * gnu/packages/patches/mozjs17-aarch64-support.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + gnu/packages/gnuzilla.scm | 12 ++++- gnu/packages/patches/mozjs17-aarch64-support.patch | 60 ++++++++++++++++++++++ 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/patches/mozjs17-aarch64-support.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 9231870a9..44462e4f5 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -767,6 +767,7 @@ dist_patch_DATA = \ %D%/packages/patches/mpc123-initialize-ao.patch \ %D%/packages/patches/mplayer2-theora-fix.patch \ %D%/packages/patches/module-init-tools-moduledir.patch \ + %D%/packages/patches/mozjs17-aarch64-support.patch \ %D%/packages/patches/mozjs24-aarch64-support.patch \ %D%/packages/patches/multiqc-fix-git-subprocess-error.patch \ %D%/packages/patches/mumps-build-parallelism.patch \ diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index 5c892f197..2586cf60f 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -69,6 +69,7 @@ (sha256 (base32 "1fig2wf4f10v43mqx67y68z6h77sy900d1w0pz9qarrqx57rc7ij")) + (patches (search-patches "mozjs17-aarch64-support.patch")) (modules '((guix build utils))) (snippet ;; Fix incompatibility with Perl 5.22+. @@ -83,6 +84,9 @@ ;; mkdir -p "system_wrapper_js/" #:parallel-build? #f #:phases + (alist-cons-after 'unpack 'delete-timedout-test + ;; This test times out on slower hardware. + (lambda _ (delete-file "js/src/jit-test/tests/basic/bug698584.js")) (alist-cons-before 'configure 'chdir (lambda _ @@ -95,8 +99,12 @@ (setenv "SHELL" (which "sh")) (setenv "CONFIG_SHELL" (which "sh")) (zero? (system* - "./configure" (string-append "--prefix=" out))))) - %standard-phases)))) + "./configure" (string-append "--prefix=" out) + ,@(if (string=? "aarch64-linux" + (%current-system)) + '("--host=aarch64-unknown-linux-gnu") + '()))))) + %standard-phases))))) (home-page "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey") (synopsis "Mozilla javascript engine") diff --git a/gnu/packages/patches/mozjs17-aarch64-support.patch b/gnu/packages/patches/mozjs17-aarch64-support.patch new file mode 100644 index 000000000..51e2e306d --- /dev/null +++ b/gnu/packages/patches/mozjs17-aarch64-support.patch @@ -0,0 +1,60 @@ +https://build.opensuse.org/package/view_file/openSUSE:Factory/mozjs17/mozjs-aarch64-support.patch + +index c071c33..90764c3 100644 +--- a/js/src/assembler/jit/ExecutableAllocator.h ++++ b/js/src/assembler/jit/ExecutableAllocator.h +@@ -382,6 +382,12 @@ public: + { + reprotectRegion(start, size, Executable); + } ++#elif WTF_CPU_AARCH64 && WTF_PLATFORM_LINUX ++ static void cacheFlush(void* code, size_t size) ++ { ++ intptr_t end = reinterpret_cast(code) + size; ++ __builtin___clear_cache(reinterpret_cast(code), reinterpret_cast(end)); ++ } + #else + static void makeWritable(void*, size_t) {} + static void makeExecutable(void*, size_t) {} +diff --git a/js/src/assembler/wtf/Platform.h b/js/src/assembler/wtf/Platform.h +index 0c84896..e8763a7 100644 +--- a/js/src/assembler/wtf/Platform.h ++++ b/js/src/assembler/wtf/Platform.h +@@ -325,6 +325,10 @@ + #define WTF_THUMB_ARCH_VERSION 0 + #endif + ++/* CPU(AArch64) - 64-bit ARM */ ++#if defined(__aarch64__) ++#define WTF_CPU_AARCH64 1 ++#endif + + /* WTF_CPU_ARMV5_OR_LOWER - ARM instruction set v5 or earlier */ + /* On ARMv5 and below the natural alignment is required. +diff --git a/js/src/configure.in b/js/src/configure.in +index 15605b2..19fd704 100644 +--- a/js/src/configure.in ++++ b/js/src/configure.in +@@ -1121,6 +1121,10 @@ arm*) + CPU_ARCH=arm + ;; + ++aarch64) ++ CPU_ARCH=aarch64 ++ ;; ++ + mips|mipsel) + CPU_ARCH="mips" + ;; +diff --git a/mfbt/double-conversion/utils.h b/mfbt/double-conversion/utils.h +index 0eec2d9..fe26dab 100644 +--- a/mfbt/double-conversion/utils.h ++++ b/mfbt/double-conversion/utils.h +@@ -58,6 +58,7 @@ + defined(__mips__) || defined(__powerpc__) || \ + defined(__sparc__) || defined(__sparc) || defined(__s390__) || \ + defined(__SH4__) || defined(__alpha__) || \ ++ defined(__aarch64__) || \ + defined(_MIPS_ARCH_MIPS32R2) + #define DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS 1 + #elif defined(_M_IX86) || defined(__i386__) || defined(__i386) -- cgit v1.3 From 402b03e620fc14eda06b4c80121ecbf627c0740d Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 30 Mar 2017 23:36:05 +0200 Subject: gnu: ruby-concurrent: Work around test failure on ARM. * gnu/packages/patches/ruby-concurrent-test-arm.patch: New file. * gnu/packages/ruby.scm (ruby-concurrent)[source](patches): Add it. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + .../patches/ruby-concurrent-test-arm.patch | 36 ++++++++++++++++++++++ gnu/packages/ruby.scm | 5 +-- 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/patches/ruby-concurrent-test-arm.patch (limited to 'gnu/local.mk') diff --git a/gnu/local.mk b/gnu/local.mk index 69e4b9960..be47e7467 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -913,6 +913,7 @@ dist_patch_DATA = \ %D%/packages/patches/rpm-CVE-2014-8118.patch \ %D%/packages/patches/rsem-makefile.patch \ %D%/packages/patches/ruby-concurrent-ignore-broken-test.patch \ + %D%/packages/patches/ruby-concurrent-test-arm.patch \ %D%/packages/patches/ruby-puma-ignore-broken-test.patch \ %D%/packages/patches/ruby-rack-ignore-failing-test.patch \ %D%/packages/patches/ruby-tzinfo-data-ignore-broken-test.patch\ diff --git a/gnu/packages/patches/ruby-concurrent-test-arm.patch b/gnu/packages/patches/ruby-concurrent-test-arm.patch new file mode 100644 index 000000000..75e636556 --- /dev/null +++ b/gnu/packages/patches/ruby-concurrent-test-arm.patch @@ -0,0 +1,36 @@ +Work around two test suite failures on ARM: + + https://github.com/ruby-concurrency/concurrent-ruby/issues/547 + +The regexps here assume addresses like "0x1234" but on ARM (32-bit) +we get something like "0x-7db1e810" (notice the dash). + +diff --git a/spec/concurrent/edge/future_spec.rb b/spec/concurrent/edge/future_spec.rb +index a48fd29..4344d7e 100644 +--- b/spec/concurrent/edge/future_spec.rb ++++ a/spec/concurrent/edge/future_spec.rb +@@ -322,9 +322,9 @@ + four = three.delay.then(&:succ) + + # meaningful to_s and inspect defined for Future and Promise +- expect(head.to_s).to match /<#Concurrent::Edge::Future:0x[\da-f]+ pending>/ ++ expect(head.to_s).to match /<#Concurrent::Edge::Future:0x-?[\da-f]+ pending>/ + expect(head.inspect).to( +- match(/<#Concurrent::Edge::Future:0x[\da-f]+ pending blocks:\[<#Concurrent::Edge::ThenPromise:0x[\da-f]+ pending>\]>/)) ++ match(/<#Concurrent::Edge::Future:0x-?[\da-f]+ pending blocks:\[<#Concurrent::Edge::ThenPromise:0x-?[\da-f]+ pending>\]>/)) + + # evaluates only up to three, four is left unevaluated + expect(three.value!).to eq 3 +diff --git a/spec/concurrent/map_spec.rb b/spec/concurrent/map_spec.rb +index 13fd5b7..1c82ebe 100644 +--- b/spec/concurrent/map_spec.rb ++++ a/spec/concurrent/map_spec.rb +@@ -827,7 +827,7 @@ + end + + it '#inspect' do +- regexp = /\A#\Z/i ++ regexp = /\A#\Z/i + expect(Concurrent::Map.new.inspect).to match(regexp) + expect((Concurrent::Map.new {}).inspect).to match(regexp) + map = Concurrent::Map.new diff --git a/gnu/packages/ruby.scm b/gnu/packages/ruby.scm index 4d839bcdf..0a710ec5f 100644 --- a/gnu/packages/ruby.scm +++ b/gnu/packages/ruby.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2014, 2015 Pjotr Prins -;;; Copyright © 2014, 2015, 2016 Ludovic Courtès +;;; Copyright © 2014, 2015, 2016, 2017 Ludovic Courtès ;;; Copyright © 2014, 2015 Mark H Weaver ;;; Copyright © 2014, 2015 David Thompson ;;; Copyright © 2015 Ricardo Wurmus @@ -4102,7 +4102,8 @@ call.") "1x3g2admp14ykwfxidsicqbhlfsnxh9wyc806np4i15hws4if1d8")) ;; Exclude failing test reported at ;; https://github.com/ruby-concurrency/concurrent-ruby/issues/534 - (patches (search-patches "ruby-concurrent-ignore-broken-test.patch")))) + (patches (search-patches "ruby-concurrent-ignore-broken-test.patch" + "ruby-concurrent-test-arm.patch")))) (build-system ruby-build-system) (arguments `(#:test-target "spec" -- cgit v1.3