Skip Menu |

This queue is for tickets about the ExtUtils-MakeMaker CPAN distribution.

Report information
The Basics
Id: 36118
Status: stalled
Priority: 0/
Queue: ExtUtils-MakeMaker

People
Owner: Nobody in particular
Requestors: stro [...] cpan.org
Cc:
AdminCc:

Bug Information
Severity: Important
Broken in: (no value)
Fixed in: (no value)



Subject: Line too long under MSWin32
When trying to compile Glib under MSWin32, I've encountered a problem with Mksymlists: NMAKE : fatal error U1095: expanded command line 'C:\bin\dev\perl\bin\perl.exe -MExtUtils::Mksymlists -e "Mksymlists('NAME'= C:\bin\dev\perl\bin\perl.exe -MExtUtils::Mksymlists -e "Mksymlists('NAME'=>\"Glib\", 'DLBASE' => 'Glib', 'DL_FUNCS' => { Glib=>[] }, 'FUNCLIST' => [q[SvGChar], q[SvGKeyFile], q[SvGParamFlags], q[SvGParamSpec], q[SvGSignalFlags], q[_gperl_call_XS], q[gperl_alloc_temp], q[gperl_argv_free], q[gperl_argv_new], q[gperl_argv_update], q[gperl_boxed_package_from_type], q[gperl_boxed_type_from_package], q[gperl_callback_destroy], q[gperl_callback_invoke], q[gperl_callback_new], q[gperl_closure_new], q[gperl_closure_new_with_marshaller], q[gperl_convert_back_enum], q[gperl_convert_back_enum_pass_unknown], q[gperl_convert_back_flags], q[gperl_convert_enum], q[gperl_convert_flag_one], q[gperl_convert_flags], q[gperl_croak_gerror], q[gperl_default_boxed_wrapper_class], q[gperl_filename_from_sv], q[gperl_format_variable_for_output], q[gperl_fundamental_package_from_type], q[gperl_fundamental_type_from_package], q[gperl_gerror_from_sv], q[gperl_get_boxed_check], q[gperl_get_object], q[gperl_get_object_check], q[gperl_handle_logs_for], q[gperl_install_exception_handler], q[gperl_new_boxed], q[gperl_new_boxed_copy], q[gperl_new_object], q[gperl_object_check_type], q[gperl_object_package_from_type], q[gperl_object_set_no_warn_unreg_subclass], q[gperl_object_stash_from_type], q[gperl_object_type_from_package], q[gperl_package_from_type], q[gperl_param_spec_package_from_type], q[gperl_prepend_isa], q[gperl_register_boxed], q[gperl_register_error_domain], q[gperl_register_fundamental], q[gperl_register_object], q[gperl_register_sink_func], q[gperl_remove_exception_handler], q[gperl_run_exception_handlers], q[gperl_set_isa], q[gperl_signal_connect], q[gperl_signal_set_marshaller_for], q[gperl_str_eq], q[gperl_str_hash], q[gperl_sv_copy], q[gperl_sv_is_defined], q[gperl_sv_free], q[gperl_sv_from_filename], q[gperl_sv_from_gerror], q[gperl_sv_from_value], q[gperl_sv_get_type], q[gperl_try_convert_enum], q[gperl_try_convert_flag], q[gperl_type_class], q[gperl_type_from_package], q[gperl_value_from_sv], q[newSVGChar], q[newSVGParamFlags], q[newSVGParamSpec], q[newSVGSignalFlags], q[newSVGSignalInvocationHint], q[newSVGSignalQuery]], 'IMPORTS' => { }, 'DL_VARS' => []);"' too long Stop. It would be very good to have this list passed via file to avoid such problems. -- Serguei Trouchelle
From: stro [...] railways.dp.ua
Here's a patch that I made for MM_Win32.pm and Mksymlists.pm to implement passing parameters via file.
55a56,75 > > my @funclist; > if (length neatvalue($funclist) > 128) { > # Use FUNCLIST_FILE > if (open FUNCLIST_FILE, '>Makefile.FNL') { > foreach (@$funclist) { > print FUNCLIST_FILE $_, "\n"; > } > @funclist = (q!, 'FUNCLIST_FILE' => 'Makefile.FNL' !); > close FUNCLIST_FILE; > } else { > # Fallback to FUNCLIST > @funclist = (q!, 'FUNCLIST' => !,neatvalue($funclist),); > } > } else { > # Use FUNCLIST > @funclist = (q!, 'FUNCLIST' => !,neatvalue($funclist),); > } > > 67c87 < q!, 'FUNCLIST' => !,neatvalue($funclist), --- > @funclist,
21c21 < ($spec{FILE} and ($spec{DL_FUNCS} or $spec{FUNCLIST})) ); --- > ($spec{FILE} and ($spec{DL_FUNCS} or $spec{FUNCLIST} or $spec{'FUNCLIST_FILE'})) ); 25a26,36 > if ($spec{'FUNCLIST_FILE'}) { > if (open FUNCLIST_FILE, '<' . $spec{'FUNCLIST_FILE'}) { > while (<FUNCLIST_FILE>) { > chomp; > push @{$spec{'FUNCLIST'}}, $_; > } > close FUNCLIST_FILE; > } else { > croak "Cannot open FUNCLIST_FILE: $!\n"; > } > }
Hmm. I'm not happy with the idea that a temp file is generated at Makefile.PL time and never cleaned up. Change it so the work is done in the $self->{BASEEXT}.def target. Make use of echo() and split_command() to write out the file in pieces. Then have Mksymlists() read the file like you do now. After that, delete the temp file.