www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Multi-library project path issue

reply "#coder" <supetronix.dev1 gmail.com> writes:
Hi,

I am using the Mono-D for building a project with 3-4 library 
projects and one console project. Although I am using the Mono-D 
but I think this issue is not unique to Mono-D. Please advise me 
with a solution, if I am missing something obvious here.

Issue;

I have two "library" project with something similar to following:

AppFolder  (AppFolder contains the below two folders for 
individual project)

Lib1
  |
  ------ TestFile1.d
  |
  ------ TestFile2.d (import TestFile1;) // TestFile2 is importing 
TestFile1 in same library project.


Lib2  (Lib2 has linker path to "lib1.a" and include path to 
"AppFolder")
|
------ TestFile3.d (import Lib1.TestFile2).


If I compile the Lib1 folder alone then it will work fine but now 
if I compile the Lib2 folder then the error will be in 
"TestFile2.d" of Lib1 project that "TestFile1" is not found. If I 
change the "Import" in TestFile2 to

import Lib1.TestFile1;

Then the compilation of Lib2 starts to work. Now, if I try to 
compile the Lib1 project alone in Mono-D (I also tried same on 
D-IDE) then it will not compile.

I was ok with compiling only the Lib2 but now the next issue is 
that the code completion won't work in "Lib1.TestFile2" after 
changing the import statement (simply because Lib1.TestFile1 is 
not valid path for it any more).


What should I do? How are other people working on multi-library 
projects in D? I tried to look into generating the ".di" files 
but I don't think that will work either. I looked at "Phobos" and 
it uses the convention like "Lib1.TestFile2" (std.conv) but I 
don't think it will help me with the compilation of Lib1 project.


Thanks
May 24 2012
parent reply Jacob Carlborg <doob me.com> writes:
On 2012-05-25 08:15, #coder wrote:
 Hi,

 I am using the Mono-D for building a project with 3-4 library projects
 and one console project. Although I am using the Mono-D but I think this
 issue is not unique to Mono-D. Please advise me with a solution, if I am
 missing something obvious here.

 Issue;

 I have two "library" project with something similar to following:

 AppFolder (AppFolder contains the below two folders for individual project)

 Lib1
 |
 ------ TestFile1.d
 |
 ------ TestFile2.d (import TestFile1;) // TestFile2 is importing
 TestFile1 in same library project.


 Lib2 (Lib2 has linker path to "lib1.a" and include path to "AppFolder")
 |
 ------ TestFile3.d (import Lib1.TestFile2).


 If I compile the Lib1 folder alone then it will work fine but now if I
 compile the Lib2 folder then the error will be in "TestFile2.d" of Lib1
 project that "TestFile1" is not found. If I change the "Import" in
 TestFile2 to

 import Lib1.TestFile1;

 Then the compilation of Lib2 starts to work. Now, if I try to compile
 the Lib1 project alone in Mono-D (I also tried same on D-IDE) then it
 will not compile.

 I was ok with compiling only the Lib2 but now the next issue is that the
 code completion won't work in "Lib1.TestFile2" after changing the import
 statement (simply because Lib1.TestFile1 is not valid path for it any
 more).


 What should I do? How are other people working on multi-library projects
 in D? I tried to look into generating the ".di" files but I don't think
 that will work either. I looked at "Phobos" and it uses the convention
 like "Lib1.TestFile2" (std.conv) but I don't think it will help me with
 the compilation of Lib1 project.


 Thanks
It depends on what naming scheme you want to have on your modules. I think you should go with "Lib1.TestFile1". Actually I would go with lower case package names, i.e. "lib1.TestFile1". In that case you need to add a flag to DMD to indicate the import search path. This search path should point to the parent folder of the root package(s), in this case the parent folder of "Lib1", i.e. AppFolder. AppFolder |- main.d |- Lib1 |- TestFile1.d |- TestFile2.d |- Lib2 |- TestFile3.d |- Lib3 |- TestFile4.d $ dmd AppFolder/main.d -I./AppFolder The module and import declarations of the TestFiles should look like this: module Lib1.TestFile1; import Lib1.TestFile2; import Lib2.TestFile3; import Lib2.Lib3.TestFile4; For Mono-D you need to be able to specify the same search path. I have no idea how to do that in Mono-D. -- /Jacob Carlborg
May 24 2012
parent "#coder" <supetronix.dev1 gmail.com> writes:
Thanks for the quick and helpful reply. I will give it a shot.



On Friday, 25 May 2012 at 06:36:07 UTC, Jacob Carlborg wrote:
 On 2012-05-25 08:15, #coder wrote:
 Hi,

 I am using the Mono-D for building a project with 3-4 library 
 projects
 and one console project. Although I am using the Mono-D but I 
 think this
 issue is not unique to Mono-D. Please advise me with a 
 solution, if I am
 missing something obvious here.

 Issue;

 I have two "library" project with something similar to 
 following:

 AppFolder (AppFolder contains the below two folders for 
 individual project)

 Lib1
 |
 ------ TestFile1.d
 |
 ------ TestFile2.d (import TestFile1;) // TestFile2 is 
 importing
 TestFile1 in same library project.


 Lib2 (Lib2 has linker path to "lib1.a" and include path to 
 "AppFolder")
 |
 ------ TestFile3.d (import Lib1.TestFile2).


 If I compile the Lib1 folder alone then it will work fine but 
 now if I
 compile the Lib2 folder then the error will be in 
 "TestFile2.d" of Lib1
 project that "TestFile1" is not found. If I change the 
 "Import" in
 TestFile2 to

 import Lib1.TestFile1;

 Then the compilation of Lib2 starts to work. Now, if I try to 
 compile
 the Lib1 project alone in Mono-D (I also tried same on D-IDE) 
 then it
 will not compile.

 I was ok with compiling only the Lib2 but now the next issue 
 is that the
 code completion won't work in "Lib1.TestFile2" after changing 
 the import
 statement (simply because Lib1.TestFile1 is not valid path for 
 it any
 more).


 What should I do? How are other people working on 
 multi-library projects
 in D? I tried to look into generating the ".di" files but I 
 don't think
 that will work either. I looked at "Phobos" and it uses the 
 convention
 like "Lib1.TestFile2" (std.conv) but I don't think it will 
 help me with
 the compilation of Lib1 project.


 Thanks
It depends on what naming scheme you want to have on your modules. I think you should go with "Lib1.TestFile1". Actually I would go with lower case package names, i.e. "lib1.TestFile1". In that case you need to add a flag to DMD to indicate the import search path. This search path should point to the parent folder of the root package(s), in this case the parent folder of "Lib1", i.e. AppFolder. AppFolder |- main.d |- Lib1 |- TestFile1.d |- TestFile2.d |- Lib2 |- TestFile3.d |- Lib3 |- TestFile4.d $ dmd AppFolder/main.d -I./AppFolder The module and import declarations of the TestFiles should look like this: module Lib1.TestFile1; import Lib1.TestFile2; import Lib2.TestFile3; import Lib2.Lib3.TestFile4; For Mono-D you need to be able to specify the same search path. I have no idea how to do that in Mono-D.
May 25 2012