#
#coding:utf-8
#
#Author  : QCSun
#Email   : qcsun@sunhpc.com
#Times   : 2023-04-14 05:21:02
#WebSite : https://www.sunhpc.com

import os
import re
import sys
import sunhpc
import shutil

class command(sunhpc.commands.soft.command):
    pass

class Command(command):
    """
    Compilation and installation of the parallel computing software.

    <arg type="string" name="version">
    Specifies the software version. e.g,, version=3.2
    </arg>

    <param type="path" name="source">
    Specifies the software source path. Default: /mnt/usb
    </param>

    <param type="path" name="prefix">
    Specifies the software install path. Default: /share/apps/soft
    </param>

    <param type="path" name="envs">
    Specifies the environment variable storage path. Default: /share/apps/envs
    </param>

    <example cmd='soft mpi prefix=/share/apps/soft/xxx version=x.x.x'>
    Build the command line and associated parameters for this software.
    </example>
    """
    def run(self, params, args):

        (prefix, source, envs, version) = self.fillParams([
            ('prefix', '/share/apps/soft'),
            ('source', '/mnt/usb'),
            ('envs', '/share/apps/envs'),
            ('version', None),
            ])

        softname = 'ntfs3g'
        suffname = 'tar.gz'
        dirsname = os.path.join(source, 'hpcsoft', 'tools')
        verslist = self.getVersions(key=softname, suffix=suffname, dirs=dirsname)

        if len(args):
            version = args[0]

        if not version:
            self.msg('must supply an "Version Number", e.g,, version=%s' % '/'.join(verslist), 'a')

        self.create_dirs(prefix, source, envs, version, softname, suffname, dirsname)

        self.build()
        self.clean()

    def build(self):
        """Start build the software."""
        self.cwd = os.getcwd()

        names = os.listdir(self.tmpdirs)
        if self.basename not in names:
            self.msg('Unpack the file from the %s to the %s directory.' % (self.filename, self.tmpdirs))
            os.system('tar -xf %s -C %s' % (self.source, self.tmpdirs))

        build_dirs = os.path.join(self.tmpdirs, self.basename)
        os.chdir(build_dirs)

        # make
        cmd = './configure '
        os.system(cmd)
        os.system('make && make install')

        with open('/sbin/mount.ntfs', 'w') as f:
            f.write('#!/bin/sh\n')
            f.write('#\n# %s env config\n#\n\n' % self.basename)
            f.write('export LANG=en_US.UTF-8\n')
            f.write('exec /sbin/mount.ntfs-3g "$@"\n')

        if os.path.exists('/sbin/mount.ntfs'):
            os.system('chmod 755 /sbin/mount.ntfs')

    def create_dirs(self, prefix, source, envs, version, softname, suffname, dirsname):
        """Create base build directory."""

        self.basename = '%s-%s' % (softname, version)
        self.filename = '%s.%s' % (self.basename, suffname)

        self.prefix = os.path.join(prefix, softname, version)
        if not os.path.exists(self.prefix):
            os.makedirs(self.prefix)

        self.source = os.path.join(dirsname, self.filename)
        if not os.path.exists(self.source):
            self.msg('The %s does not exist,please check it.' % self.source, 'a')

        if not os.path.exists(envs):
            os.makedirs(envs)
        self.envfile = os.path.join(envs, '%s-%s.env' % (softname, version))

        self.tmpdirs = os.path.join(prefix, 'tmpdirs', softname)
        if not os.path.exists(self.tmpdirs):
            os.makedirs(self.tmpdirs)

    def clean(self):
        """Clean the install tmp directory."""
        if os.path.exists(self.tmpdirs):
            shutil.rmtree(self.tmpdirs)



        



























