|
From: Daniel J. <dan...@gm...> - 2016-09-02 00:30:34
|
Oh my, I think I made some false assumptions. You're right, we don't
need separate gnulib checkouts. Neither do we need a shared libgnu.
If we have a single gnulib checkout, and we add in (all) the gnulib
modules needed by "boot CLISP", the base CLISP modules and all other
CLISP modules (that we keep in our repository), and then link ...
1) "base CLISP" ("boot CLISP" + the base modules) against libgnu.a (by
including libgnu.a in the linking set)
2) every "non base" module against that same libgnu.a (and resolving all
dependencies, so probably a "relocatable object" produced by ld -r
will be necessary here)
... then, because we're linking against a static library, the linker
will only pull in exactly the symbols (and code) it needs.
Thus "base CLISP" will not get "fatter" when adding gnulib modules due
to some (non base) CLISP module, and neither will we be including "too
much" in (non base) CLISP modules.
We still have duplicate code for overlapping functionality in "base"
and "non base", though (but I'd guess this won't be avoidable). Oh,
and the base linking set (the directory, not the executable) of course
thus contains the possibly fat libgnu.a (but disk space is cheap,
isn't it?)
And as far as I can see, this is - without the "relocatable object" -
exactly what we've been doing already, right? Or am I on the wrong
track with this?
(If only that insight came earlier, that would've saved me quite some
time and thinking in the last months)
> Even on linux - on LINUX, Carl! - it pulls in ioctl!
Hehe :)
|