###
# This file is a part of the NVDA project.
# URL: http://www.nvda-project.org/
# Copyright 2006-2021 NVDA contributors.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2.0, as published by
# the Free Software Foundation.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# This license can be found at:
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
###

Import(
	[
		"env",
		"ia2RPCStubs",
		"detoursLib",
		"apiHookObj",
	]
)

winIPCUtilsObj = env.Object("./winIPCUtils", "../common/winIPCUtils.cpp")

vbufBackendLibs = [
	env.SConscript("../vbufBase/sconscript"),
	env.SConscript("../vbufBackends/adobeAcrobat/sconscript"),
	env.SConscript("../vbufBackends/lotusNotesRichText/sconscript"),
	env.SConscript("../vbufBackends/gecko_ia2/sconscript"),
	env.SConscript("../vbufBackends/mshtml/sconscript"),
	env.SConscript("../vbufBackends/webKit/sconscript"),
]

controllerRPCHeader, controllerRPCClientSource = env.MSRPCStubs(
	target="./nvdaController",
	source=[
		"../interfaces/nvdaController/nvdaController.idl",
		"../interfaces/nvdaController/nvdaController.acf",
	],
	MSRPCStubs_noServer=True,
	MSRPCStubs_prefix="nvdaController_",
)

controllerInternalRPCHeader, controllerInternalRPCClientSource = env.MSRPCStubs(
	target="./nvdaControllerInternal",
	source=[
		"../interfaces/nvdaControllerInternal/nvdaControllerInternal.idl",
		"../interfaces/nvdaControllerInternal/nvdaControllerInternal.acf",
	],
	MSRPCStubs_noServer=True,
	MSRPCStubs_prefix="nvdaControllerInternal_",
)

vbufRPCHeader, vbufRPCServerSource = env.MSRPCStubs(
	target="./vbufRemote",
	source=[
		"../interfaces/vbuf/vbuf.idl",
		"../interfaces/vbuf/vbuf.acf",
	],
	MSRPCStubs_noClient=True,
	MSRPCStubs_prefix="VBufRemote_",
)

displayModelRPCHeader, displayModelRPCServerSource = env.MSRPCStubs(
	target="./displayModelRemote",
	source=[
		"../interfaces/displayModel/displayModel.idl",
		"../interfaces/displayModel/displayModel.acf",
	],
	MSRPCStubs_noClient=True,
	MSRPCStubs_prefix="displayModelRemote_",
)

nvdaInProcUtilsRPCHeader, nvdaInProcUtilsRPCServerSource = env.MSRPCStubs(
	target="./nvdaInProcUtils",
	source=[
		"../interfaces/nvdaInProcUtils/nvdaInProcUtils.idl",
		"../interfaces/nvdaInProcUtils/nvdaInProcUtils.acf",
	],
	MSRPCStubs_noClient=True,
	MSRPCStubs_prefix="nvdaInProcUtils_",
)

ia2utilsObj = env.Object("./ia2utils", "../common/ia2utils.cpp")

source = [
	env["projectResFile"],
	"injection.cpp",
	"log.cpp",
	"inProcess.cpp",
	apiHookObj,
	"inputLangChange.cpp",
	"typedCharacter.cpp",
	"ime.cpp",
	"tsf.cpp",
	"COMProxyRegistration.cpp",
	"ia2Support.cpp",
	"ia2LiveRegions.cpp",
	"textFromIAccessible.cpp",
	ia2utilsObj,
	env.Object("_ia2_i", ia2RPCStubs[3]),
	"rpcSrv.cpp",
	"vbufRemote.cpp",
	vbufRPCServerSource,
	winIPCUtilsObj,
	controllerRPCClientSource,
	"nvdaController.cpp",
	controllerInternalRPCClientSource,
	"sysListView32.cpp",
	"winword.cpp",
	"WinWord/Fields.cpp",
	"outlook.cpp",
	"excel.cpp",
	nvdaInProcUtilsRPCServerSource,
	"gdiHooks.cpp",
	"displayModel.cpp",
	"displayModelRemote.cpp",
	displayModelRPCServerSource,
	"nvdaHelperRemote.def",
	vbufBackendLibs,
]

libs = [
	"user32",
	"ole32",
	"rpcrt4",
	"shlwapi",
	"oleaut32",
	"oleacc",
	"usp10",
	"imm32",
	"advapi32",
	"version",
	"DbgHelp",
	"gdi32",
	detoursLib,
]

remoteLib = env.SharedLibrary(
	target="nvdaHelperRemote",
	source=source,
	LIBS=libs,
)

Return("remoteLib")
