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

From FileZilla Wiki
Jump to navigationJump to search
Line 41: Line 41:
  
 
  cd ~/src
 
  cd ~/src
  wget https://ftp.gnu.org/gnu/nettle/nettle-3.1.tar.gz
+
  wget https://ftp.gnu.org/gnu/nettle/nettle-3.2.tar.gz
  tar xvf nettle-3.1.tar.gz
+
  tar xvf nettle-3.2.tar.gz
  cd nettle-3.1
+
  cd nettle-3.2
 
  ./configure --host=i686-w64-mingw32 --prefix="$HOME/prefix-win32" --disable-shared --enable-fat
 
  ./configure --host=i686-w64-mingw32 --prefix="$HOME/prefix-win32" --disable-shared --enable-fat
 
  make
 
  make

Revision as of 10:39, 29 March 2016

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-w64. It will take less time and is more simple than Compiling FileZilla 3 under Windows.

OS version

Any recent Linux should do the trick. For the sake of simplicity, this guide focuses on Debian(-based) distributions.

Known-good Debian(-based) distributions:

Setting up the build environment

As root, execute:

dpkg --add-architecture i386 # If using a 64bit distribution (64bit is recommended)
apt-get update
apt-get install bzip2 ca-certificates gcc gettext lzip m4 mingw-w64 pkg-config wx-common wine wine32

If you want to work with wxWidgets and FileZilla development sources, also execute this as root:

apt-get install autoconf libtool subversion

Back as normal user, execute:

export PATH="$HOME/prefix-win32/bin:$PATH"
export CPPFLAGS="-I$HOME/prefix-win32/include"
export LDFLAGS="-L$HOME/prefix-win32/lib"
export PKG_CONFIG_PATH="$HOME/prefix-win32/lib/pkgconfig"

GMP

cd ~/src
wget https://gmplib.org/download/gmp/gmp-6.1.0.tar.lz
tar xvf gmp-6.1.0.tar.lz
cd gmp-6.1.0
wget https://gmplib.org/repo/gmp/raw-rev/a090b0c741d6
patch -p1 -i a090b0c741d6
./configure --host=i686-w64-mingw32 --prefix="$HOME/prefix-win32" --disable-shared --enable-fat
make
make install

Nettle

cd ~/src
wget https://ftp.gnu.org/gnu/nettle/nettle-3.2.tar.gz
tar xvf nettle-3.2.tar.gz
cd nettle-3.2
./configure --host=i686-w64-mingw32 --prefix="$HOME/prefix-win32" --disable-shared --enable-fat
make
make install

GnuTLS

cd ~/src
wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.4/gnutls-3.4.10.tar.lz
tar xvf gnutls-3.4.10.tar.lz
cd gnutls-3.4.10
./configure --host=i686-w64-mingw32 --prefix="$HOME/prefix-win32" --disable-shared --with-included-libtasn1 --without-p11-kit --disable-doc --enable-local-libopts
make
make install

# The __declspec(dllimport) is needed for DLLs, but we're linking statically. It thus results in undefined references. Remove it.
sed -i 's/__declspec(dllimport)//' "$HOME/prefix-win32/include/gnutls/gnutls.h"

Compile SQLite

cd ~/src
wget http://sqlite.org/2016/sqlite-autoconf-3110100.tar.gz
tar xvzf sqlite-autoconf-3110100.tar.gz
cd sqlite-autoconf-3110100
./configure --host=i686-w64-mingw32 --prefix="$HOME/prefix-win32" --disable-shared --disable-dynamic-extensions
make
make install

NSIS

cd ~/src
wget http://prdownloads.sourceforge.net/nsis/nsis-3.0b3-setup.exe
wine nsis-3.0b3-setup.exe /S

The above may print a lot of errors and warnings. Ignore them, check for success this way:

[ -f "$HOME/.wine/drive_c/Program Files/NSIS/makensis.exe" ] && echo "Success!"

Compile wxWidgets

cd ~/src
wget http://sourceforge.net/projects/wxwindows/files/3.0.2/wxWidgets-3.0.2.tar.bz2
tar xvjf wxWidgets-3.0.2.tar.bz2
cd wxWidgets-3.0.2
./configure --host=i686-w64-mingw32 --prefix="$HOME/prefix-win32" --disable-shared
make
make install

Compile libfilezilla

cd ~/src
wget https://download.filezilla-project.org/libfilezilla/libfilezilla-0.4.0.1.tar.bz2
tar xf libfilezilla-0.4.0.1.tar.bz2
cd libfilezilla-0.4.0.1
./configure --host=i686-w64-mingw32 --prefix="$HOME/prefix-win32" --disable-shared
make
make install

Compile FileZilla

cd ~/src
wget http://download.filezilla-project.org/client/FileZilla_3.16.1_src.tar.bz2
tar xvjf FileZilla_3.16.1_src.tar.bz2
cd filezilla-3.16.1
./configure --host=i686-w64-mingw32 --with-pugixml=builtin
make
cd data
wine "$HOME/.wine/drive_c/Program Files/NSIS/makensis.exe" install.nsi

Voila, there's now FileZilla_3_setup.exe in the current directory.