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'''
Line 11: Line 9:
 
=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]
+
Download the 64bit MSYS2 installer: [http://sourceforge.net/project/msys2/Base/x86_64/msys2-x86_64-20150512.exe msys2-x86_64-20150512.exe]
 +
 
 +
Install MSYS2 to '''c:\msys64'''.
  
 
=Installing the compiler toolchain=
 
=Installing the compiler toolchain=
Line 20: Line 20:
  
 
===First update===
 
===First update===
Start the MSYS2 MinGW 64-bit shell
+
Start the MSYS2 shell
 
  pacman -Syu
 
  pacman -Syu
close MSYS2 shell. Repeat until there are no more updates.
+
close MSYS shell, and maybe you will need rebase (Google for details, just run a autorebase.bat in C:\msys64).
  
 
===Install tools and compiler toolchain===
 
===Install tools and compiler toolchain===
  
Start MSYS2 MinGW 64-bit shell, execute the following command to install the necessary packages:
+
Start MSYS2 shell, execute the following command:
 
 
pacman -S autoconf automake libtool make mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain git svn
 
 
 
Execute the following to work around some most-annoying bugs in the toolchain
 
  
  # Fix missing platform prefix for windres
+
  pacman -S base-devel msys2-devel mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain
[ -f /mingw64/bin/x86_64-w64-mingw32-windres.exe ] || ln -s /mingw64/bin/windres.exe /mingw64/bin/x86_64-w64-mingw32-windres.exe
+
  pacman -S svn git curl wget
  [ -f /mingw32/bin/i686-w64-mingw32-windres.exe ] || ln -s /mingw32/bin/windres.exe /mingw32/bin/i686-w64-mingw32-windres.exe
+
  pacman -S ca-certificates
  
 
== Setting up the environment==
 
== Setting up the environment==
  
Execute the following commands:
+
Execute the following commands:0
 
  mkdir ~/prefix
 
  mkdir ~/prefix
  echo 'export PATH="$HOME/prefix/bin:$HOME/prefix/lib:/mingw64/bin:/mingw32/bin:$PATH"' >> ~/.profile
+
  echo 'export PATH="$HOME/prefix/bin:/mingw64/bin:/mingw32/bin:$PATH"' >> ~/.profile
 
  echo 'export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig"' >> ~/.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 PATH="$HOME/prefix/bin:/mingw64/bin:/mingw32/bin:$PATH"' >> ~/.bash_profile
 
  echo 'export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig"' >> ~/.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 dependencies=
Line 53: Line 46:
  
 
  cd ~
 
  cd ~
  curl -O https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
+
  curl -O https://gmplib.org/download/gmp/gmp-6.0.0a.tar.xz
  tar xf gmp-6.2.1.tar.xz
+
  tar xf gmp-6.0.0a.tar.xz
  cd gmp-6.2.1
+
  cd gmp-6.0.0a
  ./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --enable-fat
+
  ./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-static --disable-shared --enable-fat
 
  make && make install
 
  make && make install
  
Line 62: Line 55:
  
 
  cd ~
 
  cd ~
  wget https://ftp.gnu.org/gnu/nettle/nettle-3.7.3.tar.gz
+
  wget http://ftp.gnu.org/gnu/nettle/nettle-3.1.1.tar.gz
  tar xf nettle-3.7.3.tar.gz
+
  tar xf nettle-3.1.1.tar.gz
  cd nettle-3.7.3
+
  cd nettle-3.1.1
  ./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --enable-fat
+
  ./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-static --disable-shared --enable-fat
 
  make && make install
 
  make && make install
  
Line 71: Line 64:
  
 
  cd ~
 
  cd ~
  wget https://zlib.net/fossils/zlib-1.2.13.tar.gz
+
  wget http://zlib.net/zlib-1.2.8.tar.gz
  tar xf zlib-1.2.13.tar.gz
+
  tar xf zlib-1.2.8
  cd zlib-1.2.13
+
  cd zlib-1.2.8
  LDSHAREDLIBC='' ./configure --prefix="$HOME/prefix" -u=GNU
+
  ./configure --prefix="$HOME/prefix" --static
 
  make && make install
 
  make && make install
  
Line 80: Line 73:
  
 
  cd ~
 
  cd ~
  wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.7/gnutls-3.7.2.tar.xz
+
  wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.4/gnutls-3.4.4.1.tar.xz
  tar xf gnutls-3.7.2.tar.xz
+
  tar xf gnutls-3.4.4.1.tar.xz
  cd gnutls-3.7.2
+
  cd gnutls-3.4.4.1
  ./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
+
  ./configure --prefix="$HOME/prefix" --enable-static --disable-shared --build=x86_64-w64-mingw32 --with-included-libtasn1 --disable-doc --disable-guile --without-p11-kit --enable-local-libopts
  make && make install
+
  make && make install  
  
 
==Building SQLite==
 
==Building SQLite==
  
 
  cd ~
 
  cd ~
  wget https://sqlite.org/2018/sqlite-autoconf-3250300.tar.gz
+
  wget https://sqlite.org/2015/sqlite-autoconf-3081101.tar.gz
  tar xf sqlite-autoconf-3250300.tar.gz
+
  tar xf sqlite-autoconf-3081101.tar.gz
  cd sqlite-autoconf-3250300
+
  cd sqlite-autoconf-3081101
  ./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static
+
  ./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-static --disable-shared
 
  make && make install
 
  make && make install
  
Line 98: Line 91:
  
 
  cd ~
 
  cd ~
  git clone --branch WX_3_0_BRANCH --single-branch https://github.com/wxWidgets/wxWidgets.git wx3
+
  svn co https://github.com/wxWidgets/wxWidgets/branches/WX_3_0_BRANCH wx3
 
  cd 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
+
  ./configure --prefix="$HOME/prefix" --enable-static --disable-shared --build=x86_64-w64-mingw32 --enable-unicode --without-libtiff
make && make install
 
 
 
==Building libfilezilla==
 
 
 
cd ~
 
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
 
  make && make install
  
Line 123: Line 107:
 
  cd ~/filezilla
 
  cd ~/filezilla
 
  autoreconf -i
 
  autoreconf -i
  ./configure --with-pugixml=builtin
+
  ./configure --with-pugixml=builtin LDFLAGS="-static-libgcc -static-libstdc++"
 
  make
 
  make
  
 
==Stripping debug symbols==
 
==Stripping debug symbols==
 
strip src/interface/.libs/filezilla.exe
 
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==
 
==Building the installer==
Line 139: Line 116:
 
=== Installing NSIS ===
 
=== Installing NSIS ===
  
Download and install NSIS '''3''' from http://nsis.sourceforge.net/
+
Download and install Unicode NSIS from http://www.scratchpaper.com
 +
 
 +
Make sure you get the Unicode version and not the ANSI one.
  
 
=== Compile the installer script ===
 
=== Compile the installer script ===

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)