Editing Compiling FileZilla 3 under Windows

From FileZilla Wiki
Jump to navigationJump to search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
This documentation explains how to setup a build environment for [[FileZilla 3]] and how to compile it under Windows using [http://msys2.github.io/ msys2]. Msys2 is a cygwin environment. These instructions require you to run a 64bit Windows.
+
This documentation explains how to setup a build environment for [[FileZilla 3]] and how to compile it under Windows using [http://msys2.github.io/ msys2]. Msys2 is a cygwin environment.
  
 
It will take some time to get everything working, but you will be able to use the build environment for other programs too.
 
It will take some time to get everything working, but you will be able to use the build environment for other programs too.
 
For complete MSYS2 system and all needed dependencies installed, you will need 7GiB free space on your disk.
 
  
 
'''Note to wiki contributors: Do not change version numbers on your own. The build process is somewhat fragile and does break if you change things'''
 
'''Note to wiki contributors: Do not change version numbers on your own. The build process is somewhat fragile and does break if you change things'''
  
 
__TOC__
 
__TOC__
 +
  
 
=Installing the MSYS2 environment=
 
=Installing the MSYS2 environment=
  
Download the 64bit MSYS2 installer and install it in a convenient location: [https://repo.msys2.org/distrib/x86_64/msys2-x86_64-20220118.exe msys2-x86_64-20220118.exe]
+
[http://sourceforge.net/projects/msys2/files/Base/x86_64/msys2-x86_64-20150202.exe msys2-x86_64-20150202.exe]
 +
 
 +
Install this to '''c:\msys64''' or '''D:\msys64''' depending on how you installed msys2
  
 
=Installing the compiler toolchain=
 
=Installing the compiler toolchain=
Line 19: Line 20:
 
==  Tools and compiler ==
 
==  Tools and compiler ==
  
===First update===
+
start MSYS2 shell, execute the following command:
Start the MSYS2 MinGW 64-bit shell
+
 
 
  pacman -Syu
 
  pacman -Syu
close MSYS2 shell. Repeat until there are no more updates.
+
pacman -S base-devel msys2-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain
 +
pacman -S svn git curl wget
  
===Install tools and compiler toolchain===
+
=Downloading dependencies=
  
Start MSYS2 MinGW 64-bit shell, execute the following command to install the necessary packages:
+
==download GMP==
  
  pacman -S autoconf automake libtool make mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain git svn
+
  cd ~
 
+
curl -O https://gmplib.org/download/gmp/gmp-6.0.0a.tar.xz
Execute the following to work around some most-annoying bugs in the toolchain
 
  
# Fix missing platform prefix for windres
+
==Download Nettle==
[ -f /mingw64/bin/x86_64-w64-mingw32-windres.exe ] || ln -s /mingw64/bin/windres.exe /mingw64/bin/x86_64-w64-mingw32-windres.exe
 
[ -f /mingw32/bin/i686-w64-mingw32-windres.exe  ] || ln -s /mingw32/bin/windres.exe /mingw32/bin/i686-w64-mingw32-windres.exe
 
 
 
== Setting up the environment==
 
 
 
Execute the following commands:
 
mkdir ~/prefix
 
echo 'export PATH="$HOME/prefix/bin:$HOME/prefix/lib:/mingw64/bin:/mingw32/bin:$PATH"' >> ~/.profile
 
echo 'export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig"' >> ~/.profile
 
echo 'export PATH="$HOME/prefix/bin:$HOME/prefix/lib:/mingw64/bin:/mingw32/bin:$PATH"' >> ~/.bash_profile
 
echo 'export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig"' >> ~/.bash_profile
 
echo 'export LC_ALL=C' >> ~/.bash_profile
 
 
 
Restart the MSYS2 MINGW64 shell.
 
 
 
=Building dependencies=
 
 
 
==Building GMP==
 
  
 
  cd ~
 
  cd ~
  curl -O https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
+
  wget http://www.lysator.liu.se/~nisse/archive/nettle-2.7.1.tar.gz
tar xf gmp-6.2.1.tar.xz
 
cd gmp-6.2.1
 
./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --enable-fat
 
make && make install
 
  
==Building Nettle==
+
==Download GnuTLS==
  
 
  cd ~
 
  cd ~
  wget https://ftp.gnu.org/gnu/nettle/nettle-3.7.3.tar.gz
+
  wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.3/gnutls-3.3.13.tar.xz
tar xf nettle-3.7.3.tar.gz
 
cd nettle-3.7.3
 
./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --enable-fat
 
make && make install
 
  
==Building zlib==
+
==Download SQLite==
  
 
  cd ~
 
  cd ~
  wget https://zlib.net/fossils/zlib-1.2.13.tar.gz
+
  wget http://sqlite.org/2015/sqlite-autoconf-3080803.tar.gz
tar xf zlib-1.2.13.tar.gz
 
cd zlib-1.2.13
 
LDSHAREDLIBC='' ./configure --prefix="$HOME/prefix" -u=GNU
 
make && make install
 
  
==Building GnuTLS==
+
==Download wxWidgets==
  
 
  cd ~
 
  cd ~
  wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.7/gnutls-3.7.2.tar.xz
+
  svn co https://github.com/wxWidgets/wxWidgets/branches/WX_3_0_BRANCH wx3
tar xf gnutls-3.7.2.tar.xz
 
cd gnutls-3.7.2
 
./configure --prefix="$HOME/prefix" --enable-shared --disable-static --build=x86_64-w64-mingw32 --with-included-libtasn1 --disable-doc --disable-guile --without-p11-kit --enable-local-libopts --disable-nls --with-included-unistring --disable-tests
 
make && make install
 
  
==Building SQLite==
+
==Download FileZilla==
  
 
  cd ~
 
  cd ~
  wget https://sqlite.org/2018/sqlite-autoconf-3250300.tar.gz
+
  svn co https://svn.filezilla-project.org/svn/FileZilla3/trunk filezilla
tar xf sqlite-autoconf-3250300.tar.gz
 
cd sqlite-autoconf-3250300
 
./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static
 
make && make install
 
  
==Building wxWidgets==
+
=Build Filezilla=
  
cd ~
+
==Fetch patch and build script==
git clone --branch WX_3_0_BRANCH --single-branch https://github.com/wxWidgets/wxWidgets.git wx3
 
cd wx3
 
./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --enable-unicode --enable-printfposparam --without-libtiff --without-libjpeg --with-expat=builtin --with-libpng=builtin
 
make && make install
 
  
==Building libfilezilla==
+
git clone https://github.com/rexdf/build_filezilla_on_msys2.git
 +
cp build_filezilla_on_msys2/*.patch ~
 +
cp build_filezilla_on_msys2/build.sh ~
  
cd ~
+
==Build a static only zlib==
svn co https://svn.filezilla-project.org/svn/libfilezilla/trunk libfilezilla
 
cd libfilezilla
 
autoreconf -i
 
./configure --prefix="$HOME/prefix" --enable-shared --disable-static
 
make && make install
 
  
=Building Filezilla=
+
git clone https://github.com/Alexpux/MINGW-packages.git
 +
cd MINGW-packages
 +
git apply ../mingw-w64-zlib.patch
 +
cd mingw-w64-zlib
 +
makepkg-mingw -sLf
 +
cp mingw-w64-i686-zlib-1.2.8-6-any.pkg.tar.xz ~/
  
==Download FileZilla==
+
==Build dependencies and filezilla==
 
 
cd ~
 
svn co https://svn.filezilla-project.org/svn/FileZilla3/trunk filezilla
 
  
==Building FileZilla==
+
===Build===
  
cd ~/filezilla
+
start '''MinGW-w64 Win32 Shell''' shell
autoreconf -i
 
./configure --with-pugixml=builtin
 
make
 
  
==Stripping debug symbols==
+
./build.sh
  
strip src/interface/.libs/filezilla.exe
+
=== Generate installer ===
strip src/putty/.libs/fzsftp.exe
 
strip src/putty/.libs/fzputtygen.exe
 
strip src/fzshellext/64/.libs/libfzshellext-0.dll
 
strip src/fzshellext/32/.libs/libfzshellext-0.dll
 
strip data/dlls/*.dll
 
  
==Building the installer==
+
==== Installing NSIS ====
  
=== Installing NSIS ===
+
Download and install Unicode NSIS from http://www.scratchpaper.com
  
Download and install NSIS '''3''' from http://nsis.sourceforge.net/
+
Make sure you get the Unicode version and not the ANSI one.
  
=== Compile the installer script ===
+
==== Compile the installer script ====
  
Right click data/install.nsi in Explorer and use "Compile NSIS Script" from context menu.
+
Right click compile/data/install.nsi in Explorer and use "Compile NSIS Script" from context menu.
  
= Troubleshooting =
+
== Troubleshooting ==
  
 
If you run into problems, please make sure you've followed each step exactly how it is explained and that you haven't missed any steps along the way.
 
If you run into problems, please make sure you've followed each step exactly how it is explained and that you haven't missed any steps along the way.

Please note that all contributions to FileZilla Wiki are considered to be released under the GNU Free Documentation License 1.2 (see FileZilla Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

Cancel Editing help (opens in new window)