import os
import sh
from os.path import join, exists

from pythonforandroid.recipe import Recipe
from pythonforandroid.logger import info, warning, shprint
from pythonforandroid.util import current_directory


class Hostpython2LegacyRecipe(Recipe):
    '''
    .. versionadded:: 0.6.0
        This was the original hostpython2's recipe by tito reintroduced as
        hostpython2legacy.
    '''
    version = '2.7.2'
    url = 'https://python.org/ftp/python/{version}/Python-{version}.tar.bz2'
    name = 'hostpython2legacy'
    patches = ['fix-segfault-pygchead.patch']

    conflicts = ['hostpython2', 'hostpython3', 'hostpython3crystax']

    def get_build_container_dir(self, arch=None):
        choices = self.check_recipe_choices()
        dir_name = '-'.join([self.name] + choices)
        return join(self.ctx.build_dir, 'other_builds', dir_name, 'desktop')

    def get_build_dir(self, arch=None):
        return join(self.get_build_container_dir(), self.name)

    def prebuild_arch(self, arch):
        # Override hostpython Setup?
        shprint(sh.cp, join(self.get_recipe_dir(), 'Setup'),
                join(self.get_build_dir(), 'Modules', 'Setup'))

    def build_arch(self, arch):
        with current_directory(self.get_build_dir()):

            if exists('hostpython'):
                info('hostpython already exists, skipping build')
                self.ctx.hostpython = join(self.get_build_dir(), 'hostpython')
                self.ctx.hostpgen = join(self.get_build_dir(), 'hostpgen')
                return

            if 'LIBS' in os.environ:
                os.environ.pop('LIBS')
            configure = sh.Command('./configure')

            shprint(configure)
            shprint(sh.make, '-j5')

            shprint(sh.mv, join('Parser', 'pgen'), 'hostpgen')

            if exists('python.exe'):
                shprint(sh.mv, 'python.exe', 'hostpython')
            elif exists('python'):
                shprint(sh.mv, 'python', 'hostpython')
            else:
                warning('Unable to find the python executable after '
                        'hostpython build! Exiting.')
                exit(1)

        self.ctx.hostpython = join(self.get_build_dir(), 'hostpython')
        self.ctx.hostpgen = join(self.get_build_dir(), 'hostpgen')


recipe = Hostpython2LegacyRecipe()