www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 454] New: Setting LIB environment variable has no effect on Windows

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=454

           Summary: Setting LIB environment variable has no effect on
                    Windows
           Product: D
           Version: 0.172
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: digitalmars-com baysmith.com


To reproduce problem:

Extract dmc.zip to C:\
Extract dmd.172.zip to C:\
Change directory to an alternate drive, for example "cd d:"
Create file test.d with the following contents:
  import std.stdio;
  void main() {
    writefln("test");
  }

set PATH=c:\dm\bin;c:\dmd\bin;%PATH%
dmd test.d
  --- Fails to link because phobos.lib is not found ---
set LIB=c:\dm\lib;c:\dmd\lib
dmd test.d
  --- Still fails to link because phobos.lib is not found ---
Add "% P%\..\..\dmd\lib" to LIB in c:\dm\sc.ini for example:
  LIB="% P"\..\lib";"% P%\..\..\dmd\lib";"% P%\..\mfc\lib";%LIB%
dmd test.d
  --- Now links successfully ---

This problem also leads me to believe that the dmd\bin\sc.ini may also not be
working because it was set to the following:
  LIB="% P%\..\lib";\dm\lib
Although this is in the location of the dmd compiler, it should have been
passed through to the linker like the LIB environment variable

Personally, I think dmd\bin\sc.ini should default to this:
  LIB="% P%\..\lib";"% P%\..\..\dm\lib";%LIB%
The setting \dm\lib will not work if the linker is on a different drive from
where the compile command is executed. I think it is more likely that the dm
and dmd directories will be in the same relative location.


-- 
Oct 24 2006
next sibling parent reply Don Clugston <dac nospam.com.au> writes:
I don't think DMD (or DMC) ever claims to use the LIB environment variable.
If, like I have, you've ever tried installing eight different C++ 
compilers on the one machine, you learn to hate environment variables. 
Part of the reason I gave DMD a look, was that DMC was the only compiler 
that didn't interfere with the others.

d-bugmail puremagic.com wrote:
 To reproduce problem:
 
 Extract dmc.zip to C:\
 Extract dmd.172.zip to C:\
 Change directory to an alternate drive, for example "cd d:"
 Create file test.d with the following contents:
   import std.stdio;
   void main() {
     writefln("test");
   }
 
 set PATH=c:\dm\bin;c:\dmd\bin;%PATH%
 dmd test.d
   --- Fails to link because phobos.lib is not found ---
 set LIB=c:\dm\lib;c:\dmd\lib
 dmd test.d
   --- Still fails to link because phobos.lib is not found ---
 Add "% P%\..\..\dmd\lib" to LIB in c:\dm\sc.ini for example:
   LIB="% P"\..\lib";"% P%\..\..\dmd\lib";"% P%\..\mfc\lib";%LIB%
 dmd test.d
   --- Now links successfully ---
 
 This problem also leads me to believe that the dmd\bin\sc.ini may also not be
 working because it was set to the following:
   LIB="% P%\..\lib";\dm\lib
 Although this is in the location of the dmd compiler, it should have been
 passed through to the linker like the LIB environment variable
 
 Personally, I think dmd\bin\sc.ini should default to this:
   LIB="% P%\..\lib";"% P%\..\..\dm\lib";%LIB%
 The setting \dm\lib will not work if the linker is on a different drive from
 where the compile command is executed. I think it is more likely that the dm
 and dmd directories will be in the same relative location.
Oct 25 2006
parent Bradley Smith <user domain.invalid> writes:
DMD does claim to do so on Windows. See the Environment Variables 
section under Win32 D Compiler in 
http://www.digitalmars.com/d/dcompiler.html

I agree that environment variables are problematic. I don't really care 
to use the LIB environment variable, but it was the simplest way to 
point to DMD installation and configuration problems. For example, there 
are two sc.ini which could be used when building a D program: 
dm/bin/sc.ini and dmd/bin/sc.ini. If I want to fix the error "phobos.lib 
not found", which one do I change. It is not clear. There are LIB 
settings in both.

   Bradley


Don Clugston wrote:
 I don't think DMD (or DMC) ever claims to use the LIB environment variable.
 If, like I have, you've ever tried installing eight different C++ 
 compilers on the one machine, you learn to hate environment variables. 
 Part of the reason I gave DMD a look, was that DMC was the only compiler 
 that didn't interfere with the others.
 
 d-bugmail puremagic.com wrote:
 To reproduce problem:

 Extract dmc.zip to C:\
 Extract dmd.172.zip to C:\
 Change directory to an alternate drive, for example "cd d:"
 Create file test.d with the following contents:
   import std.stdio;
   void main() {
     writefln("test");
   }

 set PATH=c:\dm\bin;c:\dmd\bin;%PATH%
 dmd test.d
   --- Fails to link because phobos.lib is not found ---
 set LIB=c:\dm\lib;c:\dmd\lib
 dmd test.d
   --- Still fails to link because phobos.lib is not found ---
 Add "% P%\..\..\dmd\lib" to LIB in c:\dm\sc.ini for example:
   LIB="% P"\..\lib";"% P%\..\..\dmd\lib";"% P%\..\mfc\lib";%LIB%
 dmd test.d
   --- Now links successfully ---

 This problem also leads me to believe that the dmd\bin\sc.ini may also 
 not be
 working because it was set to the following:
   LIB="% P%\..\lib";\dm\lib
 Although this is in the location of the dmd compiler, it should have been
 passed through to the linker like the LIB environment variable

 Personally, I think dmd\bin\sc.ini should default to this:
   LIB="% P%\..\lib";"% P%\..\..\dm\lib";%LIB%
 The setting \dm\lib will not work if the linker is on a different 
 drive from
 where the compile command is executed. I think it is more likely that 
 the dm
 and dmd directories will be in the same relative location.
Oct 25 2006
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=454


bugzilla digitalmars.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID





DMD only looks at the LIB environment variable if a LIB setting in sc.ini is
not found. This is documented on the dcompiler.html page. It's what enables DMD
to be independent of other compilers that use the LIB environment variable.

DMD sets the local (process specific) LIB environment to the contents of the
sc.ini file, which is what LINK reads because LINK is run under the control of
DMD.


-- 
Oct 25 2006