Как я могу проверить, доступна ли бинарная зависимость в Perl? - PullRequest
2 голосов
/ 10 мая 2009

Вызвавшись для поддержки застойного пакета CPAN (GnuPG), я хотел бы улучшить установочные файлы так, чтобы они корректно выходили, если двоичный файл gpg (для которого GnuPG является оболочкой) не может быть найден. После небольшого поиска вдохновения от других пакетов, я придумал добавить это в 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 ],
);

Это выглядит вменяемым?

Ответы [ 5 ]

3 голосов
/ 10 мая 2009

Если вы используете Module :: Install или часть этого семейства, вы можете использовать do

requires_external_bin 'gpg';

Подробнее см. Module :: Install :: External .

Нет веских причин изобретать велосипед.

1 голос
/ 10 мая 2009

Файл :: Который был бы кроссплатформенным решением. Вам нужно будет либо связать его в каталог inc /, либо потребовать его установки с помощью configure_requires. Для EU :: MM это можно сделать с помощью

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

Module :: Install также является хорошим решением, но вам нужно будет выпускать новую версию дистрибутива каждый раз, когда выпускается новая версия Module :: Install и изменения важны.

1 голос
/ 10 мая 2009

Общая концепция в порядке - если то, что вам нужно для работы, отсутствует, не создавайте make-файл. У тестеров CPAN есть правила выхода из программы с нулевым статусом при сбое (что меня сильно раздражает, но не берите в голову; я терпеть не могу сбой при статусе успеха!).

Вопрос: ведете ли вы запись о том, где был обнаружен PGP во время установки, чтобы, если кто-то еще использовал модуль Perl без местоположения на своем пути, модуль все еще мог работать?

Для DBD :: Informix у меня есть жесткие зависимости, без которых модуль не может быть скомпилирован; Из-за этого Makefile.PL сам по себе является крупным производством. Он также пытается работать с версиями программного обеспечения, охватывающими более 15 лет; это тоже усложняет его жизнь. Если предварительные требования (некоторые модули Perl; некоторые не-Perl программное обеспечение) недоступны, он не будет установлен.

1 голос
/ 10 мая 2009

Для большей точности вы должны взглянуть на File :: Which или хотя бы использовать File :: Spec-> path ().

1 голос
/ 10 мая 2009

Не будет ли больше смысла просто напечатать предупреждение? Нужен ли gpg для самой установки?

Сам код выглядит нормально у меня. Но, возможно, есть встроенная функциональность «который». :).

...