197 lines
5.9 KiB
Python
Executable File
197 lines
5.9 KiB
Python
Executable File
import glob
|
|
import os
|
|
import sys
|
|
import re
|
|
import subprocess
|
|
|
|
from distutils import log
|
|
from distutils.core import setup
|
|
|
|
from distutils.core import Extension
|
|
from distutils.sysconfig import get_python_lib
|
|
|
|
import os.path
|
|
from distutils import log
|
|
from distutils.extension import Extension
|
|
|
|
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)
|
|
|
|
|
|
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
|
|
|
|
def RunMake():
|
|
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'" % get_python_lib()
|
|
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)
|
|
|
|
#def install_dependencies(deps):
|
|
# for r in deps:
|
|
# log.info("Installing dependency : %s" %r)
|
|
# subprocess.call(['pip','install',r])
|
|
|
|
|
|
PACKAGE = "OBITools3"
|
|
VERSION = "0.0.6"
|
|
AUTHOR = 'Eric Coissac'
|
|
EMAIL = 'eric@metabarcoding.org'
|
|
URL = "http://metabarcoding.org/obitools3"
|
|
LICENSE = "CeCILL-V2"
|
|
DESCRIPTION = "Tools and library for DNA metabarcoding",
|
|
PYTHONMIN = '3.7'
|
|
|
|
SRC = 'python'
|
|
CSRC = 'src'
|
|
|
|
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"'
|
|
|
|
#install_dependencies(REQUIRES)
|
|
#RunMake()
|
|
|
|
from Cython.Build import cythonize
|
|
|
|
cython_src = [x for x in glob.iglob('python/obitools3/**/*.pyx',
|
|
recursive=True
|
|
)
|
|
]
|
|
|
|
#with open(os.path.join(os.path.dirname(__file__), 'README.rst')) as f:
|
|
# readme = f.read()
|
|
|
|
|
|
cython_ext = [Extension('.'.join([os.path.dirname(x).replace("python/",""),
|
|
os.path.splitext(os.path.basename(x))[0]]).replace('/','.'),
|
|
[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,
|
|
annotate=True,
|
|
build_dir="build")
|
|
|
|
#, include_path=["src","src/libecoPCR","src/libjson"]
|
|
|
|
classifiers=['Development Status :: 1 - Planning',
|
|
'Environment :: Console',
|
|
'Intended Audience :: Science/Research',
|
|
'License :: Other/Proprietary License',
|
|
'Operating System :: Unix',
|
|
'Programming Language :: Python :: 3',
|
|
'Programming Language :: C',
|
|
'Topic :: Scientific/Engineering :: Bio-Informatics',
|
|
'Topic :: Utilities',
|
|
]
|
|
|
|
setup(name=PACKAGE,
|
|
description=DESCRIPTION,
|
|
classifiers=classifiers,
|
|
version=VERSION,
|
|
author=AUTHOR,
|
|
author_email=EMAIL,
|
|
license=LICENSE,
|
|
url=URL,
|
|
ext_modules=xx,
|
|
distclass=Distribution,
|
|
cmdclass={'build': build,
|
|
'build_clib': build_clib},
|
|
cobitools3=get_python_lib(),
|
|
packages = findPackage('python'),
|
|
package_dir = {"" : "python"},
|
|
scripts = ['scripts/obi']
|
|
)
|
|
|