summaryrefslogtreecommitdiffstats
path: root/toolchain/uClibc
Commit message (Collapse)AuthorAgeFilesLines
* arc: Make sure that libgcc doesn't get included when it doesn't exist yetMischa Jonker2013-05-041-2/+13
| | | | | | | | | | | | | For ARC, libgcc is always included, even when -nostdlib is given. This is related to some small pieces of code that are not always generated by the compiler; a call to libgcc is used in those cases instead. During the initial stages of building the toolchain, this is a problem, as libgcc does not exist yet. The ARC compiler supports -really-nostdlib to override the default behavior. Signed-off-by: Mischa Jonker <mjonker@synopsys.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* arc: Add support for ARC-specific uClibcMischa Jonker2013-05-043-2/+14
| | | | | | [Peter: fix whitespace] Signed-off-by: Mischa Jonker <mjonker@synopsys.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* eliminate double slashes caused by FOO_SITE ending in a slashShawn J. Goff2013-04-151-1/+1
| | | | | | | | | | When a FOO_SITE variable ends in a slash and gets joined with a FOO_SOURCE variable like $(FOO_SITE)/$(FOO_SOURCE), the resulting URI has a double slash. While double-slashes are fine in unix paths, they are reserved in URIs - the part following '//' must be an authority. Signed-off-by: Shawn J. Goff <shawn7400@gmail.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* gdb: convert to the package infrastructureThomas Petazzoni2013-04-111-6/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit converts gdb to the package infrastructure, and therefore moves it from toolchain/gdb to package/gdb. The target package is now visible in "Package selection for the target" => "Debugging, profiling and benchmark". The main option, "gdb", forcefully selects the "gdbserver" sub-option by default. Another sub-option, "full debugger" allows to install the complete gdb on the target. When this option is enabled, then "gdbserver" is no longer forcefully selected. This ensures that at least gdbserver or the full debugger gets built/installed, so that the package is not a no-op. The host debugger is still enabled through a configuration option in "Toolchain". It is now visible regardless of the toolchain type (it used to be hidden for External Toolchains). The configuration options relative to the host debugger are now in package/gdb/Config.in.host, similar to how we have package/binutils/Config.in.host. Since gdb is now a proper package, it is no longer allowed to 'select BR2_PTHREADS_DEBUG' to ensure thread debugging is available when needed. Instead, it now 'depends on BR2_TOOLCHAIN_HAS_THREADS_DEBUG'. This option, in turn, is selected by the different toolchain backends when appropriate. The 'BR2_TOOLCHAIN_HAS_THREADS_DEBUG_IF_NEEDED' option is removed, since we no longer need to know when it is allowed to 'select BR2_PTHREADS_DEBUG'. Also, the 'BR2_PTHREADS_DEBUG' option is moved to appear right below the thread implementation selection (in the case of the Buildroot toolchain backend). Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* toolchain/arm: drop generic and old, add fa526/626, unify strongarmGustavo Zacarias2013-04-113-6/+6
| | | | | | | | | | | | | | | | | * Add Faraday FA526/626 as suggested on bug #1291 Note however that these cores are v4 and NOT v4t. * Make the sa110 & sa1110 cores -> strongarm since they're the same. * Drop all of the ARM variants lower than v4 including generic, there's no point in supporting obsolete targets. * Fix uClibc USE_BX logic, it was always on, this would break the new FA526/626 support and broke StrongARM since it's a v4 core. Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Acked-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: add missing $(Q)Thomas Petazzoni2013-03-241-1/+1
| | | | | | | | Add a missing $(Q) in front of a MESSAGE call, which leads to the message being displayed but also the command that shows the message. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* Revert "uClibc: port linuxthreads errno patch to 0.9.33.2"Gustavo Zacarias2013-02-211-68/+0
| | | | | | | | | | | | | | | | This reverts commit 1d8c3e6caf6be14644ef8ef5ae2704105322442b The forward port breaks compilation at least for SPARC NPTL toolchains: LD libuClibc-0.9.33.2.so libc/libc_so.a(pipe.os): In function `__GI_pipe': (.text+0x38): undefined reference to `__GI___errno_location' collect2: ld returned 1 exit status Easily triggered by a "make qemu_sparc_ss10_defconfig && make". Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: backport bits/time.h update to 0.9.33.2Peter Korsgaard2013-02-201-0/+36
| | | | | | Some packages uses CLOCK_MONOTONIC_RAW, so add it. Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: port linuxthreads errno patch to 0.9.33.2Sagaert Johan2013-02-201-0/+68
| | | | | | | | Without this patch programs using libglib2 (libsoup, etc.. ) and pthread may be broken. Signed-off-by: Sagaert Johan <sagaert.johan@skynet.be> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: mark 0.9.31 as deprecatedPeter Korsgaard2013-02-061-0/+1
| | | | | | | 0.9.31 is old and doesn't actually build with modern kernel headers, so mark it as deprecated. Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* avr32: support uClibc 0.9.33.2Simon Dawson2013-02-023-3/+20
| | | | | | | | | | Add a uClibc patch from OpenWRT, and tweak an existing patch to cope with the lack of a dup3 Linux syscall on avr32. This allow uClibc 0.9.33.2 to be built for avr32. [Peter: add upstream url for openwrt patch] Signed-off-by: Simon Dawson <spdawson@gmail.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* toolchain/uClibc: sprinkle with some calls to MESSAGEYann E. MORIN2013-01-201-0/+13
| | | | | | | | | Thus, the failing step can be easily extracted by autobuilders, to ease with post-mortem analysis. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Reviewed-by: Markos Chandras <markos.chandras@imgtec.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* xtensa: add support for the Xtensa architectureChris Zankel2012-11-152-2/+4
| | | | | | | | | | | | | The Xtensa architecture had been removed because it required special handling and depended on additional directories and files that became obsolete over time. This change is more aligned to other architectures. [Thomas: rebased on top of the "arch: improve definition of gcc mtune, mcpu, etc." patch]. Signed-off-by: Chris Zankel <chris@zankel.net> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: update uClibc-snapshot.config to recent uClibcsThomas Petazzoni2012-11-151-0/+1
| | | | | Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: remove useless linuxthreads-errno-fix patchThomas Petazzoni2012-11-151-68/+0
| | | | | | | | This patch has since a long time been merged upstream in uClibc, so it cannot apply on any of the recent uClibc snapshots. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: use the Buildroot toolchain options instead of the hidden common optionsThomas Petazzoni2012-11-041-5/+5
| | | | | | | | | | Since we are some day going to finally rename the badly named common toolchain options (BR2_USE_WCHAR, BR2_ENABLE_LOCALE, BR2_INET_RPC, etc.) into something more logical, let's start using the Buildroot toolchain options in the uClibc code. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* toolchain/uClibc: correct a slip of the penXinglong Liao2012-10-261-6/+6
| | | | | | | | UCLIB_EXTRA_CFLAGS -> UCLIBC_EXTRA_CFLAGS Signed-off-by: Xinglong Liao <xinglong.liao@gmail.com> Acked-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* Remove the Xtensa architectureThomas Petazzoni2012-09-201-1/+0
| | | | | | | | | | | | | | As stated in commit 555c2585bf28c3ef71f6d2dcdd983d17a19892af, the Xtensa architecture has been introduced in 2009 and never changed since its initial introduction. It requires some special handling that is a bit annoying, and despite our call to the initial developers, and the announcement of the deprecation of the architecture during the 2012.05, nothing has happened. Therefore, drop support for this architecture. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Acked-by: me Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* Move BR2_SPARC_TYPE to an uClibc specific placeThomas Petazzoni2012-09-202-1/+7
| | | | | | | | | BR2_SPARC_TYPE is a hidden configuration option that is only used for the configuration of uClibc, therefore, we move it from target/Config.arch.in to toolchain/uClibc/Config.in. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* Move BR2_ARM_TYPE to an uClibc specific placeThomas Petazzoni2012-09-202-1/+25
| | | | | | | | | | | | | | BR2_ARM_TYPE is a hidden configuration option that is only used for the configuration of uClibc, therefore, we move it from target/Config.arch.in to toolchain/uClibc/Config.in. We also add a comment that explains that this stuff is only useful for uClibc <= 0.9.32. Starting from 0.9.33, uClibc build process simply uses the compiler flags to find the ARM processor that should be used. So, someday, we'll be able to remove this. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* Clarify MIPS ABIs supportThomas Petazzoni2012-09-041-4/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Practically speaking, MIPS has three useful ABIs: * o32 is for 32-bits CPUs, or 64-bit CPUs running only a 32-bit subset of the instruction set. * n32 is for 64-bits CPUs only. It has 32-bits pointers and long integers. * n64 is for 64-bits CPUs only. It has 64-bits pointers and long integers. See http://www.linux-mips.org/wiki/MIPS_ABI_History and http://www.linux-mips.org/wiki/WhatsWrongWithO32N32N64 for more details. So, this commit reworks the Buildroot MIPS support by: * Add separate mips64/mips64el top-level architectures. * Renaming the n32 ABI option to BR2_MIPS_NABI32, for consistency with BR2_MIPS_OABI32. * Renaming the n64 ABI option to BR2_MIPS_NABI64, for consistency with BR2_MIPS_OABI32. * Make the n32 and n64 ABI selections select the BR2_ARCH_IS_64, since those ABIs are valid on 64-bits CPUs only. * Removing the o64 ABI, which is practicaly never used. * Removing the "none" ABI, which really doesn't make sense. * Introduce the mips64 and mips64el architecture names when a 64-bits MIPS ABI is choosen. This will fix build issue like http://autobuild.buildroot.org/results/9b8c5ea86c953a89e85e7b67e9221de41773f652/build-end.log where gmp was confused by the fact of having a 32 bits architecture (detected by the mips- architecture part of the tuple) but 64 bits integer size when compiling. * Adjust the uclibc.mk logic to support the new mips64/mips64el architecture names, and take into account the renaming of the ABI options. This has been build tested by generating Buildroot toolchains and compiling a few packages for MIPS o32, MIPS n32 and MIPS n64. This work is originally based on prior work done by Gustavo Zacarias. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: use BR2_ENDIAN to simplify endianess selectionThomas Petazzoni2012-09-041-15/+2
| | | | | Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* toolchain/mips: kill EABI and fix N32Gustavo Zacarias2012-07-151-1/+1
| | | | | | | | | MIPS EABI is a bare-metal ABI so remove it. Also fix uClibc to really work with N32 ABI, which used the EABI knob previously. Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
* Remove REAL_GNU_TARGET_NAMERichard Braun2012-06-231-2/+1
| | | | | | | | Instead of providing two variables, make GNU_TARGET_NAME give the real target name, and remove REAL_GNU_TARGET_NAME altogether. Signed-off-by: Richard Braun <rbraun@sceen.net> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: bump 0.9.33.x stable versionPeter Korsgaard2012-05-155-52/+1
| | | | Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* Add support to generate locale dataThomas Petazzoni2012-05-091-1/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In order to use locale support on a Linux system, you need locale data to be present: * on a (e)glibc based system, this data is typically in the /usr/lib/locale/locale-archive file, which can be created and extended using the localedef program * on an uClibc based system, the set of supported locales is defined at build time by an uClibc configuration option. This patch implements generating locale data for the following cases: * Internal toolchain * External toolchain based on (e)glibc. uClibc external toolchains are not supported, because with uClibc, the set of supported locales is defined at build time. CodeSourcery and Linaro toolchains have been tested, Crosstool-NG toolchains are believed to work properly as well. * Toolchains built using the Crosstool-NG backend, but only (e)glibc toolchains. This feature was runtime tested with internal uClibc toolchain, CodeSourcery ARM toolchain and Linaro ARM toolchain, thanks to a simple C program that shows the data and a gettext translated message. Note that this option differs from the "purge locales" option, which is responsible for removing translation files and other locale stuff installed by packages. At some point in the future, we may want to clarify the respective roles of those options. Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* toolchain/uClibc: enable 0.9.33.1 for shGustavo Zacarias2012-05-031-2/+2
| | | | | | | | Enable uClibc 0.9.33.1 for the SH architecture. Builds and works fine with the qemu sample config. Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* toolchain/uClibc: enable UCLIBC_SUPPORT_AI_ADDRCONFIGGustavo Zacarias2012-05-034-4/+4
| | | | | | | | | | | Enable AI_ADDRCONFIG support in uClibc otherwise we don't get the ifaddrs.h header installed and thus lack getifaddrs support. Quite useful for samba for example so we can use interfaces=eth0 statements in the configuration file rather than klunkier interfaces=192.168.1.1/255.255.255.0 ones. Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: 0.9.33.1: fix version (soname) numberPeter Korsgaard2012-04-231-0/+23
| | | | | | For some reason, the version number in the 0.9.33.1 tarball is wrong. Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* toolchain/uClibc: bump 0.9.33.x series to version 0.9.33.1Gustavo Zacarias2012-04-146-210/+29
| | | | | Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* toolchain/uClibc: fix default configs with respect to bug #5018Gustavo Zacarias2012-04-144-8/+8
| | | | | | | | | Switch from the strict UCLIBC_HAS_CTYPE_ENFORCED=y to the less restrictive UCLIBC_HAS_CTYPE_CHECKED=y since it breaks dialog under certain circumstances (bug #5018). Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: add dup3() for 0.9.33Peter Korsgaard2012-04-051-0/+54
| | | | | | | | Needed by E.G. systemd. Patch from uClibc list: http://lists.uclibc.org/pipermail/uclibc/2011-September/045702.html Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: add MSG_WAITFORONE / MSG_CMSG_CLOEXEC for 0.9.33Peter Korsgaard2012-04-051-0/+28
| | | | | | | | Needed by E.G. systemd. Patch from yocto: http://git.yoctoproject.org/cgit.cgi/poky/plain/meta/recipes-core/uclibc/uclibc-0.9.33/define-MSG_CMSG_CLOEXEC.patch Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: enable utmpx support in defconfigsPeter Korsgaard2012-03-203-3/+3
| | | | | | | It adds very little size overhead as the functions are just wrappers around utmp, and E.G. systemd needs it. Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: default to 0.9.33Peter Korsgaard2012-03-201-1/+1
| | | | | | | This is the current stable version, and E.G. systemd doesn't build with earlier versions. Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* DOWNLOAD: change $1=DIRECTORY_URL, $2=FILE_NAME to $1=FULL_FILE_URL, ↵Alvaro G. M2012-03-181-1/+1
| | | | | | | | | | | | | | | | | | | | | $2=FILE_NAME This modifies the definition of DOWNLOAD to receive two arguments: the first one is the full URL of the file to download, whereas the second (and optional) is the name the file will have once downloaded. Same thing with the SOURCE_CHECK_WGET and SCP functions. All calls to these functions have been changed to the shortest form of the new API, except for toolchains acquisition. Since there is quite a number of different toolchains this call to DOWNLOAD is better set to the generic one. Signed-off-by: Alvaro G. M <alvaro.gamez@hazent.com> Acked-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Tested-by: Stephan Hoffmann <sho@relinux.de> Downloading Microblaze LE toolchain works on a clean install Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: rename 0.9.33 syscall_ncs patchPeter Korsgaard2012-02-271-0/+0
| | | | | | No need for double dashes - Purely cosmetical. Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: add upstream 0.9.33 fixesPeter Korsgaard2012-02-162-0/+209
| | | | | | Fixes build on E.G. powerpc. Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: tweak 0.9.33 / snapshot configsPeter Korsgaard2012-02-022-2/+14
| | | | | | | With default values so it doesn't stop build and ask user. Also disable 2.4 modules support by default like upstream does. Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: add 0.9.33Peter Korsgaard2012-02-022-0/+278
| | | | Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* toolchain: add powerpc SPE ABI supportGustavo Zacarias2012-01-071-1/+7
| | | | | | | | | | | | | | | | | Add the ability for buildroot to build an SPE ABI enabled toolchain. This is mandatory for e500v1/v2 cores since they don't support classic FPU mode as the e500mc does. Useful for Freescale's PowerQUICC III and single/dual-core QorIQ line of processors. The new TARGET_ABI variable is used rather than TARGET_CFLAGS for uclibc's UCLIBC_EXTRA_CFLAGS to avoid breakish CFLAGS leaking in, a good example being -mthumb for ARM. Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: bump 0.9.32.x version to 0.9.32.1Gustavo Zacarias2012-01-029-96/+1
| | | | | Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uclibc: update internal toolchain buildGustavo Zacarias2011-12-071-0/+6
| | | | | | | | | Update the uClibc build procedure to accomodate for the new build system, otherwise it breaks with snapshot versions. As pointed by linuxjacques on IRC. Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: add unshare() syscall supportGustavo Zacarias2011-12-072-0/+156
| | | | | | | | Add unshare() syscall support for uClibc 0.9.31 and 0.9.32 series. This is required by newer versions of iproute2. Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: remove deprecated 0.9.30 seriesGustavo Zacarias2011-12-0711-615/+0
| | | | | Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: remove trailer from linuxthreads-errno patches confusing modern patchPeter Korsgaard2011-11-242-4/+0
| | | | | | | | Modern versions of patch (2.6.1.81 / 85 tested) gets confused by the empty git trailer referencing uClibc_errno.h (from when patch was forward ported from 0.9.31), so drop it. Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: fix sparc build breakageGustavo Zacarias2011-11-172-0/+22
| | | | | | | | | | | Closes #4021 Fix build breakage for sparc as reported in bug #4021 Patches from Konrad Eisele <konrad@gaisler.com> Submitted in the uclibc mailing list. Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uclibc: rename uclibc-update to uclibc-update-configThomas De Schampheleire2011-11-111-1/+1
| | | | | | | | | The original name uclibc-update is confusing as it only updates a configuration file. Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire@gmail.com> Acked-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc: update snapshot config to avoid stallingGustavo Zacarias2011-11-021-0/+4
| | | | | Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
* uClibc 0.9.31.1: add patch to export strverscmp for realGustavo Zacarias2011-11-021-0/+30
| | | | | Signed-off-by: Gustavo Zacarias <gustavo@zacarias.com.ar> Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>