Compiling FileZilla 3 under Windows: Difference between revisions
(Fixed typo in stripping instructions) |
|||
(95 intermediate revisions by 24 users not shown) | |||
Line 2: | Line 2: | ||
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 9: | Line 11: | ||
=Installing the MSYS2 environment= | =Installing the MSYS2 environment= | ||
Download the 64bit MSYS2 installer and install it in a convenient location: [ | Download the 64bit MSYS2 installer and install it in a convenient location: [https://repo.msys2.org/distrib/x86_64/msys2-x86_64-20230318.exe msys2-x86_64-20230318.exe] | ||
=Installing the compiler toolchain= | =Installing the compiler toolchain= | ||
Line 18: | Line 20: | ||
===First update=== | ===First update=== | ||
Start the MSYS2 shell | Start the MSYS2 MinGW 64-bit shell | ||
pacman -Syu | pacman -Syu | ||
close | close MSYS2 shell. Repeat until there are no more updates. | ||
===Install tools and compiler toolchain=== | ===Install tools and compiler toolchain=== | ||
Start MSYS2 shell, execute the following command to install the necessary packages: | Start MSYS2 MinGW 64-bit shell, execute the following command to install the necessary packages: | ||
pacman -S | 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 | Execute the following to work around some most-annoying bugs in the toolchain | ||
# Fix missing platform prefix for windres | # Fix missing platform prefix for windres | ||
[ -f /mingw64/bin/x86_64-w64-mingw32-windres.exe ] || ln -s /mingw64/bin/windres.exe /mingw64/bin/x86_64-w64-mingw32-windres.exe | [ -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 | [ -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== | == Setting up the environment== | ||
Line 47: | Line 40: | ||
Execute the following commands: | Execute the following commands: | ||
mkdir ~/prefix | mkdir ~/prefix | ||
echo 'export PATH="$HOME/prefix/bin:/mingw64/bin:/mingw32/bin:$PATH"' >> ~/.profile | 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 PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig"' >> ~/.profile | ||
echo 'export PATH="$HOME/prefix/bin:/mingw64/bin:/mingw32/bin:$PATH"' >> ~/.bash_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 PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig"' >> ~/.bash_profile | ||
echo 'export LC_ALL=C' >> ~/.bash_profile | |||
Restart the | Restart the MSYS2 MINGW64 shell. | ||
=Building dependencies= | =Building dependencies= | ||
Line 59: | Line 53: | ||
cd ~ | cd ~ | ||
curl -O https://gmplib.org/download/gmp/gmp-6. | curl -O https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz | ||
tar xf gmp-6. | tar xf gmp-6.2.1.tar.xz | ||
cd gmp-6. | cd gmp-6.2.1 | ||
./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable- | ./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --enable-fat | ||
make && make install | make && make install | ||
Line 68: | Line 62: | ||
cd ~ | cd ~ | ||
wget | wget https://ftp.gnu.org/gnu/nettle/nettle-3.7.3.tar.gz | ||
tar xf nettle-3. | tar xf nettle-3.7.3.tar.gz | ||
cd nettle-3. | cd nettle-3.7.3 | ||
./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable- | ./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --enable-fat | ||
make && make install | make && make install | ||
Line 77: | Line 71: | ||
cd ~ | cd ~ | ||
wget | wget https://zlib.net/fossils/zlib-1.2.13.tar.gz | ||
tar xf zlib-1.2. | tar xf zlib-1.2.13.tar.gz | ||
cd zlib-1.2. | cd zlib-1.2.13 | ||
./configure --prefix="$HOME/prefix" - | LDSHAREDLIBC='' ./configure --prefix="$HOME/prefix" -u=GNU | ||
make && make install | make && make install | ||
Line 86: | Line 80: | ||
cd ~ | cd ~ | ||
wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3. | wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.7/gnutls-3.7.2.tar.xz | ||
tar xf gnutls-3. | tar xf gnutls-3.7.2.tar.xz | ||
cd gnutls-3. | cd gnutls-3.7.2 | ||
./configure --prefix="$HOME/prefix" --enable- | ./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 | make && make install | ||
==Building SQLite== | ==Building SQLite== | ||
cd ~ | cd ~ | ||
wget https://sqlite.org/ | wget https://sqlite.org/2018/sqlite-autoconf-3250300.tar.gz | ||
tar xf sqlite-autoconf- | tar xf sqlite-autoconf-3250300.tar.gz | ||
cd sqlite-autoconf- | cd sqlite-autoconf-3250300 | ||
./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable- | ./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static | ||
make && make install | make && make install | ||
Line 107: | Line 98: | ||
cd ~ | cd ~ | ||
git clone --branch WX_3_0_BRANCH --single-branch https://github.com/wxWidgets/wxWidgets.git wx3 | |||
cd wx3 | cd wx3 | ||
./configure --prefix="$HOME/prefix" --enable- | ./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== | |||
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 123: | ||
cd ~/filezilla | cd ~/filezilla | ||
autoreconf -i | autoreconf -i | ||
./configure | ./configure --with-pugixml=builtin | ||
make | make | ||
Line 133: | Line 133: | ||
strip src/fzshellext/64/.libs/libfzshellext-0.dll | strip src/fzshellext/64/.libs/libfzshellext-0.dll | ||
strip src/fzshellext/32/.libs/libfzshellext-0.dll | strip src/fzshellext/32/.libs/libfzshellext-0.dll | ||
strip data/dlls/*.dll | |||
==Building the installer== | ==Building the installer== | ||
Line 138: | Line 139: | ||
=== Installing NSIS === | === Installing NSIS === | ||
Download and install | Download and install NSIS '''3''' from http://nsis.sourceforge.net/ | ||
=== Compile the installer script === | === Compile the installer script === |
Latest revision as of 05:56, 15 August 2024
This documentation explains how to setup a build environment for FileZilla 3 and how to compile it under Windows using msys2. Msys2 is a cygwin environment. These instructions require you to run a 64bit Windows.
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
Installing the MSYS2 environment[edit]
Download the 64bit MSYS2 installer and install it in a convenient location: msys2-x86_64-20230318.exe
Installing the compiler toolchain[edit]
FileZilla's shell extension needs to be build both for 32bit as well as 64bit, hence we're going to need compilers for both 32bit and 64bit.
Tools and compiler[edit]
First update[edit]
Start the MSYS2 MinGW 64-bit shell
pacman -Syu
close MSYS2 shell. Repeat until there are no more updates.
Install tools and compiler toolchain[edit]
Start MSYS2 MinGW 64-bit shell, execute the following command to install the necessary packages:
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 [ -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[edit]
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[edit]
Building GMP[edit]
cd ~ curl -O https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz 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[edit]
cd ~ wget https://ftp.gnu.org/gnu/nettle/nettle-3.7.3.tar.gz 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[edit]
cd ~ wget https://zlib.net/fossils/zlib-1.2.13.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[edit]
cd ~ wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.7/gnutls-3.7.2.tar.xz 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[edit]
cd ~ wget https://sqlite.org/2018/sqlite-autoconf-3250300.tar.gz 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[edit]
cd ~ 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[edit]
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
Building Filezilla[edit]
Download FileZilla[edit]
cd ~ svn co https://svn.filezilla-project.org/svn/FileZilla3/trunk filezilla
Building FileZilla[edit]
cd ~/filezilla autoreconf -i ./configure --with-pugixml=builtin make
Stripping debug symbols[edit]
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[edit]
Installing NSIS[edit]
Download and install NSIS 3 from http://nsis.sourceforge.net/
Compile the installer script[edit]
Right click data/install.nsi in Explorer and use "Compile NSIS Script" from context menu.
Troubleshooting[edit]
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.