import numpy as np
Import('env', 'pyoutput')

# make sure numpy headers are available
env.AppendUnique(CPPPATH=[np.get_include()])

# configure the boost_python library, which may have different extensions
if not (GetOption('clean') or env.GetOption('help')):
    SConscript('SConscript.configure')

# python extension module
module = env.SharedLibrary('_pyobjcryst', Glob('*.cpp'),
        SHLIBPREFIX='', SHLIBSUFFIX='.so')
Alias('module', module)

# update egg info when package version changes.
basedir = Dir('#').abspath
version = pyoutput(
    'import sys\n'
    'sys.path.insert(0, %r)\n'
    'from setup import versiondata\n'
    'print(versiondata.get("DEFAULT", "version"))\n' % basedir)
egginfo = env.Command(NoCache('#/src/pyobjcryst.egg-info/PKG-INFO'),
                      env.Value(version),
                      '$python -Wignore setup.py egg_info')

# install extension module in a development mode.
develop = Alias('develop', [egginfo, Install('#/src/pyobjcryst', module)])

test = env.Alias('test', develop,
        '$python -m pyobjcryst.tests.run')
AlwaysBuild(test)

def resolve_distutils_target(target, source, env):
    tgt = pyoutput('\n'.join([
        "from setuptools import Distribution, Extension",
        "ext = Extension('pyobjcryst._pyobjcryst', [])",
        "attrs = dict(ext_modules=[ext])",
        "dist = Distribution(attrs)",
        "bcmd = dist.get_command_obj('build_ext')",
        "bcmd.finalize_options()",
        "print(bcmd.get_ext_fullpath(ext.name))",
        ]))
    env['distsofile'] = env.File(tgt)
    return 0

cmd_install = '$python setup.py install'
if 'prefix' in env:
    cmd_install += ' --prefix=$prefix'

install = env.Alias('install', module, [
    resolve_distutils_target,
    Mkdir('$distsofile.dir'),
    Copy('$distsofile', '$SOURCE'),
    Touch('$distsofile'),
    cmd_install,
    ])
AlwaysBuild(install)

# default targets:
Default(module)

# vim: ft=python
