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
