Perl: Makefile.PL, File :: ShareDir :: Install, курица и яйца

Модуль File::ShareDir::Install представляет собой практический способ переноса вспомогательных файлов с дистрибутивом / модулем Perl. Однако я немного озадачен тем, как включить его в зависимости моего проекта.

Я попытался установить свой пакет на новую машину (на самом деле контейнер докеров с базовой ОС + Perl + CPAN) и получил ошибку:

Can't locate File/ShareDir/Install.pm in @INC ... at Makefile.PL line 7.

Согласно документации (perldoc File::ShareDir::Install), в моем Makefile.PL шаблон должен быть:

use ExtUtils::MakeMaker;
use File::ShareDir::Install;

install_share 'share';
install_share dist => 'dist-share';
install_share module => 'My::Module' => 'other-share';

WriteMakefile( ... );       # As you normaly would

package MY;
use File::ShareDir::Install qw(postamble);

Однако для этого мне нужно, чтобы File::ShareDir::Install был предварительно установлен в моей системе как требование для запуска Makefile.PL скрипта. Объявление зависимости не сработает по понятным причинам!

Следует ли мне проинструктировать своих пользователей явно установить File::ShareDir::Install перед моим модулем? Можно ли установить его программно в Makefile.PL, напрямую вызвав модуль CPAN?


person Dacav    schedule 15.04.2016    source источник
comment
Я недавно им пользовался, и он уже был там. Но я не знаю, что там написано. Я знаю, что дело не в ядре.   -  person simbabque    schedule 15.04.2016


Ответы (2)


Для этого предназначен CONFIGURE_REQUIRES:

Доступен в версии 6.52 и выше.

Хэш модулей, необходимых для запуска самого Makefile.PL, но не для запуска вашего дистрибутива.

Это войдет в поле configure_requires вашего META.yml и настройку поля prereqs вашего META.json.

По умолчанию { "ExtUtils::MakeMaker" => 0 }, если этот атрибут не указан.

Формат такой же, как у PREREQ_PM.

Итак, вы должны добавить к своим WriteMakefile параметрам:

CONFIGURE_REQUIRES => {
  "ExtUtils::MakeMaker" => '6.52',
  "File::ShareDir::Install" => 0,
},

Тогда люди, использующие cpan или cpanm для установки модулей, автоматически установят File :: ShareDir :: Install.

person cjm    schedule 15.04.2016

Чтобы построить раздачу

  1. Сделайте File::ShareDir::Install зависимость во время сборки.

    CONFIGURE_REQUIRES => {
       'ExtUtils::MakeMaker'     => '6.52',
       'File::ShareDir::Install' => 0,
    },    
    
  2. Установите File :: ShareDir :: Install на машину, на которой вы собираете дистрибутив.

  3. Постройте дистрибутив.

    Это создаст META.yml, который включает File :: ShareDir :: Install в качестве зависимости времени сборки.

Чтобы установить дистрибутив

Просто используйте cpan или cpanm как обычно. cpan и cpanm извлекут зависимости времени сборки из META.yml и установят их перед запуском Makefile.PL.

person ikegami    schedule 15.04.2016