import glob
import os
import sys
import re
import subprocess

from distutils.core import setup,Extension
from distutils.sysconfig import get_python_lib
from Cython.Build import cythonize

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

sys.path.append(os.path.abspath("python"))

dependencies = ['sphinx',"Cython"]


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


PACKAGE     = "OBITools3"
VERSION     = "0.0.0"
AUTHOR      = 'Eric Coissac'
EMAIL       = 'eric@metabarcoding.org'
URL         = "metabarcoding.org/obitools3"
LICENSE     = "CeCILL-V2"
DESCRIPTION = "Tools and library for DNA metabarcoding",
PYTHONMIN   = '3.6'

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"'

#sys.path.append("/Users/coissac/git/obitools3/python")

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()
    
install_clibdir_option="-DPYTHONLIB:STRING='%s'" % get_python_lib()

subprocess.call(['cmake', install_clibdir_option, 'src'])
subprocess.call(['make', '-C', 'src','install'])




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,
      packages = findPackage('python'),
      package_dir = {"" : "python"},
      scripts = ['scripts/obi']
)