Am 02.12.2014 um 08:17 schrieb Jens Rehsack <rehs...@gmail.com>: > > Am 01.12.2014 um 17:59 schrieb Leon Timmermans <faw...@gmail.com>: > >> On Mon, Dec 1, 2014 at 11:48 AM, Jens Rehsack <rehs...@gmail.com> wrote: >> Hi, >> >> I run into some trouble integrating some right linker flags to a Makefile.PL >> - insane warnings from EU::MM is an offenseless artifact, deleted flags is >> next escalation. >> >> I don't want discuss about utility and futility of the misplaced parameter >> approvals (EU::MM is a Makefile generator, not a configuration tester), I >> want to discuss a reasonable approach to pass check results into Makefile >> without doing the mistakes of Module::Install again. >> >> My naive approach was passing EXTRALIBS and LDLOADLIBS instead of LIBS >> (https://github.com/i-scream/Unix-Statgrab/blob/master/Makefile.PL#L102-105) >> - I grabbed the idea from Net-SSLeay ... >> But Dave objects (https://github.com/autarch/File-LibMagic/pull/3) and >> beside being always right I have to concede a point to Dave regarding >> "warnings confuse end-users". >> >> I think you can work around the warning using a CONFIGURE callback: >> >> WriteMakefile( >> .... >> CONFIGURE => sub { >> return { >> EXTRALIBS => ..., >> LDLOADLIBS => ..., >> } >> }, >> ); > > Seems reasonable - but as you know in not to distant future, they shall > also override CC, CCLD, ... (using ExtUtils::Builder or alike, instead > of plain cc). > > Does the return hash of this callback overrides all EU::MM constants?
I think I can answer this question on my own: File-ConfigDir-Install sno$ git diff diff --git a/t/01-makefile.t b/t/01-makefile.t index 5e9bd38..2b0759c 100644 --- a/t/01-makefile.t +++ b/t/01-makefile.t @@ -35,8 +35,12 @@ delete $ENV{PERL_MM_OPT}; # local::lib + PREFIX below will FAIL WriteMakefile( NAME => 'File::ConfigDir::Install', VERSION_FROM => 'lib/File/ConfigDir/Install.pm', + CONFIGURE => sub { + { INST_ETC => "tlib-$$/etc", INST_LIB => "tlib-$$/lib", + }, + }, MAKEFILE => $FILE, PREREQ_PM => {}, ($] >= 5.005 ? $ make && perl -Mblib t/01-makefile.t cp lib/File/ConfigDir/Install.pm blib/lib/File/ConfigDir/Install.pm Manifying 1 pod document 'INST_ETC' is not a known MakeMaker parameter name. Generating a Unix-style test-21206-Makefile Writing test-21206-Makefile for File::ConfigDir::Install Writing MYMETA.yml and MYMETA.json ok 1 - Created test-21206-Makefile ok 2 - Recognized: t/etc/fsd-install.json # make -f test-21206-Makefile # cp t/etc/fsd-install.json tlib-21206/etc/fsd-install.json # Manifying 1 pod document ok 3 - Copied to blib for dist: t/etc/fsd-install.json ok 4 - Same content: t/etc/fsd-install.json # make -f test-21206-Makefile DESTDIR=/var/folders/5s/sk58jrwj7jj73phc9lcx9nh80000gn/T/cgOOrG5f45 install # Skip tlib-21206/etc/fsd-install.json (unchanged) # Manifying 1 pod document # Installing /var/folders/5s/sk58jrwj7jj73phc9lcx9nh80000gn/T/cgOOrG5f45/Users/sno/perl5/perlbrew/perls/perl-5.20.0/man/man3/File::ConfigDir::Install.3 # Installing /var/folders/5s/sk58jrwj7jj73phc9lcx9nh80000gn/T/cgOOrG5f45/Users/sno/perl5/perlbrew/perls/perl-5.20.0/etc/fsd-install.json # Appending installation info to /var/folders/5s/sk58jrwj7jj73phc9lcx9nh80000gn/T/cgOOrG5f45/Users/sno/perl5/perlbrew/perls/perl-5.20.0/lib/5.20.0/darwin-2level/perllocal.pod # Checking for /var/folders/5s/sk58jrwj7jj73phc9lcx9nh80000gn/T/cgOOrG5f45/Users/sno/perl5/perlbrew/perls/perl-5.20.0/etc/fsd-install.json ok 5 - Installed: t/etc/fsd-install.json 1..5 So neither the warning goes away nor existing constants are overwritten. > Is there a minimum version of EU::MM for this CONFIGURE callback? > >> I played a bit with MakeMaker extensions hacking >> https://metacpan.org/pod/File::ConfigDir::Install and mohawk pointed me to >> https://metacpan.org/pod/ExtUtils::MakeMaker::BigHelper ... >> I know, all those MM extensions (ShareDir::Install ...) will not play well >> together. >> >> What should be a reasonable way out - having a pluggable API for all those >> extensions? >> >> They can be made to cooperate by not exporting the postambles to MY::, but >> instead glue them together something like this: >> >> my @extensions = (...); >> load($_) for @extensions >> my @methods = map { my $method = $extension . "::postamble" } @extensions; >> sub MY::postamble { >> my ($makemaker, %args) = @_; >> return join "\n\n", map { $makemaker->$_(%args) } @methods; >> } > > For some reason File::ConfigDir::Install doesn't just override postamble, > it modifies the "install_*_*" instructions ... > ...BigHelper (mohawk pointed to that) does something similar. I think there is more a hook like https://metacpan.org/pod/Class::Method::Modifiers#around-method-s-sub needed for each of overloaded function ... Cheers -- Jens Rehsack rehs...@gmail.com