Difference between revisions of "Cross Compiling FileZilla 3 for Windows under Ubuntu or Debian GNU/Linux"
From FileZilla Wiki
Jump to navigationJump to searchm |
(→Compile FileZilla: Corrected directory name for DLLs) |
||
(252 intermediate revisions by 57 users not shown) | |||
Line 1: | Line 1: | ||
− | This documentation explains how to setup a build environment for [[FileZilla 3]] '''for Windows''' and how to compile it under [ | + | 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 '''12''' (Bookworkm)] or later ('''recommended''') | |
== Setting up the build environment == | == Setting up the build environment == | ||
− | |||
− | |||
− | |||
− | + | As root, execute: | |
− | + | dpkg --add-architecture i386 | |
+ | apt update | ||
+ | apt install automake autoconf libtool make gettext lzip xz-utils | ||
+ | apt install mingw-w64 pkg-config wx-common wine wine64 wine32 wine-binfmt subversion git | ||
+ | |||
+ | Back as normal user, execute: | ||
+ | mkdir ~/prefix | ||
+ | mkdir ~/src | ||
+ | export PATH="$HOME/prefix/bin:$PATH" | ||
+ | export LDFLAGS="-L$HOME/prefix/lib" | ||
+ | export LD_LIBRARY_PATH="$HOME/prefix/lib:$LD_LIBRARY_PATH" | ||
+ | export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig:$PKG_CONFIG_PATH" | ||
+ | export CPPFLAGS="-I$HOME/prefix/include" | ||
+ | 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.3.0.tar.lz | ||
+ | tar xf gmp-6.3.0.tar.lz | ||
+ | cd gmp-6.3.0 | ||
+ | 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.9.1.tar.gz | ||
+ | tar xf nettle-3.9.1.tar.gz | ||
+ | cd nettle-3.9.1 | ||
+ | ./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static --enable-fat | ||
+ | make | ||
+ | make install | ||
+ | |||
+ | == GnuTLS == | ||
+ | |||
+ | cd ~/src | ||
+ | wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.8/gnutls-3.8.1.tar.xz | ||
+ | tar xvf gnutls-3.8.1.tar.xz | ||
+ | cd gnutls-3.8.1 | ||
+ | ./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static --without-p11-kit --with-included-libtasn1 --with-included-unistring --disable-srp-authentication --disable-dtls-srtp-support --disable-heartbeat-support --disable-psk-authentication --disable-anon-authentication --disable-openssl-compatibility --without-tpm --without-brotli --disable-cxx --disable-doc --enable-threads=windows --disable-tools | ||
+ | make | ||
+ | make install | ||
+ | |||
+ | == Compile SQLite == | ||
− | + | cd ~/src | |
− | + | wget https://sqlite.org/2018/sqlite-autoconf-32600-00.tar.gz | |
− | cd | + | 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 | + | wget https://prdownloads.sourceforge.net/nsis/nsis-3.09-setup.exe |
− | + | wine nsis-3.09-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 (x86)/NSIS/makensis.exe" ] && echo "Success!" | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | === | + | == Compile wxWidgets == |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | cd ~/src | |
− | + | git clone --recurse-submodules --branch 3.2 --single-branch https://github.com/wxWidgets/wxWidgets.git wx3 | |
− | + | cd wx3 | |
− | cd | + | ./configure --host=$TARGET_HOST --prefix="$HOME/prefix" -enable-shared --enable-unicode |
− | ./configure -- | + | make |
− | make install | + | make install |
− | + | cp $HOME/prefix/lib/wx*.dll $HOME/prefix/bin | |
− | === | + | == Compile libfilezilla == |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | cd ~/src | |
− | + | svn co https://svn.filezilla-project.org/svn/libfilezilla/trunk lfz | |
− | + | cd lfz | |
− | + | autoreconf -i | |
− | + | ./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static | |
− | + | make | |
− | + | make install | |
− | make | ||
− | |||
− | == | + | == Compile Boost Regex == |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | cd ~/src | |
− | cd | + | wget https://boostorg.jfrog.io/artifactory/main/release/1.85.0/source/boost_1_85_0.tar.bz2 |
+ | tar xf boost_1_85_0.tar.bz2 | ||
+ | cd boost_1_85_0 | ||
+ | echo "using gcc : : x86_64-w64-mingw32-g++ ;" > user-config.jam | ||
+ | ./bootstrap.sh | ||
+ | ./b2 --user-config=./user-config.jam --build-type=minimal --with-regex --prefix=$HOME/prefix 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 | make | ||
− | strip src/interface/filezilla.exe | + | # strip debug symbols |
− | strip src/putty/fzsftp.exe | + | $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_gui/*.dll | ||
+ | cd data | ||
+ | wine "$HOME/.wine/drive_c/Program Files (x86)/NSIS/makensis.exe" install.nsi | ||
+ | |||
+ | Voila, there's now FileZilla_3_setup.exe in the current directory. |
Latest revision as of 18:33, 3 September 2024
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.
OS version[edit]
Any recent Linux should do the trick. For the sake of simplicity, this guide focuses on Debian(-based) distributions.
We strongly recommend to use Debian 12 (Bookworkm) or later (recommended)
Setting up the build environment[edit]
As root, execute:
dpkg --add-architecture i386 apt update apt install automake autoconf libtool make gettext lzip xz-utils apt install mingw-w64 pkg-config wx-common wine wine64 wine32 wine-binfmt subversion git
Back as normal user, execute:
mkdir ~/prefix mkdir ~/src export PATH="$HOME/prefix/bin:$PATH" export LDFLAGS="-L$HOME/prefix/lib" export LD_LIBRARY_PATH="$HOME/prefix/lib:$LD_LIBRARY_PATH" export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig:$PKG_CONFIG_PATH" export CPPFLAGS="-I$HOME/prefix/include" 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'`"
GMP[edit]
cd ~/src wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.lz tar xf gmp-6.3.0.tar.lz cd gmp-6.3.0 CC_FOR_BUILD=gcc ./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --disable-static --enable-shared --enable-fat make make install
Nettle[edit]
cd ~/src wget https://ftp.gnu.org/gnu/nettle/nettle-3.9.1.tar.gz tar xf nettle-3.9.1.tar.gz cd nettle-3.9.1 ./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static --enable-fat make make install
GnuTLS[edit]
cd ~/src wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.8/gnutls-3.8.1.tar.xz tar xvf gnutls-3.8.1.tar.xz cd gnutls-3.8.1 ./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static --without-p11-kit --with-included-libtasn1 --with-included-unistring --disable-srp-authentication --disable-dtls-srtp-support --disable-heartbeat-support --disable-psk-authentication --disable-anon-authentication --disable-openssl-compatibility --without-tpm --without-brotli --disable-cxx --disable-doc --enable-threads=windows --disable-tools make make install
Compile SQLite[edit]
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[edit]
cd ~/src wget https://prdownloads.sourceforge.net/nsis/nsis-3.09-setup.exe wine nsis-3.09-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 (x86)/NSIS/makensis.exe" ] && echo "Success!"
Compile wxWidgets[edit]
cd ~/src git clone --recurse-submodules --branch 3.2 --single-branch https://github.com/wxWidgets/wxWidgets.git wx3 cd wx3 ./configure --host=$TARGET_HOST --prefix="$HOME/prefix" -enable-shared --enable-unicode make make install cp $HOME/prefix/lib/wx*.dll $HOME/prefix/bin
Compile libfilezilla[edit]
cd ~/src svn co https://svn.filezilla-project.org/svn/libfilezilla/trunk lfz cd lfz autoreconf -i ./configure --host=$TARGET_HOST --prefix="$HOME/prefix" --enable-shared --disable-static make make install
Compile Boost Regex[edit]
cd ~/src wget https://boostorg.jfrog.io/artifactory/main/release/1.85.0/source/boost_1_85_0.tar.bz2 tar xf boost_1_85_0.tar.bz2 cd boost_1_85_0 echo "using gcc : : x86_64-w64-mingw32-g++ ;" > user-config.jam ./bootstrap.sh ./b2 --user-config=./user-config.jam --build-type=minimal --with-regex --prefix=$HOME/prefix install
Compile FileZilla[edit]
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_gui/*.dll cd data wine "$HOME/.wine/drive_c/Program Files (x86)/NSIS/makensis.exe" install.nsi
Voila, there's now FileZilla_3_setup.exe in the current directory.