
import os
import sys, commands

sources = Split("""
  prefix.c
  ipdialog.cpp
  tickerdialog.cpp
  settingsdialog.cpp
  onlinealert.cpp
  aclineedit.cpp
  browser.cpp
  browsers.cpp
  ignorelist.cpp
  buddylist.cpp
  banlist.cpp
  trustlist.cpp
  chatpanel.cpp
  chatroom.cpp
  chatrooms.cpp
  chattext.cpp
  chatticker.cpp
  codeccombo.cpp
  iconlistbox.cpp
  images.cpp
  recommendsitem.cpp
  recommendsview.cpp
  interestlistview.cpp
  interestlist.cpp
  interests.cpp
  mainwin.cpp
  museeq.cpp
  marquee.cpp
  museekdriver.cpp
  privatechat.cpp
  privatechats.cpp
  roomlist.cpp
  roomlistitem.cpp
  roomlistview.cpp
  search.cpp
  searches.cpp
  searchfilter.cpp
  searchlistview.cpp
  slskdrag.cpp
  tabwidget.cpp
  transferlistitem.cpp
  transferlistview.cpp
  transfers.cpp
  userinfo.cpp
  userinfos.cpp
  userlistitem.cpp
  userlistview.cpp
  usermenu.cpp
  usertabwidget.cpp
  util.cpp
  trayicon.cpp
  connect.cpp
""")


all_images = Split("""
  away.png
  away-buddied.png
  away-banned.png
  away-trusted.png
  away-ignored.png
  connect.png
  disconnect.png
  help.png
  colors.png
  settings.png
  exit.png
  protocol.png
  privileges.png
  ip.png
  refresh.png
  alert.png
  comments.png
  browser.png
  browser-small.png
  chatroom.png
  chatroom-small.png
  privatechat.png
  privatechat-small.png
  search.png
  search-small.png
  transfer.png
  transfer-small.png
  userinfo.png
  userinfo-small.png
  offline.png
  offline-buddied.png
  offline-banned.png
  offline-trusted.png
  offline-ignored.png
  online.png
  online-buddied.png
  online-banned.png
  online-trusted.png
  online-ignored.png
  tab_remove.png
  logo.png
  icon.png
""")
themes = ["default", "mikelabo-tri", "bluebox", "mikelabo-silk", "birdies"]
theme_lists = {}
# FIND ICONS IN THEMES
for theme in themes:
	theme_lists[theme] = []
	for icon in all_images:
		if os.path.exists("../../museeq/%s/%s" %(theme, icon) ):
			theme_lists[theme].append(theme+"/"+icon)

scripts = Split("""
  uptime.qs
  nowplaying.qs
""")
scripts = Split("""
  uptime.qs
  nowplaying.qs
""")

try:
	from relaytool import Relay
except:
	from muscons import Relay

Import('env')
QTDIR = env['QTDIR']

if not QTDIR and os.environ.has_key('QTDIR'):
    QTDIR = os.environ['QTDIR']
ts_templates= env['MUSEEQTRANSLATIONS'].split(",")
tr_dir = "translations/"
translations = []
qm_files = []

def make_qm(ts_templates):
	for lang in ts_templates:
		translations.append(lang)

make_qm(ts_templates)
lrelease = ""
if ts_templates != []:
	if os.system(QTDIR+"/bin/"+"lrelease -help 2> /dev/null") == 0:
		print "Qt translation app 'lrelease' found in",QTDIR+"/bin/" 
		lrelease = QTDIR+"/bin/"+"lrelease"
	else:
		if os.system("lrelease -help 2> /dev/null") == 0:
			print "Qt translation app 'lrelease' found in the path."
			lrelease = "lrelease"
		else:
			print "Qt translation app 'lrelease' not found in the path or QTDIR", QTDIR+"/bin/ Aborting!"
			sys.exit()
else:
	print "No Museeq translations will be built."


def translation_build(target, source, env):
 	print source[0], target[0]
	ss = ""
	for s in source:
		ss +=  str(s)+" "
	os.system(lrelease+" "+ str(ss)+" -qm "+ str(target[0]))
	
	return 0

def file_copy(target, source, env):
    open(str(target[0]), 'w').write(open(str(source[0])).read())

def noQt():
    sys.stderr.write("""
Couldn't find Qt. Make sure the QTDIR environment variable is set, or
disable building of the Qt client by adding MUSEEQ=0 to the scons
commandline.

""")
    Exit(1)



env_qt = Environment(tools = ['default', 'qt'], CC = env['CC'], CXX = env['CXX'], CCFLAGS = env['CCFLAGS'], QTDIR = QTDIR)
env_qt.SConsignFile()
env_qt.Append(ENV = {'HOME': os.environ['HOME']})
env_qt.Append(CPPPATH = env['CPPPATH'])
env_qt.Append(LIBPATH = env['LIBPATH'])
env_qt.Replace(PREFIX = env['PREFIX'])
env_qt.Replace(DATADIR = env['DATADIR'])
env_qt.Replace(BINDIR = env['BINDIR'])
env_qt.Replace(QT_LIB = env['QT_LIB'])
env_qt.Replace(QT_MOC = env['QT_MOC'])
env_qt.Replace(QT_UIC = env['QT_UIC'])


 
# Hint for building with a statically linked Qt on Linux/XFree86
#env_qt.Append(LIBS = ["Xrender", "Xrandr", "Xcursor", "Xinerama", "Xft", "freetype", "fontconfig", "X11", "m", "SM", "ICE", "dl"])

if env['BINRELOC']:
	env_qt.Append(CPPDEFINES = { "ENABLE_BINRELOC": 1 })
else:
	env_qt.Append(CPPDEFINES = { 'DATADIR': '\\"' + env['DATADIR'] + '\\"', 'PREFIX': '\\"' + env['PREFIX'] + '\\"' })

# For OSX (hopefully, this works):
if os.path.isdir("/Library/Frameworks/Qt.framework"):
    env.Append(CPPPATH = "/Library/Frameworks/Qt.framework/Headers")
    env.Append(LIBPATH = "/Library/Frameworks/Qt.framework")

mkspecs = os.path.join(env_qt['QTDIR'], 'mkspecs', os.uname()[0].lower() + '-' + env_qt['CXX'])
if os.path.isdir(mkspecs):
    env_qt.Append(CPPPATH = [mkspecs])

conf = env_qt.Configure()

have_qt = conf.CheckCXXHeader("qapplication.h")
if not have_qt:
  noQt()

sys.stdout.write("Checking Qt library...")
sys.stdout.flush()
if not conf.TryLink('#include <qapplication.h>\nint main() {};\n', ".cpp"):
    env_qt.Replace(QT_LIB = "qt-mt")
    if not conf.TryLink('#include <qapplication.h>\nint main() {};\n', ".cpp"):
      sys.stdout.write(" not found\n")
      noQt()

sys.stdout.write(" found (%s)\n" % env_qt["QT_LIB"])
if env['MUSEEQTRAYICON']:
	sys.stdout.write("Museeq's Trayicon enabled...\n")
	env_qt.Append(CPPDEFINES={'HAVE_TRAYICON' : 1})
else:
	sys.stdout.write("Museeq's Trayicon disabled...\n")
	
if env['QSA']:
    sys.stdout.write("Checking for QSA (scripting engine) 1.1 or newer...")
    sys.stdout.flush()
    LIBS = env_qt["LIBS"]
    env_qt.Append(LIBS = ['qsa'])
    if not conf.TryLink('#include <qsproject.h>\n#include <qsinterpreter.h>\nint main() { QSInterpreter::defaultInterpreter()->hasFunction(""); }\n', ".cpp"):
        env_qt.Replace(LIBS = LIBS)
        sys.stdout.write(' not found\n')
    else:
        sys.stdout.write(' found\n');
        env_qt.Append(CPPDEFINES={'HAVE_QSA' : 1})
        
        sys.stdout.write('Checking for QSA Utility Extension...')
        if not conf.TryLink('#include <qsutilfactory.h>\nint main() {};\n', ".cpp"):
            sys.stdout.write(' not found\n')
        else:
            sys.stdout.write(' found\n');
            env_qt.Append(CPPDEFINES={'HAVE_QSA_UTIL' : 1})
        
        sys.stdout.write('Checking for QSA Input Dialog Extension...')
        if not conf.TryLink('#include <qsinputdialogfactory.h>\nint main() {};\n', ".cpp"):
            sys.stdout.write(' not found\n')
        else:
            sys.stdout.write(' found\n');
            env_qt.Append(CPPDEFINES={'HAVE_QSA_DIALOG' : 1})
        
        if env['RELAY_QSA']:
           sources.extend(Relay(env_qt, 'qsa'))
else:
	print "QSA not found or disabled."

conf.Finish()

env_qt.Append(CPPPATH = '#')
env_qt.Append(LIBPATH = env['LIBPATH_MUCIPHER'])
env_qt.Append(LIBS = ['ucipher'])


for lang in translations:
	lsources = []
	mess = ""
	if os.path.exists("../../museeq/"+tr_dir+"museeq_"+lang+".ts"):
		lsources.append( tr_dir+"museeq_"+lang+".ts" )
		mess += "Museeq "+lang+" translation found... "
	else:
		mess += "Museeq "+lang+" translation NOT found! "
	if os.path.exists("../../museeq/"+tr_dir+"qt_"+lang+".ts"):
		lsources.append(tr_dir+"qt_"+lang+".ts")
		mess += "Qt "+lang+" translation found... "
	else:
		mess += "Qt "+lang+" translation NOT found!"
	if lsources == []:
		print "Neither museeq_"+lang+".ts nor qt_"+lang+".ts found. Translation skipped.."
		continue
	else:
		print mess
	env_qt.Command(tr_dir+"museeq_"+lang+".qm", lsources, translation_build)
	qm_files.append(tr_dir+"museeq_"+lang+".qm")

museeq = env_qt.Program('museeq', sources)

bin_install = env_qt.Install(env['DESTDIR'] + env['BINDIR'], [museeq])

script_install = env_qt.Install(env['DESTDIR'] + os.path.join(env_qt['DATADIR'], 'museek', 'museeq'), scripts)

translations_install = env_qt.Install(env['DESTDIR'] + os.path.join(env_qt['DATADIR'], 'museek', 'museeq', "translations"), qm_files)
manfile = ["museeq.1"]
man_install = env_qt.Install(env['DESTDIR'] + env['MANDIR'], manfile)

env.Alias('install_museeq', translations_install)

# INSTALL THEMES
for theme in theme_lists:
	if theme_lists[theme] != []:
		print "Museeq theme, %s to be installed. %d Icons" % ( theme, len(theme_lists[theme]) )
		env.Alias('install_museeq', env_qt.Install(env['DESTDIR'] + os.path.join(env_qt['DATADIR'], 'museek', 'museeq', 'icons', theme), theme_lists[theme]))


env.Alias('install_museeq', script_install)
env.Alias('install_museeq', bin_install)
env.Alias('install_museeq', man_install)

env.Alias('install', 'install_museeq')
print
