I've encountered a scenario where I'm building a Perl module as part of another Build system on a Windows machine. I use the --install_base
option of Module::Build to specify a temporary directory to put module files until the overall build system can use them. Unfortunately, that other Build system has a problem if any of its files that it depends on are read only - it tries to delete any generated files before rebuilding them, and it can't clean any read-only files (it tries to delete it, and it's read only, which gives an error.) By default, Module::Build
installs its libraries with the read-only bit enabled.
One option would be to make a new step in the build process that removes the read-only bit from the installed files, but due to the nature of the build tool that will require a second temporary directory...ugh.
Is it possible to configure a Module::Build
based installer to NOT enable that read-only bit when the files are installed to the --install_base directory? If so, how?
No, it's not a configurable option. It's done in the
copy_if_modified
method inModule::Build::Base
:If you controlled the Build.PL, you could subclass
Module::Build
and overridecopy_if_modified
to call the base class and thenchmod
the file writable. But I get the impression you're just trying to install someone else's module.Probably the easiest thing to do would be to install a copy of
Module::Build
in a private directory, then edit it to useoct(666)
(or whatever mode you want). Then invokeperl -I /path/to/customized/Module/Build Build.PL
. Or, (as you said) just use the standardModule::Build
and add a separate step to mark everything writable afterwards.Update: ysth is right; it's ExtUtils::Install that actually does the final copy.
copy_if_modified
is for populatingblib
. But ExtUtils::Install also hardcodes the mode to read-only. You could use a customized version of ExtUtils::Install, but it's probably easier to just have a separate step.