Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

Re: Ideas on more foolproof Makefile.PL and generated Makefile

by bojinlund (Parson)
on Mar 22, 2012 at 14:33 UTC ( #961033=note: print w/replies, xml ) Need Help??

in reply to Ideas on more foolproof Makefile.PL and generated Makefile


This is so far I have come.

Problems calling dmake from within Emacs

Emacs in Windows replaces at start up the environment variable SHELL to something like "C:/Program Files (x86)/GNU Emacs 23.4/bin/cmdproxy.exe". Processes started by Emacs will inherit this value.

Starting dmake from within emacs results in that dmake uses the cmdproxy.exe as shell. The logic in the start-up files of dmake (when SHELL is "C:/Program Files (x86)/GNU Emacs 23.4/bin/cmdproxy.exe") configure dmake for using a Kornshell compatible shell.

Cmdproxy.exe sometimes does not like all the arguments and issues messages like "warning: extra args ignored after '-e'". It also truncates the command. The results of using cmdproxy.exe as SHELL are unexpected and errors are difficult to find. Sometimes the Windows command shell is started in interactive mode and the action initiated by (compile "dmake" nil) is stuck.

I have filed a bug: The bug report has been left without action.

Runtime check in generated Makefile

Have learnt that ExtUtils::MakeMaker has limited GNU Make support on Windows. See also:

I have tried to find "portable" makefile idioms to:

  • Find which make program is used
  • Give an error message and stop the make program
Portable means here they can be used by many make programs like GNU Make, dmake, nmake and more.

Example of Makefile idiom to find which make program is used are:

ifeq "{xxx}" "xxx" MAKE_USED = dmake endif ifneq "$(.VARIABLES)" "" MAKE_USED = gnumake endif #if... How can nmake be identified? #MAKE_USED = nmake #endif

To generate an error message and stop GNU Make is straight forward:

NORL =@# No Output of Recipe Line .PHONY: check_used_make_program check_used_make_program: ifeq "$(MAKE_USED)" "gnumake" $(NORL)$(error ERROR: Using $(MAKE_USED) for a Makefile intended f +or ?make) endif
I have not found any better way to give a message and stop dmake than:
ifeq "$(MAKE_USED)" "dmake" # The message is NOT sent to STDERR $(NORL)echo ERROR: Using $(MAKE_USED) for a Makefile intended for +?make $(assign ERR OR = ERROR) #Generates an error message endif

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://961033]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (3)
As of 2017-03-28 03:42 GMT
Find Nodes?
    Voting Booth?
    Should Pluto Get Its Planethood Back?

    Results (326 votes). Check out past polls.