<div dir="ltr">>So, the issues you are talking about is the fact that nginx won't <br>
magically find out which header files you are using, but instead <br>
requires you to list them in the ngx_module_deps variable when <br><div>
calling the auto/module in the module config script, correct?</div><div><br></div><div>That's not magic. This is what make + gcc/clang/icc can do on *nix. The general pattern is simple:</div><div style="margin-left:40px"><span style="font-family:monospace">-include $dep</span></div><div style="margin-left:40px"><span style="font-family:monospace">$obj $dep: $src</span></div><div style="margin-left:40px"><span style="font-family:monospace">    $(CC) ... -MMD -MP -MT $obj -MT $dep ...</span></div><div>This would make the compiler generate a dependency file together with an object file and make would include/update it when needed.</div><div>I'm not aware if nginx supports compilers other than gcc/clang, but this trick would work for said compilers. icc mimics gcc on Linux, so generally it will work there too . I'm attaching objs/ngx_modules.d being automatically generated by this approach.</div><div><br></div><div>That would be a really simple change to auto/make, but it would work much better that _*DEPS.<br></div><div>I'm providing a proof-of-working auto/make script from nginx-1.20.2 which uses this technique. You can check how it differs by observing that only several files getting recompiled after<br></div><div style="margin-left:40px">touch src/core/ngx_md5.h && make</div>This example should handle addon dependencies too.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Dec 5, 2022 at 12:10 AM Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello!<br>
<br>
On Sun, Dec 04, 2022 at 11:12:55PM +0300, Dmitry Petrov wrote:<br>
<br>
> >You may want to be more specific about issues you are talking<br>
> about.  In general, nginx build system requires little to no<br>
> effort from developers.<br>
> <br>
> I'm speaking about manual vs automatic source-level dependency handling.<br>
> For example, CORE_DEPS is an easy but inaccurate cross-platform hack. The<br>
> same is true for ADDON_DEPS: if you add any header here, all addons will be<br>
> rebuilt on that header change.<br>
> That's not a big deal, because C compiles fast enough and ccache could be<br>
> used to mitigate "false positives" of hand-written deps. But there's room<br>
> for improvement for sure.<br>
> For example, I had build issues because of forgetting to include headers<br>
> into core/addon deps after splitting addon into a set of header/source<br>
> files.<br>
<br>
So, the issues you are talking about is the fact that nginx won't <br>
magically find out which header files you are using, but instead <br>
requires you to list them in the ngx_module_deps variable when <br>
calling the auto/module in the module config script, correct?<br>
<br>
Thanks for the explanation.<br>
<br>
> >There are no plans to support CMake.<br>
> Targeting any modern C-oriented build system would add many benefits<br>
> including "standardized" routines for library detection, dependency<br>
> handling, etc.<br>
<br>
The "make" build system as used by nginx is a modern, C-oriented <br>
build system.  Further, it is standardized, and provides as much <br>
portability as no other build system known.  Shell, as used to <br>
generate makefiles, is believed to be simple enough to implement <br>
any needed library detection.<br>
<br>
> Are there any plans on adding "per-addon header deps" so changes to a<br>
> single header don't result in all addons recompiling?<br>
<br>
As of now, there are no such plans.  Just rebuilding all the <br>
modules if a header changes is believed to be fast enough <br>
approach.  Further, it is usually trivial to configure a build <br>
environment for development which does not contain any additional <br>
modules, reducing potential benefits from such a change.<br>
<br>
-- <br>
Maxim Dounin<br>
<a href="http://mdounin.ru/" rel="noreferrer" target="_blank">http://mdounin.ru/</a><br>
_______________________________________________<br>
nginx-devel mailing list -- <a href="mailto:nginx-devel@nginx.org" target="_blank">nginx-devel@nginx.org</a><br>
To unsubscribe send an email to <a href="mailto:nginx-devel-leave@nginx.org" target="_blank">nginx-devel-leave@nginx.org</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature">Regards,<br>Dmitry<br></div>