2015-12-31 17:00:16 +00:00
|
|
|
Building and Installing Emacs on 64-bit MS-Windows
|
|
|
|
using MSYS2 and MinGW-w64
|
|
|
|
|
2020-01-01 00:19:43 +00:00
|
|
|
Copyright (c) 2015-2020 Free Software Foundation, Inc.
|
2015-12-31 17:00:16 +00:00
|
|
|
See the end of the file for license conditions.
|
|
|
|
|
|
|
|
This document describes how to compile a 64-bit GNU Emacs using MSYS2
|
|
|
|
and MinGW-w64. For instructions for building a 32-bit Emacs using
|
|
|
|
MSYS and MinGW, see the file INSTALL in this directory.
|
|
|
|
|
|
|
|
Do not use this recipe with Cygwin. For building on Cygwin, use the normal
|
|
|
|
installation instructions in ../INSTALL.
|
|
|
|
|
|
|
|
* Requirements
|
|
|
|
|
|
|
|
The total space required is 3GB: 1.8GB for MSYS2 / MinGW-w64 and 1.2GB for
|
|
|
|
Emacs with the full repository, or less if you're using a release tarball.
|
|
|
|
|
|
|
|
* Set up the MinGW-w64 / MSYS2 build environment
|
|
|
|
|
|
|
|
MinGW-w64 provides a complete runtime for projects built with GCC for 64-bit
|
|
|
|
Windows -- it's located at http://mingw-w64.org/.
|
|
|
|
|
|
|
|
MSYS2 is a Cygwin-derived software distribution for Windows which provides
|
2020-10-24 18:22:33 +00:00
|
|
|
build tools for MinGW-w64 -- see https://msys2.github.io/.
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
** Download and install MinGW-w64 and MSYS2
|
|
|
|
|
|
|
|
You can download the x86_64 version of MSYS2 (i.e. msys2-x86_64-<date>.exe)
|
|
|
|
from
|
|
|
|
|
|
|
|
https://sourceforge.net/projects/msys2/files/Base/x86_64
|
|
|
|
|
|
|
|
Run this file to install MSYS2 in your preferred directory, e.g. the default
|
|
|
|
C:\msys64 -- this will install MinGW-w64 also. Note that directory names
|
|
|
|
containing spaces may cause problems.
|
|
|
|
|
|
|
|
** Download and install the necessary packages
|
|
|
|
|
2017-11-03 17:06:07 +00:00
|
|
|
Run c:/msys64/msys2.exe in your MSYS2 directory and you will see a BASH window
|
2015-12-31 17:00:16 +00:00
|
|
|
opened.
|
|
|
|
|
|
|
|
In the BASH prompt, use the following command to install the necessary
|
|
|
|
packages (you can copy and paste it into the shell with Shift + Insert):
|
|
|
|
|
2017-11-03 17:06:07 +00:00
|
|
|
pacman -S --needed base-devel \
|
2015-12-31 17:00:16 +00:00
|
|
|
mingw-w64-x86_64-toolchain \
|
|
|
|
mingw-w64-x86_64-xpm-nox \
|
|
|
|
mingw-w64-x86_64-libtiff \
|
|
|
|
mingw-w64-x86_64-giflib \
|
|
|
|
mingw-w64-x86_64-libpng \
|
|
|
|
mingw-w64-x86_64-libjpeg-turbo \
|
|
|
|
mingw-w64-x86_64-librsvg \
|
2017-11-03 17:06:07 +00:00
|
|
|
mingw-w64-x86_64-lcms2 \
|
2017-12-10 16:36:37 +00:00
|
|
|
mingw-w64-x86_64-jansson \
|
2015-12-31 17:00:16 +00:00
|
|
|
mingw-w64-x86_64-libxml2 \
|
2016-09-21 15:28:30 +00:00
|
|
|
mingw-w64-x86_64-gnutls \
|
2020-11-14 13:55:35 +00:00
|
|
|
mingw-w64-x86_64-zlib \
|
|
|
|
mingw-w64-x86_64-harfbuzz
|
2015-12-31 17:00:16 +00:00
|
|
|
|
2017-03-17 19:23:35 +00:00
|
|
|
The packages include the base developer tools (autoconf, grep, make, etc.),
|
|
|
|
the compiler toolchain (gcc, gdb, etc.), several image libraries, an XML
|
2020-11-14 13:55:35 +00:00
|
|
|
library, the GnuTLS (transport layer security) library, zlib for
|
|
|
|
decompressing text, and HarfBuzz for use as the shaping engine. Only the
|
|
|
|
first three packages are required (base-devel, toolchain, xpm-nox); the
|
|
|
|
rest are optional. You can select only part of the libraries if you don't
|
|
|
|
need them all.
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
You now have a complete build environment for Emacs.
|
|
|
|
|
|
|
|
* Install Git (optional) and disable autocrlf
|
|
|
|
|
|
|
|
If you're going to be building the development version of Emacs from the Git
|
|
|
|
repository, and you don't already have Git on your system, you can install it
|
|
|
|
in your MSYS2 environment with:
|
|
|
|
|
|
|
|
pacman -S git
|
|
|
|
|
|
|
|
The autocrlf feature of Git may interfere with the configure file, so it is
|
|
|
|
best to disable this feature by running the command:
|
|
|
|
|
|
|
|
git config core.autocrlf false
|
|
|
|
|
|
|
|
* Get the Emacs source code
|
|
|
|
|
|
|
|
Now you can either get an existing release version of the Emacs source code
|
|
|
|
from the GNU ftp site, or get the more current version and history from the
|
|
|
|
Git repository.
|
|
|
|
|
|
|
|
You can always find the most recent information on these sources from the GNU
|
|
|
|
Savannah Emacs site, https://savannah.gnu.org/projects/emacs.
|
|
|
|
|
|
|
|
** From the FTP site
|
|
|
|
|
2017-10-02 02:53:56 +00:00
|
|
|
The Emacs ftp site is located at https://ftp.gnu.org/gnu/emacs/ - download the
|
2015-12-31 17:00:16 +00:00
|
|
|
version you want to build and put the file into a location like C:\emacs\,
|
|
|
|
then uncompress it with tar. This will put the Emacs source into a folder like
|
|
|
|
C:\emacs\emacs-24.5:
|
|
|
|
|
|
|
|
cd /c/emacs
|
|
|
|
tar xJf emacs-24.5.tar.xz
|
|
|
|
|
|
|
|
** From the Git repository
|
|
|
|
|
|
|
|
To download the Git repository, do something like the following -- this will
|
2017-11-07 23:01:01 +00:00
|
|
|
put the Emacs source into C:\emacs\emacs-26:
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
mkdir /c/emacs
|
|
|
|
cd /c/emacs
|
2017-11-07 23:01:01 +00:00
|
|
|
git clone git://git.sv.gnu.org/emacs.git emacs-26
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
(We recommend using the command shown on Savannah Emacs project page.)
|
|
|
|
|
|
|
|
* Build Emacs
|
|
|
|
|
|
|
|
Now you're ready to build and install Emacs with autogen, configure, make,
|
|
|
|
and make install.
|
|
|
|
|
|
|
|
First we need to switch to the MinGW-w64 environment. Exit the MSYS2 BASH
|
2017-11-03 17:06:07 +00:00
|
|
|
console and run mingw64.exe in the C:\msys64 folder, then cd back to
|
2015-12-31 17:00:16 +00:00
|
|
|
your Emacs source directory, e.g.:
|
|
|
|
|
2017-11-03 17:06:07 +00:00
|
|
|
cd /c/emacs/emacs-26
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
** Run autogen
|
|
|
|
|
|
|
|
If you are building the development sources, run autogen to generate the
|
|
|
|
configure script (note: this step is not necessary if you are using a
|
|
|
|
release source tarball, as the configure file is included):
|
|
|
|
|
|
|
|
./autogen.sh
|
|
|
|
|
|
|
|
** Run configure
|
|
|
|
|
|
|
|
Now you can run configure, which will build the various Makefiles -- note
|
|
|
|
that the example given here is just a simple one - for more information
|
|
|
|
on the options available please see the INSTALL file in this directory.
|
|
|
|
|
|
|
|
The '--prefix' option specifies a location for the resulting binary files,
|
2017-11-03 17:06:07 +00:00
|
|
|
which 'make install' will use - in this example we set it to C:\emacs\emacs-26.
|
2015-12-31 17:00:16 +00:00
|
|
|
If a prefix is not specified the files will be put in the standard Unix
|
|
|
|
directories located in your C:\msys64 directory, but this is not recommended.
|
|
|
|
|
2019-05-14 05:59:29 +00:00
|
|
|
Note also that we need to disable D-Bus because Emacs does not yet
|
|
|
|
support them on Windows.
|
2015-12-31 17:00:16 +00:00
|
|
|
|
2019-05-14 05:59:29 +00:00
|
|
|
./configure --prefix=/c/emacs/emacs-26 --without-dbus
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
** Run make
|
|
|
|
|
|
|
|
This will compile Emacs and build the executables, putting them in the src
|
|
|
|
directory:
|
|
|
|
|
|
|
|
make
|
|
|
|
|
|
|
|
To speed up the process, you can try running
|
|
|
|
|
|
|
|
make -jN
|
|
|
|
|
|
|
|
where N is the number of cores in your system -- if your MSYS2 make supports
|
|
|
|
parallel execution it will run significantly faster.
|
|
|
|
|
|
|
|
** Run make install
|
|
|
|
|
|
|
|
Now you can run "make install", which will copy the executable and
|
|
|
|
other files to the location specified in the configure step. This will
|
|
|
|
create the bin, libexec, share, and var directories:
|
|
|
|
|
|
|
|
make install
|
|
|
|
|
|
|
|
You can also say
|
|
|
|
|
|
|
|
make install prefix=/c/somewhere
|
|
|
|
|
|
|
|
to install them somewhere else.
|
|
|
|
|
|
|
|
* Test Emacs
|
|
|
|
|
|
|
|
To test it out, run
|
|
|
|
|
|
|
|
./bin/runemacs.exe -Q
|
|
|
|
|
|
|
|
and if all went well, you will have a new 64-bit version of Emacs.
|
|
|
|
|
2017-11-07 23:01:01 +00:00
|
|
|
When running Emacs from outside the mingw64 shell, you will need to
|
|
|
|
add c:\msys64\mingw64\bin to your Windows PATH, or copy the needed
|
|
|
|
DLLs into Emacs' bin/ directory. Otherwise features such as TLS which
|
|
|
|
depend on those DLLs will be missing.
|
|
|
|
|
|
|
|
You can do this through Control Panel / System and Security / System /
|
|
|
|
Advanced system settings / Environment Variables / Edit path.
|
|
|
|
|
2015-12-31 17:00:16 +00:00
|
|
|
* Make a shortcut
|
|
|
|
|
|
|
|
To make a shortcut to run the new Emacs, right click on the location where you
|
|
|
|
want to put it, e.g. the Desktop, select New / Shortcut, then select
|
|
|
|
runemacs.exe in the bin folder of the new Emacs, and give it a name.
|
|
|
|
|
|
|
|
You can set any command line options by right clicking on the resulting
|
|
|
|
shortcut, select Properties, then add any options to the Target command,
|
|
|
|
e.g. --debug-init.
|
|
|
|
|
2017-11-07 23:01:01 +00:00
|
|
|
* Troubleshooting
|
|
|
|
|
|
|
|
** Missing mingw64.exe launcher
|
|
|
|
|
|
|
|
Older versions of Msys2 may lack the mingw64.exe launcher program. If
|
|
|
|
you have them, running mingw64_shell.bat or "msys2_shell.cmd -mingw64"
|
|
|
|
should work instead.
|
|
|
|
|
|
|
|
Alternatively, install mingw64.exe with
|
|
|
|
|
|
|
|
pacman -S msys/msys2-launcher-git
|
|
|
|
|
|
|
|
** Configure errors
|
|
|
|
|
|
|
|
*** Check that mingw64 gcc is accessible
|
|
|
|
|
|
|
|
Errors like
|
|
|
|
|
|
|
|
configure: error: Emacs does not support 'x86_64-pc-msys' systems.
|
|
|
|
|
|
|
|
or
|
|
|
|
|
|
|
|
checking the compiler's target... configure: error: Impossible to obtain gcc compiler target.
|
|
|
|
|
|
|
|
indicate you didn't use the mingw64 launcher, or you didn't install
|
|
|
|
gcc. It's also possible you have something in ~/.bashrc or ~/.profile
|
|
|
|
which modifies PATH or MSYSTEM to an unexpected value, preventing gcc
|
|
|
|
from being found. At the mingw64 bash shell, running
|
|
|
|
|
|
|
|
gcc -v
|
|
|
|
|
|
|
|
should give output which includes the text
|
|
|
|
|
|
|
|
Target: x86_64-w64-mingw32
|
|
|
|
|
|
|
|
*** Check your $PKG_CONFIG_PATH
|
|
|
|
|
|
|
|
For a typical MSYS2 install, running
|
|
|
|
|
|
|
|
echo $PKG_CONFIG_PATH
|
|
|
|
|
|
|
|
at the mingw64 bash shell should give print a value starting with
|
|
|
|
'/mingw64/lib/pkgconfig'. Incorrect values may prevent configure from
|
|
|
|
finding installed libraries.
|
|
|
|
|
2015-12-31 17:00:16 +00:00
|
|
|
* Credits
|
|
|
|
|
|
|
|
Thanks to Chris Zheng for the original build outline as used by the
|
|
|
|
emacsbinw64 project, located at:
|
|
|
|
|
|
|
|
https://sourceforge.net/p/emacsbinw64/wiki/Build%20guideline%20for%20MSYS2-MinGW-w64%20system/
|
|
|
|
|
|
|
|
* License
|
|
|
|
|
|
|
|
This file is part of GNU Emacs.
|
|
|
|
|
|
|
|
GNU Emacs 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 Emacs 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
|
2017-09-30 00:44:23 +00:00
|
|
|
along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|