blob: e43f4dd7ca8c2bf66f928aa16fbf92fed2b211ed [file] [log] [blame]
#!/usr/bin/env python
"""
setup.py file for pywsman
"""
from __future__ import print_function
from distutils.core import setup, Extension
from distutils.command.build import build as _build
import subprocess
import shutil
import sys
import os
PYDIST_VERSION = 0
def errprint(*objs):
print(*objs, file=sys.stderr)
def get_build_info():
'''
Figure out whether we are building from within the openwsman source
directory, or from a Python source distribution.
Returns a tuple of (openwsman version string, Bool)
'''
try:
with open(os.devnull, 'w') as devnull:
subprocess.check_call(['cmake', '-P', 'version.cmake'], stdout=devnull, stderr=devnull)
except subprocess.CalledProcessError as e:
if e.returncode == 1:
errprint('No version.i.in file found -- Building from sdist.')
in_openwsman = False
else:
raise
except OSError:
errprint('Failed to run cmake - is it installed? I will assume we are building from an sdist, but I may be wrong!')
in_openwsman = False
else:
errprint('version.i.in file found -- Building from openwsman source.')
in_openwsman = True
finally:
from version import __VERSION__
return (__VERSION__, in_openwsman)
def copy_files(*source_dirs):
with open('MANIFEST') as _manifest:
for _file in _manifest:
_file = _file.strip()
dirname = os.path.dirname(_file)
if dirname and not os.path.exists(dirname):
os.makedirs(dirname)
if not os.path.exists(_file):
copied = False
for source_dir in source_dirs:
try:
shutil.copyfile('%s/%s' % (source_dir, _file), _file)
except IOError:
continue
else:
copied = True
errprint('Copied %s/%s to %s' % (source_dir, _file, _file))
if not copied:
raise
class Build(_build):
sub_commands = [
('build_ext', _build.has_ext_modules),
('build_py', _build.has_pure_modules),
('build_clib', _build.has_c_libraries),
('build_scripts', _build.has_scripts),
]
with open('README.rst') as _readme:
long_description = _readme.read()
version, from_source = get_build_info()
include_dirs = [os.path.abspath(os.path.dirname(__file__)), ]
if from_source:
copy_files('../..', '../../..')
include_dirs += ['../..', '../../../include']
else:
wsman_inc = os.environ.get('OPENWSMAN_INCLUDE', '/usr/include/openwsman')
include_dirs += [wsman_inc]
for path in include_dirs:
found = os.path.exists('%s/wsman-client.h' % path)
if found:
break
if not found:
raise RuntimeError(('Could not find openwsman headers.'),
('Please install them and/or specify their location using the OPENWSMAN_INCLUDE environment variable.'))
_pywsman = Extension('_pywsman',
sources = ['openwsman.c', 'openwsman.i', ],
include_dirs = include_dirs,
swig_opts = ['-I' + dir for dir in include_dirs] + [
'-features', 'autodoc',
],
libraries = ['pthread', 'curl', 'wsman', 'wsman_client', 'wsman_curl_client_transport'],
)
setup(name='pywsman',
version='%s-%s' % (version, PYDIST_VERSION),
description='Python openwsman bindings.',
author='The Openwsman project',
author_email='openwsman-devel@lists.sourceforge.net',
license='BSD 3-clause',
long_description=long_description,
url='http://openwsman.github.io',
ext_modules=[_pywsman],
py_modules=['pywsman'],
classifiers=[
'License :: OSI Approved :: BSD License',
],
cmdclass={'build': Build},
)