]> git.saurik.com Git - wxWidgets.git/blame - BuildCVS.txt
DLL compilation fixes
[wxWidgets.git] / BuildCVS.txt
CommitLineData
f6577bba
RR
1------------------------------------------------------------------------
2 How to build the sources from CVS
3------------------------------------------------------------------------
4
f2854a24
JS
5Please use the install.txt files in docs/gtk, docs/msw, docs/motif, docs/mac
6etc. alongside these instructions.
7
f6577bba
RR
8I) Windows using plain makefiles
9----------------------------------------
10
a353a0be
RD
11a) If using Microsoft Visual C++ 5.0 or 6.0
12
13Ensure that the command-line compiler and tools (including
14nmake) are installed and ready to run. Depending on your
15installation there may be a batch file (named something like
16VCVARS32.BAT) that needs to be run to set correct environment
17varaibles and PATH entries.
18
19Continue with item c) below.
20
21
9a718b86 22b) If using the MinGW or Cygwin compilers
f6577bba 23
9a718b86 24You can get MinGW from http://www.mingw.org/
2662e49e 25
9a718b86 26Cygwin is available at http://sources.redhat.com/cygwin/
2662e49e 27
f6bcfd97 28The makefile might have small problems with Cygwin's tools
9a718b86 29so it is recommended to use MinGW and its toolchain instead
f6bcfd97 30if possible.
c45a644e 31
2662e49e
RR
32-> Set your path so that it includes the directory
33 where your compiler and tools reside
a353a0be 34
9a718b86 35-> If your are using an old MinGW version (gcc-2.95 or older),
f6bcfd97
BP
36 you might need to fix some headers with the patches contained
37 in the wxWin\Mingw32-gcc295.patches file. PLEASE APPLY THESE
38 PATCHES BY HAND! There are apparently a few different versions
39 of the headers floating around. Note that these patches are
9a718b86 40 not needed if you are using MinGW gcc-2.95.2 or newer.
f6bcfd97
BP
41
42-> Edit wx/src/makeg95.env and set the MINGW32 variable at the top of
9a718b86
MB
43 the file to either 1 (you have MinGW) or 0 (you have Cygwin).
44 Also set the MINGW32VERSION variable appropiately.
d66d3ce6 45
ce1a1ff4 46
a353a0be
RD
47c) Build instructions
48
49-> Assumming that you installed the wxWindows sources
2662e49e 50 into c:\wxWin
a353a0be 51-> Copy c:\wxWin\include\wx\msw\setup0.h
2662e49e 52 to c:\wxWin\include\wx\msw\setup.h
9a718b86
MB
53-> Edit c:\wxWin\include\wx\msw\setup.h to choose
54 the features you would like to compile wxWindows with[out].
2662e49e 55
f6bcfd97 56 and std iostreams are disabled with
2662e49e 57 #define wxUSE_STD_IOSTREAM 0
f6bcfd97 58
2662e49e 59-> type: cd c:\wxWin\src\msw
b19a74b0 60-> type: set WXWIN=c:\wxWin
d66d3ce6 61-> type: make -f makefile.g95 (if using GNU tools)
f6bcfd97 62or type: nmake -f makefile.vc (if using MS VC++)
a353a0be 63
9a718b86
MB
64 See also docs/msw/install.txt for additional compilation options.
65
9fce8d2e
JS
66d) Borland (including free command line tools)
67 Download tools from http://www.borland.com/downloads/
68
69 See docs/msw/install.txt for details; in brief
70
71-> type set WXWIN=c:\wxwindows
9fce8d2e
JS
72-> type cd %WXWIN%\src\msw
73-> type make -f makefile.b32
f6577bba 74
583a6578
RR
75II) Unix ports
76--------------
8e877c19
RR
77
78Building wxGTK or wxMotif completely without configure
79won't ever work, but there is now a new makefile system
80that works without libtool and automake, using only
a353a0be
RD
81configure to create what is needed.
82
83In order to create configure, you need to have the
84GNU autoconf package (version 2.13 or 2.14) installed
85on your system and type run "autoconf" in the base
86directory (or run the autogen.sh script in the same
87directory, which just calls autoconf).
f6577bba 88
a533f5c1 89Set WXWIN environment variable to the base directory such
8e877c19 90as ~/wxWindows (this is actually not really needed).
a533f5c1
RR
91
92-> type: export WXWIN=~/wxWindows
8e877c19
RR
93-> type: md mybuild
94-> type: cd mybuild
95-> type: ../configure --with-motif
96or type: ../configure --with-gtk
583a6578
RR
97-> type: make
98-> type: su <type root password>
99-> type: make install
100-> type: ldconfig
101-> type: exit
f6577bba 102
a4aad961
RR
103Call configure with --disable-shared to create a static
104library. Calling "make uninstall" will remove the installed
105library and "make dist" will create a distribution (not
106yet complete).
107
f6577bba
RR
108III) Windows using configure
109----------------------------------------
110
9a718b86
MB
111wxWindows can be built on Windows using MSYS (see
112http://www.mingw.org/), which is a POSIX build environment
113for Windows. With MSYS you can just ./configure && make (see also VII,
114Unix->Windows cross-compiling using configure).
22baaed3 115
a353a0be 116Of course, you can also build the library using plain makefiles (see
22baaed3 117section I).
f6577bba 118
79199066 119IV) Classic MacOS using CodeWarrior (eg MacOS 8.x/9.x)
f6577bba
RR
120----------------------------------------
121
79199066
GD
122Refer to the readme.txt and install.txt files in docs/mac to build
123wxWindows under Classic Mac OS using CodeWarrior.
124
125If you are checking out the CVS sources using cvs under Mac OS X and
b383b2c1
GD
126compiling under Classic Mac OS:
127
128- make sure that all text files have a Mac OS type of 'TEXT' otherwise
129 CodeWarrior may ignore them. Checking out the CVS sources using cvs
130 under Mac OS X creates untyped files which can lead to compilation
131 errors under CodeWarrior which are hard to track down.
132
133- convert the xml files to CodeWarrior binary projects using the supplied
134 AppleScript in docs/mac (M5xml2mcp.applescript for CodeWarrior 5.3)
79199066
GD
135
136V) MacOS X using configure and the Developer Tools
137----------------------------------------
138
139You need to have the Developer Tools installed. If this is not the case,
140you will need to register at the Apple Developer web site (this is a free
141registration) in order to download the Developer Tools installer.
142
143In order to create configure, you need to have the
144GNU autoconf package (version 2.13 or 2.14) installed
145on your system and type run "autoconf" in the base
146directory (or run the autogen.sh script in the same
147directory, which just calls autoconf).
148
149-> type: mkdir macbuild
150-> type: cd macbuild
151-> type: ../configure --with-mac
152or type: ../configure
153-> type: make
154
0a2fe387 155VI) OS/2
f6577bba
RR
156----------------------------------------
157
0a2fe387
HH
158VII) Unix->Windows cross-compiling using configure
159--------------------------------------------------
160
9a718b86
MB
161First you'll need a cross-compiler; linux glibc binaries of MinGW and
162Cygwin (both based on egcs) can be found at
1d341cf4
MB
163ftp://ftp.objsw.com/pub/crossgcc/linux-x-win32. Alternative binaries,
164based on the latest MinGW release can be found at
9a718b86 165http://members.telering.at/jessich/mingw/mingwcross/mingw_cross.html
1d341cf4 166Otherwise you can compile one yourself.
0a2fe387 167
9a718b86 168[ A Note about Cygwin and MinGW: the main difference is that Cygwin
0a2fe387
HH
169binaries are always linked against cygwin.dll. This dll encapsulates most
170standard Unix C extensions, which is very handy if you're porting unix
9a718b86 171software to windows. However, wxMSW doesn't need this, so MinGW is
0a2fe387
HH
172preferable if you write portable C(++). ]
173
174You might want to build both Unix and Windows binaries in the same source
175tree; to do this make subdirs for each e.g. unix and win32. If you've
176already build wxWindows in the main dir, do a 'make distclean' there,
177otherwise configure will get confused. (In any case, read the section 'Unix
178using configure' and make sure you're able to build a native wxWindows
179library; cross-compiling errors can be pretty obscure and you'll want to be
180sure that your configure setup is basically sound.)
181
182To cross compile the windows library, do
a353a0be 183-> cd win32
0d639168 184(or whatever you called it)
214960fb 185Now run configure. There are two ways to do this
1d341cf4 186-> ../configure --host=i586-mingw32 --build=i586-linux --with-mingw
214960fb
HH
187where --build= should read whatever platform you're building on. Configure
188will notice that build and host platforms differ, and automatically prepend
a353a0be
RD
189i586-mingw32- to gcc, ar, ld, etc (make sure they're in the PATH!).
190The other way to run configure is by specifying the names of the binaries
214960fb 191yourself:
0a2fe387
HH
192-> CC=i586-mingw32-gcc CXX=i586-mingw32-g++ RANLIB=i586-mingw32-ranlib \
193 DLLTOOL=i586-mingw32-dlltool LD=i586-mingw32-ld NM=i586-mingw32-nm \
1d341cf4 194 ../configure --host=i586-mingw32 --with-mingw
0a2fe387 195
9a718b86 196(all assuming you're using MinGW)
1d341cf4
MB
197By default this will compile a DLL, if you want a static library,
198specify --disable-shared.
0a2fe387 199
a353a0be 200Type
0d639168 201-> make
0a2fe387
HH
202and wait, wait, wait. Don't leave the room, because the minute you do there
203will be a compile error :-)
204
1d341cf4
MB
205NB: if you are using a very old compiler you risk to get quite a few warnings
206 about "ANSI C++ forbids implicit conversion from 'void *'" in all places
207 where va_arg macro is used. This is due to a bug in (some versions of)
9a718b86 208 MinGW headers which may be corrected by upgrading your compier,
1d341cf4 209 otherwise you might edit the file
ce1a1ff4
VZ
210
211 ${install_prefix}/lib/gcc-lib/i586-mingw32/egcs-2.91.57/include/stdarg.h
212
213 (instead of egcs-2.91.57 you may have something different), searching for
214 the lines
215
216/* Define __gnuc_va_list. */
217
218#ifndef __GNUC_VA_LIST
219#define __GNUC_VA_LIST
220#if defined(__svr4__) || defined(_AIX) || defined(_M_UNIX) || defined(__NetBSD__)
221typedef char *__gnuc_va_list;
222#else
223typedef void *__gnuc_va_list;
224#endif
225#endif
226
227 and adding "|| defined(_WIN32)" to the list of platforms on which
228 __gnuc_va_list is char *.
229
1d341cf4 230If this is successful, you end up with a wx23_2.dll/libwx23_2.a in win32/lib
9a718b86 231(or just libwx_msw.a if you opted for a static build).
1d341cf4 232Now try building the minimal sample:
0d639168 233
0a2fe387
HH
234-> cd samples/minimal
235-> make
0a2fe387 236
ce1a1ff4 237and run it with wine, for example (or copy to a Windows box)
0a2fe387
HH
238-> wine minimal.exe
239
240If all is well, do an install; from win32
241-> make install
242
a353a0be
RD
243Native and cross-compiled installations can co-exist peacefully
244(as long as their widget sets differ), except for wx-config. You might
0a2fe387 245want to rename the cross-compiled one to i586-mingw32-wx-config, or something.
25a2a4b0
HH
246
247Cross-compiling TODO:
248---------------------
a353a0be 249- resource compiling must be done manually for now (should/can we link the
22baaed3
HH
250default wx resources into libwx_msw.a?) [ No we can't; the linker won't
251link it in... you have to supply an object file ]
25a2a4b0 252- static executables are HUGE -- there must be room for improvement.
214960fb 253