~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to tools/win32/bzr_postinstall.py

  • Committer: Alexander Belchenko
  • Date: 2006-09-05 07:37:01 UTC
  • mto: (1711.9.17 jam-integration)
  • mto: This revision was merged to the branch mainline in revision 1984.
  • Revision ID: bialix@ukr.net-20060905073701-93e7c0a44dd7ee05
small but important fix for 'make installer' dependencies

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""bzr postinstall helper for win32 installation
18
18
Written by Alexander Belchenko
19
 
 
20
 
Dependency: ctypes
21
19
"""
22
20
 
23
21
import os
24
 
import shutil
25
22
import sys
26
23
 
27
24
 
28
25
##
29
26
# CONSTANTS
30
27
 
31
 
VERSION = "1.5.20070131"
 
28
VERSION = "1.3.20060513"
32
29
 
33
30
USAGE = """Bzr postinstall helper for win32 installation
34
31
Usage: %s [options]
48
45
    --check-mfc71               - check if MFC71.DLL present in system
49
46
""" % os.path.basename(sys.argv[0])
50
47
 
51
 
# Windows version
52
 
_major,_minor,_build,_platform,_text = sys.getwindowsversion()
53
 
# from MSDN:
54
 
# dwPlatformId
55
 
#   The operating system platform.
56
 
#   This member can be one of the following values.
57
 
#   ==========================  ======================================
58
 
#   Value                       Meaning
59
 
#   --------------------------  --------------------------------------
60
 
#   VER_PLATFORM_WIN32_NT       The operating system is Windows Vista,
61
 
#   2                           Windows Server "Longhorn",
62
 
#                               Windows Server 2003, Windows XP,
63
 
#                               Windows 2000, or Windows NT.
64
 
#
65
 
#   VER_PLATFORM_WIN32_WINDOWS  The operating system is Windows Me,
66
 
#   1                           Windows 98, or Windows 95.
67
 
#   ==========================  ======================================
68
 
if _platform == 2:
69
 
    winver = 'Windows NT'
70
 
else:
71
 
    # don't care about real Windows name, just to force safe operations
72
 
    winver = 'Windows 98'
73
 
 
74
 
 
75
48
##
76
49
# INTERNAL VARIABLES
77
50
 
80
53
 
81
54
 
82
55
def main():
83
 
    import ctypes
84
56
    import getopt
85
57
    import re
86
58
    import _winreg
154
126
    MB_ICONERROR = 16
155
127
    MB_ICONEXCLAMATION = 48
156
128
 
157
 
    bzr_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
 
129
    bzr_dir = os.path.dirname(sys.argv[0])
158
130
 
159
131
    if start_bzr:
160
132
        fname = os.path.join(bzr_dir, "start_bzr.bat")
183
155
            f.write(''.join(content))
184
156
            f.close()
185
157
 
186
 
    if (add_path or delete_path) and winver == 'Windows NT':
 
158
    if add_path or delete_path:
187
159
        # find appropriate registry key:
188
160
        # 1. HKLM\System\CurrentControlSet\Control\SessionManager\Environment
189
161
        # 2. HKCU\Environment
241
213
        if not hkey is None:
242
214
            _winreg.CloseKey(hkey)
243
215
 
244
 
    if (add_path or delete_path) and winver == 'Windows 98':
245
 
        # mutating autoexec.bat
246
 
        # adding or delete string:
247
 
        # SET PATH=%PATH%;C:\PROGRA~1\Bazaar
248
 
        abat = 'C:\\autoexec.bat'
249
 
        abak = 'C:\\autoexec.bak'
250
 
 
251
 
        def backup_autoexec_bat(name, backupname, dry_run):
252
 
            # backup autoexec.bat
253
 
            if os.path.isfile(name):
254
 
                if not dry_run:
255
 
                    shutil.copyfile(name, backupname)
256
 
                else:
257
 
                    print '*** backup copy of autoexec.bat created'
258
 
 
259
 
        GetShortPathName = ctypes.windll.kernel32.GetShortPathNameA
260
 
        buf = ctypes.create_string_buffer(260)
261
 
        if GetShortPathName(bzr_dir, buf, 260):
262
 
            bzr_dir_8_3 = buf.value
263
 
        else:
264
 
            bzr_dir_8_3 = bzr_dir
265
 
        pattern = 'SET PATH=%PATH%;' + bzr_dir_8_3
266
 
 
267
 
        # search pattern
268
 
        f = file(abat, 'r')
269
 
        lines = f.readlines()
270
 
        f.close()
271
 
        found = False
272
 
        for i in lines:
273
 
            if i.rstrip('\r\n') == pattern:
274
 
                found = True
275
 
                break
276
 
 
277
 
        if delete_path and found:
278
 
            backup_autoexec_bat(abat, abak, dry_run)
279
 
            if not dry_run:
280
 
                f = file(abat, 'w')
281
 
                for i in lines:
282
 
                    if i.rstrip('\r\n') != pattern:
283
 
                        f.write(i)
284
 
                f.close()
285
 
            else:
286
 
                print '*** Remove line <%s> from autoexec.bat' % pattern
287
 
                    
288
 
        elif add_path and not found:
289
 
            backup_autoexec_bat(abat, abak, dry_run)
290
 
            if not dry_run:
291
 
                f = file(abat, 'a')
292
 
                f.write(pattern)
293
 
                f.write('\n')
294
 
                f.close()
295
 
            else:
296
 
                print '*** Add line <%s> to autoexec.bat' % pattern
297
 
 
298
216
    if add_shell_menu and not delete_shell_menu:
299
217
        hkey = None
300
218
        try:
311
229
            _winreg.SetValue(hkey, '', _winreg.REG_SZ, 'Bzr Here')
312
230
            hkey2 = _winreg.CreateKey(hkey, 'command')
313
231
            _winreg.SetValue(hkey2, '', _winreg.REG_SZ,
314
 
                             '%s /K "%s"' % (
315
 
                                    os.environ.get('COMSPEC', '%COMSPEC%'),
316
 
                                    os.path.join(bzr_dir, 'start_bzr.bat')))
 
232
                             'cmd /K "%s"' % os.path.join(bzr_dir,
 
233
                                                          'start_bzr.bat'))
317
234
            _winreg.CloseKey(hkey2)
318
235
            _winreg.CloseKey(hkey)
319
236