Version 173 (modified by 8 years ago) (diff) | ,
---|
Pidgin for Windows Build Instructions
Note: These instructions are kept current for the development version of release-2.x.y
branch of Pidgin. You may need to look at an older version of this page in order to build a released version of Pidgin. Alternatively, you may need the instructions for 3.0.0 branch.
3.0.0 | 2.x.y (current) | 2.10.11 | 2.10.7 | 2.10.6 | <2.7.0 |
Set up your build environment
- Install the Cygwin Bash shell. Also make sure you install bash, bzip2, ca-certificates, coreutils, gawk, gnupg, grep, gzip, libiconv, make, patch, sed, tar, unzip, wget, and zip (several of these are selected by default, those in bold are not). You may prefer to use MSYS instead of Cygwin, but if you do so, you may need to tweak the instructions.
Alternatively, you may use the third-party script Pidgin Windev, which creates the development environment automatically. This tool works for both Cygwin and MSYS.
- The following instructions were written under the assumption that the Pidgin source will be extracted or checked out into
$PIDGIN_DEV_ROOT/pidgin-<version>
and that you install all of Pidgin's build dependencies under$PIDGIN_DEV_ROOT/win32-dev
(the point being that the pidgin source root andwin32-dev
directories should be on the same level). Some users may find the instructions for customizing their build environment useful.
You don't have to actually define an environment variable called
PIDGIN_DEV_ROOT
, it is simply used here as a placeholder.
Note: You should avoid using a
$PIDGIN_DEV_ROOT
path that contains spaces as that can cause unnecessary complications.
People are sometimes confused about the directory structure, so here is an example structure after all the dependencies have been installed (
$PIDGIN_DEV_ROOT
isc:\devel\pidgin-devel
in this example):c:\devel\pidgin-devel (The following is the source tree root, containing config.h.mingw and libpurple.) c:\devel\pidgin-devel\pidgin-<version> c:\devel\pidgin-devel\win32-dev (If the following file is present, your structure is probably correct.) c:\devel\pidgin-devel\win32-dev\gtk_2_0-2.14\include\libintl.h
- Install the MinGW "GCC Version 4.7.2" packages from the MinGW site by following their instructions.
- Download the following:
- binutils-2.23.1
- mingw-runtime-3.20 (dev and dll)
- w32api-3.17
- Required runtime libraries for GCC:
- mpc-0.8.1-1 (dev and dll)
- mpfr-2.4.1-1 (dev and dll)
- gmp-5.0.1-1 (dev and dll)
- pthreads-2.9.0-pre-20110507-2 (dev and dll)
- iconv (dev and dll)
- intl-0.18.1.1-2
- gomp-4.7.2-1
- ssp-4.7.2-1
- quadmath-4.7.2-1
- gcc-core-4.7.2-1 (bin and dev and dll)
- gcc-4.7.2-1-mingw32-src
- so we can distribute the libssp source since we distribute the binary
- Extract all of the above into the desired location (e.g.
$PIDGIN_DEV_ROOT/win32-dev/mingw-4.7.2
)- Prepare a
libssp-src.tar.gz
file containing the libssp sources and licenses:cd $PIDGIN_DEV_ROOT/win32-dev/mingw-4.7.2 mkdir libsspsrctmp tar -C libsspsrctmp -xf gcc-4.7.2-1-mingw32-src/gcc-4.7.2.tar.bz2 gcc-4.7.2/COPYING3 gcc-4.7.2/COPYING.RUNTIME gcc-4.7.2/libssp --strip-components=1 tar -C libsspsrctmp -czf bin/libssp-src.tar.gz . rm -r libsspsrctmp
- Prepare a
- Set the MinGW gcc's bin directory to be before Cygwin's in your
PATH
.
For Example (You should add the following to your~/.bashrc
file, which is found inC:\cygwin\home\YourUsername\
by default):export PATH=/cygdrive/c/devel/pidgin-devel/win32-dev/mingw-4.7.2/bin:$PATH
Install Pidgin's build dependencies
GTK+
Pidgin depends on GTK+ 2.14.7 (newer runtime versions can be used). The GTK+ All-in-one bundle contains all of GTK+'s dependencies in one zip file. Download gtk+-bundle_2.14.7-20090119_win32.zip and extract to
$PIDGIN_DEV_ROOT/win32-dev/gtk_2_0-2.14
(you'll need to create this directory).
Visit the GTK+ website for official binary and source releases.
gettext
You'll need gettext to compile translations. Download gettext-tools-0.17.zip and gettext-runtime-0.17-1.zip. Extract both to
$PIDGIN_DEV_ROOT/win32-dev/gettext-0.17
(you'll need to create this directory).
Libxml2
Download and extract libxml2-2.9.2_daa1.tar.gz to
$PIDGIN_DEV_ROOT/win32-dev
Perl 5.20
You'll need a functioning perl 5.20.x runtime (if the perl executable isn't in your
PATH
, you will need to override thePERL
variable inpidgin/local.mak
to point to the appropriate perl executable). A good option is Strawberry Perl.
Download the perl-5.20.1.1.tar.gz development package and extract to
$PIDGIN_DEV_ROOT/win32-dev
(it creates its own directory). This is a subset of the full 32-bit strawberry perl zip containing just the headers, import lib, and source for perl.
- Note: If using MSYS and you installed the
mingw-developer-toolkit
, keep in mind that it installsmsys-perl-bin
(Perl 5.6) which takes precedence over the newer perl in your path, and that will cause problems! The easiest solution is to set thePERL
variable in yourpidgin/local.mak
to point to the right perl.exe.
GtkSpell
- Download and extract gtkspell-2.0.16.tar.bz2 to
$PIDGIN_DEV_ROOT/win32-dev
Enchant
- Download and extract enchant_1.6.0_win32.zip to
$PIDGIN_DEV_ROOT/win32-dev/
Mozilla NSS
- Download and extract nss-3.24-nspr-4.12.tar.gz under
$PIDGIN_DEV_ROOT/win32-dev
- Note: NSS/NSPR are built from the upstream sources using these instructions.
SILC Toolkit
Download and extract silc-toolkit-1.1.12.tar.gz to
$PIDGIN_DEV_ROOT/win32-dev
Meanwhile
Download and extract meanwhile-1.0.2_daa3-win32.zip to
$PIDGIN_DEV_ROOT/win32-dev
Cyrus SASL
Download and extract cyrus-sasl-2.1.26_daa1.tar.gz to
$PIDGIN_DEV_ROOT/win32-dev
Intltool
Download and extract intltool_0.40.4-1_win32.zip to
$PIDGIN_DEV_ROOT/win32-dev/intltool_0.40.4-1_win32
Crash Reporting Library
Download and extract pidgin-inst-deps-20130214.tar.gz to
$PIDGIN_DEV_ROOT/win32-dev
.
Get the Pidgin source code
The development source is available via mercurial in the
release-2.x.y
branch. See UsingPidginMercurial for more information.
If you want to build a release tarball, see the per-Version instructions.
Build Pidgin
Run the following:
cd $PIDGIN_DEV_ROOT/pidgin-<version> make -f Makefile.mingw installNow just wait and let your compiler do its thing. When finished, Pidgin will be in
$PIDGIN_DEV_ROOT/pidgin-<version>/win32-install-dir
.
Build the Pidgin Installer
- If you want to build the Pidgin installer, do the following:
- Download and install NSIS. Include NSIS to Cygwin's
PATH
.- For information on the NSIS installer, visit the NSIS website.
- For information on the NSIS installer, visit the NSIS website.
- Download the nsisunz plugin, and extract
nsisunz.dll
into thePlugins
directory of your NSIS installation. - Copy
$PIDGIN_DEV_ROOT/win32-dev/pidgin-inst-deps-20130214/SHA1Plugin.dll
into thePlugins
directory of your NSIS installation. - Now you'll need to decide if you want to sign the executables (not necessary for personal use)
- If you do, you'll need to get an appropriate code signing certificate, generate a GPG key if you don't already have one, then download and install Mono. In your
local.mak
file (see below), define theMONO_SIGNCODE
variable to the fully qualified path to thesigncode
batch file in the Monobin
directory, and theSIGNCODE_SPC
andSIGNCODE_PVK
variables to the appropriate files from your certificate. E.g.:MONO_SIGNCODE=/cygdrive/c/Program\ Files\ \(x86\)/Mono-2.10.8/bin/signcode SIGNCODE_SPC=c:\\Path\\to\\authenticode.spc SIGNCODE_PVK=c:\\Path\\to\\authenticode.pvk #Set up gpg to use a separate keyring GPG_SIGN=gpg --no-default-keyring --secret-keyring /path/to/secring.gpg
- Otherwise, in your
local.mak
file (see below),add the following:#Disable Signing MONO_SIGNCODE=echo ***Bypassing signcode*** GPG_SIGN=echo ***Bypassing gpg***
- If you do, you'll need to get an appropriate code signing certificate, generate a GPG key if you don't already have one, then download and install Mono. In your
- Download and install NSIS. Include NSIS to Cygwin's
- Now you can actually build the installer.
There are 2 different installers, an "Offline" installer that includes all dependencies (except spellchecking dictionaries) and the debug symbols and an "Online" installer that includes only Pidgin itself and will download the various dependencies if necessary. TheMakefile.mingw
targets for these areinstaller_offline
, andinstaller
respectively. To build both, use theinstallers
target.When it finishes, your installer(s) should be incd $PIDGIN_DEV_ROOT/pidgin-<version> make -f Makefile.mingw installers
$PIDGIN_DEV_ROOT/pidgin-<version>/
.
Customizing the Build Environment
Most people will find that the standard build environment directory is completely adequate. It is, however, possible to override the locations of the various dependencies and target directories. This is often useful to test against a development version of a library dependency or to override compiler flags.
This done is by overriding the various Makefile variables in a
local.mak
file in the$PIDGIN_DEV_ROOT/pidgin-<version>
directory. This file does not exist by default.
Most of the variables that can be overridden with this method are defined in the libpurple/win32/global.mak file. For example, to install Pidgin over
c:\Program Files\Pidgin
instead of$PIDGIN_DEV_ROOT/pidgin/win32-install-dir
, create a$PIDGIN_DEV_ROOT/pidgin/local.mak
containing:#Override the install location PIDGIN_INSTALL_DIR = /cygdrive/c/Program\ Files/Pidgin PURPLE_INSTALL_DIR = /cygdrive/c/Program\ Files/Pidgin
One nice use of the
local.mak
file is for cross compiling, there is an additional example in the section below.
Debugging
There is a quite good Just In Time debugger for MinGW: drmingw. You can download it here.
There is also a version ofgdb
available from MinGW, if you prefer.
Cross Compiling
It is quite easy to cross compile Pidgin for Windows on a Linux machine.
To begin, you'll need to install MinGW. On Debian/Ubuntu, this involves installing packages
mingw32
,mingw32-binutils
, andmingw32-runtime
. On other distributions, the packages may be named differently.
Set up a build environment as described above, skipping steps 1 and 3.
Create a
local.mak
file in the source directory root to override the Makefile variables - mine looks like this:SHELL := /bin/bash CC := /usr/bin/i586-mingw32msvc-cc GMSGFMT := msgfmt MAKENSIS := /usr/bin/makensis WINDRES := /usr/bin/i586-mingw32msvc-windres STRIP := /usr/bin/i586-mingw32msvc-strip INTLTOOL_MERGE := /usr/bin/intltool-merge INCLUDE_PATHS := -I$(PIDGIN_TREE_TOP)/../win32-dev/w32api/include LIB_PATHS := -L$(PIDGIN_TREE_TOP)/../win32-dev/w32api/lib
If your distribution doesn't include a recent enough win32api, you can download it from the MinGW site, extract it into your
win32-dev
directory, and override theINCLUDE_PATHS
andLIB_PATHS
variables in yourlocal.mak
as I have done.
NSIS version 2.46 or greater is required to cross-compile. If compiling NSIS from source, the scons package is a dependency. This can usually be installed through your linux distribution's package archive. An example of how to install the NSIS package is given below (Assuming use of the NSIS 2.46 version):
.tar.bz2
file contains latest source
.zip
file contains librariesmkdir nsis; cd nsis wget http://prdownloads.sourceforge.net/nsis/nsis-2.46-src.tar.bz2?download wget http://prdownloads.sourceforge.net/nsis/nsis-2.46.zip?download tar -jxvf nsis-2.46-src.tar.bz2 cd nsis-2.46 scons SKIPSTUBS=all SKIPPLUGINS=all SKIPUTILS=all SKIPMISC=all NSIS_CONFIG_CONST_DATA_PATH=no sudo scons install-compiler cd .. sudo unzip nsis-2.46 -d /usr/local/share sudo mv /usr/local/share/nsis-2.46/ /usr/local/share/nsisIf following the above instructions, the local.mak file (listed above) should be modified
MAKENSIS := /usr/local/bin/makensis
Once this is all set up, you should be able to follow the building instructions above.