How to build Box Backup for Windows (Native) on Linux using MinGW
By Chris Wilson, 2005-12-07

Install the MinGW cross-compiler for Windows:

- Debian and Ubuntu users can "apt-get install mingw32"
- Fedora and SuSE users can download RPM packages from 
  [http://mirzam.it.vu.nl/mingw/]

You will need to know the prefix used by the cross-compiler executables.
It will usually be something like "ix86-mingw32*-". All the binaries in the
cross-compiler package will start with this prefix. The documentation below
assumes that it is "i386-mingw32-". Adjust to taste.

You will also need to install Wine and the Linux kernel "binary formats"
(binfmt) support, so that you can run Windows executables on Linux,
otherwise the configure scripts will not work properly with a cross-compiler.
On Ubuntu, run:

	apt-get install wine binfmt-support
	/etc/init.d/binfmt-support start

Start by downloading Zlib from [http://www.zlib.net/], unpack and enter
source directory:

	export CC=i386-mingw32-gcc 
	export AR="i386-mingw32-ar rc" 
	export RANLIB="i386-mingw32-ranlib"
	./configure
	make
	make install prefix=/usr/local/i386-mingw32

Download OpenSSL 0.9.8b from 
[http://www.openssl.org/source/openssl-0.9.8b.tar.gz]

Unpack and configure:

	tar xzvf openssl-0.9.8b.tar.gz
	cd openssl-0.9.8b
	./Configure --prefix=/usr/local/i386-mingw32 mingw
	make makefile.one
	wget http://www.boxbackup.org/svn/box/chris/win32/support/openssl-0.9.8b-mingw-cross.patch
	patch -p1 < openssl-0.9.8b-mingw-cross.patch
	make -f makefile.one
	make -f makefile.one install

Download PCRE from 
[http://prdownloads.sourceforge.net/pcre/pcre-6.3.tar.bz2?download]

Unpack:

	tar xjvf pcre-6.3.tar.bz2
	cd pcre-6.3

Configure and make:

	export AR=i386-mingw32-ar
	./configure --host=i386-mingw32 --prefix=/usr/local/i386-mingw32/
	make winshared

If you get this error:

	./dftables.exe pcre_chartables.c
	/bin/bash: ./dftables.exe: cannot execute binary file
	make: *** [pcre_chartables.c] Error 126

then run:

	wine ./dftables.exe pcre_chartables.c
	make winshared

to complete the build. Finally:

	cp .libs/libpcre.a /usr/local/i386-pc-mingw32/lib
	cp .libs/libpcreposix.a /usr/local/i386-pc-mingw32/lib
	cp pcreposix.h /usr/local/i386-pc-mingw32/include

You will need to find a copy of mingwm10.dll that matches your cross-compiler.
Most MinGW distributions should come with it. On Debian and Ubuntu, for some
bizarre reason, you'll find it compressed as
/usr/share/doc/mingw32-runtime/mingwm10.dll.gz, in which case you'll
have to un-gzip it with "gzip -d". Copy it to a known location, e.g.
/usr/local/i386-mingw32/bin.

Download and extract Box Backup, and change into the base directory,
e.g. boxbackup-0.11rc2. Change the path to mingwm10.dll in parcels.txt to
match where you found or installed it.

Now configure Box with:

	./configure --host=i386-mingw32 \
		CXXFLAGS="-mthreads -I/usr/local/i386-mingw32/include" \
		LDFLAGS=" -mthreads -L/usr/local/i386-mingw32/lib" \
		LIBS="-lcrypto -lws2_32 -lgdi32"
	make

or, if that fails, try this:

	export CXX="i386-mingw32-g++"
	export AR=i386-mingw32-ar
	export RANLIB=i386-mingw32-ranlib
	export CFLAGS="-mthreads"
	export CXXFLAGS="-mthreads"
	export LDFLAGS="-mthreads"
	export LIBS="-lcrypto -lws2_32 -lgdi32"
	(if you don't have a "configure" file, run "./bootstrap")
	./configure --target=i386-mingw32
	make CXX="$CXX" AR="$AR" RANLIB="$RANLIB" WINDRES="i386-mingw32-windres"
