April 17, 2005
I found a problem where D gets confused by
 pragma(lib, "recls.D.lib");
and
 pragma(lib, "recls.dm.lib");

Somehow, it loses the ".lib" at the end.


Here's my code:

import std.stdio;
import std.recls;

version(origNames)
{
    pragma(lib, "recls.D.lib");
    pragma(lib, "recls.dm.lib");
}
else
{
    pragma(lib, "recls_D.lib");
    pragma(lib, "recls_dm.lib");
}

pragma(lib, "wininet.lib");

void main()
{
    FtpSearch f;
}


If I compile it using the original names[version(origNames)], it can't find the files:

I:\pgm\d\examples\recls>dmd ftpsearch.d -version=origNames
d:\dmd\bin\..\..\dm\bin\link.exe ftpsearch,,,user32+kernel32/noi;
OPTLINK (R) for Win32  Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001  All Rights Reserved

recls.D
 Warning 2: File Not Found recls.D
recls.dm
 Warning 2: File Not Found recls.dm


If I compile with new names (replacing the first period with an underscore and not setting a version), it works fine.

So I've found two work-arounds to this issue.
1) Rename the libs to only have one period.
2) Add the .lib's to the command line rather than through pragmas.

(By the way, I'm using the recls libs and source from http://recls.org/downloads.html and the wininet.lib from http://svn.dsource.org/svn/projects/bindings/trunk/lib/.)

I'm using DMD v0.121 on Windows XP.

-- 
jcc7
http://jcc_7.tripod.com/d/