Michael G Schwern wrote: >At the moment the dmake recommend by MakeMaker is the old one Sarathy put >up on CPAN years ago. The company which made dmake has long since been >out of business but it seems OpenOffice has picked up the code and is >working on it again. > >It would be nice if some brave Windows user could compile up a Win32 binary >and put it up on CPAN to replace Sarathy's older version. Then I wouldn't >have to worry about working around old dmake bugs. > >http://tools.openoffice.org/ > I have built dmake 4.3 from these sources (with a couple of minor tweaks) and could put it up on CPAN, but it has a couple of problems with the Perl win32/makefile.mk.
Firstly, lines like: .IF "$(USE_IMP_SYS)$(USE_MULTI)$(USE_5005THREADS)" == "defineundefundef" now produce a warning about ".IF defined" not being supported because the lhs becomes "definedefineundef" (which "defined" is a substring of). This is easily (and backwards-compatibly) fixed by changing the above to: .IF "$(USE_IMP_SYS) $(USE_MULTI) $(USE_5005THREADS)" == "define undef undef" which I will commit shortly in any case. However, we have another problem with dmake 4.3. It has evidently fixed what must previously have been considered a bug in dmake 4.1. Perl's win32/makefile.mk invokes config_sh.PL using an options file to avoid a long command-line: $(MINIPERL) -I..\lib config_sh.PL --cfgsh-option-file \ $(mktmp $(CFG_VARS)) config.w32 > ..\config.sh where CFG_VARS contains doubled-up backslashes: CFG_VARS = \ INST_DRV=$(INST_DRV) ~ \ INST_TOP=$(INST_TOP:s/\/\\/) ~ \ INST_VER=$(INST_VER:s/\/\\/) ~ \ ... Under dmake 4.1 this works fine. Given INST_DRV=c: and INST_TOP=$(INST_DRV)\perl we end up with a Config.pm containing paths like c:\perl etc. But under dmake 4.3 we find that Config.pm now contains paths like c:\\perl which is not good and causes some tests to fail. The problem can be distilled down to this makefile: .USESHELL : FOO = C:\foo BAR = $(FOO:s,\,\\,) all : @echo FOO=$(FOO) @echo BAR=$(BAR) @C:\perl5\bin\perl.exe -e "print while <>" $(mktmp $(FOO)) @C:\perl5\bin\perl.exe -e "print while <>" $(mktmp $(BAR)) Under dmake 4.1 this outputs: FOO=C:\foo BAR=C:\\foo C:âooC:\foo i.e. it produced garbage in the temporary file unless the backslashes were doubled-up, but under dmake 4.3 this is now fixed and the output is: FOO=C:\foo BAR=C:\\foo C:\foo C:\\foo So the question is: how can we change Perl's win32/makefile.mk so that it can work with both dmake 4.1 and dmake 4.3? If we can't sort this out then there is little point in me putting up the new version of dmake. - Steve ------------------------------------------------ This email has been scanned for viruses and content by the Radan Computational Webshield Appliances.
