On 31.10.2012 22:20, jan iversen wrote:
Hi
I have been searching for detailed internal information about how the build
process works with build and dmake (gnumake).
I have seen the relationship in the single directories (prj/build.lst
prj/d.lst and makefile.mk), but I cannot find a central makefile.
If I understand life, there should be a central makefile, telling e.g. how
.cpp is translated to .o
Pah, who needs a central makefile if he can have a Perl file instead :-)
Sorry, I could not resist. I am currently preparing a talk for
ApacheCon about the AOO build system and it is somewhat depressing to
see how bizarre some things are.
If I find the time after ApacheCon then I will turn my talk into a Wiki
page or one or several blog posts.
Here is the short version.
First there is configure and bootstrap. But I think that you have
mastered that step already.
Then comes the actual building. The central makefile is
main/solenv/bin/build.pl, yes, a Perl script. It reads
<module>/prj/build.lst files to
a) determine the dependency between modules and (just the first line)
b) find the directories inside each module that have to be built.
(all other lines)
build.pl starts at main/instsetoo_native/prj/build.pl and follows the
dependency to other modules.
build.pl can handle multi process builds and uses the module dependency
graph to build modules in the right order.
It can do partial builds:
build --all --from <module> ignores all modules before <module> when
building AOO (in the linearization of the dependency graph)
build --all called in another module than instsetoo_native builds
all dependencies and stops when the current module is built.
build.pl calls dmake for every module, regardless of whether they are
dmake or gbuild modules.
- For dmake modules it calls dmake for all directories listed in
prj/build.lst
- For gbuild modules it does the same but prj/build.lst only contains
one entry which points to util/makefile.mk
This util/makefile.mk then chains GNU make for <module>/Makefile
gbuild modules have all their makefiles in their top level
directory. One makefile per library or other main targets.
Both dmake and gbuild distinguish between data and build logic. The
modules usually contain only descriptions of which source files have to
be compiled and which libraries are to be linked. How that is done, on
all the different platforms, compilers, environment variables is handled
by makefiles in
solenv/inc for dmake
solenv/gbuild for gbuild
The last part of the build process is the creation of installation
sets. It is triggered by instsetoo_native/util/makefile.mk which
basically just calls solenv/bin/make_installer.pl with a cleverly
selected bunch of parameters. make_installer.pl uses a larger number of
Perl modules under solenv/bin/modules/installer which then do the actual
work of collecting the relevant files, copying them into a temporary
directory into a runnable office, and finally packing them into a
package that fits the target platform.
I am aware that the above is still very terse. I am happy to answer any
questions (if I know the answer).
Regards,
Andre
Can somebody please point me in the direction, or tell me if it done in a
different way ?
My reason for asking is that I need to add a set of new standard rules for
localization (.xhlp -> .po ....)
Thanks in advance.
Jan