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

[or-cvs] r19181: {torvm} Update some upstream sources, start unwinding the Vidalia pa (in torvm/trunk/build: kamikaze/patches win32 win32/files win32/patches win32/src/pkg)



Author: coderman
Date: 2009-03-29 09:53:36 -0400 (Sun, 29 Mar 2009)
New Revision: 19181

Modified:
   torvm/trunk/build/kamikaze/patches/001-kamikaze-tor-package.patch
   torvm/trunk/build/win32/Makefile
   torvm/trunk/build/win32/files/buildall.sh
   torvm/trunk/build/win32/patches/vidalia-torvm.patch
   torvm/trunk/build/win32/src/pkg/license.wxs
Log:
Update some upstream sources, start unwinding the Vidalia patches starting with wixtool, update license pkg since adding libupnp, default to multi-localization MSI packages.

Modified: torvm/trunk/build/kamikaze/patches/001-kamikaze-tor-package.patch
===================================================================
--- torvm/trunk/build/kamikaze/patches/001-kamikaze-tor-package.patch	2009-03-29 09:17:11 UTC (rev 19180)
+++ torvm/trunk/build/kamikaze/patches/001-kamikaze-tor-package.patch	2009-03-29 13:53:36 UTC (rev 19181)
@@ -313,8 +313,8 @@
 +
 diff -Naur a/package/tor/files/tor.init b/package/tor/files/tor.init
 --- a/package/tor/files/tor.init	1970-01-01 00:00:00.000000000 +0000
-+++ b/package/tor/files/tor.init	2009-03-27 01:11:16.354176848 +0000
-@@ -0,0 +1,138 @@
++++ b/package/tor/files/tor.init	2009-03-29 00:40:02.951384384 +0000
+@@ -0,0 +1,139 @@
 +#!/bin/sh 
 +# make sure we check the system bin dirs
 +export PATH=/usr/sbin:/sbin:$PATH
@@ -404,6 +404,7 @@
 +	iptables -t nat -A PREROUTING -i $TOR_INTF -s ! $MYIP -p udp --dport 53 -j REDIRECT --to 9093
 +	# drop everything else ...
 +	iptables -t nat -A PREROUTING -i $TOR_INTF -s ! $MYIP -j DROP
++	iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 +
 +elif [ "$1" = "stop" ]; then
 +	# XXX TODO: replace this with a fail-safe shutdown

Modified: torvm/trunk/build/win32/Makefile
===================================================================
--- torvm/trunk/build/win32/Makefile	2009-03-29 09:17:11 UTC (rev 19180)
+++ torvm/trunk/build/win32/Makefile	2009-03-29 13:53:36 UTC (rev 19181)
@@ -217,20 +217,20 @@
 VIDALIA_TGZ=$(VIDALIA_NAME).tar.gz
 VIDALIA_SVN=https://svn.vidalia-project.net/svn/vidalia/
 VIDALIA_BR=trunk
-VIDALIA_VER=3618
+VIDALIA_VER=3645
 
 # for package resources
 TORSVN_NAME=tor-latest
 TORSVN_TGZ=$(TORSVN_NAME).tar.gz
 TORSVN_SVN=https://tor-svn.freehaven.net/svn/tor/
 TORSVN_BR=trunk
-TORSVN_VER=18924
+TORSVN_VER=19114
 
 TORBUTTON_NAME=torbutton-latest
 TORBUTTON_TGZ=$(TORBUTTON_NAME).tar.gz
 TORBUTTON_SVN=https://tor-svn.freehaven.net/svn/torbutton/
 TORBUTTON_BR=trunk
-TORBUTTON_VER=18976
+TORBUTTON_VER=19101
 
 # XXX add / switch to signed tags one key mgmt resolved
 PYCRYPTO_NAME=pycrypto-latest

Modified: torvm/trunk/build/win32/files/buildall.sh
===================================================================
--- torvm/trunk/build/win32/files/buildall.sh	2009-03-29 09:17:11 UTC (rev 19180)
+++ torvm/trunk/build/win32/files/buildall.sh	2009-03-29 13:53:36 UTC (rev 19181)
@@ -1031,6 +1031,9 @@
 if [[ "$BUILD_IND_LANGS" == "" ]]; then
   export BUILD_IND_LANGS=yes
 fi
+if [[ "$INTL_DEFAULT" == "" ]]; then
+  export INTL_DEFAULT=yes
+fi
 
 if [[ "$PACKAGES_BUILT" != "yes" ]]; then
   echo "Building bundle packages ..."
@@ -1191,6 +1194,10 @@
         fi
       done
       if [ -f $BASEMSI ]; then
+        if [[ "$INTL_DEFAULT" == "yes" ]]; then
+          cp -f $BASEMSI vidalia.msi
+          cp -f $BASEMSI $bundledir/vidalia.msi
+        fi
         cp $BASEMSI ../pkg/
         cp $BASEMSI $bundledir
         echo "Completed multi-lingual package transforms for $BASEMSI"
@@ -1316,6 +1323,10 @@
     done
   fi
   if [ -f "$BASEMSI" ]; then
+    if [[ "$INTL_DEFAULT" == "yes" ]]; then
+      cp -f $BASEMSI torvm.msi
+      cp -f $BASEMSI $bundledir/torvm.msi
+    fi
     cp "$BASEMSI" $bundledir
     echo "Completed multi-lingual package transforms for $BASEMSI"
     ls -l "$BASEMSI"
@@ -1370,6 +1381,10 @@
       fi
     done
   fi
+  if [[ "$INTL_DEFAULT" == "yes" ]]; then
+    cp -f tor-intl.msi tor.msi
+    cp -f tor-intl.msi $bundledir/tor.msi
+  fi
   if [ -f "$BASEMSI" ]; then
     cp "$BASEMSI" $bundledir
     echo "Completed multi-lingual package transforms for $BASEMSI"
@@ -1423,6 +1438,10 @@
     done
   fi
   if [ -f "$BASEMSI" ]; then
+    if [[ "$INTL_DEFAULT" == "yes" ]]; then
+      cp -f $BASEMSI polipo.msi 
+      cp -f $BASEMSI $bundledir/polipo.msi
+    fi
     cp "$BASEMSI" $bundledir
     echo "Completed multi-lingual package transforms for $BASEMSI"
     ls -l "$BASEMSI"
@@ -1477,6 +1496,10 @@
       done
     fi
     if [ -f "$BASEMSI" ]; then
+      if [[ "$INTL_DEFAULT" == "yes" ]]; then
+        cp -f $BASEMSI torbutton.msi
+        cp -f $BASEMSI $bundledir/torbutton.msi
+      fi
       cp "$BASEMSI" $bundledir
       echo "Completed multi-lingual package transforms for $BASEMSI"
       ls -l "$BASEMSI"
@@ -1530,6 +1553,10 @@
     done
   fi
   if [ -f "$BASEMSI" ]; then
+    if [[ "$INTL_DEFAULT" == "yes" ]]; then
+      cp -f $BASEMSI thandy.msi
+      cp -f $BASEMSI $bundledir/thandy.msi
+    fi
     cp "$BASEMSI" $bundledir
     echo "Completed multi-lingual package transforms for $BASEMSI"
     ls -l "$BASEMSI"
@@ -1544,6 +1571,16 @@
     echo "ERROR: unable to build Tor VM executable bundle installer."
   fi
 
+  echo "Creating Marble Tor VM Bundle installer executable ..."
+  cat bundle.nsi | sed 's/vidalia[.]msi/vidalia-marble-full.msi/g' | sed 's/TorVMBundle.exe/TorVMMarbleBundle.exe/g' > marble-bundle.nsi
+  makensis.exe marble-bundle.nsi
+  if [ -f TorVMMarbleBundle.exe ]; then
+    cp TorVMMarbleBundle.exe $bundledir
+    ls -l TorVMMarbleBundle.exe
+  else
+    echo "ERROR: unable to build Marble Tor VM executable bundle installer."
+  fi
+
   echo "Creating Tor VM network installer executable ..."
   makensis.exe netinst.nsi
   if [ -f TorVMNetInstaller.exe ]; then
@@ -1553,6 +1590,16 @@
     echo "ERROR: unable to build Tor VM executable network installer."
   fi
 
+  echo "Creating Marble Tor VM network installer executable ..."
+  cat netinst.nsi | sed 's/vidalia[.]msi/vidalia-marble-full.msi/g' | sed 's/TorVMNetInstaller.exe/TorVMMarbleNetInstaller.exe/g' > marble-netinst.nsi
+  makensis.exe marble-netinst.nsi
+  if [ -f TorVMMarbleNetInstaller.exe ]; then
+    cp TorVMMarbleNetInstaller.exe $bundledir
+    ls -l TorVMMarbleNetInstaller.exe
+  else
+    echo "ERROR: unable to build Marble Tor VM executable network installer."
+  fi
+
   echo "Creating self-extracting Tor VM archive ..."
   export exename=Tor_VM.exe
   if [ -f $exename ]; then

Modified: torvm/trunk/build/win32/patches/vidalia-torvm.patch
===================================================================
--- torvm/trunk/build/win32/patches/vidalia-torvm.patch	2009-03-29 09:17:11 UTC (rev 19180)
+++ torvm/trunk/build/win32/patches/vidalia-torvm.patch	2009-03-29 13:53:36 UTC (rev 19181)
@@ -1,18 +1,25 @@
 diff -Naur a/CMakeLists.txt b/CMakeLists.txt
---- a/CMakeLists.txt	2009-03-04 23:38:18.848228000 +0000
-+++ b/CMakeLists.txt	2009-03-15 06:58:51.369290512 +0000
-@@ -13,7 +13,7 @@
+--- a/CMakeLists.txt	2009-03-22 02:22:05.164345000 +0000
++++ b/CMakeLists.txt	2009-03-15 06:58:51.000000000 +0000
+@@ -1,5 +1,5 @@
+ ##
+-##  $Id: CMakeLists.txt 3640 2009-03-22 02:22:05Z edmanm $
++##  $Id: CMakeLists.txt 3598 2009-03-04 23:38:18Z edmanm $
+ ## 
+ ##  This file is part of Vidalia, and is subject to the license terms in the
+ ##  LICENSE file, found in the top level directory of this distribution. If 
+@@ -104,6 +104,8 @@
+ ## Check for system header files
+ check_include_file("limits.h" HAVE_LIMITS_H)
+ check_include_file("sys/limits.h" HAVE_SYS_LIMITS_H)
++check_include_file("math.h"  HAVE_MATH_H)
++check_include_file_cxx("cmath" HAVE_CMATH)
  
- set(VER_MAJOR   "0")
- set(VER_MINOR   "2")
--set(VER_PATCH   "0")
-+set(VER_PATCH   "1")
- set(VERSION     "${VER_MAJOR}.${VER_MINOR}.${VER_PATCH}-svn")
- message(STATUS  "Configuring Vidalia ${VERSION}")
- project(Vidalia)
+ ## Check for the sizes of various data types
+ check_type_size(int SIZEOF_INT)
 diff -Naur a/pkg/build-geoip-cache.sh b/pkg/build-geoip-cache.sh
 --- a/pkg/build-geoip-cache.sh	2008-02-29 04:30:11.928307000 +0000
-+++ b/pkg/build-geoip-cache.sh	2009-03-16 05:33:25.382762424 +0000
++++ b/pkg/build-geoip-cache.sh	2009-03-16 05:33:25.000000000 +0000
 @@ -1,4 +1,4 @@
 -#!/bin/sh
 +#!/bin/bash
@@ -46,7 +53,7 @@
  
 diff -Naur a/pkg/win32/polipo.conf b/pkg/win32/polipo.conf
 --- a/pkg/win32/polipo.conf	2008-04-06 00:00:07.066809000 +0000
-+++ b/pkg/win32/polipo.conf	2009-03-07 12:47:21.712807024 +0000
++++ b/pkg/win32/polipo.conf	2009-03-07 12:47:21.000000000 +0000
 @@ -35,7 +35,6 @@
  # parentProxy = "squid.example.org:3128"
  
@@ -76,12 +83,12 @@
  
  ### HTTP
 diff -Naur a/pkg/win32/vidalia.wxs.in b/pkg/win32/vidalia.wxs.in
---- a/pkg/win32/vidalia.wxs.in	2009-02-24 05:46:46.615879000 +0000
-+++ b/pkg/win32/vidalia.wxs.in	2009-03-15 07:01:31.639925672 +0000
-@@ -1,334 +1,371 @@
+--- a/pkg/win32/vidalia.wxs.in	2009-03-21 04:03:31.345626000 +0000
++++ b/pkg/win32/vidalia.wxs.in	2009-03-15 07:01:31.000000000 +0000
+@@ -1,345 +1,371 @@
  <?xml version="1.0" encoding="Windows-1252" ?>
  <!-- 
--  $Id: vidalia.wxs.in 3586 2009-02-24 05:46:46Z edmanm $
+-  $Id: vidalia.wxs.in 3639 2009-03-21 04:03:31Z edmanm $
 +  $Id: vidalia.wxs.in 3329 2008-11-21 02:04:34Z edmanm $
 +
 +  This file is part of Vidalia, and is subject to the license terms in the
@@ -143,6 +150,7 @@
 -  <?define MarblePlacemarkDataGuid="27D54547-A819-435b-9A0C-13284169A9D9" ?>
 -  <?define MarbleStarsDataGuid="8C5C3F32-67E6-4a4a-9B6C-6D67A6D44D67" ?>
 -  <?define MarbleSvgDataGuid="03E25BCA-4C58-4571-9F17-061D52877714" ?>
+-  <?define UseMarble="@USE_MARBLE@"?>
 -
 -  <Product Name="Vidalia @VERSION@" Id="$(var.VidaliaProductGuid)"
 -           Language="1033" Codepage="1252"
@@ -219,25 +227,27 @@
      <Directory Id="TARGETDIR" Name="SourceDir">
 -      <Directory Id="ProgramFilesFolder" Name="ProgramFilesDir">
 -        <Directory Id="INSTALLDIR" Name="Vidalia">
--          <Directory Id="PluginsDir" Name="plugins">
--            <Directory Id="QtPluginsDir" Name="qt">
--              <Directory Id="QtImageFormatPluginsDir" Name="imageformats" />
+-          <?if $(var.UseMarble) = "ON"?>
+-            <Directory Id="PluginsDir" Name="plugins">
+-              <Directory Id="QtPluginsDir" Name="qt">
+-                <Directory Id="QtImageFormatPluginsDir" Name="imageformats" />
+-              </Directory>
+-              <Directory Id="MarblePluginsDir" Name="marble" />
 -            </Directory>
--            <Directory Id="MarblePluginsDir" Name="marble" />
--          </Directory>
--          <Directory Id="MarbleDataDir" Name="data">
--            <Directory Id="MarbleMapsDir" Name="maps">
--              <Directory Id="MarbleEarthMapsDir" Name="earth">
--                <Directory Id="MarbleBlueMarbleDataDir" Name="bluemarble" />
--                <Directory Id="MarbleCityLightsDataDir" Name="citylights" />
--                <Directory Id="MarbleSrtmDataDir" Name="srtm" />
+-            <Directory Id="MarbleDataDir" Name="data">
+-              <Directory Id="MarbleMapsDir" Name="maps">
+-                <Directory Id="MarbleEarthMapsDir" Name="earth">
+-                  <Directory Id="MarbleBlueMarbleDataDir" Name="bluemarble" />
+-                  <Directory Id="MarbleCityLightsDataDir" Name="citylights" />
+-                  <Directory Id="MarbleSrtmDataDir" Name="srtm" />
+-                </Directory>
 -              </Directory>
+-              <Directory Id="MarbleMwdbiiDir" Name="mwdbii" />
+-              <Directory Id="MarblePlacemarkDataDir" Name="placemarks" />
+-              <Directory Id="MarbleStarsDataDir" Name="stars" />
+-              <Directory Id="MarbleSvgDataDir" Name="svg" />
 -            </Directory>
--            <Directory Id="MarbleMwdbiiDir" Name="mwdbii" />
--            <Directory Id="MarblePlacemarkDataDir" Name="placemarks" />
--            <Directory Id="MarbleStarsDataDir" Name="stars" />
--            <Directory Id="MarbleSvgDataDir" Name="svg" />
--          </Directory>
+-          <?endif?>
 -        </Directory>
 -      </Directory>
 -    </Directory>
@@ -328,8 +338,12 @@
 -              Name="QtNetwork4.dll" Source="@QT_BINARY_DIR@\QtNetwork4.dll" />
 -        <File Id="QtXml4Dll" DiskId="1"
 -              Name="QtXml4.dll" Source="@QT_BINARY_DIR@\QtXml4.dll" />
--        <File Id="QtSvg4Dll" DiskId="1"
--              Name="QtSvg4.dll" Source="@QT_BINARY_DIR@\QtSvg4.dll" />
+-        <?if $(var.UseMarble) = "ON"?>
+-          <File Id="QtSvg4Dll" DiskId="1"
+-                Name="QtSvg4.dll" Source="@QT_BINARY_DIR@\QtSvg4.dll" />
+-          <File Id="QtWebKit4Dll" DiskId="1"
+-                Name="QtWebKit4.dll" Source="@QT_BINARY_DIR@\QtWebKit4.dll" />
+-        <?endif?>
 -      </Component>
 +          <!-- MinGW-related library files -->
 +          <Component Id="MinGWLibrary" Guid="$(var.CurrMingwLibsGUID)">
@@ -366,11 +380,13 @@
 -              Name="ssleay32.dll" Source="@OPENSSL_BINARY_DIR@\ssleay32.dll" />
 -      </Component>
 -      
--      <!-- Marble-related library files -->
--      <Component Id="MarbleWidgetLibrary" Guid="$(var.MarbleWidgetLibraryGuid)">
--        <File Id="MarbleWidgetDll" DiskId="1"
--              Name="libmarblewidget.dll" Source="@MARBLEWIDGET_LIBRARY@" />
--      </Component>
+-      <?if $(var.UseMarble) = "ON"?>
+-        <!-- Marble-related library files -->
+-        <Component Id="MarbleWidgetLibrary" Guid="$(var.MarbleWidgetLibraryGuid)">
+-          <File Id="MarbleWidgetDll" DiskId="1"
+-                Name="libmarblewidget.dll" Source="@MARBLEWIDGET_LIBRARY@" />
+-        </Component>
+-      <?endif?>
 -    </DirectoryRef>
 +          <!-- Place this here until argument parsing with quoted escapes works as expected. -->
 +          <Component Id="PolipoConfig" Guid="$(var.CurrPolipoConfigGUID)">
@@ -388,118 +404,120 @@
 +          </Component>
  
 -    <!-- Qt-related plugin files -->
--    <DirectoryRef Id="QtImageFormatPluginsDir">
--      <Component Id="QtImageFormatPlugins" Guid="$(var.QtImageFormatPluginsGuid)">
--        <File Id="QJpeg4Dll" DiskId="1"
--              Name="qjpeg4.dll" Source="@QT_PLUGINS_DIR@\imageformats\qjpeg4.dll" />
--      </Component>
--    </DirectoryRef>
+-    <?if $(var.UseMarble) = "ON"?>
+-      <DirectoryRef Id="QtImageFormatPluginsDir">
+-        <Component Id="QtImageFormatPlugins" Guid="$(var.QtImageFormatPluginsGuid)">
+-          <File Id="QJpeg4Dll" DiskId="1"
+-                Name="qjpeg4.dll" Source="@QT_PLUGINS_DIR@\imageformats\qjpeg4.dll" />
+-        </Component>
+-      </DirectoryRef>
 +         </Directory>
 +        </Directory>
  
--    <!-- Marble-related plugin files -->
--    <DirectoryRef Id="MarblePluginsDir">
--      <Component Id="MarblePlugins" Guid="$(var.MarblePluginsGuid)">
--        <File Id="MarbleOverviewMapPlugin" DiskId="1"
--              Name="libMarbleOverviewMap.dll" Source="@MARBLE_OVERVIEWMAP_PLUGIN@" />
--        <File Id="MarbleStarsPlugin" DiskId="1"
--              Name="libMarbleStarsPlugin.dll" Source="@MARBLE_STARS_PLUGIN@" />
--      </Component>
--    </DirectoryRef>
--          
--    <!-- Marble-related data files -->
--    <DirectoryRef Id="MarbleDataDir">
--      <Component Id="MarbleLegendsData" Guid="$(var.MarbleLegendsDataGuid)">
--        <File Id="LandColorsLegend" DiskId="1"
--              Name="landcolors.leg" Source="@MARBLE_DATA_DIR@\landcolors.leg" />
--        <File Id="SeaColorsLegend" DiskId="1"
--              Name="seacolors.leg" Source="@MARBLE_DATA_DIR@\seacolors.leg" />
--      </Component>
--    </DirectoryRef>
--    <DirectoryRef Id="MarbleBlueMarbleDataDir">
--      <Component Id="MarbleBlueMarbleData" Guid="$(var.MarbleBlueMarbleDataGuid)">
--        <File Id="MarbleBlueMarbleDgml" DiskId="1"
--              Name="bluemarble.dgml" Source="@MARBLE_DATA_DIR@\maps\earth\bluemarble\bluemarble.dgml" />
--      </Component>
--    </DirectoryRef>
--    <DirectoryRef Id="MarbleCityLightsDataDir">
--      <Component Id="MarbleCityLightsData" Guid="$(var.MarbleCityLightsDataGuid)">
--        <File Id="MarbleCityLightsDgml" DiskId="1"
--              Name="citylights.dgml" Source="@MARBLE_DATA_DIR@\maps\earth\citylights\citylights.dgml" />
--      </Component>
--    </DirectoryRef>
--    <DirectoryRef Id="MarbleSrtmDataDir">
--      <Component Id="MarbleSrtmData" Guid="$(var.MarbleSrtmDataGuid)">
--        <File Id="MarbleSrtmDgml" DiskId="1"
--              Name="srtm.dgml" Source="@MARBLE_DATA_DIR@\maps\earth\srtm\srtm.dgml" />
--        <File Id="MarbleSrtmJpg" DiskId="1"
--              Name="srtm.jpg" Source="@MARBLE_DATA_DIR@\maps\earth\srtm\srtm.jpg" />
--      </Component>
--    </DirectoryRef>
--    <DirectoryRef Id="MarbleMwdbiiDir">
--      <Component Id="MarbleMwdbiiData" Guid="$(var.MarbleMwdbiiDataGuid)">
--        <File Id="DatelinePnt" DiskId="1"
--              Name="DATELINE.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\DATELINE.PNT" />
--        <File Id="PAustPnt" DiskId="1"
--              Name="PAUST.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PAUST.PNT" />
--        <File Id="PBorderPnt" DiskId="1"
--              Name="PBORDER.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PBORDER.PNT" />
--        <File Id="PCanProvPnt" DiskId="1"
--              Name="PCANPROV.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PCANPROV.PNT" />
--        <File Id="PCoastPnt" DiskId="1"
--              Name="PCOAST.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PCOAST.PNT" />
--        <File Id="PDiffBorderPnt" DiskId="1"
--              Name="PDIFFBORDER.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PDIFFBORDER.PNT" />
--        <File Id="PGlacierPnt" DiskId="1"
--              Name="PGLACIER.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PGLACIER.PNT" />
--        <File Id="PIslandPnt" DiskId="1"
--              Name="PISLAND.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PISLAND.PNT" />
--        <File Id="PLakePnt" DiskId="1"
--              Name="PLAKE.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PLAKE.PNT" />
--        <File Id="PLakeIslandPnt" DiskId="1"
--              Name="PLAKEISLAND.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PLAKEISLAND.PNT" />
--        <File Id="PMexicoPnt" DiskId="1"
--              Name="PMEXICO.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PMEXICO.PNT" />
--        <File Id="PUsa48DiffPnt" DiskId="1"
--              Name="PUSA48.DIFF.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PUSA48.DIFF.PNT" />
--        <File Id="PUsa48Pnt" DiskId="1"
--              Name="PUSA48.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PUSA48.PNT" />
--        <File Id="RiverPnt" DiskId="1"
--              Name="RIVER.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\RIVER.PNT" />
--      </Component>
--    </DirectoryRef>
--    <DirectoryRef Id="MarblePlacemarkDataDir">
--      <Component Id="MarblePlacemarkData" Guid="$(var.MarblePlacemarkDataGuid)">
--        <File Id="BasePlacemarksCache" DiskId="1"
--              Name="baseplacemarks.cache" Source="@MARBLE_DATA_DIR@\placemarks\baseplacemarks.cache" />
--        <File Id="BoundaryPlacemarksCache" DiskId="1"
--              Name="boundaryplacemarks.cache" Source="@MARBLE_DATA_DIR@\placemarks\boundaryplacemarks.cache" />
--        <File Id="ElevPlacemarksCache" DiskId="1"
--              Name="elevplacemarks.cache" Source="@MARBLE_DATA_DIR@\placemarks\elevplacemarks.cache" />
--      </Component>
--    </DirectoryRef>
--    <DirectoryRef Id="MarbleStarsDataDir">
--      <Component Id="MarbleStarsData" Guid="$(var.MarbleStarsDataGuid)">
--        <File Id="StarsDat" DiskId="1"
--              Name="stars.dat" Source="@MARBLE_DATA_DIR@\stars\stars.dat" />
--      </Component>
--    </DirectoryRef>
--    <DirectoryRef Id="MarbleSvgDataDir">
--      <Component Id="MarbleSvgData" Guid="$(var.MarbleSvgDataGuid)">
--        <File Id="WorldMapSvg" DiskId="1"
--              Name="worldmap.svg" Source="@MARBLE_DATA_DIR@\svg\worldmap.svg" />
--      </Component>
--    </DirectoryRef>
--    <ComponentGroup Id="MarbleData">
--      <ComponentRef Id="MarbleLegendsData" />
--      <ComponentRef Id="MarbleBlueMarbleData" />
--      <ComponentRef Id="MarbleCityLightsData" />
--      <ComponentRef Id="MarbleSrtmData" />
--      <ComponentRef Id="MarbleMwdbiiData" />
--      <ComponentRef Id="MarblePlacemarkData" />
--      <ComponentRef Id="MarbleStarsData" />
--      <ComponentRef Id="MarbleSvgData" />
--    </ComponentGroup>
+-      <!-- Marble-related plugin files -->
+-      <DirectoryRef Id="MarblePluginsDir">
+-        <Component Id="MarblePlugins" Guid="$(var.MarblePluginsGuid)">
+-          <File Id="MarbleOverviewMapPlugin" DiskId="1"
+-                Name="libMarbleOverviewMap.dll" Source="@MARBLE_OVERVIEWMAP_PLUGIN@" />
+-          <File Id="MarbleStarsPlugin" DiskId="1"
+-                Name="libMarbleStarsPlugin.dll" Source="@MARBLE_STARS_PLUGIN@" />
+-        </Component>
+-      </DirectoryRef>
+-            
+-      <!-- Marble-related data files -->
+-      <DirectoryRef Id="MarbleDataDir">
+-        <Component Id="MarbleLegendsData" Guid="$(var.MarbleLegendsDataGuid)">
+-          <File Id="LandColorsLegend" DiskId="1"
+-                Name="landcolors.leg" Source="@MARBLE_DATA_DIR@\landcolors.leg" />
+-          <File Id="SeaColorsLegend" DiskId="1"
+-                Name="seacolors.leg" Source="@MARBLE_DATA_DIR@\seacolors.leg" />
+-        </Component>
+-      </DirectoryRef>
+-      <DirectoryRef Id="MarbleBlueMarbleDataDir">
+-        <Component Id="MarbleBlueMarbleData" Guid="$(var.MarbleBlueMarbleDataGuid)">
+-          <File Id="MarbleBlueMarbleDgml" DiskId="1"
+-                Name="bluemarble.dgml" Source="@MARBLE_DATA_DIR@\maps\earth\bluemarble\bluemarble.dgml" />
+-        </Component>
+-      </DirectoryRef>
+-      <DirectoryRef Id="MarbleCityLightsDataDir">
+-        <Component Id="MarbleCityLightsData" Guid="$(var.MarbleCityLightsDataGuid)">
+-          <File Id="MarbleCityLightsDgml" DiskId="1"
+-                Name="citylights.dgml" Source="@MARBLE_DATA_DIR@\maps\earth\citylights\citylights.dgml" />
+-        </Component>
+-      </DirectoryRef>
+-      <DirectoryRef Id="MarbleSrtmDataDir">
+-        <Component Id="MarbleSrtmData" Guid="$(var.MarbleSrtmDataGuid)">
+-          <File Id="MarbleSrtmDgml" DiskId="1"
+-                Name="srtm.dgml" Source="@MARBLE_DATA_DIR@\maps\earth\srtm\srtm.dgml" />
+-          <File Id="MarbleSrtmJpg" DiskId="1"
+-                Name="srtm.jpg" Source="@MARBLE_DATA_DIR@\maps\earth\srtm\srtm.jpg" />
+-        </Component>
+-      </DirectoryRef>
+-      <DirectoryRef Id="MarbleMwdbiiDir">
+-        <Component Id="MarbleMwdbiiData" Guid="$(var.MarbleMwdbiiDataGuid)">
+-          <File Id="DatelinePnt" DiskId="1"
+-                Name="DATELINE.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\DATELINE.PNT" />
+-          <File Id="PAustPnt" DiskId="1"
+-                Name="PAUST.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PAUST.PNT" />
+-          <File Id="PBorderPnt" DiskId="1"
+-                Name="PBORDER.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PBORDER.PNT" />
+-          <File Id="PCanProvPnt" DiskId="1"
+-                Name="PCANPROV.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PCANPROV.PNT" />
+-          <File Id="PCoastPnt" DiskId="1"
+-                Name="PCOAST.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PCOAST.PNT" />
+-          <File Id="PDiffBorderPnt" DiskId="1"
+-                Name="PDIFFBORDER.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PDIFFBORDER.PNT" />
+-          <File Id="PGlacierPnt" DiskId="1"
+-                Name="PGLACIER.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PGLACIER.PNT" />
+-          <File Id="PIslandPnt" DiskId="1"
+-                Name="PISLAND.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PISLAND.PNT" />
+-          <File Id="PLakePnt" DiskId="1"
+-                Name="PLAKE.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PLAKE.PNT" />
+-          <File Id="PLakeIslandPnt" DiskId="1"
+-                Name="PLAKEISLAND.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PLAKEISLAND.PNT" />
+-          <File Id="PMexicoPnt" DiskId="1"
+-                Name="PMEXICO.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PMEXICO.PNT" />
+-          <File Id="PUsa48DiffPnt" DiskId="1"
+-                Name="PUSA48.DIFF.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PUSA48.DIFF.PNT" />
+-          <File Id="PUsa48Pnt" DiskId="1"
+-                Name="PUSA48.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\PUSA48.PNT" />
+-          <File Id="RiverPnt" DiskId="1"
+-                Name="RIVER.PNT" Source="@MARBLE_DATA_DIR@\mwdbii\RIVER.PNT" />
+-        </Component>
+-      </DirectoryRef>
+-      <DirectoryRef Id="MarblePlacemarkDataDir">
+-        <Component Id="MarblePlacemarkData" Guid="$(var.MarblePlacemarkDataGuid)">
+-          <File Id="BasePlacemarksCache" DiskId="1"
+-                Name="baseplacemarks.cache" Source="@MARBLE_DATA_DIR@\placemarks\baseplacemarks.cache" />
+-          <File Id="BoundaryPlacemarksCache" DiskId="1"
+-                Name="boundaryplacemarks.cache" Source="@MARBLE_DATA_DIR@\placemarks\boundaryplacemarks.cache" />
+-          <File Id="ElevPlacemarksCache" DiskId="1"
+-                Name="elevplacemarks.cache" Source="@MARBLE_DATA_DIR@\placemarks\elevplacemarks.cache" />
+-        </Component>
+-      </DirectoryRef>
+-      <DirectoryRef Id="MarbleStarsDataDir">
+-        <Component Id="MarbleStarsData" Guid="$(var.MarbleStarsDataGuid)">
+-          <File Id="StarsDat" DiskId="1"
+-                Name="stars.dat" Source="@MARBLE_DATA_DIR@\stars\stars.dat" />
+-        </Component>
+-      </DirectoryRef>
+-      <DirectoryRef Id="MarbleSvgDataDir">
+-        <Component Id="MarbleSvgData" Guid="$(var.MarbleSvgDataGuid)">
+-          <File Id="WorldMapSvg" DiskId="1"
+-                Name="worldmap.svg" Source="@MARBLE_DATA_DIR@\svg\worldmap.svg" />
+-        </Component>
+-      </DirectoryRef>
+-      <ComponentGroup Id="MarbleData">
+-        <ComponentRef Id="MarbleLegendsData" />
+-        <ComponentRef Id="MarbleBlueMarbleData" />
+-        <ComponentRef Id="MarbleCityLightsData" />
+-        <ComponentRef Id="MarbleSrtmData" />
+-        <ComponentRef Id="MarbleMwdbiiData" />
+-        <ComponentRef Id="MarblePlacemarkData" />
+-        <ComponentRef Id="MarbleStarsData" />
+-        <ComponentRef Id="MarbleSvgData" />
+-      </ComponentGroup>
+-    <?endif?>
 +        <Directory Id="INSTALLDIR" Name="Vidalia">
 +          <Component Id="GeoIPCache" Guid="$(var.CurrGeoIPCacheGUID)">
 +            <CreateFolder/>
@@ -644,12 +662,14 @@
          <ComponentRef Id="VidaliaExecutable" />
 -        <ComponentRef Id="VidaliaDocuments" />
          <ComponentRef Id="QtLibrary" />
--        <ComponentRef Id="QtImageFormatPlugins" />
          <ComponentRef Id="MinGWLibrary" />
          <ComponentRef Id="OpenSSLLibrary" />
--        <ComponentRef Id="MarbleWidgetLibrary" />
--        <ComponentRef Id="MarblePlugins" />
--        <ComponentGroupRef Id="MarbleData"/>
+-        <?if $(var.UseMarble) = "ON"?>
+-          <ComponentRef Id="QtImageFormatPlugins" />
+-          <ComponentRef Id="MarbleWidgetLibrary" />
+-          <ComponentRef Id="MarblePlugins" />
+-          <ComponentGroupRef Id="MarbleData"/>
+-        <?endif?>
 +        <ComponentRef Id="GeoIPCache" />
 +        <ComponentRef Id="PolipoConfig" />
 +<?ifndef NOMARBLE ?>
@@ -692,8 +712,6 @@
      <!-- Set the UI options -->
      <UIRef Id="WixUI_Custom" />
 -    <Icon Id="vidalia.ico" SourceFile="@Vidalia_SOURCE_DIR@\src\vidalia\res\icons\vidalia.ico" />
--    <WixVariable Id="WixUIBannerBmp" Value="@Vidalia_SOURCE_DIR@\pkg\win32\msi-header.bmp" />
--    <WixVariable Id="WixUIDialogBmp" Value="@Vidalia_SOURCE_DIR@\pkg\win32\msi-welcome.bmp" />
 +    <Icon Id="vidalia.ico" SourceFile="src\vidalia\res\icons\vidalia.ico" />
 +    <WixVariable Id="WixUIBannerBmp" Value="pkg\win32\msi-header.bmp" />
 +    <WixVariable Id="WixUIDialogBmp" Value="pkg\win32\msi-welcome.bmp" />
@@ -701,7 +719,7 @@
  </Wix>
 diff -Naur a/src/common/win32.cpp b/src/common/win32.cpp
 --- a/src/common/win32.cpp	2009-02-16 22:53:13.437184000 +0000
-+++ b/src/common/win32.cpp	2009-03-07 03:57:41.691104680 +0000
++++ b/src/common/win32.cpp	2009-03-07 03:57:41.000000000 +0000
 @@ -67,16 +67,20 @@
  QString
  win32_program_files_folder()
@@ -727,822 +745,9 @@
  }
  
  /** Returns the value in keyName at keyLocation. 
-diff -Naur a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt
---- a/src/tools/CMakeLists.txt	2009-02-27 21:08:55.152739000 +0000
-+++ b/src/tools/CMakeLists.txt	2009-03-07 02:42:35.594135000 +0000
-@@ -17,5 +17,6 @@
-   add_subdirectory(po2nsh)
-   add_subdirectory(nsh2po EXCLUDE_FROM_ALL)
-   add_subdirectory(po2wxl)
-+  add_subdirectory(wixtool)
- endif(WIN32)
- 
-diff -Naur a/src/tools/po2wxl/po2wxl.cpp b/src/tools/po2wxl/po2wxl.cpp
---- a/src/tools/po2wxl/po2wxl.cpp	2009-03-01 07:55:10.500878000 +0000
-+++ b/src/tools/po2wxl/po2wxl.cpp	2009-03-07 03:57:41.692104528 +0000
-@@ -19,9 +19,49 @@
- #define WXL_NAMESPACE                  "http://schemas.microsoft.com/wix/2006/localization";
- #define WXL_ELEMENT_ROOT               "WixLocalization"
- #define WXL_ELEMENT_MESSAGE            "String"
-+#define WXL_ATTR_LANGUAGE              "LCID"
- #define WXL_ATTR_MESSAGE_ID            "Id"
- #define WXL_ATTR_TRANSLATION_TYPE      "Culture"
--#define WXL_ATTR_OVERRIDABLE           "Overridable"
-+
-+/** We need to provide an element with the LCID for this locale 
-+ * that is used in the WiX Product definition. */
-+QString
-+culture_lcid(const QString &culture)
-+{
-+  /* For now character encoding focused, not generally locale / dialect aware. */
-+  QString lcid = "0";
-+  if(!culture.compare("en", Qt::CaseInsensitive)) 
-+    lcid = "1033";
-+  else if(!culture.compare("cs", Qt::CaseInsensitive)) 
-+    lcid = "1029";
-+  else if(!culture.compare("de", Qt::CaseInsensitive)) 
-+    lcid = "1031";
-+  else if(!culture.compare("es", Qt::CaseInsensitive)) 
-+    lcid = "1034";
-+  else if(!culture.compare("fa", Qt::CaseInsensitive)) 
-+    lcid = "1065";
-+  else if(!culture.compare("fi", Qt::CaseInsensitive)) 
-+    lcid = "1035";
-+  else if(!culture.compare("fr", Qt::CaseInsensitive)) 
-+    lcid = "1036";
-+  else if(!culture.compare("he", Qt::CaseInsensitive)) 
-+    lcid = "1037";
-+  else if(!culture.compare("it", Qt::CaseInsensitive)) 
-+    lcid = "1040";
-+  else if(!culture.compare("nl", Qt::CaseInsensitive)) 
-+    lcid = "1043";
-+  else if(!culture.compare("pl", Qt::CaseInsensitive)) 
-+    lcid = "1045";
-+  else if(!culture.compare("pt", Qt::CaseInsensitive)) 
-+    lcid = "1046";
-+  else if(!culture.compare("ro", Qt::CaseInsensitive)) 
-+    lcid = "1048";
-+  else if(!culture.compare("ru", Qt::CaseInsensitive)) 
-+    lcid = "1049";
-+  else if(!culture.compare("sv", Qt::CaseInsensitive)) 
-+    lcid = "1053";
-+  return lcid;
-+}
- 
- /** Create a new message string element using the source string <b>msgid</b>
-  * and the translation <b>msgstr</b> and assign identifier attribute. */
-@@ -33,11 +73,6 @@
- 
-   message = wxl->createElement(WXL_ELEMENT_MESSAGE);
-   message.setAttribute(WXL_ATTR_MESSAGE_ID, strid);
--
--  /* Always allow localized string to be dynamic. This is required for
--   * multi-language packages to link correctly.
--   */
--  message.setAttribute(WXL_ATTR_OVERRIDABLE, "yes");
-   if (!msgstr.isEmpty())
-     message.appendChild(wxl->createTextNode(msgstr));
-   else
-@@ -146,7 +181,12 @@
-   Q_ASSERT(errorMessage);
- 
-   *wxl = new_wxl_document(culture);
--  
-+
-+  /* Set the LCID to Language code for use as !(loc.LCID) in Product. */
-+  QString lcid = culture_lcid(culture); 
-+  wxl->documentElement().appendChild(
-+    new_message_element(wxl, WXL_ATTR_LANGUAGE, lcid, lcid)); 
-+
-   skip_po_header(po);
-   line = read_next_line(po);
-   while (!po->atEnd()) {
-diff -Naur a/src/tools/wixtool/CMakeLists.txt b/src/tools/wixtool/CMakeLists.txt
---- a/src/tools/wixtool/CMakeLists.txt	1970-01-01 00:00:00.000000000 +0000
-+++ b/src/tools/wixtool/CMakeLists.txt	2009-03-07 02:42:35.595135000 +0000
-@@ -0,0 +1,28 @@
-+##
-+##  $Id$
-+## 
-+##  This file is part of Vidalia, and is subject to the license terms in the
-+##  LICENSE file, found in the top level directory of this distribution. If 
-+##  you did not receive the LICENSE file with this file, you may obtain it
-+##  from the Vidalia source package distributed by the Vidalia Project at
-+##  http://www.vidalia-project.net/. No part of Vidalia, including this file,
-+##  may be copied, modified, propagated, or distributed except according to
-+##  the terms described in the LICENSE file.
-+##
-+
-+## wixtool source files
-+set(wixtool_SRCS
-+  wixtool.cpp
-+)
-+
-+## Create the wixtool executable
-+add_executable(wixtool ${wixtool_SRCS})
-+
-+## Link the executable with the appropriate Qt libraries
-+target_link_libraries(wixtool ${QT_LIBRARIES})
-+
-+## Remember location so we can use it in custom commands
-+get_target_property(WIXTOOL_EXECUTABLE wixtool LOCATION)
-+set(VIDALIA_WIXTOOL_EXECUTABLE ${WIXTOOL_EXECUTABLE}
-+    CACHE STRING "Location of Vidalia's wixtool program." FORCE)
-+
-diff -Naur a/src/tools/wixtool/wixtool.cpp b/src/tools/wixtool/wixtool.cpp
---- a/src/tools/wixtool/wixtool.cpp	1970-01-01 00:00:00.000000000 +0000
-+++ b/src/tools/wixtool/wixtool.cpp	2009-03-10 08:52:45.590313000 +0000
-@@ -0,0 +1,687 @@
-+/*
-+**  $Id$
-+**
-+**  This file is part of Vidalia, and is subject to the license terms in the
-+**  LICENSE file, found in the top level directory of this distribution. If you
-+**  did not receive the LICENSE file with this file, you may obtain it from the
-+**  Vidalia source package distributed by the Vidalia Project at
-+**  http://www.vidalia-project.net/. No part of Vidalia, including this file,
-+**  may be copied, modified, propagated, or distributed except according to the
-+**  terms described in the LICENSE file.
-+*/
-+
-+#include <QFile>
-+#include <QDomDocument>
-+#include <QTextStream>
-+#include <QTextCodec>
-+#include <QStringList>
-+#include <stdlib.h>
-+
-+#define WIX_ATTR_ID  "Id"
-+#define WIX_ATTR_DIRACTION "uninstall"
-+#define WIX_ATTR_REGACTION "createAndRemoveOnUninstall"
-+#define WIX_ATTR_VALUE "Value"
-+#define WIX_ATTR_KEY "KeyPath"
-+#define WIX_ATTR_GUID "Guid"
-+#define WIX_ATTR_NAME "Name"
-+#define WIX_ATTR_REG_TYPE "Type"
-+#define WIX_ATTR_REG_NAME "Name"
-+#define WIX_ATTR_REG_ROOT "Root"
-+#define WIX_ATTR_REG_KEYPATH  "Key"
-+#define WIX_ATTR_REG_ACTION  "Action"
-+#define WIX_REG_KEY_TYPE "integer"
-+#define WIX_TAG_FILE "File"
-+#define WIX_TAG_DIR "Directory"
-+#define WIX_TAG_FEATURE "Feature"
-+#define WIX_TAG_COMPONENT "Component"
-+#define WIX_TAG_COMPONENT_REF "ComponentRef"
-+#define WIX_TAG_CREATEDIR "CreateFolder"
-+#define WIX_TAG_REMOVEDIR "RemoveFolder"
-+#define WIX_TAG_REGKEY "RegistryKey"
-+#define WIX_TAG_REGVAL "RegistryValue"
-+
-+typedef void (*TraverseCallback)(void *cbdata, QDomElement e);
-+
-+typedef struct s_SpliceData {
-+  QString      dtag;
-+  QString      did;
-+  QDomElement  splice;
-+} SpliceData;
-+
-+typedef struct s_ReplaceData {
-+  QString  dtag;
-+  QString  did;
-+  QString  dprop;
-+  QString  newtag;
-+  QString  newprop;
-+  QString  newpropval;
-+} ReplaceData;
-+
-+typedef struct s_AddData {
-+  QString  dtag;
-+  QString  did;
-+  QString  newtag;
-+  QString  newprop;
-+  QString  newpropval;
-+} AddData;
-+
-+typedef struct s_UserLocalData {
-+  QString      keypath;
-+  QString      featureid;
-+  QStringList  newcomps;
-+} UserLocalData;
-+
-+bool
-+do_walkdoc(QDomNode  n,
-+  TraverseCallback  cb,
-+  void *            cbdata,
-+  QString *errorMessage)
-+{
-+  QTextStream error(stderr);
-+  if ( !n.isNull() ) {
-+    if ( n.isElement() ) {
-+      QDomElement e = n.toElement();
-+      (*cb)(cbdata, e);
-+    }
-+    if ( n.hasChildNodes() ) {
-+      QDomNodeList subnodes = n.childNodes();
-+      int i = 0;
-+      while (i < subnodes.count()) {
-+        do_walkdoc(subnodes.item(i++), cb, cbdata, errorMessage);
-+      }
-+    }
-+  }
-+  return true;
-+}
-+
-+bool
-+walkdoc(QDomDocument *doc,
-+  TraverseCallback  cb,
-+  void *            cbdata,
-+  QString *errorMessage)
-+{
-+  QTextStream error(stderr);
-+  QDomNode n = doc->documentElement();
-+  do_walkdoc(n, cb, cbdata, errorMessage);
-+  return true;
-+}
-+
-+void 
-+splicefunc(void *cbdata,
-+ QDomElement e)
-+{
-+  SpliceData *d = reinterpret_cast<SpliceData *>(cbdata);
-+  QString eid = e.attribute(WIX_ATTR_ID);
-+
-+  if (e.tagName().compare(d->dtag) == 0) {
-+    /* if a specific Id is set, verify it too. */
-+    if (d->did.isEmpty() ||
-+        (eid.size() && !eid.compare(d->did)) ) {
-+
-+      /* expected behavior is to graft children of the splice under target.
-+       * if we're only given a single element graft it instead.
-+       */
-+      if (d->splice.hasChildNodes()) {
-+        QDomNodeList subnodes = d->splice.childNodes();
-+        int i = 0;
-+        while (i < subnodes.count()) {
-+          e.appendChild(e.ownerDocument().importNode(subnodes.item(i++), true));
-+        }
-+      }
-+      else {
-+        e.appendChild(e.ownerDocument().importNode(d->splice, true));
-+      }
-+    }
-+  }
-+}
-+
-+/** Make modifications to requested documents.
-+ * returns false on error and <b>errorMessage</b> will be set.
-+ */
-+bool
-+docsplice(QDomDocument *doc,
-+  QString arguments,
-+  QString *errorMessage)
-+{
-+  Q_ASSERT(doc);
-+  Q_ASSERT(errorMessage);
-+  SpliceData  cbdata;
-+
-+  QStringList spliceinfo = arguments.split("=");
-+  if (spliceinfo.count() != 2) {
-+    *errorMessage = "Invalid argument for splice command: " + arguments;
-+    return false;
-+  }
-+  if (spliceinfo[0].contains(':')) {
-+    /* Id syntax */
-+    QStringList destinfo = spliceinfo[0].split(":");
-+    cbdata.dtag = destinfo[0];
-+    cbdata.did  = destinfo[1];
-+  }
-+  else {
-+    cbdata.dtag = spliceinfo[0];
-+  }
-+
-+  QStringList  srcinfo = spliceinfo[1].split(":");
-+  if (srcinfo.count() < 2) {
-+    *errorMessage = "Invalid source argument for splice command: " + arguments;
-+    return false;
-+  }
-+  QFile spliceFile(srcinfo[0]);
-+  if (!spliceFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
-+    *errorMessage = QString("Unable to open '%1' for reading: %2\n")
-+                     .arg(srcinfo[0]).arg(spliceFile.errorString());
-+    return false;
-+  }
-+  QTextStream sfiletxt(&spliceFile);
-+  QDomDocument sdoc;
-+  QString parseError;
-+  int  badline, badcol;
-+  if (!sdoc.setContent (sfiletxt.readAll(), false, &parseError, &badline, &badcol)) {
-+    *errorMessage = QString("Error parsing splice document '%1' at line %2 and column %3: %4")
-+                    .arg(srcinfo[0]).arg(badline).arg(badcol).arg(parseError);
-+    return false;
-+  }
-+
-+  QDomNodeList elist = sdoc.elementsByTagName(srcinfo[1]);
-+  if (elist.count() == 0) {
-+    *errorMessage = QString("Unable to locate splice element '%1' in document.\n").arg(srcinfo[1]);
-+    return false;
-+  }
-+  if (srcinfo.count() == 3) {
-+    /* Id syntax for source elem */
-+    for (int i=0; i < elist.count(); i++) {
-+      QString eid = elist.item(i).toElement().attribute(WIX_ATTR_ID);
-+      if (eid.size() && !eid.compare(srcinfo[2])) {
-+        cbdata.splice = elist.item(i).toElement();
-+      }
-+    }
-+  }
-+  else {
-+    /* without an Id the tag name should be unique. */
-+    cbdata.splice = elist.item(0).toElement();
-+  }
-+  return walkdoc(doc, &splicefunc, &cbdata, errorMessage);
-+}
-+
-+void 
-+replacefunc(void *cbdata,
-+ QDomElement e)
-+{
-+  ReplaceData *d = reinterpret_cast<ReplaceData *>(cbdata);
-+  QString eid = e.attribute(WIX_ATTR_ID);
-+
-+  if (e.tagName().compare(d->dtag) == 0) {
-+    /* if a specific Id is set, verify it too. */
-+    if (d->did.isEmpty() ||
-+        (eid.size() && !eid.compare(d->did)) ) {
-+
-+      /* no destination means remove node from tree */
-+      if (d->newtag.isNull()) {
-+        QDomNode parent = e.parentNode();
-+        parent.removeChild(e);
-+      }
-+      else {
-+        if (d->newtag.compare(e.tagName())) {
-+          e.setTagName (d->newtag);
-+        }
-+        if (d->newprop.isNull()) {
-+          /* clear all attributes (except Id if present) */
-+          QDomNamedNodeMap attrs = e.attributes();
-+          for (int i = 0; i < attrs.count(); i++) {
-+            if (attrs.item(i).nodeName().compare(WIX_ATTR_ID)) {
-+              e.removeAttribute(attrs.item(i).nodeName());
-+            }
-+          }
-+        }
-+        else {
-+          /* only modify / clear a specific property */
-+          QDomNode prop = e.attributeNode(d->newprop);
-+          if (!prop.isNull()) {
-+            e.setAttribute(d->newprop, d->newpropval);
-+          }
-+        }
-+      }
-+    }
-+  }
-+}
-+
-+/** Make modifications to requested documents.
-+ * returns false on error and <b>errorMessage</b> will be set.
-+ */
-+bool
-+docreplace(QDomDocument *doc,
-+  QString arguments,
-+  QString *errorMessage)
-+{
-+  Q_ASSERT(doc);
-+  Q_ASSERT(errorMessage);
-+  ReplaceData  cbdata;
-+
-+  QStringList replaceinfo = arguments.split("=");
-+  if (replaceinfo.count() < 1) {
-+    *errorMessage = "Invalid argument for replace command: " + arguments;
-+    return false;
-+  }
-+  if (replaceinfo[0].contains(':')) {
-+    /* Id syntax */
-+    QStringList destinfo = replaceinfo[0].split(":");
-+    cbdata.dtag = destinfo[0];
-+    cbdata.did  = destinfo[1];
-+    if (destinfo.count() >= 3) {
-+      cbdata.dprop = destinfo[2];
-+    }
-+  }
-+  else {
-+    cbdata.dtag = replaceinfo[0];
-+  }
-+  if (replaceinfo.count() > 1) {
-+    QStringList  srcinfo = replaceinfo[1].split(":");
-+    if (srcinfo.count() < 1) {
-+      *errorMessage = "Invalid target argument for replace command: " + arguments;
-+      return false;
-+    }
-+    if (srcinfo.count() >= 1) {
-+      if (srcinfo[0].length()) cbdata.newtag = srcinfo[0];
-+    }
-+    if (srcinfo.count() >= 2) {
-+      if (srcinfo[1].length()) cbdata.newprop = srcinfo[1];
-+    }
-+    if (srcinfo.count() >= 3) {
-+      if (srcinfo[2].length()) cbdata.newpropval = srcinfo[2];
-+    }
-+  }
-+  return walkdoc(doc, &replacefunc, &cbdata, errorMessage);
-+}
-+
-+void 
-+addfunc(void *cbdata,
-+ QDomElement e)
-+{
-+  AddData *d = reinterpret_cast<AddData *>(cbdata);
-+  QString eid = e.attribute(WIX_ATTR_ID);
-+
-+  if (e.tagName().compare(d->dtag) == 0) {
-+    /* if a specific Id is set, verify it too. */
-+    if (d->did.isEmpty() ||
-+        (eid.size() && !eid.compare(d->did)) ) {
-+      if (d->newtag.compare(d->dtag)) {
-+        QDomElement ne = e.ownerDocument().createElement(d->newtag);
-+        if (!d->newprop.isNull()) {
-+          ne.setAttribute(d->newprop, d->newpropval);
-+        }
-+        e.appendChild(ne);
-+      }
-+      else {
-+        e.setAttribute(d->newprop, d->newpropval);
-+      }
-+    }
-+  }
-+}
-+
-+/** Make modifications to requested documents.
-+ * returns false on error and <b>errorMessage</b> will be set.
-+ */
-+bool
-+docadd(QDomDocument *doc,
-+  QString arguments,
-+  QString *errorMessage)
-+{
-+  Q_ASSERT(doc);
-+  Q_ASSERT(errorMessage);
-+  AddData  cbdata;
-+
-+  QStringList addinfo = arguments.split("=");
-+  if (addinfo.count() < 1) {
-+    *errorMessage = "Invalid argument for add command: " + arguments;
-+    return false;
-+  }
-+  if (addinfo[0].contains(':')) {
-+    /* Id syntax */
-+    QStringList destinfo = addinfo[0].split(":");
-+    cbdata.dtag = destinfo[0];
-+    cbdata.did  = destinfo[1];
-+  }
-+  else {
-+    cbdata.dtag = addinfo[0];
-+  }
-+  if (addinfo.count() > 1) {
-+    QStringList  srcinfo = addinfo[1].split(":");
-+    if (srcinfo.count() < 1) {
-+      *errorMessage = "Invalid target argument for add command: " + arguments;
-+      return false;
-+    }
-+    if (srcinfo.count() >= 1) {
-+      if (srcinfo[0].length()) cbdata.newtag = srcinfo[0];
-+    }
-+    if (srcinfo.count() >= 2) {
-+      if (srcinfo[1].length()) cbdata.newprop = srcinfo[1];
-+    }
-+    if (srcinfo.count() >= 3) {
-+      if (srcinfo[2].length()) cbdata.newpropval = srcinfo[2];
-+    }
-+  }
-+  return walkdoc(doc, &addfunc, &cbdata, errorMessage);
-+}
-+
-+bool
-+createRegLocalComponent(QDomElement e,
-+ QString dirName,
-+ QString keyPath)
-+{ 
-+  QDomElement nrk = e.ownerDocument().createElement(WIX_TAG_REGKEY);
-+  QDomElement nrv = e.ownerDocument().createElement(WIX_TAG_REGVAL);
-+  nrk.setAttribute(WIX_ATTR_REG_ROOT, "HKCU");
-+  nrk.setAttribute(WIX_ATTR_REG_ACTION, "createAndRemoveOnUninstall");
-+  nrk.setAttribute(WIX_ATTR_REG_KEYPATH, keyPath);
-+  nrv.setAttribute(WIX_ATTR_REG_TYPE, WIX_REG_KEY_TYPE);
-+  nrv.setAttribute(WIX_ATTR_REG_NAME, dirName);
-+  nrv.setAttribute(WIX_ATTR_VALUE, "1");
-+  nrv.setAttribute(WIX_ATTR_KEY, "yes");
-+  nrk.appendChild(nrv);
-+  e.appendChild(nrk);
-+}
-+
-+bool
-+createDirMgmtComponent(QDomElement e,
-+ QString dirName)
-+{
-+  QDomElement nce;
-+  /* An empty dir might produce a createdir, so only add if not present. */
-+  if (e.elementsByTagName(WIX_TAG_CREATEDIR).count() == 0) {
-+    nce = e.ownerDocument().createElement(WIX_TAG_CREATEDIR);
-+    e.appendChild(nce);
-+  }
-+  nce = e.ownerDocument().createElement(WIX_TAG_REMOVEDIR);
-+  nce.setAttribute("On", WIX_ATTR_DIRACTION);
-+  nce.setAttribute(WIX_ATTR_ID, QString("Remove").append(dirName));
-+  e.appendChild(nce);
-+}
-+
-+void
-+userlocalfunc(void *cbdata,
-+ QDomElement e)
-+{
-+  UserLocalData *ulinfo = reinterpret_cast<UserLocalData *>(cbdata);
-+  QString eid = e.attribute(WIX_ATTR_ID);
-+
-+  if (e.tagName().compare(WIX_TAG_FILE) == 0) {
-+    e.removeAttribute(WIX_ATTR_KEY);
-+  }
-+  else if (e.tagName().compare(WIX_TAG_COMPONENT) == 0) {
-+    /* If the WiX tools get confused we need to remove KeyPath attrs
-+     * on any component elements after creation or merging.
-+     * Empty directories with a CreateFolder and nothing else will do this.
-+     */
-+    e.removeAttribute(WIX_ATTR_KEY);
-+  }
-+  else if (e.tagName().compare(WIX_TAG_FEATURE) == 0) {
-+    /* be sure to remove any default feature names; changed added above. */
-+    QDomNodeList cnl = e.elementsByTagName(WIX_TAG_COMPONENT_REF);
-+    for (int i = 0; i < cnl.count(); i++) {
-+      QDomElement cre = cnl.item(i).toElement();
-+      if (cre.attribute(WIX_ATTR_ID).compare(WIX_TAG_COMPONENT) == 0) {
-+        e.removeChild(cre);
-+      }
-+    }
-+    if (ulinfo->featureid.compare(e.attribute(WIX_ATTR_ID)) == 0) {
-+      /* this is the target feature element for the new components, if any. */
-+      QDomElement ne;
-+      for (int i = 0; i < ulinfo->newcomps.count(); i++) {
-+        QString currid = ulinfo->newcomps[i];
-+        ne = e.ownerDocument().createElement(WIX_TAG_COMPONENT_REF);
-+        ne.setAttribute(WIX_ATTR_ID, currid);
-+        e.appendChild(ne);
-+      }
-+    }
-+  }
-+  else if (e.tagName().compare(WIX_TAG_DIR) == 0) {
-+    QString dirName = e.attribute(WIX_ATTR_NAME);
-+    QString dirId = e.attribute(WIX_ATTR_ID);
-+    /* find all child components for this dir and see if it contains:
-+     * create/remove folder elements, a registry element
-+     */
-+    if ( e.hasChildNodes() ) {
-+      QDomElement fc;
-+      bool  hasComponent = false;
-+      bool  hasRegKey;
-+      QDomNodeList subnodes = e.childNodes();
-+      for (int i = 0; i < subnodes.count(); i++) {
-+        hasRegKey = false;
-+        if (subnodes.item(i).isElement()) {
-+          QDomElement ce = subnodes.item(i).toElement();
-+          if (ce.tagName().compare(WIX_TAG_COMPONENT) == 0) {
-+            if (!hasComponent) {
-+              hasComponent = true;
-+              fc = ce;
-+              if (ce.attribute(WIX_ATTR_ID).compare(WIX_TAG_COMPONENT) == 0) {
-+                /* Fix default named components before adding registry elements. */
-+                ce.setAttribute(WIX_ATTR_ID, QString("DCOMP").append(dirName));
-+                ulinfo->newcomps.append(ce.attribute(WIX_ATTR_ID));
-+              }
-+              if (ce.elementsByTagName(WIX_TAG_REMOVEDIR).count() == 0) {
-+                createDirMgmtComponent(ce, ce.attribute(WIX_ATTR_ID));
-+              }
-+            }
-+            QDomNodeList compnodes = ce.childNodes();
-+            for (int j = 0; j < compnodes.count(); j++) {
-+              if (compnodes.item(j).isElement()) {
-+                QDomElement compe = compnodes.item(j).toElement();
-+                if (compe.tagName().compare(WIX_TAG_REGKEY) == 0) {
-+                  hasRegKey = true;
-+                }
-+              }
-+            }
-+            if (!hasRegKey) {
-+              createRegLocalComponent(ce, QString("RK").append(ce.attribute(WIX_ATTR_ID)), ulinfo->keypath);
-+            }
-+          }
-+        }
-+      }
-+      if (!hasComponent) {
-+        /* Certain system directories must be ignored; we don't manage them. */
-+        if (dirId.compare("LocalAppDataFolder") &&
-+            dirId.compare("AppDataFolder") &&
-+            dirId.compare("CommonAppDataFolder") &&
-+            dirId.compare("CommonFilesFolder") &&
-+            dirId.compare("DesktopFolder") &&
-+            dirId.compare("PersonalFolder") &&
-+            dirId.compare("ProgramFilesFolder") &&
-+            dirId.compare("ProgramMenuFolder") &&
-+            dirId.compare("StartMenuFolder") &&
-+            dirId.compare("StartupFolder") &&
-+            dirId.compare("SystemFolder") &&
-+            dirId.compare("TempFolder") &&
-+            dirId.compare("WindowsFolder") ) {
-+          /* if there is no component under this dir parent then we
-+           * must create a component for the sole purpose of dir
-+           * creation with the requisite registry key path.
-+           */
-+          QDomElement ne = e.ownerDocument().createElement(WIX_TAG_COMPONENT);
-+          QString compId = QString("ULDirComp_").append(dirName);
-+          ne.setAttribute(WIX_ATTR_GUID, "*");
-+          ne.setAttribute(WIX_ATTR_ID, compId);
-+          e.appendChild(ne);
-+          createDirMgmtComponent(ne, dirName);
-+          createRegLocalComponent(ne, QString("DRK").append(dirName), ulinfo->keypath);
-+          ulinfo->newcomps.append(compId);
-+        }
-+      }
-+    }
-+  }
-+}
-+
-+/** Make modifications to requested documents.
-+ * returns false on error and <b>errorMessage</b> will be set.
-+ */
-+bool
-+docuserlocal(QDomDocument *doc,
-+  QString argument,
-+  QString *errorMessage)
-+{
-+  Q_ASSERT(doc);
-+  Q_ASSERT(errorMessage);
-+  UserLocalData  cbdata;
-+
-+  QStringList ulinfo = argument.split(":");
-+  if (ulinfo.count() < 2) {
-+    *errorMessage = "Invalid argument for userlocal command: " + argument;
-+    return false;
-+  }
-+  cbdata.keypath = ulinfo[0];
-+  cbdata.featureid = ulinfo[1];
-+  return walkdoc(doc, &userlocalfunc, &cbdata, errorMessage);
-+}
-+
-+/** Display application usage and exit. */
-+void
-+print_usage_and_exit()
-+{
-+  QTextStream error(stderr);
-+  error << "usage: wixtool <command> [-q] -i <infile> -o <outfile> <Arg0> [... <ArgN>]" << endl;
-+  error << "  command one of: " << endl;
-+  error << "    splice        Splice children from one document into another." << endl;
-+  error << "    replace       Replace elements or attributes in a document." << endl;
-+  error << "    add           Add elements or attributes into a document." << endl;
-+  error << "    userlocal     Convert File elements into per-user local elements." << endl;
-+  error << "  -i <infile>     Input or template file" << endl;
-+  error << "  -o <outfile>    Output file" << endl;
-+  error << endl;
-+  error << "  splice args:    desttagname[:Id]=file:basetag[:Id]" << endl;
-+  error << "    Splice children of basetag in file under desttagname" << endl;
-+  error << endl;
-+  error << "  replace args:   tagname[:Id]:property=newtagname[:Id]:property:value" << endl;
-+  error << "    If newtagname is empty the element is deleted" << endl;
-+  error << "    If newproperty is empty the property is deleted" << endl;
-+  error << endl;
-+  error << "  add args:       desttagname[:Id]=newtagname[:Id]:property:value" << endl;
-+  error << "    Add properties or child elements to target" << endl;
-+  error << "    If newtagname is empty only properties added to dest" << endl;
-+  error << endl;
-+  error << "  userlocal arg:  <registry key path>:<dest feature id>" << endl;
-+  error << "    Convert KeyPath File elements into the per user local idiom" << endl;
-+  error << "    with corresponding Create/RemoveDir and RegistryKey elements." << endl;
-+  error << endl;
-+  error << " NOTE: text content within an element is not accessible." << endl;
-+  error << "       Use the Value= attribute syntax if necessary." << endl;
-+  error << "       The optional :Id syntax restricts matching to elements with" << endl;
-+  error << "       the Id attribute set to the value indicated." << endl;
-+  error.flush();
-+  exit(1);
-+}
-+
-+int
-+main(int argc, char *argv[])
-+{
-+  QTextStream error(stderr);
-+  QString command, errorMessage;
-+  char *infile = 0, *outfile = 0;
-+  QTextCodec *codec = QTextCodec::codecForName("utf-8");
-+  bool quiet = false;
-+  QStringList commandargs;
-+
-+  /* Check for the correct number of input parameters. */
-+  if (argc < 6)
-+    print_usage_and_exit();
-+
-+  /* Verify command is supported. */
-+  command = argv[1];
-+  if ( command.compare("splice", Qt::CaseInsensitive) &&
-+       command.compare("replace", Qt::CaseInsensitive) &&
-+       command.compare("add", Qt::CaseInsensitive) &&
-+       command.compare("userlocal", Qt::CaseInsensitive) ) {
-+    print_usage_and_exit();
-+  }
-+
-+  /* Gather remaining arguments. */
-+  for (int i = 2; i < argc; i++) {
-+    QString arg(argv[i]);
-+    if (!arg.compare("-q", Qt::CaseInsensitive))
-+      quiet = true;
-+    else if (!arg.compare("-i", Qt::CaseInsensitive) && ++i < argc)
-+      infile = argv[i];
-+    else if (!arg.compare("-o", Qt::CaseInsensitive) && ++i < argc)
-+      outfile = argv[i];
-+    else if (infile && outfile) {
-+      commandargs.append(arg);
-+    }
-+  }
-+  if ( !infile || !outfile || !commandargs.count() ) {
-+    print_usage_and_exit();
-+  }
-+
-+  /* Open the source document for reading. */
-+  QFile srcFile(infile);
-+  QTextStream sfiletxt(&srcFile);
-+  sfiletxt.setCodec(codec);
-+  if (!srcFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
-+    error << QString("Unable to open '%1' for reading: %2\n").arg(infile)
-+                                                .arg(srcFile.errorString());
-+    return 2;
-+  }
-+
-+  /* Make sure the outfile does not exist before we use it. */
-+  if (QFile::exists(outfile)) {
-+    if (!QFile::remove(outfile)) {
-+      error << QString("Unable to truncate outfile '%1'\n").arg(outfile);
-+      return 2;
-+    }
-+  }
-+
-+  QDomDocument doc;
-+  QString parseError;
-+  int  badline, badcol;
-+  if (!doc.setContent (sfiletxt.readAll(), false, &parseError, &badline, &badcol)) {
-+    error << QString("Error parsing source document '%1' at line %2 and column %3: %4")
-+                    .arg(infile).arg(badline).arg(badcol).arg(parseError);
-+    return 3;
-+  }
-+
-+  if (!command.compare("userlocal", Qt::CaseInsensitive)) {
-+    if (!docuserlocal(&doc, commandargs[0], &errorMessage)) {
-+      error << QString("Unable to convert document components to user local: %1\n")
-+                          .arg(errorMessage);
-+      return 4;
-+    }
-+  }
-+  else {
-+    for (int i = 0; i < commandargs.count(); i++) {
-+      if (!command.compare("splice", Qt::CaseInsensitive)) {
-+        if (!docsplice(&doc, commandargs[i], &errorMessage)) {
-+          error << QString("Unable to process splice command '%1': %2\n")
-+                          .arg(commandargs[i]).arg(errorMessage);
-+          return 4;
-+        }
-+      }
-+      else if (!command.compare("replace", Qt::CaseInsensitive)) {
-+        if (!docreplace(&doc, commandargs[i], &errorMessage)) {
-+          error << QString("Unable to process replace command '%1': %2\n")
-+                          .arg(commandargs[i]).arg(errorMessage);
-+          return 4;
-+        }
-+      }
-+      else if (!command.compare("add", Qt::CaseInsensitive)) {
-+        if (!docadd(&doc, commandargs[i], &errorMessage)) { 
-+          error << QString("Unable to process add command '%1': %2\n")
-+                          .arg(commandargs[i]).arg(errorMessage);
-+          return 4;
-+        }
-+      }
-+    }
-+  }
-+
-+  /* Open the output file for writing. */
-+  QFile docFile(outfile);
-+  if (!docFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
-+    error << QString("Unable to open '%1' for writing: %2\n").arg(outfile)
-+                                                .arg(docFile.errorString());
-+    return 5;
-+  }
-+
-+  /* Write the .wxl output. */
-+  QTextStream out(&docFile);
-+  out << doc.toString(4);
-+
-+  return 0;
-+}
-+
 diff -Naur a/src/torcontrol/torcontrol.cpp b/src/torcontrol/torcontrol.cpp
 --- a/src/torcontrol/torcontrol.cpp	2009-02-24 03:20:58.105033000 +0000
-+++ b/src/torcontrol/torcontrol.cpp	2009-03-25 13:27:02.439544744 +0000
++++ b/src/torcontrol/torcontrol.cpp	2009-03-25 13:27:02.000000000 +0000
 @@ -57,6 +57,12 @@
  /** Default destructor */
  TorControl::~TorControl()
@@ -1640,7 +845,7 @@
      return _controlConn->send(cmd, errmsg);
 diff -Naur a/src/vidalia/config/torsettings.cpp b/src/vidalia/config/torsettings.cpp
 --- a/src/vidalia/config/torsettings.cpp	2009-01-30 05:20:24.536180000 +0000
-+++ b/src/vidalia/config/torsettings.cpp	2009-03-16 10:58:45.486255632 +0000
++++ b/src/vidalia/config/torsettings.cpp	2009-03-16 10:58:45.000000000 +0000
 @@ -61,16 +61,28 @@
  {
  #if defined(Q_OS_WIN32)
@@ -1717,7 +922,7 @@
  
 diff -Naur a/src/vidalia/config/vidaliasettings.cpp b/src/vidalia/config/vidaliasettings.cpp
 --- a/src/vidalia/config/vidaliasettings.cpp	2009-02-03 02:09:39.844750000 +0000
-+++ b/src/vidalia/config/vidaliasettings.cpp	2009-03-07 03:57:41.694104224 +0000
++++ b/src/vidalia/config/vidaliasettings.cpp	2009-03-07 03:57:41.000000000 +0000
 @@ -71,9 +71,16 @@
    setDefault(SETTING_SHOW_MAINWINDOW_AT_START, true);
    setDefault(SETTING_BROWSER_EXECUTABLE, "");
@@ -1740,7 +945,7 @@
  #else
 diff -Naur a/src/vidalia/mainwindow.cpp b/src/vidalia/mainwindow.cpp
 --- a/src/vidalia/mainwindow.cpp	2009-02-23 01:36:04.102244000 +0000
-+++ b/src/vidalia/mainwindow.cpp	2009-03-16 10:42:36.730528888 +0000
++++ b/src/vidalia/mainwindow.cpp	2009-03-16 10:42:36.000000000 +0000
 @@ -127,6 +127,7 @@
    createTrayIcon();
    /* Start with Tor initially stopped */
@@ -1816,7 +1021,7 @@
    if (server.isServerEnabled() && !_delayedShutdownStarted) {
 diff -Naur a/src/vidalia/mainwindow.h b/src/vidalia/mainwindow.h
 --- a/src/vidalia/mainwindow.h	2009-02-03 02:09:39.844750000 +0000
-+++ b/src/vidalia/mainwindow.h	2009-03-16 10:33:26.545169776 +0000
++++ b/src/vidalia/mainwindow.h	2009-03-16 10:33:26.000000000 +0000
 @@ -241,6 +241,7 @@
    bool _useSavedPassword;
    /** The Vidalia icon that sits in the tray. */
@@ -1827,7 +1032,7 @@
    /** Timer used to remind us to check for software updates. */
 diff -Naur a/src/vidalia/network/geoipresolver.cpp b/src/vidalia/network/geoipresolver.cpp
 --- a/src/vidalia/network/geoipresolver.cpp	2008-12-30 18:48:55.745877000 +0000
-+++ b/src/vidalia/network/geoipresolver.cpp	2009-03-13 16:51:51.257918256 +0000
++++ b/src/vidalia/network/geoipresolver.cpp	2009-03-13 16:51:51.000000000 +0000
 @@ -24,25 +24,31 @@
  #endif
  
@@ -1866,19 +1071,17 @@
  #endif
  }
 diff -Naur a/src/vidalia/network/tormapwidget.cpp b/src/vidalia/network/tormapwidget.cpp
---- a/src/vidalia/network/tormapwidget.cpp	2009-02-19 21:15:24.029490000 +0000
-+++ b/src/vidalia/network/tormapwidget.cpp	2009-03-07 03:57:41.695104072 +0000
-@@ -24,8 +24,8 @@
- using namespace Marble;
+--- a/src/vidalia/network/tormapwidget.cpp	2009-03-23 16:21:12.057893000 +0000
++++ b/src/vidalia/network/tormapwidget.cpp	2009-03-07 03:57:41.000000000 +0000
+@@ -10,7 +10,7 @@
  
- /** QPens to use for drawing different map elements */
--#define CIRCUIT_NORMAL_PEN      QPen(Qt::green,  2.0)
--#define CIRCUIT_SELECTED_PEN    QPen(Qt::yellow, 3.0)
-+#define CIRCUIT_NORMAL_PEN      QPen(Qt::blue,  2.0)
-+#define CIRCUIT_SELECTED_PEN    QPen(Qt::green, 3.0)
+ /*
+ ** \file tormapwidget.cpp
+-** \version $Id: tormapwidget.cpp 3642 2009-03-23 16:21:12Z coderman $
++** \version $Id: tormapwidget.cpp 3559 2009-02-19 21:15:24Z edmanm $
+ ** \brief Displays Tor servers and circuits on a map of the world
+ */
  
- 
- /** Default constructor */
 @@ -33,10 +33,11 @@
    : MarbleWidget(parent)
  {
@@ -1894,7 +1097,7 @@
    TorMapWidgetPopupMenu *popupMenu  = new TorMapWidgetPopupMenu(this);
 diff -Naur a/src/vidalia/res/entrust-secure-server-root.crt b/src/vidalia/res/entrust-secure-server-root.crt
 --- a/src/vidalia/res/entrust-secure-server-root.crt	1970-01-01 00:00:00.000000000 +0000
-+++ b/src/vidalia/res/entrust-secure-server-root.crt	2009-03-07 03:57:41.695104072 +0000
++++ b/src/vidalia/res/entrust-secure-server-root.crt	2009-03-07 03:57:41.000000000 +0000
 @@ -0,0 +1,30 @@
 +-----BEGIN CERTIFICATE-----
 +MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UE
@@ -1928,7 +1131,7 @@
 +-----END CERTIFICATE-----
 diff -Naur a/src/vidalia/res/gd-class2-root.crt b/src/vidalia/res/gd-class2-root.crt
 --- a/src/vidalia/res/gd-class2-root.crt	1970-01-01 00:00:00.000000000 +0000
-+++ b/src/vidalia/res/gd-class2-root.crt	2009-03-07 03:57:41.696103920 +0000
++++ b/src/vidalia/res/gd-class2-root.crt	2009-03-07 03:57:41.000000000 +0000
 @@ -0,0 +1,24 @@
 +-----BEGIN CERTIFICATE-----
 +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
@@ -1956,7 +1159,7 @@
 +-----END CERTIFICATE-----
 diff -Naur a/src/vidalia/res/vidalia.qrc b/src/vidalia/res/vidalia.qrc
 --- a/src/vidalia/res/vidalia.qrc	2009-02-01 00:34:33.066938000 +0000
-+++ b/src/vidalia/res/vidalia.qrc	2009-03-07 03:57:41.696103920 +0000
++++ b/src/vidalia/res/vidalia.qrc	2009-03-07 03:57:41.000000000 +0000
 @@ -290,5 +290,7 @@
      </qresource>
      <qresource prefix="/geoip">
@@ -1966,9 +1169,19 @@
      </qresource>
  </RCC>
 diff -Naur a/src/vidalia/updateprocess.cpp b/src/vidalia/updateprocess.cpp
---- a/src/vidalia/updateprocess.cpp	2009-01-03 20:10:16.806554000 +0000
-+++ b/src/vidalia/updateprocess.cpp	2009-03-07 03:57:41.698103616 +0000
-@@ -234,13 +234,23 @@
+--- a/src/vidalia/updateprocess.cpp	2009-03-12 05:06:19.591518000 +0000
++++ b/src/vidalia/updateprocess.cpp	2009-03-07 03:57:41.000000000 +0000
+@@ -39,8 +39,7 @@
+ {
+   QStringList args;
+ 
+-  args << "update"  << "--force-check"
+-       << " --controller-log-format"
++  args << "update"  << "--controller-log-format"
+        << "--repo=" + updateRepositoryDir()
+        << "--debug";
+   if (_socksPort)
+@@ -235,13 +234,23 @@
  QString
  UpdateProcess::updateExecutable()
  {
@@ -1995,7 +1208,7 @@
  QString
 diff -Naur a/src/vidalia/vidalia.cpp b/src/vidalia/vidalia.cpp
 --- a/src/vidalia/vidalia.cpp	2009-02-24 04:56:35.504853000 +0000
-+++ b/src/vidalia/vidalia.cpp	2009-03-13 18:43:07.266010760 +0000
++++ b/src/vidalia/vidalia.cpp	2009-03-13 18:43:07.000000000 +0000
 @@ -45,6 +45,7 @@
  #define ARG_PIDFILE    "pidfile"  /**< Location and name of our pidfile.*/
  #define ARG_LOGFILE    "logfile"  /**< Location of our logfile.         */
@@ -2063,7 +1276,7 @@
  Vidalia::pidFile()
 diff -Naur a/src/vidalia/vidalia.h b/src/vidalia/vidalia.h
 --- a/src/vidalia/vidalia.h	2009-01-12 03:33:41.473092000 +0000
-+++ b/src/vidalia/vidalia.h	2009-03-13 18:42:45.044388960 +0000
++++ b/src/vidalia/vidalia.h	2009-03-13 18:42:45.000000000 +0000
 @@ -82,6 +82,8 @@
    static QString dataDirectory();
    /** Returns the default location of Vidalia's data directory. */

Modified: torvm/trunk/build/win32/src/pkg/license.wxs
===================================================================
--- torvm/trunk/build/win32/src/pkg/license.wxs	2009-03-29 09:17:11 UTC (rev 19180)
+++ torvm/trunk/build/win32/src/pkg/license.wxs	2009-03-29 13:53:36 UTC (rev 19181)
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="Windows-1252" ?>
 <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi";>
-  <?define ThisProductVersion="0.0.2" ?>
-  <?define ThisProductVersionDisp="0.0.2" ?>
+  <?define ThisProductVersion="0.0.3" ?>
+  <?define ThisProductVersionDisp="$(var.ThisProductVersion)" ?>
   <?define UpgradeCode="bda6a744-0815-4fdc-88a8-d40d8c154133" ?>
-  <?define CurrProductGUID="43b6b534-8148-4813-8d22-4da1df4783c3" ?>
-  <?define CurrDocsOnDesktopGUID="d20d7258-1e4a-4d26-a2f4-e08a939a0ae8" ?>
-  <?define CurrLocalProgramsGUID="71bddb5a-1aee-4dc8-bc39-63b38d12a7dd" ?>
+  <?define CurrProductGUID="b7cdfe31-cf2f-4e50-bf13-900b6e46badc" ?>
+  <?define CurrDocsOnDesktopGUID="d54b7085-ac10-42c7-a82a-198020d97ab7" ?>
+  <?define CurrLocalProgramsGUID="7bcd39dd-9aae-48c7-92ad-95837ee2f6b7" ?>
 
   <Product Name="Tor License Documents $(var.ThisProductVersionDisp)" Id="$(var.CurrProductGUID)"
            Language="!(loc.LCID)"