A maneira mais fácil de instalar as bibliotecas de suporte do Emacs Windows

15

Instalei binários do Emacs 24.4 para Windows e quero instalar as bibliotecas de suporte descritas no README do Emacs para Windows . As bibliotecas pré-compiladas mais recentes estão disponíveis no projeto ezwinports , mas instalá-las consome um pouco de tempo. Preciso selecionar todas as bibliotecas mencionadas no README do Emacs, verificar o README do ezwinports para obter mais pré-requisitos e fazer o download de cada um dos arquivos zip. Em seguida, descompacte-os, mova-os para um local permanente e adicione os diretórios individuais à minha PATHvariável. Existem arquivos duplicados dentro desses arquivos, por isso tenho o cuidado de descompactá-los todos no mesmo diretório sem verificar se eles são idênticos.

Existe uma maneira automatizada de fazer isso?

Michael Hoffman
fonte
Tanto quanto eu poderia dizer, os downloads binários contêm todos os pré-requisitos, mesmo que estejam listados no leia-me, você não precisa se preocupar em baixá-los separadamente. É por isso que você tem arquivos duplicados nos diferentes pacotes.
Alan Terceiro de

Respostas:

10

A partir do Emacs 25, o diretório de download do Emacs para Windows agora inclui um depspacote que inclui todas as dependências de uma arquitetura específica. Por exemplo, para x86_64, use emacs-25-x86_64-deps.zip.

Eu uso o seguinte script para instalar automaticamente o Emacs. Deve funcionar para WSL ou Cygwin. Ele deve ser executado em elevação e já foi executado Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSignedno PowerShell em algum 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
fonte
5

Esta não é uma solução totalmente automatizada, mas faz parte do caminho até lá. Pelo que sei, o conjunto atual de bibliotecas de suporte e seus pré-requisitos são:

  • 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

Faça o download de tudo isso da área de arquivos do ezwinports para um diretório intermediário . Em seguida, use unp para descompactar cada um deles em diretórios próprios. Use o renamecomando no Cygwin para eliminar todos os -w32-binsufixos.

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

Use um comando como o seguinte para obter a lista de diretórios que você precisa adicionar ao seu PATH:

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

Você pode mover tudo isso para um local como C:\Program Files (x86).

Michael Hoffman
fonte
2
Como é provável que as bibliotecas de suporte mudem, reluto em gastar muito tempo tentando limpar ou automatizar tudo. Desmarcar e renomear não são realmente necessários, pois você pode simplesmente unzipesses arquivos no local desejado. Mas eu os tinha por perto, então era mais fácil usá-los.
Michael Hoffman
4

Sei que essa é uma pergunta antiga, mas, se alguém se deparar com isso: tente emacsbinw64 ou emacsbin . Eles contêm todas as dlls necessárias e você não precisa resolver dependências manualmente.

itmuckel
fonte
Observe que parece ter parado de ser atualizado.
NetMage 19/03/19