#!/bin/bash set -eux src=${EMACS_SRC:-.} build=${EMACS_BUILD:-.} config_h=${build}/src/config.h make="make -j$(nproc --all)" configure_flags=( --prefix=${HOME}/apps/.emacs.$(date +%F) --with-cairo --with-sqlite3 --with-xinput2 ) is-rolling-distro () { ( . /etc/os-release case "${ID}" in opensuse-tumbleweed) return 0;; esac return 1 ) } cache-file () { local -r cachedir=${XDG_CACHE_HOME:-~/.cache}/emacs test -d "${cachedir}" || mkdir -p "${cachedir}" local builddesc=${PWD} builddesc=${builddesc#~} builddesc=${builddesc//\//,} echo ${cachedir}/config${builddesc} } if ! is-rolling-distro then configure_flags=( --cache-file="$(cache-file)" "${configure_flags[@]}" ) fi if test "${DEBUG:-}" then configure_flags+=( --enable-checking=yes,glyphs --enable-check-lisp-object-type CFLAGS='-O0 -g3' ) fi if ! test -f "${src}"/Makefile then ${make} -C "${src}" configure fi check-config () { if ! test -f "${config_h}" then return 1 fi local pattern="#define EMACS_CONFIG_OPTIONS \"${configure_flags[@]}\"" grep "${pattern}" "${config_h}" } cd "${build}" if ! check-config then "${src}"/configure "${configure_flags[@]}" fi ${make} "$@"