From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms5.migadu.com with LMTPS id QDIDOjRl7WI/FAAAbAwnHQ (envelope-from ) for ; Fri, 05 Aug 2022 20:45:09 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id kD7jOTRl7WLhMwEAauVa8A (envelope-from ) for ; Fri, 05 Aug 2022 20:45:08 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 6CF872B482 for ; Fri, 5 Aug 2022 20:45:08 +0200 (CEST) Received: from localhost ([::1]:48874 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oK2Jn-0000XL-Jo for larch@yhetil.org; Fri, 05 Aug 2022 14:45:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52624) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oK2Ji-0000X6-97 for bug-guix@gnu.org; Fri, 05 Aug 2022 14:45:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:42600) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oK2Jh-0002Pm-Ub for bug-guix@gnu.org; Fri, 05 Aug 2022 14:45:01 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1oK2Jh-0006sL-Nx for bug-guix@gnu.org; Fri, 05 Aug 2022 14:45:01 -0400 X-Loop: help-debbugs@gnu.org Subject: bug#55657: libgccjit is unusable Resent-From: Liliana Marie Prikler Original-Sender: "Debbugs-submit" Resent-CC: bug-guix@gnu.org Resent-Date: Fri, 05 Aug 2022 18:45:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 55657 X-GNU-PR-Package: guix X-GNU-PR-Keywords: To: Andrew Whatson Cc: John Kehayias , Tobias Geerinckx-Rice , "remco@remworks.net" , "55657@debbugs.gnu.org" <55657@debbugs.gnu.org> Received: via spool by 55657-submit@debbugs.gnu.org id=B55657.165972508526387 (code B ref 55657); Fri, 05 Aug 2022 18:45:01 +0000 Received: (at 55657) by debbugs.gnu.org; 5 Aug 2022 18:44:45 +0000 Received: from localhost ([127.0.0.1]:60582 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oK2JQ-0006rW-RU for submit@debbugs.gnu.org; Fri, 05 Aug 2022 14:44:45 -0400 Received: from mail-ej1-f68.google.com ([209.85.218.68]:36589) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oK2JN-0006rF-Ms for 55657@debbugs.gnu.org; Fri, 05 Aug 2022 14:44:43 -0400 Received: by mail-ej1-f68.google.com with SMTP id m4so6512565ejr.3 for <55657@debbugs.gnu.org>; Fri, 05 Aug 2022 11:44:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:subject:from:to:cc:date:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=ObrZxY9PVBNjqOA/6Dqy/nlLnNwzuHjPjgtVlSM80Vc=; b=AZbyKjaaf1zgorMeeUXwUwlDrWoS+k6o2MjsBb4ezMt0VVhAEf/d55oobsiATwAYk2 Kko0bxsv3EXVoB4EDp6tv8/j1ssitExaaPVYeDpiVuRl2d9PScwZVuoLaFJgMyJizIx9 FzvR8XSvU63dUPU7qoyKeZdTf8khthf+yz4LgyfF03uz3Zuu52hmSqYahrAvT6+9vSb6 fl8e1R1dVUpEwjGHylcX/BFdGUElFlkmQ7HxS8iY8rwOI9UzTqnGO5DjMWINNgZmqLrG ett/GCoetqMiz3IDq1chvAF2cFtIlSvPrf6DomtMkrNL3/z9TOZb/hZ46awzCja1Z0tP 0kyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:subject:from:to:cc:date:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=ObrZxY9PVBNjqOA/6Dqy/nlLnNwzuHjPjgtVlSM80Vc=; b=cQWKla8lqMgTc/XXW8IdAAfrPu69KuVK8qnMdVJDNg+FHLcB1OQkhSvAInjnEvNUtS F+Ts3ipkmOyEpg/ykPgHmVrEieAMP8rAcXORIzxnNq8LikGhgJObG0BmhDcGfDMHeVUN JnskZ3q1dsZHHDtJnvAp/S8Fx9k6vfvS1SvPyv93KL2a0BtrTvSrJEY77Lkvlt212wiA LIf2joYyqa7Ag5d5L7q8s74GqZyyQG7KqEo2948SIsYcDQNpeBbLXfK65gTN5BnnRoIM G1Sh1skjeljqOpEq9XT+fWsuicW1mVDTO/Ld99ZagOS9sGEw2TWXUFVSbWKGsHhpFX7t KuMg== X-Gm-Message-State: ACgBeo1A5mXSci4fgiVd+6syO+XrrGhsSfJI91asr+1NcYKM5gFiKlus sbaDxSET1FthY+DGAa+vPRU= X-Google-Smtp-Source: AA6agR6QN2mkizm6krkEGOzOY69xZmjIKWup8/Q+jq2h1GzT6/jx40/o8HZZwT9HosoncW3ppqj9Kg== X-Received: by 2002:a17:907:2724:b0:730:d36c:d5f6 with SMTP id d4-20020a170907272400b00730d36cd5f6mr6287816ejl.277.1659725075583; Fri, 05 Aug 2022 11:44:35 -0700 (PDT) Received: from nijino.fritz.box (85-127-52-93.dsl.dynamic.surfer.at. [85.127.52.93]) by smtp.gmail.com with ESMTPSA id t5-20020a170906268500b0072f5c1f05a4sm1859995ejc.44.2022.08.05.11.44.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Aug 2022 11:44:35 -0700 (PDT) Message-ID: <65497ff154c8bed606d30e5a367e8f17b1a53cc7.camel@gmail.com> From: Liliana Marie Prikler Date: Fri, 05 Aug 2022 20:44:33 +0200 In-Reply-To: References: <-WzfXRgBunfV6CTG4v5TA24Vk7Vty4mGqGpQdTTU2OkJpt-i1gM2iOOEDl9ODBZd1xuARNui4gnp1gZfkPtmHwlSwMmdagPc2fEXJyCWRJI=@protonmail.com> <67ca146d031c320b484979c6aa5a89b9c9b8472d.camel@gmail.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.42.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-guix@gnu.org List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+larch=yhetil.org@gnu.org Sender: "bug-Guix" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1659725108; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=ObrZxY9PVBNjqOA/6Dqy/nlLnNwzuHjPjgtVlSM80Vc=; b=jcRvlfmsabFaS+IBjJtJP92y8eoZxKrMX0hHDoC4m9EMEC7e6heRdT0ZBmCWqG5Rir13wZ CAq7dnc23idSZpawz0setbwNxjdsL4jXyjhOZuWytcar6Ju4uzPAqq3sSvaLq31SFMdo+m LII4Kd2cd65RVdSlT5k8Nihxbf8equgXzoubsbnKgoQH4IIVntB54dtvIW92HF+hIvZ9nh yk1OjKQ1HDyjAeOLnW3d9XLWPcvU+5Yv2mBY491uiF7yEBACj5hFbs+94k5I1U/AVEzdiw uJ1XeIwXsLQ2tpv9aJpRatrVaUwQl8io4TIPErYH6AT7huM0IzDEMF9FcTTeIA== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1659725108; a=rsa-sha256; cv=none; b=KM8kz8w8oPgyVD1s06082KeJIzpN6SgqxYAAK2yZ5w6T+Gn8WeIRDA3f5e4z9tcddGAHZA yIGXyjsR3i7oiyyTl3gu8ZlwM9f76Eo876AQhDzLBExqK2Ri4QEm8KWh88uRvfYpPQLTGV YUveIBRRh1oPsEqR6ANTux2ClXVyPP5h3uLCNWlxdRKqpKOF8PnZxr2wnl1Gjfl2cGUzK9 9L7j6rRbtArMVFNTHZb/HHM/HV2MwOl90+B4tAWguUF4anSGOWJdeuh4nHpPxthqG2vfbq RFYeHL+QECGMgykf22n+hGuSY3Y6RE0R9KA4h0kcA8ZqnMHdXld6tz4I6GzSvg== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20210112 header.b=AZbyKjaa; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: 6.30 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20210112 header.b=AZbyKjaa; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 6CF872B482 X-Spam-Score: 6.30 X-Migadu-Scanner: scn0.migadu.com X-TUID: YQuznlc/Jpps Am Freitag, dem 05.08.2022 um 00:59 +0000 schrieb Andrew Whatson: > On Thu, 4 Aug 2022 at 16:52, Liliana Marie Prikler > wrote > > But if I read your recipe correctly, you're not resolving %host- > > type in those options.  Does that really suffice? > > Ah, yes that is a little confusing.  This is a quirk of the different > behaviour of the LIBRARY_PATH environment variable and the -B flag to > gcc. > > I recommend reading about "-Bprefix" in `man gcc`, but in short it > tries those paths with and without "machine/version" appended for the > target machine and compiler version.  We *could* hard-code those, but > it isn't necessary, and it seemed like that might cause problems if > someone's brave enough to attempt cross-compilation of native-comp > emacs. Fair enough. The compiler driver does not appear to be the failing part anyway, though given the status quo I can't exactly claim it is not failing. > The other important bit is the libgccjit package.  The one in guix > mainline works fine, it should be possible to get a working libgccjit > as-is.   >From my own experience, I doubt that. Read also the thread title. > I updated the package definition on my channel for the following > reasons: > > a) Support newer gcc versions > > While developing native-comp support for emacs, Andrea found and > fixed some libgccjit bugs which made their way into subsequent > releases of gcc.  The native-comp library includes work-arounds for > these problems, but produces faster/smaller code with a fresher > libgccjit. > > b) Reduce compilation time > > The definition in guix is basically the standard gcc build, but with > libgccjit also enabled.  This results in an arduous double-bootstrap > and building a bunch of compilers and libraries that are completely > unnecessary and unused by libgccjit.  I've disabled all the > unnecessary stuff and depend on the main gcc package to build > libgccjit, relying on the fact that it's already properly > bootstrapped.  It's much quicker to build, which is important if you > don't have substitutes. > > Hope this helps, > Andrew I actually am at a loss, so instead of referring to your code, I shall share mine. Note that, style aside, it should actually perform the same steps as yours, but fails to do so. I also tried adding the unversioned lib directory to LIBRARY_PATH and setting LD_LIBRARY_PATH to little fanfare. Whatever I do, it seems configure wants to smoke a different joint. Cheers ;; gcc.scm (define-public (make-libgccjit gcc) (package (inherit gcc) (name "libgccjit") (outputs (delete "lib" (package-outputs gcc))) (properties (alist-delete 'hidden? (package-properties gcc))) (arguments (substitute-keyword-arguments (package-arguments gcc) ((#:modules _ '()) '((guix build gnu-build-system) (guix build utils) (ice-9 regex) (srfi srfi-1) (srfi srfi-26))) ((#:configure-flags flags) #~(cons* "--disable-bootstrap" "--disable-libatomic" "--disable-libgomp" "--disable-libquadmath" "--disable-libssp" "--enable-host-shared" "--enable-languages=jit" (remove (cut string-match "--enable-languages.*" <>) #$flags))) ((#:phases phases) #~(modify-phases #$phases (add-after 'install 'remove-broken-or-conflicting-files (lambda* (#:key outputs #:allow-other-keys) (for-each delete-file (find-files (string-append (assoc-ref outputs "out") "/bin") ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|gcc- .*)")))))))) (inputs (modify-inputs (package-inputs gcc) (delete "libstdc++"))) (native-inputs (modify-inputs (package-native-inputs gcc) (prepend gcc))) (synopsis "GCC library generating machine code on-the-fly at runtime") (description "This package is part of the GNU Compiler Collection and provides an embeddable library for generating machine code on-the-fly at runtime. This shared library can then be dynamically-linked into bytecode interpreters and other such programs that want to generate machine code on-the-fly at run-time. It can also be used for ahead-of-time code generation for building standalone compilers. The just-in-time (jit) part of the name is now something of a misnomer."))) (define-public libgccjit-9 (make-libgccjit gcc-9)) (define-public libgccjit-10 (make-libgccjit gcc-10)) (define-public libgccjit-11 (make-libgccjit gcc-11)) (define-public libgccjit-12 (make-libgccjit gcc-12)) (define-public libgccjit libgccjit-10) ;; emacs.scm (define-public emacs (package (name "emacs") (version "28.1") (source (origin (method url-fetch) (uri (string-append "mirror://gnu/emacs/emacs-" version ".tar.xz")) (sha256 (base32 "1qbmmmhnjhn4lvzsnyk7l5ganbi6wzbm38jc1a7hhyh3k78b7c98")) (patches (search-patches "emacs-exec-path.patch" "emacs-fix-scheme-indent- function.patch" "emacs-source-date- epoch.patch")) (modules '((guix build utils))) (snippet '(with-directory-excursion "lisp" ;; Delete the bundled byte-compiled elisp files and generated ;; autoloads. (for-each delete-file (append (find-files "." "\\.elc$") (find-files "." "loaddefs\\.el$") (find-files "eshell" "^esh- groups\\.el$"))) ;; Make sure Tramp looks for binaries in the right places on ;; remote Guix System machines, where 'getconf PATH' returns ;; something bogus. (substitute* "net/tramp.el" ;; Patch the line after "(defcustom tramp-remote- path". (("\\(tramp-default-remote-path") (format #f "(tramp-default-remote-path ~s ~s ~s ~s " "~/.guix-profile/bin" "~/.guix- profile/sbin" "/run/current-system/profile/bin" "/run/current-system/profile/sbin"))) ;; Make sure Man looks for C header files in the right ;; places. (substitute* "man.el" (("\"/usr/local/include\"" line) (string-join (list line "\"~/.guix-profile/include\"" "\"/var/guix/profiles/system/profile/include\"") " "))))))) (build-system glib-or-gtk-build-system) (arguments (list #:tests? #f ; no check target #:modules `((guix build glib-or-gtk-build-system) (guix build utils) (srfi srfi-1) (ice-9 ftw)) #:configure-flags #~(list "--with-modules" "--with-cairo" "--with-native-compilation" "--disable-build-details") #:make-flags #~(list "NATIVE_FULL_AOT=1") #:phases #~(modify-phases %standard-phases (add-after 'set-paths 'set-libgccjit-path (lambda* (#:key inputs #:allow-other-keys) (define (first-subdirectory/absolute directory) (let ((files (scandir directory (lambda (file) (and (not (member file '("." ".."))) (file-is-directory? (string-append directory "/" file))))))) (and (not (null? files)) (string-append directory "/" (car files))))) (let* ((libgccjit-libdir (first-subdirectory/absolute ;; version (first-subdirectory/absolute ;; host type (search-input-directory inputs "lib/gcc"))))) (setenv "LIBRARY_PATH" (string-append libgccjit-libdir ":" (getenv "LIBRARY_PATH")))))) (add-after 'unpack 'enable-elogind (lambda _ (substitute* "configure.ac" (("libsystemd") "libelogind")) (when (file-exists? "configure") (delete-file "configure")))) (add-after 'unpack 'patch-program-file-names (lambda* (#:key inputs #:allow-other-keys) (substitute* '("src/callproc.c" "lisp/term.el" "lisp/htmlfontify.el" "lisp/textmodes/artist.el" "lisp/progmodes/sh-script.el") (("\"/bin/sh\"") (format #f "~s" (search-input-file inputs "/bin/sh")))) (substitute* "lisp/doc-view.el" (("\"(gs|dvipdf|ps2pdf|pdftotext)\"" all what) (let ((replacement (false-if-exception (search-input-file inputs (string-append "/bin/" what))))) (if replacement (string-append "\"" replacement "\"") all)))) ;; match ".gvfs-fuse-daemon-real" and ".gvfsd-fuse-real" ;; respectively when looking for GVFS processes. (substitute* "lisp/net/tramp-gvfs.el" (("\\(tramp-compat-process-running-p \"(.*)\"\\)" all process) (format #f "(or ~a (tramp-compat-process-running-p ~s))" all (string-append "." process "-real")))))) (add-after 'unpack 'patch-compilation-driver (lambda _ (substitute* "lisp/emacs-lisp/comp.el" (("\\(defcustom native-comp-driver-options nil") (format #f "(defcustom native-comp-driver-options '(~s ~s ~s ~s)" (string-append "-B" #$(this-package-input "binutils") "/bin/") (string-append "-B" #$(this-package-input "glibc") "/lib/") (string-append "-B" #$(this-package-input "libgccjit") "/lib/") (string-append "-B" #$(this-package-input "libgccjit") "/lib/gcc/")))))) (add-before 'configure 'fix-/bin/pwd (lambda _ ;; Use `pwd', not `/bin/pwd'. (substitute* (find-files "." "^Makefile\\.in$") (("/bin/pwd") "pwd")))) (add-after 'install 'install-site-start ;; Use 'guix-emacs' in "site-start.el", which is used autoload the ;; Elisp packages found in EMACSLOADPATH. (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (lisp-dir (string-append out "/share/emacs/site- lisp")) (emacs (string-append out "/bin/emacs"))) ;; This is duplicated from emacs-utils to prevent coupling. (define* (emacs-byte-compile-directory dir) (let ((expr `(progn (setq byte-compile-debug t) (byte-recompile-directory (file-name-as-directory ,dir) 0 1)))) (invoke emacs "--quick" "--batch" (format #f "--eval=~s" expr)))) (copy-file #$(local-file (search-auxiliary-file "emacs/guix- emacs.el")) (string-append lisp-dir "/guix-emacs.el")) (with-output-to-file (string-append lisp-dir "/site- start.el") (lambda () (display (string-append "(when (require 'guix-emacs nil t)\n" " (guix-emacs-autoload-packages)\n" " (advice-add 'package-load-all-descriptors" " :after #'guix-emacs-load-package- descriptors))")))) ;; Remove the extraneous subdirs.el file, as it causes Emacs to ;; add recursively all the the sub-directories of a profile's ;; share/emacs/site-lisp union when added to EMACSLOADPATH, ;; which leads to conflicts. (delete-file (string-append lisp-dir "/subdirs.el")) ;; Byte compile the site-start files. (emacs-byte-compile-directory lisp-dir)))) (add-after 'glib-or-gtk-wrap 'restore-emacs-pdmp ;; restore the dump file that Emacs installs somewhere in ;; libexec/ to its original state (lambda* (#:key outputs target #:allow-other-keys) (let* ((libexec (string-append (assoc-ref outputs "out") "/libexec")) ;; each of these ought to only match a single file, ;; but even if not (find-files) sorts by string<, ;; so the Nth element in one maps to the Nth element of ;; the other (pdmp (find-files libexec "\\.pdmp$")) (pdmp-real (find-files libexec "\\.pdmp-real$"))) (for-each rename-file pdmp-real pdmp)))) (add-after 'glib-or-gtk-wrap 'strip-double-wrap (lambda* (#:key outputs #:allow-other-keys) ;; Directly copy emacs-X.Y to emacs, so that it is not wrapped ;; twice. This also fixes a minor issue, where WMs would not be ;; able to track emacs back to emacs.desktop. (with-directory-excursion (assoc-ref outputs "out") (copy-file (car (find-files "bin" "^emacs-([0-9]+\\.)+[0-9]+$")) "bin/emacs")))) (add-after 'strip-double-wrap 'wrap-emacs-paths (lambda* (#:key inputs outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (lisp-dirs (find-files (string-append out "/share/emacs") "^lisp$" #:directories? #t))) (for-each (lambda (prog) (wrap-program prog ;; emacs-next and variants rely on uname being in PATH for ;; Tramp. Tramp paths can't be hardcoded, because they ;; need to be portable. `("PATH" suffix ,(map dirname (list (search-input-file inputs "/bin/gzip") ;; for coreutils (search-input-file inputs "/bin/yes")))) `("EMACSLOADPATH" suffix ,lisp-dirs))) (find-files (string-append out "/bin") ;; Matches versioned and unversioned emacs binaries. ;; We don't patch emacsclient, because it takes its ;; environment variables from emacs. ;; Likewise, we don't need to patch helper binaries ;; like etags, ctags or ebrowse. "^emacs(-[0-9]+(\\.[0-9]+)*)?$")))))))) (inputs (list gnutls ncurses ;; For native compilation binutils glibc libgccjit ;; Required for "core" functionality, such as dired and compression. coreutils gzip ;; Avoid Emacs's limited movemail substitute that retrieves POP3 ;; email only via insecure channels. ;; This is not needed for (modern) IMAP. mailutils gpm libx11 gtk+ cairo pango harfbuzz libxft libtiff giflib lcms libjpeg-turbo libselinux acl jansson gmp ghostscript poppler elogind ;; When looking for libpng `configure' links with `-lpng - lz', so we ;; must also provide zlib as an input. libpng zlib (if (target-x86-64?) librsvg-bootstrap librsvg-2.40) libxpm libxml2 libice libsm alsa-lib dbus ;; multilingualization support libotf m17n-lib)) (native-inputs (list autoconf pkg-config texinfo)) (native-search-paths (list (search-path-specification (variable "EMACSLOADPATH") (files '("share/emacs/site-lisp"))) (search-path-specification (variable "INFOPATH") (files '("share/info"))))) (home-page "https://www.gnu.org/software/emacs/") (synopsis "The extensible, customizable, self-documenting text editor") (description "GNU Emacs is an extensible and highly customizable text editor. It is based on an Emacs Lisp interpreter with extensions for text editing. Emacs has been extended in essentially all areas of computing, giving rise to a vast array of packages supporting, e.g., email, IRC and XMPP messaging, spreadsheets, remote server editing, and much more. Emacs includes extensive documentation on all aspects of the system, from basic editing to writing large Lisp programs. It has full Unicode support for nearly all human languages.") (license license:gpl3+)))