# -*- python -*-

Import('env')
import os
import sys
from SconsTests import utils

if env['nowx']:
	files = ['MainNoGUI.cpp']
else:
	files = [
		'AboutDolphin.cpp',
		'ARCodeAddEdit.cpp',
		'GeckoCodeDiag.cpp',
		'ConfigMain.cpp',
		'Frame.cpp',
		'FrameAui.cpp',
		'FrameTools.cpp',
		'LogWindow.cpp',
		'LogConfigWindow.cpp',
		'GameListCtrl.cpp',
		'HotkeyDlg.cpp',
		'InputConfigDiag.cpp',
		'InputConfigDiagBitmaps.cpp',
		'ISOFile.cpp',
		'ISOProperties.cpp',
		'PatchAddEdit.cpp',
		'PHackSettings.cpp',
		'CheatsWindow.cpp',
		'Main.cpp',
		'MemcardManager.cpp',
		'MemoryCards/GCMemcard.cpp',
		'MemoryCards/WiiSaveCrypted.cpp',
		'NetWindow.cpp',
		'UDPConfigDiag.cpp',
		'WiimoteConfigDiag.cpp',
		'WXInputBase.cpp',
		'WxUtils.cpp',
		'Debugger/BreakpointDlg.cpp',
		'Debugger/BreakpointView.cpp',
		'Debugger/BreakpointWindow.cpp',
		'Debugger/CodeView.cpp',
		'Debugger/CodeWindow.cpp',
		'Debugger/CodeWindowFunctions.cpp',
		'Debugger/DebuggerPanel.cpp',
		'Debugger/DebuggerUIUtil.cpp',
		'Debugger/DSPDebugWindow.cpp',
		'Debugger/DSPRegisterView.cpp',
		'Debugger/JitWindow.cpp',
		'Debugger/MemoryCheckDlg.cpp',
		'Debugger/MemoryView.cpp',
		'Debugger/MemoryWindow.cpp',
		'Debugger/RegisterView.cpp',
		'Debugger/RegisterWindow.cpp',
		'VideoConfigDiag.cpp',
		]

if sys.platform == 'win32':
	files += ["stdafx.cpp"]
elif sys.platform == 'darwin':
	env['CPPPATH'] += ['#Externals']
	env['FRAMEWORKPATH'] += ['Externals/Cg']
	env['FRAMEWORKS'] += ['ApplicationServices', 'Carbon', 'Cocoa']
	env['FRAMEWORKS'] += ['AudioUnit', 'IOBluetooth', 'IOKit', 'OpenGL']
	env['FRAMEWORKSFLAGS'] = ['-Wl,-weak_framework,Cg']
	env['FRAMEWORKSFLAGS'] += ['-Wl,-weak_framework,OpenCL']
	env['LIBS'] += ['iconv', 'z']

	# XXX
	env['FRAMEWORKSFLAGS'] += ['-Wl,-weak_framework,QuickTime']
	env['FRAMEWORKSFLAGS'] += ['-Wl,-no_arch_warnings']

	exe = '#' + env['prefix'] + '/Dolphin.app/Contents/MacOS/Dolphin'
	if env['nowx']:
		exe += 'NoGUI'

	env.Install('#' + env['prefix'] + '/Dolphin.app/Contents/' +
		'Frameworks/Cg.framework', source = [
		'#Externals/Cg/Cg.framework/Cg',
		'#Externals/Cg/Cg.framework/Resources'
		])

	env.Install(env['data_dir'], '#Data/Sys')
	env.Install(env['data_dir'], '#Data/User')
	env.Install(env['data_dir'],
		'#Source/Core/DolphinWX/resources/Dolphin.icns')

	languages = [] 
	msgfmt = env.WhereIs('msgfmt')
	if not msgfmt == None:
		po_files = Glob('#Languages/*.po', strings = True)
		for po in po_files:
			index_lo = po.find('Languages/') + len('Languages/')
			index_hi = po.find('.po')
			lang = po[index_lo:index_hi]
			lproj = os.sep + lang + '.lproj'
			mo_dir = env['build_dir'] + '/Languages' + lproj
			mo_file = mo_dir + '/dolphin-emu.mo'
			env.Command('#' + mo_file, po, 'mkdir -p ' + mo_dir +
				' && ' + msgfmt + ' -o ' + mo_file + ' ' + po)
			env.Install(env['data_dir'] + lproj, '#' + mo_file)
			languages += [lang]

	from plistlib import writePlist
	def createPlist(target, source, env):
		for srcNode in source:
			writePlist(srcNode.value, str(target[0]))
	env.Append(BUILDERS = {'Plist' : Builder(action = createPlist)})
	env.Plist('#' + env['prefix'] + '/Dolphin.app/Contents/Info.plist',
		Value(dict(
		CFBundleExecutable = 'Dolphin',
		CFBundleIconFile = 'Dolphin.icns',
		CFBundleIdentifier = 'com.dolphin-emulator.dolphin',
		CFBundleLocalizations = languages,
		CFBundlePackageType = 'APPL',
		CFBundleShortVersionString =
			utils.GenerateRevFile('', Dir('#None').abspath, None),
		CFBundleVersion = '3.0',
		LSMinimumSystemVersion = '10.5.4',
		LSRequiresCarbon = True,
		CFBundleDocumentTypes = [
			dict(CFBundleTypeExtensions =
			('ciso', 'dol', 'elf', 'gcm', 'gcz', 'iso', 'wad'),
			CFBundleTypeIconFile = 'Dolphin.icns',
			CFBundleTypeName = 'Nintendo GC/Wii file',
			CFBundleTypeRole = 'Viewer')]
		)))

else:
	files += ['X11Utils.cpp']
	exe = env['binary_dir'] + '/dolphin-emu'
	if env['nowx']:
		exe += '-nogui'
	env.InstallAs(env['data_dir'] + '/sys', '#Data/Sys')
	env.InstallAs(env['data_dir'] + '/user', '#Data/User')

env.Command('dummy', '#' + env['prefix'],
	"find $SOURCES -name .svn -exec rm -rf {} +")

env.Program(exe, files)
