Как я могу настроить Module :: Build, чтобы НЕ устанавливать файлы только для чтения? - PullRequest
4 голосов
/ 21 июля 2011

Я столкнулся со сценарием, в котором я собираю модуль Perl как часть другой системы сборки на компьютере с Windows.Я использую параметр --install_base Module :: Build, чтобы указать временный каталог для размещения файлов модулей, пока общая система сборки не сможет их использовать.К сожалению, другая система сборки имеет проблему, если какой-либо из ее файлов, от которых она зависит, доступен только для чтения - она ​​пытается удалить любые сгенерированные файлы перед их сборкой и не может очистить файлы только для чтения (она пытается удалить ееи только для чтения, что приводит к ошибке.) По умолчанию Module::Build устанавливает свои библиотеки с включенным битом только для чтения.

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

Можно ли настроить *Установщик на основе 1009 *, чтобы НЕ включать этот бит только для чтения, когда файлы установлены в каталог --install_base?Если да, то как?

1 Ответ

4 голосов
/ 21 июля 2011

Нет, это не настраиваемый параметр. Это делается методом copy_if_modified в Module::Build::Base:

# mode is read-only + (executable if source is executable)
my $mode = oct(444) | ( $self->is_executable($file) ? oct(111) : 0 );
chmod( $mode, $to_path );

Если вы управляете Build.PL, вы можете создать подкласс Module::Build и переопределить copy_if_modified для вызова базового класса, а затем chmod для записи в файл. Но у меня создается впечатление, что вы просто пытаетесь установить чужой модуль.

Вероятно, проще всего было бы установить копию Module::Build в личный каталог, а затем отредактировать ее для использования oct(666) (или любого другого режима, который вы хотите). Затем вызовите perl -I /path/to/customized/Module/Build Build.PL. Или (как вы сказали) просто используйте стандарт Module::Build и добавьте отдельный шаг, чтобы пометить все, что будет доступно для записи впоследствии.

Обновление: YSTH прав; это ExtUtils :: Install , которая фактически делает окончательную копию. copy_if_modified для заполнения blib. Но ExtUtils :: Install также жестко кодирует режим только для чтения. Вы можете использовать настроенную версию ExtUtils :: Install, но, вероятно, проще сделать отдельный шаг.

...