Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 1 | |
| 2 | Windows port |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 3 | ============ |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 4 | |
| 5 | This directory contains the files required to build this software on the |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 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. |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 9 | |
| 10 | |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 11 | |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 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 Compatability 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. |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 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 |
Igor Zlatkovic | a6f2d90 | 2002-04-16 17:57:17 +0000 | [diff] [blame] | 54 | implementation of the ECMA scripting language. Almost every Windows |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 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 |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 57 | perform the configuration manually and you are on your own with that. |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 58 | |
| 59 | The second step is compiling the source and, optionally, installing it |
| 60 | to the location of your choosing. |
| 61 | |
| 62 | |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 63 | 1.2 Configuring The Source |
| 64 | -------------------------- |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 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 | |
Igor Zlatkovic | 4f92821 | 2003-11-27 18:39:01 +0000 | [diff] [blame] | 82 | cscript configure.js compiler=msvc prefix=c:\opt |
| 83 | include=c:\opt\include lib=c:\opt\lib debug=yes |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 84 | |
Igor Zlatkovic | 4f92821 | 2003-11-27 18:39:01 +0000 | [diff] [blame] | 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. |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 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 | |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 99 | 1.3 Compiling |
| 100 | ------------- |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 101 | |
| 102 | After the configuration stage has been completed, you want to build |
Igor Zlatkovic | b2f6163 | 2002-11-14 17:43:55 +0000 | [diff] [blame] | 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 |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 106 | you configured it to build with GNU C compiler, mingw edition, you |
Igor Zlatkovic | b2f6163 | 2002-11-14 17:43:55 +0000 | [diff] [blame] | 107 | would use the GNU make. Assuming you use MSVC, type |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 108 | |
Igor Zlatkovic | 4f92821 | 2003-11-27 18:39:01 +0000 | [diff] [blame] | 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 |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 118 | |
Igor Zlatkovic | b2f6163 | 2002-11-14 17:43:55 +0000 | [diff] [blame] | 119 | in the win32 subdirectory. When the building completes, you will find |
Igor Zlatkovic | 4f92821 | 2003-11-27 18:39:01 +0000 | [diff] [blame] | 120 | the executable files in win32\bin.* directory, where * stands for the |
| 121 | name of the compiler you have used. |
| 122 | |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 123 | |
| 124 | 1.4 Installing |
| 125 | -------------- |
| 126 | |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 127 | You can install the software into the directory you specified to the |
Igor Zlatkovic | 4f92821 | 2003-11-27 18:39:01 +0000 | [diff] [blame] | 128 | configure script during the configure stage by typing (with MSVC in |
| 129 | this example) |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 130 | |
Igor Zlatkovic | 4f92821 | 2003-11-27 18:39:01 +0000 | [diff] [blame] | 131 | nmake /f Makefile.msvc install |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 132 | |
| 133 | That would be it, enjoy. |
| 134 | |
| 135 | |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 136 | |
| 137 | |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 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 |
Igor Zlatkovic | 4f92821 | 2003-11-27 18:39:01 +0000 | [diff] [blame] | 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. |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 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 |
Igor Zlatkovic | 4f92821 | 2003-11-27 18:39:01 +0000 | [diff] [blame] | 157 | this is the case, and you specify backslashes, then the compiler will |
| 158 | complain about not finding necessary header files. |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 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 Compatability 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 | |
Igor Zlatkovic | 4f92821 | 2003-11-27 18:39:01 +0000 | [diff] [blame] | 218 | We have tested this only with BCB6, Professional Edition, and BCB 5.5 free |
| 219 | command-line tools. |
Igor Zlatkovic | 9e0acaa | 2003-08-28 12:34:00 +0000 | [diff] [blame] | 220 | |
| 221 | |
| 222 | |
| 223 | Authors: Igor Zlatkovic <igor@zlatkovic.com> |
| 224 | Eric Zurcher <Eric.Zurcher@csiro.au> |
| 225 | |
Igor Zlatkovic | ac97f6e | 2002-03-24 21:00:26 +0000 | [diff] [blame] | 226 | |