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

From FileZilla Wiki
Jump to navigationJump to search
(awDwDhjVPDc)
m (Reverted edits by 2600:387:2:803:0:0:0:72 (talk) to last revision by CodeSquid)
Tag: Rollback
 
(143 intermediate revisions by 14 users not shown)
Line 1: Line 1:
I dunno. The leap from 16-bit to 32-bit was Something That Needed To Be Done, as there were too many restrictions in a 16 or 20 bit adrdses space. Plus Microsoft used Win95 as the springboard into 32 bit, so that really smoothed things out I think  it gave the hardware vendors a bit of incentive to put out 32-bit drivers. AND I think MS did a better job of making the backwards compatibility work (although it wasn't until Win98SE that it was worth bragging about) than they've done with 64-bit. Although some of that fault may be Intel's (I'm not real clear on the hardware restrictions for 64 bit) or maybe not.I don't see (yet) the same driving force behind the upgrade to 64 bit. It still seems a bit of a luxury, IMHO, and not giving the same magnitude of benefit as the move to 32 bit didThing is, 16 bit ran out of steam, but 32 bit hasn't yetSure there are some edge cases, and the ever present server stuff, where 64 bit is a big bonus, but for general office use, I'm still not convinced it really offers that much MORE than can be had with 32-bitAt least not until MS pushes the Windows 9 minimum RAM requirements to over 4 gigs
+
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 ==
 +
 
 +
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 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
 +
 
 +
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
 +
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.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/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.

Latest revision as of 08:45, 12 October 2023

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 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
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/NSIS/makensis.exe" ] && echo "Success!"

Compile wxWidgets[edit]

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[edit]

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[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/*.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.