#! /usr/bin/python
import os

__author__ = 'brock'

MC_DIRECTORY = '/opt/microchip'
COMPILERS = ['xc8', 'xc16', 'xc32']
DIST_DIRECTORY = '/csciloc/ubuntu/Update'

def update_mplabxc():
    ''' Install the XC compilers '''
    try:
        # maps compiler to installations in MC_DIRECTORY
        installation_map = {}
        # maps compiler to distributions in DIST_DIRECTORY
        distribution_map = {}
        for compiler in COMPILERS:
            installation_map[compiler] = []
            distribution_map[compiler] = []
        if not os.path.isdir(MC_DIRECTORY):
            print 'Creating directory {0}'.format(MC_DIRECTORY)
            os.mkdir(MC_DIRECTORY)
        for compiler in COMPILERS:
            compiler_dir = os.path.join(MC_DIRECTORY, compiler)
            if os.path.isdir(compiler_dir):
                for entry in os.listdir(compiler_dir):
                    installation_map[compiler].append(os.join(compiler_dir,entry))
            else:
                print 'Creating directory {0}'.format(compiler_dir)
                os.mkdir(compiler_dir)
        for entry in os.listdir(DIST_DIRECTORY):
            for compiler in COMPILERS:
                if entry.startswith(compiler + '-'):
                    print entry
                    distribution_map[compiler].append(os.join(DIST_DIRECTORY,entry))
        print 'Existing compiler installation directories:'
        for compiler in COMPILERS:
            print '   {0}:'.format(compiler)
            for version in installation_map[compiler]:
                print '      {0}:'.format(version)
        print 'Existing compiler distributions:'
        for compiler in COMPILERS:
            print '   {0}:'.format(compiler)
            for version in distribution_map[compiler]:
                print '      {0}:'.format(version)
    except OSError as ose:
        print 'Operating system error: {0}'.format(ose.strerror)
        return False

if __name__ == '__main__':
    update_mplabxc()

