Skip to content

Instantly share code, notes, and snippets.

@oholiab
Created March 7, 2019 19:17
Show Gist options
  • Save oholiab/0efdbcbbc0c425a17c9e637a9f6a8ecb to your computer and use it in GitHub Desktop.
Save oholiab/0efdbcbbc0c425a17c9e637a9f6a8ecb to your computer and use it in GitHub Desktop.
Makefile to build recent emacs as an unprivileged user
# This Makefile will build and install emacs with gnutls and nettle for an
# unprivileged user. Emacs files will be located in ~/emacs, shared files for
# nettle and gnutls will be in ~/build/emacs/libs. This is kinda just where
# they landed, I'll maybe relocate it all under ~/.local
#
# It should be run in ~/build/emacs
#
# The selection of dependencies is based on what wasn't installed on the Ubuntu
# Xenial server I was running it on
#
# All files downloaded are verified against the recommended PGP public keys and
# signature
#
# After installation, you'll either need to LD_PRELOAD libnettle.so and
# libgnutls.so, or use LD_LIBRARY_PATH to do similar
FINGERPRINT=D405 AA2C 862C 54F1 7EEE 6BE0 E8BC D786 6AFC F978
VERSION=26.1
PACKAGE=emacs-$(VERSION).tar.xz
BUILD_DIR=emacs-$(VERSION)
SIGNATURE=$(PACKAGE).sig
MIRROR=https://ftp.snt.utwente.nl/pub/software/gnu/emacs
GNUTLS_VERSION=3.3.6
GNUTLS_MAJ_VERSION=3.3
GNUTLS_PACKAGE=gnutls-$(GNUTLS_VERSION).tar.xz
GNUTLS_BUILD_DIR=gnutls-$(GNUTLS_VERSION)
GNUTLS_SIGNATURE=$(GNUTLS_PACKAGE).sig
GNUTLS_MIRROR=https://www.gnupg.org/ftp/gcrypt/gnutls/v$(GNUTLS_MAJ_VERSION)
NETTLE_FINGERPRINT=343C 2FF0 FBEE 5EC2 EDBE F399 F359 9FF8 28C6 7298
NETTLE_MIRROR=https://ftp.gnu.org/gnu/nettle/
NETTLE_VERSION=2.7.1
NETTLE_PACKAGE=nettle-$(NETTLE_VERSION).tar.gz
NETTLE_BUILD_DIR=nettle-$(NETTLE_VERSION)
NETTLE_SIGNATURE=$(NETTLE_PACKAGE).sig
PKG_CONFIG="PKG_CONFIG_PATH=$(HOME)/build/emacs/libs/lib/pkgconfig:$$PKG_CONFIG_PATH"
GNUTLS_LDFLAGS=LDFLAGS=-L$(HOME)/build/emacs/libs/lib
#PKG_CONFIG_LIBDIR=$(HOME)/build/emacs/libs/gnutls/include:$$PKG_CONFIG_LIBDIR"
GNUTLS_LD_LIBRARY_PATH_HACK=export LD_LIBRARY_PATH=$(HOME)/build/emacs/libs/lib
.PHONY: install clean
default: $(GNUTLS_BUILD_DIR)
.key:
gpg --recv-keys "$(FINGERPRINT)"
touch .key
.gnutls-key:
wget https://www.gnutls.org/pgpkey-nmav.txt -O $@
gpg --import $@
.nettle-key:
gpg --recv-keys "$(NETTLE_FINGERPRINT)"
touch .nettle-key
$(NETTLE_PACKAGE) $(NETTLE_SIGNATURE): | .nettle-key
wget $(NETTLE_MIRROR)/$@
$(NETTLE_BUILD_DIR): | $(NETTLE_PACKAGE) $(NETTLE_SIGNATURE)
gpg --verify $(NETTLE_SIGNATURE)
tar -xvf $(NETTLE_PACKAGE)
libs/lib/pkgconfig/nettle.pc: | $(NETTLE_BUILD_DIR)
cd $(NETTLE_BUILD_DIR) && ./configure --prefix=$(HOME)/build/emacs/libs
cd $(NETTLE_BUILD_DIR) && make && make install
$(GNUTLS_PACKAGE) $(GNUTLS_SIGNATURE): | .gnutls-key
wget $(GNUTLS_MIRROR)/$@
$(GNUTLS_BUILD_DIR): | $(GNUTLS_PACKAGE) $(GNUTLS_SIGNATURE)
gpg --verify $(GNUTLS_SIGNATURE)
tar -xvf $(GNUTLS_PACKAGE)
libs/lib/pkgconfig/gnutls.pc: libs/lib/pkgconfig/nettle.pc | $(GNUTLS_BUILD_DIR)
cd $(GNUTLS_BUILD_DIR) && ./configure $(PKG_CONFIG) --prefix=$(HOME)/build/emacs/libs --bindir=$(HOME)/bin
cd $(GNUTLS_BUILD_DIR) && $(GNUTLS_LD_LIBRARY_PATH_HACK) make $(PKG_CONFIG) && make install
$(PACKAGE) $(SIGNATURE): | .key
wget $(MIRROR)/$@
$(BUILD_DIR): | $(PACKAGE) $(SIGNATURE)
gpg --verify $(SIGNATURE)
tar -xvf $(PACKAGE)
$(BUILD_DIR)/src/emacs: libs/lib/pkgconfig/gnutls.pc | $(BUILD_DIR)
cd $(BUILD_DIR) && ./configure $(PKG_CONFIG) --with-x=no --without-sound --prefix=$(HOME)/emacs --bindir=$(HOME)/bin --without-imagemagick --without-xft --without-libotf --without-m17n-flt --without-xaw3d --without-xim --without-ns --without-gpm --without-dbus --without-gconf --without-gsettings --without-selinux --without-xpm --without-jpeg --without-tiff --without-gif --without-png --without-rsvg--without-pop --without-kerberos --without-mmdf
$(GNUTLS_LD_LIBRARY_PATH_HACK); make -C $(BUILD_DIR)
install: $(BUILD_DIR)/src/emacs
make -C $(BUILD_DIR) install
clean:
rm -rf libs/*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment