Le moyen le plus simple d'installer les bibliothèques de support Emacs Windows

15

J'ai installé des binaires d'Emacs 24.4 pour Windows et je souhaite installer les bibliothèques de support décrites dans le README d'Emacs pour Windows . Les dernières bibliothèques précompilées sont disponibles à partir du projet ezwinports , mais leur installation prend un peu de temps. Je dois sélectionner toutes les bibliothèques mentionnées dans le fichier README d'Emacs, scanner le fichier REZME ezwinports pour tout autre prérequis et télécharger chacune des archives zip. Décompressez-les ensuite, déplacez-les vers un emplacement permanent et ajoutez les répertoires individuels à ma PATHvariable. Il y a des fichiers en double dans ces archives, donc je me méfie de les décompresser tous dans le même répertoire sans vérifier qu'ils sont identiques.

Existe-t-il un moyen automatisé de procéder?

Michael Hoffman
la source
Pour autant que je sache, les téléchargements binaires contiennent tous les pré-requis, donc même s'ils sont répertoriés dans le fichier lisez-moi, vous n'avez pas besoin de vous soucier de les télécharger séparément. C'est pourquoi vous avez des fichiers en double dans les différents packages.
Alan Third

Réponses:

10

À partir d'Emacs 25, le répertoire de téléchargement d'Emacs Windows inclut désormais un depspackage qui inclut toutes les dépendances d'une architecture particulière. Par exemple, pour x86_64, utilisez emacs-25-x86_64-deps.zip.

J'utilise le script suivant pour installer automatiquement Emacs. Cela devrait fonctionner pour WSL ou Cygwin. Il doit être exécuté sous élévation et avoir déjà été exécuté Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigneddans PowerShell à un moment donné.

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

Ce n'est pas une solution entièrement automatisée, mais cela fait partie du chemin. Pour autant que je sache, l'ensemble actuel des bibliothèques de support et leurs prérequis est:

  • 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

Téléchargez tous ces éléments depuis la zone des fichiers ezwinports vers un répertoire intermédiaire . Utilisez ensuite unp pour décompresser chacun de ces fichiers dans leurs propres répertoires. Utilisez la renamecommande dans Cygwin pour éliminer tous les -w32-binsuffixes.

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

Utilisez une commande comme la suivante pour obtenir la liste des répertoires que vous devez ajouter à votre PATH:

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

Vous pouvez ensuite déplacer tous ces éléments vers un emplacement comme C:\Program Files (x86).

Michael Hoffman
la source
2
Étant donné que les bibliothèques de support sont susceptibles de changer, je suis réticent à passer beaucoup de temps à essayer de nettoyer ou d'automatiser le tout. Unp et renommer ne sont pas vraiment nécessaires, car vous pouvez simplement unzipces fichiers dans l'emplacement souhaité. Mais je les avais autour donc c'était plus facile de les utiliser.
Michael Hoffman
4

Je sais que c'est une vieille question, mais si quelqu'un tombe dessus: essayez emacsbinw64 ou emacsbin . Ils contiennent toutes les DLL requises et vous n'avez pas à résoudre les dépendances manuellement.

itmuckel
la source
Notez que semble avoir cessé d'être mis à jour.
NetMage