diff --git a/source/dub/internal/utils.d b/source/dub/internal/utils.d index 89cd65d..c9b5b34 100644 --- a/source/dub/internal/utils.d +++ b/source/dub/internal/utils.d @@ -605,9 +605,6 @@ path_skip = ipath.bySegment.walkLength; } - enforce(path_skip > 0, - format("Source file '%s' not found in any import path.", file.toNativeString())); - auto mpath = file.bySegment.array[path_skip .. $]; auto ret = appender!string; @@ -620,13 +617,21 @@ } //create module name from path - foreach (i; 0 .. mpath.length) { + if (path_skip == 0) + { import std.path; - auto p = mpath[i].name; - if (p == "package.d") break ; - if (ret.data.length > 0) ret ~= "."; - if (i+1 < mpath.length) ret ~= p; - else ret ~= p.baseName(".d"); + ret ~= mpath[$-1].name.baseName(".d"); + } + else + { + foreach (i; 0 .. mpath.length) { + import std.path; + auto p = mpath[i].name; + if (p == "package.d") break ; + if (ret.data.length > 0) ret ~= "."; + if (i+1 < mpath.length) ret ~= p; + else ret ~= p.baseName(".d"); + } } assert(ret.data.length > 0, "A module name was expected to be computed, and none was."); diff --git a/test/issue2448/dub.json b/test/issue2448/dub.json new file mode 100644 index 0000000..76c561c --- /dev/null +++ b/test/issue2448/dub.json @@ -0,0 +1,5 @@ +{ + "name": "use-source-files", + "description": "Example of using source files.", + "sourceFiles": ["ext/*.d"] +} diff --git a/test/issue2448/ext/kekw.d b/test/issue2448/ext/kekw.d new file mode 100644 index 0000000..f1585d3 --- /dev/null +++ b/test/issue2448/ext/kekw.d @@ -0,0 +1 @@ +extern(C) string funkekw () { return "KEKW";} diff --git a/test/issue2448/source/app.d b/test/issue2448/source/app.d new file mode 100644 index 0000000..b327028 --- /dev/null +++ b/test/issue2448/source/app.d @@ -0,0 +1,8 @@ +import std.stdio; + +extern(C) string funkekw (); + +void main() +{ + writefln("Juan: %s", funkekw()); +}