root/releases/pkgcore/0.1.1/setup.py @ marienz%2540gentoo.org-20061002235229-d379ff51f9cb294c

Revision marienz%2540gentoo.org-20061002235229-d379ff51f9cb294c, 6.1 kB (checked in by Marien Zwart <marienz@…>, 2 years ago)

Version bump.

Line 
1#!/usr/bin/env python
2
3import glob
4import os
5import sys
6import errno
7
8from distutils import core, ccompiler, log, sysconfig
9from distutils.command import build, sdist, build_py
10from stat import ST_MODE
11
12class mysdist(sdist.sdist):
13    default_format = dict(sdist.sdist.default_format)
14    default_format["posix"] = "bztar"
15
16    def get_file_list(self):
17        for key, globs in self.distribution.package_data.iteritems():
18            for pattern in globs:
19                self.filelist.extend(glob.glob(os.path.join(key, pattern)))
20        self.filelist.append("ChangeLog")
21        self.filelist.append("AUTHORS")
22        self.filelist.append("sandbox/test.py")
23        self.filelist.extend(glob.glob("sandbox/test-plugins/*"))
24        self.filelist.extend(glob.glob('doc/*.rst'))
25        self.filelist.extend(glob.glob('dev-notes/*.rst'))
26        self.filelist.extend(glob.glob('dev-notes/reimplementation/*.rst'))
27        self.filelist.extend(glob.glob('dev-notes/framework/*.rst'))
28        self.filelist.append('build_docs.py')
29        # XXX HACK: if you run "setup.py sdist" with python 2.5 this
30        # does not get packaged without this.
31        self.filelist.append('pkgcore/util/_functoolsmodule.c')
32        sdist.sdist.get_file_list(self)
33
34    def run(self):
35        print "regenning ChangeLog (may take a while)"
36        os.system("bzr log --verbose > ChangeLog")
37        sdist.sdist.run(self)
38
39
40class build_filter_env(core.Command):
41
42    """Build the filter-env utility.
43
44    This rips a bunch of code from the distutils build_clib command.
45    """
46
47    user_options = [
48        ('debug', 'g', 'compile with debugging information'),
49        ('force', 'f', 'compile everything (ignore timestamps)'),
50        ('compiler=', 'c', 'specify the compiler type'),
51        ]
52
53    boolean_options = ['debug', 'force']
54
55    help_options = [
56        ('help-compiler', None,
57         'list available compilers', ccompiler.show_compilers),
58        ]
59
60    def initialize_options(self):
61        """If we had any options we would initialize them here."""
62        self.debug = None
63        self.force = 0
64        self.compiler = None
65
66    def finalize_options(self):
67        """If we had any options we would finalize them here."""
68        self.set_undefined_options(
69            'build',
70            ('debug', 'debug'),
71            ('force', 'force'),
72            ('compiler', 'compiler'))
73
74    def run(self):
75        compiler = ccompiler.new_compiler(
76            compiler=self.compiler, dry_run=self.dry_run, force=self.force)
77        sysconfig.customize_compiler(compiler)
78        cc = ' '.join(compiler.compiler)
79       
80        for x in ("BASECFLAGS", "CCSHARED", "LDFLAGS"):
81            f = sysconfig.get_config_var(x)
82            if isinstance(f, basestring):
83                cc = cc.replace(f, '')
84            elif f is None:
85                continue
86            else:
87                cc = cc.replace(" ".join(f), '')
88
89        compiler.set_executables(compiler=cc, compiler_so=cc)
90        objects = compiler.compile(list(
91                os.path.join('src', 'filter-env', name)
92                for name in ('main.c', 'bmh_search.c')), debug=self.debug)
93        compiler.link(compiler.EXECUTABLE, objects, os.path.join(
94                'pkgcore', 'bin', 'ebuild-env', 'filter-env'))
95
96
97build.build.sub_commands.append(('build_filter_env', None))
98
99class hacked_build_py(build_py.build_py):
100
101    def run(self):
102        build_py.build_py.run(self)
103
104        fp = os.path.join(self.build_lib, "pkgcore", "bin", "ebuild-helpers")
105        for f in os.listdir(fp):
106            self.set_chmod(os.path.join(fp, f))
107        fp = os.path.join(self.build_lib, "pkgcore", "bin", "ebuild-env")
108        for f in ("ebuild.sh", "ebuild-daemon.sh"):
109            self.set_chmod(os.path.join(fp, f))
110        if os.path.exists(os.path.join(fp, "filter-env")):
111            self.set_chmod(os.path.join(fp, "filter-env"))
112
113    def set_chmod(self, path):
114        if self.dry_run:
115            log.info("changing mode of %s", path)
116        else:
117            mode = ((os.stat(path)[ST_MODE]) | 0555) & 07777
118            log.info("changing mode of %s to %o", path, mode)
119            os.chmod(path, mode)
120
121
122packages = []
123
124for root, dirs, files in os.walk('pkgcore'):
125    if '__init__.py' in files:
126        package = root.replace(os.path.sep, '.')
127        print 'adding package %r' % (package,)
128        packages.append(package)
129
130try:
131    os.unlink("MANIFEST")
132except OSError, oe:
133    if oe.errno != errno.ENOENT:
134        raise
135    del oe
136
137
138extra_flags = ['-Wall']
139
140extensions = []
141if sys.version_info < (2, 5):
142    # Almost unmodified copy from the python 2.5 source.
143    extensions.append(core.Extension(
144            'pkgcore.util._functools', ['pkgcore/util/_functoolsmodule.c'],
145            extra_compile_args=extra_flags))
146
147
148core.setup(
149    name='pkgcore',
150    version='0.1.1',
151    description='package managing framework',
152    url='http://gentooexperimental.org/~ferringb/bzr/pkgcore/',
153    packages=packages,
154    package_data={
155        'pkgcore': [
156            'data/*',
157            'bin/ebuild-env/*',
158            'bin/ebuild-helpers/*',
159            'heapdef.h',
160            ],
161        'src': [
162            'filter-env/*.c',
163            'filter-env/*.h',
164            'bsd-flags/*',
165            'tbz2tool.c'
166            ],
167        },
168    # booo, no glob support in distutils for this one
169    scripts=(
170        glob.glob('pkgcore/bin/utilities/*.py') +
171        glob.glob('bin/*')),
172    ext_modules=[
173        core.Extension('pkgcore.util._caching', ['pkgcore/util/_caching.c'],
174                       extra_compile_args=extra_flags),
175        core.Extension('pkgcore.util._lists', ['pkgcore/util/_lists.c'],
176                       extra_compile_args=extra_flags),
177        core.Extension('pkgcore.ebuild._cpv', ['pkgcore/ebuild/_cpv.c'],
178                       extra_compile_args=extra_flags),
179        core.Extension('pkgcore.util.osutils._readdir',
180                       ['pkgcore/util/osutils/_readdir.c'],
181                       extra_compile_args=extra_flags),
182        ] + extensions,
183    cmdclass={'build_filter_env': build_filter_env,
184              'sdist': mysdist,
185              'build_py': hacked_build_py},
186    )
Note: See TracBrowser for help on using the browser.