import os.path
import subprocess

from distutils.core import setup
from distutils.extension import Extension
from distutils.command.build_ext import build_ext
from Cython.Build import cythonize

class prepare_tinydtls(build_ext):
    def run(self):
        def run_command(args):
            print("Running:", " ".join(args))
            subprocess.check_call(args, cwd=os.path.join(os.path.dirname(__file__), "DTLSSocket","tinydtls"))
        commands = [
            ["autoconf"],
            ["autoheader"],
            ["./configure", "--without-ecc"],
            ]
        if not os.path.exists(os.path.join(os.path.dirname(__file__), 'DTLSSocket','tinydtls','dtls.c')):
            run_command(["git", "submodule", "update", "--init"])
        for command in commands:
            run_command(command)
        build_ext.run(self)

cy_build = cythonize([
      Extension("DTLSSocket.dtls",
                ["DTLSSocket/dtls.pyx",
                 "DTLSSocket/tinydtls/dtls.c", "DTLSSocket/tinydtls/crypto.c",
                 "DTLSSocket/tinydtls/ccm.c", "DTLSSocket/tinydtls/hmac.c", "DTLSSocket/tinydtls/netq.c",
                 "DTLSSocket/tinydtls/peer.c", "DTLSSocket/tinydtls/dtls_time.c",
                 "DTLSSocket/tinydtls/session.c", "DTLSSocket/tinydtls/dtls_debug.c",
                 "DTLSSocket/tinydtls/aes/rijndael.c", "DTLSSocket/tinydtls/sha2/sha2.c"],
                include_dirs=['DTLSSocket/tinydtls'],
                define_macros=[('DTLSv12', '1'),
                               ('WITH_SHA256', '1'),
                               ('DTLS_CHECK_CONTENTTYPE', '1'),
                               ('_GNU_SOURCE', '1')],
                undef_macros = [ "NDEBUG" ],
                )])

setup(
    name="DTLSSocket",
    version='0.1.3',
    description = "DTLSSocket is a cython wrapper for tinydtls with a Socket like interface",
    author      = "Jannis Konrad",
    author_email= "Jannis.Konrad@h-brs.de",
    url         = "https://git.fslab.de/jkonra2m/tinydtls-cython",
    py_modules  = [ "DTLSSocket.DTLSSocket"],
    cmdclass    = {"build_ext": prepare_tinydtls},
    ext_modules = cy_build,
    setup_requires = [ "Cython==0.27.2" ],
    install_requires = [ "Cython==0.27.2" ],
    )