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


Reply via email to