Einfachste Möglichkeit, Emacs Windows-Unterstützungsbibliotheken zu installieren

15

Ich habe die Binärdateien von Emacs 24.4 für Windows installiert und möchte die in der README-Datei für Emacs für Windows beschriebenen Unterstützungsbibliotheken installieren . Die neuesten vorkompilierten Bibliotheken sind im ezwinports- Projekt verfügbar , die Installation ist jedoch etwas zeitaufwändig. Ich muss alle in der README- Datei von Emacs genannten Bibliotheken auswählen, die README-Datei von ezwinports nach weiteren Voraussetzungen durchsuchen und jedes einzelne Zip-Archiv herunterladen. Packen Sie sie dann aus, verschieben Sie sie an einen festen Speicherort und fügen Sie die einzelnen Verzeichnisse zu meiner PATHVariablen hinzu. Es gibt doppelte Dateien in diesen Archiven, daher bin ich vorsichtig, wenn ich sie alle in dasselbe Verzeichnis entpacke, ohne zu überprüfen, ob sie identisch sind.

Gibt es eine automatisierte Möglichkeit, dies zu tun?

Michael Hoffman
quelle
Soweit ich weiß, enthalten die binären Downloads alle Voraussetzungen, sodass Sie sie nicht separat herunterladen müssen, obwohl sie in der Readme-Datei aufgeführt sind. Deshalb haben Sie doppelte Dateien in den verschiedenen Paketen.
Alan Third

Antworten:

10

Ab Emacs 25 enthält das Emacs-Windows-Downloadverzeichnis jetzt ein depsPaket, das alle Abhängigkeiten für eine bestimmte Architektur enthält. Verwenden Sie beispielsweise für x86_64 emacs-25-x86_64-deps.zip.

Ich benutze das folgende Skript, um Emacs automatisch zu installieren. Es sollte für WSL oder Cygwin funktionieren. Es muss unter Elevation ausgeführt werden und bereits Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedin PowerShell ausgeführt worden sein.

#!/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
quelle
5

Dies ist keine vollautomatische Lösung, aber es ist ein Teil des Weges dorthin. Soweit ich das beurteilen kann, sind die aktuellen Unterstützungsbibliotheken und ihre Voraussetzungen:

  • 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

Laden Sie all diese Dateien aus dem ezwinports-Dateibereich in ein Staging-Verzeichnis herunter . Dann entpacken Sie diese mit unp in jeweils eigene Verzeichnisse. Verwenden Sie den renameBefehl in Cygwin, um alle -w32-binSuffixe zu entfernen.

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

Verwenden Sie einen Befehl wie den folgenden, um die Liste der Verzeichnisse abzurufen, die Sie zu Ihrem hinzufügen müssen PATH:

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

Sie können diese dann an einen Ort wie den folgenden verschieben C:\Program Files (x86).

Michael Hoffman
quelle
2
Da sich die Unterstützungsbibliotheken wahrscheinlich ändern, zögere ich, viel Zeit damit zu verbringen, das Ganze zu bereinigen oder zu automatisieren. Das Entpacken und Umbenennen ist nicht wirklich notwendig, da Sie unzipdiese Dateien einfach an den gewünschten Ort verschieben können. Aber ich hatte sie herum, also war es einfacher, sie zu benutzen.
Michael Hoffman
4

Ich weiß, dass dies eine alte Frage ist, aber wenn jemand darauf stößt : Versuchen Sie es mit emacsbinw64 oder emacsbin . Sie enthalten alle erforderlichen DLLs und Sie müssen Abhängigkeiten nicht manuell auflösen.

itmuckel
quelle
Beachten Sie, dass anscheinend die Aktualisierung gestoppt wurde.
NetMage