;; Copyright 2010 The Go Authors. All rights reserved. ;; Use of this source code is governed by a BSD-style ;; license that can be found in the LICENSE file. [Setup] ;; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId={{1AE268D9-FAE4-4EF8-AAE9-3B1B27D604F0} AppName={#AppName} AppVersion={#AppVersion} AppPublisher=golang-nuts@googlegroups.com AppPublisherURL=http://www.golang.org DefaultDirName={sd}\Go DisableDirPage=yes DefaultGroupName={#AppName} AllowNoIcons=yes OutputBaseFilename={#AppNameLower}win{#AppVersion}_installer Compression=lzma2/max SolidCompression=yes ChangesEnvironment=true OutputDir=. [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" Name: "basque"; MessagesFile: "compiler:Languages\Basque.isl" Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl" Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl" Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl" Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl" Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl" Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl" Name: "french"; MessagesFile: "compiler:Languages\French.isl" Name: "german"; MessagesFile: "compiler:Languages\German.isl" Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl" Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl" Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl" Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl" Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl" Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl" Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" Name: "slovak"; MessagesFile: "compiler:Languages\Slovak.isl" Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl" Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" [Files] Source: ".\go\*"; DestDir: "{sd}\Go"; Flags: ignoreversion recursesubdirs createallsubdirs [Registry] ;Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; ValueName: "GOARCH"; ValueData: "386"; Flags: uninsdeletevalue ;Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; ValueName: "GOOS"; ValueData: "windows"; Flags: uninsdeletevalue Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; ValueName: "GOBIN"; ValueData: "{sd}/Go/bin"; Flags: uninsdeletevalue Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: string; ValueName: "GOROOT"; ValueData: "{sd}/Go"; Flags: uninsdeletevalue Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType: expandsz; ValueName: "Path"; ValueData: "{olddata};{sd}/Go/bin"; Check: PathCheck('{sd}/Go/bin') ;[Tasks] ;Name: AddToPath; Description: "&Adding Go's bin directory to your environment's search path. This allows the tools to be run from a shell without having to include the installation path as part of the command."; [Icons] ;Name: "{group}\{cm:UninstallProgram,Go}"; Filename: {uninstallexe} Name: "{group}\Uninstall Go"; Filename: "{uninstallexe}" [Code] function PathCheck(Param: string): Boolean; var OrigPath: String; Index: Integer; begin // check for an empty path if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', OrigPath) then begin Result := True; exit; end; // Pos returns 0 if not found Index := Pos(';' + Param + ';', ';' + OrigPath + ';'); if (IsUninstaller() = True) AND (Index > 0) then begin Delete(OrigPath, Index, Length(Param)); // remove orphaned semicolon if necessary if (Length(OrigPath) >= Index) AND (Copy(OrigPath, Index, 1) = ';') then begin Delete(OrigPath, Index, 1); end; RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'Path', OrigPath); end; // during installation, the check in the Registry // section wants a Boolean value Result := Index = 0; end; function InitializeUninstall(): Boolean; begin PathCheck(ExpandConstant('{sd}/Go/bin')); Result := True; end;