Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Problem installing Carp-1.25 under DWIM Perl

by bojinlund (Monsignor)
on May 21, 2012 at 09:53 UTC ( [id://971589]=note: print w/replies, xml ) Need Help??


in reply to Problem installing Carp-1.25 under DWIM Perl

I had a similar problem see Ideas on more foolproof Makefile.PL and generated Makefile.

Realized after some days, when I saw  # dmake expands {{ to { and }} to }. in the file perl/lib/ExtUtils/MM_Win32.pm that I should have used dmake!!

Using wrong make program in Windows often results in difficult to interpret error messages. The time to find the real problem (using wrong makefile program) is often long.

I have proposed (with no success) to make the makefile generated by ExtUtils::MakeMaker more foolprof by:

  1. Add information about usage in the header of the generated makefiles. Something like:
    # Typical usage: # perl Makefile.PL # dmake # dmake test # dmake install
  2. If the makefile is used by the wrong make program generate an error message or other noise, so it is “impossible” to be foolish.

Replies are listed 'Best First'.
Re^2: Problem installing Carp-1.25 under DWIM Perl
by Anonymous Monk on May 22, 2012 at 07:44 UTC

    I have proposed (with no success)

    Where did you propose?

      I have sent the following patch to the maintainer of ExtUtils-MakeMaker

      diff -u -r t:/makeMaker/ExtUtils-MakeMaker-6.62/lib/ExtUtils/MakeMaker +.pm t:/makeMaker/ExtUtils-MakeMaker-modified/lib/ExtUtils/MakeMaker.pm --- t:/makeMaker/ExtUtils-MakeMaker-6.62/lib/ExtUtils/MakeMaker.pm 2012-04-01 09:02:31.450034700 +0200 +++ t:/makeMaker/ExtUtils-MakeMaker-modified/lib/ExtUtils/MakeMaker.pm 2012-04-01 09:03:05.508694300 +0200 @@ -620,17 +620,13 @@ $argv =~ s/^\[/(/; $argv =~ s/\]$/)/; + push @{$self->{RESULT}}, $self->makefile_head; push @{$self->{RESULT}}, <<END; -# This Makefile is for the $self->{NAME} extension to perl. -# -# It was generated automatically by MakeMaker version +# This file was generated automatically by MakeMaker version # $VERSION (Revision: $Revision) from the contents of # Makefile.PL. Don't edit this file, edit Makefile.PL instead. # -# ANY CHANGES MADE HERE WILL BE LOST! -# # MakeMaker ARGV: $argv -# END push @{$self->{RESULT}}, $self->_MakeMaker_Parameters_section(\%initial_att); diff -u -r t:/makeMaker/ExtUtils-MakeMaker-6.62/lib/ExtUtils/MM_Any.pm t:/makeMaker/ExtUtils-MakeMaker-modified/lib/ExtUtils/MM_Any.pm --- t:/makeMaker/ExtUtils-MakeMaker-6.62/lib/ExtUtils/MM_Any.pm 201 +2-04-01 09:05:27.800943800 +0200 +++ t:/makeMaker/ExtUtils-MakeMaker-modified/lib/ExtUtils/MM_Any.pm 2012-04-01 09:09:10.771335900 +0200 @@ -382,6 +382,38 @@ return $make; } +=head2 Preludes + +These are methods which produce things early in the Makefile. + + +=head3 makefile_head + +Generate the head of the Makefile. + +=cut + +sub makefile_head { + my $self = shift; + + my $target_make_program_index = $self->is_make_type('dmake')? 1 : + $self->is_make_type('nmake')? 2 : 0; + my $target_make_program = ('make', 'dmake', 'nmake')[$target_make_program_index]; + my $sudo_prefix = ('sudo ', '', '')[$target_make_program_index]; + + return <<END; +# This Makefile is for the $self->{NAME} extension to perl. +# +# DO NOT EDIT! ANY CHANGES MADE IN THIS FILE WILL BE LOST! +# +# Typical usage: +# perl Makefile.PL +# ${target_make_program} +# ${target_make_program} test +# ${sudo_prefix}${target_make_program} install +# +END +} =head2 Targets

      I have also ask for guidance where to add the following:

      1. Add these definition to (GNU)make and dmake Makefiles.
        It should be added EARLY in the Makefile.
        "Direct" call from the constructor or part of a section or a new MakeMaker section or ... ?
        # --- MakeMaker ???? section: ifeq "{xxx}" "xxx" MAKE_USED = dmake endif ifneq "$(.VARIABLES)" "" MAKE_USED = gnumake endif
      2. Add a snippet somewhere in Makefiles for nmake.
        It is a trap if other make programs are used
        !IF 0 This makefile is intended to be used by nmake !ENDIF
        Should this be a "direct" call from the constructor, a part of a section or a new MakeMaker section or ... ?
      3. Add the target check_run_conditions to the top targets
        # --- MakeMaker top_targets section: all :: check_run_conditions pure_all $(NOECHO) $(NOOP)
        Probably modification of the method all_target in MM_Any.pm and MM_Unix.pm
      4. Add the actions for target check_run_conditions
        The code will look something like:
        push @{$self->{RESULT}}, '', '# --- MakeMaker check_run_conditions section:', 'check_run_conditions ::'; if($target_make_program eq 'make'){ push @{$self->{RESULT}}, 'ifeq "$(MAKE_USED)" "dmake"', '# Note! The message is NOT sent to STDERR', ' $(NOECHO)echo ERROR: Using $(MAKE_USED) for a Makefile intended for ' .${target_make_program}, ' $(assign ERR OR = ERROR) #Generates an error message', 'endif'; } if($target_make_program eq 'dmake'){ push @{$self->{RESULT}}, 'ifeq "$(MAKE_USED)" "gnumake"', ' $(NOECHO)$(error ERROR: Using $(MAKE_USED) for a Makefile intended for ' .${target_make_program}.'.)', 'endif'; } “otherwise” { push @{$self->{RESULT}}, ' $(NOECHO) $(NOOP)'; }
        Should this be a part of a section or a new MakeMaker section or ?
      For background see also Ideas on more foolproof Makefile.PL and generated Makefile.
Re^2: Problem installing Carp-1.25 under DWIM Perl
by HelenCr (Monk) on May 21, 2012 at 15:32 UTC

    Thank you for the good and detailed answer

    Helen

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://971589]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (6)
As of 2024-04-18 12:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found