~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to setup.py

  • Committer: John Arbash Meinel
  • Date: 2007-06-07 22:31:44 UTC
  • mfrom: (2517 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2518.
  • Revision ID: john@arbash-meinel.com-20070607223144-u4oljlajcvq6by2n
[merge] bzr.dev 2517

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#! /usr/bin/env python
2
2
 
3
 
# This is an installation script for bzr.  Run it with
4
 
# './setup.py install', or
5
 
# './setup.py --help' for more options
6
 
 
 
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
######################################################################
7
37
# Reinvocation stolen from bzr, we need python2.4 by virtue of bzr_man
8
38
# including bzrlib.help
9
39
 
10
 
import os, sys
11
 
 
12
40
try:
13
41
    version_info = sys.version_info
14
42
except AttributeError:
30
58
    print >>sys.stderr, "bzr: error: cannot find a suitable python interpreter"
31
59
    print >>sys.stderr, "  (need %d.%d or later)" % NEED_VERS
32
60
    sys.exit(1)
33
 
if hasattr(os, "unsetenv"):
 
61
if getattr(os, "unsetenv", None) is not None:
34
62
    os.unsetenv(REINVOKE)
35
63
 
36
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
 
37
89
from distutils.core import setup
38
90
from distutils.command.install_scripts import install_scripts
39
91
from distutils.command.build import build
47
99
    Create bzr.bat for win32.
48
100
    """
49
101
    def run(self):
50
 
        import os
51
 
        import sys
52
 
 
53
102
        install_scripts.run(self)   # standard action
54
103
 
55
104
        if sys.platform == "win32":
56
105
            try:
57
106
                scripts_dir = self.install_dir
58
 
                script_path = os.path.join(scripts_dir, "bzr")
59
 
                batch_str = "@%s %s %%*\n" % (sys.executable, script_path)
 
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)
60
112
                batch_path = script_path + ".bat"
61
113
                f = file(batch_path, "w")
62
114
                f.write(batch_str)
65
117
            except Exception, e:
66
118
                print "ERROR: Unable to create %s: %s" % (batch_path, e)
67
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
 
68
134
 
69
135
class bzr_build(build):
70
136
    """Customized build distutils action.
73
139
    def run(self):
74
140
        build.run(self)
75
141
 
76
 
        import bzr_man
77
 
        bzr_man.main()
 
142
        import generate_docs
 
143
        generate_docs.main(argv=["bzr", "man"])
 
144
 
78
145
 
79
146
########################
80
147
## Setup
81
148
########################
82
149
 
83
 
setup(name='bzr',
84
 
      version='0.7pre',
85
 
      author='Martin Pool',
86
 
      author_email='mbp@sourcefrog.net',
87
 
      url='http://www.bazaar-ng.org/',
88
 
      description='Friendly distributed version control system',
89
 
      license='GNU GPL v2',
90
 
      packages=['bzrlib',
91
 
                'bzrlib.export',
92
 
                'bzrlib.plugins',
93
 
                'bzrlib.store',
94
 
                'bzrlib.tests',
95
 
                'bzrlib.tests.blackbox',
96
 
                'bzrlib.transport',
97
 
                'bzrlib.ui',
98
 
                'bzrlib.util',
99
 
                'bzrlib.util.elementtree',
100
 
                'bzrlib.util.effbot.org',
101
 
                'bzrlib.util.configobj',
102
 
                ],
103
 
      scripts=['bzr'],
104
 
      cmdclass={'install_scripts': my_install_scripts, 'build': bzr_build},
105
 
      data_files=[('man/man1', ['bzr.1'])],
106
 
     )
 
150
command_classes = {'install_scripts': my_install_scripts,
 
151
                  'build': bzr_build}
 
152
ext_modules = []
 
153
try:
 
154
    from Pyrex.Distutils import build_ext
 
155
except ImportError:
 
156
    # try to build the extension from the prior generated source.
 
157
    print ("Pyrex not available, while bzr will build, "
 
158
           "you cannot modify the C extensions.")
 
159
    from distutils.command.build_ext import build_ext
 
160
    from distutils.extension import Extension
 
161
    #ext_modules.append(
 
162
    #    Extension("bzrlib.modulename", ["bzrlib/foo.c"], libraries = []))
 
163
else:
 
164
    from distutils.extension import Extension
 
165
    #ext_modules.append(
 
166
    #    Extension("bzrlib.modulename", ["bzrlib/foo.pyx"], libraries = []))
 
167
command_classes['build_ext'] = build_ext
 
168
 
 
169
if 'bdist_wininst' in sys.argv:
 
170
    import glob
 
171
    # doc files
 
172
    docs = glob.glob('doc/*.htm') + ['doc/default.css']
 
173
    dev_docs = glob.glob('doc/developers/*.htm')
 
174
    # python's distutils-based win32 installer
 
175
    ARGS = {'scripts': ['bzr', 'tools/win32/bzr-win32-bdist-postinstall.py'],
 
176
            # help pages
 
177
            'data_files': [('Doc/Bazaar', docs),
 
178
                           ('Doc/Bazaar/developers', dev_docs),
 
179
                          ],
 
180
           }
 
181
 
 
182
    ARGS.update(META_INFO)
 
183
    ARGS.update(BZRLIB)
 
184
    ARGS.update(PKG_DATA)
 
185
    
 
186
    setup(**ARGS)
 
187
 
 
188
elif 'py2exe' in sys.argv:
 
189
    # py2exe setup
 
190
    import py2exe
 
191
 
 
192
    # pick real bzr version
 
193
    import bzrlib
 
194
 
 
195
    version_number = []
 
196
    for i in bzrlib.version_info[:4]:
 
197
        try:
 
198
            i = int(i)
 
199
        except ValueError:
 
200
            i = 0
 
201
        version_number.append(str(i))
 
202
    version_str = '.'.join(version_number)
 
203
 
 
204
    target = py2exe.build_exe.Target(script = "bzr",
 
205
                                     dest_base = "bzr",
 
206
                                     icon_resources = [(0,'bzr.ico')],
 
207
                                     name = META_INFO['name'],
 
208
                                     version = version_str,
 
209
                                     description = META_INFO['description'],
 
210
                                     author = META_INFO['author'],
 
211
                                     copyright = "(c) Canonical Ltd, 2005-2007",
 
212
                                     company_name = "Canonical Ltd.",
 
213
                                     comments = META_INFO['description'],
 
214
                                    )
 
215
 
 
216
    additional_packages =  []
 
217
    if sys.version.startswith('2.4'):
 
218
        # adding elementtree package
 
219
        additional_packages.append('elementtree')
 
220
    elif sys.version.startswith('2.5'):
 
221
        additional_packages.append('xml.etree')
 
222
    else:
 
223
        import warnings
 
224
        warnings.warn('Unknown Python version.\n'
 
225
                      'Please check setup.py script for compatibility.')
 
226
 
 
227
    options_list = {"py2exe": {"packages": BZRLIB['packages'] +
 
228
                                           additional_packages,
 
229
                               "excludes": ["Tkinter", "medusa", "tools"],
 
230
                               "dist_dir": "win32_bzr.exe",
 
231
                              },
 
232
                   }
 
233
    setup(options=options_list,
 
234
          console=[target,
 
235
                   'tools/win32/bzr_postinstall.py',
 
236
                  ],
 
237
          zipfile='lib/library.zip')
 
238
 
 
239
else:
 
240
    # std setup
 
241
    ARGS = {'scripts': ['bzr'],
 
242
            'data_files': [('man/man1', ['bzr.1'])],
 
243
            'cmdclass': command_classes,
 
244
            'ext_modules': ext_modules,
 
245
           }
 
246
    
 
247
    ARGS.update(META_INFO)
 
248
    ARGS.update(BZRLIB)
 
249
    ARGS.update(PKG_DATA)
 
250
 
 
251
    setup(**ARGS)