#!/usr/bin/env python
import os,string,sys

# tell me about the architecture
print 'Running as user: ', os.environ['USER']
print 'In directory: ',os.getcwd()

try:
    import platform
    print '------------- system information ---------------'
    print 'Hostname       = ',os.environ['HOST']
    print 'Architecture   = ',platform.architecture()
    print 'distribution   = ',platform.dist()
    print 'libc version   = ',platform.libc_ver()
    print 'Machine type   = ',platform.machine()
    print 'Platform       = ',platform.platform()
    print 'processor type = ',platform.processor()
    print 'system         = ',platform.system()
    print 'system version = ',platform.version()

    print
    print '------------- Python information --------'
    print 'python was compiled with: ',platform.python_compiler()
    print 'python version = ',platform.python_version()
    print 'python was built: ',platform.python_build()

except:
    print '*** you have an older version of python'
    print '*** you missed some important system information because of that'
    print '*** consider upgrading to version 2.3 or greater'
    print 'python version = ',sys.version
    print 'uname = '
    os.system('uname -a')

   
print '-------------- User ---------------------'
shell = os.environ.get('SHELL')
print 'SHELL = ',shell

print

try:
    import Numeric
    print 'Numeric version = ',Numeric.__version__
except:
    print '*** Numeric is not installed.'
    print '*** Get it from http://sourceforge.net/projects/numpy'

try:
    import numarray
    print 'numarray version = ',numarray.__version__
except:
    print '*** numarray is not installed.'
    print '*** Get it from http://sourceforge.net/projects/numpy'

try:
    import numpy
    print 'numpy version = ', numpy.__version__
except:
    print '*** numpy is not installed'

try:
    import Scientific
    print 'Found Scientific'
    try:
        import Scientific.IO.NetCDF
        print 'Found Scientific.IO.NetCDF'
    except:
        print 'Scientific.IO.NetCDF appears broken.'
        print 'Is netcdf installed?'
        print 'did you set $NETCDF_PREFIX when you installed Scientific?'
except:
    print '*** Scientific not installed'
    print '*** Get it at http://starship.python.net/~hinsen/ScientificPython/'


try:
    import ASE
    print 'Found ASE at ', ASE.__file__
except Exception,error:
    print error
    print '*** No ASE found. Did you install it?'

try:
    import ase
    print 'Found an ase version: "%s"' % ase.__version__
    print 'at :',ase.__file__
except:
    print '*** No ase found. Did you install it?'


try:
    import Dacapo
    print 'Found Dacapo python modules'
except:
    print '*** No Dacapo modules found, did you install them?'
    print '    Get them at dcwww.fysik.dtu.dk/campos'

try:
    import Gnuplot
    print 'Found Gnuplot python module'
except:
    print '*** No Gnuplot module found'

try:
    import matplotlib
    print 'Found matplotlib version: ',matplotlib.__version__
except:
    print 'no matplotlib found'

libs = ['cblas',
        'lapack',
        'f77blas',
        'atlas',
        'fftw',
        'netcdf',
        'lamf77mpi']

libpaths = ['/lib',
            '/usr/lib',
            '/usr/local/lib',
            os.path.join(os.environ['HOME'],'lib'),
            ]

if 'LD_LIBRARY_PATH' in os.environ:
    for libpath in os.environ['LD_LIBRARY_PATH'].split(':'):
        libpaths.append(libpath)

print
print '------------------ libraries ------------------'
for lib in libs:
    found = False
    for path in libpaths:
        if os.path.exists(os.path.join(path,'lib%s.a' % lib)):
            found = True
            print 'found %s in %s' % ('lib%s.a' % lib,path)
    if not found:
        print '***  Could not find lib%s.a' % lib




def IsOnPath(file):
    if os.path.isabs(file):
        if os.path.exists(file):
            return file
        else:
            return False
    else:
        path = string.split(os.environ['PATH'],':')
        for dir in path:
            if os.path.isdir(dir):
                if file in os.listdir(dir):
                    return os.path.join(dir,file)
    return False

def FileIsExecutable(file):
    if file is not None:
        return os.access(file,os.X_OK)
    else:
        return False



print
print '------------------- compilers -----------------'
c = ['pgf90','pgf77',
     'ifort','ifc',
     'g95',
     'gcc','g77','f77', 'f90',
     'mpif77','mpf90',
     'xlf_r','xlf90_r','mpxlf_r'
     ]
for compiler in c:
    if IsOnPath(compiler):
        print '%s  found' % compiler
    else:
        print '*** %s not found' % compiler


    
print
print '-------------- Check for ASE and Dacapo tools -------------'
dacapo_tools = ['dacapo.run',
                'stripnetcdf'
                ]

for exe in dacapo_tools:
    f = IsOnPath(exe)
    if f:
        if FileIsExecutable(f):
            print '%s found at %s' % (exe,f)
        else:
            print '%s found, but it is not executable' % exe
            
    else:
        print '%s not found' % exe
        print 'Dacapo/Tools is not on your executable path'
        

ase_executables = ['plottrajectory']

for exe in ase_executables:
    f = IsOnPath(exe)
    if f:
        if FileIsExecutable(f):
            print '%s found at %s' % (exe,f)
        else:
            print '%s found, but it is not executable' % exe
            
    else:
        print '*** %s not found' % exe
        print 'ASE/Tools is not on your executable path'



print
print '-------- Location of dacapo executables ------------'
        
exe = os.environ.get('DACAPOEXE_SERIAL',None)
f = IsOnPath(exe)
if f:
    if FileIsExecutable(f):
        print 'default serial executable is: %s' % (exe)
    else:
        print '%s found, but it is not executable' % exe

else:
    print '*** %s not found' % exe
    print 'No default serial dacapo executable found'
        
exe = os.environ.get('DACAPOEXE_PARALLEL',None)
f = IsOnPath(exe)
if f:
    if FileIsExecutable(f):
        print 'default parallel executable is: %s' % (exe)
    else:
        print '%s found, but it is not executable' % exe

else:
    print '*** %s not found' % exe
    print 'No default parallel dacapo executable found'


psp = os.environ.get('DACAPOPATH',None)
if os.path.isdir(psp):
    print 'Pseudopotential database = ',psp
else:
    print '*** "%s" is not a directory, please check  $DACAPOPATH'


print
print '-----------miscellaneous utilities-------------'
for exe in ['rasmol','gnuplot','vmd','vtk',
            'rsync','ssh','scp']:
    f = IsOnPath(exe)
    if f:
        if FileIsExecutable(f):
            print '%s found at %s' % (exe,f)
        else:
            print '%s found, but it is not executable' % exe
            
    else:
        print '*** %s not found on your path' % exe
        

print
print '--------------- mpi ------------------'
for exe in ['recon','lamboot','mpirun','lamhalt']:
    f = IsOnPath(exe)
    if f:
        if FileIsExecutable(f):
            print '%s found at %s' % (exe,f)
        else:
            print '%s found, but it is not executable' % exe
            
    else:
        print '*** %s not found' % exe
        print 'maybe you do not have lam-mpi installed'




print
print '---------- PYTHON environment variables -------------'
print 'PYTHONSTARTUP = ',os.environ.get('PYTHONSTARTUP')
print 'PYTHONOPTIMIZE = ',os.environ.get('PYTHONOPTIMIZE')
print 'PYTHONPATH:'
for x in sys.path:
    print '"%s"' % x


print
print '----------- system path --------------------'
path = os.environ.get('PATH')
for x in  string.split(path,':'):
    print '"%s"'  % x
