"SfR Fresh" - the SfR Freeware/Shareware Archive 
As a special service "SfR Fresh" has tried to format the requested source page into HTML format using source code syntax highlighting with prefixed line numbers.
Alternatively you can here view or download the uninterpreted source code file.
That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
1 THE ROOT BUILD SYSTEM
2 =====================
3
4 The new ROOT development system is based on Open Source tools like
5 Subversion, configure and make.
6
7
8 The Makefile
9 ------------
10
11 The ROOT Makefile has been structured as described in the paper:
12 "Recursive Make Considered Harmful" [1]. The main philosophy is that
13 it is better to have a single large Makefile describing the entire
14 project than many small Makefiles, one for each sub-project, that are
15 recursively called from the main Makefile. By cleverly using the include
16 mechanism the single Makefile solution is as modular as the recursive
17 approach without the problems of incomplete dependency graphs.
18
19 The main Makefile includes for each sub-project a Module.mk file
20 that provides definitions, rules and dependencies for the specific module.
21 Adding a new module to the ROOT system involves creating a directory in
22 the main ROOT directory for the module. The module directory, in turn,
23 should have inc and src directories and a Module.mk file. To include the
24 new module in the main Makefile you only have to add the line:
25 MODULES += <new mod dir>
26
27 The build configuration (controlling which optional modules will be
28 build) is managed via the config/Makefile.config file, which is generated
29 by the configure script. The platform specifics are described in the
30 config/Makefile.<arch> file (the architecture is specified once via the
31 configure script). Both these files are included by the main Makefile.
32
33 The user can customize and override make definitions by providing his
34 own MyConfig.mk file and add custom or modified rules via a MyRules.mk
35 file. Some options in the config/Makefile.<arch> can be controled via
36 the ROOTBUILD environment variable. Typically they all support the debug
37 option:
38 ROOTBUILD=debug
39 Some others support additional options. For more see the makefiles.
40
41
42 Targets
43 -------
44
45 The Makefile supports the following main targets:
46
47 all: build complete system (default)
48
49 fast: build complete system without creating
50 the .d dependency files (good for just
51 building the system with no further
52 development)
53
54 rootcint: build all CINT related components
55
56 rootlibs: build all ROOT libraries (includes rootcint)
57
58 rootexecs: build all ROOT executables (includes rootlibs)
59
60 dist: make binary distribution .tar.gz file
61
62 distsrc: make source distribution .tar.gz file
63
64 clean: deletes all .o files
65
66 distclean: deletes all files produced in the build
67 (cleans and in addition removes all
68 dictionaries, dependency files, etc.),
69 leaves the files produced by configure
70
71 maintainer-clean: distclean + remove files produced by configure
72
73 version: after manual update of the file
74 build/version_number this will recreate the
75 file base/inc/RVersion.h and recompile only
76 base/src/TROOT.cxx
77
78 importcint: import a new version of CINT into the cint
79 directory. The new CINT tar file must be
80 available as $HOME/cint. Any new or removed
81 files are listed. Use this information to
82 manually update the Subversion repository
83
84 cintdlls: build all CINT add-on shared libs (dll's)
85
86 html: generate the complete html documentation of
87 the full ROOT system. Also hyperizes the
88 README/ChangeLog file
89
90 changelog: generate the README/ChangeLog file from
91 information obtained by the "svn log" command
92
93 install: install the root binary distribution to the
94 locations specified via configure. Does
95 nothing if $ROOTSYS is set to the build
96 directory
97
98 showbuild: show all macro definitions used during the
99 build: compilers, compiler flags, optional
100 modules, libraries, etc.
101
102 redhat: build binary RedHat (rpm) packages
103
104 debian: build binary Debian (pkg) packages
105
106
107 For developers only:
108
109 skip <obj or dictionary>: skip all dependency checking and just
110 generate the specified obj or dictionary file
111
112
113 In addition each module has the following module specific targets:
114
115 all-<module> builds all components specified in the
116 Module.mk (library, executable, etc.)
117
118 clean-<module> deletes all .o files produced in the module
119
120 distclean-<module> deletes all in addition to the .o files also
121 all dictionary and dependency files
122
123
124 Porting to a new platform
125 -------------------------
126
127 - add <platform> option to config/ARCHS
128 - make a new config/Makefile.<platform>
129 - add platform case to the file config/root-config.in
130 - add platform case to the file test/Makefile
131 - add platform case to base/inc/RConfig.h
132 - add platform case to cint/inc/G__ci.h
133 - add platform case to utils/src/rootcint.cxx
134
135
136 Adding a new module
137 -------------------
138
139 - make a new module directory containing an inc and src directory
140 - make a new Module.mk (use one of the existing Module.mk's as template)
141 - add module name to the MODULES macro in the main Makefile
142 - if optional module add option to configure script (with test for possible
143 third party libraries)
144
145
146
147
148
149
150
151
152
153
154 [1] http://www.tip.net.au/~millerp/rmch/recu-make-cons-harm.html