1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
#!/usr/bin/python
from glob import glob
import os.path, shutil, sys, subprocess
from distutils.version import StrictVersion
import distutils.core
import distutils.command.build
import distutils.command.clean
try:
import DistUtilsExtra.auto
except ImportError:
sys.stderr.write('To build Apport you need https://launchpad.net/python-distutils-extra\n')
sys.exit(1)
assert StrictVersion(DistUtilsExtra.auto.__version__) >= '2.24', 'needs DistUtilsExtra.auto >= 2.24'
class build_java_subdir(distutils.core.Command):
'''Java crash handler build command'''
description = 'Compile java components of Apport'
user_options = []
def initialize_options(self):
pass
def finalize_options(self):
pass
def run(self):
oldwd = os.getcwd()
os.chdir('java')
subprocess.check_call(['javac'] + glob('com/ubuntu/apport/*.java'))
subprocess.check_call(['jar','cvf', 'apport.jar'] +
glob('com/ubuntu/apport/*.class'))
subprocess.check_call(['javac','crash.java'])
subprocess.check_call(['jar','cvf', 'crash.jar', 'crash.class'])
os.chdir(oldwd)
class clean_java_subdir(DistUtilsExtra.auto.clean_build_tree):
'''Java crash handler clean command'''
def run(self):
DistUtilsExtra.auto.clean_build_tree.run(self)
for (root, dirs, files) in os.walk('java'):
for f in files:
if f.endswith('.jar') or f.endswith('.class'):
os.unlink(os.path.join(root, f))
#
# main
#
# try to auto-setup packaging_impl
if len(sys.argv) >= 2 and sys.argv[1] != 'sdist' and not os.path.exists('apport/packaging_impl.py'):
if os.path.exists('/etc/apt/sources.list'):
print('Installing apt/dpkg packaging backend.')
shutil.copy('backends/packaging-apt-dpkg.py', 'apport/packaging_impl.py')
elif os.path.exists('/usr/bin/rpm'):
print('Installing RPM packaging backend.')
shutil.copy('backends/packaging_rpm.py', 'apport/packaging_impl.py')
else:
print('Could not determine system package manager. Copy appropriate backends/packaging* to apport/packaging_impl.py')
sys.exit(1)
optional_data_files = []
cmdclass = {}
# if we have Java available, build the Java crash handler
try:
subprocess.check_call(['javac', '-version'], stderr=subprocess.PIPE)
distutils.command.build.build.sub_commands.append(('build_java_subdir', None))
optional_data_files.append(('share/java', ['java/apport.jar']))
cmdclass['build_java_subdir'] = build_java_subdir
cmdclass['clean'] = clean_java_subdir
print('Java support: Enabled')
except (OSError, subprocess.CalledProcessError):
print('Java support: Java not available, not building Java crash handler')
from apport.ui import __version__
DistUtilsExtra.auto.setup(name='apport',
author='Martin Pitt',
author_email='martin.pitt@ubuntu.com',
url='https://launchpad.net/apport',
license='gpl',
description='intercept, process, and report crashes and bug reports',
version=__version__,
data_files=[('share/mime/packages', glob('xdg-mime/*')),
# these are not supposed to be called directly, use apport-bug instead
('share/apport', ['gtk/apport-gtk', 'kde/apport-kde']),
('share/apport/testsuite/', glob('test/*')),
('share/doc/apport/', glob('doc/*.txt')),
('lib/pm-utils/sleep.d/', glob('pm-utils/sleep.d/*')),
] + optional_data_files,
cmdclass=cmdclass
)
|