if charset == "Unicode" then
if stringmode == "WCHAR" then
  project "OpenMPT"
  mpt_projectname = "OpenMPT"
	uuid "37FC32A4-8DDC-4A9C-A30C-62989DD8ACE9"
else
  project "OpenMPT-UTF8"
  mpt_projectname = "OpenMPT-UTF8"
	uuid "e89507fa-a251-457e-9957-f6b453c77daf"
end
else
	project "OpenMPT-ANSI"
	mpt_projectname = "OpenMPT-ANSI"
	uuid "ba66db50-e2f0-4c9e-b650-0cca6c66e1c1"
end
  language "C++"
  location ( "../../build/" .. mpt_projectpathname )
  vpaths { ["*"] = "../../" }
  dofile "../../build/premake/premake-defaults-EXEGUI.lua"
  dofile "../../build/premake/premake-defaults.lua"
if stringmode == "UTF8" then
   targetname "OpenMPT-UTF8"
elseif charset == "MBCS" then
   targetname "OpenMPT-ANSI"
else
   targetname "OpenMPT"
end
  filter {}
  local extincludedirs = {
   "../../include",
   "../../include/ancient/api",
   "../../include/asiomodern/include",
   "../../include/ASIOSDK2/common",
   "../../include/flac/include",
   "../../include/lame/include",
   "../../include/lhasa/lib/public",
   "../../include/mpg123/ports/MSVC++",
   "../../include/mpg123/src/libmpg123",
   "../../include/nlohmann-json/include",
   "../../include/ogg/include",
   "../../include/opus/include",
   "../../include/opusenc/include",
   "../../include/opusfile/include",
   "../../include/portaudio/include",
   "../../include/rtaudio",
   "../../include/vorbis/include",
   "../../include/zlib",
  }
	filter { "action:vs*" }
		includedirs ( extincludedirs )
	filter { "not action:vs*" }
		sysincludedirs ( extincludedirs )
	filter {}
  includedirs {
   "../../src",
   "../../common",
   "../../soundlib",
   "$(IntDir)/svn_version",
   "../../build/svn_version",
  }
	if _OPTIONS["win10"] then
		files {
			"../../mptrack/res/OpenMPT-win10.manifest",
		}
	elseif  _OPTIONS["win81"] then
		files {
			"../../mptrack/res/OpenMPT-win81.manifest",
		}
	elseif  _OPTIONS["win7"] then
		files {
			"../../mptrack/res/OpenMPT-win7.manifest",
		}
	end
	if not _OPTIONS["winxp"] then
		files {
			"../../include/asiomodern/include/ASIOModern/*.hpp",
		}
	end
  files {
   "../../src/mpt/**.cpp",
   "../../src/mpt/**.hpp",
   "../../src/openmpt/**.cpp",
   "../../src/openmpt/**.hpp",
   "../../common/*.cpp",
   "../../common/*.h",
   "../../soundlib/*.cpp",
   "../../soundlib/*.h",
   "../../soundlib/plugins/*.cpp",
   "../../soundlib/plugins/*.h",
   "../../soundlib/plugins/dmo/*.cpp",
   "../../soundlib/plugins/dmo/*.h",
   "../../sounddsp/*.cpp",
   "../../sounddsp/*.h",
   "../../unarchiver/*.cpp",
   "../../unarchiver/*.h",
   "../../misc/*.cpp",
   "../../misc/*.h",
   "../../tracklib/*.cpp",
   "../../tracklib/*.h",
   "../../mptrack/*.cpp",
   "../../mptrack/*.h",
   "../../mptrack/plugins/*.cpp",
   "../../mptrack/plugins/*.h",
   "../../test/*.cpp",
   "../../test/*.h",
   "../../pluginBridge/BridgeCommon.h",
   "../../pluginBridge/BridgeWrapper.cpp",
   "../../pluginBridge/BridgeWrapper.h",
  }
  files {
   "../../mptrack/mptrack.rc",
   "../../mptrack/res/*.*", -- resource data files
  }
	if _OPTIONS["win10"] then
		excludes {
			"../../mptrack/res/OpenMPT-win7.manifest",
			"../../mptrack/res/OpenMPT-win81.manifest",
		}
	elseif  _OPTIONS["win81"] then
		excludes {
			"../../mptrack/res/OpenMPT-win7.manifest",
			"../../mptrack/res/OpenMPT-win10.manifest",
		}
	elseif  _OPTIONS["win7"] then
		excludes {
			"../../mptrack/res/OpenMPT-win81.manifest",
			"../../mptrack/res/OpenMPT-win10.manifest",
		}
	else
		excludes {
			"../../mptrack/res/OpenMPT-win7.manifest",
			"../../mptrack/res/OpenMPT-win81.manifest",
			"../../mptrack/res/OpenMPT-win10.manifest",
		}
	end

	defines { "MPT_BUILD_ENABLE_PCH" }
	pchsource "../../build/pch/PCH.cpp"
	pchheader "PCH.h"
	files {
		"../../build/pch/PCH.cpp",
		"../../build/pch/PCH.h"
	}
	includedirs {
		"../../build/pch"
	}
	forceincludes {
		"PCH.h"
	}

  defines { "MODPLUG_TRACKER" }
  dpiawareness "None"
  largeaddressaware ( true )
  characterset(charset)
if charset == "Unicode" then
else
	defines { "NO_WARN_MBCS_MFC_DEPRECATION" }
end
if stringmode == "UTF8" then
	defines { "MPT_USTRING_MODE_UTF8_FORCE" }
end
  flags { "MFC" }
	-- work-around https://developercommunity.visualstudio.com/t/link-errors-when-building-mfc-application-with-cla/1617786
	if _OPTIONS["clang"] then
		filter {}
		filter { "configurations:Debug" }
			if true then -- _AFX_NO_MFC_CONTROLS_IN_DIALOGS
				ignoredefaultlibraries { "afxnmcdd.lib" }
				links { "afxnmcdd.lib" }
			end
			if charset == "Unicode" then
				ignoredefaultlibraries { "uafxcwd.lib", "libcmtd.lib" }
				links { "uafxcwd.lib", "libcmtd.lib" }
			else
				ignoredefaultlibraries { "nafxcwd.lib", "libcmtd.lib" }
				links { "nafxcwd.lib", "libcmtd.lib" }
			end
		filter { "configurations:DebugShared" }
			if charset == "Unicode" then
				ignoredefaultlibraries { "mfc140ud.lib", "msvcrtd.lib" }
				links { "mfc140ud.lib", "msvcrtd.lib" }
			else
				ignoredefaultlibraries { "mfc140d.lib", "msvcrtd.lib" }
				links { "mfc140d.lib", "msvcrtd.lib" }
			end
		filter { "configurations:Checked" }
			if true then -- _AFX_NO_MFC_CONTROLS_IN_DIALOGS
				ignoredefaultlibraries { "afxnmcd.lib" }
				links { "afxnmcd.lib" }
			end
			if charset == "Unicode" then
				ignoredefaultlibraries { "uafxcw.lib", "libcmt.lib" }
				links { "uafxcw.lib", "libcmt.lib" }
			else
				ignoredefaultlibraries { "nafxcw.lib", "libcmt.lib" }
				links { "nafxcw.lib", "libcmt.lib" }
			end
		filter { "configurations:CheckedShared" }
			if charset == "Unicode" then
				ignoredefaultlibraries { "mfc140u.lib", "msvcrt.lib" }
				links { "mfc140u.lib", "msvcrt.lib" }
			else
				ignoredefaultlibraries { "mfc140.lib", "msvcrt.lib" }
				links { "mfc140.lib", "msvcrt.lib" }
			end
		filter { "configurations:Release" }
			if true then -- _AFX_NO_MFC_CONTROLS_IN_DIALOGS
				ignoredefaultlibraries { "afxnmcd.lib" }
				links { "afxnmcd.lib" }
			end
			if charset == "Unicode" then
				ignoredefaultlibraries { "uafxcw.lib", "libcmt.lib" }
				links { "uafxcw.lib", "libcmt.lib" }
			else
				ignoredefaultlibraries { "nafxcw.lib", "libcmt.lib" }
				links { "nafxcw.lib", "libcmt.lib" }
			end
		filter { "configurations:ReleaseShared" }
			if charset == "Unicode" then
				ignoredefaultlibraries { "mfc140u.lib", "msvcrt.lib" }
				links { "mfc140u.lib", "msvcrt.lib" }
			else
				ignoredefaultlibraries { "mfc140.lib", "msvcrt.lib" }
				links { "mfc140.lib", "msvcrt.lib" }
			end
		filter {}
	end
  warnings "Extra"
  links {
   "ancient",
   "UnRAR",
   "zlib",
   "minizip",
   "smbPitchShift",
   "lame",
   "lhasa",
   "flac",
   "mpg123",
   "ogg",
   "opus",
   "opusenc",
   "opusfile",
   "portaudio",
   "r8brain",
   "rtaudio",
   "rtmidi",
   "soundtouch",
   "vorbis",
  }
  filter {}
	if not _OPTIONS["winxp"] then
  linkoptions {
   "/DELAYLOAD:mf.dll",
   "/DELAYLOAD:mfplat.dll",
   "/DELAYLOAD:mfreadwrite.dll",
--   "/DELAYLOAD:mfuuid.dll", -- static library
   "/DELAYLOAD:propsys.dll",
  }
	end
  filter { "action:vs*" }
    files {
      "../../build/vs/debug/openmpt.natvis",
    }
  filter {}
  prebuildcommands { "..\\..\\build\\svn_version\\update_svn_version_vs_premake.cmd $(IntDir)" }

 project "OpenMPT-NativeSupport"
  uuid "563a631d-fe07-47bc-a98f-9fe5b3ebabfa"
  language "C++"
  location ( "../../build/" .. mpt_projectpathname )
  vpaths { ["*"] = "../../" }
  mpt_projectname = "OpenMPT-NativeSupport"
  dofile "../../build/premake/premake-defaults-DLL.lua"
  dofile "../../build/premake/premake-defaults.lua"
  includedirs {
   "../../src",
   "../../common",
   "../../include",
   "../../include/asiomodern/include",
   "../../include/ASIOSDK2/common",
   "../../include/nlohmann-json/include",
   "../../include/portaudio/include",
   "../../include/rtaudio",
   "$(IntDir)/svn_version",
   "../../build/svn_version",
  }
  files {
   "../../include/asiomodern/include/ASIOModern/*.hpp",
   "../../src/mpt/**.cpp",
   "../../src/mpt/**.hpp",
   "../../src/openmpt/**.cpp",
   "../../src/openmpt/**.hpp",
   "../../common/*.cpp",
   "../../common/*.h",
   "../../misc/*.cpp",
   "../../misc/*.h",
   "../../mptrack/wine/*.cpp",
   "../../mptrack/wine/*.h",
  }
  excludes {
   "../../mptrack/wine/WineWrapper.cpp",
  }
  defines { "MODPLUG_TRACKER", "MPT_BUILD_WINESUPPORT" }
  largeaddressaware ( true )
  characterset "Unicode"
  warnings "Extra"
  links {
   "portaudio",
   "rtaudio",
  }
  filter {}
  prebuildcommands { "..\\..\\build\\svn_version\\update_svn_version_vs_premake.cmd $(IntDir)" }

 project "OpenMPT-WineWrapper"
  uuid "f3da2bf5-e84a-4f71-80ab-884594863d3a"
  language "C"
  location ( "../../build/" .. mpt_projectpathname )
  vpaths { ["*"] = "../../" }
  mpt_projectname = "OpenMPT-WineWrapper"
  dofile "../../build/premake/premake-defaults-DLL.lua"
  dofile "../../build/premake/premake-defaults.lua"
  includedirs {
   "../../src",
   "../../common",
   "../../include",
   "$(IntDir)/svn_version",
   "../../build/svn_version",
  }
  files {
   "../../mptrack/wine/WineWrapper.c",
  }
  defines { "MODPLUG_TRACKER", "MPT_BUILD_WINESUPPORT_WRAPPER" }
  largeaddressaware ( true )
  characterset "Unicode"
  warnings "Extra"
  links {
   "OpenMPT-NativeSupport",
  }
  filter {}
  postbuildcommands { "..\\..\\build\\wine\\build_wine_support.cmd $(IntDir) $(OutDir)" }