]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/win32/README.mingw32
kes Move source tar files for depkgs-mingw32 to www.bacula.org so
[bacula/bacula] / bacula / src / win32 / README.mingw32
1 Instructions to build Bacula using the MinGW32 on Linux
2 =======================================================
3
4 This file documents the tools (scripts) we use for building Bacula for
5 Microsoft Windows using the cross-compiler tools on a Linux system.  We
6 use Fedora Core 5 and SuSE so those should definitely work.  But there
7 shouldn't be any issues on other Linux distributions.
8
9 We don't officially support this script, but it is what we use, and it should
10 build on any Linux machine if you carefully follow the instructions and have
11 all the prerequisite programs loaded on your machine.
12
13 It has also been tested on other systems such as FreeBSD and CentOS.  We
14 expect that there may be problems on systems other than Linux where you
15 are pretty much on your own.  However, we will try to provide responses to
16 your questions on the bacula-devel list, but we can't guarantee anything.
17
18 One-time Setup
19 ==============
20
21 If you're reading this file you've probably already enlisted in the SVN tree or
22 extracted the contents of the source tar.  If not you need to do that first.
23
24 You also need to download one of the doc tar balls and extract to your
25 top level Bacula directory.  It is referred to as bacula-top in the
26 diagram located in README.win32.  It will be signified in this file as ...
27
28 The extracted doc directory name will be bacula-docs-version where version
29 is the version number.  The directory must be renamed to docs (ie remove
30 the leading bacula- and the -version portion of the name).
31
32 Once the source is on your system, change to the win32 directory
33         cd .../bacula/src/win32
34
35 Download and build the cross compiler tools
36         ./build-win32-cross-tools
37
38 Download and build the 3rd party dependencies
39         ./build-depkgs-mingw32
40
41 You need the header files from the Microsoft VSS SDK.  Unfortunately the SDK
42 can only be downloaded and installed on a Windows system.  You can find it on
43 Microsoft's web-site at:
44
45 http://www.microsoft.com/downloads/details.aspx?FamilyID=0b4f56e4-0ccc-4626-826a-ed2c4c95c871&DisplayLang=en
46
47 If that link doesn't work then go to http://www.microsoft.com and search for
48
49         "download volume shadow copy service sdk"
50
51 we are currently using version 7.2 released 8/3/2005.
52
53 Normally the files will be installed in:
54
55         c:\Program Files\Microsoft\VSSSDK72
56
57 You only need to copy everything under the c:\Program Files\Microsoft\VSSSDK72\inc
58 directory into .../depkgs-mingw32/vss/inc.  In doing so, please ensure that
59 the case in maintained on the directory and filenames -- some contain uppercase 
60 characters !!!
61
62 The above only needs to be done once unless we change the cross-tools
63 or the dependencies versions.  In general, you can run the script multiple
64 times with no problem.  For it to work, you must have at a minimum the
65 following:
66
67         gcc
68         g++
69         wget
70         texinfo
71         bison
72
73 and possibly other packages.
74
75
76 Building
77 ========
78
79 Finally, to build the Microsoft Windows version of Bacula, do the following:
80
81    cd .../bacula/src/win32
82    make
83
84 If all goes well, you will end with all the executables in the
85 .../bacula/src/win32/release directory.
86
87 If you have an older build environment, you might do the following
88 to ensure that you pick up all the new Win32 changes:
89
90    cd .../bacula
91    make clean
92    cvs -q update -d -P
93    cd src/win32
94    make
95
96 The installer is now built as part of the default rule when you
97 say "make" in the src/win32 directory.
98
99
100 Updating the 3rd party package patches
101 ======================================
102
103 If one of the patches changes in .../bacula/src/win32/patches, you will
104 need to update the corresponding dependency.  You can install new patches
105 by doing the following (we assume the patch in question is for openssl).
106
107    cd .../bacula/src/win32
108    ./build-depkgs-mingw32 -C openssl
109
110 NOTE: The -C means clobber.  Any local changes to the source code in
111       the .../depkgs-mingw32/src directory will be lost.  The source
112       will be reextracted from the archive and the current patches
113       will be applied.
114
115
116 Adding a new global function or global data
117 ===========================================
118
119 bacula.dll
120 ----------
121
122 The code from the following directories is built into bacula.dll:
123
124    .../bacula/src/lib
125    .../bacula/src/libfind
126    .../bacula/src/win32/compat
127
128 A new function or data variable which must be accessed from outside
129 of bacula.dll requires special treatment.  It must be specifically
130 exported.
131
132 New data variables are exported by adding the macro DLL_IMP_EXP to
133 the variable declaration in the header file.  All exported variables
134 must be declared in a header file and MUST NOT be declared in a
135 source file referencing the variable.
136
137 Exporting functions is now more or less automated.  If you find that
138 a function name has been added, changed, or an argument modified,    
139 simply do the following:
140
141    cd .../bacula/src/win32/dll 
142    make                  (to build the .o files, note the link will fail)
143    ./make_def >bacula.def
144
145 This should rebuild the bacula.def file.
146
147 ===== manual changing of bacula.def no longer necessary =====
148 If you want to do it manually, please see below:
149 Exporting a function requires a bit more work.  You must determine the
150 C++ mangled name of the new function.
151
152    strings .../bacula/src/win32/dll/<file>.o | grep <symbol>
153
154 Note, strings often will not show the desired symbol. In that case,
155 use:
156    
157    nm .../bacula/src/win32/dll/<file>.o
158
159 Replace <file> with the base part of the name of the source code file
160 which contains the new function.  Replace <symbol> with the name of
161 the new function.  Remove the leading underscore and place the result
162 in the file
163
164    .../bacula/src/win32/dll/bacula.def
165 === end manual changing of bacula.def ==========
166
167 If you add a new file, you will need to specify its name in
168
169    .../bacula/src/win32/dll/Makefile
170 and
171    .../bacula/src/win32/libbac/Makefile
172
173 bacula_cats.dll
174 ---------------
175
176 The code from the .../bacula/src/cats directory is built into database
177 provider specific libraries of the form cats_<db>.dll.
178
179 The database specific portion <db> is mysql for MySQL, pgsql for
180 PostgreSQL, sqlite for SQLite, and bdb for the built-in Bacula database.
181
182 During installation of the Director, one of the database libraries is
183 copied to the system and renamed bacula_cats.dll.
184
185 A new function or data variable which must be accessed from outside
186 of bacula_cats.dll requires special treatment.  It must be specifically
187 exported.
188
189 New data variables are exported by placing their name in the file
190 .../bacula/src/win32/cats/bacula_cats.def.
191
192 As with the bacula.def file above, this is now more or less automated.
193 When the link dies, simply do the following:
194
195    cd .../bacula/src/win32/cats
196    make                  (to build the .o files, note the link will fail)
197    ./make_def >bacula_cats.def
198
199 This should rebuild the bacula_cats.def file. Note, if you have
200 changed any data entry points, you will need to modify the make_def
201 script -- it should be rather obvious.
202
203
204 ===== manual changing of bacula_cats.def no longer necessary =====
205 Exporting a function requires a bit more work.  You must determine the
206 C++ mangled name of the new function.
207
208    strings .../bacula/src/win32/cats/cats_*/<file>.o | grep <symbol>
209
210 Note, strings often will not show the desired symbol. In that case,
211 use:
212
213    nm .../bacula/src/win32/dll/<file>.o
214
215 Replace <file> with the base part of the name of the source code file
216 which contains the new function.  Replace <symbol> with the name of
217 the new function.  Remove the leading underscore and place the result
218 in the .../bacula/src/win32/cats/bacula_cats.def file.
219 === end manual changing of bacula_cats.def ==========
220
221
222 Structure of the MinGW32 build environment
223 ==========================================
224
225 The basic strategy is each Makefile in the various subdirectories includes
226 Makefile.inc, defines variables and rules specific to what is being built,
227 then includes Makefile.rules which defines all the rules.
228
229 Makefile.inc defines the locations of all the dependencies and the compiler
230 and linker flags.  It is automatically created from Makefile.inc.in.  Any
231 changes must be made to Makefile.inc.in not Makefile.inc or they will be
232 overwritten the next time Makefile.inc.in is updated.
233
234 Makefile.rules defines a bunch of macros to simplify building.  It also
235 includes all the basic rules for building objects, GUI and console
236 executables, etc.
237
238 Makefile.template is a template for creating new Makefiles, if you are
239 creating a new directory, copy Makefile.template to Makefile in that
240 directory and edit to suit.