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