[ekiga] [win32] Major update for building Ekiga for Windows



commit d5cec6c8e7688367717476cb3b7fe7739d4416c9
Author: Eugen Dedu <Eugen Dedu pu-pm univ-fcomte fr>
Date:   Tue Aug 10 17:51:08 2010 +0200

    [win32] Major update for building Ekiga for Windows
    
    It works, but with two glitches:
    - gtk 2.20 has not yet an "official" repository
    - video is shown in the roster area instead of its usual place
    
    Many thanks to Thierry Simonnet for helping with this patch.

 win32/Makefile                                 |  851 ++++++++++++++++++++++++
 win32/diff/README                              |    8 +
 win32/diff/ekiga_sticonmenu1.patch             |   20 +
 win32/diff/ekiga_sticonmenu2.patch             |   52 ++
 win32/diff/ekiga_sticonmenu3.patch             |   22 +
 win32/diff/opal_avutil.diff                    |   12 -
 win32/diff/opal_h263dll.diff                   |   42 --
 win32/diff/opal_stdint.diff                    |   12 -
 win32/diff/ptlib_ws2ip6.diff                   |   51 --
 win32/nsisinstaller/ekiga.nsi                  |  317 +++------
 win32/nsisinstaller/langmacros.nsh             |    1 +
 win32/nsisinstaller/language_files/english.nsh |   17 +-
 12 files changed, 1061 insertions(+), 344 deletions(-)
---
diff --git a/win32/Makefile b/win32/Makefile
new file mode 100644
index 0000000..7699bc9
--- /dev/null
+++ b/win32/Makefile
@@ -0,0 +1,851 @@
+#!/usr/bin/make -f
+
+# RELEASE: 0=from git/svn, 1=release (tar.gz) for ekiga, ptlib and opal
+RELEASE   := 1
+# DEBUG: 0=release, 1=debug version
+DEBUG     := 0
+
+MAKEOPTS  := $(MAKEFLAGS)
+MAKE_LIB_OPTS:=$(MAKEFLAGS)
+
+BUILDROOT := $(CURDIR)
+TARGETDIR := $(BUILDROOT)/dist
+SRCDIR    := $(BUILDROOT)/src
+INCLUDEDIR:= $(BUILDROOT)/include
+LIBDIR    := $(BUILDROOT)/lib
+BINDIR    := $(BUILDROOT)/bin
+
+export PKG_CONFIG_LIBDIR:=$(LIBDIR)
+
+export DEB_BUILD_GNU_TYPE:=$(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+export DEB_HOST_GNU_TYPE:="i586-pc-mingw32"
+
+WGET := wget -nv -T 60 -N
+
+HOST_TOOL_PREFIX:=i586-mingw32msvc
+
+REALCC:=$(HOST_TOOL_PREFIX)-gcc
+REALCXX:=$(HOST_TOOL_PREFIX)-g++
+
+MACH_FLAGS:=-march=pentium-mmx
+OPTI_FLAGS:=-O3 -fomit-frame-pointer
+#	IX86_TYPE according to Intel
+#	0 : 8086/88, 2 = 80286, 3 = 80386
+#	4 = 80486, 5 = Pentium(R) Processor, 6 = PentiumPro(R) Processor
+#       7 or higher = Processor beyond the PentiumPro6(R) Processor
+IX86_TYPE:=5
+
+
+ifeq ($(DEBUG),1)
+	export CC=$(REALCC) -mms-bitfields -g
+	export CXX=$(REALCXX) -mms-bitfields -g
+else
+	export CC=$(REALCC) -mms-bitfields
+	export CXX=$(REALCXX) -mms-bitfields
+endif
+
+export LD:=$(HOST_TOOL_PREFIX)-ld
+export NM:=$(HOST_TOOL_PREFIX)-nm
+export AR:=$(HOST_TOOL_PREFIX)-ar
+export RANLIB:=$(HOST_TOOL_PREFIX)-ranlib
+export DLLTOOL:=$(HOST_TOOL_PREFIX)-dlltool
+export DLLWRAP:=$(HOST_TOOL_PREFIX)-dllwrap
+export OBJDUMP:=$(HOST_TOOL_PREFIX)-objdump
+export RC:=$(HOST_TOOL_PREFIX)-windres
+export STRIP:=$(HOST_TOOL_PREFIX)-strip
+export AS:=$(HOST_TOOL_PREFIX)-as
+export CFLAGS:=-I$(INCLUDEDIR) $(MACH_FLAGS)
+export CXXFLAGS:=-I$(INCLUDEDIR) $(MACH_FLAGS)
+export LDFLAGS:=-L$(LIBDIR) $(MACH_FLAGS)
+export PKG_CONFIG_PATH:=$(LIBDIR)/pkgconfig
+export PATH:=$(BINDIR):$(PATH)
+export LDD:=$(BUILDROOT)/$(HOST_TOOL_PREFIX)-ldd.sh
+
+
+ifeq ($(RELEASE),1)
+	EKIGA_VER := 3.2.7
+	EKIGA_URL := http://ftp.gnome.org/pub/gnome/sources/ekiga/3.2
+	EKIGA_ARCHIVE := ekiga-$(EKIGA_VER).tar.gz
+	EKIGA_DIR := $(BUILDROOT)/ekiga-$(EKIGA_VER)
+else
+	GIT_EKIGA_REV = reset --hard HEAD
+	#GIT_EKIGA_REV := checkout -b gnome-2-26 origin/gnome-2-26
+	EKIGA_URL := git://git.gnome.org/ekiga
+	EKIGA_ARCHIVE := ekiga
+	EKIGA_DIR = $(BUILDROOT)/ekiga
+	EKIGA_VER := $(strip $(shell grep AC_INIT $(SRCDIR)/$(EKIGA_ARCHIVE)/configure.ac | awk 'BEGIN { FS = "," } ; { print $$2 }'))
+	EKIGA_REV := $(strip $(shell (cd $(SRCDIR)/$(EKIGA_ARCHIVE); git describe | awk 'BEGIN { FS = "-" } ; { print $$2 "_" $$3 }' )))
+ifneq ($(EKIGA_REV),)
+		EKIGA_VER := $(EKIGA_VER)-git-$(EKIGA_REV)
+endif
+endif
+EKIGA_PREFIX := $(TARGETDIR)/Ekiga
+ifeq ($(DEBUG),1)
+EKIGA_INSTALLER := ekiga-setup-$(EKIGA_VER)-debug.exe
+else
+EKIGA_INSTALLER := ekiga-setup-$(EKIGA_VER).exe
+endif
+#EKIGA_WIN32_DIFF_DIR := $(CURDIR)/diff
+EKIGA_INSTALLER_DIR := $(EKIGA_DIR)/win32/nsisinstaller
+
+ifeq ($(RELEASE),1)
+	OPAL_VER := 3.6.8
+	OPAL_URL := http://ftp.gnome.org/pub/gnome/sources/opal/3.6
+	OPAL_ARCHIVE := opal-$(OPAL_VER).tar.gz
+	OPAL_DIR := $(BUILDROOT)/opal-$(OPAL_VER)
+else
+	OPAL_VER := 3.8-beta3
+	# OPAL_REV: HEAD or revision number
+	OPAL_REV := HEAD
+	OPAL_URL := https://opalvoip.svn.sourceforge.net/svnroot/opalvoip/opal/branches/v3_8
+	OPAL_ARCHIVE := opal
+	OPAL_DIR := $(BUILDROOT)/opal
+endif
+ifeq ($(DEBUG),1)
+	OPAL_LIB := libopal_d.$(OPAL_VER).dll
+else
+	OPAL_LIB := libopal.$(OPAL_VER).dll
+endif
+
+ifeq ($(RELEASE),1)
+	PTLIB_VER := 2.6.7
+	PTLIB_URL := http://ftp.gnome.org/pub/gnome/sources/ptlib/2.6
+	PTLIB_ARCHIVE := ptlib-$(PTLIB_VER).tar.gz
+	PTLIB_DIR := $(BUILDROOT)/ptlib-$(PTLIB_VER)
+else
+	PTLIB_VER := 2.8-beta3
+	# PTLIB_REV: HEAD or revision number
+	PTLIB_REV := HEAD
+	PTLIB_URL := https://opalvoip.svn.sourceforge.net/svnroot/opalvoip/ptlib/branches/v2_8
+	PTLIB_ARCHIVE := ptlib
+	PTLIB_DIR := $(BUILDROOT)/ptlib
+endif
+ifeq ($(DEBUG),1)
+	PTLIB_LIB := libpt_d.$(PTLIB_VER).dll
+else
+	PTLIB_LIB := libpt.$(PTLIB_VER).dll
+endif
+
+OPENLDAP_VER := 2.4.22
+OPENLDAP_DIR := $(BUILDROOT)/openldap-$(OPENLDAP_VER)
+OPENLDAP_ARCHIVE := openldap-$(OPENLDAP_VER).tgz
+OPENLDAP_URL := http://www.openldap.org/software/download/OpenLDAP/openldap-release
+
+LIBSASL2_VER := 2.1.22
+LIBSASL2_DIR := $(BUILDROOT)/cyrus-sasl-$(LIBSASL2_VER)
+LIBSASL2_ARCHIVE := cyrus-sasl-$(LIBSASL2_VER).zip
+LIBSASL2_URL := http://developer.pidgin.im/static/win32
+
+OGG_VER := 1.2.0
+OGG_DIR := $(BUILDROOT)/libogg-$(OGG_VER)
+OGG_ARCHIVE := libogg-$(OGG_VER).tar.gz
+OGG_URL := http://downloads.xiph.org/releases/ogg
+
+SPEEX_VER := 1.2rc1
+SPEEX_DIR := $(BUILDROOT)/speex-$(SPEEX_VER)
+SPEEX_ARCHIVE := speex-$(SPEEX_VER).tar.gz
+SPEEX_URL := http://downloads.xiph.org/releases/speex
+
+GTK_VER := 2.20.1-1
+GTK_URL := http://ftp.gnome.org/pub/gnome/binaries/win32/gtk+/2.20
+GTK_ARCHIVE := gtk+-dev_$(GTK_VER)_win32.zip
+
+# this is an installer, not a zip of files to be manually installed
+# see http://gtk-win.sourceforge.net for more information
+GTK_BIN_VER := 2.20
+GTK_INSTALLER_URL := #http://www.pateam.org/archive/tmp/ekiga-win32/trunk
+GTK_BIN_EXE := gtk2-runtime-2.20-2010-04-30-ts.exe
+
+GLIB_VER := 2.18.4-1
+GLIB_URL := http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.18
+GLIB_ARCHIVE := glib-dev_$(GLIB_VER)_win32.zip
+
+ATK_VER := 1.24.0-1
+ATK_URL := http://ftp.gnome.org/pub/gnome/binaries/win32/atk/1.24
+ATK_ARCHIVE := atk-dev_$(ATK_VER)_win32.zip
+
+CAIRO_VER := 1.8.6-1
+CAIRO_URL := http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies
+CAIRO_ARCHIVE := cairo-dev_$(CAIRO_VER)_win32.zip
+
+PANGO_VER := 1.24.5-2
+PANGO_URL := http://ftp.gnome.org/pub/gnome/binaries/win32/pango/1.24
+PANGO_ARCHIVE := pango-dev_$(PANGO_VER)_win32.zip
+
+XML2_VER := 2.7.7
+XML2_DIR := libxml2-$(XML2_VER)
+XML2_URL := ftp://xmlsoft.org/libxml2
+XML2_ARCHIVE := libxml2-$(XML2_VER).tar.gz
+
+LIBPNG_VER := 1.2.37
+GNUWIN32_URL := http://downloads.sourceforge.net/gnuwin32
+
+EXPAT_VER = 2.0.1
+EXPAT_DIR = $(BUILDROOT)/expat-$(EXPAT_VER)
+EXPAT_ARCHIVE := expat-$(EXPAT_VER).tar.gz
+EXPAT_URL := http://kent.dl.sourceforge.net/sourceforge/expat
+
+# choose commit 203e34 (2007-09-30), since since then a few modifications
+# have been done and the compilation needs to be updated
+REGEX_REV := 203e34
+REGEX_DIR := $(BUILDROOT)/regex
+REGEX_ARCHIVE := regex
+
+BOOST_VER := 1.43.0
+BOOST_URL := http://downloads.sourceforge.net/project/boost/boost/$(BOOST_VER)
+BOOST_ARCHIVE := boost_$(shell echo $(BOOST_VER)|tr . _).tar.gz
+BOOST_DIR := $(BUILDROOT)/boost_$(shell echo $(BOOST_VER)|tr . _)
+
+GETTEXT_VER := 0.17-1
+GETTEXT_URL :=http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies
+GETTEXT_ARCHIVE := gettext-runtime-dev-$(GETTEXT_VER).zip
+
+ICONV_VER := 1.9.2-1
+ICONV_URL := http://downloads.sourceforge.net/project/gnuwin32/libiconv/$(ICONV_VER)
+ICONV_ARCHIVE := libiconv-$(ICONV_VER)-bin.zip
+
+# use date for FFMPEG_VER, because it has two "repositories"
+FFMPEG_VER := {2009-04-14}
+FFMPEG_URL := svn://svn.mplayerhq.hu/ffmpeg/trunk
+FFMPEG_DIR := $(BUILDROOT)/ffmpeg
+FFMPEG_ARCHIVE := ffmpeg
+
+X264_VER := d2e1e1c35c43ea9c90c9211be
+X264_URL := git://git.videolan.org/x264.git
+X264_DIR := $(BUILDROOT)/x264
+X264_ARCHIVE := x264
+
+# note that every celt release might break API
+CELT_VER := 0.7.1
+CELT_URL := http://downloads.xiph.org/releases/celt
+CELT_DIR := $(BUILDROOT)/celt-$(CELT_VER)
+CELT_ARCHIVE := celt-$(CELT_VER).tar.gz
+
+THEORA_VER := 1.1.1
+THEORA_URL := http://downloads.xiph.org/releases/theora
+THEORA_DIR := $(BUILDROOT)/libtheora-$(THEORA_VER)
+THEORA_ARCHIVE := libtheora-$(THEORA_VER).tar.gz
+
+NSIS_VER := 2.46
+NSIS_URL := http://downloads.sourceforge.net/nsis
+NSISPROCESSES_URL := http://nsis.sourceforge.net/mediawiki/images/f/f3/
+NSISSYTEM_DIR := /usr/share/nsis/Contrib/Modern\ UI
+NSISPLUGIN_DIR := $(BUILDROOT)/nsisplugins
+
+LN:=ln
+RM:=rm
+CP:=cp
+MV:=mv
+SVN:=svn
+GIT:=git
+
+# additional help languages to be built, eg to build only C and fr use:
+# DOC_LINGUAS := fr
+DOC_LINGUAS := $(strip $(shell grep DOC_LINGUAS $(EKIGA_DIR)/help/Makefile.am | cut -d= -f2))
+
+confflags := --prefix=$(BUILDROOT) --build=$(DEB_BUILD_GNU_TYPE) --host=$(DEB_HOST_GNU_TYPE)
+
+confptlib := $(confflags) \
+	--enable-vfw --enable-vidfile --with-directx-includedir=$(EKIGA_DIR)/win32/directx \
+	--disable-qos --disable-vidfile --disable-alsa --disable-esd --disable-oss --disable-sunaudio --disable-shmaudio \
+	--disable-v4l --disable-v4l2 --disable-bsdvideo --disable-avc --disable-dc
+
+confopal := $(confflags) --with-ffmpeg-dir=$(FFMPEG_DIR) --disable-t38 --disable-fax
+
+confekiga:= $(confflags) \
+	--with-directx-dir=$(EKIGA_DIR)/win32/directx --prefix=$(EKIGA_PREFIX) \
+	--bindir=$(EKIGA_PREFIX) --datadir=$(EKIGA_PREFIX) \
+	--sysconfdir=$(EKIGA_PREFIX) --libdir=$(EKIGA_PREFIX) --disable-gnome \
+	--disable-dbus --disable-avahi --disable-xv \
+	--with-ldap-dir=$(OPENLDAP_DIR) --with-libsasl2-dir=$(LIBSASL2_DIR) --with-boost=$(BUILDROOT) # --enable-static-libs
+
+confffmpeg := --cross-prefix=i586-mingw32msvc- --enable-shared --enable-memalign-hack \
+	--enable-cross-compile --enable-w32threads --arch=i686 --target-os=mingw32 \
+	--disable-ffserver --disable-ffmpeg --disable-ffplay \
+	--disable-parsers --enable-parser=h264 --enable-parser=mpeg4video --enable-parser=h263 \
+	--disable-decoders --enable-decoder=h264 --enable-decoder=mpeg4  --enable-decoder=h263 \
+	--disable-muxers --enable-muxer=h264 --enable-muxer=mpeg4 --enable-muxer=h263 \
+	--disable-encoders --enable-encoder=mpeg4 --enable-encoder=h263 \
+	--disable-protocols --disable-bsfs --disable-ffplay --prefix=$(BUILDROOT) \
+	--libdir=$(LIBDIR) --extra-ldflags=-Wl,-static
+#	--disable-network
+
+confx264 := $(confflags) --disable-avs-input
+
+confcelt := $(confflags) --disable-oggtest
+
+conftheora := $(confflags) --disable-vorbistest --disable-sdltest --disable-examples --disable-spec
+
+confboost := --user-config=user-config.jam --layout=system variant=release threading=multi link=shared runtime-link=shared target-os=windows threadapi=win32 --without-math --without-python --without-mpi --without-serialization --without-test --without-thread --without-wave --without-date_time --without-system --without-filesystem --without-graph --without-graph_parallel --without-iostreams --without-program_options --without-regex --without-random -q stage
+
+all: binaries $(TARGETDIR)/$(EKIGA_INSTALLER)
+	@echo "Built on $(shell date)"
+
+update-sources::
+	@echo "Updating on $(shell date)"
+
+update: update-sources
+
+binaries:
+	@echo Checking prerequisites...
+	hash $(REALCC) $(REALCXX) $(LD) $(NM) $(AR) $(RANLIB) $(DLLTOOL) $(DLLWRAP) $(OBJDUMP) $(RC) $(AS)||(echo You need to install mingw32;exit 1)
+	hash tar unzip zip wget aclocal autoheader libtoolize automake autoconf pkg-config gnome-autogen.sh bison gdk-pixbuf-csource || (echo we need more binaries ; exit 1)
+	[ -f /usr/share/gnome-doc-utils/gnome-doc-utils.make ] || (echo gnome-doc-tools not installed; exit 1)
+	[ -f /usr/lib/pkgconfig/gconf-2.0.pc ] || (echo libgconf2-dev not installed; exit 1)
+	[ -f /usr/lib/pkgconfig/avahi-glib.pc ] || (echo libavahi-glib-dev not installed; exit 1)
+	[ -f /usr/lib/pkgconfig/avahi-client.pc ] || (echo libavahi-client-dev not installed; exit 1)
+	hash makensis || (echo nsis not installed; exit 1)
+	hash xmlto || (echo xmlto not installed; exit 1)
+	hash yasm || (echo yasm not installed, mandatory for x264; exit 1)
+#	[ $(BUILDROOT) = $(CURDIR) ] || (echo You are supposed to run this as Makefile in $(BUILDROOT); exit 1)
+	[ `grep define.*MINGW32_MINOR_VERSION /usr/i586-mingw32msvc/include/_mingw.h|tr -s " "|cut -d" " -f3` -ge 15 ] || (echo 'You need mingw32-runtime at version >= 3.15'; exit 1)
+	mkdir -p $(INCLUDEDIR) $(LIBDIR)/pkgconfig $(SRCDIR) $(BINDIR)
+	$(RM) -f $(BINDIR)/cygpath
+	$(LN) -s /bin/true $(BINDIR)/cygpath
+	touch $@
+
+### REGEX
+update-sources::
+	@echo "--- Getting libregex..."
+	mkdir -p $(SRCDIR)/$(REGEX_ARCHIVE)
+	cd $(SRCDIR)/$(REGEX_ARCHIVE); \
+	for i in regex.c regexec.c regex.h regex_internal.c regex_internal.h regcomp.c alloca_.h alloca.c localcharset.c localcharset.h; do \
+	  $(WGET) http://git.savannah.gnu.org/cgit/gnulib.git/plain/lib/$$i?id=$(REGEX_REV) -O $$i; \
+	done
+
+$(REGEX_DIR)/regex.h: $(SRCDIR)/$(REGEX_ARCHIVE)
+	$(RM) -rf $(REGEX_DIR)
+	mkdir -p $(REGEX_DIR)
+	$(CP) $(SRCDIR)/$(REGEX_ARCHIVE)/* $(REGEX_DIR)
+	$(MV) $(REGEX_DIR)/alloca_.h $(REGEX_DIR)/alloca.h
+	echo '//' >> $(REGEX_DIR)/config.h
+	touch $@
+
+$(LIBDIR)/libregex.a: binaries $(REGEX_DIR)/regex.h
+	cd $(REGEX_DIR) ;\
+	$(CC) -I$(INCLUDEDIR) -I. -c regex.c ;\
+	$(CC) -I$(INCLUDEDIR) -I. -c alloca.c ;\
+	$(CC) -I$(INCLUDEDIR) -I. -DLIBDIR=$(INCLUDEDIR) -c localcharset.c ;\
+	$(AR) r libregex.a regex.o alloca.o localcharset.o
+	$(CP) $(REGEX_DIR)/libregex.a $(LIBDIR)
+	$(CP) $(REGEX_DIR)/regex.h $(INCLUDEDIR)
+	$(CP) $(REGEX_DIR)/alloca.h $(INCLUDEDIR)
+	$(CP) $(REGEX_DIR)/localcharset.h $(INCLUDEDIR)
+	touch $@
+
+### boost
+update-sources::
+	@echo --- Getting libboost ...
+	$(WGET) -P src $(BOOST_URL)/$(BOOST_ARCHIVE)
+
+$(BOOST_DIR)/config.status: $(SRCDIR)/$(BOOST_ARCHIVE)
+	tar xfz $(SRCDIR)/$(BOOST_ARCHIVE)
+	cd $(BOOST_DIR); ./bootstrap.sh --prefix=$(BUILDROOT)
+	touch $@
+
+$(LIBDIR)/libboost_signals.dll: $(BOOST_DIR)/config.status
+	echo "using gcc : : i586-mingw32msvc-g++ : ;" >$(BOOST_DIR)/user-config.jam
+	cd $(BOOST_DIR); ./bjam $(confboost)
+	cd $(BOOST_DIR); ./bjam $(confboost) install
+
+### expat
+update-sources::
+	@echo --- Getting EXPAT ...
+	$(WGET) -P src $(EXPAT_URL)/$(EXPAT_ARCHIVE)
+
+$(EXPAT_DIR)/config.status: $(SRCDIR)/$(EXPAT_ARCHIVE)
+	tar xfz $(SRCDIR)/$(EXPAT_ARCHIVE)
+	cd $(EXPAT_DIR); ./configure $(confflags)
+
+$(INCLUDEDIR)/expat.h:
+	install -m 644 $(EXPAT_DIR)/lib/expat.h $(INCLUDEDIR)/
+	touch $@
+
+$(LIBDIR)/libexpat.a:  $(EXPAT_DIR)/config.status $(INCLUDEDIR)/expat.h
+	$(MAKE) $(MAKEOPTS) -C $(EXPAT_DIR)
+	$(MAKE) $(MAKEOPTS) -C $(EXPAT_DIR) install
+	touch $@
+
+### OPENLDAP
+update-sources::
+	@echo --- Getting OpenLDAP ...
+	$(WGET) -P $(SRCDIR) $(OPENLDAP_URL)/$(OPENLDAP_ARCHIVE)
+
+$(OPENLDAP_DIR)/configure: $(LIBDIR)/libregex.a $(SRCDIR)/$(OPENLDAP_ARCHIVE)
+	rm -f $(LIBDIR)/libldap.dll
+	tar xfz $(SRCDIR)/$(OPENLDAP_ARCHIVE) -C $(BUILDROOT)
+	sed -i -e 's#windres#$(RC)#g' $(OPENLDAP_DIR)/libraries/liblutil/Makefile.in
+	touch $@
+
+$(OPENLDAP_DIR)/config.status: binaries $(OPENLDAP_DIR)/configure
+	#-$(MAKE) -C $(OPENLDAP_DIR) clean
+	rm -f $(LIBDIR)/libldap.dll
+	$(LN) -sf $(INCLUDEDIR)/regex.h $(OPENLDAP_DIR)/include/
+	cd $(OPENLDAP_DIR); ./configure --with-cyrus-sasl=no --enable-bdb=no --enable-hdb=no $(confflags)
+	$(MAKE) $(MAKEOPTS) -C $(OPENLDAP_DIR) depend
+	touch $@
+
+$(LIBDIR)/libldap.dll: binaries $(OPENLDAP_DIR)/config.status
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(OPENLDAP_DIR)/libraries/liblutil
+	$(CP) -f $(OPENLDAP_DIR)/libraries/liblutil/liblutil.a $(LIBDIR)
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(OPENLDAP_DIR)/libraries/liblber all install
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(OPENLDAP_DIR)/include install
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(OPENLDAP_DIR)/libraries/libldap MOD_LIBS="-llutil" all install
+	touch $@
+
+### libsasl2
+update-sources::
+	echo --- Getting libsasl2 ...
+	$(WGET) -P $(SRCDIR) $(LIBSASL2_URL)/$(LIBSASL2_ARCHIVE)
+
+$(LIBDIR)/libsasl2.a: $(SRCDIR)/$(LIBSASL2_ARCHIVE)
+	rm -f $(LIBDIR)/libsasl2.a
+	rm -rf $(LIBSASL2_DIR)
+	unzip -u $(SRCDIR)/$(LIBSASL2_ARCHIVE) -d $(BUILDROOT)
+	cp $(LIBSASL2_DIR)/lib/libsasl.lib $(LIBDIR)/libsasl2.a
+
+### PTLib
+update-sources::
+	@echo --- Getting PTLib ...
+ifeq ($(RELEASE),1)
+	$(WGET) -P $(SRCDIR) $(PTLIB_URL)/$(PTLIB_ARCHIVE)
+else
+	$(SVN) co $(PTLIB_URL) $(SRCDIR)/$(PTLIB_ARCHIVE) -r $(PTLIB_REV)
+endif
+
+$(PTLIB_DIR)/configure: binaries $(LIBDIR)/libldap.dll $(LIBDIR)/libogg.a $(LIBDIR)/libspeex.a $(SRCDIR)/$(PTLIB_ARCHIVE) $(LIBDIR)/libexpat.a
+	rm -rf $(PTLIB_DIR) $(LIBDIR)/$(PTLIB_LIB) $(INCLUDEDIR)/ptclib $(INCLUDEDIR)/ptlib
+ifeq ($(RELEASE),1)
+	tar xfz $(SRCDIR)/$(PTLIB_ARCHIVE) -C $(BUILDROOT)
+else
+	$(CP) -r $(SRCDIR)/$(PTLIB_ARCHIVE) $(PTLIB_DIR)
+endif
+	# apply all ptlib_* patches
+	cd $(PTLIB_DIR); for i in $(EKIGA_DIR)/win32/diff/ptlib_*; do \
+		test `basename $$i` != 'ptlib_*' && (patch -p1 <$$i || exit 1) ;\
+	done; true
+	touch $@
+
+$(PTLIB_DIR)/config.status: binaries $(PTLIB_DIR)/configure
+	rm -f $(LIBDIR)/$(PTLIB_LIB)
+	cd $(PTLIB_DIR); ./configure $(confptlib)
+
+$(LIBDIR)/$(PTLIB_LIB): binaries $(PTLIB_DIR)/config.status
+ifeq ($(DEBUG),1)
+	$(MAKE) $(MAKEOPTS) DEBUG=1 debug -C $(PTLIB_DIR)
+	$(MAKE) DEBUG=1 -C $(PTLIB_DIR) install
+else
+	$(MAKE) $(MAKEOPTS) -C $(PTLIB_DIR)
+	$(MAKE) -C $(PTLIB_DIR) install
+endif
+
+### libogg
+update-sources::
+	@echo --- Getting Ogg ...
+	$(WGET) -P $(SRCDIR) $(OGG_URL)/$(OGG_ARCHIVE)
+
+$(OGG_DIR)/config.status: binaries $(SRCDIR)/$(OGG_ARCHIVE)
+	rm -f $(LIBDIR)/libogg.a
+	tar xfz $(SRCDIR)/$(OGG_ARCHIVE) -C $(BUILDROOT)
+	cd $(OGG_DIR); ./configure $(confflags)
+
+$(LIBDIR)/libogg.a: binaries $(OGG_DIR)/config.status
+	rm -f $(LIBDIR)/libogg.a
+	$(MAKE) $(MAKEOPTS) -C $(OGG_DIR)
+	$(MAKE) -C $(OGG_DIR) install
+
+### libspeex
+update-sources::
+	@echo --- Getting Vorbis ...
+	$(WGET) -P $(SRCDIR) $(SPEEX_URL)/$(SPEEX_ARCHIVE)
+
+$(SPEEX_DIR)/config.status: binaries $(SRCDIR)/$(SPEEX_ARCHIVE)
+	rm -f $(LIBDIR)/libspeex.a
+	tar xfz $(SRCDIR)/$(SPEEX_ARCHIVE) -C $(BUILDROOT)
+	cd $(SPEEX_DIR); LDFLAGS="$(LDFLAGS) -no-undefined" ./configure $(confflags)
+
+$(LIBDIR)/libspeex.a: binaries $(SPEEX_DIR)/config.status
+	rm -f $(LIBDIR)/libspeex.a
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(SPEEX_DIR)
+	$(MAKE) -C $(SPEEX_DIR) install
+
+### ffmpeg
+update-sources::
+	@echo --- Getting FFMPEG ...
+# ffmpeg has two "repositories" (ffmpeg and libswscale) into their
+# repository, so process them separately
+ifeq ($(wildcard $(SRCDIR)/$(FFMPEG_ARCHIVE)),)
+	$(SVN) co $(FFMPEG_URL) $(SRCDIR)/$(FFMPEG_ARCHIVE) -r $(FFMPEG_VER)
+else
+	cd $(SRCDIR)/$(FFMPEG_ARCHIVE); $(SVN) up --ignore-externals -r $(FFMPEG_VER)
+endif
+	cd $(SRCDIR)/$(FFMPEG_ARCHIVE); $(SVN) up -r $(FFMPEG_VER) libswscale
+
+$(FFMPEG_DIR)/config.status: $(SRCDIR)/$(FFMPEG_ARCHIVE)
+	rm -rf $(FFMPEG_DIR)
+	$(CP) -r $(SRCDIR)/$(FFMPEG_ARCHIVE) $(FFMPEG_DIR)
+	cd $(FFMPEG_DIR); ./configure $(confffmpeg)
+	touch $@
+
+$(BINDIR)/avcodec.dll: $(FFMPEG_DIR)/config.status
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(FFMPEG_DIR)/libavutil
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(FFMPEG_DIR)/libavcodec
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(FFMPEG_DIR)/libavformat
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(FFMPEG_DIR)/libavdevice
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(FFMPEG_DIR)
+	$(MAKE) -C $(FFMPEG_DIR) install
+	touch $@
+
+### x264
+update-sources::
+	@echo --- Getting x264 ...
+ifeq ($(wildcard $(SRCDIR)/$(X264_ARCHIVE)), )
+	$(GIT) clone $(X264_URL) $(SRCDIR)/$(X264_ARCHIVE)
+endif
+	cd $(SRCDIR)/$(X264_ARCHIVE); git reset --hard $(X264_VER)
+	#touch $(SRCDIR)/$(X264_ARCHIVE)
+
+$(X264_DIR)/config.status: $(SRCDIR)/$(X264_ARCHIVE)
+	rm -rf $(X264_DIR)
+	$(CP) -r $(SRCDIR)/$(X264_ARCHIVE) $(X264_DIR)
+	cd $(X264_DIR); CC=$(REALCC) ./configure $(confx264); \
+	sed -i -e 's#ranlib#$(RANLIB)#g' $(X264_DIR)/Makefile; \
+	sed -i -e 's#strip#$(STRIP)#g' $(X264_DIR)/Makefile; \
+	sed -i -e 's#ar #$(AR) #g' $(X264_DIR)/Makefile
+	touch $@
+
+$(LIBDIR)/libx264.a: $(X264_DIR)/config.status
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(X264_DIR)
+	$(MAKE) -C $(X264_DIR) install
+
+### celt
+update-sources::
+	echo --- Getting CELT ...
+	$(WGET) -P $(SRCDIR) $(CELT_URL)/$(CELT_ARCHIVE)
+
+$(CELT_DIR)/config.status: $(SRCDIR)/$(CELT_ARCHIVE) $(LIBDIR)/libogg.a
+	rm -rf $(CELT_DIR) $(INCLUDEDIR)/celt
+	tar xfz $(SRCDIR)/$(CELT_ARCHIVE) -C $(BUILDROOT)
+	cd $(CELT_DIR); ./configure $(confcelt)
+
+$(LIBDIR)/libcelt0.a: $(CELT_DIR)/config.status
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(CELT_DIR)
+	$(MAKE) -C $(CELT_DIR) install
+
+### theora
+update-sources::
+	@echo --- Getting theora ...
+	$(WGET) -P $(SRCDIR) $(THEORA_URL)/$(THEORA_ARCHIVE)
+
+$(THEORA_DIR)/config.status: $(SRCDIR)/$(THEORA_ARCHIVE) $(LIBDIR)/libogg.a
+	rm -rf $(THEORA_DIR)
+	tar xfz $(SRCDIR)/$(THEORA_ARCHIVE) -C $(BUILDROOT)
+	cd $(THEORA_DIR); CC=$(REALCC) LD=$(LD) AR=$(AR) RANLIB=$(RANLIB) ./autogen.sh $(conftheora)
+
+$(LIBDIR)/libtheora.a: $(THEORA_DIR)/config.status
+	$(MAKE) $(MAKE_LIB_OPTS) -C $(THEORA_DIR)
+	$(MAKE) -C $(THEORA_DIR) install
+	sed -i -e "s#library_names=''#library_names='libtheora\.a'#g" $(LIBDIR)/libtheora.la
+
+### OPAL
+update-sources::
+	@echo --- Getting OPAL ...
+ifeq ($(RELEASE),1)
+	$(WGET) -P $(SRCDIR) $(OPAL_URL)/$(OPAL_ARCHIVE)
+else
+	$(SVN) co $(OPAL_URL) $(SRCDIR)/$(OPAL_ARCHIVE) -r $(OPAL_REV)
+endif
+
+$(OPAL_DIR)/configure: binaries $(LIBDIR)/libogg.a $(LIBDIR)/libspeex.a $(LIBDIR)/$(PTLIB_LIB) $(SRCDIR)/$(OPAL_ARCHIVE) $(BINDIR)/avcodec.dll $(LIBDIR)/libx264.a $(LIBDIR)/libcelt0.a $(LIBDIR)/libtheora.a
+	rm -rf $(OPAL_DIR) $(LIBDIR)/$(OPAL_LIB) $(INCLUDEDIR)/opal
+ifeq ($(RELEASE),1)
+	tar xfz $(SRCDIR)/$(OPAL_ARCHIVE) -C $(BUILDROOT)
+else
+	$(CP) -r $(SRCDIR)/$(OPAL_ARCHIVE) $(OPAL_DIR)
+endif
+	# apply all opal_* patches
+	cd $(OPAL_DIR); for i in $(EKIGA_DIR)/win32/diff/opal_*; do \
+		test `basename $$i` != 'opal_*' && (patch -p1 <$$i || exit 1) ;\
+	done; true
+	touch $@
+
+$(OPAL_DIR)/config.status: binaries $(OPAL_DIR)/configure
+	rm -f $(LIBDIR)/$(OPAL_LIB)
+ifeq ($(DEBUG),1)
+	cd $(OPAL_DIR); ./configure $(confopal) --enable-debug
+else
+	cd $(OPAL_DIR); ./configure $(confopal)
+endif
+
+$(LIBDIR)/$(OPAL_LIB): binaries $(OPAL_DIR)/config.status
+	rm -f $(LIBDIR)/$(OPAL_LIB)
+	$(MAKE) $(MAKEOPTS) -C $(OPAL_DIR)
+	$(MAKE) -C $(OPAL_DIR) install
+#	sed -i -e 's#^prefix=.*$$#prefix=$(BUILDROOT)#g' $(LIBDIR)/pkgconfig/opal*.pc
+
+### libgtk
+update-sources::
+	@echo --- Getting GTK2+ ...
+	$(WGET) -P $(SRCDIR) $(GTK_URL)/$(GTK_ARCHIVE)
+
+$(LIBDIR)/pkgconfig/gtk+-2.0.pc: $(SRCDIR)/$(GTK_ARCHIVE)
+	unzip -u $(SRCDIR)/$(GTK_ARCHIVE) -d $(BUILDROOT)
+	sed -i -e 's#^prefix=.*$$#prefix=$(BUILDROOT)#g' $(LIBDIR)/pkgconfig/g*.pc
+	touch $@
+
+### GTK Runtime
+update-sources::
+	@echo --- Getting GTK2+ Runtime Library ...
+	$(WGET) -P $(SRCDIR) $(GTK_INSTALLER_URL)/$(GTK_BIN_EXE)
+
+$(LIBDIR)/gtk+-$(GTK_BIN_VER)-setup.exe: $(SRCDIR)/$(GTK_BIN_EXE)
+	$(CP) $(SRCDIR)/$(GTK_BIN_EXE)  $(LIBDIR)/gtk+-$(GTK_BIN_VER)-setup.exe
+	touch $@
+
+### libglib
+# already found in gtk runtime, but needed for compilation
+update-sources::
+	@echo --- Getting GLib ...
+	$(WGET) -P $(SRCDIR) $(GLIB_URL)/$(GLIB_ARCHIVE)
+
+$(LIBDIR)/pkgconfig/glib-2.0.pc: $(SRCDIR)/$(GLIB_ARCHIVE)
+	unzip -u $(SRCDIR)/$(GLIB_ARCHIVE) -d $(BUILDROOT)
+	sed -i -e 's#^prefix=.*$$#prefix=$(BUILDROOT)#g' $(LIBDIR)/pkgconfig/g*.pc $(BINDIR)/glib-gettextize
+	chmod +x $(BINDIR)/glib-gettextize
+	touch $@
+
+### atk
+# already found in gtk runtime, but needed for compilation
+update-sources::
+	@echo --- Getting ATK ...
+	$(WGET) -P  $(SRCDIR) $(ATK_URL)/$(ATK_ARCHIVE)
+
+$(LIBDIR)/pkgconfig/atk-2.0.pc: $(SRCDIR)/$(ATK_ARCHIVE)
+	unzip -u $(SRCDIR)/$(ATK_ARCHIVE) -d $(BUILDROOT)
+	sed -i -e 's#^prefix=.*$$#prefix=$(BUILDROOT)#g' $(LIBDIR)/pkgconfig/atk*.pc
+	touch $@
+
+### libpng
+update-sources::
+	@echo --- Getting PNG ...
+	$(WGET) -P $(SRCDIR) $(GNUWIN32_URL)/libpng-$(LIBPNG_VER)-bin.zip
+	$(WGET) -P $(SRCDIR) $(GNUWIN32_URL)/libpng-$(LIBPNG_VER)-dep.zip
+	$(WGET) -P $(SRCDIR) $(GNUWIN32_URL)/libpng-$(LIBPNG_VER)-lib.zip
+
+$(LIBDIR)/libpng.a: $(SRCDIR)/libpng-$(LIBPNG_VER)-bin.zip $(SRCDIR)/libpng-$(LIBPNG_VER)-dep.zip $(SRCDIR)/libpng-$(LIBPNG_VER)-lib.zip
+	unzip -u $(SRCDIR)/libpng-$(LIBPNG_VER)-bin.zip -d $(BUILDROOT)
+	unzip -u $(SRCDIR)/libpng-$(LIBPNG_VER)-dep.zip -d $(BUILDROOT)
+	unzip -u $(SRCDIR)/libpng-$(LIBPNG_VER)-lib.zip -d $(BUILDROOT)
+	sed -i -e 's#^prefix=.*$$#prefix=$(BUILDROOT)#g' lib/pkgconfig/libpng*.pc
+	$(LN) -s -f libpng.pc lib/pkgconfig/libpng12.pc
+	touch $@
+
+### libintl
+update-sources::
+	@echo --- Getting Gettext ...
+	$(WGET) -P $(SRCDIR) $(GETTEXT_URL)/$(GETTEXT_ARCHIVE)
+
+$(LIBDIR)/libintl.a: $(SRCDIR)/$(GETTEXT_ARCHIVE)
+	unzip -u $(SRCDIR)/$(GETTEXT_ARCHIVE) -d $(BUILDROOT)
+	touch $@
+
+### libiconv
+update-sources::
+	@echo --- Getting Iconv ...
+	$(WGET) -P $(SRCDIR) $(ICONV_URL)/$(ICONV_ARCHIVE)
+
+$(LIBDIR)/libiconv.a: $(SRCDIR)/$(ICONV_ARCHIVE)
+	unzip -u $(SRCDIR)/$(ICONV_ARCHIVE) -d $(BUILDROOT)
+	$(RM) -f README.libiconv
+	touch $@
+
+### pango
+# already found in gtk runtime, but needed for compilation
+update-sources::
+	@echo --- Getting Pango ...
+	$(WGET) -P $(SRCDIR) $(PANGO_URL)/$(PANGO_ARCHIVE)
+
+$(LIBDIR)/pkgconfig/pango32.pc: $(SRCDIR)/$(PANGO_ARCHIVE)
+	unzip -u $(SRCDIR)/$(PANGO_ARCHIVE) -d $(BUILDROOT)
+	sed -i -e 's#^prefix=.*$$#prefix=$(BUILDROOT)#g' $(LIBDIR)/pkgconfig/pango*.pc
+	touch $@
+
+### cairo
+# already found in gtk runtime, but needed for compilation
+update-sources::
+	@echo --- Getting Cairo ...
+	$(WGET) -P $(SRCDIR) $(CAIRO_URL)/$(CAIRO_ARCHIVE)
+
+$(LIBDIR)/pkgconfig/cairo.pc: $(SRCDIR)/$(CAIRO_ARCHIVE)
+	unzip -u $(SRCDIR)/$(CAIRO_ARCHIVE) -d $(BUILDROOT)
+	sed -i -e 's#^prefix=.*$$#prefix=$(BUILDROOT)#g' $(LIBDIR)/pkgconfig/cairo*.pc
+	touch $@
+
+### libxml2
+update-sources::
+	@echo --- Getting libXML2 ...
+	$(WGET) -P $(SRCDIR) $(XML2_URL)/$(XML2_ARCHIVE)
+
+$(XML2_DIR)/config.status: binaries $(SRCDIR)/$(XML2_ARCHIVE)
+	rm -f $(LIBDIR)/libxml2.a
+	tar xfz $(SRCDIR)/$(XML2_ARCHIVE) -C $(BUILDROOT)
+	cd $(XML2_DIR); ./configure $(confflags) --without-python
+
+$(LIBDIR)/libxml2.a: binaries $(XML2_DIR)/config.status
+	rm -f $(LIBDIR)/libxml2.a
+	$(MAKE) $(MAKEOPTS) -C $(XML2_DIR)
+	$(MAKE) $(MAKEOPTS) -C $(XML2_DIR) install
+
+### ekiga
+update-sources::
+	@echo --- Getting Ekiga ...
+ifeq ($(RELEASE),1)
+	$(WGET) -P $(SRCDIR) $(EKIGA_URL)/$(EKIGA_ARCHIVE)
+else
+ifeq ($(wildcard $(SRCDIR)/$(EKIGA_ARCHIVE)), )
+	$(GIT) clone $(EKIGA_URL) $(SRCDIR)/$(EKIGA_ARCHIVE)
+	# switch to branch
+	cd $(SRCDIR)/$(EKIGA_ARCHIVE); git $(GIT_EKIGA_REV)
+else
+	cd $(SRCDIR)/$(EKIGA_ARCHIVE); $(GIT) pull
+endif
+endif
+
+$(EKIGA_DIR)/configure: binaries $(SRCDIR)/$(EKIGA_ARCHIVE)
+	rm -rf $(EKIGA_DIR)
+ifeq ($(RELEASE),1)
+	tar xfz $(SRCDIR)/$(EKIGA_ARCHIVE) -C $(BUILDROOT)
+else
+	$(CP) -r $(SRCDIR)/$(EKIGA_ARCHIVE) $(EKIGA_DIR)
+	cd $(EKIGA_DIR); NOCONFIGURE=1 ./autogen.sh  # generate configure
+endif
+	# apply all ekiga_* patches
+	cd $(EKIGA_DIR); for i in $(EKIGA_DIR)/win32/diff/ekiga_*; do \
+		test `basename $$i` != 'ekiga_*' && (patch -p1 <$$i || exit 1) ;\
+	done; true
+	touch $@
+
+$(EKIGA_DIR)/config.status: binaries $(EKIGA_DIR)/configure $(LIBDIR)/$(PTLIB_LIB) $(LIBDIR)/$(OPAL_LIB) \
+	$(LIBDIR)/pkgconfig/gtk+-2.0.pc $(LIBDIR)/pkgconfig/atk-2.0.pc $(LIBDIR)/pkgconfig/glib-2.0.pc \
+	$(LIBDIR)/libpng.a $(LIBDIR)/pkgconfig/pango32.pc $(LIBDIR)/pkgconfig/cairo.pc $(LIBDIR)/libxml2.a \
+	$(LIBDIR)/libintl.a $(LIBDIR)/libiconv.a $(LIBDIR)/libboost_signals.dll $(LIBDIR)/libsasl2.a
+	rm -f $(EKIGA_DIR)/src/ekiga.exe
+ifeq ($(DEBUG),1)
+	cd $(EKIGA_DIR); ACLOCAL_FLAGS="-I $(BUILDROOT)/share/aclocal" LDFLAGS="$(LDFLAGS) -Wl,-subsystem,windows" ./configure $(confekiga) --enable-opal-debug
+else
+	cd $(EKIGA_DIR); ACLOCAL_FLAGS="-I $(BUILDROOT)/share/aclocal" LDFLAGS="$(LDFLAGS) -Wl,-subsystem,windows" ./configure $(confekiga)
+endif
+
+$(EKIGA_DIR)/src/ekiga.exe: binaries $(EKIGA_DIR)/config.status
+	$(MAKE) $(MAKEOPTS) -C $(EKIGA_DIR)
+	$(MAKE) $(MAKEOPTS) -C $(EKIGA_DIR)/help
+
+$(TARGETDIR)/zips: binaries $(EKIGA_DIR)/src/ekiga.exe
+	$(RM) -rf $(TARGETDIR)
+	mkdir $(TARGETDIR)
+	make -C $(EKIGA_DIR) install
+
+	mkdir -p $(EKIGA_PREFIX)/plugins
+	for plugin in $(LIBDIR)/opal*/codecs/audio/*; do \
+		install -m 755 $$plugin $(EKIGA_PREFIX)/plugins ;\
+	done
+	for plugin in $(LIBDIR)/opal*/codecs/video/*; do \
+		install -m 755 $$plugin $(EKIGA_PREFIX)/plugins ;\
+	done
+	for lib in $(PTLIB_LIB) $(OPAL_LIB) libboost_signals.dll; do \
+		install -m 755 $(LIBDIR)/$$lib $(EKIGA_PREFIX) ;\
+	done
+	for lib in liblber.dll libldap.dll libxml2-2.dll libspeex-1.dll libspeexdsp-1.dll libtheora-0.dll avcodec-52.dll avutil-50.dll libogg-0.dll; do \
+		install -m 755 $(BINDIR)/$$lib $(EKIGA_PREFIX) ;\
+	done
+	cd $(EKIGA_PREFIX); cp /usr/share/doc/mingw32-runtime/mingwm10.dll.gz . && gunzip mingwm10.dll.gz
+ifeq ($(DEBUG),0)
+	$(STRIP) $(EKIGA_PREFIX)/*.dll
+	$(STRIP) $(EKIGA_PREFIX)/*.exe
+	$(STRIP) $(EKIGA_PREFIX)/plugins/*.dll
+	$(STRIP) $(EKIGA_PREFIX)/plugins/*.exe
+endif
+	# we cannot strip MS compiled dlls
+	install -m 755 $(LIBSASL2_DIR)/bin/libsasl.dll $(EKIGA_PREFIX)
+
+	# for RELEASE=0 ekiga.xml files do not exist, so create them
+	for lc in C $(DOC_LINGUAS); do \
+		mkdir -p $(EKIGA_PREFIX)/help/$$lc; \
+		test $$lc != "C" -a ! -f $(EKIGA_DIR)/help/$$lc/ekiga.xml && xml2po -m docbook -e -p $(EKIGA_DIR)/help/$$lc/$$lc.po $(EKIGA_DIR)/help/C/ekiga.xml >$(EKIGA_DIR)/help/$$lc/ekiga.xml ; \
+		if test -f $(EKIGA_DIR)/help/$$lc/ekiga.xml; then \
+			xmlto -o $(EKIGA_PREFIX)/help/$$lc/ --skip-validation html $(EKIGA_DIR)/help/$$lc/ekiga.xml; \
+		fi ;\
+		install -m 644 $(EKIGA_DIR)/help/$$lc/ekiga.xml $(EKIGA_PREFIX)/help/$$lc;\
+		if test -d $(EKIGA_DIR)/help/$$lc/figures; then \
+			mkdir -p $(EKIGA_PREFIX)/help/$$lc/figures; \
+			install -m 644 $(EKIGA_DIR)/help/$$lc/figures/*.png $(EKIGA_PREFIX)/help/$$lc/figures; \
+		fi \
+	done
+
+	#cd $(TARGETDIR); zip -9r ekiga-$(EKIGA_VER).zip Ekiga
+	#zip -9r $(TARGETDIR)/ekiga_build-$(EKIGA_VER).zip Makefile #$(EKIGA_WIN32_DIFF_DIR)
+	#tar cfvz $(TARGETDIR)/ekiga_build-$(EKIGA_VER).tgz Makefile #$(EKIGA_WIN32_DIFF_DIR)
+	touch $@
+
+# Two additional plugins are needed from nsis:
+# - System.dll, included in nsis distribution
+# - Processes.dll, not included in nsis distribution
+update-sources::
+	@echo --- Getting NSIS Installer ...
+	$(WGET) -P $(SRCDIR) $(NSIS_URL)/nsis-$(NSIS_VER).zip
+
+$(NSISPLUGIN_DIR)/SystemLocal.dll: $(SRCDIR)/nsis-$(NSIS_VER).zip
+	mkdir -p $(NSISPLUGIN_DIR)
+	unzip -u -j $(SRCDIR)/nsis-$(NSIS_VER).zip nsis-$(NSIS_VER)/Plugins/System.dll -d $(NSISPLUGIN_DIR)
+	$(MV) $(NSISPLUGIN_DIR)/System.dll $(NSISPLUGIN_DIR)/SystemLocal.dll
+	touch $@
+
+update-sources::
+	@echo --- Getting NSIS Processes Plugin ...
+	$(WGET) -P $(SRCDIR) $(NSISPROCESSES_URL)/Processes.zip
+
+$(NSISPLUGIN_DIR)/Processes.dll: $(SRCDIR)/Processes.zip
+	mkdir -p $(NSISPLUGIN_DIR)
+	unzip -u -j $(SRCDIR)/Processes.zip setup-processes/bin/Processes.dll -d $(NSISPLUGIN_DIR)
+	touch $@
+
+$(TARGETDIR)/$(EKIGA_INSTALLER): $(TARGETDIR)/zips $(LIBDIR)/gtk+-$(GTK_BIN_VER)-setup.exe $(NSISPLUGIN_DIR)/SystemLocal.dll $(NSISPLUGIN_DIR)/Processes.dll
+	makensis -DEKIGA_VERSION=$(EKIGA_VER) -DEKIGA_DIR=$(EKIGA_DIR) \
+		-DINSTALLER_DIR=$(EKIGA_INSTALLER_DIR) -DLIB_DIR=$(LIBDIR) \
+		-DTARGET_DIR=$(TARGETDIR) -DWITH_GTK=true -DGTK_VERSION=$(GTK_BIN_VER) \
+		-DNSISSYSTEMDIR=$(NSISSYTEM_DIR) -DNSISPLUGINDIR=$(NSISPLUGIN_DIR) \
+		-DDEBUG=$(DEBUG) $(EKIGA_INSTALLER_DIR)/ekiga.nsi
+
+clean:
+	$(RM) -rf $(TARGETDIR)
+
+distclean:
+	$(RM) -rf $(OPENLDAP_DIR)
+	$(RM) -rf $(LIBSASL2_DIR)
+	$(RM) -rf $(BUILDROOT)/share/
+	$(RM) -rf $(BINDIR)
+	$(RM) -rf $(BUILDROOT)/contrib
+	$(RM) -rf $(BUILDROOT)/etc
+	$(RM) -rf $(INCLUDEDIR)
+	$(RM) -rf $(LIBDIR)
+	$(RM) -rf $(OGG_DIR)
+	$(RM) -rf $(XML2_DIR)
+	$(RM) -rf $(BUILDROOT)/man
+	$(RM) -rf $(BUILDROOT)/manifest
+	$(RM) -rf $(OPAL_DIR)
+	$(RM) -rf $(EKIGA_DIR)
+	$(RM) -rf $(PTLIB_DIR)
+	$(RM) -rf $(REGEX_DIR)
+	$(RM) -rf $(BOOST_DIR)
+	$(RM) -rf $(SPEEX_DIR)
+	$(RM) -rf $(EXPAT_DIR)
+	$(RM) -rf $(FFMPEG_DIR)
+	$(RM) -rf $(X264_DIR)
+	$(RM) -rf $(THEORA_DIR)
+	$(RM) -rf $(CELT_DIR)
+	$(RM) -rf $(NSISPLUGIN_DIR)
+	$(RM) -rf make
+	$(RM) -f binaries
+#	$(RM) -rf $(SRCDIR)
+
+.PHONY: clean distclean update update-sources
diff --git a/win32/diff/README b/win32/diff/README
new file mode 100644
index 0000000..b43a8fa
--- /dev/null
+++ b/win32/diff/README
@@ -0,0 +1,8 @@
+This directory is for temporary patches of ptlib, opal and ekiga which
+wait to be finished and be integrated upstream.
+
+Each patch whose filename starts with ptlib_ will automatically be
+used before building ptlib (but you need to trigger manually ptlib
+building).  The same for opal and ekiga.
+
+Look for "patch" string in ../Makefile to have more information.
diff --git a/win32/diff/ekiga_sticonmenu1.patch b/win32/diff/ekiga_sticonmenu1.patch
new file mode 100644
index 0000000..f9defcb
--- /dev/null
+++ b/win32/diff/ekiga_sticonmenu1.patch
@@ -0,0 +1,20 @@
+# removes ugliness of popup menu of icon from task bar on Windows
+# see http://www.mail-archive.com/ekiga-devel-list gnome org/msg03181.html and http://stackoverflow.com/questions/1138891/gtk-statusicon-and-gtk-menu-on-windows
+# it is not integrated in ekiga because this bug will probably be fixed
+#   by future GTK+ releases
+
+diff -ur ekiga.orig/src/gui/statusicon.cpp ekiga/src/gui/statusicon.cpp
+--- ekiga.orig/src/gui/statusicon.cpp	2009-08-31 14:04:57.000000000 +0200
++++ ekiga/src/gui/statusicon.cpp	2009-08-31 14:05:17.000000000 +0200
+@@ -246,7 +246,11 @@
+ 
+   gtk_menu_popup (GTK_MENU (popup),
+                   NULL, NULL, 
++#ifdef WIN32
++                  NULL, NULL,
++#else
+                   (GtkMenuPositionFunc)gtk_status_icon_position_menu, icon,
++#endif
+                   button, activate_time);
+ }
+ 
diff --git a/win32/diff/ekiga_sticonmenu2.patch b/win32/diff/ekiga_sticonmenu2.patch
new file mode 100644
index 0000000..4706629
--- /dev/null
+++ b/win32/diff/ekiga_sticonmenu2.patch
@@ -0,0 +1,52 @@
+diff -ur ekiga.orig/src/gui/statusicon.cpp ekiga/src/gui/statusicon.cpp
+--- ekiga.orig/src/gui/statusicon.cpp	2009-09-22 15:39:44.000000000 +0200
++++ ekiga/src/gui/statusicon.cpp	2009-09-22 15:50:16.000000000 +0200
+@@ -92,6 +92,13 @@
+                     guint activate_time,
+                     gpointer data);
+ 
++#ifdef WIN32
++static gint
++hide_popup_menu_cb (GtkWidget *widget,
++                    GdkEventButton *event,
++                    gpointer data);
++#endif
++
+ static void
+ statusicon_activated_cb (GtkStatusIcon *icon,
+                          gpointer data);
+@@ -254,6 +261,22 @@
+                   button, activate_time);
+ }
+ 
++#ifdef WIN32
++static gint
++hide_popup_menu_cb (G_GNUC_UNUSED GtkWidget *widget,
++                    G_GNUC_UNUSED GdkEventButton *event,
++                    gpointer data)
++{
++  GtkWidget *popup = GTK_WIDGET (data);
++
++  if (GTK_WIDGET_VISIBLE (popup)) {
++    gtk_menu_popdown (GTK_MENU (popup));
++    return TRUE;
++  }
++  else
++    return FALSE;
++}
++#endif
+ 
+ static void
+ statusicon_activated_cb (G_GNUC_UNUSED GtkStatusIcon *icon,
+@@ -567,6 +590,11 @@
+   g_signal_connect (self, "popup-menu",
+                     G_CALLBACK (show_popup_menu_cb), self->priv->popup_menu);
+ 
++#ifdef WIN32
++  g_signal_connect (self, "button_press_event",
++                    G_CALLBACK (hide_popup_menu_cb), self->priv->popup_menu);
++#endif
++
+   g_signal_connect (self, "activate",
+                     G_CALLBACK (statusicon_activated_cb), self);
+ 
diff --git a/win32/diff/ekiga_sticonmenu3.patch b/win32/diff/ekiga_sticonmenu3.patch
new file mode 100644
index 0000000..4888085
--- /dev/null
+++ b/win32/diff/ekiga_sticonmenu3.patch
@@ -0,0 +1,22 @@
+# see http://www.mail-archive.com/ekiga-devel-list gnome org/msg03181.html
+# written by Michael Rickmann
+
+diff -ur ekiga.orig/src/gui/statusicon.cpp ekiga/src/gui/statusicon.cpp
+--- ekiga.orig/src/gui/statusicon.cpp	2009-09-22 17:15:05.000000000 +0200
++++ ekiga/src/gui/statusicon.cpp	2009-09-22 17:16:17.000000000 +0200
+@@ -296,11 +296,14 @@
+       gtk_widget_show (window);
+     }
+     else {
+-
++#ifndef WIN32
+       if (gtk_window_has_toplevel_focus (GTK_WINDOW (window)))
++#endif
+         gtk_widget_hide (window);
++#ifndef WIN32
+       else
+         gtk_window_present (GTK_WINDOW (window));
++#endif
+     }
+   }
+   else {
diff --git a/win32/nsisinstaller/ekiga.nsi b/win32/nsisinstaller/ekiga.nsi
index 62e89ac..b85b0d0 100644
--- a/win32/nsisinstaller/ekiga.nsi
+++ b/win32/nsisinstaller/ekiga.nsi
@@ -1,14 +1,8 @@
-; Ekiga.nsi
-; ====================================================
 ; NSIS Installer for Ekiga Win32
-; Original Authors: Herman Bloggs <hermanator12002 yahoo com> 
+; Original Authors: Herman Bloggs <hermanator12002 yahoo com>
 ; and Daniel Atallah <daniel_atallah yahoo com> (GAIM Installler)
 ; Original version : Installer for Ekiga win32
-; Update: Luba Vincent <luba novacom be>
-; Installer Version: 1.0
 ; Created : 09/01/06
-; Last Update: 10/13/06
-; ====================================================
 
 !addPluginDir ${NSISPLUGINDIR}
 ; ===========================
@@ -16,7 +10,6 @@
 var name
 var GTK_FOLDER
 var STARTUP_RUN_KEY
-var ISSILENT
 var ALREADY_INSTALLED
 ; ===========================
 ; Configuration
@@ -24,17 +17,17 @@ var ALREADY_INSTALLED
 Name $name
 SetCompressor /SOLID lzma
 !ifdef WITH_GTK
-!ifdef DEBUG
-OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}-debug.exe"
+  !if ${DEBUG}
+    OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}-debug.exe"
+  !else
+    OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}.exe"
+  !endif
 !else
-OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}.exe"
-!endif
-!else
-!ifdef DEBUG
-OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}-nogtk-debug.exe"
-!else
-OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}-nogtk.exe"
-!endif
+  !if ${DEBUG}
+    OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}-nogtk-debug.exe"
+  !else
+    OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}-nogtk.exe"
+  !endif
 !endif
 
 ; ===========================
@@ -53,21 +46,20 @@ OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}-nogtk.exe"
 ; ===========================
 ; Defines
 
-!define EKIGA_REG_KEY "SOFTWARE\ekiga"
-!define EKIGA_UNINST_EXE "ekiga-uninst.exe"
-!define EKIGA_UNINSTALL_KEY			"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ekiga"
-!define HKLM_APP_PATHS_KEY			"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ekiga.exe"
-!define EKIGA_REG_LANG				"Installer Language"
-!define EKIGA_STARTUP_RUN_KEY			"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
+!define EKIGA_REG_KEY			"SOFTWARE\ekiga"
+!define EKIGA_UNINST_EXE		"ekiga-uninst.exe"
+!define EKIGA_UNINSTALL_KEY		"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Ekiga"
+!define HKLM_APP_PATHS_KEY 		"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ekiga.exe"
+!define EKIGA_REG_LANG		   	"Installer Language"
+!define EKIGA_STARTUP_RUN_KEY	"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
 !define GTK_REG_KEY				"SOFTWARE\GTK\2.0"
-!define GTK_DEFAULT_INSTALL_PATH		"$COMMONFILES\GTK\2.0"
-!define GTK_RUNTIME_INSTALLER			"gtk+-${GTK_VERSION}-setup.exe"
-!define GTK_UNINSTALLER_BIN                     "unins000.exe"
+!define GTK_RUNTIME_INSTALLER	"gtk+-${GTK_VERSION}-setup.exe"
+!define GTK_UNINSTALLER_BIN     "unins000.exe"
 
 ; ===========================
 ; Modern UI configuration
-!define MUI_ICON                                "${EKIGA_DIR}/win32/ico/ekiga.ico"
-!define MUI_UNICON                              "${EKIGA_DIR}/win32/ico/ekiga-uninstall.ico" 
+!define MUI_ICON                "${EKIGA_DIR}/win32/ico/ekiga.ico"
+!define MUI_UNICON              "${EKIGA_DIR}/win32/ico/ekiga-uninstall.ico"
 
 !define MUI_HEADERIMAGE
 !define MUI_COMPONENTSPAGE_SMALLDESC
@@ -76,28 +68,22 @@ OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}-nogtk.exe"
 ;Finish Page config
 !define MUI_FINISHPAGE_RUN			"$INSTDIR\ekiga.exe"
 !define MUI_FINISHPAGE_RUN_CHECKED
-  
+
 ; ===========================
 ; Pages
 
 !ifndef WITH_GTK
-  !define MUI_PAGE_CUSTOMFUNCTION_PRE		preWelcomePage
+  !define MUI_PAGE_CUSTOMFUNCTION_PRE preWelcomePage
 !endif
 !insertmacro MUI_PAGE_WELCOME
 
 ; Alter License section
-!define MUI_LICENSEPAGE_BUTTON		        $(EKIGA_LICENSE_BUTTON)
-!define MUI_LICENSEPAGE_TEXT_BOTTOM		$(EKIGA_LICENSE_BOTTOM_TEXT)
+!define MUI_LICENSEPAGE_BUTTON		  $(EKIGA_LICENSE_BUTTON)
+!define MUI_LICENSEPAGE_TEXT_BOTTOM	  $(EKIGA_LICENSE_BOTTOM_TEXT)
+!insertmacro MUI_PAGE_LICENSE         "${EKIGA_DIR}/LICENSE"
 
 !insertmacro MUI_PAGE_COMPONENTS
-
-; GTK+ install dir page
-!define MUI_PAGE_CUSTOMFUNCTION_PRE		preGtkDirPage
-!define MUI_PAGE_CUSTOMFUNCTION_LEAVE		postGtkDirPage
-
-; Ekiga install dir page
 !insertmacro MUI_PAGE_DIRECTORY
-
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH
 
@@ -109,6 +95,7 @@ OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}-nogtk.exe"
 ; ===========================
 ; Languages
 
+;!define MUI_LANGDLL_ALLLANGUAGES  ; show all languages during install
 !insertmacro MUI_LANGUAGE "English"
 !insertmacro MUI_LANGUAGE "Hungarian"
 !insertmacro MUI_LANGUAGE "French"
@@ -126,12 +113,13 @@ OutFile "${TARGET_DIR}/ekiga-setup-${EKIGA_VERSION}-nogtk.exe"
 !insertmacro EKIGA_MACRO_INCLUDE_LANGFILE "DUTCH"		"${INSTALLER_DIR}/language_files/dutch.nsh"
 
 ; ===========================
-; Sections
+; Section SecUninstallOldEkiga
+; ===========================
 Section -SecUninstallOldEkiga
         ; Check install rights..
         Call CheckUserInstallRights
         Pop $R0
-        
+
         ;If ekiga is currently set to run on startup,
         ;  save the section of the Registry where the setting is before uninstalling,
         ;  so we can put it back after installing the new version
@@ -168,6 +156,14 @@ Section -SecUninstallOldEkiga
                 ; Check if we have uninstall string..
                 IfFileExists $R3 0 uninstall_problem
                 ; Have uninstall string.. go ahead and uninstall.
+                ; but before, prevent removal of non-standard
+                ;   installation directory of ekiga prior to April 2010
+                ; so the lines until nameok1 label could be removed by 2012
+                ${GetFileName} $R1 $R5
+                StrCmp $R5 ekiga nameok1 0  ; unsensitive comparation
+                MessageBox MB_OK "WARNING: Ekiga was installed in $R1, which is not a standard location.  Your old ekiga files will not be removed, please remove manually the directory $R1 after ensuring that you have not added to it useful files for you."
+                Goto done
+                nameok1:
                 SetOverwrite on
                 ; Need to copy uninstaller outside of the install dir
                 ClearErrors
@@ -184,17 +180,18 @@ Section -SecUninstallOldEkiga
         exec_error:
                 Delete "$TEMP\${EKIGA_UNINST_EXE}"
                 Goto uninstall_problem
- 
+
         uninstall_problem:
                 ; We can't uninstall.  Either the user must manually uninstall or we ignore and reinstall over it.
                 MessageBox MB_OKCANCEL $(EKIGA_PROMPT_CONTINUE_WITHOUT_UNINSTALL) /SD IDOK IDOK done
                 Quit
- 
+
         done:
 SectionEnd
 
-
-
+; ===========================
+; Section SecGtk
+; ===========================
 !ifdef WITH_GTK
 Section $(GTK_SECTION_TITLE) SecGtk
   SectionIn 1 RO
@@ -221,7 +218,7 @@ Section $(GTK_SECTION_TITLE) SecGtk
   no_gtk:
     StrCmp $R1 "NONE" gtk_no_install_rights
     ClearErrors
-    ExecWait '"$TEMP\${GTK_RUNTIME_INSTALLER}" /L=$LANGUAGE $ISSILENT /DIR="$GTK_FOLDER" /IGNOREERRORS'
+    ExecWait "$TEMP\${GTK_RUNTIME_INSTALLER}"
     ; now the GTK path needs to be added to the path of the setup
     ; so that Ekiga could be started from the last page
     ReadEnvStr $R0 "PATH"
@@ -232,7 +229,7 @@ Section $(GTK_SECTION_TITLE) SecGtk
     hkcu1:
       ReadRegStr $R3 HKCU ${GTK_REG_KEY} "Path"
     hk1:
-    StrCpy $R0 "$R0;$R3\bin"
+    StrCpy $R0 "$R0;$R3\bin;$R3\lib;$R3"
     System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PATH", R0).r0'
     Goto gtk_install_cont
 
@@ -240,29 +237,29 @@ Section $(GTK_SECTION_TITLE) SecGtk
     StrCpy $GTK_FOLDER $R6
     MessageBox MB_YESNO $(GTK_UPGRADE_PROMPT) /SD IDYES IDNO done
     ClearErrors
-    ExecWait '"$TEMP\${GTK_RUNTIME_INSTALLER}" /L=$LANGUAGE $ISSILENT /DIR="$GTK_FOLDER" /IGNOREERRORS'
+    ExecWait "$TEMP\${GTK_RUNTIME_INSTALLER}"
     Goto gtk_install_cont
 
   gtk_install_cont:
     IfErrors gtk_install_error
     StrCpy $R5 "1"  ; marker that says we installed...
     Goto done
- 
+
   gtk_install_error:
     Call DoWeNeedGtk
     Pop $R0
     StrCmp $R0 "0" done exit_on_error
-    
+
   exit_on_error:
     ;Delete "$TEMP\gtk-runtime.exe"
     MessageBox MB_YESNO $(GTK_INSTALL_ERROR) IDYES docontinue IDNO doexit
-    
+
   doexit:
     Quit
-    
+
   docontinue:
     Goto done
- 
+
   have_gtk:
     StrCpy $GTK_FOLDER $R6
     StrCmp $R1 "NONE" done ; If we have no rights.. can't re-install..
@@ -275,7 +272,7 @@ Section $(GTK_SECTION_TITLE) SecGtk
     ; Install GTK+ to Ekiga install dir
     StrCpy $GTK_FOLDER $INSTDIR
     ClearErrors
-    ExecWait '"$TEMP\${GTK_RUNTIME_INSTALLER}" /L=$LANGUAGE $ISSILENT /DIR="$GTK_FOLDER" /IGNOREERRORS'
+    ExecWait "$TEMP\${GTK_RUNTIME_INSTALLER}"
     IfErrors gtk_install_error
     SetOverwrite on
     ClearErrors
@@ -292,19 +289,29 @@ Section $(GTK_SECTION_TITLE) SecGtk
 SectionEnd ; end of GTK+ section
 !endif
 
-;--------------------------------
-;Ekiga Install Section
-
+; ===========================
+; Section SecEkiga
+; ===========================
 Section $(EKIGA_SECTION_TITLE) SecEkiga
   SectionIn 1 RO
 
+  ; find out a good installation directory, allowing the uninstaller
+  ;   to safely remove the whole installation directory
+  ; if INSTDIR does not end in [Ee]kiga, then add subdir Ekiga
+  ${GetFileName} $INSTDIR $R0
+  StrCmp $R0 ekiga nameok 0  ; unsensitive comparation
+  StrCpy $INSTDIR "$INSTDIR\Ekiga"
+
+  nameok:
+  ; if exists and not empty, then add subdir Ekiga
   IfFileExists $INSTDIR 0 dirok
-  ; if install directory already exists, install in Ekiga sub-directory instead
-  ; (this is needed upon uninstallation, since the whole install dir is removed)
+  ${DirState} $INSTDIR $R0
+  IntCmp $R0 0 dirok
   StrCpy $INSTDIR "$INSTDIR\Ekiga"
-  ; if this sub-directory exists too, then abort the installation
+
+  ; if exists, abort
   IfFileExists $INSTDIR 0 dirok
-  abort "Error: $INSTDIR already exists.  Please restart the setup and specify another installation directory"
+  abort "Error: tried $INSTDIR, but it already exists.  Please restart the setup and specify another installation directory"
 
   dirok:
   ; Check install rights..
@@ -387,9 +394,9 @@ Section $(EKIGA_SECTION_TITLE) SecEkiga
   done:
 SectionEnd ; end of default Ekiga section
 
-;--------------------------------
-;Shortcuts
-
+; ===========================
+; Shortcuts
+; ===========================
 SubSection /e $(EKIGA_SHORTCUTS_SECTION_TITLE) SecShortcuts
   Section $(EKIGA_DESKTOP_SHORTCUT_SECTION_TITLE) SecDesktopShortcut
     SetOutPath "$INSTDIR"
@@ -410,7 +417,7 @@ SubSection /e $(EKIGA_SHORTCUTS_SECTION_TITLE) SecShortcuts
     SetOverwrite off
     SetShellVarContext "current"
   SectionEnd
-  
+
   Section $(EKIGA_RUN_AT_STARTUP) SecStartup
      SetOutPath $INSTDIR
      CreateShortCut "$SMSTARTUP\Ekiga.lnk" "$INSTDIR\ekiga.exe" "" "" 0 SW_SHOWNORMAL
@@ -418,10 +425,9 @@ SubSection /e $(EKIGA_SHORTCUTS_SECTION_TITLE) SecShortcuts
 SubSectionEnd
 
 
-;--------------------------------
-;Uninstaller Section
-
-
+; ===========================
+; Section Uninstall
+; ===========================
 Section Uninstall
   Call un.CheckUserInstallRights
   Pop $R0
@@ -461,7 +467,7 @@ Section Uninstall
     Delete /REBOOTOK "$SMSTARTUP\Ekiga.lnk"
     RMDir "$SMPROGRAMS\Ekiga"
     Delete "$DESKTOP\Ekiga.lnk"
-    
+
     SetShellVarContext "current"
     ; Shortcuts..
     RMDir /r "$SMPROGRAMS\Ekiga"
@@ -480,13 +486,9 @@ Section Uninstall
   done:
 SectionEnd ; end of uninstall section
 
-; ///////////////////////////////////////
-;; Functions
-; ///////////////////////////////////////
-
 ; ===========================
-; Init Global parameters
-
+; Function .onInit
+; ===========================
 Function .onInit
   Push $R0
   SystemLocal::Call 'kernel32::CreateMutexA(i 0, i 0, t "ekiga_installer_running") i .r1 ?e'
@@ -498,12 +500,6 @@ Function .onInit
 
   StrCpy $name "Ekiga"
 
-  StrCpy $ISSILENT "/NOUI"
-
-  ; GTK installer has two silent states.. one with Message boxes, one without
-  ; If ekiga installer was run silently, we want to supress gtk installer msg boxes.
-  StrCpy $ISSILENT "/SILENT"
-
   ${GetParameters} $R0
   ClearErrors
   ; if you wish to start with another language, execute for example:
@@ -517,7 +513,7 @@ Function .onInit
   skip_lang:
     ; If install path was set on the command, use it.
     StrCmp $INSTDIR "" 0 instdir_done
- 
+
     ;  If ekiga is currently intalled, we should default to where it is currently installed
     ClearErrors
     ReadRegStr $INSTDIR HKCU "${EKIGA_REG_KEY}" ""
@@ -551,8 +547,9 @@ FunctionEnd
 
 
 ; ===========================
-; Check if another instance 
+; Check if another instance
 ; of the installer is running
+; ===========================
 !macro RunCheckMacro UN
 Function ${UN}RunCheck
   Push $R0
@@ -564,7 +561,7 @@ Function ${UN}RunCheck
 
   abort_install:
     Abort
-  
+
   done:
     Pop $R0
 FunctionEnd
@@ -612,72 +609,9 @@ FunctionEnd
 !insertmacro CheckUserInstallRightsMacro ""
 !insertmacro CheckUserInstallRightsMacro "un."
 
-;
-; Usage:
-;   Push $0 ; Path string
-;   Call VerifyDir
-;   Pop $0 ; 0 - Bad path  1 - Good path
-;
-Function VerifyDir
-  Exch $0
-  Push $1
-  Push $2
-  Loop:
-    IfFileExists $0 dir_exists
-    StrCpy $1 $0 ; save last
-    ${GetParent} $0 $0
-    StrLen $2 $0
-    ; IfFileExists "C:" on xp returns true and on win2k returns false
-    ; So we're done in such a case..
-    IntCmp $2 2 loop_done
-    ; GetParent of "C:" returns ""
-    IntCmp $2 0 loop_done
-    Goto Loop
-
-  loop_done:
-    StrCpy $1 "$0\EkIgaFooB"
-    ; Check if we can create dir on this drive..
-    ClearErrors
-    CreateDirectory $1
-    IfErrors DirBad DirGood
-
-  dir_exists:
-    ClearErrors
-    FileOpen $1 "$0\ekigafoo.bar" w
-    IfErrors PathBad PathGood
-
-  DirGood:
-    RMDir $1
-    Goto PathGood1
-
-  DirBad:
-    RMDir $1
-    Goto PathBad1
-
-  PathBad:
-    FileClose $1
-    Delete "$0\ekigafoo.bar"
-  PathBad1:
-    StrCpy $0 "0"
-    Push $0
-    Goto done
-
-  PathGood:
-    FileClose $1
-    Delete "$0\ekigafoo.bar"
-  PathGood1:
-    StrCpy $0 "1"
-    Push $0
-
-  done:
-    Exch 3 ; The top of the stack contains the output variable
-    Pop $0
-    Pop $2
-    Pop $1
-FunctionEnd
-
-
-;
+; ===========================
+; Function doWeNeedGtk
+; ===========================
 ; Usage:
 ; Call DoWeNeedGtk
 ; First Pop:
@@ -721,7 +655,6 @@ Function DoWeNeedGtk
     StrCpy $5 "HKLM"
     StrCmp $0 "" no_gtk have_gtk
 
-
   have_gtk:
     ; GTK+ is already installed.. check version.
     ${VersionCompare} ${GTK_VERSION} $0 "$2"
@@ -774,57 +707,9 @@ Function DoWeNeedGtk
   Pop $3
 FunctionEnd
 
-Function preGtkDirPage
-  Push $R0
-  Push $R1
-  Call DoWeNeedGtk
-  Pop $R0
-  Pop $R1
-
-  StrCmp $R0 "0" have_gtk
-  StrCmp $R0 "1" upgrade_gtk
-  StrCmp $R0 "2" no_gtk no_gtk
-
-
-  ; Don't show dir selector.. Upgrades are done to existing path..
-  have_gtk:
-  upgrade_gtk:
-    Abort
-
-  no_gtk:
-    StrCmp $R1 "NONE" 0 no_gtk_cont
-      ; Got no install rights..
-      Abort
-    no_gtk_cont:
-      ; Suggest path..
-      StrCmp $R1 "HKCU" 0 hklm1
-        ${GetParent} $SMPROGRAMS $R0
-        ${GetParent} $R0 $R0
-        StrCpy $R0 "$R0\GTK\2.0"
-        Goto got_path
-      hklm1:
-        StrCpy $R0 "${GTK_DEFAULT_INSTALL_PATH}"
-
-   got_path:
-     StrCpy $name "GTK+ ${GTK_VERSION}"
-     StrCpy $GTK_FOLDER $R0
-     Pop $R1
-     Pop $R0
-FunctionEnd
-
-Function postGtkDirPage
-  Push $R0
-  StrCpy $name "Ekiga ${EKIGA_VERSION}"
-  Push $GTK_FOLDER
-  Call VerifyDir
-  Pop $R0
-  StrCmp $R0 "0" 0 done
-    MessageBox MB_OK "Destination path cannot be opened" /SD IDOK
-    Abort
-  done:
-  Pop $R0
-FunctionEnd
-
+; ===========================
+; Function preWelcomePage
+; ===========================
 !ifndef WITH_GTK
 Function preWelcomePage
   ; If this installer dosn't have GTK, check whether we need it.
@@ -844,22 +729,16 @@ Function preWelcomePage
 FunctionEnd
 !endif
 
-;--------------------------------
-;Descriptions
+; ===========================
+; Descriptions
+; ===========================
 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
-  !insertmacro MUI_DESCRIPTION_TEXT ${SecEkiga} \
-        $(EKIGA_SECTION_DESCRIPTION)
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecEkiga} $(EKIGA_SECTION_DESCRIPTION)
 !ifdef WITH_GTK
-  !insertmacro MUI_DESCRIPTION_TEXT ${SecGtk} \
-        $(GTK_SECTION_DESCRIPTION)
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecGtk} $(GTK_SECTION_DESCRIPTION)
 !endif
-  !insertmacro MUI_DESCRIPTION_TEXT ${SecStartup} \
-        $(EKIGA_STARTUP_SECTION_DESCRIPTION)
-  !insertmacro MUI_DESCRIPTION_TEXT ${SecShortcuts} \
-        $(EKIGA_SHORTCUTS_SECTION_DESCRIPTION)
-  !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktopShortcut} \
-        $(EKIGA_DESKTOP_SHORTCUT_DESC)
-  !insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenuShortcut} \
-        $(EKIGA_STARTMENU_SHORTCUT_DESC)
-
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecStartup} $(EKIGA_STARTUP_SECTION_DESCRIPTION)
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecShortcuts} $(EKIGA_SHORTCUTS_SECTION_DESCRIPTION)
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktopShortcut} $(EKIGA_DESKTOP_SHORTCUT_DESC)
+  !insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenuShortcut} $(EKIGA_STARTMENU_SHORTCUT_DESC)
 !insertmacro MUI_FUNCTION_DESCRIPTION_END
diff --git a/win32/nsisinstaller/langmacros.nsh b/win32/nsisinstaller/langmacros.nsh
index 479da04..a4c0c0f 100644
--- a/win32/nsisinstaller/langmacros.nsh
+++ b/win32/nsisinstaller/langmacros.nsh
@@ -54,6 +54,7 @@
   !insertmacro EKIGA_MACRO_LANGSTRING_INSERT GTK_WIMP_THEME_DESC			${CUR_LANG}
   !insertmacro EKIGA_MACRO_LANGSTRING_INSERT GTK_BLUECURVE_THEME_DESC		${CUR_LANG}
   !insertmacro EKIGA_MACRO_LANGSTRING_INSERT GTK_LIGHTHOUSEBLUE_THEME_DESC	${CUR_LANG}
+  !insertmacro EKIGA_MACRO_LANGSTRING_INSERT EKIGA_STARTUP_SECTION_DESCRIPTION	${CUR_LANG}
   !insertmacro EKIGA_MACRO_LANGSTRING_INSERT EKIGA_SHORTCUTS_SECTION_DESCRIPTION	${CUR_LANG}
   !insertmacro EKIGA_MACRO_LANGSTRING_INSERT EKIGA_DESKTOP_SHORTCUT_DESC		${CUR_LANG}
   !insertmacro EKIGA_MACRO_LANGSTRING_INSERT EKIGA_STARTMENU_SHORTCUT_DESC	${CUR_LANG}
diff --git a/win32/nsisinstaller/language_files/english.nsh b/win32/nsisinstaller/language_files/english.nsh
index 0f5c767..c36b2f7 100644
--- a/win32/nsisinstaller/language_files/english.nsh
+++ b/win32/nsisinstaller/language_files/english.nsh
@@ -3,14 +3,15 @@
 ;;  Author: ...
 ;;
 ;;  Note: To translate this file:
-;;  - copy this file into another file called yourlanguage.nsh
-;;  - modify yourlanguagefile.nsh like this:
-;;    - replace everywhere "!insertmacro EKIGA_MACRO_DEFAULT_STRING" with "!define"
-;;    - translate all the strings
-;;    - check the Windows Code Page you use, see above
-;;    - add yourself as Author, see above
-;;    - send us the file and remind us to add the entry for your file
-;;      in ekiga.nsi (MUI_LANGUAGE and EKIGA_MACRO_INCLUDE_LANGFILE)
+;;  - download this file on your computer
+;;  - translate all the strings into your language
+;;  - put the appropriate Windows Code Page (the one you use) above
+;;  - add yourself as Author above
+;;  - send us the file and remind us:
+;;    - to add the entry for your file in ekiga.nsi
+;;      (MUI_LANGUAGE and EKIGA_MACRO_INCLUDE_LANGFILE)
+;;    - to replace everywhere in your file
+;;      "!insertmacro EKIGA_MACRO_DEFAULT_STRING" with "!define"
 
 ; Startup Checks
 !insertmacro EKIGA_MACRO_DEFAULT_STRING INSTALLER_IS_RUNNING			"The installer is already running."



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]