#!/usr/bin/env python

import sys, getopt, os, traceback
import tempfile
from pyscript.version import version as versionNum

def usage():
    print """Usage:
    pyscript [options] file.py

    options:
    [-h/--help]                Print usage information and exit
    [-V/--version]             Print version information and exit
    [-o/--output=outputFile]   Specify an alternative output file name
    [-l/--logfile=logFile]     Specify an alternative log file name
    """

def version():
    print "This is pyscript version %s" % (versionNum,)
    print "For more information see http://pyscript.sourceforge.net\n"

#---------------------------------------------------------------------
# Handle options
#---------------------------------------------------------------------

try:
    opts, args = getopt.getopt(sys.argv[1:], "hVo:l:d", 
	    ["help", "version", "output=", "logfile="])
except getopt.GetoptError:
    # print help information and exit:
    usage()
    sys.exit(2)

logFile = "pyscript.log"

DEBUG=False
globals={}
for o, a in opts:
    if o in ("-h", "--help"):
        usage()
        sys.exit()
    if o in ("-V", "--version"):
	version()
	sys.exit()
    if o in ("-o", "--output"):
        globals['output']=a
    elif o in ("-l", "--logfile"):
        logFile=a
    elif o in ("-d",):
        DEBUG=True
        
if len(args) != 1:
    usage()
    sys.exit()

# print some pretty info
version()

#---------------------------------------------------------------------
# Set up log file
#---------------------------------------------------------------------

# redirect stdout and stderr to file
# keep a copy
save_err = sys.stderr

# open the log file
#tempfile.template="pyscript-"
#logFile = tempfile.mktemp(".log")

if logFile=="-":
    log=sys.stdout
else:
    log = open(logFile,"w")
    print "Log file is",logFile

sys.stderr = log

#---------------------------------------------------------------------
# look for ~/.pyscript
#---------------------------------------------------------------------

# now see about importing the defaults from .pyscript/defaults.py
HOME = os.path.expandvars("$HOME")

# if $HOME/.pyscript directory exists, append this to the python path
# this is so that user defined libs can be imported
if os.path.isdir(HOME+'/.pyscript'):
    sys.path.append(HOME+'/.pyscript')

if os.path.isfile(HOME+'/.pyscript/defaults.py'):
    # try $HOME/.pyscript/defaults.py
    execfile(HOME+'/.pyscript/defaults.py',globals)
else:
    print "No user defaults file found."

print "Executing script..."

#---------------------------------------------------------------------
# now run the script
#---------------------------------------------------------------------
try:
    execfile(args[0],globals)
except:
    divider="-"*60+'\n'

    sys.stderr.write("Exception in user code:\n")
    sys.stderr.write(divider)
    traceback.print_exc(file=sys.stderr)
    sys.stderr.write(divider)

    sys.stdout.write("Exception in user code:\n")
    sys.stdout.write(divider)
    traceback.print_exc(file=sys.stdout)
    sys.stdout.write(divider)
    print "Further clues may be found in the log file:",logFile
else:
    # clean up a bit
    sys.stderr = save_err
    if logFile!="-":
        log.close()
        if not DEBUG:
            print "Removing log file"
            os.remove(logFile)
            print "Removing temp files"
	    tempfiles = ("temp.aux", "temp.dvi", "temp.log", "temp.ps",
			"temp.tex", "temp1.aux", "temp1.dvi", "temp1.eps",
			"temp1.log", "temp1.tex")
	    for tmpfile in tempfiles:
		if os.path.exists(tmpfile):
		    os.remove(tmpfile)
    print "Done!"
    
