fix for enumerating local import dependencies, resolving all rdmd link errors

Timothee Cour thelastmammoth at gmail.com
Thu Jul 11 23:23:19 PDT 2013


Currently rdmd is broken because of (Issue 8856, Issue 8858, Issue 7016),
ie local import does not create -deps dependency, which results in link
errors.
This makes people use global imports as opposed to local ones, which is
less clean.

I wrote a recursive dependency analyzer and plugged it in a modified rdmd,
and it does indeed work in all cases I tried (for example eg, see failing
case for rdmd here: Issue 8856).
The dependency analyzer works by calling dmd -v recursively using a breadth
first search strategy, until no more modules are added to the growing
dependency list (it can typically take 3 or 4 iterations). It makes use of
the new std.process to get dmd -v's output via stdout instead of files and
is reasonably fast.

However, this is sounds like an un-necessary hack and wastes compile time
by invoking dmd multiple times instead of twice (dmd -v -c -o- main.d
followed by dmd all_deps.d) or even, ideally, once if that would be
possible.

quoting from Issue 8856:
* The root problem is that semantic isn't run on the dependencies. It's in
Import::semantic where the import is printed.
* semantic3 for imported functions is only run during the inline pass.

can this be fixed? possible with a dmd compiler flag : dmd -recursive_deps ?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20130711/ccb18d27/attachment-0001.html>


More information about the Digitalmars-d mailing list