Help needed testing automatic win64 configuration

Brad Anderson eco at gnuk.net
Wed Oct 16 22:27:04 PDT 2013


On Wednesday, 16 October 2013 at 02:45:26 UTC, Manu wrote:
> I just tried your '-3' version. It has problems.
> [snip]
> 2: gcstub64.obj and phobos64.lib are still in 
> D/dmd2/windows/lib. They
> should be moved to lib64/
> 3: sc.ini contains: LIB="%@P%\..\lib64";"%@P%\..\lib"   <- why 
> is '../lib/'
> still present in [Environment64]? That should be removed, it 
> can only lead
> to erroneous attempts to link the OMF libs. Rather have a 
> "can't find lib"
> error, than a weird lib format error that most programmers 
> won't understand.

I agree. It's just a matter of getting Walter on board.  He 
hasn't said yay or nay to lib64 but he's just put sc.ini in the 
repo now for hot steamy pull request action so I think he's 
probably down.

> 4: It fails to find the Microsoft libs. Here is the relevant 
> parts of my
> sc.ini as installed by the installer:
>
> LIB="%@P%\..\lib64";"%@P%\..\lib"
>
> ;;;; search path for C Runtime libraries
> ; the following lib path works with VS2008, VS2010, VS2012, 
> VS2013
> ; prepending because 32-bit OMF versions can cause link.exe to 
> fail
> LIB="C:\Program Files (x86)\Microsoft Visual Studio 
> 11.0\VC\lib\amd64";%LIB%
>
> ;;;; search path for Platform libraries
> ; the following lib path works with Windows SDK 6.x and 7.x
> LIB="C:\Program Files (x86)\Windows 
> Kits\8.0\lib\winv6.3\um\x64";%LIB%
>
> ; the following lib path works with Windows SDK 8.0 and 8.1
> LIB="%WindowsSdkDir%Lib\win8\um\x64";%LIB%
>
>
> I have VS2010 and VS2012 installed on a Win8 machine. I have 
> libs in these
> locations:
>
> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64  <- 
> this one
> seems to be unknown to the installer. These libs should be used 
> in
> conjunction with VS2010.
> C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64  <- the 
> installer
> refers to %WindowsSdkDir%, which is not present on my system. 
> Use the
> absolute path instead? These libs are to use used in 
> conjunction with
> VS2012.
> C:\Program Files (x86)\Microsoft Visual Studio 
> 10.0\VC\lib\amd64  <-
> runtime libs, how to pick which version? Prompt during 
> installation?
> C:\Program Files (x86)\Microsoft Visual Studio 
> 11.0\VC\lib\amd64  <-
> runtime libs, how to pick which version? Prompt during 
> installation?
>
> I should note that I think VisualD needs to do some work here 
> too. VisualD
> should override the linker and lib paths, since it has more 
> information.
> Ie, how does cmdline DMD choose which linker/runtime libs to 
> use? Perhaps a
> prompt during installation? Choose the newest (appears to be 
> the current
> behaviour).
> Whereas VisualD will be running inside of an instance of either 
> VS2010 or
> VS2012 (I use both, this is very common practise) on my 
> machine, and it
> should configure the linker and lib paths appropriately for the 
> version of
> VisualStudio currently in use when building, otherwise there 
> will be link
> troubles against C/C++ libraries also being built in the same 
> solution
> (yes, it's common to have C/C++ and D in the same solution).
>
> For clarity, on my system, when using the VS2010 compiler, it 
> should use
> these lib paths:
>   runtime libs: C:\Program Files (x86)\Microsoft Visual Studio
> 10.0\VC\lib\amd64
>   windows libs: C:\Program Files (x86)\Microsoft 
> SDKs\Windows\v7.0A\Lib\x64
>    <- AFAIK, Microsoft SDKs is the old location, installed with 
> VS2010 and
> earlier.
>
> When using the VS2012 compiler, it should use these paths:
>   runtime libs: C:\Program Files (x86)\Microsoft Visual Studio
> 11.0\VC\lib\amd64
>   windows libs: C:\Program Files (x86)\Windows 
> Kits\8.0\Lib\win8\um\x64
>  <- Windows Kits is the new location, by versions > VS2010 
> (AFAIK).
>
>
> The default installation of DMD using your new installer fails 
> to link on
> my machine because %WindowsSdkDir% is not defined on my system, 
> and since
> the 32bit dmd lib path is still present, it tries to link the 
> OMF libs, and
> complains a lot.

Very odd that it replaced one instance of %WindowsSdkDir% but not 
the last one (the installer does a find and replace on some of 
the environment variables with the paths it has detected from the 
registry). It probably has to do with the lack of newline on that 
final line in the file. I'll fix that before this next attempt.


>
> Elsewhere in the file, you detect VS2010LINKCMD, VS2013LINKCMD, 
> etc. Why
> not also have a matching suite of VS2010LIBPATH="C:\Program 
> Files
> (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64" and friends, 
> and refer to
> them down the bottom as LIB=%VS2010LIBPATH%;%LIB%, along
> with LINKCMD64=%VS2010LINKCMD%.
> Ie, detect versions of VS present, produce a VS20##LINKCMD and
> VS20##LIBPATH appropriately for each version in their little 
> section, then
> at the bottom, assign the actual variables used by DMD to the 
> version
> selected by the user when prompted during installation. The 
> result of this
> is that sc.ini will be very easy to read and understand, and if 
> the user
> later wants to switch to another VS version, it'll be obvious 
> to change the
> reference to the VS20## variables.

I'm switching to a simpler approach for this next iteration which 
I will post shortly.

>
> My primary VS environment is VS2010, which is going to be wrong 
> if the
> installer uses a 'prefer newest version' strategy.
>

I'll see what I can do but I may run out of time to get this in 
for 2.064. I think prefer newest is probably a good default but 
I'm open to hearing why that might not be the case.

> Another question, why use LINKCMD64? Shouldn't it just be 
> LINKCMD, since
> it's under the [Environment64] block? You're not using LIB64, 
> or any others
> like that.
>

I think others mentioned this but this has already been fixed.


More information about the Digitalmars-d mailing list