Hi, I'm trying to get dub working with subpackages and I just can't quite seem to hit the nail on the head. Any help would be greatly appreciated.

This is the current setup is like this, and there's a shared source folder as well called "common" and "sub2" depends on "sub1".

lib
 |-- dub.json
 |-- source/
            | -- sub1/
                     | -- package.d
                     | -- dub.json
            | -- sub2/
                     | -- package.d
                     | -- dub.json
            | -- common/

lib/dub.json
{
    "targetPath": "bin",
    "targetType": "library",
    "dependencies": {
        "lib:sub1": "*",
        "lib:sub2": "*",
    },
    "subPackages": [
        "./source/sub1",
        "./source/sub2"
    ]
}

And then sub1/dub.json and sub2/dub.json:

sub1:
{
    "name": "sub1",
    "targetType": "library",
    "sourcePaths": ["./", "../common"],
    "importPaths": ["./"],
    "targetPath": "../bin"
}

sub2:
{
    "name": "sub2",
    "targetType": "library",
    "dependencies": { "lib:sub1": "*" },
    "sourcePaths": ["./", "../common", "../sub1"],
    "importPaths": ["./"],
    "targetPath": "../bin"
}

So with the current set up, running dub test lib:sub1 works and dub test lib:sub2 works.

What doesn't work is if I try "import lib.sub1" from a test project. So in test project dub.json I have:

"dependencies": {
  "lib": {
    "path": "../../lib"
  }
}

I get error:

source/app.d(2,8): Error: module `sub1` is in file 'lib/sub1.d' which cannot be read. The output from dub shows one of my import paths is: import path[6] = ../../lib/source/sub1/. But I guess I'm missing something, or doing something wrong.

I also tried:

"dependencies": {
  "lib:sub1": {
    "path": "../../lib"
  }
}

But that gives me the same problem.

Halp!

Reply via email to