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.

Reply via email to