Approche appropriée pour fournir des programmes externes avec des packages?

12

Je maintiens un certain nombre de packages elisp (par exemple, la recherche de codes, emacs-ycmd, traad) qui gagneraient à pouvoir installer les programmes externes qu'ils utilisent, ce qui économise du temps et des efforts pour certains utilisateurs. Par exemple, avec codesearch.el, ce serait bien de pouvoir télécharger, compiler et installer les outils de recherche de codes (écrits en go, pas elisp) pour les utilisateurs. Cela supprimerait au moins une barrière pour l'utilisation de l'emballage.

Existe-t-il des «meilleures pratiques» pour ce faire? Par exemple, où dois-je mettre les programmes externes?

Si vous n'avez pas de conseil direct, pouvez-vous me référer à des packages qui font quelque chose comme ça (et, idéalement, qui le font bien)?

abingham
la source
1
Je crains que cela ne se situe entre extrêmement difficile et impossible, étant donné que vous n'avez aucun contrôle sur le fait que le système d'exploitation Emacs de l'utilisateur utilise Linux, Windows ou Mac OS comme chargeur de démarrage ;-).
mbork
2
Je crains qu'il soit préférable de découpler le programme externe du package Emacs pour une flexibilité maximale. L'approche consistant à fournir le logiciel externe avec le package Emacs semble fonctionner mieux pour des choses comme les fichiers Ruby / Python / TeX / ... inclus qui sont interprétés. L'approche opposée consistant à fournir au code Emacs Lisp un package installé via le gestionnaire de packages de votre système (comme mu et notmuch do) est moins flexible car vous ne pouvez pas avoir de chargement automatique.
wasamasa
On dirait que vous avez raison. Les seuls exemples que je puisse trouver de paquets emacs fournissant des dépendances externes sont par exemple jedi qui regroupe certains scripts python dans le paquet elpa.
abingham
est-ce quelque chose que nous pourrons faire dans Emacs 25 avec le chargement dynamique?
wdkrnls

Réponses:

3

Il n'y a pas de "meilleures pratiques" pour cela, non. Ni aucun type de support existant pour cela. Je pense que s'il est installé spécifiquement pour le paquet Foo, alors l'endroit où l'installer serait dans le répertoire du paquet Foo.

En ce qui concerne la façon de le faire, en supposant que votre package Elisp est installé via ELPA, vous voudrez peut-être essayer d'ajouter dans votre fichier Elisp principal quelque chose comme:

(eval-when-compile (call-process "make"))

puis fournissez un Makefile approprié. Bien sûr, pour que cela fonctionne dans "la plupart" des plateformes, vous voudrez probablement quelque chose d'un peu plus sophistiqué.

Stefan
la source
1

Vous voudrez peut-être envisager de fournir une recette el-get pour l'installation de votre package.

Voir la section 9 "Création de recettes" dans le fichier d'informations .

L' :build/system-typeinstallation peut être particulièrement intéressante si vous avez des exigences variables sur différentes plates-formes. Voir section 9.5 "Build" pour plus de détails.

phils
la source