Created
April 8, 2014 18:29
-
-
Save nablaa/10167685 to your computer and use it in GitHub Desktop.
Cross-compile Pidgin plugins for Windows using Linux
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Script to cross-compile Pidgin plugins on Linux for Windows. | |
# Tested to work on Ubuntu 12.04 | |
PLUGIN_SRC_FILE="$1" | |
PLUGIN_NAME=$(basename "${PLUGIN_SRC_FILE}") | |
PLUGIN_NAME="${PLUGIN_NAME%.*}" | |
PLUGIN_DLL="${PLUGIN_NAME}.dll" | |
set -e | |
set -u | |
if [ ! -f "${PLUGIN_SRC_FILE}" ]; then | |
echo "Plugin source file must be given" | |
echo "Usage: $0 plugin_source_file" | |
echo "Example: $0 my_plugin.c" | |
exit 1 | |
fi | |
PIDGIN_VERSION="2.10.9" | |
PIDGIN_SRC="pidgin-${PIDGIN_VERSION}" | |
WIN32_SRC="win32-dev" | |
MINGW_SRC="${WIN32_SRC}/mingw" | |
echo "Installing required packages ..." | |
sudo apt-get install mingw32 mingw32-binutils mingw32-runtime | |
echo "Getting Pidgin source ..." | |
wget "http://sourceforge.net/projects/pidgin/files/Pidgin/${PIDGIN_VERSION}/${PIDGIN_SRC}.tar.bz2/download" -O "${PIDGIN_SRC}.tar.bz2" | |
tar xvjf ${PIDGIN_SRC}.tar.bz2 | |
cat > "${PIDGIN_SRC}/local.mak" << EOF | |
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/usr/i586-mingw32msvc/include | |
LIB_PATHS := -L$(readlink -f "$WIN32_SRC")/mingw/lib/gcc/mingw32/4.7.2 | |
EOF | |
mkdir -p "${MINGW_SRC}" | |
echo "Getting dependencies ..." | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/binutils/binutils-2.23.1/binutils-2.23.1-1-mingw32-bin.tar.lzma/download" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/mingw-rt/mingwrt-3.20/mingwrt-3.20-2-mingw32-dev.tar.lzma/download" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/mingw-rt/mingwrt-3.20/mingwrt-3.20-2-mingw32-dll.tar.lzma/download" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/w32api/w32api-3.17/w32api-3.17-2-mingw32-dev.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/mpc/mpc-0.8.1-1/mpc-0.8.1-1-mingw32-dev.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/mpc/mpc-0.8.1-1/libmpc-0.8.1-1-mingw32-dll-2.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/mpfr/mpfr-2.4.1-1/mpfr-2.4.1-1-mingw32-dev.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/mpfr/mpfr-2.4.1-1/libmpfr-2.4.1-1-mingw32-dll-1.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gmp/gmp-5.0.1-1/gmp-5.0.1-1-mingw32-dev.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gmp/gmp-5.0.1-1/libgmp-5.0.1-1-mingw32-dll-10.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/pthreads-w32/pthreads-w32-2.9.0-pre-20110507-2/pthreads-w32-2.9.0-mingw32-pre-20110507-2-dev.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/pthreads-w32/pthreads-w32-2.9.0-pre-20110507-2/libpthreadgc-2.9.0-mingw32-pre-20110507-2-dll-2.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/libiconv/libiconv-1.14-2/libiconv-1.14-2-mingw32-dev.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/libiconv/libiconv-1.14-2/libiconv-1.14-2-mingw32-dll-2.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gettext/gettext-0.18.1.1-2/libintl-0.18.1.1-2-mingw32-dll-8.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.7.2-1/libgomp-4.7.2-1-mingw32-dll-1.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.7.2-1/libssp-4.7.2-1-mingw32-dll-0.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.7.2-1/libquadmath-4.7.2-1-mingw32-dll-0.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.7.2-1/gcc-core-4.7.2-1-mingw32-bin.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://sourceforge.net/projects/mingw/files/MinGW/Base/gcc/Version4/gcc-4.7.2-1/libgcc-4.7.2-1-mingw32-dll-1.tar.lzma/" -O - | tar xv --lzma -C "${MINGW_SRC}" | |
wget "http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.14/gtk+-bundle_2.14.7-20090119_win32.zip" | |
unzip "gtk+-bundle_2.14.7-20090119_win32.zip" -d "${WIN32_SRC}/gtk_2_0-2.14" | |
wget "http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-tools-0.17.zip" | |
unzip "gettext-tools-0.17.zip" -d "${WIN32_SRC}/gettext-0.17" | |
wget "http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext-runtime-0.17-1.zip" | |
unzip "gettext-runtime-0.17-1.zip" -d "${WIN32_SRC}/gettext-0.17" | |
wget "http://ftp.gnome.org/pub/GNOME/binaries/win32/dependencies/libxml2-dev_2.9.0-1_win32.zip" | |
unzip "libxml2-dev_2.9.0-1_win32.zip" -d "${WIN32_SRC}/libxml2-2.9.0" | |
wget "http://ftp.gnome.org/pub/GNOME/binaries/win32/dependencies/libxml2_2.9.0-1_win32.zip" | |
unzip "libxml2_2.9.0-1_win32.zip" -d "${WIN32_SRC}/libxml2-2.9.0" | |
wget "http://ftp.acc.umu.se/pub/GNOME/binaries/win32/intltool/0.40/intltool_0.40.4-1_win32.zip" | |
unzip "intltool_0.40.4-1_win32.zip" -d "${WIN32_SRC}/intltool_0.40.4-1_win32" | |
wget "https://developer.pidgin.im/static/win32/enchant_1.6.0_win32.zip" | |
unzip "enchant_1.6.0_win32.zip" -d "${WIN32_SRC}" | |
wget "https://developer.pidgin.im/static/win32/meanwhile-1.0.2_daa3-win32.zip" | |
unzip "meanwhile-1.0.2_daa3-win32.zip" -d "${WIN32_SRC}" | |
wget "https://developer.pidgin.im/static/win32/perl_5-10-0.tar.gz" -O - | tar xvz -C "${WIN32_SRC}" | |
wget "https://developer.pidgin.im/static/win32/tcl-8.4.5.tar.gz" -O - | tar xvz -C "${WIN32_SRC}" | |
wget "https://developer.pidgin.im/static/win32/gtkspell-2.0.16.tar.bz2" -O - | tar xvj -C "${WIN32_SRC}" | |
wget "https://developer.pidgin.im/static/win32/nss-3.16-nspr-4.10.4.tar.gz" -O - | tar xvz -C "${WIN32_SRC}" | |
wget "https://developer.pidgin.im/static/win32/silc-toolkit-1.1.10.tar.gz" -O - | tar xvz -C "${WIN32_SRC}" | |
wget "https://developer.pidgin.im/static/win32/cyrus-sasl-2.1.25.tar.gz" -O - | tar xvz -C "${WIN32_SRC}" | |
wget "https://developer.pidgin.im/static/win32/pidgin-inst-deps-20130214.tar.gz" -O - | tar xvz -C "${WIN32_SRC}/intltool_0.40.4-1_win32" | |
# We don't have Bonjour libraries installed so we exclude that protocol from the build | |
sed -i "s/bonjour//g" "${PIDGIN_SRC}/libpurple/protocols/Makefile.mingw" | |
# Disable SSL plugin as it requires Mozilla NSS library that cannot be compiled easily (see: https://developer.pidgin.im/wiki/BuildingWinNSS) | |
sed -i "s/.*SSL.*//g" pidgin-2.10.9/libpurple/plugins/Makefile.mingw | |
echo "Copying plugin source file to plugins directory to build it among other plugins ..." | |
cp "${PLUGIN_SRC_FILE}" "${PIDGIN_SRC}/pidgin/plugins" | |
sed -i "s/.*xmppconsole.dll$/xmppconsole.dll ${PLUGIN_DLL}/g" "${PIDGIN_SRC}/pidgin/plugins/Makefile.mingw" | |
cd "${PIDGIN_SRC}" | |
echo "Building ..." | |
make -f Makefile.mingw | |
cp "pidgin/plugins/${PLUGIN_DLL}" ../ | |
echo "Done building $(readlink -f ${PLUGIN_DLL})" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment