Emacs.app is the Cocoa version of Emacs. It is most often used on macOS, but is also used on the libre Cocoa implementation of GNUstep.
When I first tried to compile on NEXTSPACE, I ran into a number of issues. The fix involved patching the OS (CentOS 7) and patching Emacs. My Emacs patch was just committed to master so I’ll explain how to compile Emacs.app from the latest master branch against the latest NEXTSPACE.
First off, this article assumes that you have successfully compiled and installed the latest version of NEXTSPACE locally, and can compile regular Emacs successfully from source. Compiling regular Emacs successfully from source on CentOS 7 just requires you to keep hitting ./configure
until you can determine and install all the missing packages that you need for compilation.
Patch the operating system
First, after backing it up, modify src/include/unistd.h
and replace __block
on line 1147 with __libc_block
. Clang (required by NEXTSPACE) handles __block
differently than GCC, hence why this change is required. That’s the only OS patch needed.
Per the NEWS file, this shouldn’t be a problem in glibc 2.19 and up:
The public headers no longer use __unused nor __block. This change is to support compiling programs that are derived from BSD sources and use __unused internally, and to support compiling with Clang’s -fblock extension which uses __block.
Compile Emacs
Now, run this in the emacs source directory:
source /Developer/Makefiles/GNUstep.sh
sh autogen.sh
CC=/usr/bin/clang ./configure --with-ns --with-gnustep-conf=/Library/Preferences/GNUstep.conf --with-mailutils
make
The first couple commands just sets up our environment correctly, and the configure step is the canonical way to setup Emacs.app with mailutils.
The compilation should work and you will have nextstep/Emacs.app
waiting for you.
Emacs.app has some stability and visual issues, but I’ve been successfully using it for days for serious work. Hopefully the NEXTSPACE team and I can return Emacs.app to its former glory.