From a5d4c96b8d90b8bb87e07bd6a7be78991db91bc9 Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Fri, 13 Apr 2018 09:45:55 +0300 Subject: [PATCH] gnu: freeimage: Remove bundled libraries. This fixes bug #28261. * gnu/packages/image.scm (freeimage)[source]: Remove bundled libraries. [arguments]: Replace 'configure phase, add phase to replace unbuildable files with empty ones. Adjust makeflags to new inputs. [native-inputs]: Add pkg-config. [inputs]: Add libjpeg, libjxr, libpng, libraw, libtiff, libwebp, openexr, openjpeg, zlib. [supported-systems]: Add mips64el-linux as a supported system. --- gnu/packages/image.scm | 50 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index 1234203feb..e27b9223dd 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -55,6 +55,7 @@ (define-module (gnu packages image) #:use-module (gnu packages maths) #:use-module (gnu packages mcrypt) #:use-module (gnu packages perl) + #:use-module (gnu packages photo) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages xml) @@ -717,26 +718,63 @@ (define-public freeimage (sha256 (base32 "12bz57asdcfsz3zr9i9nska0fb6h3z2aizy412qjqkixkginbz7v")) - (patches (search-patches "freeimage-CVE-2015-0852.patch" + (modules '((guix build utils))) + (snippet + '(begin + (for-each + (lambda (dir) + (delete-file-recursively (string-append "Source/" dir))) + '("LibJPEG" "LibJXR" "LibOpenJPEG" "LibPNG" "LibRawLite" + "LibWebP" "OpenEXR" "ZLib")))) + (patches (search-patches "freeimage-unbundle.patch" + "freeimage-CVE-2015-0852.patch" "freeimage-CVE-2016-5684.patch" "freeimage-fix-build-with-gcc-5.patch")))) (build-system gnu-build-system) (arguments '(#:phases (modify-phases %standard-phases - (delete 'configure) + ;; According to Fedora these files depend on private headers, but their + ;; presence is required for building, so we replace them with empty files. + (add-after 'unpack 'delete-unbuildable-files + (lambda _ + (for-each (lambda (file) + (delete-file file) + (close (open file O_CREAT))) + '("Source/FreeImage/PluginG3.cpp" + "Source/FreeImageToolkit/JPEGTransform.cpp")) + #t)) + ;; These scripts generate the Makefiles. + (replace 'configure + (lambda _ + (invoke "sh" "gensrclist.sh") + (invoke "sh" "genfipsrclist.sh"))) (add-before 'build 'patch-makefile (lambda* (#:key outputs #:allow-other-keys) (substitute* "Makefile.gnu" (("/usr") (assoc-ref outputs "out")) (("-o root -g root") "")) #t))) - #:make-flags '("CC=gcc") + #:make-flags + (list "CC=gcc" + ;; We need '-fpermissive' for Source/FreeImage.h. + ;; libjxr doesn't have a pkg-config file. + (string-append "CFLAGS+=-O2 -fPIC -fvisibility=hidden -fpermissive " + "-I" (assoc-ref %build-inputs "libjxr") "/include/jxrlib")) #:tests? #f)) ; no check target (native-inputs - `(("unzip" ,unzip))) - ;; Fails to build on MIPS due to assembly code in the source. - (supported-systems (delete "mips64el-linux" %supported-systems)) + `(("pkg-config" ,pkg-config) + ("unzip" ,unzip))) + (inputs + `(("libjpeg" ,libjpeg) + ("libjxr" ,libjxr) + ("libpng" ,libpng) + ("libraw" ,libraw) + ("libtiff" ,libtiff) + ("libwebp" ,libwebp) + ("openexr" ,openexr) + ("openjpeg" ,openjpeg) + ("zlib" ,zlib))) (synopsis "Library for handling popular graphics image formats") (description "FreeImage is a library for developers who would like to support popular