~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to setup.py

  • Committer: Robert Collins
  • Date: 2005-10-18 13:11:57 UTC
  • mfrom: (1185.16.72) (0.2.1)
  • Revision ID: robertc@robertcollins.net-20051018131157-76a9970aa78e927e
Merged Martin.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#! /usr/bin/env python
2
2
 
3
 
"""Installation script for bzr.
4
 
Run it with
5
 
 './setup.py install', or
6
 
 './setup.py --help' for more options
7
 
"""
8
 
 
9
 
import os
10
 
import sys
11
 
 
12
 
import bzrlib
13
 
 
14
 
##
15
 
# META INFORMATION FOR SETUP
16
 
 
17
 
META_INFO = {'name':         'bzr',
18
 
             'version':      bzrlib.__version__,
19
 
             'author':       'Canonical Ltd',
20
 
             'author_email': 'bazaar@lists.canonical.com',
21
 
             'url':          'http://www.bazaar-vcs.org/',
22
 
             'description':  'Friendly distributed version control system',
23
 
             'license':      'GNU GPL v2',
24
 
            }
25
 
 
26
 
# The list of packages is automatically generated later. Add other things
27
 
# that are part of BZRLIB here.
28
 
BZRLIB = {}
29
 
 
30
 
PKG_DATA = {# install files from selftest suite
31
 
            'package_data': {'bzrlib': ['doc/api/*.txt',
32
 
                                        'tests/test_patches_data/*',
33
 
                                       ]},
34
 
           }
35
 
 
36
 
######################################################################
37
 
# Reinvocation stolen from bzr, we need python2.4 by virtue of bzr_man
38
 
# including bzrlib.help
39
 
 
40
 
try:
41
 
    version_info = sys.version_info
42
 
except AttributeError:
43
 
    version_info = 1, 5 # 1.5 or older
44
 
 
45
 
REINVOKE = "__BZR_REINVOKE"
46
 
NEED_VERS = (2, 4)
47
 
KNOWN_PYTHONS = ('python2.4',)
48
 
 
49
 
if version_info < NEED_VERS:
50
 
    if not os.environ.has_key(REINVOKE):
51
 
        # mutating os.environ doesn't work in old Pythons
52
 
        os.putenv(REINVOKE, "1")
53
 
        for python in KNOWN_PYTHONS:
54
 
            try:
55
 
                os.execvp(python, [python] + sys.argv)
56
 
            except OSError:
57
 
                pass
58
 
    print >>sys.stderr, "bzr: error: cannot find a suitable python interpreter"
59
 
    print >>sys.stderr, "  (need %d.%d or later)" % NEED_VERS
60
 
    sys.exit(1)
61
 
if getattr(os, "unsetenv", None) is not None:
62
 
    os.unsetenv(REINVOKE)
63
 
 
64
 
 
65
 
def get_bzrlib_packages():
66
 
    """Recurse through the bzrlib directory, and extract the package names"""
67
 
 
68
 
    packages = []
69
 
    base_path = os.path.dirname(os.path.abspath(bzrlib.__file__))
70
 
    for root, dirs, files in os.walk(base_path):
71
 
        if '__init__.py' in files:
72
 
            assert root.startswith(base_path)
73
 
            # Get just the path below bzrlib
74
 
            package_path = root[len(base_path):]
75
 
            # Remove leading and trailing slashes
76
 
            package_path = package_path.strip('\\/')
77
 
            if not package_path:
78
 
                package_name = 'bzrlib'
79
 
            else:
80
 
                package_name = ('bzrlib.' +
81
 
                            package_path.replace('/', '.').replace('\\', '.'))
82
 
            packages.append(package_name)
83
 
    return sorted(packages)
84
 
 
85
 
 
86
 
BZRLIB['packages'] = get_bzrlib_packages()
87
 
 
 
3
# This is an installation script for bzr.  Run it with
 
4
# './setup.py install', or
 
5
# './setup.py --help' for more options
88
6
 
89
7
from distutils.core import setup
90
 
from distutils.command.install_scripts import install_scripts
91
 
from distutils.command.build import build
 
8
 
 
9
# more sophisticated setup script, based on pychecker setup.py
 
10
import sys, os
 
11
from distutils.command.build_scripts import build_scripts
 
12
 
92
13
 
93
14
###############################
94
15
# Overridden distutils actions
95
16
###############################
96
17
 
97
 
class my_install_scripts(install_scripts):
98
 
    """ Customized install_scripts distutils action.
 
18
class my_build_scripts(build_scripts):
 
19
    """Customized build_scripts distutils action.
 
20
 
99
21
    Create bzr.bat for win32.
100
22
    """
 
23
 
101
24
    def run(self):
102
 
        import os
103
 
        import sys
104
 
 
105
 
        install_scripts.run(self)   # standard action
106
 
 
107
25
        if sys.platform == "win32":
108
 
            try:
109
 
                scripts_dir = self.install_dir
110
 
                script_path = self._quoted_path(os.path.join(scripts_dir,
111
 
                                                             "bzr"))
112
 
                python_exe = self._quoted_path(sys.executable)
113
 
                args = self._win_batch_args()
114
 
                batch_str = "@%s %s %s" % (python_exe, script_path, args)
115
 
                batch_path = script_path + ".bat"
116
 
                f = file(batch_path, "w")
117
 
                f.write(batch_str)
118
 
                f.close()
119
 
                print "Created:", batch_path
120
 
            except Exception, e:
121
 
                print "ERROR: Unable to create %s: %s" % (batch_path, e)
122
 
 
123
 
    def _quoted_path(self, path):
124
 
        if ' ' in path:
125
 
            return '"' + path + '"'
126
 
        else:
127
 
            return path
128
 
 
129
 
    def _win_batch_args(self):
130
 
        if os.name == 'nt':
131
 
            return '%*'
132
 
        else:
133
 
            return '%1 %2 %3 %4 %5 %6 %7 %8 %9'
134
 
#/class my_install_scripts
135
 
 
136
 
 
137
 
class bzr_build(build):
138
 
    """Customized build distutils action.
139
 
    Generate bzr.1.
140
 
    """
141
 
    def run(self):
142
 
        build.run(self)
143
 
 
144
 
        import generate_docs
145
 
        generate_docs.main(argv=["bzr", "man"])
 
26
            bat_path = os.path.join(self.build_dir, "bzr.bat")
 
27
            self.scripts.append(bat_path)
 
28
            self.mkpath(self.build_dir)
 
29
            scripts_dir = self.distribution.get_command_obj("install").\
 
30
                                                            install_scripts
 
31
            self.execute(func=self._create_bat,
 
32
                         args=[bat_path, scripts_dir],
 
33
                         msg="Create %s" % bat_path)
 
34
        build_scripts.run(self) # invoke "standard" action
 
35
 
 
36
    def _create_bat(self, bat_path, scripts_dir):
 
37
        """ Creates the batch file for bzr on win32.
 
38
        """
 
39
        try:
 
40
            script_path = os.path.join(scripts_dir, "bzr")
 
41
            bat_str = "@%s %s %%*\n" % (sys.executable, script_path)
 
42
            file(bat_path, "w").write(bat_str)
 
43
            print "file written"
 
44
        except Exception, e:
 
45
            print "ERROR: Unable to create %s: %s" % (bat_path, e)
 
46
            raise e
146
47
 
147
48
 
148
49
########################
149
50
## Setup
150
51
########################
151
52
 
152
 
if 'bdist_wininst' in sys.argv:
153
 
    import glob
154
 
    # doc files
155
 
    docs = glob.glob('doc/*.htm') + ['doc/default.css']
156
 
    # python's distutils-based win32 installer
157
 
    ARGS = {'scripts': ['bzr', 'tools/win32/bzr-win32-bdist-postinstall.py'],
158
 
            # help pages
159
 
            'data_files': [('Doc/Bazaar', docs)],
160
 
           }
161
 
 
162
 
    ARGS.update(META_INFO)
163
 
    ARGS.update(BZRLIB)
164
 
    ARGS.update(PKG_DATA)
165
 
    
166
 
    setup(**ARGS)
167
 
 
168
 
elif 'py2exe' in sys.argv:
169
 
    # py2exe setup
170
 
    import py2exe
171
 
 
172
 
    # pick real bzr version
173
 
    import bzrlib
174
 
 
175
 
    version_number = []
176
 
    for i in bzrlib.version_info[:4]:
177
 
        try:
178
 
            i = int(i)
179
 
        except ValueError:
180
 
            i = 0
181
 
        version_number.append(str(i))
182
 
    version_str = '.'.join(version_number)
183
 
 
184
 
    target = py2exe.build_exe.Target(script = "bzr",
185
 
                                     dest_base = "bzr",
186
 
                                     icon_resources = [(0,'bzr.ico')],
187
 
                                     name = META_INFO['name'],
188
 
                                     version = version_str,
189
 
                                     description = META_INFO['description'],
190
 
                                     author = META_INFO['author'],
191
 
                                     copyright = "(c) Canonical Ltd, 2005-2007",
192
 
                                     company_name = "Canonical Ltd.",
193
 
                                     comments = META_INFO['description'],
194
 
                                    )
195
 
 
196
 
    additional_packages =  []
197
 
    if sys.version.startswith('2.4'):
198
 
        # adding elementtree package
199
 
        additional_packages.append('elementtree')
200
 
    elif sys.version.startswith('2.5'):
201
 
        additional_packages.append('xml.etree')
202
 
    else:
203
 
        import warnings
204
 
        warnings.warn('Unknown Python version.\n'
205
 
                      'Please check setup.py script for compatibility.')
206
 
 
207
 
    options_list = {"py2exe": {"packages": BZRLIB['packages'] +
208
 
                                           additional_packages,
209
 
                               "excludes": ["Tkinter", "medusa"],
210
 
                               "dist_dir": "win32_bzr.exe",
211
 
                              },
212
 
                   }
213
 
    setup(options=options_list,
214
 
          console=[target,
215
 
                   'tools/win32/bzr_postinstall.py',
216
 
                  ],
217
 
          zipfile='lib/library.zip')
218
 
 
219
 
else:
220
 
    # std setup
221
 
    ARGS = {'scripts': ['bzr'],
222
 
            'data_files': [('man/man1', ['bzr.1'])],
223
 
            'cmdclass': {'build': bzr_build,
224
 
                         'install_scripts': my_install_scripts,
225
 
                        },
226
 
           }
227
 
    
228
 
    ARGS.update(META_INFO)
229
 
    ARGS.update(BZRLIB)
230
 
    ARGS.update(PKG_DATA)
231
 
 
232
 
    setup(**ARGS)
 
53
setup(name='bzr',
 
54
      version='0.1',
 
55
      author='Martin Pool',
 
56
      author_email='mbp@sourcefrog.net',
 
57
      url='http://www.bazaar-ng.org/',
 
58
      description='Friendly distributed version control system',
 
59
      license='GNU GPL v2',
 
60
      packages=['bzrlib',
 
61
                'bzrlib.plugins',
 
62
                'bzrlib.selftest',
 
63
                'bzrlib.util',
 
64
                'bzrlib.transport',
 
65
                'bzrlib.store',
 
66
                'bzrlib.util.elementtree',
 
67
                'bzrlib.util.effbot.org',
 
68
                ],
 
69
      scripts=['bzr'])