#!/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}, )