/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to tools/win32/bzr.iss.cog

  • Committer: Robert Collins
  • Date: 2007-07-15 15:40:37 UTC
  • mto: (2592.3.33 repository)
  • mto: This revision was merged to the branch mainline in revision 2624.
  • Revision ID: robertc@robertcollins.net-20070715154037-3ar8g89decddc9su
Make GraphIndex accept nodes as key, value, references, so that the method
signature is closer to what a simple key->value index delivers. Also
change the behaviour when the reference list count is zero to accept
key, value as nodes, and emit key, value to make it identical in that case
to a simple key->value index. This may not be a good idea, but for now it
seems ok.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
; #/Python 2.5 compatibility code
17
17
;
18
18
; import bzrlib
19
 
; try:
 
19
; try: 
20
20
;     VERSION = bzrlib.__version__
21
21
;     AppVerName = 'Bazaar %s' % VERSION
22
 
;     OutputBaseFilename = 'bzr-%s-setup' % VERSION
 
22
;     OutputBaseFilename = 'bzr-setup-%s' % VERSION
23
23
; except:
24
24
;     VERSION = ''
25
25
;     AppVerName = 'Bazaar'
44
44
InfoBeforeFile="..\tools\win32\info.txt"
45
45
 
46
46
VersionInfoCompany="Canonical Ltd."
47
 
VersionInfoCopyright="Canonical Ltd., 2005-2008"
48
 
VersionInfoDescription="Windows installer for Bazaar"
 
47
VersionInfoCopyright="Canonical Ltd., 2005-2007"
 
48
VersionInfoDescription="Installer for stand-alone bzr.exe"
49
49
; [[[cog
50
50
; import bzrlib
51
51
; version_number = []
78
78
; [[[end]]]
79
79
 
80
80
ChangesEnvironment=yes
81
 
; MARKH: PrivilegesRequired=none means it can't be installed by a non-admin
82
 
; user - but sadly we still need admin - eg, tortoise overlays, installing
83
 
; into "\Program Files", installing COM objects etc all must be done by an
84
 
; admin.
85
 
PrivilegesRequired=admin
 
81
PrivilegesRequired=none
 
82
 
86
83
 
87
84
[Files]
88
 
; Tortoise files - these are at the top as we use 'ExtractTemporaryFile' on
89
 
; the TortoiseOverlays MSI, and inno documents such files should be at the
90
 
; start for best performance.
91
 
; [[[cog
92
 
; if "TBZR" in os.environ: # we need a more formal way of controlling this...
93
 
;     tovmsi32 = os.environ["TORTOISE_OVERLAYS_MSI_WIN32"] # point at the 32bit TortoiseOverlays .msi
94
 
;     tovmsi64 = os.environ["TORTOISE_OVERLAYS_MSI_X64"] # point at the 64bit TortoiseOverlays .msi
95
 
;     cog.outl('Source: "%s"; Flags: dontcopy ignoreversion ; Components: tortoise' % tovmsi32)
96
 
;     cog.outl('Source: "%s"; Flags: dontcopy ignoreversion ; Components: tortoise' % tovmsi64)
97
 
;     cog.outl('Source: "tbzrcache.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
98
 
;     cog.outl('Source: "tbzrcachew.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
99
 
;     cog.outl('Source: "tbzrcommand.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
100
 
;     cog.outl('Source: "tbzrcommandw.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
101
 
;     cog.outl('Source: "tbzrtrace.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: debug')
102
 
;     # Note 'regserver' here appears to run regsvr32 without elevation, which
103
 
;     # is no good for us - so we have a [run] entry below.
104
 
;     cog.outl('Source: "tbzr_old.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
105
 
;     cog.outl('Source: "tbzrshellext_x86.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise')
106
 
;     cog.outl('Source: "tbzrshellext_x64.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete; Components: tortoise; Check: IsWin64;')
107
 
;     cog.outl(r'Source: "plugins\qbzr\*"; DestDir: "{app}\plugins\qbzr"; Flags: createallsubdirs ignoreversion recursesubdirs restartreplace uninsrestartdelete; Components: tortoise')
108
 
;
109
 
;     cog.outl('Source: "%s\\doc\\*.html"; DestDir: "{app}\\doc\\tbzr"; Flags: ignoreversion; Components: tortoise' % os.environ['TBZR'])
110
 
; ]]]
111
 
; [[[end]]]
112
 
 
113
 
; We can't say '*.*' due to optional components.
114
 
Source: "plugins\*.*"; DestDir: "{app}\\plugins"; Flags: createallsubdirs ignoreversion recursesubdirs restartreplace uninsrestartdelete; Components: plugins
115
 
Source: "*.bat"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete;
116
 
Source: "*.url"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete;
117
 
Source: "msvc*.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete;
118
 
Source: "bz*.exe"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete;
119
 
Source: "Python*.dll"; DestDir: "{app}"; Flags: ignoreversion restartreplace uninsrestartdelete;
120
 
Source: "lib\*.*"; DestDir: "{app}\lib"; Flags: createallsubdirs ignoreversion recursesubdirs restartreplace uninsrestartdelete;
121
 
Source: "doc\*.*"; DestDir: "{app}\doc"; Flags: createallsubdirs ignoreversion recursesubdirs restartreplace uninsrestartdelete;
 
85
Source: "*.*"; DestDir: "{app}"; Flags: ignoreversion;
 
86
Source: "lib\*.*"; DestDir: "{app}\lib"; Flags: createallsubdirs ignoreversion recursesubdirs;
 
87
Source: "doc\*.*"; DestDir: "{app}\doc"; Flags: createallsubdirs ignoreversion recursesubdirs;
122
88
; [[[cog
123
89
; try:
124
90
;     import pycurl
137
103
; ]]]
138
104
; [[[end]]]
139
105
 
140
 
; imageformats plugins for PyQt4
141
 
; [[[cog
142
 
; plug_dir = os.path.join(os.path.dirname(cog.inFile), # $(bzr_src_root)/tools/win32
143
 
;                         '..', '..', 'win32_bzr.exe', 'imageformats')
144
 
; if os.path.isdir(plug_dir):
145
 
;     cog.outl('Source: "imageformats\\*.*"; DestDir: "{app}\\imageformats"; '
146
 
;              'Flags: createallsubdirs ignoreversion recursesubdirs restartreplace uninsrestartdelete;')
147
 
; else:
148
 
;     cog.msg('imageformats plugins for PyQt4 not found')
149
 
; ]]]
150
 
; [[[end]]]
151
 
 
152
 
[Types]
153
 
Name: "typical"; Description: "A typical installation"
154
 
Name: "full"; Description: "Full Installation (typical installation plus test utilities)"
155
 
Name: "compact"; Description: "Compact installation"
156
 
Name: "custom"; Description: "Custom installation"; Flags: iscustom
157
106
 
158
107
[Components]
159
 
Name: "main"; Description: "Main Files"; Types: full typical compact custom; Flags: fixed
160
 
Name: "plugins"; Description: "Default plugins"; Types: full typical custom;
 
108
Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed
161
109
; [[[cog
162
110
; if ca_path:
163
111
;     cog.outl('Name: "cabundle"; '
164
112
;              'Description: "CA certificates for SSL support"; '
165
 
;              'Types: full typical custom')
166
 
; if "TBZR" in os.environ: # we need a more formal way of controlling this...
167
 
;     cog.outl('Name: "tortoise"; Description: "Windows Shell Extensions (TortoiseBZR)"; Types: full typical custom;')
168
 
;     cog.outl('Name: "debug"; Description: "Test, diagnostic and debugging utilities"; Types: full custom;')
169
 
;
 
113
;              'Types: full custom')
170
114
; ]]]
171
115
; [[[end]]]
172
116
 
 
117
 
173
118
[Dirs]
174
119
Name: "{userappdata}\bazaar\2.0"
175
 
Name: "{app}\plugins"; Flags: uninsalwaysuninstall
176
120
 
177
121
 
178
122
[Icons]
179
 
Name: "{group}\Documentation index"; Filename: "{app}\doc\index.html"; WorkingDir: "{app}\doc";
 
123
Name: "{group}\Documentation index"; Filename: "{app}\doc\index.htm"; WorkingDir: "{app}\doc";
180
124
Name: "{group}\Bazaar Home Page"; Filename: "{app}\bazaar.url"; Comment: "http://www.bazaar-vcs.org";
181
125
Name: "{group}\Start Bzr in cmd shell"; Filename: "{cmd}"; Parameters: "/K start_bzr.bat"; WorkingDir: "{app}"; IconFilename: "{app}\bzr.exe"; Comment: "Open new Bzr session";
182
 
; NOTE: Intent is to change the log file location - the line below will need to change to reflect that.
183
 
Name: "{group}\Open Bzr log file"; Filename: "notepad.exe"; Parameters: "{userdocs}\.bzr.log"; Comment: "Launch notepad to view the bzr log file";
184
 
 
185
 
; [[[cog
186
 
; if "TBZR" in os.environ:
187
 
;     cog.outl(r'Name: "{group}\TortoiseBZR documentation"; Filename: "{app}\doc\tbzr\index.html"; Comment: "Launch TortoiseBZR documentation";')
188
 
; ]]]
189
 
; [[[end]]]
190
 
; No Uninstall here - Control Panel will do
 
126
Name: "{group}\Uninstall Bazaar"; Filename: "{uninstallexe}"; IconFileName: "{sys}\shell32.dll"; IconIndex: 101; Comment: "Remove Bzr completely";
191
127
 
192
128
 
193
129
[Tasks]
194
 
Name: Path; Description: "Add {app} directory to PATH environment variable"
195
 
; [[[cog
196
 
; if "TBZR" in os.environ:
197
 
;     cog.outl('Name: TBZRReadme; Description: "View the TortoiseBZR Readme"; Components: tortoise')
198
 
; ]]]
199
 
; [[[end]]]
200
 
 
201
 
 
202
 
[Registry]
203
 
Root: HKLM; Subkey: "SOFTWARE\Bazaar"; Flags: noerror uninsdeletekey
204
 
Root: HKLM; Subkey: "SOFTWARE\Bazaar"; ValueName: "InstallPath"; ValueType: string; ValueData: "{app}"; Flags: noerror
205
 
; Don't write stuff that can be implied
206
 
;Root: HKLM; Subkey: "SOFTWARE\Bazaar"; ValueName: "BzrlibPath"; ValueType: string; ValueData: "{app}\lib\library.zip\bzrlib"; Flags: noerror
207
 
;Root: HKLM; Subkey: "SOFTWARE\Bazaar"; ValueName: "PluginsPath"; ValueType: string; ValueData: "{app}\plugins"; Flags: noerror
208
 
;Root: HKLM; Subkey: "SOFTWARE\Bazaar"; ValueName: "PythonPath"; ValueType: string; ValueData: "{app}\lib\library.zip"; Flags: noerror
209
 
; [[[cog cog.outl('Root: HKLM; Subkey: "SOFTWARE\Bazaar"; ValueName: "Version"; ValueType: string; ValueData: "%s"; Flags: noerror' % VERSION) ]]]
210
 
; [[[end]]]
 
130
Name: Path; Description: "Add {app} directory to PATH environment variable";
 
131
Name: Shell; Description: "Add Bzr context menu to shell"; Flags: unchecked
211
132
 
212
133
 
213
134
[Run]
214
135
Filename: "{app}\bzr_postinstall.exe"; Parameters: "--start-bzr"; Flags: skipifdoesntexist runhidden;
 
136
; [[[cog
 
137
; import os
 
138
; if os.path.isfile('win32_bzr.exe/lib/win32ui.pyd'):   # pywin32 mfc wrapper
 
139
;     cog.outl('Filename: "{app}\bzr_postinstall.exe"; '
 
140
;              'Parameters: "--check-mfc71"; '
 
141
;              'Flags: skipifdoesntexist skipifsilent runhidden;')
 
142
; ]]]
 
143
; [[[end]]]
215
144
Filename: "{app}\bzr_postinstall.exe"; Parameters: "--add-path"; Tasks: Path; Flags: skipifdoesntexist skipifsilent runhidden;
216
 
; [[[cog
217
 
; if "TBZR" in os.environ:
218
 
;     cog.outl('Filename: "regsvr32.exe"; Parameters: "/s /i: /n tbzrshellext_x86.dll"; WorkingDir: "{app}"; Components: tortoise; Description: "Registering Tortoise"; StatusMsg: "Registering Tortoise"')
219
 
;     cog.outl('Filename: "regsvr32.exe"; Parameters: "/s /i: /n tbzrshellext_x64.dll"; WorkingDir: "{app}"; Components: tortoise; Description: "Registering Tortoise"; StatusMsg: "Registering Tortoise"; Check: IsWin64')
220
 
;     cog.outl(r'Filename: "{app}\doc\tbzr\index.html"; Tasks: TBZRReadme; Flags: shellexec')
221
 
; ]]]
222
 
; [[[end]]]
 
145
Filename: "{app}\bzr_postinstall.exe"; Parameters: "--add-shell-menu"; Tasks: Shell; Flags: skipifdoesntexist skipifsilent runhidden;
223
146
 
224
147
 
225
148
[UninstallRun]
226
 
Filename: "{app}\bzr_postinstall.exe"; Parameters: "--delete-path --delete-shell-menu --silent"; Flags: skipifdoesntexist runhidden;
227
 
; [[[cog
228
 
; if "TBZR" in os.environ:
229
 
;     cog.outl('Filename: "regsvr32.exe"; Parameters: "/u /s /i: tbzrshellext_x86.dll"; WorkingDir: "{app}"; Components: tortoise; StatusMsg: "Unregistering Tortoise"; Flags: skipifdoesntexist')
230
 
;     cog.outl('Filename: "regsvr32.exe"; Parameters: "/u /s /i: tbzrshellext_x64.dll"; WorkingDir: "{app}"; Components: tortoise; StatusMsg: "Unregistering Tortoise"; Flags: skipifdoesntexist; Check: IsWin64')
231
 
; ]]]
232
 
; [[[end]]]
233
 
 
234
 
 
235
 
[Code]
236
 
const
237
 
  SHCNF_IDLIST = $0000;
238
 
  SHCNE_ASSOCCHANGED = $08000000;
239
 
  WM_QUIT = 18;
240
 
  MOVEFILE_DELAY_UNTIL_REBOOT    = 4;
241
 
 
242
 
procedure SHChangeNotify(wEventId, uFlags, dwItem1, dwItem2: Integer);
243
 
 external 'SHChangeNotify@shell32.dll stdcall';
244
 
 
245
 
function MoveFileEx(lpExistingFileName, lpNewFileName: String; dwFlags: Cardinal): Integer;
246
 
 external 'MoveFileExA@kernel32.dll stdcall';
247
 
 
248
 
procedure DeleteFileNowOrLater(filename: string);
249
 
var
250
 
  rc : Integer;
251
 
begin
252
 
    if FileExists(filename) and not DeleteFile(filename) then
253
 
        // can't work out to pass NULL to the API, but an empty string
254
 
        // seems to work OK.
255
 
        MoveFileEx(filename, '', MOVEFILE_DELAY_UNTIL_REBOOT);
256
 
end;
257
 
 
258
 
procedure ShutdownTBZR;
259
 
var
260
 
    hwnd: HWND;
261
 
begin
262
 
// [[[cog
263
 
// if "TBZR" not in os.environ:
264
 
//     cog.outl('        Exit;  // No TSVN set - exit this procedure.')
265
 
// ]]]
266
 
// [[[end]]]
267
 
    // ask the cache process to shut-down.
268
 
    hwnd := FindWindowByClassName('TBZRCache_Taskbar');
269
 
    if hwnd <> 0 then
270
 
        PostMessage(hwnd, WM_QUIT, 1, 0);
271
 
end;
272
 
 
273
 
procedure CurStepChanged(CurStep: TSetupStep);
274
 
var
275
 
    S, tovmsi, fqtovmsi, params: String;
276
 
    ErrorCode: Integer;
277
 
begin
278
 
    if CurStep=ssInstall then begin
279
 
        ShutdownTBZR;
280
 
        // In case the user hasn't uninstalled the old version before
281
 
        // upgrading, we unregister and delete some obsolete files
282
 
        // (regsvr32 remains silent even if the file doesn't exist)
283
 
        Exec('regsvr32.exe', '/s /u "' + ExpandConstant('{app}\tbzr.dll') + '"',
284
 
             '', SW_HIDE, ewWaitUntilTerminated, ErrorCode);
285
 
        DeleteFileNowOrLater(ExpandConstant('{app}\tbzr.dll'));
286
 
        DeleteFileNowOrLater(ExpandConstant('{app}\tbzrtest.exe'));
287
 
        DeleteFileNowOrLater(ExpandConstant('{app}\tbzr_tracer.exe'));
288
 
    end;
289
 
 
290
 
    if CurStep=ssPostInstall then begin
291
 
        // a couple of post-install tasks
292
 
        if IsComponentSelected('tortoise') then begin
293
 
            // Need to execute:
294
 
            // msiexec /i TortoiseOverlays-1.X.X.XXXX-win32.msi /qn /norestart
295
 
// 64bit notes:
296
 
// We are still primarily a 32bit application - the only 64bit binary is the
297
 
// shell extension, but even then, we need to install the 32bit version too.
298
 
// Thus, we keep tortoise in 32bit "install mode" - meaning we are installed
299
 
// to "\Program Files (x86)".  We don't bother trying to install our single
300
 
// 64bit DLL into "\Program Files" - we use a different DLL name for 32 and
301
 
// 64 bit versions, so nothing will conflict.
302
 
// Note however that on a 64bit OS, we only need the 64bit TortoiseOverlays -
303
 
// the 32bit apps using shell extensions still work fine with that.
304
 
// [[[cog
305
 
// if "TBZR" in os.environ:
306
 
//     import os
307
 
//     cog.outl("if IsWin64 then")
308
 
//     cog.outl("  tovmsi := '%s'" % os.path.basename(os.environ["TORTOISE_OVERLAYS_MSI_X64"]))
309
 
//     cog.outl("else")
310
 
//     cog.outl("  tovmsi := '%s'" % os.path.basename(os.environ["TORTOISE_OVERLAYS_MSI_WIN32"]))
311
 
// else:
312
 
//     cog.outl("tovmsi := '';")
313
 
// ]]]
314
 
// [[[end]]]
315
 
            ExtractTemporaryFile(tovmsi);
316
 
            fqtovmsi := AddBackslash(ExpandConstant('{tmp}')) + tovmsi;
317
 
            params := '/i "' + fqtovmsi + '" /qn /norestart';
318
 
            if not ShellExec('', 'msiexec.exe', params, '', SW_HIDE,
319
 
                             ewWaitUntilTerminated, ErrorCode) then
320
 
                MsgBox('Failed to install TortoiseOverlays: ' + SysErrorMessage(ErrorCode),
321
 
                        mbInformation, MB_OK);
322
 
            // Ideally we could be bzr_postinstall.exe this way too, but
323
 
            // its needed at uninstall time.
324
 
        end;
325
 
        // cause explorer to re-fetch handlers.
326
 
        SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0);
327
 
    end;
328
 
end;
329
 
 
330
 
 
331
 
function InitializeUninstall(): Boolean;
332
 
begin
333
 
    ShutdownTBZR;
334
 
    result := True;
335
 
end;
 
149
Filename: "{app}\bzr_postinstall.exe"; Parameters: "--delete-path --delete-shell-menu --silent"; Flags: skipifdoesntexist runhidden;