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 1: Line 1:
 
This documentation explains how to setup a build environment for [[FileZilla 3]] '''for Windows''' and how to compile it under [https://debian.org Debian] using [https://mingw-w64.org/ Mingw-w64]. It will take less time and is more simple than [[Compiling FileZilla 3 under Windows]].
 
This documentation explains how to setup a build environment for [[FileZilla 3]] '''for Windows''' and how to compile it under [https://debian.org Debian] using [https://mingw-w64.org/ 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.
 
 
We strongly recommend to use [http://debian.org Debian '''11''' (Bullseye)] or later ('''recommended''')
 
 
== Setting up the build environment ==
 
 
As root, execute:
 
dpkg --add-architecture i386
 
apt update
 
apt install automake autoconf libtool make gettext lzip
 
apt install mingw-w64 pkg-config wx-common wine wine64 wine32 wine-binfmt subversion git
 
  
 
Back as normal user, execute:
 
Back as normal user, execute:
Line 22: Line 8:
 
  export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
 
  export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
 
  export TARGET_HOST=x86_64-w64-mingw32
 
  export TARGET_HOST=x86_64-w64-mingw32
 
wine reg add HKCU\\Environment /f /v PATH /d "`x86_64-w64-mingw32-g++ -print-search-dirs | grep ^libraries | sed 's/^libraries: =//' | sed 's/:/;z:/g' | sed 's/^\\//z:\\\\\\\\/' | sed 's/\\//\\\\/g'`"
 
 
<!--
 
<p style="font-size:150%;color:#ff0000">'''Beware:''' You need to patch your MinGW runtime!</p>
 
Note: This does not affect mingw-w64 >= v4.0.6, mingw-w64 v4.0.6 is available in Ubuntu 16.10.
 
 
The version of the MinGW runtime ships with Debian based distributions has broken string conversion functions. You need to fetch the source of the mingw-64 packet and apply the following two patches:
 
https://sourceforge.net/p/mingw-w64/mingw-w64/ci/2474f3904a1fbce19d96383a9633e6c2eeb427ea/
 
https://sourceforge.net/p/mingw-w64/mingw-w64/ci/bca09678e3bfd67b2d445127280ee5a1d9d0453a/
 
 
Without these patches, FileZilla will not work properly and will fail in obscure ways.
 
-->
 
 
== GMP ==
 
 
cd ~/src
 
wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.lz
 
tar xf gmp-6.2.1.tar.lz
 
cd gmp-6.2.1
 
CC_FOR_BUILD=gcc ./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --disable-static --enable-shared --enable-fat
 
make
 
make install
 
 
== Nettle ==
 
 
cd ~/src
 
wget https://ftp.gnu.org/gnu/nettle/nettle-3.7.3.tar.gz
 
tar xf nettle-3.7.3.tar.gz
 
cd nettle-3.7.3
 
./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static --enable-fat LDFLAGS="-L$HOME/prefix/lib" CPPFLAGS="-I$HOME/prefix/include"
 
make
 
make install
 
 
== GnuTLS ==
 
 
cd ~/src
 
wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.7/gnutls-3.7.2.tar.xz
 
tar xvf gnutls-3.7.2.tar.xz
 
cd gnutls-3.7.2
 
./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static --without-p11-kit --with-included-libtasn1 --with-included-unistring --enable-local-libopts --disable-srp-authentication --disable-dtls-srtp-support --disable-heartbeat-support --disable-psk-authentication --disable-anon-authentication --disable-openssl-compatibility --without-tpm --disable-cxx
 
make
 
make install
 
 
== Compile SQLite ==
 
 
cd ~/src
 
wget https://sqlite.org/2018/sqlite-autoconf-32600-00.tar.gz
 
tar xvzf sqlite-autoconf-3260000.tar.gz
 
cd sqlite-autoconf-3260000
 
./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static --disable-dynamic-extensions
 
make
 
make install
 
 
== NSIS ==
 
 
cd ~/src
 
wget https://prdownloads.sourceforge.net/nsis/nsis-3.04-setup.exe
 
wine nsis-3.04-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
 
git clone --branch WX_3_0_BRANCH --single-branch https://github.com/wxWidgets/wxWidgets.git wx3
 
cd wx3
 
./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static
 
make
 
make install
 
cp $HOME/prefix/lib/wx*.dll $HOME/prefix/bin
 
 
== Compile libfilezilla ==
 
 
cd ~/src
 
svn co https://svn.filezilla-project.org/svn/libfilezilla/tags/0.33.0 lfz
 
cd lfz
 
autoreconf -i
 
./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static
 
make
 
make install
 
 
== Compile FileZilla ==
 
 
cd ~/src
 
svn co https://svn.filezilla-project.org/svn/FileZilla3/tags/3.56.0/ fz
 
cd fz
 
autoreconf -i
 
./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static --with-pugixml=builtin
 
make
 
# strip debug symbols
 
$TARGET_HOST-strip src/interface/.libs/filezilla.exe
 
$TARGET_HOST-strip src/putty/.libs/fzsftp.exe
 
$TARGET_HOST-strip src/putty/.libs/fzputtygen.exe
 
$TARGET_HOST-strip src/fzshellext/64/.libs/libfzshellext-0.dll
 
$TARGET_HOST-strip src/fzshellext/32/.libs/libfzshellext-0.dll
 
$TARGET_HOST-strip data/dlls/*.dll
 
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.
 

Revision as of 23:56, 11 August 2022

This documentation explains how to setup a build environment for FileZilla 3 for Windows and how to compile it under Debian using Mingw-w64. It will take less time and is more simple than Compiling FileZilla 3 under Windows.

Back as normal user, execute:

mkdir ~/prefix
mkdir ~/src
export PATH="$HOME/prefix/bin:$PATH"
export LD_LIBRARY_PATH="$HOME/prefix/lib:$LD_LIBRARY_PATH"
export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
export TARGET_HOST=x86_64-w64-mingw32