2011-01-19 3 views
3

У меня есть коллекция скриптов Perl и пару файлов данных XML, от которых я хочу распространять. В настоящее время у меня есть сценарий оболочки, который копирует bin/* и share/* в целевое дерево установки. Это кажется немного неуклюжим, поэтому я хотел бы пойти с чем-то вроде стандартного CPAN-способа упаковки Perl.Perl CPAN-style Packaging без lib/*. Pm

Имеет смысл расслоение того, что у меня есть в пакете CPAN-стиля? Я подозреваю, что в этом нет ничего плохого, но каждый учебник, на который я смотрел, полагает, что lib/Blah.pm является важным файлом в любом пакете - у меня даже нет каталога lib /, не говоря уже о любых файлах .pm.

Есть ли стандартное решение для упаковки коллекции скриптов Perl наряду с некоторыми данными в каталоге share /?

ответ

6

Распределения не заботятся о модулях. Большинство инструментов настроены для обработки модулей по умолчанию, потому что это обычный случай, но вы действительно можете распространять что угодно, пока вы предоставляете логику, чтобы сообщать файлам сборки, что делать с любыми файлами, которые вы предоставляете.

ExtUtils :: Makemaker трудно использовать для такого рода вещей, но Module :: Build (несмотря на слово «Модуль») делает его намного проще. Однако вам нужно немного узнать о пользовательских классах Module :: Build, чтобы вы могли переопределить поведение по умолчанию, которое вам не нужно.

Если вы говорите об автономных сценариях, вы можете посмотреть мой дистрибутив scriptdist или Dr. Dobbs article I wrote about it. Он не будет обрабатывать часть share/, но добавить ее не так уж сложно.

+0

Если система сборки действительно сердитая, вы всегда можете создать файл lib/App/MyApp.pm, чтобы содержать $ VERSION или что-то еще. Это может быть хорошей идеей, если вы публикуете на CPAN в любом случае, чтобы упростить поиск. – jon

+0

Это, вероятно, не место для него, но 'make test' терпит неудачу на' script dist'. Есть ли где-то для обсуждения таких проблем? – ajwood

+0

Module :: Build 0.36 имеет опцию [share_dir] (http://p3rl.org/Module::Build::API#share_dir), нет необходимости писать дополнительный код. – daxim