2015-08-08 01:41:26 +03:00
|
|
|
import os.path
|
|
|
|
from distutils.command.build import build as orig_build
|
|
|
|
from distutils.core import Command
|
|
|
|
|
|
|
|
from setuptools import Distribution
|
|
|
|
from setuptools import Extension
|
2015-08-08 01:40:26 +03:00
|
|
|
from setuptools import setup
|
2015-08-08 01:41:26 +03:00
|
|
|
from setuptools.command.install import install as orig_install
|
|
|
|
|
|
|
|
|
|
|
|
class ExeDistribution(Distribution):
|
|
|
|
c_executables = ()
|
|
|
|
|
|
|
|
|
|
|
|
class build(orig_build):
|
|
|
|
sub_commands = orig_build.sub_commands + [
|
|
|
|
('build_cexe', None),
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
class install(orig_install):
|
|
|
|
sub_commands = orig_install.sub_commands + [
|
|
|
|
('install_cexe', None),
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
class install_cexe(Command):
|
|
|
|
description = 'install C executables'
|
|
|
|
outfiles = ()
|
|
|
|
|
|
|
|
def initialize_options(self):
|
|
|
|
self.build_dir = self.install_dir = None
|
|
|
|
|
|
|
|
def finalize_options(self):
|
|
|
|
# this initializes attributes based on other commands' attributes
|
|
|
|
self.set_undefined_options('build', ('build_scripts', 'build_dir'))
|
|
|
|
self.set_undefined_options(
|
|
|
|
'install', ('install_scripts', 'install_dir'))
|
|
|
|
|
|
|
|
def run(self):
|
2015-09-18 21:08:49 +03:00
|
|
|
|
2015-08-08 01:41:26 +03:00
|
|
|
self.outfiles = self.copy_tree(self.build_dir, self.install_dir)
|
|
|
|
|
|
|
|
def get_outputs(self):
|
|
|
|
return self.outfiles
|
|
|
|
|
|
|
|
|
|
|
|
class build_cexe(Command):
|
|
|
|
description = 'build C executables'
|
|
|
|
|
|
|
|
def initialize_options(self):
|
|
|
|
self.build_scripts = None
|
|
|
|
self.build_temp = None
|
|
|
|
|
|
|
|
def finalize_options(self):
|
2015-08-10 19:32:56 +03:00
|
|
|
self.set_undefined_options(
|
|
|
|
'build',
|
|
|
|
('build_scripts', 'build_scripts'),
|
|
|
|
('build_temp', 'build_temp'),
|
|
|
|
)
|
2015-08-08 01:41:26 +03:00
|
|
|
|
|
|
|
def run(self):
|
|
|
|
# stolen and simplified from distutils.command.build_ext
|
|
|
|
from distutils.ccompiler import new_compiler
|
|
|
|
|
|
|
|
compiler = new_compiler(verbose=True)
|
|
|
|
|
|
|
|
for exe in self.distribution.c_executables:
|
|
|
|
objects = compiler.compile(
|
|
|
|
exe.sources,
|
|
|
|
output_dir=self.build_temp,
|
|
|
|
)
|
|
|
|
compiler.link_executable(
|
|
|
|
objects,
|
|
|
|
exe.name,
|
|
|
|
output_dir=self.build_scripts,
|
|
|
|
extra_postargs=exe.extra_link_args,
|
|
|
|
)
|
|
|
|
|
|
|
|
def get_outputs(self):
|
|
|
|
return [
|
|
|
|
os.path.join(self.build_scripts, exe.name)
|
|
|
|
for exe in self.distribution.c_executables
|
|
|
|
]
|
2015-08-08 01:40:26 +03:00
|
|
|
|
|
|
|
|
|
|
|
setup(
|
|
|
|
name='dumb-init',
|
|
|
|
description='Simple wrapper script which proxies signals to a child',
|
2015-10-02 23:31:35 +03:00
|
|
|
version=open('VERSION').read().strip(),
|
2015-08-08 01:40:26 +03:00
|
|
|
author='Yelp',
|
2016-05-02 21:41:45 +03:00
|
|
|
url='https://github.com/Yelp/dumb-init/',
|
2015-08-08 01:40:26 +03:00
|
|
|
platforms='linux',
|
2015-08-08 01:41:26 +03:00
|
|
|
c_executables=[
|
|
|
|
Extension(
|
|
|
|
'dumb-init',
|
|
|
|
['dumb-init.c'],
|
|
|
|
extra_link_args=['-static'],
|
|
|
|
),
|
|
|
|
],
|
|
|
|
cmdclass={
|
|
|
|
'build': build,
|
|
|
|
'build_cexe': build_cexe,
|
|
|
|
'install': install,
|
|
|
|
'install_cexe': install_cexe,
|
|
|
|
},
|
|
|
|
distclass=ExeDistribution,
|
2015-08-08 01:40:26 +03:00
|
|
|
)
|