Pergunta

Depois de se ofereceu para manter um pacote CPAN estagnada (GnuPG) Eu gostaria melhorar os arquivos de instalação de tal forma que eles sair normalmente se o binário gpg (que GnuPG é um wrapper para) não pode ser encontrado. Depois de um pouco de buscar inspiração de outros pacotes, eu vim com adicionar esta a Makefile.PL:

my @paths = grep { -x "$_/gpg" } split /:/, $ENV{PATH}, $ENV{PGP_PATH};

unless ( scalar @paths ) {
    print <<EOD;
I can't find the gpg binary on your system. If it's not installed in your usual PATH, set $ENV{PGP_PATH} to include where it can be found and try installing again.
EOD

    exit(0);
}

WriteMakefile(
    'NAME'        => 'GnuPG',
    'VERSION_FROM' => 'GnuPG.pm',
    'EXE_FILES'    => [ gpgmailtunl ],
    'LICENSE'      => 'GPL',
    'LIBS'         => [ @paths ],
);

O que sane olhada?

Foi útil?

Solução

O conceito geral é bom - se o que você precisa para o trabalho não está presente, não criar o makefile. Os testadores CPAN têm regras sobre sair com um status de zero em caso de falha (o que me irrita muito, mas não importa, eu odeio falhar com um status de sucesso!)

.

Pergunta: você manter um registro de onde PGP foi encontrado no momento da instalação, de modo que se alguém usa o módulo Perl sem a localização em seu caminho, o módulo pode ainda correr?

Para DBD :: Informix, tenho dependências rígidos sem que o módulo não podem ser compilados; o Makefile.PL é uma grande produção em si mesmo por causa disso. Ele também tenta versões alça do software que abrange mais de 15 anos; que complica a sua vida, também. Se os pré-requisitos (alguns módulos Perl, alguns softwares não-Perl). Não está disponível, não irá instalar

Outras dicas

Se você estiver usando Module :: Instalar ou parte dessa família, você pode usar fazer

requires_external_bin 'gpg';

Consulte Module :: Install :: externo para detalhes.

No bom motivo para reinventar a roda.

Não faria mais sentido para apenas imprimir um aviso? É gpg necessário para a instalação em si?

O código em si parece bom para mim. Mas talvez haja uma funcionalidade built-in 'que'. :).

Para uma maior precisão você deve olhar para File :: Qual ou pelo menos use File :: espec-> path ().

File :: Qual seria uma solução multiplataforma. Você terá que quer empacotá-lo em inc / diretório ou exigir que seja instalado com configure_requires. Para a UE :: MM isso pode ser feito com

    META_MERGE => {
        configure_requires => {
            'File::Which' => 0,

Module :: Install também é uma boa solução, mas você vai precisar para liberar nova versão da distribuição de cada nova versão tempo de Module :: Install é liberado e mudanças são importantes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top