From f1746b8be0fade9cc759715aa5f80375c3abd19a Mon Sep 17 00:00:00 2001 From: rennes Date: Wed, 1 Mar 2017 19:19:01 -0600 Subject: [PATCH] gnu: fontconfig: Fix for PATH_MAX. * gnu/packages/patches/fontconfig-path-max.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 3 +- gnu/packages/fontutils.scm | 90 +++++++++--------- gnu/packages/patches/fontconfig-path-max.patch | 124 +++++++++++++++++++++++++ 3 files changed, 172 insertions(+), 45 deletions(-) create mode 100644 gnu/packages/patches/fontconfig-path-max.patch diff --git a/gnu/local.mk b/gnu/local.mk index f356a124b..dd0ff795e 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 @@ -556,6 +556,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-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 15109bfe1..6420af50e 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 Efraim Flashner +;;; Copyright © 2017 Rene Saavedra ;;; ;;; This file is part of GNU Guix. ;;; @@ -222,47 +223,48 @@ fonts to/from the WOFF2 format.") (define-public fontconfig (package - (name "fontconfig") - (version "2.12.1") - (source (origin - (method url-fetch) - (uri (string-append - "https://www.freedesktop.org/software/fontconfig/release/fontconfig-" - version ".tar.bz2")) - (sha256 (base32 - "1wy7svvp7df6bjpg1m5vizb3ngd7rhb20vpclv3x3qa71khs6jdl")))) - (build-system gnu-build-system) - (propagated-inputs `(("expat" ,expat) - ("freetype" ,freetype))) - (inputs `(("gs-fonts" ,gs-fonts))) - (native-inputs - `(("pkg-config" ,pkg-config))) - (arguments - `(#:configure-flags - (list "--with-cache-dir=/var/cache/fontconfig" - ;; register gs-fonts as default fonts - (string-append "--with-default-fonts=" - (assoc-ref %build-inputs "gs-fonts") - "/share/fonts") - - ;; Register fonts from user and system profiles. - (string-append "--with-add-fonts=" - "~/.guix-profile/share/fonts," - "/run/current-system/profile/share/fonts") - - ;; python is not actually needed - "PYTHON=false") - #:phases - (modify-phases %standard-phases - (replace 'install - (lambda _ - ;; Don't try to create /var/cache/fontconfig. - (zero? (system* "make" "install" - "fc_cachedir=$(TMPDIR)" - "RUN_FC_CACHE_TEST=false"))))))) - (synopsis "Library for configuring and customizing font access") - (description - "Fontconfig can discover new fonts when installed automatically; + (name "fontconfig") + (version "2.12.1") + (source (origin + (method url-fetch) + (uri (string-append + "https://www.freedesktop.org/software/fontconfig/release/fontconfig-" + version ".tar.bz2")) + (sha256 (base32 + "1wy7svvp7df6bjpg1m5vizb3ngd7rhb20vpclv3x3qa71khs6jdl")) + (patches (list (search-patch "fontconfig-path-max.patch"))))) + (build-system gnu-build-system) + (propagated-inputs `(("expat" ,expat) + ("freetype" ,freetype))) + (inputs `(("gs-fonts" ,gs-fonts))) + (native-inputs + `(("pkg-config" ,pkg-config))) + (arguments + `(#:configure-flags + (list "--with-cache-dir=/var/cache/fontconfig" + ;; register gs-fonts as default fonts + (string-append "--with-default-fonts=" + (assoc-ref %build-inputs "gs-fonts") + "/share/fonts") + + ;; Register fonts from user and system profiles. + (string-append "--with-add-fonts=" + "~/.guix-profile/share/fonts," + "/run/current-system/profile/share/fonts") + + ;; python is not actually needed + "PYTHON=false") + #:phases + (modify-phases %standard-phases + (replace 'install + (lambda _ + ;; Don't try to create /var/cache/fontconfig. + (zero? (system* "make" "install" + "fc_cachedir=$(TMPDIR)" + "RUN_FC_CACHE_TEST=false"))))))) + (synopsis "Library for configuring and customizing font access") + (description + "Fontconfig can discover new fonts when installed automatically; perform font name substitution, so that appropriate alternative fonts can be selected if fonts are missing; identify the set of fonts required to completely cover a set of languages; @@ -271,9 +273,9 @@ efficiently and quickly find needed fonts among the set of installed fonts; be used in concert with the X Render Extension and FreeType to implement high quality, anti-aliased and subpixel rendered text on a display.") ; The exact license is more X11-style than BSD-style. - (license (license:non-copyleft "file://COPYING" - "See COPYING in the distribution.")) - (home-page "http://www.freedesktop.org/wiki/Software/fontconfig"))) + (license (license:non-copyleft "file://COPYING" + "See COPYING in the distribution.")) + (home-page "http://www.freedesktop.org/wiki/Software/fontconfig"))) (define-public t1lib (package 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 + -- 2.11.0