Difference between revisions of "Cross Compiling FileZilla 3 for Windows under Ubuntu or Debian GNU/Linux"
From FileZilla Wiki
Jump to navigationJump to searchLine 13: | Line 13: | ||
As root, execute: | As root, execute: | ||
− | dpkg --add-architecture i386 | + | dpkg --add-architecture i386 |
− | apt | + | apt update |
− | apt | + | apt install automake autoconf libtool make gettext lzip |
− | + | apt install mingw-w64 pkg-config wx-common wine wine32 subversion git | |
− | |||
− | |||
Back as normal user, execute: | Back as normal user, execute: | ||
− | export PATH="$HOME/prefix | + | mkdir ~/prefix |
− | export | + | mkdir ~/src |
− | + | export PATH="$HOME/prefix/bin:$PATH" | |
− | export PKG_CONFIG_PATH="$HOME/prefix | + | export LD_LIBRARY_PATH="-L$HOME/prefix/lib:$LD_LIBRARY_PATH" |
+ | export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig:$PKG_CONFIG_PATH" | ||
+ | <!-- | ||
<p style="font-size:150%;color:#ff0000">'''Beware:''' You need to patch your MinGW runtime!</p> | <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. | Note: This does not affect mingw-w64 >= v4.0.6, mingw-w64 v4.0.6 is available in Ubuntu 16.10. | ||
Line 35: | Line 35: | ||
Without these patches, FileZilla will not work properly and will fail in obscure ways. | Without these patches, FileZilla will not work properly and will fail in obscure ways. | ||
+ | --> | ||
== GMP == | == GMP == | ||
Line 40: | Line 41: | ||
cd ~/src | cd ~/src | ||
wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.lz | wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.lz | ||
− | tar | + | tar xf gmp-6.1.2.tar.lz |
cd gmp-6.1.2 | cd gmp-6.1.2 | ||
− | ./configure --host= | + | ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --disable-static --enable-fat |
make | make | ||
make install | make install | ||
Line 50: | Line 51: | ||
cd ~/src | cd ~/src | ||
wget https://ftp.gnu.org/gnu/nettle/nettle-3.4.tar.gz | wget https://ftp.gnu.org/gnu/nettle/nettle-3.4.tar.gz | ||
− | tar | + | tar xf nettle-3.4.tar.gz |
cd nettle-3.4 | cd nettle-3.4 | ||
− | ./configure --host= | + | ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix' --enable-shared --disable-static --enable-fat LDFLAGS="-L$HOME/prefix/lib" CPPFLAGS="-I$HOME/prefix/include" |
make | make | ||
make install | make install | ||
Line 59: | Line 60: | ||
cd ~/src | cd ~/src | ||
− | wget | + | wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.5/gnutls-3.5.19.tar.xz |
− | tar xvf gnutls-3.5. | + | tar xvf gnutls-3.5.19.tar.xz |
− | cd gnutls-3.5. | + | cd gnutls-3.5.19 |
− | ./configure --host= | + | ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --with-included-libtasn1 --without-p11-kit --disable-doc --enable-local-libopts --with-included-unistring GMP_LIBS="-L$HOME/prefix/lib -lgmp" GMP_CFLAGS="-I$HOME/prefix/include" |
make | make | ||
make install | make install | ||
− | |||
− | |||
− | |||
== Compile SQLite == | == Compile SQLite == | ||
cd ~/src | cd ~/src | ||
− | wget | + | wget https://sqlite.org/2018/sqlite-autoconf-3250300.tar.gz |
− | tar xvzf sqlite-autoconf- | + | tar xvzf sqlite-autoconf-3250300.tar.gz |
− | cd sqlite-autoconf- | + | cd sqlite-autoconf-3250300 |
− | ./configure --host= | + | ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --disable-dynamic-extensions |
make | make | ||
make install | make install | ||
Line 82: | Line 80: | ||
cd ~/src | cd ~/src | ||
− | wget | + | wget https://prdownloads.sourceforge.net/nsis/nsis-3.03-setup.exe |
wine nsis-3.0b3-setup.exe /S | wine nsis-3.0b3-setup.exe /S | ||
Line 91: | Line 89: | ||
cd ~/src | cd ~/src | ||
− | + | git clone --branch WX_3_0_BRANCH --single-branch https://github.com/wxWidgets/wxWidgets.git wx3 | |
− | + | cd wx3 | |
− | cd | + | ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static |
− | ./configure --host= | ||
make | make | ||
make install | make install | ||
Line 101: | Line 98: | ||
cd ~/src | cd ~/src | ||
− | + | svn co https://svn.filezilla-project.org/svn/libfilezilla/tags/0.15.1 lfz | |
− | + | cd lfz | |
− | + | autoreconf -i | |
− | ./configure --host= | + | ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static |
make | make | ||
make install | make install | ||
+ | cp $HOME/prefix/lib/wx*.dll $HOME/prefix/bin | ||
== Compile FileZilla == | == Compile FileZilla == | ||
cd ~/src | cd ~/src | ||
− | + | svn co https://svn.filezilla-project.org/svn/libfilezilla/tags/3.39.0 fz | |
− | + | cd fz | |
− | cd | + | ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --with-pugixml=builtin |
− | ./configure --host= | ||
make | make | ||
# strip debug symbols | # strip debug symbols | ||
− | + | x86_64-w64-mingw32-strip src/interface/.libs/filezilla.exe | |
− | + | x86_64-w64-mingw32-strip src/putty/.libs/fzsftp.exe | |
− | + | x86_64-w64-mingw32-strip src/putty/.libs/fzputtygen.exe | |
− | + | x86_64-w64-mingw32-strip src/fzshellext/64/.libs/libfzshellext-0.dll | |
− | + | x86_64-w64-mingw32-strip src/fzshellext/32/.libs/libfzshellext-0.dll | |
+ | x86_64-w64-mingw32-strip data/dlls/*.dll | ||
cd data | cd data | ||
wine "$HOME/.wine/drive_c/Program Files/NSIS/makensis.exe" install.nsi | wine "$HOME/.wine/drive_c/Program Files/NSIS/makensis.exe" install.nsi | ||
Voila, there's now FileZilla_3_setup.exe in the current directory. | Voila, there's now FileZilla_3_setup.exe in the current directory. |
Revision as of 13:35, 6 December 2018
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:
- Debian 9 (Stretch) or later (recommended)
- Ubuntu 18.04 LTS or later
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 wine32 subversion git
Back as normal user, execute:
mkdir ~/prefix mkdir ~/src export PATH="$HOME/prefix/bin:$PATH" export LD_LIBRARY_PATH="-L$HOME/prefix/lib:$LD_LIBRARY_PATH" export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig:$PKG_CONFIG_PATH"
GMP
cd ~/src wget https://gmplib.org/download/gmp/gmp-6.1.2.tar.lz tar xf gmp-6.1.2.tar.lz cd gmp-6.1.2 ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --disable-static --enable-fat make make install
Nettle
cd ~/src wget https://ftp.gnu.org/gnu/nettle/nettle-3.4.tar.gz tar xf nettle-3.4.tar.gz cd nettle-3.4 ./configure --host=x86_64-w64-mingw32 --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.5/gnutls-3.5.19.tar.xz tar xvf gnutls-3.5.19.tar.xz cd gnutls-3.5.19 ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --with-included-libtasn1 --without-p11-kit --disable-doc --enable-local-libopts --with-included-unistring GMP_LIBS="-L$HOME/prefix/lib -lgmp" GMP_CFLAGS="-I$HOME/prefix/include" make make install
Compile SQLite
cd ~/src wget https://sqlite.org/2018/sqlite-autoconf-3250300.tar.gz tar xvzf sqlite-autoconf-3250300.tar.gz cd sqlite-autoconf-3250300 ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --disable-dynamic-extensions make make install
NSIS
cd ~/src wget https://prdownloads.sourceforge.net/nsis/nsis-3.03-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 git clone --branch WX_3_0_BRANCH --single-branch https://github.com/wxWidgets/wxWidgets.git wx3 cd wx3 ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static make make install
Compile libfilezilla
cd ~/src svn co https://svn.filezilla-project.org/svn/libfilezilla/tags/0.15.1 lfz cd lfz autoreconf -i ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static make make install cp $HOME/prefix/lib/wx*.dll $HOME/prefix/bin
Compile FileZilla
cd ~/src svn co https://svn.filezilla-project.org/svn/libfilezilla/tags/3.39.0 fz cd fz ./configure --host=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --with-pugixml=builtin make # strip debug symbols x86_64-w64-mingw32-strip src/interface/.libs/filezilla.exe x86_64-w64-mingw32-strip src/putty/.libs/fzsftp.exe x86_64-w64-mingw32-strip src/putty/.libs/fzputtygen.exe x86_64-w64-mingw32-strip src/fzshellext/64/.libs/libfzshellext-0.dll x86_64-w64-mingw32-strip src/fzshellext/32/.libs/libfzshellext-0.dll x86_64-w64-mingw32-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.