Abordagem adequada para fornecer programas externos junto com pacotes?

12

Eu mantenho vários pacotes elisp (por exemplo, codesearch, emacs-ycmd, traad) que se beneficiariam de poder instalar os programas externos que eles usam, economizando tempo e esforço para alguns usuários. Por exemplo, com codesearch.el, seria bom poder baixar, compilar e instalar as ferramentas de pesquisa de código (escritas em go, não elisp) para os usuários. Isso removeria pelo menos uma barreira para o uso da embalagem.

Existem "melhores práticas" para fazer isso? Por exemplo, onde devo colocar os programas externos?

Se você não tiver um conselho direto, poderá me referir a algum pacote que faça algo assim (e, idealmente, faça isso bem)?

Abingham
fonte
1
Receio que possa estar entre algo extremamente difícil e impossível, considerando que você não tem controle se o sistema operacional Emacs do usuário usa Linux, Windows ou Mac OS como o gerenciador de inicialização ;-).
mbork
2
Receio que seja melhor desacoplar o programa externo do pacote Emacs para obter o máximo de flexibilidade. A abordagem de fornecer o software externo com o pacote Emacs parece funcionar melhor em coisas como arquivos Ruby / Python / TeX / ... incluídos, que são interpretados. A abordagem oposta de fornecer ao código Emacs Lisp um pacote instalado através do gerenciador de pacotes do seu sistema (como mu e notmuch do) é menos flexível porque você não pode ter carregamentos automáticos.
wasamasa
Parece que vocês dois estão certos. Os únicos exemplos que posso encontrar dos pacotes emacs que fornecem dependências externas são, por exemplo, o jedi, que agrupa alguns scripts python no pacote elpa.
abingham
isso é algo que poderemos fazer no Emacs 25 com carregamento dinâmico?
Wdkrnls

Respostas:

3

Não há "melhores práticas" para isso, não. Nem qualquer tipo de suporte existente para ele. Eu acho que se for instalado especificamente para o pacote Foo, o local para instalá-lo seria dentro do diretório do pacote Foo.

Quanto a como fazer isso, como o seu pacote Elisp está instalado via ELPA, você pode tentar adicionar no seu arquivo Elisp principal algo como:

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

e forneça um Makefile apropriado. Obviamente, para que ele funcione na "maioria" das plataformas, você provavelmente desejará algo um pouco mais sofisticado.

Stefan
fonte
1

Você pode querer fornecer uma receita el-get para instalar seu pacote.

Consulte a seção 9 "Criação de receitas" no arquivo de informações .

O :build/system-typerecurso pode ser de particular interesse, se você tiver requisitos variáveis ​​em diferentes plataformas. Veja a seção 9.5 "Build" para detalhes.

phils
fonte