On Thursday 04 of April 2013, Michael Stahl wrote:
On 04/04/13 20:47, Bjoern Michaelsen wrote:
On Thu, Apr 04, 2013 at 02:11:35PM -0400, Terrence Enger wrote:
I just changed vcl/source/window/builder.cxx and did top-level make.
The make had 184 [build LNK] steps. Is this to be expected?
We could evade that with build order only deps (signified :|, see
http://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html
) and with (simplified):
$(call gb_Library_get_target,a) :| $(call gb_Library_get_target,b)
$(call gb_Library_get_target,a) : $(call
gb_Library_get_headers_target,b) $(call gb_Library_get_target,b) : some
object from lib b : some cxx from lib b
This would make library a being rebuild only if one of the 'public',
delivered headers of library b changed but not otherwise. And it would
make sure, that if both library a and b need to be rebuild, a will always
be rebuild after b.
but it has the significant problem that you can remove implementations
of the public API of library a without noticing it (which you would when
library b fails to link), thus making incremental builds unsound.
Significant? That scenario is already broken on its own. If a library changes
its API, that means its headers need to change as well, thus the dependent
library will eventually need to be relinked. If that's not the case, the
change itself is broken.
Moreover, this scenario is nowadays still somewhat likely, if one rebuild
just a specific module, instead running toplevel make - how many of us do
that after each change? I for sure don't, and won't as long as it takes that
much time it takes.
I actually agree with Terence. If a library changes, its dependent libraries
should change and thus relink even without having .so <- .so dependencies. I
do not see a good use case where this would be a problem.
--
Lubos Lunak
l.lunak@suse.cz
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.