/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 setup.py

Commit initial content.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#! /usr/bin/env python
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
 
 
88
 
 
89
 
from distutils.core import setup
90
 
from distutils.command.install_scripts import install_scripts
91
 
from distutils.command.build import build
92
 
 
93
 
###############################
94
 
# Overridden distutils actions
95
 
###############################
96
 
 
97
 
class my_install_scripts(install_scripts):
98
 
    """ Customized install_scripts distutils action.
99
 
    Create bzr.bat for win32.
100
 
    """
101
 
    def run(self):
102
 
        install_scripts.run(self)   # standard action
103
 
 
104
 
        if sys.platform == "win32":
105
 
            try:
106
 
                scripts_dir = os.path.join(sys.prefix, 'Scripts')
107
 
                script_path = self._quoted_path(os.path.join(scripts_dir,
108
 
                                                             "bzr"))
109
 
                python_exe = self._quoted_path(sys.executable)
110
 
                args = self._win_batch_args()
111
 
                batch_str = "@%s %s %s" % (python_exe, script_path, args)
112
 
                batch_path = os.path.join(self.install_dir, "bzr.bat")
113
 
                f = file(batch_path, "w")
114
 
                f.write(batch_str)
115
 
                f.close()
116
 
                print "Created:", batch_path
117
 
            except Exception, e:
118
 
                print "ERROR: Unable to create %s: %s" % (batch_path, e)
119
 
 
120
 
    def _quoted_path(self, path):
121
 
        if ' ' in path:
122
 
            return '"' + path + '"'
123
 
        else:
124
 
            return path
125
 
 
126
 
    def _win_batch_args(self):
127
 
        from bzrlib.win32utils import winver
128
 
        if winver == 'Windows NT':
129
 
            return '%*'
130
 
        else:
131
 
            return '%1 %2 %3 %4 %5 %6 %7 %8 %9'
132
 
#/class my_install_scripts
133
 
 
134
 
 
135
 
class bzr_build(build):
136
 
    """Customized build distutils action.
137
 
    Generate bzr.1.
138
 
    """
139
 
    def run(self):
140
 
        build.run(self)
141
 
 
142
 
        import generate_docs
143
 
        generate_docs.main(argv=["bzr", "man"])
144
 
 
145
 
 
146
 
########################
147
 
## Setup
148
 
########################
149
 
 
150
 
command_classes = {'install_scripts': my_install_scripts,
151
 
                   'build': bzr_build}
152
 
from distutils.extension import Extension
153
 
ext_modules = []
154
 
try:
155
 
    from Pyrex.Distutils import build_ext
156
 
except ImportError:
157
 
    have_pyrex = False
158
 
    # try to build the extension from the prior generated source.
159
 
    print
160
 
    print ("The python package 'Pyrex' is not available."
161
 
           " If the .c files are available,")
162
 
    print ("they will be built,"
163
 
           " but modifying the .pyx files will not rebuild them.")
164
 
    print
165
 
    from distutils.command.build_ext import build_ext
166
 
else:
167
 
    have_pyrex = True
168
 
# Override the build_ext if we have Pyrex available
169
 
command_classes['build_ext'] = build_ext
170
 
unavailable_files = []
171
 
 
172
 
 
173
 
def add_pyrex_extension(module_name, **kwargs):
174
 
    """Add a pyrex module to build.
175
 
 
176
 
    This will use Pyrex to auto-generate the .c file if it is available.
177
 
    Otherwise it will fall back on the .c file. If the .c file is not
178
 
    available, it will warn, and not add anything.
179
 
 
180
 
    You can pass any extra options to Extension through kwargs. One example is
181
 
    'libraries = []'.
182
 
 
183
 
    :param module_name: The python path to the module. This will be used to
184
 
        determine the .pyx and .c files to use.
185
 
    """
186
 
    path = module_name.replace('.', '/')
187
 
    pyrex_name = path + '.pyx'
188
 
    c_name = path + '.c'
189
 
    if have_pyrex:
190
 
        ext_modules.append(Extension(module_name, [pyrex_name]))
191
 
    else:
192
 
        if not os.path.isfile(c_name):
193
 
            unavailable_files.append(c_name)
194
 
        else:
195
 
            ext_modules.append(Extension(module_name, [c_name]))
196
 
 
197
 
 
198
 
add_pyrex_extension('bzrlib._dirstate_helpers_c')
199
 
add_pyrex_extension('bzrlib._knit_load_data_c')
200
 
 
201
 
 
202
 
if unavailable_files:
203
 
    print 'C extension(s) not found:'
204
 
    print '   %s' % ('\n  '.join(unavailable_files),)
205
 
    print 'The python versions will be used instead.'
206
 
    print
207
 
 
208
 
 
209
 
if 'bdist_wininst' in sys.argv:
210
 
    def find_docs():
211
 
        docs = []
212
 
        for root, dirs, files in os.walk('doc'):
213
 
            r = []
214
 
            for f in files:
215
 
                if os.path.splitext(f)[1] in ('.html', '.css'):
216
 
                    r.append(os.path.join(root, f))
217
 
            if r:
218
 
                relative = root[4:]
219
 
                if relative:
220
 
                    target = os.path.join('Doc\\Bazaar', relative)
221
 
                else:
222
 
                    target = 'Doc\\Bazaar'
223
 
                docs.append((target, r))
224
 
        return docs
225
 
 
226
 
    # python's distutils-based win32 installer
227
 
    ARGS = {'scripts': ['bzr', 'tools/win32/bzr-win32-bdist-postinstall.py'],
228
 
            'ext_modules': ext_modules,
229
 
            # help pages
230
 
            'data_files': find_docs(),
231
 
            # for building pyrex extensions
232
 
            'cmdclass': {'build_ext': build_ext},
233
 
           }
234
 
 
235
 
    ARGS.update(META_INFO)
236
 
    ARGS.update(BZRLIB)
237
 
    ARGS.update(PKG_DATA)
238
 
    
239
 
    setup(**ARGS)
240
 
 
241
 
elif 'py2exe' in sys.argv:
242
 
    # py2exe setup
243
 
    import py2exe
244
 
 
245
 
    # pick real bzr version
246
 
    import bzrlib
247
 
 
248
 
    version_number = []
249
 
    for i in bzrlib.version_info[:4]:
250
 
        try:
251
 
            i = int(i)
252
 
        except ValueError:
253
 
            i = 0
254
 
        version_number.append(str(i))
255
 
    version_str = '.'.join(version_number)
256
 
 
257
 
    target = py2exe.build_exe.Target(script = "bzr",
258
 
                                     dest_base = "bzr",
259
 
                                     icon_resources = [(0,'bzr.ico')],
260
 
                                     name = META_INFO['name'],
261
 
                                     version = version_str,
262
 
                                     description = META_INFO['description'],
263
 
                                     author = META_INFO['author'],
264
 
                                     copyright = "(c) Canonical Ltd, 2005-2007",
265
 
                                     company_name = "Canonical Ltd.",
266
 
                                     comments = META_INFO['description'],
267
 
                                    )
268
 
 
269
 
    additional_packages =  []
270
 
    if sys.version.startswith('2.4'):
271
 
        # adding elementtree package
272
 
        additional_packages.append('elementtree')
273
 
    elif sys.version.startswith('2.5'):
274
 
        additional_packages.append('xml.etree')
275
 
    else:
276
 
        import warnings
277
 
        warnings.warn('Unknown Python version.\n'
278
 
                      'Please check setup.py script for compatibility.')
279
 
    # email package from std python library use lazy import,
280
 
    # so we need to explicitly add all package
281
 
    additional_packages.append('email')
282
 
 
283
 
    options_list = {"py2exe": {"packages": BZRLIB['packages'] +
284
 
                                           additional_packages,
285
 
                               "excludes": ["Tkinter", "medusa", "tools"],
286
 
                               "dist_dir": "win32_bzr.exe",
287
 
                              },
288
 
                   }
289
 
    setup(options=options_list,
290
 
          console=[target,
291
 
                   'tools/win32/bzr_postinstall.py',
292
 
                  ],
293
 
          zipfile='lib/library.zip')
294
 
 
295
 
else:
296
 
    # ad-hoc for easy_install
297
 
    DATA_FILES = []
298
 
    if not 'bdist_egg' in sys.argv:
299
 
        # generate and install bzr.1 only with plain install, not easy_install one
300
 
        DATA_FILES = [('man/man1', ['bzr.1'])]
301
 
 
302
 
    # std setup
303
 
    ARGS = {'scripts': ['bzr'],
304
 
            'data_files': DATA_FILES,
305
 
            'cmdclass': command_classes,
306
 
            'ext_modules': ext_modules,
307
 
           }
308
 
 
309
 
    ARGS.update(META_INFO)
310
 
    ARGS.update(BZRLIB)
311
 
    ARGS.update(PKG_DATA)
312
 
 
313
 
    setup(**ARGS)