Bug 767 – compiler shall print dependencies and pragma(lib)

Status
RESOLVED
Resolution
FIXED
Severity
enhancement
Priority
P3
Component
dmd
Product
D
Version
D1 (retired)
Platform
All
OS
All
Creation time
2006-12-29T11:51:00Z
Last change time
2014-02-15T13:19:15Z
Assigned to
bugzilla
Creator
benoit

Comments

Comment #0 by benoit — 2006-12-29T11:51:44Z
Let the compiler have a new commandline switch: -bldinfo -bldinfo=filename Prints the bldinfo either to the console or into the given file. The bldinfo contains informations about found dependencies and pragma(lib) statements. Every bldinfo line has the format: "bldinfo <recordtype>: <info>" Every active import from a module will be printed like this: "bldinfo import: %s(\"%s\") => %s(\"%s\")", moduleFQN, moduleFileName, importedModuleFQN, importedModuleFileName Every active pragma(lib) is printed like this: "bldinfo pragma-lib: %s(\"%s\") => \"%s\"", moduleFQN, moduleFileName, stringFromPragma "Active" here means, the statement is relevant for compilation. It is not deactivated through version/debug/static-if conditions. Filenames are printed as absolute paths. Filenames and strings are escaped like the D string literals and they are double quoted. If printed to the console, the bldinfo is printed in between the other messages. The bldinfo is printed without any special order. The bldinfo is printed for all modules given on the command line. The bldinfo is also printed recursively for all modules that are imported.
Comment #1 by clugdbug — 2010-05-22T07:07:36Z
I believe this is mostly implemented in the -deps flag. Is anything left to do?
Comment #2 by nfxjfg — 2010-05-22T07:24:09Z
You still can't get the libs requested by pragma(lib ...). dmd -v will print the libs, but that's not comfortable enough.
Comment #3 by r.sagitario — 2010-05-22T23:58:12Z
I would like too see string imports to be shown in the dependencies: c:\>type test.d int ver=mixin(import("Version")); c:\>type version 42 c:\>dmd -c -J. -deps=deps test.d c:\>type deps test (test.d) : public : object (m:\\s\\d\\phobos\\druntime\\import\\object.di) This should show "version", too. Libraries "imported" by pragma(lib) to be shown would be nice, but this is not complete for a building tool, anyway, because pre-built libraries might force the inclusion of more libraries. I'd like the linker to supply a list of searched libraries.
Comment #4 by nfxjfg — 2010-05-23T00:09:23Z
I figure dmd doesn't report these string imports because it would re
Comment #5 by nfxjfg — 2010-05-23T00:14:12Z
I figure dmd doesn't report these string imports because it would require full semantic analysis of the code. Which would be much slower, making the -deps mode less useful. Maybe the compiler should provide an "-a" flag, which automatically builds all imported modules? Incremental building is broken anyway (at least due to bug 3274, other reasons include CTFE, which subverts module dependencies, and some types of out-of-declaration bugs [forward refs]). Then dmd would need to run semantically analysis only once to build a program. To facilitate building relatively independent packages as libraries, another flag could be added to dmd to exclude certain package paths using glob patterns. Sorry for the previous comment, I think I accidentally hit soem key combination, that made the browser to submit the form.
Comment #6 by r.sagitario — 2010-05-23T04:01:44Z
-deps does not enable a different mode, it just tells dmd to output any file imported to the given dependency file during the normal compilation process. There is no need for an extra compilation step, just use the info in the dependency file from the last compile to figure out if an update is necessary.
Comment #7 by jfanatiker — 2013-06-09T13:55:13Z
Comment #8 by bearophile_hugs — 2013-06-09T17:24:27Z
(In reply to comment #7) > Fixed in: https://github.com/D-Programming-Language/dmd/pull/1839 It generates a quite large output :-)
Comment #9 by jfanatiker — 2013-06-10T00:21:17Z
> It generates a quite large output :-) That is unfortunately true. I tried to trim it, by filtering out all standard versions, but it is still quite a lot and also quite redundant in places. I don't know if this is a problem, there is one tiny area where it could be reduced a bit, other than that recursive dependency listing is just a whole bunch of information. With a command line overhaul some additional switch could be added so that dependency information is not printed recursively but just for the modules being compiled. Which sometimes is all you need. And thanks for checking it out! :-) Best regards, Robert