]>
Commit | Line | Data |
---|---|---|
66dfdff0 | 1 | #!/usr/bin/python |
877108e4 | 2 | |
1b7155f7 | 3 | from os import getenv |
5508672d ACM |
4 | from subprocess import Popen, PIPE |
5 | from re import sub | |
6 | ||
7 | def clang_has_option(option): | |
e13a5d69 | 8 | return [o for o in Popen(['clang', option], stderr=PIPE).stderr.readlines() if b"unknown argument" in o] == [ ] |
1b7155f7 | 9 | |
4be92cf0 ACM |
10 | cc = getenv("CC") |
11 | if cc == "clang": | |
8b2f245f EH |
12 | from distutils.sysconfig import get_config_vars |
13 | vars = get_config_vars() | |
14 | for var in ('CFLAGS', 'OPT'): | |
15 | vars[var] = sub("-specs=[^ ]+", "", vars[var]) | |
16 | if not clang_has_option("-mcet"): | |
17 | vars[var] = sub("-mcet", "", vars[var]) | |
18 | if not clang_has_option("-fcf-protection"): | |
19 | vars[var] = sub("-fcf-protection", "", vars[var]) | |
4be92cf0 ACM |
20 | |
21 | from distutils.core import setup, Extension | |
22 | ||
9941c96a JO |
23 | from distutils.command.build_ext import build_ext as _build_ext |
24 | from distutils.command.install_lib import install_lib as _install_lib | |
25 | ||
26 | class build_ext(_build_ext): | |
27 | def finalize_options(self): | |
28 | _build_ext.finalize_options(self) | |
29 | self.build_lib = build_lib | |
30 | self.build_temp = build_tmp | |
31 | ||
32 | class install_lib(_install_lib): | |
33 | def finalize_options(self): | |
34 | _install_lib.finalize_options(self) | |
35 | self.build_dir = build_lib | |
36 | ||
37 | ||
9c12cf95 JO |
38 | cflags = getenv('CFLAGS', '').split() |
39 | # switch off several checks (need to be at the end of cflags list) | |
24ef0fd0 | 40 | cflags += ['-fno-strict-aliasing', '-Wno-write-strings', '-Wno-unused-parameter', '-Wno-redundant-decls' ] |
b7a313d8 JO |
41 | if cc != "clang": |
42 | cflags += ['-Wno-cast-function-type' ] | |
877108e4 | 43 | |
67d52689 | 44 | src_perf = getenv('srctree') + '/tools/perf' |
9941c96a JO |
45 | build_lib = getenv('PYTHON_EXTBUILD_LIB') |
46 | build_tmp = getenv('PYTHON_EXTBUILD_TMP') | |
45bff41a | 47 | libtraceevent = getenv('LIBTRACEEVENT') |
285a8f24 | 48 | libapikfs = getenv('LIBAPI') |
9941c96a | 49 | |
66dfdff0 | 50 | ext_sources = [f.strip() for f in open('util/python-ext-sources') |
6a5c13af NK |
51 | if len(f.strip()) > 0 and f[0] != '#'] |
52 | ||
67d52689 | 53 | # use full paths with source files |
66dfdff0 | 54 | ext_sources = list(map(lambda x: '%s/%s' % (src_perf, x) , ext_sources)) |
67d52689 | 55 | |
877108e4 | 56 | perf = Extension('perf', |
6a5c13af | 57 | sources = ext_sources, |
f6bbc1da | 58 | include_dirs = ['util/include'], |
1b7155f7 | 59 | extra_compile_args = cflags, |
553873e1 | 60 | extra_objects = [libtraceevent, libapikfs], |
1b7155f7 | 61 | ) |
877108e4 ACM |
62 | |
63 | setup(name='perf', | |
64 | version='0.1', | |
65 | description='Interface with the Linux profiling infrastructure', | |
66 | author='Arnaldo Carvalho de Melo', | |
67 | author_email='acme@redhat.com', | |
68 | license='GPLv2', | |
69 | url='http://perf.wiki.kernel.org', | |
9941c96a JO |
70 | ext_modules=[perf], |
71 | cmdclass={'build_ext': build_ext, 'install_lib': install_lib}) |