To answer my own question, the problem was a bug (feature?) in how 'DIR' is processed.
The Makefile.PLs in 'DIR' are passed INST_* with '../' prepended - no mater how deep the subdir is. It is always assumed to be only one level down. This results in a separate blib tree in the wrong place in my case. This in-turn results in a failure to install my compiled XSUBs.


Looking at MakeMaker's code, apparently '../' is pre-pended only if INST_* is a relative path. So I passed INST_* to WriteMakefile as absolute paths determined from the cwd where the top-level Makefile.PL is run. It works, but is obviously not ideal.

use Cwd qw(cwd abs_path);
my $pwd = abs_path(cwd()) || die "Can't figure out your cwd!";
...
    INST_BIN     => File::Spec->catdir($pwd,'blib','bin'),
    INST_LIB     => File::Spec->catdir($pwd,'blib','lib'),
    INST_ARCHLIB => File::Spec->catdir($pwd,'blib','arch'),
    INST_SCRIPT  => File::Spec->catdir($pwd,'blib','script'),
    INST_MAN1DIR => File::Spec->catdir($pwd,'blib','man1'),
    INST_MAN3DIR => File::Spec->catdir($pwd,'blib','man3'),
...


One pretty good solution would be to determine and set INST_* to absolute paths in MakeMaker in the top-level make and pass absolute paths to the lower-level makes.


Sorry I didn't have time to provide a patch.

-Ilya



Reply via email to