Как правильно добавить служебный модуль в дистрибутив CPAN? - PullRequest
5 голосов
/ 23 октября 2010

Я бы хотел выделить некоторые вещи из Crypt :: SSLeay Makefile.PL в пару отдельных классов.Эти классы будут использоваться только Makefile.PL.Поэтому я хочу, чтобы они

  1. не были проиндексированы индексатором PAUSE
  2. , а не были установлены как часть модуля.

СледуетЯ просто положил их в inc, как это делает Module :: Install ?На что еще стоит обратить внимание?

Ответы [ 2 ]

4 голосов
/ 23 октября 2010

PAUSE ищет параметр no_index в файле META.yml (спецификации: v1.4 , v2 ).META.yml по умолчанию, который создает ExtUtils::MakeMaker, содержит

no_index:
    directory:
        - t
        - inc

, но вы можете добавить к нему больше данных, если хотите

    package:
        - Some::Package::Used::For::Building::But::Not::To::Be::Installed
    file:
        - a-file/with/a/package/statement/that-should-be/ignored.pm
2 голосов
/ 23 октября 2010

Здесь действительно две проблемы. Один из них - запретить PAUSE индексировать дополнительные модули в вашем дистрибутиве, чтобы они не отображались в 02 пакетах , и как не обмануть пользователя при их установке.

Ответ PAUSE - это сочетание правильного исправления, материала no_index и старого фольклора фальсификации mldistwatch . PAUSE хочет узнать, какие пакеты находятся в вашем дистрибутиве. Он ищет пакет в той же строке, что и пространство имен. Если это не на одной линии, PAUSE проходит через него. Итак, вы увидите в некоторых старых «скрытых» модулях такие строки:

 package # separate lines get past PAUSE
      Some::Helper::Module;

Если вам нравится смотреть за кулисы, соответствующий код находится в PAUSE :: mldistwatch :: filter_pms () in ( PAUSE github repo ).

Другая проблема заключается в том, чтобы не устанавливать лишние вещи, которые есть в дистрибутиве. Индексирование не имеет к этому никакого отношения. Файлы сборки перемещают множество вещей в blib (библиотека сборки), чтобы подготовить их к установке. Все, что заканчивается там, устанавливается. Хитрость заключается в том, чтобы не позволить сборщику поместить туда ваши вспомогательные модули. Обычно это не проблема, если вы не размещаете их на верхнем уровне своего дистрибутива или в каталоге lib .

...