La forma más fácil de instalar las bibliotecas de soporte de Windows de Emacs

15

Instalé binarios de Emacs 24.4 para Windows y quiero instalar las bibliotecas de soporte descritas en el archivo Léame de Emacs para Windows . Las últimas bibliotecas precompiladas están disponibles en el proyecto ezwinports , pero instalarlas requiere un poco de tiempo. Tengo que seleccionar todas las bibliotecas mencionadas en el archivo README de Emacs, escanear el archivo README de ezwinports en busca de requisitos previos adicionales y descargar cada uno de los archivos zip. Luego descomprímalos, muévalos a una ubicación permanente y agregue los directorios individuales a mi PATHvariable. Hay archivos duplicados dentro de estos archivos, por lo que desconfío de desempaquetarlos en el mismo directorio sin verificar que sean idénticos.

¿Hay una manera automatizada de hacer esto?

Michael Hoffman
fuente
Por lo que pude ver, las descargas binarias contienen todos los requisitos previos, por lo que, aunque estén enumeradas en el archivo Léame, no necesita molestarse en descargarlas por separado. Es por eso que tiene archivos duplicados en los diferentes paquetes.
Alan Tercer

Respuestas:

10

A partir de Emacs 25, el directorio de descarga de Windows de Emacs ahora incluye un depspaquete que incluye todas las dependencias para una arquitectura particular. Por ejemplo, para x86_64, use emacs-25-x86_64-deps.zip.

Utilizo el siguiente script para instalar automáticamente Emacs. Debería funcionar para WSL o Cygwin. Debe ejecutarse bajo elevación y ya se ha ejecutado Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigneden PowerShell en algún momento.

#!/usr/bin/env bash

set -o nounset -o pipefail -o errexit

emacs_major=26
emacs_minor=1
emacs_ver="$emacs_major.$emacs_minor"
arch="x86_64"
emacs_url_root="https://ftpmirror.gnu.org/emacs/windows/emacs-$emacs_major"

emacs_deps_zip="emacs-$emacs_major-$arch-deps.zip"
emacs_zip="emacs-$emacs_ver-$arch.zip"

if [[ "$(uname -r)" == *Microsoft ]]; then
    programfiles="$(bin/wslpath "%ProgramFiles%")"
    programfilesx86="$(bin/wslpath "%ProgramFiles(x86)%")"
    allusersprofile="$(bin/wslpath "%AllUsersProfile%")"
    public_desktop="$(bin/wslpath "%Public%\\Desktop")"
    desktop="$(bin/wslpath "%UserProfile%\\Desktop")"
else
    CSIDL_PROGRAM_FILES=38
    CSIDL_PROGRAM_FILESX86=42
    CSIDL_COMMON_APPDATA=35
    CSIDL_COMMON_DESKTOPDIRECTORY=25
    CSIDL_DESKTOP=0

    programfiles="$(cygpath -F "$CSIDL_PROGRAM_FILES")"
    programfilesx86="$(cygpath -F "$CSIDL_PROGRAM_FILESX86")"
    allusersprofile="$(cygpath -F "$CSIDL_COMMON_APPDATA")"
    public_desktop="$(cygpath -F "$CSIDL_COMMON_DESKTOPDIRECTORY")"
    desktop="$(cygpath -F "$CSIDL_DESKTOP")"
fi

emacs_root="$programfiles/Emacs"

old_tmpdir="${TMPDIR:-}"
TMPDIR="$(mktemp -dt install-windows-pkgs.XXXXXXXXXX)"
export TMPDIR

on_exit () {
    rm -rf "$TMPDIR"
}

trap on_exit EXIT

unzip_dest () {
    local zip="$1"
    local dest="$2"

    if [[ ! -d "$dest" ]]; then
        if ! mkdir -p "$dest"; then
            result="$?"
            echo "Can't create '$dest'. Try running under elevation" >&2
            exit "$result"
        fi

        unzip -n "$zip" -d "$dest"
    fi
}

install_emacs_pkg () {
    local zip="$1"
    local dest="$2"

    # XXX: move to tmp
    if [[ ! -d "$dest" ]]; then
        wget --directory-prefix "$TMPDIR" "$emacs_url_root/$zip"
        unzip_dest "$TMPDIR/$zip" "$dest"
    fi
}

on_exit
trap EXIT
TMPDIR="$old_tmpdir"

# XXX: Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
# XXX: sticking cmd.exe /c start before this causes all nature of space-quoting problems
powershell.exe windows\\add_path.ps1 "%ProgramFiles%\\Emacs\\emacs-$emacs_ver\\bin" "%ProgramFiles%\\Emacs\\emacs-$emacs_major-deps\\bin"

# XXX: would be nice to pin runemacs.exe to taskbar, but the need to edit
# that is probably best seen as Emacs bug/flaw
Michael Hoffman
fuente
5

Esta no es una solución totalmente automatizada, pero es parte del camino. Por lo que puedo decir, el conjunto actual de bibliotecas de soporte y sus requisitos previos es:

  • libpng-1.6.12
  • cairo-1.12.16
  • gdk-pixbuf-2.30.2
  • giflib-5.1.0
  • glib-2.38.2
  • gnutls-3.0.9
  • jpeg-v9a
  • libcroco-0.6.8
  • libffi-3.0.13
  • librsvg-2.40.1-2
  • libxml2-2.7.8
  • lzo-2.06
  • pango-1.36.1-2
  • pixman-0.32.4
  • tiff-4.0.3
  • zlib-1.2.8-2

Descargue todo esto desde el área de archivos de ezwinports a un directorio provisional . Luego use unp para desempaquetar cada uno de estos en sus propios directorios. Use el renamecomando en Cygwin para eliminar cualquier -w32-binsufijo.

rename -- -w32-bin "" *-w32-bin

Use un comando como el siguiente para obtener la lista de directorios que necesita agregar a su PATH:

command ls -1 | perl -pe 's/^/C:\\Program Files (x86)\\/; s/\n/\\bin;/'

Luego puede mover todo esto a una ubicación como C:\Program Files (x86).

Michael Hoffman
fuente
2
Dado que es probable que las bibliotecas de soporte cambien, soy reacio a pasar mucho tiempo tratando de limpiar o automatizar todo. Descomprimir y cambiar el nombre no son realmente necesarios, ya que puede simplemente unzipestos archivos en la ubicación deseada. Pero los tenía cerca, así que fue más fácil usarlos.
Michael Hoffman
4

Sé que esta es una vieja pregunta, pero si alguien se topa con esto: pruebe emacsbinw64 o emacsbin . Contienen todos los archivos DLL necesarios y no tiene que resolver las dependencias manualmente.

itmuckel
fuente
Tenga en cuenta que parece haber dejado de actualizarse.
NetMage