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

[vidalia-svn] r4307: add the bridge-bundle nsi configuration. (vidalia/trunk/pkg/win32)



Author: phobos
Date: 2010-06-06 19:50:14 -0400 (Sun, 06 Jun 2010)
New Revision: 4307

Added:
   vidalia/trunk/pkg/win32/bridge-bundle.nsi.in
Log:
add the bridge-bundle nsi configuration.


Added: vidalia/trunk/pkg/win32/bridge-bundle.nsi.in
===================================================================
--- vidalia/trunk/pkg/win32/bridge-bundle.nsi.in	                        (rev 0)
+++ vidalia/trunk/pkg/win32/bridge-bundle.nsi.in	2010-06-06 23:50:14 UTC (rev 4307)
@@ -0,0 +1,667 @@
+;;
+;;  $Id: vidalia-bundle.nsi.in 4290 2010-05-17 16:15:27Z phobos $
+;; 
+;;  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 "MUI.nsh"
+
+SetCompressor /SOLID lzma
+!packhdr header.dat "upx --best header.dat"
+
+;---------------------------------
+; Global definitions
+!define VIDALIA_NAME        "Vidalia"
+!define VIDALIA_EXEC        "vidalia.exe"
+!define VIDALIA_APPVERSION  "@VERSION@"
+!define VIDALIA_DESC        "${VIDALIA_NAME} ${VIDALIA_APPVERSION}"
+
+!define TOR_NAME            "Tor"
+!define TOR_EXEC            "tor.exe"
+!define TOR_APPVERSION      "0.2.2.13-alpha"
+!define TOR_DESC            "${TOR_NAME} ${TOR_APPVERSION}"
+
+!define POLIPO_NAME        "Polipo"
+!define POLIPO_EXEC        "polipo.exe"
+!define POLIPO_APPVERSION  "1.0.4.1"
+!define POLIPO_DESC        "${POLIPO_NAME} ${POLIPO_APPVERSION}"
+
+!define TORBUTTON_NAME      "Torbutton"
+!define TORBUTTON_APPVERSION "1.2.5"
+!define TORBUTTON_DESC      "${TORBUTTON_NAME} ${TORBUTTON_APPVERSION}"
+
+!define BUNDLE_NAME         "Vidalia Bundle"
+!define BUNDLE_APPVERSION   "${TOR_APPVERSION}-${VIDALIA_APPVERSION}"
+!define BUNDLE_REVISION     "1"
+!define BUNDLE_PRODVERSION  "@VER_MAJOR@.@VER_MINOR@.@VER_PATCH@.${BUNDLE_REVISION}"
+!define BUNDLE_DESC         "${BUNDLE_NAME} ${BUNDLE_APPVERSION}"
+!define INSTALLFILE         "vidalia-bundle-${BUNDLE_APPVERSION}.exe"
+!define UNINSTALLER         "Uninstall.exe"
+!define SHORTCUTS           "$SMPROGRAMS\${BUNDLE_NAME}"
+
+;--------------------------------
+; Installer file details
+VIAddVersionKey "ProductName"     "${BUNDLE_NAME}"
+VIAddVersionKey "Comments"        "${BUNDLE_DESC}"
+VIAddVersionKey "FileVersion"     "${BUNDLE_APPVERSION}"
+VIAddVersionKey "FileDescription" "${BUNDLE_DESC}"
+VIProductVersion "${BUNDLE_PRODVERSION}"
+
+;--------------------------------
+; Basic installer information
+Name            "${BUNDLE_NAME}"
+Caption         "$(BundleSetupCaption)"
+BrandingText    "${BUNDLE_DESC} (Rev. ${BUNDLE_REVISION})"
+OutFile         "${INSTALLFILE}"
+InstallDir      "$PROGRAMFILES\Vidalia Bundle"
+InstallDirRegKey HKCU "Software" "${BUNDLE_NAME}"
+SetOverWrite    ifnewer
+AutoCloseWindow false
+ShowInstDetails show
+CRCCheck        on
+XPStyle         on
+
+;--------------------------------
+; MUI Options
+!define MUI_WELCOMEPAGE_TITLE "$(BundleWelcomeTitle)"
+!define MUI_WELCOMEPAGE_TEXT  "$(BundleWelcomeText)"
+!define MUI_ABORTWARNING
+!define MUI_FINISHPAGE_NOAUTOCLOSE
+!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\win-install.ico"
+!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\win-uninstall.ico"
+!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\win.bmp"
+!define MUI_HEADERIMAGE
+!define MUI_FINISHPAGE_TEXT "$(BundleFinishText)"
+!define MUI_FINISHPAGE_RUN
+!define MUI_FINISHPAGE_RUN_FUNCTION CustomFinishFn
+!define MUI_FINISHPAGE_RUN_TEXT "$(BundleRunNow)"
+!define MUI_FINISHPAGE_LINK "$(BundleLinkText)"
+!define MUI_FINISHPAGE_LINK_LOCATION  "https://www.torproject.org/docs/tor-doc-win32.html";
+
+;--------------------------------
+; Pages
+!insertmacro MUI_PAGE_WELCOME
+Page custom FirefoxWarningPage
+!insertmacro MUI_PAGE_COMPONENTS
+!insertmacro MUI_PAGE_DIRECTORY
+!insertmacro MUI_PAGE_INSTFILES
+!insertmacro MUI_PAGE_FINISH
+
+!insertmacro MUI_UNPAGE_WELCOME
+!insertmacro MUI_UNPAGE_COMPONENTS
+!insertmacro MUI_UNPAGE_CONFIRM
+!insertmacro MUI_UNPAGE_INSTFILES
+!insertmacro MUI_UNPAGE_FINISH
+
+;--------------------------------
+; Available languages
+!insertmacro MUI_LANGUAGE "Czech"
+!insertmacro MUI_LANGUAGE "Dutch"
+!insertmacro MUI_LANGUAGE "English"
+!insertmacro MUI_LANGUAGE "Farsi"
+!insertmacro MUI_LANGUAGE "Finnish"
+!insertmacro MUI_LANGUAGE "French"
+!insertmacro MUI_LANGUAGE "German"
+!insertmacro MUI_LANGUAGE "Hebrew"
+!insertmacro MUI_LANGUAGE "Italian"
+!insertmacro MUI_LANGUAGE "Polish"
+!insertmacro MUI_LANGUAGE "Portuguese"
+!insertmacro MUI_LANGUAGE "Romanian"
+!insertmacro MUI_LANGUAGE "Russian"
+!insertmacro MUI_LANGUAGE "Spanish"
+#!insertmacro MUI_LANGUAGE "SimpChinese"
+!insertmacro MUI_LANGUAGE "Swedish"
+#!insertmacro MUI_LANGUAGE "TradChinese"
+!include "vidalia_cs.nsh"
+!include "vidalia_de.nsh"
+!include "vidalia_en.nsh"
+!include "vidalia_es.nsh"
+!include "vidalia_fa.nsh"
+!include "vidalia_fi.nsh"
+!include "vidalia_fr.nsh"
+!include "vidalia_he.nsh"
+!include "vidalia_it.nsh"
+!include "vidalia_nl.nsh"
+!include "vidalia_pl.nsh"
+!include "vidalia_pt.nsh"
+!include "vidalia_ro.nsh"
+!include "vidalia_ru.nsh"
+!include "vidalia_sv.nsh"
+#!include "vidalia_zh-cn.nsh"
+#!include "vidalia_zh-tw.nsh"
+
+;--------------------------------
+; Install types
+!ifndef NOINSTTYPES ; only if not defined
+  InstType "Full"
+  InstType "Base"
+  ;InstType /COMPONENTSONLYONCUSTOM
+!endif
+
+;--------------------------------
+; Vidalia
+Var configfile
+var bInstallVidalia
+SectionGroup "${VIDALIA_DESC}" VidaliaGroup
+    ;--------------------------------
+    ; Vidalia application binaries
+    Section "${VIDALIA_NAME}" Vidalia
+      SectionIn 1 2
+
+      ; Set output path to the installation directory.
+      SetOutPath "$INSTDIR\Vidalia"
+      File "@Vidalia_BINARY_DIR@\src\vidalia\${VIDALIA_EXEC}"
+      File "@QT_BINARY_DIR@\QtCore4.dll"
+      File "@QT_BINARY_DIR@\QtGui4.dll"
+      File "@QT_BINARY_DIR@\QtNetwork4.dll"
+      File "@QT_BINARY_DIR@\QtXml4.dll"
+      File "@QT_BINARY_DIR@\libgcc_s_dw2-1.dll"
+      File "@MINGW_BINARY_DIR@\mingwm10.dll"
+      File "@OPENSSL_BINARY_DIR@\ssleay32.dll"
+      File "@OPENSSL_BINARY_DIR@\libeay32.dll"
+      File "@Vidalia_SOURCE_DIR@\README"
+      File "@Vidalia_SOURCE_DIR@\CHANGELOG"
+      File "@Vidalia_SOURCE_DIR@\LICENSE"
+      File "@Vidalia_SOURCE_DIR@\LICENSE-GPLV2"
+      File "@Vidalia_SOURCE_DIR@\LICENSE-GPLV3"
+      File "@Vidalia_SOURCE_DIR@\LICENSE-LGPLV3"
+      File "@Vidalia_SOURCE_DIR@\LICENSE-OPENSSL"
+      File "@Vidalia_SOURCE_DIR@\CREDITS"
+      
+      ; Include a prebuilt GeoIP cache
+      SetShellVarContext current
+      CreateDirectory "$APPDATA\Vidalia"
+      SetOutPath "$APPDATA\Vidalia"
+      File "@Vidalia_SOURCE_DIR@\pkg\geoip-cache"
+
+      ;If there's already a torrc config file, ask if they want to
+      ;overwrite it with the new one.
+      StrCpy $configfile "torrc"
+      IfFileExists "$APPDATA\Vidalia\torrc" "" endiftorrc
+        MessageBox MB_ICONQUESTION|MB_YESNO "$(TorAskOverwriteTorrc)" IDNO noreplace
+        Delete "$APPDATA\Vidalia\torrc"
+        Goto endiftorrc
+      noreplace:
+        StrCpy $configfile "torrc.sample"
+      endiftorrc:
+        File /oname=$configfile "@TOR_PACKAGE_DIR@\torrc.sample"
+
+      ; Tor gets installed to $INSTDIR\Tor, so let's remember it
+      ; But first, we have to replace all the '\'s with '\\'s in the $INSTDIR
+      ; Does NSIS make this easy by providing the ability to replace substrings? No.
+      Push $INSTDIR
+      Push "\"
+      Push "\\"
+      Call StrRep
+      Pop $R0 ; contains the modified version of $INSTDIR
+      WriteINIStr "$APPDATA\Vidalia\vidalia.conf" Tor TorExecutable "$R0\\Tor\\${TOR_EXEC}"
+      WriteINIStr "$APPDATA\Vidalia\vidalia.conf" General LanguageCode "$(LanguageCode)"
+      WriteINIStr "$APPDATA\Vidalia\vidalia.conf" Server ExitPolicy ""
+      WriteINIStr "$APPDATA\Vidalia\vidalia.conf" Server Enabled "true"
+      WriteINIStr "$APPDATA\Vidalia\vidalia.conf" Server BridgeRelay "true"
+      WriteINIStr "$APPDATA\Vidalia\vidalia.conf" Server EnableUPnP "true"
+
+
+      ; Write the uninstall keys for Windows  
+      SetShellVarContext all
+      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Vidalia" "DisplayName" "${VIDALIA_DESC}"
+      WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Vidalia" "UninstallString" '"$INSTDIR\${UNINSTALLER}"'
+      WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Vidalia" "NoModify" 1
+      WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Vidalia" "NoRepair" 1
+     
+      IntOp $bInstallVidalia 0 + 1
+    SectionEnd
+
+    ;--------------------------------
+    ; Vidalia Start menu shortcuts
+    Section "$(VidaliaShortcuts)" VidaliaShortcuts
+      SectionIn 1
+      SetShellVarContext all ; (Add to "All Users" Start Menu if possible)
+      CreateDirectory "${SHORTCUTS}"
+      CreateShortCut "${SHORTCUTS}\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\${UNINSTALLER}" 0
+      CreateShortCut "${SHORTCUTS}\Vidalia.lnk" "$INSTDIR\Vidalia\${VIDALIA_EXEC}" "" "$INSTDIR\Vidalia\${VIDALIA_EXEC}" 0
+      
+      WriteIniStr "$INSTDIR\Vidalia\Vidalia Website.url" "InternetShortcut" "URL" "http://www.vidalia-project.net";
+      CreateShortCut "${SHORTCUTS}\Vidalia Website.lnk" "$INSTDIR\Vidalia\Vidalia Website.url"
+    SectionEnd
+
+    ;--------------------------------
+    ; Run Vidalia at startup
+    Section "$(VidaliaStartup)" VidaliaStartup
+      SectionIn 1
+      WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "${VIDALIA_NAME}" '"$INSTDIR\Vidalia\${VIDALIA_EXEC}"'
+    SectionEnd    
+SectionGroupEnd
+
+
+;--------------------------------
+; Tor
+var bInstallTor
+SectionGroup "${TOR_DESC}" TorGroup
+    ;--------------------------------
+    ; Tor application binaries
+    Section "${TOR_NAME}" Tor
+    ;Files that have to be installed for tor to run and that the user
+    ;cannot choose not to install
+       SectionIn 1 2
+       SetShellVarContext current
+       SetOutPath "$INSTDIR\Tor"
+       File "@TOR_PACKAGE_DIR@\tor.exe"
+       File "@TOR_PACKAGE_DIR@\tor-resolve.exe"
+       WriteIniStr "$INSTDIR\Tor\Tor Website.url" "InternetShortcut" "URL" "https://www.torproject.org";
+       ; Include tor's geoip file, too
+       SetOutPath "$APPDATA\Tor"
+       File "@TOR_PACKAGE_DIR@\geoip"
+       
+       ; If the user is also installing Vidalia, then don't confuse them by
+       ; an extra torrc in %APPDATA%\Tor
+       SectionGetFlags ${Vidalia} $0
+       IntOp $0 $0 & ${SF_SELECTED}
+       IntCmp $0 ${SF_SELECTED} skiptorrc
+
+       StrCpy $configfile "torrc"
+
+       ; If there's already a torrc config file, ask if they want to
+       ; overwrite it with the new one.
+       IfFileExists "$APPDATA\Tor\torrc" "" endiftorrc
+         MessageBox MB_ICONQUESTION|MB_YESNO "$(TorAskOverwriteTorrc)" IDNO noreplace
+         Delete "$APPDATA\Tor\torrc"
+         Goto endiftorrc
+       noreplace:
+         StrCpy $configfile "torrc.sample"
+       endiftorrc:
+         File /oname=$configfile "@TOR_PACKAGE_DIR@\torrc.sample"
+       
+       skiptorrc:
+        ; Write the uninstall keys for Windows
+        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Tor" "DisplayName" "${TOR_DESC}"
+        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Tor" "UninstallString" '"$INSTDIR\${UNINSTALLER}"'
+        WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Tor" "NoModify" 1
+        WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Tor" "NoRepair" 1
+       
+       IntOp $bInstallTor 0 + 1
+    SectionEnd
+
+    ;--------------------------------
+    ; Tor documentation
+    Section "$(TorDocumentation)" TorDocs
+       SectionIn 1
+       SetOutPath "$INSTDIR\Tor\Documents"
+       File "@TOR_PACKAGE_DIR@\Documents\*.*"
+    SectionEnd
+
+    ;--------------------------------
+    ; Tor Start menu shortcuts
+    Section "$(TorShortcuts)" TorShortcuts
+      SectionIn 1
+        SetShellVarContext all ; (Add to "All Users" Start Menu if possible)
+        SetOutPath "$INSTDIR\Tor"
+        IfFileExists "${SHORTCUTS}\Tor\*.*" "" +2
+           RMDir /r "${SHORTCUTS}\Tor"
+ 
+        CreateDirectory "${SHORTCUTS}\Tor"
+        CreateShortCut  "${SHORTCUTS}\Tor\Tor.lnk" "$INSTDIR\Tor\tor.exe"
+        CreateShortCut  "${SHORTCUTS}\Tor\Tor Website.lnk" "$INSTDIR\Tor\Tor Website.url"
+        CreateShortCut "${SHORTCUTS}\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\${UNINSTALLER}" 0
+ 
+        IfFileExists "$INSTDIR\Tor\Documents\*.*" "" endifdocs
+          CreateDirectory "${SHORTCUTS}\Tor\Documents"
+          CreateShortCut  "${SHORTCUTS}\Tor\Documents\Tor Manual.lnk" "$INSTDIR\Tor\Documents\tor-reference.html"
+          CreateShortCut  "${SHORTCUTS}\Tor\Documents\Tor Documentation.lnk" "$INSTDIR\Tor\Documents"
+          CreateShortCut  "${SHORTCUTS}\Tor\Documents\Tor Specification.lnk" "$INSTDIR\Tor\Documents\tor-spec.txt"
+        endifdocs:
+        
+        ; If the user is installing Vidalia, then make the shortcut link to
+        ; %APPDATA%\Vidalia\torrc instead of %APPDATA%\Tor\torrc
+        SetShellVarContext current
+        SectionGetFlags ${Vidalia} $0
+        IntOp $0 $0 & ${SF_SELECTED}
+        IntCmp $0 ${SF_SELECTED} use_vidalia_torrc use_tor_torrc
+        use_vidalia_torrc:
+          StrCpy $configfile "$APPDATA\Vidalia\torrc"
+          goto torrc_shortcut
+        use_tor_torrc:
+          StrCpy $configfile "$APPDATA\Tor\torrc"
+        torrc_shortcut:
+          SetShellVarContext all
+          CreateShortCut  "${SHORTCUTS}\Tor\Torrc.lnk" "Notepad.exe" $configfile
+    SectionEnd
+SectionGroupEnd
+
+
+;--------------------------------
+; Polipo
+var bInstallPolipo
+SectionGroup "${POLIPO_DESC}" PolipoGroup
+    ;--------------------------------
+    ; Polipo application binaries
+    Section "${POLIPO_NAME}" Polipo
+        SectionIn 1 2
+        ; add files / whatever that need to be installed here.
+        SetOutPath "$INSTDIR\Polipo"
+        SetShellVarContext current
+
+        File /r /x "@POLIPO_PACKAGE_DIR@\polipo.conf" "@POLIPO_PACKAGE_DIR@\*.*"
+        File "@CMAKE_CURRENT_SOURCE_DIR@\polipo.conf"
+
+        ; Let Vidalia know that Polipo was installed
+        IntCmp $bInstallVidalia 1 AddVidaliaSettings SkipVidaliaSettings SkipVidaliaSettings
+        AddVidaliaSettings:
+          Push $INSTDIR
+          Push "\"
+          Push "\\"
+          Call StrRep
+          Pop $R0
+          WriteINIStr "$APPDATA\Vidalia\vidalia.conf" General ProxyExecutable "$R0\\Polipo\\${POLIPO_EXEC}"
+          WriteINIStr "$APPDATA\Vidalia\vidalia.conf" General ProxyExecutableArguments '-c \"$R0\\Polipo\\polipo.conf\"'
+          WriteINIStr "$APPDATA\Vidalia\vidalia.conf" General RunProxyAtStart "true"
+        SkipVidaliaSettings:
+
+        ; Write the installation path into the registry
+        WriteRegStr HKCU SOFTWARE\Polipo "Install_Dir" "$INSTDIR"
+
+        ; Write the uninstall keys for Windows
+        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Polipo" "DisplayName" "${POLIPO_DESC}"
+        WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Polipo" "UninstallString" '"$INSTDIR\${UNINSTALLER}"'
+        WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Polipo" "NoModify" 1
+        WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Polipo" "NoRepair" 1
+       
+        IntOp $bInstallPolipo 0 + 1
+    SectionEnd
+
+    ;--------------------------------
+    ; Polipo Start menu shortcuts
+    Section "$(PolipoShortcuts)" PolipoShortcuts
+        SectionIn 1
+        SetShellVarContext all ; (Add to "All Users" Start Menu if possible)
+        RMDir /r "${SHORTCUTS}\Polipo"
+        CreateDirectory "${SHORTCUTS}\Polipo"
+        CreateShortCut "${SHORTCUTS}\Polipo\Polipo.lnk" "$INSTDIR\Polipo\polipo.exe"
+        CreateShortCut "${SHORTCUTS}\Polipo\Web-based Feedback.lnk" "$INSTDIR\Polipo\doc\user-manual\contact.html"
+        
+        CreateDirectory "${SHORTCUTS}\Polipo\Edit Config"
+        CreateShortCut "${SHORTCUTS}\Polipo\Edit Config\Main Configuration.lnk" "Notepad.exe" '"$INSTDIR\Polipo\polipo.conf"'
+        
+        CreateDirectory "${SHORTCUTS}\Polipo\Documentation"
+        CreateShortCut "${SHORTCUTS}\Polipo\Documentation\User Manual.lnk" "$INSTDIR\Polipo\doc\user-manual\index.html"
+        WriteINIStr "$SMPROGRAMS\Polipo\Documentation\Web Site.url" "InternetShortcut" "URL" "http://www.pps.jussieu.fr/~jch/software/polipo/";
+        
+        CreateShortCut "${SHORTCUTS}\Uninstall.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\${UNINSTALLER}" 0
+    SectionEnd
+ 
+SectionGroupEnd
+
+;--------------------------------
+; Torbutton
+SectionGroup "${TORBUTTON_DESC}" TorbuttonGroup
+  Section "${TORBUTTON_NAME}" Torbutton
+    SectionIn 1 2
+    SetOutPath "$INSTDIR\Torbutton"
+    File @TORBUTTON_PACKAGE_DIR@\LICENSE
+    File @TORBUTTON_PACKAGE_DIR@\torbutton-${TORBUTTON_APPVERSION}.xpi
+  SectionEnd
+
+  Section "$(TorbuttonAddToFirefox)" TorbuttonAddToFirefox
+    SectionIn 1 2
+    ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe" ""
+    StrCmp $1 "" FirefoxNotFound 0 ; if Path is empty or null, then skip to an error, otherwise proceed
+	  Exec '"$1" "$INSTDIR\Torbutton\torbutton-${TORBUTTON_APPVERSION}.xpi"'
+  	Goto TorbuttonInstalled
+    FirefoxNotFound:
+	  MessageBox MB_OK|MB_ICONSTOP "$(TorbuttonFirefoxNotFound)"
+    TorbuttonInstalled:
+  SectionEnd
+SectionGroupEnd
+
+Section "" end
+  SetOutPath "$INSTDIR"
+  WriteUninstaller "$INSTDIR\${UNINSTALLER}"
+SectionEnd
+
+;--------------------------------
+; Functions
+Function .onInit
+  !insertmacro MUI_LANGDLL_DISPLAY
+  !insertmacro MUI_INSTALLOPTIONS_EXTRACT_AS "@Vidalia_SOURCE_DIR@\pkg\win32\firefox-warning.ini" "firefox-warning.ini"
+
+  ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe" ""
+  StrCmp $1 "" FirefoxNotFound FirefoxFound
+
+  FirefoxNotFound:
+    ; Uncheck the Torbutton options
+    SectionGetFlags ${Torbutton} $0
+    IntOp $0 $0 & ${SECTION_OFF}
+    SectionSetFlags ${Torbutton} $0
+
+    SectionGetFlags ${TorbuttonAddToFirefox} $0
+    IntOp $0 $0 & ${SECTION_OFF}
+    SectionSetFlags ${TorbuttonAddToFirefox} $0
+ 
+  FirefoxFound:
+FunctionEnd
+
+Function .onSelChange
+  Push $0
+
+  ; Check if the Torbutton option was unchecked
+  SectionGetFlags ${Torbutton} $0
+  IntOp $0 $0 & ${SF_SELECTED}
+  IntCmp $0 0 0 SelChangeDone SelChangeDone
+
+  ; Uncheck the "Add to Firefox" box
+  SectionGetFlags ${TorbuttonAddToFirefox} $0
+  IntOp $0 $0 & ${SECTION_OFF}
+  SectionSetFlags ${TorbuttonAddToFirefox} $0
+  
+  SelChangeDone:
+  Pop $0
+FunctionEnd
+
+Function FirefoxWarningPage
+  ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe" ""
+  StrCmp $1 "" FirefoxNotFound FirefoxFound
+
+  FirefoxNotFound:
+    !insertmacro MUI_INSTALLOPTIONS_WRITE "firefox-warning.ini" "Settings" "Title" "$(FirefoxWarningPageTitle)"
+    !insertmacro MUI_INSTALLOPTIONS_WRITE "firefox-warning.ini" "Field 1" "Text" "$(FirefoxWarningPageUpperText)"
+    !insertmacro MUI_INSTALLOPTIONS_WRITE "firefox-warning.ini" "Field 3" "Text" "$(FirefoxWarningPageLowerText)"
+    !insertmacro MUI_HEADER_TEXT "$(FirefoxWarningPageTitle)" "$(FirefoxWarningPageSubtitle)" 
+    !insertmacro MUI_INSTALLOPTIONS_DISPLAY "firefox-warning.ini"
+
+  FirefoxFound:
+FunctionEnd
+
+Function CustomFinishFn
+    IntCmp $bInstallVidalia 1 run_vidalia check_tor check_tor
+    run_vidalia:
+        Exec '"$INSTDIR\Vidalia\${VIDALIA_EXEC}"'
+        goto done
+    
+    check_tor:
+    IntCmp $bInstallTor 1 run_tor check_polipo check_polipo
+    run_tor:
+        Exec '"$INSTDIR\Tor\${TOR_EXEC}"'
+    
+    check_polipo:
+    IntCmp $bInstallPolipo 1 run_polipo done done
+    run_polipo:
+        SetOutPath "$INSTDIR\Polipo"
+        Exec '"$INSTDIR\Polipo\${POLIPO_EXEC}" -c "$INSTDIR\Polipo\polipo.conf"'
+    done:
+FunctionEnd
+
+;-------------------------
+; Uninstaller
+Section "-Uninstall" Uninstall
+SectionEnd
+
+SectionGroup "un.Tor ${TOR_APPVERSION}" UninstallTorGroup
+  Section "un.Tor" UninstallTor
+    SetShellVarContext all
+    RMDir /r "$INSTDIR\Tor"
+    RMDir /r "${SHORTCUTS}\Tor"
+    DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Tor"
+  SectionEnd
+
+  Section "un.$(AppData)" UninstallTorAppData
+    SetShellVarContext current
+    RMDir /r "$APPDATA\Tor"
+  SectionEnd
+SectionGroupEnd
+
+SectionGroup "un.Vidalia ${VIDALIA_APPVERSION}" UninstallVidaliaGroup
+  Section "un.Vidalia" UninstallVidalia
+    SetShellVarContext all
+    RMDir /r "$INSTDIR\Vidalia"
+    Delete "${SHORTCUTS}\Vidalia.lnk"
+    Delete "${SHORTCUTS}\Vidalia Website.lnk"
+    DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Run\Vidalia"
+    DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Vidalia"
+  SectionEnd
+
+  Section "un.$(AppData)" UninstallVidaliaAppData
+    SetShellVarContext current
+    RMDir /r "$APPDATA\Vidalia"
+  SectionEnd
+SectionGroupEnd
+
+Section "un.Polipo ${POLIPO_APPVERSION}" UninstallPolipo
+  SetShellVarContext all
+  RMDir /r "$INSTDIR\Polipo"
+  RMDir /r "${SHORTCUTS}\Polipo"
+  DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Polipo"
+SectionEnd
+
+; XXX: We still need to find a way to actually remove Torbutton from Firefox
+;Section "un.Torbutton ${TORBUTTON_APPVERSION}" UninstallTorbutton
+;  RMDir /r "$INSTDIR\Torbutton"
+;  DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Tor"
+;SectionEnd
+
+Function un.onInit
+  !insertmacro MUI_LANGDLL_DISPLAY
+  SetShellVarContext current
+
+  IfFileExists "$INSTDIR\Tor\*.*" CheckTorAppData
+    SectionGetFlags ${UninstallTor} $0
+    IntOp $0 $0 & ${SECTION_OFF}
+    SectionSetFlags ${UninstallTor} $0
+  
+  CheckTorAppData:
+  IfFileExists "$APPDATA\Tor\*.*" CheckVidalia
+    SectionGetFlags ${UninstallTorAppData} $0
+    IntOp $0 $0 & ${SECTION_OFF}
+    SectionSetFlags ${UninstallTorAppData} $0
+
+  CheckVidalia:
+  IfFileExists "$INSTDIR\Vidalia\*.*" CheckVidaliaAppData
+    SectionGetFlags ${UninstallVidalia} $0
+    IntOp $0 $0 & ${SECTION_OFF}
+    SectionSetFlags ${UninstallVidalia} $0
+
+  CheckVidaliaAppData:
+  IfFileExists "$APPDATA\Vidalia\*.*" CheckPolipo
+    SectionGetFlags ${UninstallVidaliaAppData} $0
+    IntOp $0 $0 & ${SECTION_OFF}
+    SectionSetFlags ${UninstallVidaliaAppData} $0
+
+  CheckPolipo:
+  IfFileExists "$INSTDIR\Polipo\*.*" Done
+    SectionGetFlags ${UninstallPolipo} $0
+    IntOp $0 $0 & ${SECTION_OFF}
+    SectionSetFlags ${UninstallPolipo} $0
+
+  Done:
+FunctionEnd
+
+Function un.onUninstSuccess
+  SetShellVarContext all
+  IfFileExists "$INSTDIR\Tor\*.*" DontRemoveTheUninstaller
+  IfFileExists "$INSTDIR\Vidalia\*.*" DontRemoveTheUninstaller
+  IfFileExists "$INSTDIR\Polipo\*.*" DontRemoveTheUninstaller
+  RMDir /r "$INSTDIR"
+  RMDir /r "${SHORTCUTS}"
+  DontRemoveTheUninstaller:
+FunctionEnd
+
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+  !insertmacro MUI_DESCRIPTION_TEXT ${Tor} "$(TorAppDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${TorGroup} "$(TorGroupDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${TorDocs} "$(TorDocumentationDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${TorShortcuts} "$(TorShortcutsDesc)"
+
+  !insertmacro MUI_DESCRIPTION_TEXT ${Vidalia} "$(VidaliaAppDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${VidaliaGroup} "$(VidaliaGroupDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${VidaliaStartup} "$(VidaliaStartupDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${VidaliaShortcuts} "$(VidaliaShortcutsDesc)"
+
+  !insertmacro MUI_DESCRIPTION_TEXT ${Polipo} "$(PolipoAppDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${PolipoGroup} "$(PolipoGroupDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${PolipoStartup} "$(PolipoStartupDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${PolipoShortcuts} "$(PolipoShortcutsDesc)"
+
+  !insertmacro MUI_DESCRIPTION_TEXT ${Torbutton} "$(TorbuttonAppDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${TorbuttonGroup} "$(TorbuttonGroupDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${TorbuttonAddToFirefox} "$(TorbuttonAddToFirefoxDesc)"
+!insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
+  !insertmacro MUI_DESCRIPTION_TEXT ${UninstallTor} "$(TorUninstDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${UninstallTorAppData} "$(AppDataUninstDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${UninstallVidalia} "$(VidaliaUninstDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${UninstallVidaliaAppData} "$(AppDataUninstDesc)"
+  !insertmacro MUI_DESCRIPTION_TEXT ${UninstallPolipo} "$(PolipoUninstDesc)"
+!insertmacro MUI_UNFUNCTION_DESCRIPTION_END
+
+
+Function StrRep
+ 
+  ;Written by dirtydingus 2003-02-20 04:30:09 
+  ; USAGE
+  ;Push String to do replacement in (haystack)
+  ;Push String to replace (needle)
+  ;Push Replacement
+  ;Call StrRep
+  ;Pop $R0 result	
+ 
+  Exch $R4 ; $R4 = Replacement String
+  Exch
+  Exch $R3 ; $R3 = String to replace (needle)
+  Exch 2
+  Exch $R1 ; $R1 = String to do replacement in (haystack)
+  Push $R2 ; Replaced haystack
+  Push $R5 ; Len (needle)
+  Push $R6 ; len (haystack)
+  Push $R7 ; Scratch reg
+  StrCpy $R2 ""
+  StrLen $R5 $R3
+  StrLen $R6 $R1
+loop:
+  StrCpy $R7 $R1 $R5
+  StrCmp $R7 $R3 found
+  StrCpy $R7 $R1 1 ; - optimization can be removed if U know len needle=1
+  StrCpy $R2 "$R2$R7"
+  StrCpy $R1 $R1 $R6 1
+  StrCmp $R1 "" done loop
+found:
+  StrCpy $R2 "$R2$R4"
+  StrCpy $R1 $R1 $R6 $R5
+  StrCmp $R1 "" done loop
+done:
+  StrCpy $R3 $R2
+  Pop $R7
+  Pop $R6
+  Pop $R5
+  Pop $R2
+  Pop $R1
+  Pop $R4
+  Exch $R3
+	
+FunctionEnd
+