On 09/17/2012 11:32 AM, Norbert Thiebaud wrote:
On Mon, Sep 17, 2012 at 3:27 AM, Stephan Bergmann <sberg...@redhat.com> wrote:
sal/types.h just happens to be a header that is needed in many compilation
units.

any compilation unit that use any scalar type sal_* woudl need it...
iow all of them practically...

cppuhelper/source/findofficepath.c
tools/source/misc/pathutils.cxx
extensions/source/nsplugin/source/so_env.cxx

are the only source I could find that include config.h and not
types.h... and it is not clear at all that it was deliberate.
which impacted 2 static library: libnpsoenv.a and libooopathutils.a

ucbhelper/source/client/contenbrooker.cxx was a false postive as the
content of if is excluded on non ANDROID
vcl/source/app/dbggui.cxx showed-up was a false positive since I did
not build in DBG_UTIL mode... ortherwise sal/types.h would have been
included

Yes, but what is your point? (My point is that (a) there is a rationale for inclusion of sal/config.h at the top of each other file, and (b) there is some header, sal/types.h, that happens to be included ~everywhere, and that (a) and (b) are rather unrelated.)

and for another,
I think there currently is nothing in config.h that makes it extremely
problematic if it happens to not be included first thing into some
compilation unit

That is a flaw, when you want a heder to be first, you got to make
sure that you can't forget about it :-)

How would you make sure?

, so enforcing it by modifying hundreds of files probably is
not worth it right now.)

Well, it is like saying... we have thousand of warnings... so
contemplating -WError is not worth it...
that is a self-fullfilling prophecy...

No, not at all. What I'm saying is that the missing includes of sal/config.h do not cause any harm right now, so I see no need to bother with that right now.

I could understand the desire for some lo.h from the point of view of
performance (though the relevant sub-headers will probably manage to stay in
main memory anyway) or ease-of-maintenance, but what do you mean with
"flexibility and certainty"?

having a header that is  guaranteed to be included in every source
first (I mean source not header)

...which is what sal/config.h is there for. (If you want to add something to it for which it would actually cause harm if sal/config.h is not included first thing everywhere, then we should fix the latter.)

you are right... but that odd behavior of assert.h is actually a
reason to hunt down random #include of assert.h, especially in
headers, and centralize its use.

Why?  The includes of assert.h in headers pertain to uses of assert in
(inline) functions defined in those headers.  I see no need to complicate
things by building a protocol on top of plain Standard C assert.h here.

Just because the 'Standard' allow you to shoot yourself in the foot
does not mean it is a good idea.

But I see no shooting going on here that we would need to defend ourselves against?

for instance
sal/inc/osl/thread.hxx:#include <cassert>
sal/inc/rtl/strbuf.hxx:#include <cassert>
sal/inc/rtl/string.hxx:#include <cassert>
sal/inc/rtl/ustrbuf.hxx:#include <cassert>
sal/inc/rtl/ustring.hxx:#include <cassert>
sal/textenc/unichars.hxx:#include <cassert>

and, see above, these guys are included _a lot_ so assert.h get
defined/un-defined/redefined a lot too (just with the 6 include above
we are talking about 85K times. or somewhere liek 4 times per
source...
by centralyzing it at some choke point (sal/config.h if you want) and
hunting down random include of assert.h we actually improve things...


...measurably?

yes measurably 0.076875 milli-seconds per #include <assert.h> on my linux box.

or to put in another way: 0.15% of the total build time  (6 second
over 4 cpu, out of 17 minutes elapsed)

****
n_th@tpa10 ~ ()$ cat test_assert.c

#include <assert.h>

#ifdef MANY_ASSERT
#include "many_assert.h" // 80K include assert.h

Are you sure about that 80K? For me, e.g., "grep -Flwr rtl/ustring.hxx workdir/unxlngx6/Dep | wc -l" reports 8425, so the number of actual includes of the rtl/ustring.hxx file during the build should be ca. 4200 (as each header appears twice at least in CxxObject/*.d files).

Anyway, even if reducing the number of #include <cassert> in the code gives a slight compilation speedup, I see no reason why this one specific case, cassert, should be addressed by replacing all those individual #includes with a single one in some strategic header, while many other cases (cstddef, cstring, ...) would not.

Stephan
_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to