Generate Ddoc without compiling?
Steven Schveighoffer
schveiguy at yahoo.com
Mon May 21 17:23:08 UTC 2018
On 5/21/18 12:59 PM, Jonathan M. Wilbur wrote:
> On Monday, 21 May 2018 at 12:53:47 UTC, Steven Schveighoffer wrote:
>> On 5/21/18 8:37 AM, Jonathan M. Wilbur wrote:
>>> I want to put in a feature request, but I want to gauge whether it is
>>> even feasible or not, but a little background first:
>>>
>>> I am trying to create a Makefile to build the HTML documentation for
>>> a Dlang project. I would like to be able to update a single HTML file
>>> if the corresponding source changes, without having to recompile all
>>> of the others. My rule looks like this:
>>>
>>> $(DCOMPILER) -o- -op -d -Df$@ $<
>>>
>>> But that does not work, because some of the compiled modules import
>>> other modules, and the rule fails because DCOMPILER can't
>>> intelligently pull in the other source files. I think requiring a
>>> complete compile of all source to build the HTML documentation is a
>>> big impediment to making D highly scalable.
>>>
>>> Having said that, I don't see why it would be technically impossible
>>> to make DMD build the HTML (almost) without regard to the validity of
>>> the source code. Is this possible? And moreover: *should* it be done?
>>> Is it a bad idea?
>>>
>>>
>>
>> 1. I don't think it requires compiling all other files.
>> 2. You may want to use -c (not sure what the exact error is you are
>> receiving)
>> 3. You may need to specify where the other includes are with -I (not
>> sure what the exact error is you are receiving).
>>
>> I'm fairly certain D can do what you want it to do. But difficult to
>> tell without more context/example.
>
> So it seems that I still have to include all of the interfaces (at
> least; source would work too), but I got it to work by adding the -I
> operator:
>
> html_documentation : $(htmldocs)
> $(htmldocs) : $(SRCDIR)/documentation/html/source/$(PACKAGE_SLUG)/%.html
> : $(SRCDIR)/source/$(PACKAGE_SLUG)/%.d
> $(DCOMPILER) -o- -op -d -I$(SRCDIR)/source
> $(SRCDIR)/source/macros.ddoc -Df$@ $<
>
> Since I am not producing binaries (per the "-o-" flag), I don't know if
> it is still doing all the work of compiling and just not writing the
> files to disk, or if it is just doing some basic lexing, but this is at
> least acceptable.
The compiler is certainly doing something more than lexing, but it's not
doing a full compile. For sure, the back-end shouldn't be used at all.
But I don't know what is done in terms of the more fancy features of D
-- CTFE for example. It definitely has to instantiate templates to see
which sections of the template have ddocs and whether they are included
or not.
-Steve
More information about the Digitalmars-d
mailing list