openoffice-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andre Fischer <awf....@gmail.com>
Subject Re: [question] build infra structure.
Date Thu, 01 Nov 2012 16:44:56 GMT
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
>


Mime
View raw message