setup.py 5.89 KB
Newer Older
1 2
import glob
import os
3
import sys
4 5 6
import re
import subprocess

7 8 9 10
from distutils import log
from distutils.core import setup
    
from distutils.core import Extension
11 12 13 14 15 16
from distutils.sysconfig import get_python_lib

import os.path
from distutils import log
from distutils.extension import Extension

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
from distutils.dist import Distribution as ori_Distribution

class Distribution(ori_Distribution):
    
    def __init__(self,attrs=None):
        self.cobitools3=attrs['cobitools3']
        
        ori_Distribution.__init__(self, attrs)
        
        self.global_options.insert(0,('cobitools3', None, "intall location of the C library"
                                     ))

from distutils.command.build import build as build_ori
from distutils.core import Command

class build_clib(Command):
    user_options=[]
    
    def initialize_options(self):
        self.clib_dir=self.distribution.cobitools3
    
    def finalize_options(self):
        if self.clib_dir is None:
            self.clib_dir=get_python_lib()
    
    def run(self):
        log.info("Build the build/cobject directory")
        try:
            os.mkdir("build")
        except OSError:
            pass
        try:
            os.mkdir("build/cobject")
        except OSError:
            pass
        
        oldwd = os.getcwd()
        os.chdir("build/cobject")
        install_clibdir_option="-DPYTHONLIB:STRING='%s'" % self.clib_dir
        log.info("Run CMake")
        subprocess.call(['cmake', install_clibdir_option, '../../src'])
        log.info("Compile the shared C library")
        subprocess.call(['make','install'])   # temporary fix but should be in src
        os.chdir(oldwd)
        

class build(build_ori):
    def run(self):
        self.run_command("build_clib")
        build_ori.run(self)


69 70 71 72 73 74 75 76 77 78 79 80
sys.path.append(os.path.abspath("python"))

def findPackage(root,base=None):
    modules=[]
    if base is None:
        base=[]
    for module in (os.path.basename(os.path.dirname(x)) 
                   for x in glob.glob(os.path.join(root,'*','__init__.py'))):
        modules.append('.'.join(base+[module]))
        modules.extend(findPackage(os.path.join(root,module),base+[module]))
    return modules

81
def RunMake():
82
    log.info("Build the build/cobject directory")
83 84 85 86 87 88 89 90 91 92 93 94
    try:
        os.mkdir("build")
    except OSError:
        pass
    try:
        os.mkdir("build/cobject")
    except OSError:
        pass
    
    oldwd = os.getcwd()
    os.chdir("build/cobject")
    install_clibdir_option="-DPYTHONLIB:STRING='%s'" % get_python_lib()
95
    log.info("Run CMake")
96
    subprocess.call(['cmake', install_clibdir_option, '../../src'])
97
    log.info("Compile the shared C library")
98 99
    subprocess.call(['make','install'])   # temporary fix but should be in src
    os.chdir(oldwd)
100 101 102 103 104 105
 
#def install_dependencies(deps):
#    for r in deps:
#         log.info("Installing dependency : %s" %r)
#         subprocess.call(['pip','install',r])
                          
106 107

PACKAGE     = "OBITools3"
108
VERSION     = "0.0.6"
109
AUTHOR      = 'Eric Coissac'
110
EMAIL       = 'eric@metabarcoding.org'
111
URL         = "http://metabarcoding.org/obitools3"
112 113
LICENSE     = "CeCILL-V2"
DESCRIPTION = "Tools and library for DNA metabarcoding",
Eric Coissac committed
114
PYTHONMIN   = '3.7'
115 116 117 118

SRC       = 'python'
CSRC      = 'src'

119 120 121 122 123 124 125 126
REQUIRES  = ['Cython>=0.24',
             'Sphinx>=1.2.0',
             'ipython>=3.0.0',
             'breathe>=4.0.0'
            ]

os.environ['CFLAGS'] = '-O3 -Wall -I "src" -I "src/libecoPCR" -I "src/libjson"'

127
#install_dependencies(REQUIRES)
128
#RunMake()
129

130 131
from Cython.Build import cythonize

132 133 134 135
cython_src  = [x for x in glob.iglob('python/obitools3/**/*.pyx', 
                                     recursive=True
                                    )
              ]
136
      
137 138 139
#with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f:
#    readme = f.read()
    
140 141 142

cython_ext  = [Extension('.'.join([os.path.dirname(x).replace("python/",""),
                                   os.path.splitext(os.path.basename(x))[0]]).replace('/','.'),
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
                         [x],
                         library_dirs=[get_python_lib()],
                         include_dirs=["src","src/libecoPCR","src/libjson"],
                         libraries=["cobitools3"],
                         runtime_library_dirs=[get_python_lib()],
                         extra_compile_args=['-msse2',
                                          '-Wno-unused-function',
                                          '-Wmissing-braces',
                                          '-Wchar-subscripts',
                                          '-fPIC'
                                         ],
                         extra_link_args=["-Wl,-rpath,"+get_python_lib(), 
                                          "-L"+get_python_lib()
                                         ]
                        )
                for x in cython_src
              ]              

xx = cythonize(cython_ext,
               language_level=3,
163 164
               annotate=True,
               build_dir="build")
165 166 167

#,              include_path=["src","src/libecoPCR","src/libjson"]

168 169 170 171 172 173
classifiers=['Development Status :: 1 - Planning',
             'Environment :: Console',
             'Intended Audience :: Science/Research',
             'License :: Other/Proprietary License',
             'Operating System :: Unix',
             'Programming Language :: Python :: 3',
174
             'Programming Language :: C',
175 176 177 178
             'Topic :: Scientific/Engineering :: Bio-Informatics',
             'Topic :: Utilities',
             ]

179 180 181 182 183 184 185 186 187
setup(name=PACKAGE,
      description=DESCRIPTION,
      classifiers=classifiers,
      version=VERSION,
      author=AUTHOR,
      author_email=EMAIL,
      license=LICENSE,
      url=URL,
      ext_modules=xx,
188 189 190 191
      distclass=Distribution,
      cmdclass={'build': build,
                'build_clib': build_clib},
      cobitools3=get_python_lib(),
192 193
      packages = findPackage('python'),
      package_dir = {"" : "python"},
194
      scripts = ['scripts/obi']
195
)
196