Как я могу убедиться, что файлы без расширений устанавливаются с помощью Module::Build?
Я конвертирую унаследованную коллекцию программного обеспечения в дистрибутив на основе Module::Build.
lib
каталоги содержат, в дополнение к .pm
файлы, определенные внешние файлы, необходимые модулям. Легко убедиться, что те, которые имеют расширения, копируются вместе с .pm
файлы с помощью Module::Build
"s add_build_element
метод.
Но я не совсем понимаю, как обращаться с файлами, которые не имеют расширений. Как я могу убедиться, что эти файлы также скопированы вместе с .pm
файлы во время установки? Есть ли способ сказать Module::Build
скопировать все под lib
?
2 ответа
Build.PL
use lib 'inc';
use Local::Module::Build::Extensionless;
my $build = Local::Module::Build::Extensionless->new(
module_name => 'Foo::Bar',
license => 'restricted',
);
$build->add_build_element('lib');
$build->create_build_script;
вкл /Local/ модуль /Build/Extensionless.pm
package Local::Module::Build::Extensionless;
use parent 'Module::Build';
use File::Next qw();
sub process_lib_files {
my ($self) = @_;
my $files;
{
my $iter = File::Next::files('lib');
while (defined(my $file = $iter->())) {
$files->{$file} = $file;
}
}
# following piece from Module::Build::Base::process_files_by_extension
while (my ($file, $dest) = each %$files) {
$self->copy_if_modified(from => $file, to => File::Spec->catfile($self->blib, $dest));
}
};
1;
Но почему так сложно? Вы действительно хотите share_dir.
Если это файлы данных конкретного модуля; есть несколько неясное соглашение о том, что данные, принадлежащие lib /Acme/Foo/Bar.pm, обычно помещаются в lib/auto/Acme/Foo/Bar/.
Большинство упаковщиков, включая Module::Build, должны соблюдать это соглашение и автоматически воспринимать его как "полезную нагрузку данных" и упаковывать его вместе с файлами модуля.
Есть несколько вспомогательных модулей, включая File::ShareDir, которые могут помочь вам найти данные во время выполнения.
use File::ShareDir;
my $data_dir = File::ShareDir::module_dir('Acme::Foo::Bar');
Просто один из возможных подходов. Я надеюсь, что это может соответствовать вашим детальным требованиям.