From Lua 5.2: Add table.pack(). Needs -DLUAJIT_ENABLE_LUA52COMPAT.
[luajit-2.0/celess22.git] / doc / install.html
blob19772da6fd3123915fdaa0df5fdb2b5011b43ecc
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2 <html>
3 <head>
4 <title>Installation</title>
5 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6 <meta name="Author" content="Mike Pall">
7 <meta name="Copyright" content="Copyright (C) 2005-2012, Mike Pall">
8 <meta name="Language" content="en">
9 <link rel="stylesheet" type="text/css" href="bluequad.css" media="screen">
10 <link rel="stylesheet" type="text/css" href="bluequad-print.css" media="print">
11 <style type="text/css">
12 table.compat {
13 line-height: 1.2;
14 width: 600px;
16 table.compat td {
17 border: 1px solid #bfcfff;
18 font-size: 90%;
19 height: 2.5em;
21 table.compat tr.compathead td {
22 font-weight: bold;
23 border-bottom: 2px solid #bfcfff;
25 tr.compathead td.compatos {
26 vertical-align: top;
28 table.compat td.compatcpu {
29 width: 16%;
30 border-right: 2px solid #bfcfff;
32 td.compatos {
33 width: 21%;
34 vertical-align: middle;
36 td.compatno {
37 background-color: #d0d0d0;
39 </style>
40 </head>
41 <body>
42 <div id="site">
43 <a href="http://luajit.org"><span>Lua<span id="logo">JIT</span></span></a>
44 </div>
45 <div id="head">
46 <h1>Installation</h1>
47 </div>
48 <div id="nav">
49 <ul><li>
50 <a href="luajit.html">LuaJIT</a>
51 <ul><li>
52 <a class="current" href="install.html">Installation</a>
53 </li><li>
54 <a href="running.html">Running</a>
55 </li></ul>
56 </li><li>
57 <a href="extensions.html">Extensions</a>
58 <ul><li>
59 <a href="ext_ffi.html">FFI Library</a>
60 <ul><li>
61 <a href="ext_ffi_tutorial.html">FFI Tutorial</a>
62 </li><li>
63 <a href="ext_ffi_api.html">ffi.* API</a>
64 </li><li>
65 <a href="ext_ffi_semantics.html">FFI Semantics</a>
66 </li></ul>
67 </li><li>
68 <a href="ext_jit.html">jit.* Library</a>
69 </li><li>
70 <a href="ext_c_api.html">Lua/C API</a>
71 </li></ul>
72 </li><li>
73 <a href="status.html">Status</a>
74 <ul><li>
75 <a href="changes.html">Changes</a>
76 </li></ul>
77 </li><li>
78 <a href="faq.html">FAQ</a>
79 </li><li>
80 <a href="http://luajit.org/performance.html">Performance <span class="ext">&raquo;</span></a>
81 </li><li>
82 <a href="http://luajit.org/download.html">Download <span class="ext">&raquo;</span></a>
83 </li><li>
84 <a href="http://wiki.luajit.org/">Wiki <span class="ext">&raquo;</span></a>
85 </li><li>
86 <a href="http://luajit.org/list.html">Mailing List <span class="ext">&raquo;</span></a>
87 </li></ul>
88 </div>
89 <div id="main">
90 <p>
91 LuaJIT is only distributed as a source package. This page explains
92 how to build and install LuaJIT with different operating systems
93 and C&nbsp;compilers.
94 </p>
95 <p>
96 For the impatient (on POSIX systems):
97 </p>
98 <pre class="code">
99 make &amp;&amp; sudo make install
100 </pre>
102 LuaJIT currently builds out-of-the box on most systems.
103 Here's the compatibility matrix for the supported combinations of
104 operating systems, CPUs and compilers:
105 </p>
106 <table class="compat">
107 <tr class="compathead">
108 <td class="compatcpu">CPU / OS</td>
109 <td class="compatos"><a href="#posix">Linux</a> or<br><a href="#android">Android</a></td>
110 <td class="compatos"><a href="#posix">*BSD, Other</a></td>
111 <td class="compatos"><a href="#posix">OSX 10.4+</a> or<br><a href="#ios">iOS 3.0+</a></td>
112 <td class="compatos"><a href="#windows">Windows<br>XP/Vista/7</a></td>
113 </tr>
114 <tr class="odd separate">
115 <td class="compatcpu">x86 (32 bit)</td>
116 <td class="compatos">GCC 4.x<br>GCC 3.4</td>
117 <td class="compatos">GCC 4.x<br>GCC 3.4</td>
118 <td class="compatos">GCC 4.x<br>GCC 3.4</td>
119 <td class="compatos">MSVC, MSVC/EE<br>WinSDK<br>MinGW, Cygwin</td>
120 </tr>
121 <tr class="even">
122 <td class="compatcpu">x64 (64 bit)</td>
123 <td class="compatos">GCC 4.x</td>
124 <td class="compatos compatno">&nbsp;</td>
125 <td class="compatos">GCC 4.x</td>
126 <td class="compatos">MSVC + SDK v7.0<br>WinSDK v7.0</td>
127 </tr>
128 <tr class="odd">
129 <td class="compatcpu"><a href="#cross2">ARMv5+<br>ARM9E+</a></td>
130 <td class="compatos">GCC 4.2+</td>
131 <td class="compatos">GCC 4.2+</td>
132 <td class="compatos">GCC 4.2+</td>
133 <td class="compatos compatno">&nbsp;</td>
134 </tr>
135 <tr class="even">
136 <td class="compatcpu"><a href="#cross2">PPC</a></td>
137 <td class="compatos">GCC 4.3+</td>
138 <td class="compatos">GCC 4.3+<br>GCC 4.1 (<a href="#cross2">PS3</a>)</td>
139 <td class="compatos compatno">&nbsp;</td>
140 <td class="compatos compatno">&nbsp;</td>
141 </tr>
142 <tr class="odd">
143 <td class="compatcpu"><a href="#cross2">PPC/e500v2</a></td>
144 <td class="compatos">GCC 4.3+</td>
145 <td class="compatos">GCC 4.3+</td>
146 <td class="compatos compatno">&nbsp;</td>
147 <td class="compatos compatno">&nbsp;</td>
148 </tr>
149 <tr class="even">
150 <td class="compatcpu"><a href="#cross2">MIPS</a></td>
151 <td class="compatos">GCC 4.3+</td>
152 <td class="compatos">GCC 4.3+</td>
153 <td class="compatos compatno">&nbsp;</td>
154 <td class="compatos compatno">&nbsp;</td>
155 </tr>
156 </table>
158 <h2>Configuring LuaJIT</h2>
160 The standard configuration should work fine for most installations.
161 Usually there is no need to tweak the settings. The following files
162 hold all user-configurable settings:
163 </p>
164 <ul>
165 <li><tt>src/luaconf.h</tt> sets some configuration variables.</li>
166 <li><tt>Makefile</tt> has settings for <b>installing</b> LuaJIT (POSIX
167 only).</li>
168 <li><tt>src/Makefile</tt> has settings for <b>compiling</b> LuaJIT
169 under POSIX, MinGW or Cygwin.</li>
170 <li><tt>src/msvcbuild.bat</tt> has settings for compiling LuaJIT with
171 MSVC or WinSDK.</li>
172 </ul>
174 Please read the instructions given in these files, before changing
175 any settings.
176 </p>
178 <h2 id="posix">POSIX Systems (Linux, OSX, *BSD etc.)</h2>
179 <h3>Prerequisites</h3>
181 Depending on your distribution, you may need to install a package for
182 GCC, the development headers and/or a complete SDK. E.g. on a current
183 Debian/Ubuntu, install <tt>libc6-dev</tt> with the package manager.
184 </p>
186 Download the current source package of LuaJIT (pick the .tar.gz),
187 if you haven't already done so. Move it to a directory of your choice,
188 open a terminal window and change to this directory. Now unpack the archive
189 and change to the newly created directory:
190 </p>
191 <pre class="code">
192 tar zxf LuaJIT-2.0.0-beta10.tar.gz
193 cd LuaJIT-2.0.0-beta10</pre>
194 <h3>Building LuaJIT</h3>
196 The supplied Makefiles try to auto-detect the settings needed for your
197 operating system and your compiler. They need to be run with GNU Make,
198 which is probably the default on your system, anyway. Simply run:
199 </p>
200 <pre class="code">
201 make
202 </pre>
204 This always builds a native x86, x64 or PPC binary, depending on the host OS
205 you're running this command on. Check the section on
206 <a href="#cross">cross-compilation</a> for more options.
207 </p>
209 By default, modules are only searched under the prefix <tt>/usr/local</tt>.
210 You can add an extra prefix to the search paths by appending the
211 <tt>PREFIX</tt> option, e.g.:
212 </p>
213 <pre class="code">
214 make PREFIX=/home/myself/lj2
215 </pre>
217 Note for OSX: if the <tt>MACOSX_DEPLOYMENT_TARGET</tt> environment
218 variable is not set, then it's forced to <tt>10.4</tt>.
219 </p>
220 <h3>Installing LuaJIT</h3>
222 The top-level Makefile installs LuaJIT by default under
223 <tt>/usr/local</tt>, i.e. the executable ends up in
224 <tt>/usr/local/bin</tt> and so on. You need root privileges
225 to write to this path. So, assuming sudo is installed on your system,
226 run the following command and enter your sudo password:
227 </p>
228 <pre class="code">
229 sudo make install
230 </pre>
232 Otherwise specify the directory prefix as an absolute path, e.g.:
233 </p>
234 <pre class="code">
235 make install PREFIX=/home/myself/lj2
236 </pre>
238 Obviously the prefixes given during build and installation need to be the same.
239 </p>
240 <p style="color: #c00000;">
241 Note: to avoid overwriting a previous version, the beta test releases
242 only install the LuaJIT executable under the versioned name (i.e.
243 <tt>luajit-2.0.0-beta10</tt>). You probably want to create a symlink
244 for convenience, with a command like this:
245 </p>
246 <pre class="code" style="color: #c00000;">
247 sudo ln -sf luajit-2.0.0-beta10&nbsp;/usr/local/bin/luajit
248 </pre>
250 <h2 id="windows">Windows Systems</h2>
251 <h3>Prerequisites</h3>
253 Either install one of the open source SDKs
254 (<a href="http://mingw.org/"><span class="ext">&raquo;</span>&nbsp;MinGW</a> or
255 <a href="http://www.cygwin.com/"><span class="ext">&raquo;</span>&nbsp;Cygwin</a>), which come with a modified
256 GCC plus the required development headers.
257 </p>
259 Or install Microsoft's Visual C++ (MSVC). The freely downloadable
260 <a href="http://www.microsoft.com/Express/VC/"><span class="ext">&raquo;</span>&nbsp;Express Edition</a>
261 works just fine, but only contains an x86 compiler.
262 </p>
264 The freely downloadable
265 <a href="http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx"><span class="ext">&raquo;</span>&nbsp;Windows SDK</a>
266 only comes with command line tools, but this is all you need to build LuaJIT.
267 It contains x86 and x64 compilers.
268 </p>
270 Next, download the source package and unpack it using an archive manager
271 (e.g. the Windows Explorer) to a directory of your choice.
272 </p>
273 <h3>Building with MSVC</h3>
275 Open a "Visual Studio .NET Command Prompt", <tt>cd</tt> to the
276 directory where you've unpacked the sources and run these commands:
277 </p>
278 <pre class="code">
279 cd src
280 msvcbuild
281 </pre>
283 Then follow the installation instructions below.
284 </p>
285 <h3>Building with the Windows SDK</h3>
287 Open a "Windows SDK Command Shell" and select the x86 compiler:
288 </p>
289 <pre class="code">
290 setenv /release /x86
291 </pre>
293 Or select the x64 compiler:
294 </p>
295 <pre class="code">
296 setenv /release /x64
297 </pre>
299 Then <tt>cd</tt> to the directory where you've unpacked the sources
300 and run these commands:
301 </p>
302 <pre class="code">
303 cd src
304 msvcbuild
305 </pre>
307 Then follow the installation instructions below.
308 </p>
309 <h3>Building with MinGW or Cygwin</h3>
311 Open a command prompt window and make sure the MinGW or Cygwin programs
312 are in your path. Then <tt>cd</tt> to the directory where
313 you've unpacked the sources and run this command for MinGW:
314 </p>
315 <pre class="code">
316 mingw32-make
317 </pre>
319 Or this command for Cygwin:
320 </p>
321 <pre class="code">
322 make
323 </pre>
325 Then follow the installation instructions below.
326 </p>
327 <h3>Installing LuaJIT</h3>
329 Copy <tt>luajit.exe</tt> and <tt>lua51.dll</tt> (built in the <tt>src</tt>
330 directory) to a newly created directory (any location is ok).
331 Add <tt>lua</tt> and <tt>lua\jit</tt> directories below it and copy
332 all Lua files from the <tt>src\jit</tt> directory of the distribution
333 to the latter directory.
334 </p>
336 There are no hardcoded
337 absolute path names &mdash; all modules are loaded relative to the
338 directory where <tt>luajit.exe</tt> is installed
339 (see <tt>src/luaconf.h</tt>).
340 </p>
342 <h2 id="cross">Cross-compiling LuaJIT</h2>
344 The GNU Makefile-based build system allows cross-compiling on any host
345 for any supported target, as long as both architectures have the same
346 pointer size. If you want to cross-compile to any 32 bit target on an
347 x64 OS, you need to install the multilib development package (e.g.
348 <tt>libc6-dev-i386</tt> on Debian/Ubuntu) and build a 32 bit host part
349 (<tt>HOST_CC="gcc -m32"</tt>).
350 </p>
352 You need to specify <tt>TARGET_SYS</tt> whenever the host OS and the
353 target OS differ, or you'll get assembler or linker errors. E.g. if
354 you're compiling on a Windows or OSX host for embedded Linux or Android,
355 you need to add <tt>TARGET_SYS=Linux</tt> to the examples below. For a
356 minimal target OS, you may need to disable the built-in allocator in
357 <tt>src/Makefile</tt> and use <tt>TARGET_SYS=Other</tt>. The examples
358 below only show some popular targets &mdash; please check the comments
359 in <tt>src/Makefile</tt> for more details.
360 </p>
361 <pre class="code">
362 # Cross-compile to a 32 bit binary on a multilib x64 OS
363 make CC="gcc -m32"
365 # Cross-compile on Debian/Ubuntu for Windows (mingw32 package)
366 make HOST_CC="gcc -m32" CROSS=i586-mingw32msvc- TARGET_SYS=Windows
367 </pre>
368 <p id="cross2">
369 The <tt>CROSS</tt> prefix allows specifying a standard GNU cross-compile
370 toolchain (Binutils, GCC and a matching libc). The prefix may vary
371 depending on the <tt>--target</tt> the toolchain was built for (note the
372 <tt>CROSS</tt> prefix has a trailing <tt>"-"</tt>). The examples below
373 use the canonical toolchain triplets for Linux.
374 </p>
376 Since there's often no easy way to detect CPU features at runtime, it's
377 important to compile with the proper CPU or architecture settings. You
378 can specify these when building the toolchain yourself. Or add
379 <tt>-mcpu=...</tt> or <tt>-march=...</tt> to <tt>TARGET_CFLAGS</tt>. For
380 ARM it's important to have the correct <tt>-mfloat-abi=...</tt> setting,
381 too. Otherwise LuaJIT may not run at the full performance of your target
382 CPU.
383 </p>
384 <pre class="code">
385 # ARM soft-float
386 make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabi- \
387 TARGET_CFLAGS="-mfloat-abi=soft"
389 # ARM soft-float ABI with VFP (example for Cortex-a8)
390 make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabi- \
391 TARGET_CFLAGS="-mcpu=cortex-a8 -mfloat-abi=softfp"
393 # ARM hard-float ABI with VFP (armhf, requires recent toolchain)
394 make HOST_CC="gcc -m32" CROSS=arm-linux-gnueabihf-
396 # PPC
397 make HOST_CC="gcc -m32" CROSS=powerpc-linux-gnu-
398 # PPC/e500v2 (fast interpreter only)
399 make HOST_CC="gcc -m32" CROSS=powerpc-e500v2-linux-gnuspe-
400 # PS3 (fast interpreter only)
401 make HOST_CC="gcc -m32" CROSS=ppu-lv2-
403 # MIPS big-endian
404 make HOST_CC="gcc -m32" CROSS=mips-linux-
405 # MIPS little-endian
406 make HOST_CC="gcc -m32" CROSS=mipsel-linux-
407 </pre>
409 You can cross-compile for <b id="android">Android (ARM)</b> using the <a href="http://developer.android.com/sdk/ndk/index.html"><span class="ext">&raquo;</span>&nbsp;Android NDK</a>.
410 The environment variables need to match the install locations and the
411 desired target platform. E.g. Android&nbsp;2.2 corresponds to ABI level&nbsp;8:
412 </p>
413 <pre class="code">
414 NDK=/opt/android/ndk
415 NDKABI=8
416 NDKVER=$NDK/toolchains/arm-linux-androideabi-4.4.3
417 NDKP=$NDKVER/prebuilt/linux-x86/bin/arm-linux-androideabi-
418 NDKF="--sysroot $NDK/platforms/android-$NDKABI/arch-arm"
419 make HOST_CC="gcc -m32" CROSS=$NDKP TARGET_FLAGS="$NDKF"
420 </pre>
422 You can cross-compile for <b id="ios">iOS 3.0+</b> (iPhone/iPad) using the <a href="http://developer.apple.com/devcenter/ios/index.action"><span class="ext">&raquo;</span>&nbsp;iOS SDK</a>.
423 The environment variables need to match the iOS SDK version:
424 </p>
425 <p style="font-size: 8pt;">
426 Note: <b>the JIT compiler is disabled for iOS</b>, because regular iOS Apps
427 are not allowed to generate code at runtime. You'll only get the performance
428 of the LuaJIT interpreter on iOS. This is still faster than plain Lua, but
429 much slower than the JIT compiler. Please complain to Apple, not me.
430 Or use Android. :-p
431 </p>
432 <pre class="code">
433 IXCODE=/Applications/Xcode45-DP4.app/Contents
434 ISDK=$IXCODE/Developer/Platforms/iPhoneOS.platform/Developer
435 ISDKVER=iPhoneOS6.0.sdk
436 ISDKP=$ISDK/usr/bin/
437 ISDKF="-arch armv7 -isysroot $ISDK/SDKs/$ISDKVER"
438 make HOST_CC="gcc -m32 -arch i386" CROSS=$ISDKP TARGET_FLAGS="$ISDKF" \
439 TARGET_SYS=iOS
440 </pre>
442 <h2 id="embed">Embedding LuaJIT</h2>
444 LuaJIT is API-compatible with Lua 5.1. If you've already embedded Lua
445 into your application, you probably don't need to do anything to switch
446 to LuaJIT, except link with a different library:
447 </p>
448 <ul>
449 <li>It's strongly suggested to build LuaJIT separately using the supplied
450 build system. Please do <em>not</em> attempt to integrate the individual
451 source files into your build tree. You'll most likely get the internal build
452 dependencies wrong or mess up the compiler flags. Treat LuaJIT like any
453 other external library and link your application with either the dynamic
454 or static library, depending on your needs.</li>
455 <li>If you want to load C modules compiled for plain Lua
456 with <tt>require()</tt>, you need to make sure the public symbols
457 (e.g. <tt>lua_pushnumber</tt>) are exported, too:
458 <ul><li>On POSIX systems you can either link to the shared library
459 or link the static library into your application. In the latter case
460 you'll need to export all public symbols from your main executable
461 (e.g. <tt>-Wl,-E</tt> on Linux) and add the external dependencies
462 (e.g. <tt>-lm -ldl</tt> on Linux).</li>
463 <li>Since Windows symbols are bound to a specific DLL name, you need to
464 link to the <tt>lua51.dll</tt> created by the LuaJIT build (do not rename
465 the DLL). You may link LuaJIT statically on Windows only if you don't
466 intend to load Lua/C modules at runtime.
467 </li></ul>
468 </li>
469 <li>
470 If you're building a 64 bit application on OSX which links directly or
471 indirectly against LuaJIT, you need to link your main executable
472 with these flags:
473 <pre class="code">
474 -pagezero_size 10000 -image_base 100000000
475 </pre>
476 Also, it's recommended to <tt>rebase</tt> all (self-compiled) shared libraries
477 which are loaded at runtime on OSX/x64 (e.g. C extension modules for Lua).
478 See: <tt>man rebase</tt>
479 </li>
480 </ul>
481 <p>Additional hints for initializing LuaJIT using the C API functions:</p>
482 <ul>
483 <li>Here's a
484 <a href="http://lua-users.org/wiki/SimpleLuaApiExample"><span class="ext">&raquo;</span>&nbsp;simple example</a>
485 for embedding Lua or LuaJIT into your application.</li>
486 <li>Make sure you use <tt>luaL_newstate</tt>. Avoid using
487 <tt>lua_newstate</tt>, since this uses the (slower) default memory
488 allocator from your system (no support for this on x64).</li>
489 <li>Make sure you use <tt>luaL_openlibs</tt> and not the old Lua 5.0 style
490 of calling <tt>luaopen_base</tt> etc. directly.</li>
491 <li>To change or extend the list of standard libraries to load, copy
492 <tt>src/lib_init.c</tt> to your project and modify it accordingly.
493 Make sure the <tt>jit</tt> library is loaded or the JIT compiler
494 will not be activated.</li>
495 <li>The <tt>bit.*</tt> module for bitwise operations
496 is already built-in. There's no need to statically link
497 <a href="http://bitop.luajit.org/"><span class="ext">&raquo;</span>&nbsp;Lua BitOp</a> to your application.</li>
498 </ul>
500 <h2 id="distro">Hints for Distribution Maintainers</h2>
502 The LuaJIT build system has extra provisions for the needs of most
503 POSIX-based distributions. If you're a package maintainer for
504 a distribution, <em>please</em> make use of these features and
505 avoid patching, subverting, autotoolizing or messing up the build system
506 in unspeakable ways.
507 </p>
509 There should be absolutely no need to patch <tt>luaconf.h</tt> or any
510 of the Makefiles. And please do not hand-pick files for your packages &mdash;
511 simply use whatever <tt>make install</tt> creates. There's a reason
512 for all of the files <em>and</em> directories it creates.
513 </p>
515 The build system uses GNU make and auto-detects most settings based on
516 the host you're building it on. This should work fine for native builds,
517 even when sandboxed. You may need to pass some of the following flags to
518 <em>both</em> the <tt>make</tt> and the <tt>make install</tt> command lines
519 for a regular distribution build:
520 </p>
521 <ul>
522 <li><tt>PREFIX</tt> overrides the installation path and should usually
523 be set to <tt>/usr</tt>. Setting this also changes the module paths and
524 the <tt>-rpath</tt> of the shared library.</li>
525 <li><tt>DESTDIR</tt> is an absolute path which allows you to install
526 to a shadow tree instead of the root tree of the build system.</li>
527 <li>Have a look at the top-level <tt>Makefile</tt> and <tt>src/Makefile</tt>
528 for additional variables to tweak. The following variables <em>may</em> be
529 overridden, but it's <em>not</em> recommended, except for special needs
530 like cross-builds:
531 <tt>BUILDMODE, CC, HOST_CC, STATIC_CC, DYNAMIC_CC, CFLAGS, HOST_CFLAGS,
532 TARGET_CFLAGS, LDFLAGS, HOST_LDFLAGS, TARGET_LDFLAGS, TARGET_SHLDFLAGS,
533 TARGET_FLAGS, LIBS, HOST_LIBS, TARGET_LIBS, CROSS, HOST_SYS, TARGET_SYS
534 </tt></li>
535 </ul>
537 The build system has a special target for an amalgamated build, i.e.
538 <tt>make amalg</tt>. This compiles the LuaJIT core as one huge C file
539 and allows GCC to generate faster and shorter code. Alas, this requires
540 lots of memory during the build. This may be a problem for some users,
541 that's why it's not enabled by default. But it shouldn't be a problem for
542 most build farms. It's recommended that binary distributions use this
543 target for their LuaJIT builds.
544 </p>
546 The tl;dr version of the above:
547 </p>
548 <pre class="code">
549 make amalg PREFIX=/usr && \
550 make install PREFIX=/usr DESTDIR=/tmp/buildroot
551 </pre>
553 Finally, if you encounter any difficulties, please
554 <a href="contact.html">contact me</a> first, instead of releasing a broken
555 package onto unsuspecting users. Because they'll usually gonna complain
556 to me (the upstream) and not you (the package maintainer), anyway.
557 </p>
558 <br class="flush">
559 </div>
560 <div id="foot">
561 <hr class="hide">
562 Copyright &copy; 2005-2012 Mike Pall
563 <span class="noprint">
564 &middot;
565 <a href="contact.html">Contact</a>
566 </span>
567 </div>
568 </body>
569 </html>