diff options
author | John Wiegley <johnw@newartisans.com> | 2015-12-16 15:13:16 -0800 |
---|---|---|
committer | John Wiegley <johnw@newartisans.com> | 2015-12-16 15:13:16 -0800 |
commit | 59213cc1da2b0055be35a6f7e6fddc805410c556 (patch) | |
tree | cb788b268a6a880bb710936844d646b99466f9ee | |
parent | b175cf3711f9939315f7c101abe6cc4152716b0c (diff) |
emacs25pre: New expression, from emacs-25 pre-release branch
-rw-r--r-- | pkgs/applications/editors/emacs-25/at-fdcwd.patch | 13 | ||||
-rw-r--r-- | pkgs/applications/editors/emacs-25/builder.sh | 38 | ||||
-rw-r--r-- | pkgs/applications/editors/emacs-25/default.nix | 113 | ||||
-rw-r--r-- | pkgs/applications/editors/emacs-25/site-start.el | 17 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 13 |
5 files changed, 194 insertions, 0 deletions
diff --git a/pkgs/applications/editors/emacs-25/at-fdcwd.patch b/pkgs/applications/editors/emacs-25/at-fdcwd.patch new file mode 100644 index 000000000000..1f99d4e18094 --- /dev/null +++ b/pkgs/applications/editors/emacs-25/at-fdcwd.patch @@ -0,0 +1,13 @@ +diff --git a/lib/careadlinkat.h b/lib/careadlinkat.h +index 5cdb813..7a272e8 100644 +--- a/lib/careadlinkat.h ++++ b/lib/careadlinkat.h +@@ -23,6 +23,8 @@ + #include <fcntl.h> + #include <unistd.h> + ++#define AT_FDCWD -2 ++ + struct allocator; + + /* Assuming the current directory is FD, get the symbolic link value diff --git a/pkgs/applications/editors/emacs-25/builder.sh b/pkgs/applications/editors/emacs-25/builder.sh new file mode 100644 index 000000000000..984a61df6f3b --- /dev/null +++ b/pkgs/applications/editors/emacs-25/builder.sh @@ -0,0 +1,38 @@ +source $stdenv/setup + +# This hook is supposed to be run on Linux. It patches the proper locations of +# the crt{1,i,n}.o files into the build to ensure that Emacs is linked with +# *our* versions, not the ones found in the system, as it would do by default. +# On other platforms, this appears to be unnecessary. +preConfigure() { + for i in Makefile.in ./src/Makefile.in ./lib-src/Makefile.in ./leim/Makefile.in; do + substituteInPlace $i --replace /bin/pwd pwd + done + + case "${system}" in + x86_64-linux) glibclibdir=lib64 ;; + i686-linux) glibclibdir=lib ;; + *) return; + esac + + libc=$(cat ${NIX_CC}/nix-support/orig-libc) + echo "libc: $libc" + + for i in src/s/*.h src/m/*.h; do + substituteInPlace $i \ + --replace /usr/${glibclibdir}/crt1.o $libc/${glibclibdir}/crt1.o \ + --replace /usr/${glibclibdir}/crti.o $libc/${glibclibdir}/crti.o \ + --replace /usr/${glibclibdir}/crtn.o $libc/${glibclibdir}/crtn.o \ + --replace /usr/lib/crt1.o $libc/${glibclibdir}/crt1.o \ + --replace /usr/lib/crti.o $libc/${glibclibdir}/crti.o \ + --replace /usr/lib/crtn.o $libc/${glibclibdir}/crtn.o + done +} + +preInstall () { + for i in Makefile.in ./src/Makefile.in ./lib-src/Makefile.in ./leim/Makefile.in; do + substituteInPlace $i --replace /bin/pwd pwd + done +} + +genericBuild diff --git a/pkgs/applications/editors/emacs-25/default.nix b/pkgs/applications/editors/emacs-25/default.nix new file mode 100644 index 000000000000..472a686b964b --- /dev/null +++ b/pkgs/applications/editors/emacs-25/default.nix @@ -0,0 +1,113 @@ +{ stdenv, fetchgit, ncurses, xlibsWrapper, libXaw, libXpm, Xaw3d +, pkgconfig, gettext, libXft, dbus, libpng, libjpeg, libungif +, libtiff, librsvg, texinfo, gconf, libxml2, imagemagick, gnutls +, alsaLib, cairo, acl, gpm, AppKit, Foundation, libobjc +, autoconf, automake +, withX ? !stdenv.isDarwin +, withGTK3 ? false, gtk3 ? null +, withGTK2 ? true, gtk2 +}: + +assert (libXft != null) -> libpng != null; # probably a bug +assert stdenv.isDarwin -> libXaw != null; # fails to link otherwise +assert withGTK2 -> withX || stdenv.isDarwin; +assert withGTK3 -> withX || stdenv.isDarwin; +assert withGTK2 -> !withGTK3 && gtk2 != null; +assert withGTK3 -> !withGTK2 && gtk3 != null; + +let + toolkit = + if withGTK3 then "gtk3" + else if withGTK2 then "gtk2" + else "lucid"; +in + +stdenv.mkDerivation rec { + name = "emacs-25.0.50-1b5630e"; + + builder = ./builder.sh; + + src = fetchgit { + url = "git://git.savannah.gnu.org/emacs.git"; + rev = "1b5630eb47d3f4bade09708c958ab006b83b3fc0"; + sha256 = "0n3qbri84akmy7ad1pbv89j4jn4x9pnkz0p4nbhh6m1c37cbz58l"; + }; + + patches = stdenv.lib.optionals stdenv.isDarwin [ + ./at-fdcwd.patch + ]; + + postPatch = '' + sed -i 's|/usr/share/locale|${gettext}/share/locale|g' lisp/international/mule-cmds.el + ''; + + buildInputs = + [ ncurses gconf libxml2 gnutls alsaLib pkgconfig texinfo acl gpm gettext + autoconf automake ] + ++ stdenv.lib.optional stdenv.isLinux dbus + ++ stdenv.lib.optionals withX + [ xlibsWrapper libXaw Xaw3d libXpm libpng libjpeg libungif libtiff librsvg libXft + imagemagick gconf ] + ++ stdenv.lib.optional (withX && withGTK2) gtk2 + ++ stdenv.lib.optional (withX && withGTK3) gtk3 + ++ stdenv.lib.optional (stdenv.isDarwin && withX) cairo; + + propagatedBuildInputs = stdenv.lib.optionals stdenv.isDarwin [ AppKit Foundation libobjc + ]; + + NIX_LDFLAGS = stdenv.lib.optional stdenv.isDarwin + "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation"; + + configureFlags = + if stdenv.isDarwin + then [ "--with-ns" "--disable-ns-self-contained" ] + else if withX + then [ "--with-x-toolkit=${toolkit}" "--with-xft" ] + else [ "--with-x=no" "--with-xpm=no" "--with-jpeg=no" "--with-png=no" + "--with-gif=no" "--with-tiff=no" ]; + + NIX_CFLAGS_COMPILE = stdenv.lib.optionalString (stdenv.isDarwin && withX) + "-I${cairo}/include/cairo"; + + preBuild = '' + find . -name '*.elc' -delete + ''; + + postInstall = '' + mkdir -p $out/share/emacs/site-lisp/ + cp ${./site-start.el} $out/share/emacs/site-lisp/site-start.el + '' + stdenv.lib.optionalString stdenv.isDarwin '' + mkdir -p $out/Applications + mv nextstep/Emacs.app $out/Applications + ''; + + doCheck = !stdenv.isDarwin; + + meta = with stdenv.lib; { + description = "GNU Emacs 25 (pre), the extensible, customizable text editor"; + homepage = http://www.gnu.org/software/emacs/; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ chaoflow lovek323 simons the-kenny ]; + platforms = platforms.all; + + # So that Exuberant ctags is preferred + priority = 1; + + longDescription = '' + GNU Emacs is an extensible, customizable text editor—and more. At its + core is an interpreter for Emacs Lisp, a dialect of the Lisp + programming language with extensions to support text editing. + + The features of GNU Emacs include: content-sensitive editing modes, + including syntax coloring, for a wide variety of file types including + plain text, source code, and HTML; complete built-in documentation, + including a tutorial for new users; full Unicode support for nearly all + human languages and their scripts; highly customizable, using Emacs + Lisp code or a graphical interface; a large number of extensions that + add other functionality, including a project planner, mail and news + reader, debugger interface, calendar, and more. Many of these + extensions are distributed with GNU Emacs; others are available + separately. + ''; + }; +} diff --git a/pkgs/applications/editors/emacs-25/site-start.el b/pkgs/applications/editors/emacs-25/site-start.el new file mode 100644 index 000000000000..023d6412ed84 --- /dev/null +++ b/pkgs/applications/editors/emacs-25/site-start.el @@ -0,0 +1,17 @@ +;; NixOS specific load-path +(setq load-path + (append (reverse (mapcar (lambda (x) (concat x "/share/emacs/site-lisp/")) + (split-string (or (getenv "NIX_PROFILES") "")))) + load-path)) + +;;; Make `woman' find the man pages +(eval-after-load 'woman + '(setq woman-manpath + (append (reverse (mapcar (lambda (x) (concat x "/share/man/")) + (split-string (or (getenv "NIX_PROFILES") "")))) + woman-manpath))) + +;; Make tramp work for remote NixOS machines +;;; NOTE: You might want to add +(eval-after-load 'tramp + '(add-to-list 'tramp-remote-path "/run/current-system/sw/bin")) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b43d1f737e0d..905749128b1a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11466,6 +11466,19 @@ let }); emacs24Macport = self.emacs24Macport_24_5; + emacs25pre = callPackage ../applications/editors/emacs-25 { + # use override to enable additional features + libXaw = xorg.libXaw; + Xaw3d = null; + gconf = null; + alsaLib = null; + imagemagick = null; + acl = null; + gpm = null; + inherit (darwin.apple_sdk.frameworks) AppKit Foundation; + inherit (darwin) libobjc; + }; + emacsPackagesGen = emacs: self: let callPackage = newScope self; in rec { inherit emacs; |