#!/usr/bin/python

import sys, os

# Python passed my path as argv[0]!
# if sys.argv[0][-7:] == "syslogd":
if sys.argv[1] == "--syslogd":
    from syslogd import Syslogd
    root = sys.argv[2]
    output = sys.argv[3]
    syslog = Syslogd (root, open (output, "w+"))

import gettext
import traceback
import string

if (os.path.exists('isys')):
    sys.path.append('isys')

import isys
import iutil

setverPath = None

gettext.bindtextdomain("anaconda", "/usr/share/locale")
gettext.textdomain("anaconda")
_ = gettext.gettext

(args, extra) = isys.getopt(sys.argv[1:], 'GTtdr:fm:', 
          [ 'gui', 'text', 'test', 'debug', 'method=', 'rootpath=',
	    'testpath=', 'mountfs', 'traceonly', 'kickstart=',
            'lang=', 'keymap=', 'kbdtype=', 'module=',
	    'expert'])

# remove the arguments - gnome_init doesn't understand them
for arg in sys.argv[1:]:
    sys.argv.remove (arg)
sys.argc = 1

mode = None
test = 0
debug = 0
rootPath = '/mnt/sysimage'
localInstall = 0
forceMount = 0
mode = 'g'
method = None
traceOnly = 0
mouseInfo = None
x = None
kickstart = None
expert = 0
lang = None
keymap = None
kbdtpye = None
extraModules = []
fermimethod = None

for n in args:
    (str, arg) = n

    if (str == '-G' or str == '--gui'):
	mode = 'g'
    elif (str == '-T' or str == '--text'):
	mode = 't'
    elif (str == '-t' or str == '--test'):
	test = 1
    elif (str == '--module'):
	(path, subdir, name) = string.split(arg, ":")
	extraModules.append((path, subdir, name))
    elif (str == '-m' or str == '--method'):
	method = arg
    elif (str == '-d' or str == '--debug'):
	debug = 1
    elif (str == '--kickstart'):
	kickstart = arg
	mode = 't'
    elif (str == '-r' or str == '--rootpath'):
	rootPath = arg
	localInstall = 1
    elif (str == '--mountfs'):
	forceMount = 1
    elif (str == '--traceonly'):
	traceOnly = 1
    elif (str == '--expert'):
	expert = 1
    elif (str == '--lang'):
        lang = arg
    elif (str == '--keymap'):
        keymap = arg
    elif (str == '--kbdtype'):
        kbdtype = arg

if (not method):
    print "no install method specified"
    sys.exit(1)

if (debug):
    import pdb
    pdb.set_trace()

if (not test and not localInstall and os.getpid() > 50):
    print "you're running me on a live system! that's incredibly stupid."
    sys.exit(1)

if (os.path.exists('rpmmodule')):
    sys.path.append('rpmmodule')
    sys.path.append('libfdisk')
    sys.path.append('balkan')
    sys.path.append('kudzu')
    sys.path.append('gnome-map')
#elif (mode == None):
#      try:
#          f = open('/dev/fb0', 'r')
#  	f.close()
#  	mode = 'g'
#      except:
#  	mode = 't'

import rpm
import lilo
from todo import ToDo
import isys
from installclass import DefaultInstall
from kickstart import Kickstart

if (not test):
    if (iutil.memInstalled() < 30000):
	mode = 't'

if (mode == 'g' and not os.environ.has_key('DISPLAY')):
    import xserver
    try:
        result = xserver.startX ()
    except RuntimeError:
	print "X startup failed, falling back to text mode"
        mode = 't'
    else:
        (mouseInfo, x) = (result)

if (mode == 'g'):
    if not test and not localInstall:
        for i in ( "imrc", "im_palette.pal", "gtk" ):
            os.symlink ("../mnt/source/RedHat/instimage/etc/" + i, "/etc/" + i)
    from gui import InstallInterface
elif (mode == 't'):
    from text import InstallInterface
else:
    print "No mode was specified"
    sys.exit(1)

if traceOnly:
    # prints a list of all the modules imported
    import pdb
    import image
    import harddrive
    import urlinstall
    import mimetools
    import mimetypes
    import syslogd
    for module in sys.__dict__['modules'].keys ():
        if module not in [ "__builtin__", "__main__" ]:
            foo = repr (sys.__dict__['modules'][module])
            bar = string.split (foo, "'")
            if len (bar) > 3:
                print bar[3]
        
    sys.exit(0)

# imports after setting up the path
if (method[0:5] == "dir:/"):
    from image import InstallMethod
    from fermiimage import fermiFile
    fermimethod = fermiFile(method[5:])
    method = InstallMethod(method[5:])
elif (method[0:6] == "ftp://" or method[0:7] == "http://"):
    from urlinstall import InstallMethod
    from fermiurl import fermiFile
    fermimethod = fermiFile(method)
    method = InstallMethod(method)
elif (method[0:5] == "hd://"):
    method = method[5:]
    i = string.index(method, '/')
    dir = method[i:]
    driveAndType = method[0:i]

    i = string.index(driveAndType, ":")
    drive = driveAndType[0:i]
    type = driveAndType[i + 1:]

    from harddrive import InstallMethod
    method = InstallMethod(drive, type, dir)
else:
    print "unknown install method:", method
    sys.exit(1)

intf = InstallInterface()

# set the default actions
installPackages = 1
setupFilesystems = 1

if localInstall:
    installPackages = 1
    setupFilesystems = 0
if test:
    installPackages = 0
    setupFilesystems = 0
if forceMount:
    setupFilesystems = 1

if kickstart:
    instClass = Kickstart(kickstart)
else:
    instClass = DefaultInstall()

if lang:
    instClass.addToSkipList("language")
    instClass.setLanguage(lang)
            
if keymap:
    instClass.addToSkipList("keyboard")
    instClass.setKeyboard(keymap)

try:
    todo = ToDo(intf, method, rootPath, installSystem = installPackages,
                setupFilesystems = setupFilesystems, mouse = mouseInfo,
		instClass = instClass, x = x, expert = expert,
		extraModules = extraModules)
    intf.run(todo, test = test)
except:
    (type, value, tb) = sys.exc_info()
    from string import joinfields
    list = traceback.format_exception (type, value, tb)
    text = joinfields (list, "")
    rc = intf.exceptionWindow (_("Exception Occured"), text)
    intf.__del__ ()
    if rc:
        import pdb
        pdb.post_mortem (tb)
    os._exit (1)

del intf
