Difference between revisions of "Cross Compiling FileZilla 3 for Windows under Ubuntu or Debian GNU/Linux"

From FileZilla Wiki
Jump to navigationJump to search
(jBettqCTmTXlgYbREyb)
Line 1: Line 1:
NateMarch 30, 2012For those running Lion and ilntasling Xcode, once Xcode is installed you will need to then go to preferences and downloads and click install for command line tools. If you don't then you will get the gcc no acceptable c compiler found error.
+
This documentation explains how to setup a build environment for [[FileZilla 3]] '''for Windows''' and how to compile it under [http://ubuntu.com Ubuntu] or [http://debian.org Debian] using [http://www.mingw.org/ MinGW]. It will take less time and simple than [[Compiling FileZilla 3 under Windows]].
 +
 
 +
== OS version ==
 +
* [http://ubuntu.com Ubuntu] 10.04 ('''recommended''')
 +
* [http://debian.org Debian] 5.0.3
 +
* [http://colinux.org coLinux] with [http://sourceforge.net/projects/colinux/files/Images%202.6.x%20Debian/Debian%205.0%20Lenny/Debian-5.0r2-lenny.7z/download Debian-5.0r2-lenny]
 +
 
 +
== Setting up the build environment ==
 +
 
 +
=== Ubuntu ===
 +
 
 +
Required packages
 +
sudo apt-get install -y mingw32 make g++ libtool bzip2 automake gettext wx-common
 +
 
 +
=== Debian ===
 +
 
 +
Do works as root
 +
su -
 +
 
 +
Required packages
 +
apt-get install -y mingw32 make g++ libtool bzip2 automake gettext wx-common
 +
 
 +
== Patch mingw32-runtime (only Debian) ==
 +
 
 +
If you are using Ubuntu, go to the next [[#Make libraries]] section. In Ubuntu, the patch is applied.
 +
 
 +
Because the version of mingw32-runtime in Debian 5 is [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=452977 broken] - Thanks [[CodeSquid]], patch mingw32-runtime package.
 +
 
 +
=== Get source package ===
 +
cd /tmp
 +
apt-get install dpkg-dev debhelper
 +
apt-get source mingw32-runtime
 +
cd mingw32-runtime-3.13/
 +
debian/rules unpack-stamp
 +
 
 +
=== Patch snprintf bug ===
 +
pushd build_dir/src/mingw-runtime-3.13-20070825-1/mingwex/gdtoa/
 +
diff -u mingw_snprintf.c.org mingw_snprintf.c
 +
--- mingw_snprintf.c.org        2009-09-21 02:41:31.000000000 +0000
 +
+++ mingw_snprintf.c    2009-09-21 02:41:54.000000000 +0000
 +
@@ -465,7 +465,7 @@
 +
                                    len = LEN_LL;
 +
                                  }
 +
                                else
 +
-                                len = LEN_LL;
 +
+                                len = LEN_L;
 +
                                goto fmtloop;
 +
                        case 'L':
 +
                                flag_ld++;
 +
@@ -617,6 +617,7 @@
 +
                                        break;
 +
                                  case LEN_S:
 +
                                        *(short*)ip = c;
 +
+                                      break;
 +
                                  case LEN_LL:
 +
                                        *(long long*) ip = c;
 +
                                        break;
 +
popd
 +
 
 +
=== Build & Install ===
 +
debian/rules build
 +
debian/rules install
 +
 
 +
=== Copy new library ===
 +
mv $/usr/i586-mingw32msvc/lib/libmingwex.a $/usr/i586-mingw32msvc/lib/libmingwex.a.old
 +
cp debian/mingw32-runtime/usr/i586-mingw32msvc/lib/libmingwex.a $/usr/i586-mingw32msvc/lib/
 +
 
 +
== Make libraries ==
 +
Do works as normal user in Debian.
 +
exit
 +
 
 +
=== Make working & install directory ===
 +
Check available space of storage.
 +
mkdir ~/mingw32
 +
mkdir /tmp/fz3
 +
cd /tmp/fz3
 +
 
 +
=== Setting up environment variables ===
 +
export CFGPRE=~/mingw32
 +
export CFGOPT="--prefix=$CFGPRE --host=i586-mingw32msvc --disable-shared --enable-static"
 +
 
 +
=== iconv ===
 +
wget ftp://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz
 +
tar zxvf libiconv-1.14.tar.gz
 +
cd libiconv-1.14
 +
./configure $CFGOPT
 +
make install clean
 +
cd ..
 +
 
 +
=== libidn ===
 +
wget ftp://alpha.gnu.org/gnu/libidn/libidn2-0.8.tar.gz
 +
tar zxvf libidn2-0.8.tar.gz
 +
cd libidn2-0.8
 +
./configure $CFGOPT
 +
make install clean
 +
cd ..
 +
 
 +
=== libgpg-error ===
 +
wget ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.10.tar.bz2
 +
tar jxvf libgpg-error-1.10.tar.bz2
 +
cd libgpg-error-1.10
 +
./configure $CFGOPT --disable-nls
 +
make install clean
 +
cd ..
 +
 
 +
=== libgcrypt ===
 +
wget ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.5.0.tar.bz2
 +
tar jxvf libgcrypt-1.5.0.tar.bz2
 +
cd libgcrypt-1.5.0
 +
./configure $CFGOPT --disable-nls --disable-asm --with-gpg-error-prefix=$CFGPRE
 +
make install clean
 +
cd ..
 +
 
 +
=== GnuTLS ===
 +
wget ftp://ftp.gnu.org/pub/gnu/gnutls/gnutls-3.0.19.tar.xz
 +
tar Jxvf gnutls-3.0.19.tar.xz
 +
cd gnutls-3.0.19
 +
./configure $CFGOPT --disable-nls --disable-cxx --disable-guile --with-libgcrypt-prefix=$CFGPRE
 +
make install clean
 +
cd ..
 +
 
 +
=== wxWidgets ===
 +
wget http://downloads.sourceforge.net/wxwindows/wxWidgets-2.8.12.tar.bz2
 +
tar jxvf wxWidgets-2.8.12.tar.bz2
 +
cd wxWidgets-2.8.12
 +
mkdir compile
 +
cd compile
 +
../configure $CFGOPT --enable-unicode
 +
make install clean
 +
cd ../..
 +
 
 +
== Compiling FileZilla 3 ==
 +
wget http://downloads.sourceforge.net/filezilla/FileZilla_3.5.3_src.tar.bz2
 +
tar jxvf FileZilla_3.5.3_src.tar.bz2
 +
 +
cd filezilla-3.5.3
 +
./autogen.sh
 +
 
 +
mkdir compile
 +
cd compile
 +
 
 +
autogen.sh of FileZilla 3 use old libgnutls-config. GnuTLS does not use libgnutls-config anymore.
 +
 
 +
Dowload http://filezilla-project.org/codesquid/libgnutls-config to $CFGPRE/bin. Edit prefix value.
 +
 
 +
wget -O $CFGPRE/bin/libgnutls-config http://filezilla-project.org/codesquid/libgnutls-config
 +
 +
echo $CFGPRE
 +
/home/fz/mingw32 # remember the path
 +
 +
vi $CFGPRE/bin/libgnutls-config
 +
prefix=/home/fz/mingw32 # edit this line.
 +
 +
chmod +x $CFGPRE/bin/libgnutls-config
 +
 
 +
Configure and builld.
 +
 
 +
CFLAGS="-I$CFGPRE/include" CXXFLAGS="-I$CFGPRE/include" LDFLAGS="-L$CFGPRE/lib" ../configure $CFGOPT --with-wx-prefix=$CFGPRE --with-libgnutls-prefix=$CFGPRE
 +
 +
make
 +
strip src/interface/filezilla.exe

Revision as of 09:06, 4 March 2013

This documentation explains how to setup a build environment for FileZilla 3 for Windows and how to compile it under Ubuntu or Debian using MinGW. It will take less time and simple than Compiling FileZilla 3 under Windows.

OS version

Setting up the build environment

Ubuntu

Required packages

sudo apt-get install -y mingw32 make g++ libtool bzip2 automake gettext wx-common

Debian

Do works as root

su -

Required packages

apt-get install -y mingw32 make g++ libtool bzip2 automake gettext wx-common

Patch mingw32-runtime (only Debian)

If you are using Ubuntu, go to the next #Make libraries section. In Ubuntu, the patch is applied.

Because the version of mingw32-runtime in Debian 5 is broken - Thanks CodeSquid, patch mingw32-runtime package.

Get source package

cd /tmp
apt-get install dpkg-dev debhelper
apt-get source mingw32-runtime
cd mingw32-runtime-3.13/
debian/rules unpack-stamp

Patch snprintf bug

pushd build_dir/src/mingw-runtime-3.13-20070825-1/mingwex/gdtoa/
diff -u mingw_snprintf.c.org mingw_snprintf.c
--- mingw_snprintf.c.org        2009-09-21 02:41:31.000000000 +0000
+++ mingw_snprintf.c    2009-09-21 02:41:54.000000000 +0000
@@ -465,7 +465,7 @@
                                    len = LEN_LL;
                                  }
                                else
-                                 len = LEN_LL;
+                                 len = LEN_L;
                                goto fmtloop;
                        case 'L':
                                flag_ld++;
@@ -617,6 +617,7 @@
                                        break;
                                  case LEN_S:
                                        *(short*)ip = c;
+                                       break;
                                  case LEN_LL:
                                        *(long long*) ip = c;
                                        break;
popd

Build & Install

debian/rules build
debian/rules install

Copy new library

mv $/usr/i586-mingw32msvc/lib/libmingwex.a $/usr/i586-mingw32msvc/lib/libmingwex.a.old
cp debian/mingw32-runtime/usr/i586-mingw32msvc/lib/libmingwex.a $/usr/i586-mingw32msvc/lib/

Make libraries

Do works as normal user in Debian.

exit

Make working & install directory

Check available space of storage.

mkdir ~/mingw32
mkdir /tmp/fz3
cd /tmp/fz3

Setting up environment variables

export CFGPRE=~/mingw32
export CFGOPT="--prefix=$CFGPRE --host=i586-mingw32msvc --disable-shared --enable-static"

iconv

wget ftp://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz
tar zxvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure $CFGOPT
make install clean
cd ..

libidn

wget ftp://alpha.gnu.org/gnu/libidn/libidn2-0.8.tar.gz
tar zxvf libidn2-0.8.tar.gz
cd libidn2-0.8
./configure $CFGOPT
make install clean
cd ..

libgpg-error

wget ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.10.tar.bz2
tar jxvf libgpg-error-1.10.tar.bz2
cd libgpg-error-1.10
./configure $CFGOPT --disable-nls
make install clean
cd ..

libgcrypt

wget ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.5.0.tar.bz2
tar jxvf libgcrypt-1.5.0.tar.bz2
cd libgcrypt-1.5.0
./configure $CFGOPT --disable-nls --disable-asm --with-gpg-error-prefix=$CFGPRE
make install clean
cd ..

GnuTLS

wget ftp://ftp.gnu.org/pub/gnu/gnutls/gnutls-3.0.19.tar.xz
tar Jxvf gnutls-3.0.19.tar.xz
cd gnutls-3.0.19
./configure $CFGOPT --disable-nls --disable-cxx --disable-guile --with-libgcrypt-prefix=$CFGPRE
make install clean
cd ..

wxWidgets

wget http://downloads.sourceforge.net/wxwindows/wxWidgets-2.8.12.tar.bz2
tar jxvf wxWidgets-2.8.12.tar.bz2
cd wxWidgets-2.8.12
mkdir compile
cd compile
../configure $CFGOPT --enable-unicode
make install clean
cd ../..

Compiling FileZilla 3

wget http://downloads.sourceforge.net/filezilla/FileZilla_3.5.3_src.tar.bz2
tar jxvf FileZilla_3.5.3_src.tar.bz2

cd filezilla-3.5.3
./autogen.sh
mkdir compile
cd compile

autogen.sh of FileZilla 3 use old libgnutls-config. GnuTLS does not use libgnutls-config anymore.

Dowload http://filezilla-project.org/codesquid/libgnutls-config to $CFGPRE/bin. Edit prefix value.

wget -O $CFGPRE/bin/libgnutls-config http://filezilla-project.org/codesquid/libgnutls-config

echo $CFGPRE
/home/fz/mingw32 # remember the path

vi $CFGPRE/bin/libgnutls-config
prefix=/home/fz/mingw32 # edit this line.

chmod +x $CFGPRE/bin/libgnutls-config

Configure and builld.

CFLAGS="-I$CFGPRE/include" CXXFLAGS="-I$CFGPRE/include" LDFLAGS="-L$CFGPRE/lib" ../configure $CFGOPT --with-wx-prefix=$CFGPRE --with-libgnutls-prefix=$CFGPRE

make
strip src/interface/filezilla.exe