from toolchain import Recipe, shprint
from os.path import join
import sh


arch_mapper = {'i386': 'darwin-i386-cc',
               'x86_64': 'darwin64-x86_64-cc',
               'armv7': 'iphoneos-cross',
               'arm64': 'iphoneos-cross'}


class OpensslRecipe(Recipe):
    version = "1.0.2k"
    url = "http://www.openssl.org/source/openssl-{version}.tar.gz"
    libraries = ["libssl.a", "libcrypto.a"]
    include_dir = "include"
    include_per_arch = True

    def build_arch(self, arch):
        options_iphoneos = (
            "-isysroot {}".format(arch.sysroot),
            "-DOPENSSL_THREADS",
            "-D_REENTRANT",
            "-DDSO_DLFCN",
            "-DHAVE_DLFCN_H",
            "-fomit-frame-pointer",
            "-fno-common",
            "-O3"
        )
        build_env = arch.get_env()
        target = arch_mapper[arch.arch]
        shprint(sh.env, _env=build_env)
        sh.perl(join(self.build_dir, "Configure"),
                target,
                _env=build_env)
        if target == 'iphoneos-cross':
            sh.sed("-ie", "s!^CFLAG=.*!CFLAG={} {}!".format(build_env['CFLAGS'],
                   " ".join(options_iphoneos)),
                   "Makefile")
            sh.sed("-ie", "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;! ",
                   "crypto/ui/ui_openssl.c")
        else:
            sh.sed("-ie", "s!^CFLAG=!CFLAG={} !".format(build_env['CFLAGS']),
                   "Makefile")
        shprint(sh.make, "clean")
        shprint(sh.make, self.ctx.concurrent_make, "build_libs")

recipe = OpensslRecipe()