1# (c) Canonical Ltd, 2006 2# written by Alexander Belchenko for brz project 3# 4# This script will be executed after installation of breezy package 5# and before installer exits. 6# All printed data will appear on the last screen of installation 7# procedure. 8# The main goal of this script is to create special batch file 9# launcher for brz. Typical content of this batch file is: 10# @python brz %* 11# 12# This file works only on Windows 2000/XP. For win98 there is 13# should be "%1 %2 %3 %4 %5 %6 %7 %8 %9" instead of "%*". 14# Or even more complex thing. 15# 16# [bialix]: brz de-facto does not support win98. 17# Although it seems to work on. Sometimes. 18# 2006/07/30 added minimal support of win98. 19# 2007/01/30 added *real* support of win98. 20 21import os 22import sys 23import _winreg 24 25from breezy import win32utils 26 27 28def _quoted_path(path): 29 if ' ' in path: 30 return '"' + path + '"' 31 else: 32 return path 33 34def _win_batch_args(): 35 if win32utils.winver == 'Windows NT': 36 return '%*' 37 else: 38 return '%1 %2 %3 %4 %5 %6 %7 %8 %9' 39 40 41if "-install" in sys.argv[1:]: 42 # try to detect version number automatically 43 try: 44 import breezy 45 except ImportError: 46 ver = '' 47 else: 48 ver = breezy.__version__ 49 50 ## 51 # XXX change message for something more appropriate 52 print("""Breezy %s 53 54Congratulation! Brz successfully installed. 55 56""" % ver) 57 58 batch_path = "brz.bat" 59 prefix = sys.exec_prefix 60 try: 61 ## 62 # try to create 63 scripts_dir = os.path.join(prefix, "Scripts") 64 script_path = _quoted_path(os.path.join(scripts_dir, "brz")) 65 python_path = _quoted_path(os.path.join(prefix, "python.exe")) 66 args = _win_batch_args() 67 batch_str = "@%s %s %s" % (python_path, script_path, args) 68 # support of win98 69 # if there is no HOME for brz then set it for Breezy manually 70 base = os.environ.get('brz_HOME', None) 71 if base is None: 72 base = win32utils.get_appdata_location() 73 if base is None: 74 base = os.environ.get('HOME', None) 75 if base is None: 76 base = os.path.splitdrive(sys.prefix)[0] + '\\' 77 batch_str = ("@SET brz_HOME=" + _quoted_path(base) + "\n" + 78 batch_str) 79 80 batch_path = os.path.join(scripts_dir, "brz.bat") 81 with open(batch_path, "w") as f: 82 f.write(batch_str) 83 # registering manually created files for auto-deinstallation procedure 84 file_created(batch_path) 85 ## 86 # inform user where batch launcher is. 87 print("Created:", batch_path) 88 print("Use this batch file to run brz") 89 except Exception as e: 90 print("ERROR: Unable to create %s: %s" % (batch_path, e)) 91 92 ## this hunk borrowed from pywin32_postinstall.py 93 # use bdist_wininst builtins to create a shortcut. 94 # CSIDL_COMMON_PROGRAMS only available works on NT/2000/XP, and 95 # will fail there if the user has no admin rights. 96 if get_root_hkey() == _winreg.HKEY_LOCAL_MACHINE: 97 try: 98 fldr = get_special_folder_path("CSIDL_COMMON_PROGRAMS") 99 except OSError: 100 # No CSIDL_COMMON_PROGRAMS on this platform 101 fldr = get_special_folder_path("CSIDL_PROGRAMS") 102 else: 103 # non-admin install - always goes in this user's start menu. 104 fldr = get_special_folder_path("CSIDL_PROGRAMS") 105 106 # make Breezy entry 107 fldr = os.path.join(fldr, 'Breezy') 108 if not os.path.isdir(fldr): 109 os.mkdir(fldr) 110 directory_created(fldr) 111 112 # link to documentation 113 docs = os.path.join(sys.exec_prefix, 'Doc', 'Breezy', 'index.html') 114 dst = os.path.join(fldr, 'Documentation.lnk') 115 create_shortcut(docs, 'Breezy Documentation', dst) 116 file_created(dst) 117 print('Documentation for Breezy: Start => Programs => Breezy') 118 119 # brz in cmd shell 120 if os.name == 'nt': 121 cmd = os.environ.get('COMSPEC', 'cmd.exe') 122 args = "/K brz help" 123 else: 124 # minimal support of win98 125 cmd = os.environ.get('COMSPEC', 'command.com') 126 args = "brz help" 127 dst = os.path.join(fldr, 'Start brz.lnk') 128 create_shortcut(cmd, 129 'Start brz in cmd shell', 130 dst, 131 args, 132 os.path.join(sys.exec_prefix, 'Scripts')) 133 file_created(dst) 134 135 # uninstall shortcut 136 uninst = os.path.join(sys.exec_prefix, 'Removebrz.exe') 137 dst = os.path.join(fldr, 'Uninstall Breezy.lnk') 138 create_shortcut(uninst, 139 'Uninstall Breezy', 140 dst, 141 '-u brz-wininst.log', 142 sys.exec_prefix, 143 ) 144 file_created(dst) 145