Subject: | Path to tclsh cannot contain spaces |
Using ActivePerl 5.24 (dmake 4.11 and gcc 4.6.3); I still have not tried Strawberry Perl. I installed Magicsplat 8.6.9 system-wide on my Windows 10 x64 machine, which puts tclsh.exe somewhere like "C:\Program Files\Tcl86\bin" by default, but it is on the PATH.
Tcl.pm's Makefile.PL can detect tclsh on the PATH (I am not specifying --tclsh), but it does not appear to be saving where it is correctly in the compiler args in the generated Makefile. This causes an error:
GitHub\tcl.pm> dmake
Skip blib\lib\Tcl.pm (unchanged)
Running Mkbootstrap for Tcl ()
"C:\Perl64\bin\perl.exe" -MExtUtils::Command -e chmod -- 644 "Tcl.bs"
"C:\Perl64\bin\perl.exe" -MExtUtils::Command::MM -e cp_nonempty -- Tcl.bs blib\arch\auto\Tcl\Tcl.bs 644
C:\Perl64\site\bin\gcc.exe -c -Itcl-core/include -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -DPERL_TEXTMODE_SCRIPTS -DUSE_SITECUSTOMIZE -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -fwrapv -fno-strict-aliasing -mms-bitfields -s -O2 -DVERSION=\"1.27\" -DXS_VERSION=\"1.27\" "-IC:\Perl64\lib\CORE" -DUSE_TCL_STUBS -DTCLSH_PATH=\"C:/Program Files/Tcl86/bin\" Tcl.c
gcc.exe: error: Files/Tcl86/bin": No such file or directory
dmake.exe: Error code 129, while making 'Tcl.o'
My guess is that line 119 of Makefile.PL should instead use:
$defs .= " -DTCLSH_PATH=\"\\\"".([$tclcfg{tclsh}=~m/^(.*)\//]->[0])."\\\"\""
rather than
$defs .= " -DTCLSH_PATH=\\\"".([$tclcfg{tclsh}=~m/^(.*)\//]->[0])."\\\""
This puts one final pair of unescaped quotes around the path. I admit I don't know much about Makefiles and when to escape backslashes or quotes in them; maybe I am wrong to assume they follow the same rules as shell scripts here.
Similar issues and improvements might apply to the include path (if not using stubs) and lib path.