1 |
|
---|
2 | Windows port
|
---|
3 | ============
|
---|
4 |
|
---|
5 | This directory contains the files required to build this software on the
|
---|
6 | native Windows platform. This is not a place to look for help if you are
|
---|
7 | using a POSIX emulator, such as Cygwin. Check the Unix instructions for
|
---|
8 | that.
|
---|
9 |
|
---|
10 |
|
---|
11 |
|
---|
12 | CONTENTS
|
---|
13 | ========
|
---|
14 |
|
---|
15 | 1. General
|
---|
16 | 1.1 Building From the Command-Line
|
---|
17 | 1.2 Configuring The Source
|
---|
18 | 1.3 Compiling
|
---|
19 | 1.4 Installing
|
---|
20 |
|
---|
21 | 2. Compiler Specifics
|
---|
22 | 2.1 Microsoft Visual C/C++
|
---|
23 | 2.1 GNU C/C++, Mingw Edition
|
---|
24 | 2.2 Borland C++ Builder
|
---|
25 | 2.2.1 Building with iconv support
|
---|
26 | 2.2.2 Compatibility problems with MSVC (and probably CYGWIN)
|
---|
27 | 2.2.3 Other caveats
|
---|
28 |
|
---|
29 |
|
---|
30 |
|
---|
31 |
|
---|
32 | 1. General
|
---|
33 | ==========
|
---|
34 |
|
---|
35 |
|
---|
36 | 1.1 Building From The Command-Line
|
---|
37 | ----------------------------------
|
---|
38 |
|
---|
39 | This is the easiest, preferred and currently supported method. It can
|
---|
40 | be that a subdirectory of the directory where this file resides
|
---|
41 | contains project files for some IDE. If you want to use that, please
|
---|
42 | refer to the readme file within that subdirectory.
|
---|
43 |
|
---|
44 | In order to build from the command-line you need to make sure that
|
---|
45 | your compiler works from the command line. This is not always the
|
---|
46 | case, often the required environment variables are missing. If you are
|
---|
47 | not sure, test if this works first. If it doesn't, you will first have
|
---|
48 | to configure your compiler suite to run from the command-line - please
|
---|
49 | refer to your compiler's documentation regarding that.
|
---|
50 |
|
---|
51 | The first thing you want to do is configure the source. You can have
|
---|
52 | the configuration script do this automatically for you. The
|
---|
53 | configuration script is written in JScript, a Microsoft's
|
---|
54 | implementation of the ECMA scripting language. Almost every Windows
|
---|
55 | machine can execute this through the Windows Scripting Host. If your
|
---|
56 | system lacks the ability to execute JScript for some reason, you must
|
---|
57 | perform the configuration manually and you are on your own with that.
|
---|
58 |
|
---|
59 | The second step is compiling the source and, optionally, installing it
|
---|
60 | to the location of your choosing.
|
---|
61 |
|
---|
62 |
|
---|
63 | 1.2 Configuring The Source
|
---|
64 | --------------------------
|
---|
65 |
|
---|
66 | The configuration script accepts numerous options. Some of these
|
---|
67 | affect features which will be available in the compiled software,
|
---|
68 | others affect the way the software is built and installed. To see a
|
---|
69 | full list of options supported by the configuration script, run
|
---|
70 |
|
---|
71 | cscript configure.js help
|
---|
72 |
|
---|
73 | from the win32 subdirectory. The configuration script will present you
|
---|
74 | the options it accepts and give a biref explanation of these. In every
|
---|
75 | case you will have two sets of options. The first set is specific to
|
---|
76 | the software you are building and the second one is specific to the
|
---|
77 | Windows port.
|
---|
78 |
|
---|
79 | Once you have decided which options suit you, run the script with that
|
---|
80 | options. Here is an example:
|
---|
81 |
|
---|
82 | cscript configure.js compiler=msvc prefix=c:\opt
|
---|
83 | include=c:\opt\include lib=c:\opt\lib debug=yes
|
---|
84 |
|
---|
85 | The previous example will configure the process to use the Microsoft's
|
---|
86 | compiler, install the library in c:\opt, use c:\opt\include and
|
---|
87 | c:\opt\lib as additional search paths for the compiler and the linker
|
---|
88 | and build executables with debug symbols.
|
---|
89 |
|
---|
90 | Note: Please do not use path names which contain spaces. This will
|
---|
91 | fail. Allowing this would require me to put almost everything in the
|
---|
92 | Makefile in quotas and that looks quite ugly with my
|
---|
93 | syntax-highlighting engine. If you absolutely must use spaces in paths
|
---|
94 | send me an email and tell me why. If there are enough of you out there
|
---|
95 | who need this, or if a single one has a very good reason, I will
|
---|
96 | modify the Makefile to allow spaces in paths.
|
---|
97 |
|
---|
98 |
|
---|
99 | 1.3 Compiling
|
---|
100 | -------------
|
---|
101 |
|
---|
102 | After the configuration stage has been completed, you want to build
|
---|
103 | the software. You will have to use the make tool which comes with
|
---|
104 | your compiler. If you, for example, configured the source to build
|
---|
105 | with Microsoft's MSVC compiler, you would use the NMAKE utility. If
|
---|
106 | you configured it to build with GNU C compiler, mingw edition, you
|
---|
107 | would use the GNU make. Assuming you use MSVC, type
|
---|
108 |
|
---|
109 | nmake /f Makefile.msvc
|
---|
110 |
|
---|
111 | and if you use MinGW, you would type
|
---|
112 |
|
---|
113 | make -f Makefile.mingw
|
---|
114 |
|
---|
115 | and if you use Borland's compiler, you would type
|
---|
116 |
|
---|
117 | bmake -f Makefile.bcb
|
---|
118 |
|
---|
119 | in the win32 subdirectory. When the building completes, you will find
|
---|
120 | the executable files in win32\bin.* directory, where * stands for the
|
---|
121 | name of the compiler you have used.
|
---|
122 |
|
---|
123 |
|
---|
124 | 1.4 Installing
|
---|
125 | --------------
|
---|
126 |
|
---|
127 | You can install the software into the directory you specified to the
|
---|
128 | configure script during the configure stage by typing (with MSVC in
|
---|
129 | this example)
|
---|
130 |
|
---|
131 | nmake /f Makefile.msvc install
|
---|
132 |
|
---|
133 | That would be it, enjoy.
|
---|
134 |
|
---|
135 |
|
---|
136 |
|
---|
137 |
|
---|
138 |
|
---|
139 | 2. Compiler Specifics
|
---|
140 | =====================
|
---|
141 |
|
---|
142 |
|
---|
143 | 2.1 Microsoft Visual C/C++
|
---|
144 | --------------------------
|
---|
145 |
|
---|
146 | If you use the compiler which comes with Visual Studio .NET, note that
|
---|
147 | it will link to its own C-runtime named msvcr70.dll or msvcr71.dll. This
|
---|
148 | file is not available on any machine which doesn't have Visual Studio
|
---|
149 | .NET installed.
|
---|
150 |
|
---|
151 |
|
---|
152 | 2.2 GNU C/C++, Mingw edition
|
---|
153 | ----------------------------
|
---|
154 |
|
---|
155 | When specifying paths to configure.js, please use slashes instead of
|
---|
156 | backslashes for directory separation. Sometimes Mingw needs this. If
|
---|
157 | this is the case, and you specify backslashes, then the compiler will
|
---|
158 | complain about not finding necessary header files.
|
---|
159 |
|
---|
160 |
|
---|
161 | 2.2 Borland C++ Builder
|
---|
162 | -----------------------
|
---|
163 |
|
---|
164 | To compile libxml2 with the BCB6 compiler and associated tools, just follow
|
---|
165 | the basic instructions found in this file file. Be sure to specify
|
---|
166 | the "compiler=bcb" option when running the configure script. To compile the
|
---|
167 | library and test programs, just type
|
---|
168 |
|
---|
169 | make -fMakefile.bcb
|
---|
170 |
|
---|
171 | That should be all that's required. But there are a few other things to note:
|
---|
172 |
|
---|
173 | 2.2.1 Building with iconv support
|
---|
174 |
|
---|
175 | If you configure libxml2 to include iconv support, you will obviously need to
|
---|
176 | obtain the iconv library and include files. To get them, just follow the links
|
---|
177 | at http://www.gnu.org/software/libiconv/ - there are pre-compiled Win32
|
---|
178 | versions available, but note that these where built with MSVC. Hence the
|
---|
179 | supplied import library is in COFF format rather than OMF format. You can
|
---|
180 | convert this library by using Borland's COFF2OMF utility, or use IMPLIB to
|
---|
181 | build a new import library from the DLL. Alternatively, it is possible to
|
---|
182 | obtain the iconv source, and build the DLL using the Borland compiler.
|
---|
183 |
|
---|
184 | There is a minor problem with the header files for iconv - they expect a
|
---|
185 | macro named "EILSEQ" in errno.h, but this is not defined in the Borland
|
---|
186 | headers, and its absence can cause problems. To circumvent this problem, I
|
---|
187 | define EILSEQ=2 in Makefile.bcb. The value "2" is the value for ENOFILE (file
|
---|
188 | not found). This should not have any disastrous side effects beyond possibly
|
---|
189 | displaying a misleading error message in certain situations.
|
---|
190 |
|
---|
191 | 2.2.2 Compatibility problems with MSVC (and probably CYGWIN)
|
---|
192 |
|
---|
193 | A libxml2 DLL generated by BCB is callable from MSVC programs, but there is a
|
---|
194 | minor problem with the names of the symbols exported from the library. The
|
---|
195 | Borland compiler, by default, prepends an underscore character to global
|
---|
196 | identifiers (functions and global variables) when generating object files.
|
---|
197 | Hence the function "xmlAddChild" is added to the DLL with the name
|
---|
198 | "_xmlAddChild". The MSVC compiler does not have this behaviour, and looks for
|
---|
199 | the unadorned name. I currently circumvent this problem by writing a .def file
|
---|
200 | which causes BOTH the adorned and unadorned names to be exported from the DLL.
|
---|
201 | This behaviour may not be supported in the future.
|
---|
202 |
|
---|
203 | An even worse problem is that of generating an import library for the DLL. The
|
---|
204 | Borland-generated DLL is in OMF format. MSVC expects libraries in COFF format,
|
---|
205 | but they don't provide a "OMF2COFF" utility, or even the equivalent of
|
---|
206 | Borland's IMPLIB utility. But it is possible to create an import lib from the
|
---|
207 | .def file, using the command:
|
---|
208 | LIB /DEF:libxml2.def
|
---|
209 |
|
---|
210 | If you don't have the .def file, it's possible to create one manually. Use
|
---|
211 | DUMPBIN /EXPORTS /OUT:libxml2.tmp libxml2.dll to get a list of the exported
|
---|
212 | names, and edit this into .def file format.
|
---|
213 |
|
---|
214 | A similar problem is likely with Cygwin.
|
---|
215 |
|
---|
216 | 2.2.3 Other caveats
|
---|
217 |
|
---|
218 | We have tested this only with BCB6, Professional Edition, and BCB 5.5 free
|
---|
219 | command-line tools.
|
---|
220 |
|
---|
221 |
|
---|
222 |
|
---|
223 | Authors: Igor Zlatkovic <igor@zlatkovic.com>
|
---|
224 | Eric Zurcher <Eric.Zurcher@csiro.au>
|
---|
225 |
|
---|
226 |
|
---|