-
Notifications
You must be signed in to change notification settings - Fork 13
/
setup.py
157 lines (129 loc) · 4.81 KB
/
setup.py
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import print_function
from setuptools import setup, Extension
import sys
from io import open
try:
import commands
except ImportError:
import subprocess as commands
version = '0.15'
class PkgConfigExtension(Extension):
'''Extension with lazy properties taken from pkg-config'''
def __init__(self, *args, **kwargs):
'''Behaves like Extension's __init__ but you should not use
include_dirs, library_dirs and libraries arguments.
Extra arguments:
pkg : string
The name of the pkg-config package to use for querying
extra_libraris : [string]
This will be added to the libraries attribute. Optional.
'''
self._pkg = kwargs['pkg']
del kwargs['pkg']
if 'extra_libraries' in kwargs:
self._extra_libraries = kwargs['extra_libraries']
del kwargs['extra_libraries']
else:
self._extra_libraries = []
Extension.__init__(self, *args, **kwargs)
try:
# on Python 2 we need to delete those now
del self.include_dirs
del self.library_dirs
del self.libraries
except AttributeError:
# on Python 3, that's not needed or possible
pass
@classmethod
def _str2list(cls, pkgstr, onlystr):
res = []
for l in pkgstr.split(" "):
if l.find(onlystr) == 0:
res.append(l.replace(onlystr, "", 1))
return res
@classmethod
def _run(cls, command_string):
res, output = commands.getstatusoutput(command_string)
if res != 0:
print('Failed to query %s' % command_string)
sys.exit(1)
return output
@property
def include_dirs(self):
includes = self._run('pkg-config --cflags-only-I %s' % self._pkg)
return self._str2list(includes, '-I')
@property
def library_dirs(self):
libdirs = self._run('pkg-config --libs-only-L %s' % self._pkg)
return self._str2list(libdirs, '-L')
@property
def libraries(self):
libs = self._run('pkg-config --libs-only-l %s' % self._pkg)
return self._str2list(libs, '-l') + self._extra_libraries
@include_dirs.setter
def include_dirs(self, value):
pass
@library_dirs.setter
def library_dirs(self, value):
pass
@libraries.setter
def libraries(self, value):
pass
with open('README.rst', encoding='utf-8') as f:
long_description = f.read()
with open('CHANGES.rst', encoding='utf-8') as f:
long_description += '\n\n'
long_description += f.read()
setup(name='ethtool',
version=version,
description='Python module to interface with ethtool',
long_description=long_description,
author='Harald Hoyer, Arnaldo Carvalho de Melo, David Sommerseth',
author_email='davids@redhat.com',
maintainer='Lumír Balhar, Miro Hrončok, Charalampos Stratakis, Sanqui',
maintainer_email='python-maint@redhat.com',
url='https://github.com/fedora-python/python-ethtool',
license='GPL-2.0',
keywords='network networking ethernet tool ethtool',
classifiers=[
'Development Status :: 7 - Inactive',
'Intended Audience :: Developers',
'Intended Audience :: System Administrators',
'Operating System :: POSIX :: Linux',
'License :: OSI Approved :: GNU General Public License v2 (GPLv2)',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
'Programming Language :: Python :: Implementation :: CPython',
'Topic :: Software Development :: Libraries',
'Topic :: System :: Networking',
],
scripts=[
'scripts/pethtool', 'scripts/pifconfig'
],
ext_modules=[
PkgConfigExtension(
'ethtool',
sources=[
'python-ethtool/ethtool.c',
'python-ethtool/etherinfo.c',
'python-ethtool/etherinfo_obj.c',
'python-ethtool/netlink.c',
'python-ethtool/netlink-address.c'],
extra_compile_args=[
'-fno-strict-aliasing', '-Wno-unused-function'],
define_macros=[('VERSION', '"%s"' % version)],
pkg='libnl-3.0',
extra_libraries=['nl-route-3'],
)
]
)