Самый простой способ установить библиотеки поддержки Emacs для Windows

15

Я установил двоичные файлы Emacs 24.4 для Windows и хочу установить библиотеки поддержки, описанные в Emacs для Windows README . Последние предварительно скомпилированные библиотеки доступны в проекте ezwinports , но их установка занимает немного времени. Я должен выбрать все библиотеки, упомянутые в README Emacs, отсканировать README ezwinports на наличие каких-либо дополнительных предпосылок и загрузить каждый из zip-архивов. Затем распакуйте их, переместите в постоянное место и добавьте отдельные каталоги в мою PATHпеременную. В этих архивах есть дубликаты файлов, поэтому я опасаюсь распаковывать их все в один каталог, не проверяя их идентичность.

Есть ли автоматизированный способ сделать это?

Майкл Хоффман
источник
Насколько я могу судить, бинарные загрузки содержат все предварительные требования, поэтому, даже если они перечислены в файле readme, вам не нужно загружать их отдельно. Вот почему у вас есть дубликаты файлов в разных пакетах.
Алан Третий

Ответы:

10

Начиная с Emacs 25, каталог загрузки Emacs для Windows теперь включает в себя depsпакет, включающий все зависимости для конкретной архитектуры. Например, для x86_64 используйте emacs-25-x86_64-deps.zip.

Я использую следующий скрипт для автоматической установки Emacs. Это должно работать для WSL или Cygwin. Он должен быть запущен с повышенными правами и уже запущен Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedв PowerShell в какой-то момент.

#!/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
Майкл Хоффман
источник
5

Это не полностью автоматизированное решение, но это часть пути. Насколько я могу судить, текущий набор библиотек поддержки и их предварительных условий:

  • Libpng-1.6.12
  • каир-1.12.16
  • GDK-pixbuf-2.30.2
  • giflib-5.1.0
  • бойкий-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
  • Панго-1.36.1-2
  • pixman-0.32.4
  • размолвка-4.0.3
  • Zlib-1.2.8-2

Загрузите все это из области файлов ezwinports в промежуточный каталог. Затем используйте unp, чтобы распаковать каждый из них в свои собственные каталоги. Используйте renameкоманду в Cygwin для устранения любых -w32-binсуффиксов.

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

Используйте команду, подобную следующей, чтобы получить список каталогов, которые нужно добавить в свой каталог PATH:

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

Затем вы можете переместить все это в такое место, как C:\Program Files (x86).

Майкл Хоффман
источник
2
Поскольку библиотеки поддержки могут измениться, я не хочу тратить много времени, пытаясь очистить или автоматизировать все это. Unp и переименование на самом деле не нужны, так как вы можете просто unzipэти файлы в нужном месте. Но они были у меня, чтобы их было легче использовать.
Майкл Хоффман
4

Я знаю, что это старый вопрос, но если кто-то наткнется на это: попробуйте emacsbinw64 или emacsbin . Они содержат все необходимые библиотеки, и вам не нужно разрешать зависимости вручную.

itmuckel
источник
Обратите внимание, что, кажется, перестали обновляться.
NetMage