;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Taylan Ulrich Bayırlı/Kammer ;;; Copyright © 2016, 2018, 2020 Ricardo Wurmus ;;; Copyright © 2016 Theodoros Foradis ;;; Copyright © 2016 Danny Milosavljevic ;;; Copyright © 2017 Rene Saavedra ;;; Copyright © 2017 Efraim Flashner ;;; Copyright © 2017 Thomas Danckaert ;;; Copyright © 2018, 2020, 2021 Tobias Geerinckx-Rice ;;; Copyright © 2019 Arun Isaac ;;; Copyright © 2022 Marius Bakke ;;; Copyright © 2023 Malte Frank Gerdes ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (gnu packages wxwidgets) #:use-module (guix packages) #:use-module (guix gexp) #:use-module (guix download) #:use-module (guix git-download) #:use-module ((guix licenses) #:prefix l:) #:use-module (guix build-system glib-or-gtk) #:use-module (guix build-system perl) #:use-module (guix build-system python) #:use-module (guix utils) #:use-module (gnu packages) #:use-module (gnu packages check) #:use-module (gnu packages curl) #:use-module (gnu packages compression) #:use-module (gnu packages databases) #:use-module (gnu packages freedesktop) #:use-module (gnu packages gl) #:use-module (gnu packages gnome) #:use-module (gnu packages gstreamer) #:use-module (gnu packages gtk) #:use-module (gnu packages image) #:use-module (gnu packages pcre) #:use-module (gnu packages perl) #:use-module (gnu packages perl-check) #:use-module (gnu packages photo) #:use-module (gnu packages pkg-config) #:use-module (gnu packages python) #:use-module (gnu packages python-xyz) #:use-module (gnu packages sdl) #:use-module (gnu packages video) #:use-module (gnu packages web) #:use-module (gnu packages webkit) #:use-module (gnu packages xml) #:use-module (gnu packages xorg)) (define-public wxwidgets (package (name "wxwidgets") (version "3.2.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/wxWidgets/wxWidgets/" "releases/download/v" version "/wxWidgets-" version ".tar.bz2")) (sha256 (base32 "0rpsyph7l7kmpld376y0940la3c94y5vdpxmbkj8isqknimrfaf2")) (modules '((guix build utils) (ice-9 ftw) (srfi srfi-26))) (snippet '(begin ;; wxWidgets bundles third-party code in the "3rdparty" directory as ;; well as the "src" directory. Remove external components that are ;; not required. (let ((preserved-3rdparty '("nanosvg")) ;; The src directory contains a mixture of third party libraries ;; and similarly-named integration code. Cautiously use a ;; blacklist approach here. (bundled-src '("expat" "jpeg" "png" "tiff" "zlib"))) (with-directory-excursion "3rdparty" (for-each delete-file-recursively (scandir "." (negate (cut member <> (append '("." "..") preserved-3rdparty)))))) (with-directory-excursion "src" (for-each delete-file-recursively bundled-src))))))) (build-system glib-or-gtk-build-system) (inputs (list catch-framework curl expat glu gstreamer gst-plugins-base gtk+ libjpeg-turbo libmspack libnotify libpng libsecret libsm libtiff mesa pcre2 sdl2 shared-mime-info webkitgtk-with-libsoup2 xdg-utils zlib)) (native-inputs (list pkg-config)) (arguments (list #:configure-flags #~'("--with-libmspack" "--with-regex" "--with-sdl" "--enable-gui" "--enable-mediactrl" "--enable-webview") #:make-flags #~(list (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib")) #:tests? #f ;TODO #:phases #~(modify-phases %standard-phases (add-after 'unpack 'refer-to-inputs (lambda* (#:key inputs #:allow-other-keys) (let ((catch (search-input-file inputs "include/catch.hpp")) (mime (search-input-directory inputs "share/mime")) (xdg-open (search-input-file inputs "bin/xdg-open"))) (install-file catch "3rdparty/catch/include/") (substitute* "src/unix/utilsx11.cpp" (("wxExecute\\(xdg_open \\+") (string-append "wxExecute(\"" xdg-open "\""))) (substitute* "src/unix/mimetype.cpp" (("/usr(/local)?/share/mime") mime))))) (replace 'configure (lambda* (#:key native-inputs inputs configure-flags #:allow-other-keys) (let ((sh (search-input-file (or native-inputs inputs) "bin/sh"))) ;; The configure script does not understand some of the default ;; options of gnu-build-system, so run it "by hand". (apply invoke "./configure" (string-append "SHELL=" sh) (string-append "CONFIG_SHELL=" sh) (string-append "--prefix=" #$output) configure-flags))))))) (home-page "https://www.wxwidgets.org/") (synopsis "Widget toolkit for creating graphical user interfaces") (description "wxWidgets is a C++ library that lets developers create applications with a graphical user interface. It has language bindings for Python, Perl, Ruby and many other languages.") (license (list l:lgpl2.0+ (l:fsf-free "file://doc/license.txt"))))) (define-public wxwidgets-gtk2 (package/inherit wxwidgets (name "wxwidgets-gtk2") (inputs (modify-inputs (package-inputs wxwidgets) (delete "gtk+") (prepend gtk+-2))) (arguments (substitute-keyword-arguments (package-arguments wxwidgets) ((#:configure-flags flags #~'()) #~(append #$flags '("--with-gtk=2"))))))) (define-public wxwidgets-3.0 (package (inherit wxwidgets) (version "3.0.5.1") (source (origin (method url-fetch) (uri (string-append "https://github.com/wxWidgets/wxWidgets/" "releases/download/v" version "/wxWidgets-" version ".tar.bz2")) (sha256 (base32 "01y89999jw5q7njrhxajincx7lydls6yq37ikazjryssrxrnw3s4")))) (arguments `(#:configure-flags '("--with-regex" "--with-libmspack" "--with-sdl" "--enable-webview" "--enable-webkit" "--enable-webviewwebkit" ,@(if (string=? "aarch64-linux" (%current-system)) '("--build=aarch64-unknown-linux-gnu") '())) #:make-flags (list (string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out") "/lib")) ;; No 'check' target. #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'refer-to-inputs (lambda* (#:key inputs #:allow-other-keys) (let ((mime (search-input-directory inputs "share/mime")) (xdg-open (search-input-file inputs "bin/xdg-open"))) (substitute* "src/unix/utilsx11.cpp" (("wxExecute\\(xdg_open \\+") (string-append "wxExecute(\"" xdg-open "\""))) (substitute* "src/unix/mimetype.cpp" (("/usr(/local)?/share/mime") mime)))))))))) (define-public wxwidgets-gtk2-3.0 (package/inherit wxwidgets-3.0 (name "wxwidgets-gtk2") (inputs (modify-inputs (package-inputs wxwidgets-3.0) (delete "gtk+") (prepend gtk+-2))) (arguments (substitute-keyword-arguments (package-arguments wxwidgets-3.0) ((#:configure-flags flags #~'()) #~(append #$flags '("--with-gtk=2"))))))) (define-public wxwidgets-2 (package (inherit wxwidgets) (version "2.8.12") (source (origin (method url-fetch) (uri (string-append "https://github.com/wxWidgets/wxWidgets/" "releases/download/v" version "/wxGTK-" version ".tar.gz")) (sha256 (base32 "1gjs9vfga60mk4j4ngiwsk9h6c7j22pw26m3asxr1jwvqbr8kkqk")))) (inputs `(("gtk" ,gtk+-2) ("libjpeg" ,libjpeg-turbo) ("libtiff" ,libtiff) ("libmspack" ,libmspack) ("sdl" ,sdl) ("unixodbc" ,unixodbc))) (arguments `(#:configure-flags '("--enable-unicode" "--with-regex=sys" "--with-sdl") #:make-flags (list (string-append "LDFLAGS=-Wl,-rpath=" (assoc-ref %outputs "out") "/lib")) ;; No 'check' target. #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'ignore-narrowing-errors (lambda _ (substitute* "configure" (("-Wall") "-Wall -Wno-narrowing")) #t))))))) (define-public python-wxpython (package (name "python-wxpython") (version "4.2.0") (source (origin (method url-fetch) (uri (pypi-uri "wxPython" version)) (sha256 (base32 "1iw6xp76b3fmdqwbqmsx9i1razzpfki5z1hq6l8mszlxa32fng36")) (modules '((guix build utils))) (snippet '(begin ;; Remove bundled wxwidgets (delete-file-recursively "ext/wxWidgets") #t)))) (build-system python-build-system) (arguments `(#:phases (modify-phases %standard-phases (add-before 'build 'configure (lambda* (#:key inputs #:allow-other-keys) (setenv "WXWIN" (assoc-ref inputs "wxwidgets")) ;; Copy the waf executable to the source directory since it needs ;; to be in a writable directory. (copy-file (search-input-file inputs "/bin/waf") "bin/waf") (setenv "WAF" "bin/waf") ;; The build script tries to copy license files from the ;; wxwidgets source tree. Prevent it. (substitute* "wscript" (("updateLicenseFiles\\(cfg\\)" all) (string-append "#" all))) ;; The build script tries to write to demo/version.py. So, we set ;; correct write permissions. (chmod "demo/version.py" #o644) ;; Build only the python bindings, not wxwidgets also. (substitute* "setup.py" (("'build']") "'build_py', '--use_syswx']")) #t))))) (inputs (list gtk+ wxwidgets)) (native-inputs (list pkg-config python-waf)) (propagated-inputs (list python-attrdict python-numpy python-pillow python-six)) (home-page "https://wxpython.org/") (synopsis "Cross platform GUI toolkit for Python") (description "wxPython is a cross-platform GUI toolkit for the Python programming language. It is implemented as a set of Python extension modules that wrap the GUI components of the popular wxWidgets cross platform C++ library. In most cases, wxPython uses the native widgets on each platform to provide a 100% native look and feel for the application.") (license l:wxwindows3.1+))) (define-public wxsvg (package (name "wxsvg") (version "1.5.24") (source (origin (method url-fetch) (uri (string-append "mirror://sourceforge/wxsvg/wxsvg/" version "/wxsvg-" version ".tar.bz2")) (sha256 (base32 "10i4bv1bfbfgrrpxvfdjrr5svgn64v471lkcl2pzx9fhz28k4ixf")))) (build-system glib-or-gtk-build-system) (inputs (list wxwidgets cairo ffmpeg)) (native-inputs (list pkg-config)) (propagated-inputs ;; In Requires.private of libwxsvg.pc. (list libexif pango)) (synopsis "C++ library to create, manipulate and render SVG files") (description "wxSVG is a C++ library to create, manipulate and render @dfn{Scalable Vector Graphics} (SVG) files with the wxWidgets toolkit.") (home-page "http://wxsvg.sourceforge.net") ;; wxSVG is licenced under the "wxWindows library licence", which is ;; the LGPL2.0+, with a few extra permissions. (license (list l:lgpl2.0+ (l:fsf-free "file://COPYING"))))) (define-public perl-alien-wxwidgets (package (name "perl-alien-wxwidgets") (version "0.69") (source (origin (method url-fetch) (uri (string-append "mirror://cpan/authors/id/M/MD/MDOOTSON/Alien-wxWidgets-" version ".tar.gz")) (sha256 (base32 "0jg2dmkzhj03f6b0vmv597yryfw9cclsdn9ynvvlrzzgpd5lw8jk")))) (build-system perl-build-system) (native-inputs (list perl-lwp-protocol-https perl-module-build perl-test-pod perl-test-pod-coverage wxwidgets)) (propagated-inputs (list perl-module-pluggable)) (home-page "https://metacpan.org/release/Alien-wxWidgets") (synopsis "Perl module for wxWidgets binaries") (description "Alien::wxWidgets is a Perl module for detecting and getting configuration settings from an installed wxWidgets package.") (license l:perl-license))) (define-public perl-wx (package (name "perl-wx") (version "0.9932") (source (origin (method url-fetch) (uri (string-append "mirror://cpan/authors/id/M/MD/MDOOTSON/Wx-" version ".tar.gz")) (sha256 (base32 "0w0vcpk8bmklh16c0z1vxgipnmvdw7cckcmay7k7cihgb99vdz8w")))) (build-system perl-build-system) (arguments '(#:phases (modify-phases %standard-phases (add-before 'check 'pre-check (lambda _ ;; Tests require a running X server. (system "Xvfb :1 &") (setenv "DISPLAY" ":1")))))) (native-inputs (list perl-alien-wxwidgets perl-extutils-xspp xorg-server-for-tests wxwidgets)) (propagated-inputs (list perl-alien-wxwidgets)) (home-page "https://metacpan.org/release/Wx") (synopsis "Perl interface to the wxWidgets cross-platform GUI toolkit") (description "The Wx module is a Perl wrapper for the wxWidgets cross-platform GUI toolkit.") (license l:perl-license)))