if (APPLE)
	set(BINARY_NAME WengoPhone)
else (APPLE)
	set(BINARY_NAME qtwengophone)
endif (APPLE)
ow_create_executable(${BINARY_NAME})

subdirs(
	pics/emoticons
	webpages
	lang
)

ow_use_private_libraries(
	owphone
	owbuildid
	owqtutil
	owpixertool
	owwebcam
	owidle
	owtrayicon
	owbrowser
	owsoftupdater
)

if (MSVC OR LINUX)
	ow_use_private_libraries(
		owmemorydump
		)
endif (MSVC OR LINUX)

if (SIPWRAPPER_BACKEND_SIPX)
	ow_add_private_definitions(
		-DSIPXWRAPPER
	)

	ow_use_private_libraries(
		sipxwrapper
	)
else (SIPWRAPPER_BACKEND_SIPX)
if (SIPWRAPPER_BACKEND_PHAPI)
	ow_add_private_definitions(
		-DPHAPIWRAPPER
	)

	ow_use_private_libraries(
		owphapiwrapper
	)
else (SIPWRAPPER_BACKEND_PHAPI)
if (IMWRAPPER_BACKEND_MULTI)
	ow_add_private_definitions(
		-DMULTIIMWRAPPER
	)

	ow_use_private_libraries(
		owmultiimwrapper
	)
endif (IMWRAPPER_BACKEND_MULTI)
endif (SIPWRAPPER_BACKEND_PHAPI)
endif (SIPWRAPPER_BACKEND_SIPX)

ow_add_private_include_dirs(
	${CMAKE_CURRENT_BINARY_DIR}
	${CMAKE_CURRENT_SOURCE_DIR}
)

qt4_wrap_cpp(${PROJECT_NAME}_SRCS
	QtWengoPhone.h
	QtConfigPanel.h
	QtDialpad.h
	QtSVGDialpad.h
	QtHttpProxyLogin.h
	QtIdle.h
	QtLanguage.h
	QtToolBar.h
	QtSystray.h
	QtFactory.h
	QtPresenceMenuManager.h
	QtBrowserWidget.h
	QtIMAccountMonitor.h
	QtNoWengoAlert.h

	phoneline/QtPhoneLine.h

	phonecall/QtPhoneCall.h
	phonecall/QtVideoQt.h
	phonecall/QtContactCallListWidget.h
	phonecall/QtPhoneCallEventFilter.h
	phonecall/QtAudioSmileysWindow.h

	toaster/QtChatToaster.h
	toaster/QtCallToaster.h
	toaster/QtToaster.h

	login/ILogin.h
	login/QtLoginDialog.h
	login/QtLogAccount.h
	login/QtAddAccount.h
	login/QtAddWengoAccount.h
	login/QtAddSIPAccount.h

	profile/QtProfileDetails.h
	profile/QtUserProfile.h
	profile/QtUserProfileHandler.h

	imcontact/QtAdvancedIMContactManager.h
	imcontact/QtAddIMContact.h
	imcontact/QtSimpleIMContactManager.h
	imcontact/QtIMContactManagerInterface.h

	imaccount/QtIMAccountManager.h
	imaccount/QtIMAccountSettings.h
	imaccount/QtIMAccountPlugin.h
	imaccount/QtMSNSettings.h
	imaccount/QtYahooSettings.h
	imaccount/QtAIMSettings.h
	imaccount/QtICQSettings.h
	imaccount/QtJabberSettings.h
	imaccount/QtGoogleTalkSettings.h

	contactlist/QtContactList.h
	contactlist/ContactGroupPopupMenu.h
	contactlist/QtContactWidget.h
	contactlist/QtContactTreeMouseFilter.h
	contactlist/QtContactManager.h
	contactlist/QtContact.h
	contactlist/QtTreeViewDelegate.h
	contactlist/QtContactTreeKeyFilter.h
	contactlist/QtRenameGroup.h
	contactlist/QtConferenceAction.h

	conference/QtConferenceCallWidget.h

	chat/emoticons/QtEmoticonsWidget.h
	chat/emoticons/QtEmoticonButton.h
	chat/chatroom/QtChatRoomInviteDlg.h
	chat/QtChatTabWidget.h
	chat/QtChatAvatarFrame.h
	chat/QtChatAvatarWidget.h
	chat/QtChatHandler.h
	chat/QtChatWidget.h
	chat/QtChatWindow.h
	chat/QtChatEditWidget.h
	chat/QtChatHistoryWidget.h
	chat/QtWengoStyleBar.h
	chat/QtChatLogViewer.h

	webservices/sms/QtSms.h
	webservices/softupdate/QtSoftUpdate.h
	webservices/softupdate/QtBrowserSoftUpdate.h

	callbar/QtCallBar.h
	callbar/QtPhoneComboBox.h

	statusbar/QtStatusBar.h

	config/QtAdvancedConfig.h
	config/QtAccountSettings.h
	config/QtAdvancedSettings.h
	config/QtAudioSettings.h
	config/QtCallForwardSettings.h
	config/QtGeneralSettings.h
	config/QtNotificationSettings.h
	config/QtPrivacySettings.h
	config/QtVideoSettings.h
	config/QtLanguagesSettings.h
	config/QtWengoConfigDialog.h
	config/QtVoicemailSettings.h
	config/QtSecuritySettings.h

	profilebar/QtEventWidget.h
	profilebar/QtIMProfileWidget.h
	profilebar/QtProfileBar.h
	profilebar/QtCreditWidget.h
	profilebar/QtIMAccountPresenceMenuManager.h

	history/QtHistoryWidget.h
	history/QtHistory.h

	filetransfer/QtFileTransfer.h
	filetransfer/QtFileTransferAcceptDialog.h
	filetransfer/QtFileTransferWidget.h
	filetransfer/QtFileTransferItem.h
	filetransfer/QtFileTransferDownloadItem.h
	filetransfer/QtFileTransferUploadItem.h
	filetransfer/QtFileTransferNotifyDialog.h

	webdirectory/QtWebDirectory.h
)

ow_add_sources(
	../main.cpp
	QtWengoPhone.cpp
	QtConfigPanel.cpp
	QtDialpad.cpp
	QtSVGDialpad.cpp
	QtAbout.cpp
	QtHttpProxyLogin.cpp
	QtIdle.cpp
	QtEnumIMProtocol.cpp
	QtLanguage.cpp
	QtToolBar.cpp
	QtSystray.cpp
	QtFactory.cpp
	QtPresenceMenuManager.cpp
	QtWengoStyle.cpp
	QtBrowserWidget.cpp
	QtIMAccountMonitor.cpp
	QtPresencePixmapHelper.cpp
	QtIMAccountHelper.cpp
	QtNoWengoAlert.cpp

	phoneline/QtPhoneLine.cpp

	phonecall/QtPhoneCall.cpp
	phonecall/QtVideo.cpp
	phonecall/QtVideoQt.cpp
	phonecall/QtContactCallListWidget.cpp
	phonecall/QtPhoneCallEventFilter.cpp
	phonecall/QtAudioSmileysWindow.cpp

	toaster/QtChatToaster.cpp
	toaster/QtCallToaster.cpp
	toaster/QtToaster.cpp

	login/ILogin.cpp
	login/QtLoginDialog.cpp
	login/QtLogAccount.cpp
	login/QtAddAccount.cpp
	login/QtAddWengoAccount.cpp
	login/QtAddSIPAccount.cpp

	imcontact/QtAdvancedIMContactManager.cpp
	imcontact/QtAddIMContact.cpp
	imcontact/QtIMContactItem.cpp
	imcontact/QtSimpleIMContactManager.cpp
	imcontact/QtIMContactManagerInterface.cpp

	profile/QtProfileDetails.cpp
	profile/QtUserProfile.cpp
	profile/QtUserProfileHandler.cpp

	imaccount/QtIMAccountItem.cpp
	imaccount/QtIMAccountManager.cpp
	imaccount/QtIMAccountSettings.cpp
	imaccount/QtIMAccountPlugin.cpp
	imaccount/QtMSNSettings.cpp
	imaccount/QtYahooSettings.cpp
	imaccount/QtAIMSettings.cpp
	imaccount/QtICQSettings.cpp
	imaccount/QtJabberSettings.cpp
	imaccount/QtGoogleTalkSettings.cpp

	wenbox/QtWenboxPlugin.cpp

	contactlist/QtContactList.cpp
	contactlist/ContactGroupPopupMenu.cpp
	contactlist/QtContactWidget.cpp
	contactlist/QtContactTreeMouseFilter.cpp
	contactlist/QtContactManager.cpp
	contactlist/QtContactListManager.cpp
	contactlist/QtContact.cpp
	contactlist/QtTreeViewDelegate.cpp
	contactlist/QtContactPixmap.cpp
	contactlist/QtContactInfo.cpp
	contactlist/QtContactTreeKeyFilter.cpp
	contactlist/QtRenameGroup.cpp
	contactlist/QtConferenceAction.cpp
	contactlist/QtContactMenu.cpp

	conference/QtConferenceCallWidget.cpp

	chat/emoticons/QtEmoticonsWidget.cpp
	chat/emoticons/QtEmoticon.cpp
	chat/emoticons/QtEmoticonButton.cpp
	chat/emoticons/QtEmoticonsManager.cpp
	chat/chatroom/QtChatRoomInviteDlg.cpp
	chat/chatroom/QtChatRoomTreeWidgetItem.cpp
	chat/chatroom/QtChatRoomListWidgetItem.cpp
	chat/QtChatTabWidget.cpp
	chat/QtChatAvatarFrame.cpp
	chat/QtChatAvatarWidget.cpp
	chat/QtChatHandler.cpp
	chat/QtChatWidget.cpp
	chat/QtChatWindow.cpp
	chat/QtChatEditWidget.cpp
	chat/QtChatHistoryWidget.cpp
	chat/QtWengoStyleBar.cpp
	chat/QtChatUtils.cpp
	chat/QtChatLogViewer.cpp

	webservices/sms/QtSms.cpp
	webservices/softupdate/QtSoftUpdate.cpp
	webservices/softupdate/QtBrowserSoftUpdate.cpp

	callbar/QtCallBar.cpp
	callbar/QtPhoneComboBox.cpp

	statusbar/QtStatusBar.cpp

	config/QtAdvancedConfig.cpp
	config/QtAccountSettings.cpp
	config/QtAdvancedSettings.cpp
	config/QtAudioSettings.cpp
	config/QtCallForwardSettings.cpp
	config/QtGeneralSettings.cpp
	config/QtNotificationSettings.cpp
	config/QtPrivacySettings.cpp
	config/QtVideoSettings.cpp
	config/QtLanguagesSettings.cpp
	config/QtWengoConfigDialog.cpp
	config/QtVoicemailSettings.cpp
	config/QtSecuritySettings.cpp

	profilebar/QtEventWidget.cpp
	profilebar/QtIMProfileWidget.cpp
	profilebar/QtCreditWidget.cpp
	profilebar/QtProfileBar.cpp
	profilebar/QtIMAccountPresenceMenuManager.cpp

	history/QtHistoryWidget.cpp
	history/QtHistoryItem.cpp
	history/QtHistory.cpp

	filetransfer/QtFileTransfer.cpp
	filetransfer/QtFileTransferAcceptDialog.cpp
	filetransfer/QtFileTransferWidget.cpp
	filetransfer/QtFileTransferItem.cpp
	filetransfer/QtFileTransferDownloadItem.cpp
	filetransfer/QtFileTransferUploadItem.cpp
	filetransfer/QtFileTransferNotifyDialog.cpp

	webdirectory/QtWebDirectory.cpp
)

if (WIN32)
	qt4_wrap_cpp(${PROJECT_NAME}_SRCS
		WinApp.h
	)
	ow_add_sources(
		win32/wengophone.rc
		WinApp.cpp
	)
	ow_add_private_libraries(
		qtmain.lib
	)
endif (WIN32)

if (UNIX AND NOT WIN32)
	if (APPLE)
		set_source_files_properties(macosx/QtMacApplication.cpp
			PROPERTIES
				COMPILE_FLAGS "-x objective-c++"
		)

		qt4_wrap_cpp(${PROJECT_NAME}_SRCS
			chat/QtCloseChatTabWidget.h
			macosx/QtMacApplication.h
		)

		ow_add_sources(
			chat/QtCloseChatTabWidget.cpp
			macosx/QtMacApplication.cpp
		)
	else (APPLE)
		if (WENGOPHONE_XV_SUPPORT)
			if (X11_XV_FOUND)
				ow_use_private_libraries(
					x11
				)

				ow_add_private_definitions(
					-DXV_HWACCEL
				)

				qt4_wrap_cpp(${PROJECT_NAME}_SRCS
					phonecall/XVWindow.h
					phonecall/QtVideoXV.h
				)

				ow_add_sources(
					phonecall/XVWindow.cpp
					phonecall/QtVideoXV.cpp
				)
			endif (X11_XV_FOUND)
		endif (WENGOPHONE_XV_SUPPORT)
	endif (APPLE)
endif (UNIX AND NOT WIN32)

qt4_wrap_ui(${PROJECT_NAME}_SRCS
	WengoPhoneWindow.ui
	WengoPhoneWindowConfigPanel.ui
	AboutWindow.ui
	HttpProxyLoginWindow.ui
	DialpadWidget.ui
	NoWengoAlert.ui

	login/LogAccount.ui
	login/AddAccount.ui
	login/AddWengoAccount.ui
	login/AddSIPAccount.ui

	imaccount/IMAccountTemplate.ui
	imaccount/AIMSettings.ui
	imaccount/ICQSettings.ui
	imaccount/GoogleTalkSettings.ui
	imaccount/IMAccountManager.ui
	imaccount/JabberSettings.ui
	imaccount/MSNSettings.ui
	imaccount/YahooSettings.ui

	profile/ProfileDetails.ui

	imcontact/IMContactManager.ui
	imcontact/AddIMContact.ui
	imcontact/SimpleIMContactManager.ui

	webservices/sms/SmsWindow.ui
	webservices/softupdate/SoftUpdateWindow.ui
	webservices/softupdate/BrowserSoftUpdateWindow.ui

	conference/ConferenceCallWidget.ui

	config/AccountSettings.ui
	config/AdvancedConfigWindow.ui
	config/GeneralSettings.ui
	config/AdvancedSettings.ui
	config/AudioSettings.ui
	config/CallForwardSettings.ui
	config/LanguagesSettings.ui
	config/ManageBlockedUsersSettings.ui
	config/NotificationSettings.ui
	config/NotificationSettingsItem.ui
	config/PrivacySettings.ui
	config/VideoSettings.ui
	config/WengoConfigDialog.ui
	config/VoicemailSettings.ui
	config/SecuritySettings.ui


	chat/ChatMainWindow.ui
	chat/CloseChatTabWidget.ui
	chat/ChatWidget.ui
	chat/UserFrame.ui
	chat/AvatarFrame.ui
	chat/AvatarWidget.ui
	chat/ChatLogViewer.ui

	chat/chatroom/ChatRoomInviteWidget.ui

	contactlist/RenameGroupDialog.ui
	contactlist/ContactWidget.ui
	contactlist/ContactList.ui

	profilebar/CreditWidget.ui
	profilebar/EventWidget.ui
	profilebar/IMProfileWidget.ui

	toaster/QtChatToaster.ui
	toaster/QtCallToaster.ui

	phonecall/PhoneCallWidget.ui
	phonecall/VideoWindow.ui

	filetransfer/AcceptDialog.ui
	filetransfer/FileTransferDialog.ui
	filetransfer/FileTransferItem.ui
	filetransfer/NotifyDialog.ui

	history/HistoryWidget.ui

	statusbar/StatusBarWidget.ui
)

qt4_add_resources(${PROJECT_NAME}_SRCS
	wengophone.qrc
)

if (APPLE)
	ow_use_private_frameworks(
		Cocoa
		Carbon
	)

	ow_use_private_libraries(
		glib2 #comes from gaimimwrapper <- gaim
	)
endif (APPLE)

if (LINUX)
	# Define QT_TRANSLATION_DIR, this is used on Linux to load Qt translations
	EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE}
		ARGS "-query QT_INSTALL_PREFIX"
		OUTPUT_VARIABLE QT_INSTALL_PREFIX)
	ow_add_private_definitions(
		-DQT_TRANSLATION_DIR='"${QT_INSTALL_PREFIX}/translations"'
	)
endif (LINUX)

ow_create_binary(MACOSX_BUNDLE)

ow_locale_release(
	${CMAKE_CURRENT_SOURCE_DIR}/lang
)

add_dependencies(${BINARY_NAME} lrelease)

# Bugfix, spaces don't work with install target
string(REPLACE " " "CMAKEBUGWITHSPACES" TMP_BUILD_DIR ${BUILD_DIR})
string(REPLACE " " "CMAKEBUGWITHSPACES" TMP_SOURCE_DIR ${CMAKE_SOURCE_DIR})

# Passes variables to the install script
install(
	CODE "
	set(SOURCE_DIR ${TMP_SOURCE_DIR})
	set(APPLICATION_NAME ${APPLICATION_NAME})
	set(APPLICATION_VERSION ${APPLICATION_VERSION})
	set(BUILD_DIR ${TMP_BUILD_DIR})
	set(BUILD_TYPE ${CMAKE_BUILD_TYPE})
	set(DATA_INSTALL_DIR ${DATA_INSTALL_DIR})
	set(INSTALLER_WITH_PDB ${INSTALLER_WITH_PDB})
	set(SVN_REVISION ${SVN_REVISION})
	"
)

if (APPLE)
	install(SCRIPT CMakeLists-install-macosx.txt)
endif (APPLE)

if (LINUX)
	include(CMakeLists-install-linux.txt)
endif (LINUX)

if (WIN32)
	# NSIS installer script
	install(SCRIPT ../../../nsis/CMakeLists.txt)
endif (WIN32)


# zip target: zip ${BUILD_DIR}
if (LINUX)
	if (NOT OWSOUND_PORTAUDIO_SUPPORT)
		set(ZIP_EXTRA "-alsa")
	endif (NOT OWSOUND_PORTAUDIO_SUPPORT)
endif (LINUX)

string(TOLOWER ${CMAKE_BUILD_TYPE} BUILD_TYPE)
set(ZIP_NAME
	${CMAKE_BINARY_DIR}/${APPLICATION_NAME}-${APPLICATION_VERSION}-${BUILD_TYPE}${ZIP_EXTRA}
)

# Because BuildBot cannot handle random zip names
# Generates 2 zip: one with the -revnumber.tar.bz2 and one with -${SVN_REVISION}.tar.bz2
set(ZIP_NAME_REVNUMBER
	${CMAKE_BINARY_DIR}/${APPLICATION_NAME}-${APPLICATION_VERSION}-${BUILD_TYPE}${ZIP_EXTRA}-revnumber
)
if (NOT SVN_REVISION OR SVN_REVISION EQUAL 0)
	set(ZIP_NAME ${ZIP_NAME}-norev)
else (NOT SVN_REVISION OR SVN_REVISION EQUAL 0)
	set(ZIP_NAME ${ZIP_NAME}-${SVN_REVISION})
endif (NOT SVN_REVISION OR SVN_REVISION EQUAL 0)

set(ZIP_DIR_NAME
	${CMAKE_BINARY_DIR}/${APPLICATION_NAME}-${APPLICATION_VERSION}-${BUILD_TYPE}
)

add_custom_target(zip
	COMMAND
		"${CMAKE_COMMAND}"
		-DSOURCE_DIR="${CMAKE_SOURCE_DIR}"
		-DBUILD_DIR="${BUILD_DIR}"
		-DZIP_NAME="${ZIP_NAME}"
		-DZIP_NAME_REVNUMBER="${ZIP_NAME_REVNUMBER}"
		-DZIP_DIR_NAME="${ZIP_DIR_NAME}"
		-P "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists-zip.txt"
	WORKING_DIRECTORY
		${CMAKE_BINARY_DIR}
)
