diff --git a/bindings/python/.gitignore b/bindings/python/.gitignore index f7e4859c728..22eb52622ed 100755 --- a/bindings/python/.gitignore +++ b/bindings/python/.gitignore @@ -2,4 +2,6 @@ build .project .pydevproject .cproject -*.py[co] \ No newline at end of file +*.py[co] +MANIFEST +VERSION_INFO diff --git a/bindings/python/MANIFEST.in b/bindings/python/MANIFEST.in new file mode 100644 index 00000000000..2110b2157d3 --- /dev/null +++ b/bindings/python/MANIFEST.in @@ -0,0 +1,6 @@ +include README.rst +include VERSION_INFO +recursive-include tests * +recursive-include examples *.py +recursive-include docs * +recursive-include src * diff --git a/bindings/python/README.rst b/bindings/python/README.rst index e69de29bb2d..cf5c2bd0129 100644 --- a/bindings/python/README.rst +++ b/bindings/python/README.rst @@ -0,0 +1,16 @@ +Prerequisites (incomplete): xrootd + +# Installing on OSX +Setup should succeed if: + - xrootd is installed on your system + - xrootd was installed via homebrew + - you're installing the bindings package with the same version number as the + xrootd installation (`xrootd -v`). + +If you have xrootd installed and the installation still fails, do +`XRD_LIBDIR=XYZ; XRD_INCDIR=ZYX; pip install xrootd` +where XYZ and ZYX are the paths to the XRootD library and include directories on your system. + +## How to find the lib and inc directories +To find the library directory, search your system for "libXrd*" files. +The include directory should contain a file named "XrdVersion.hh", so search for that. diff --git a/bindings/python/setup_pypi.py b/bindings/python/setup_pypi.py new file mode 100644 index 00000000000..2830e2d7c29 --- /dev/null +++ b/bindings/python/setup_pypi.py @@ -0,0 +1,67 @@ +from distutils.core import setup, Extension +from distutils import sysconfig +from os import getenv, walk, path, path, getcwd, chdir +from platform import system +import subprocess + +# Remove the "-Wstrict-prototypes" compiler option, which isn't valid for C++. +cfg_vars = sysconfig.get_config_vars() +opt = cfg_vars["OPT"] +cfg_vars["OPT"] = " ".join( flag for flag in opt.split() if flag != '-Wstrict-prototypes' ) + + +sources = list() +depends = list() + +for dirname, dirnames, filenames in walk('src'): + for filename in filenames: + if filename.endswith('.cc'): + sources.append(path.join(dirname, filename)) + elif filename.endswith('.hh'): + depends.append(path.join(dirname, filename)) + +# Get package version +with open ('VERSION_INFO') as verfile: + version = verfile.read().strip() + +def getincdir_osx(): + # Assume xrootd was installed via homebrew + return '/usr/local/Cellar/xrootd/{0}/include/xrootd'.format(version) + +def getlibdir(): + return (system() == 'Darwin' and '/usr/local/lib') or '/usr/lib' + +def getincdir(): + return (system() == 'Darwin' and getincdir_osx()) or '/usr/include/xrootd' + +xrdlibdir = getenv( 'XRD_LIBDIR' ) or getlibdir() +xrdincdir = getenv( 'XRD_INCDIR' ) or getincdir() + +print 'XRootD library dir: ', xrdlibdir +print 'XRootD include dir: ', xrdincdir +print 'Version: ', version + +setup( name = 'pyxrootd', + version = version, + author = 'XRootD Developers', + author_email = 'xrootd-dev@slac.stanford.edu', + url = 'http://xrootd.org', + license = 'LGPLv3+', + description = "XRootD Python bindings", + long_description = "XRootD Python bindings", + packages = ['pyxrootd', 'XRootD', 'XRootD.client'], + package_dir = {'pyxrootd' : 'src', + 'XRootD' : 'libs', + 'XRootD.client': 'libs/client'}, + ext_modules = [ + Extension( + 'pyxrootd.client', + sources = sources, + depends = depends, + libraries = ['XrdCl', 'XrdUtils', 'dl'], + extra_compile_args = ['-g'], + include_dirs = [xrdincdir], + library_dirs = [xrdlibdir] + ) + ] + ) diff --git a/dopy.sh b/dopy.sh new file mode 100755 index 00000000000..2f870ad8dc2 --- /dev/null +++ b/dopy.sh @@ -0,0 +1,10 @@ +#!/bin/bash +# Writes the xrootd version to bindings/python/VERSION_INFO, +# generates and uploads a source distribution for the python bindings. +./genversion.sh --print-only | sed "s/v//" > bindings/python/VERSION_INFO +cd bindings/python +cp setup_pypi.py setup.py +python setup.py sdist +twine upload dist/* +rm setup.py dist/* +