2015-12-31 17:00:16 +00:00
|
|
|
Building and Installing Emacs on 64-bit MS-Windows
|
|
|
|
using MSYS2 and MinGW-w64
|
|
|
|
|
2024-01-02 01:47:10 +00:00
|
|
|
Copyright (c) 2015-2024 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
|
2022-12-24 16:46:58 +00:00
|
|
|
MSYS and mingw.org's MinGW, see the file INSTALL in this directory.
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2022-12-24 16:46:58 +00:00
|
|
|
As of December 2022, the minimum supported system, both for building
|
|
|
|
Emacs with the MSYS2/MinGW-w64 toolchain and for running the produced
|
2022-12-24 19:39:26 +00:00
|
|
|
binary, is Windows 8.1. The computer hardware should also match the
|
|
|
|
Microsoft requirements for Windows 8.1.
|
2022-12-24 16:46:58 +00:00
|
|
|
|
2015-12-31 17:00:16 +00:00
|
|
|
* Set up the MinGW-w64 / MSYS2 build environment
|
|
|
|
|
|
|
|
MinGW-w64 provides a complete runtime for projects built with GCC for 64-bit
|
2022-10-15 09:17:51 +00:00
|
|
|
Windows -- it's located at https://mingw-w64.org/.
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
MSYS2 is a Cygwin-derived software distribution for Windows which provides
|
2022-12-25 02:18:28 +00:00
|
|
|
build tools for MinGW-w64 -- see https://msys2.org/.
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
** Download and install MinGW-w64 and MSYS2
|
|
|
|
|
2022-12-26 14:26:28 +00:00
|
|
|
Go to https://msys2.org and follow the Installation instructions, up
|
|
|
|
to where they say to use 'pacman -S' to install packages. Instead,
|
|
|
|
install the necessary packages as instructed in the next section.
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
** Download and install the necessary packages
|
|
|
|
|
2022-12-25 02:18:28 +00:00
|
|
|
Run mingw64.exe in your MSYS2 directory and you will see a BASH window
|
2022-12-26 14:26:28 +00:00
|
|
|
open.
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
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 \
|
2022-12-26 14:26:28 +00:00
|
|
|
mingw-w64-x86_64-gmp \
|
|
|
|
mingw-w64-x86_64-gnutls \
|
2015-12-31 17:00:16 +00:00
|
|
|
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 \
|
2021-10-22 12:41:00 +00:00
|
|
|
mingw-w64-x86_64-libwebp \
|
2017-11-03 17:06:07 +00:00
|
|
|
mingw-w64-x86_64-lcms2 \
|
2015-12-31 17:00:16 +00:00
|
|
|
mingw-w64-x86_64-libxml2 \
|
2020-11-14 13:55:35 +00:00
|
|
|
mingw-w64-x86_64-zlib \
|
2022-12-26 14:26:28 +00:00
|
|
|
mingw-w64-x86_64-harfbuzz \
|
|
|
|
mingw-w64-x86_64-libgccjit \
|
|
|
|
mingw-w64-x86_64-sqlite3 \
|
|
|
|
mingw-w64-x86_64-tree-sitter
|
|
|
|
|
|
|
|
The packages include the base developer tools (autoconf, grep, make,
|
|
|
|
etc.), the compiler toolchain (gcc, gdb, etc.), several image
|
|
|
|
libraries, an XML library, the GnuTLS (transport layer security)
|
|
|
|
library, zlib for decompressing text, HarfBuzz for use as the shaping
|
|
|
|
engine, libgccjit for native-compilation support, SQLite3 for
|
|
|
|
accessing SQL databases, and the tree-sitter library used by some
|
|
|
|
major modes. Only the first four packages are required (base-devel,
|
|
|
|
toolchain, xpm-nox, GMP), and GnuTLS is highly recommended; the rest
|
|
|
|
are optional. You can select only part of the libraries if you don't
|
2020-11-14 13:55:35 +00:00
|
|
|
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
|
|
|
|
|
2022-12-25 08:26:59 +00:00
|
|
|
If you're going to be building the development version of Emacs from
|
|
|
|
the Git repository (see below), and you don't already have Git on your
|
|
|
|
system, you can install it in your MSYS2 environment with:
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
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
|
2022-12-25 08:26:59 +00:00
|
|
|
C:\emacs\emacs-29.1:
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
cd /c/emacs
|
2022-12-25 08:26:59 +00:00
|
|
|
tar xJf emacs-29.1.tar.xz
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
** From the Git repository
|
|
|
|
|
2022-12-25 08:26:59 +00:00
|
|
|
To clone the Git repository, do something like the following -- this will
|
|
|
|
put the Emacs source into C:\emacs\emacs-master:
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
mkdir /c/emacs
|
|
|
|
cd /c/emacs
|
2023-02-04 22:24:37 +00:00
|
|
|
git clone https://git.savannah.gnu.org/git/emacs.git emacs-master
|
2022-12-25 08:26:59 +00:00
|
|
|
|
|
|
|
This will produce the development sources, i.e. the master branch of
|
|
|
|
the Emacs Git repository, in the directory C:\emacs\emacs-master.
|
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.
|
|
|
|
|
2022-12-25 08:26:59 +00:00
|
|
|
cd /c/emacs/emacs-29.1 (if building a source tarball)
|
|
|
|
cd /c/emacs/emacs-master (if building from Git)
|
2015-12-31 17:00:16 +00:00
|
|
|
|
|
|
|
** Run autogen
|
|
|
|
|
2022-12-25 08:26:59 +00:00
|
|
|
If you are building from Git, run autogen to generate the
|
2015-12-31 17:00:16 +00:00
|
|
|
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.
|
|
|
|
|
2022-12-25 08:26:59 +00:00
|
|
|
The '--prefix' option specifies a location for the resulting binary
|
|
|
|
files, which 'make install' will use - in this example we set it to
|
|
|
|
C:\programs\emacs. 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.
|
2015-12-31 17:00:16 +00:00
|
|
|
|
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
|
|
|
|
2022-12-25 08:26:59 +00:00
|
|
|
./configure --prefix=/c/programs/emacs --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/>.
|