msbuild: use the moc dispatcher from Qt's vstools

The new method supports build parallelism and cleaner
integration into msbuild dependency flows.
This commit is contained in:
Shawn Hoffman 2020-08-21 01:18:14 -07:00
parent 03a263db20
commit af55938538
8 changed files with 2465 additions and 314 deletions

View File

@ -21,7 +21,6 @@
<ClCompile>
<!-- 5054 operator '+': deprecated between enumerations of different types (in Qt headers) -->
<DisableSpecificWarnings>5054;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<AdditionalIncludeDirectories>($ProjectDir)Config\Graphics;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(ProjectDir)Config;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(ProjectDir)Config\ControllerInterface;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@ -44,268 +43,7 @@
<AdditionalManifestFiles>DolphinQt.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<!--
MOC files need to be listed. Put headers here ONLY if they use Q_OBJECT. Otherwise, put them
in the ItemGroup for ClInclude.
-->
<!--NOTE: When adding moc'd files, you must list outputs in the ClCompile ItemGroup too!-->
<ItemGroup>
<QtMoc Include="AboutDialog.h" />
<QtMoc Include="CheatsManager.h" />
<QtMoc Include="Config\ARCodeWidget.h" />
<QtMoc Include="Config\CheatCodeEditor.h" />
<QtMoc Include="Config\CheatWarningWidget.h" />
<QtMoc Include="Config\ControllerInterface\ControllerInterfaceWindow.h" />
<QtMoc Include="Config\ControllerInterface\DualShockUDPClientAddServerDialog.h" />
<QtMoc Include="Config\ControllerInterface\DualShockUDPClientWidget.h" />
<QtMoc Include="Config\ControllerInterface\ServerStringValidator.h" />
<QtMoc Include="Config\ControllersWindow.h" />
<QtMoc Include="Config\FilesystemWidget.h" />
<QtMoc Include="Config\GameConfigEdit.h" />
<QtMoc Include="Config\GameConfigHighlighter.h" />
<QtMoc Include="Config\GameConfigWidget.h" />
<QtMoc Include="Config\GeckoCodeWidget.h" />
<QtMoc Include="Config\Graphics\AdvancedWidget.h" />
<QtMoc Include="Config\Graphics\EnhancementsWidget.h" />
<QtMoc Include="Config\Graphics\GeneralWidget.h" />
<QtMoc Include="Config\Graphics\GraphicsBool.h" />
<QtMoc Include="Config\Graphics\GraphicsChoice.h" />
<QtMoc Include="Config\Graphics\GraphicsInteger.h" />
<QtMoc Include="Config\Graphics\GraphicsRadio.h" />
<QtMoc Include="Config\Graphics\GraphicsSlider.h" />
<QtMoc Include="Config\Graphics\GraphicsWidget.h" />
<QtMoc Include="Config\Graphics\GraphicsWindow.h" />
<QtMoc Include="Config\Graphics\HacksWidget.h" />
<QtMoc Include="Config\Graphics\PostProcessingConfigWindow.h" />
<QtMoc Include="Config\Graphics\SoftwareRendererWidget.h" />
<QtMoc Include="Config\InfoWidget.h" />
<QtMoc Include="Config\LogConfigWidget.h" />
<QtMoc Include="Config\LogWidget.h" />
<QtMoc Include="Config\Mapping\GCKeyboardEmu.h" />
<QtMoc Include="Config\Mapping\GCMicrophone.h" />
<QtMoc Include="Config\Mapping\GCPadEmu.h" />
<QtMoc Include="Config\Mapping\GCPadWiiUConfigDialog.h" />
<QtMoc Include="Config\Mapping\Hotkey3D.h" />
<QtMoc Include="Config\Mapping\HotkeyControllerProfile.h" />
<QtMoc Include="Config\Mapping\HotkeyDebugging.h" />
<QtMoc Include="Config\Mapping\HotkeyGeneral.h" />
<QtMoc Include="Config\Mapping\HotkeyGraphics.h" />
<QtMoc Include="Config\Mapping\HotkeyStates.h" />
<QtMoc Include="Config\Mapping\HotkeyStatesOther.h" />
<QtMoc Include="Config\Mapping\HotkeyTAS.h" />
<QtMoc Include="Config\Mapping\HotkeyWii.h" />
<QtMoc Include="Config\Mapping\IOWindow.h" />
<QtMoc Include="Config\Mapping\MappingButton.h" />
<QtMoc Include="Config\Mapping\MappingIndicator.h" />
<QtMoc Include="Config\Mapping\MappingNumeric.h" />
<QtMoc Include="Config\Mapping\MappingWidget.h" />
<QtMoc Include="Config\Mapping\MappingWindow.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuExtension.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuExtensionMotionInput.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuExtensionMotionSimulation.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuGeneral.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuMotionControl.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuMotionControlIMU.h" />
<QtMoc Include="Config\NewPatchDialog.h" />
<QtMoc Include="Config\PatchesWidget.h" />
<QtMoc Include="Config\PropertiesDialog.h" />
<QtMoc Include="Config\SettingsWindow.h" />
<QtMoc Include="Config\VerifyWidget.h" />
<QtMoc Include="ConvertDialog.h" />
<QtMoc Include="Debugger\BreakpointWidget.h" />
<QtMoc Include="Debugger\CodeViewWidget.h" />
<QtMoc Include="Debugger\CodeWidget.h" />
<QtMoc Include="Debugger\JITWidget.h" />
<QtMoc Include="Debugger\MemoryViewWidget.h" />
<QtMoc Include="Debugger\MemoryWidget.h" />
<QtMoc Include="Debugger\NetworkWidget.h" />
<QtMoc Include="Debugger\NewBreakpointDialog.h" />
<QtMoc Include="Debugger\PatchInstructionDialog.h" />
<QtMoc Include="Debugger\RegisterWidget.h" />
<QtMoc Include="Debugger\ThreadWidget.h" />
<QtMoc Include="Debugger\WatchWidget.h" />
<QtMoc Include="DiscordHandler.h" />
<QtMoc Include="DiscordJoinRequestDialog.h" />
<QtMoc Include="FIFO\FIFOAnalyzer.h" />
<QtMoc Include="FIFO\FIFOPlayerWindow.h" />
<QtMoc Include="GameList\GameList.h" />
<QtMoc Include="GameList\GameListModel.h" />
<QtMoc Include="GameList\GameTracker.h" />
<QtMoc Include="GameList\GridProxyModel.h" />
<QtMoc Include="GameList\ListProxyModel.h" />
<QtMoc Include="GCMemcardCreateNewDialog.h" />
<QtMoc Include="GCMemcardManager.h" />
<QtMoc Include="Host.h" />
<QtMoc Include="HotkeyScheduler.h" />
<QtMoc Include="MainWindow.h" />
<QtMoc Include="MenuBar.h" />
<QtMoc Include="NetPlay\ChunkedProgressDialog.h" />
<QtMoc Include="NetPlay\GameListDialog.h" />
<QtMoc Include="NetPlay\MD5Dialog.h" />
<QtMoc Include="NetPlay\NetPlayBrowser.h" />
<QtMoc Include="NetPlay\NetPlayDialog.h" />
<QtMoc Include="NetPlay\NetPlaySetupDialog.h" />
<QtMoc Include="NetPlay\PadMappingDialog.h" />
<QtMoc Include="NKitWarningDialog.h" />
<QtMoc Include="QtUtils\AspectRatioWidget.h" />
<QtMoc Include="QtUtils\BlockUserInputFilter.h" />
<QtMoc Include="QtUtils\DoubleClickEventFilter.h" />
<QtMoc Include="QtUtils\ElidedButton.h" />
<QtMoc Include="QtUtils\FileOpenEventFilter.h" />
<QtMoc Include="QtUtils\FlowLayout.h" />
<QtMoc Include="QtUtils\ModalMessageBox.h" />
<QtMoc Include="QtUtils\ParallelProgressDialog.h" />
<QtMoc Include="QtUtils\UTF8CodePointCountValidator.h" />
<QtMoc Include="QtUtils\WindowActivationEventFilter.h" />
<QtMoc Include="QtUtils\WrapInScrollArea.h" />
<QtMoc Include="RenderWidget.h" />
<QtMoc Include="SearchBar.h" />
<QtMoc Include="Settings.h" />
<QtMoc Include="Settings\AdvancedPane.h" />
<QtMoc Include="Settings\AudioPane.h" />
<QtMoc Include="Settings\GameCubePane.h" />
<QtMoc Include="Settings\GeneralPane.h" />
<QtMoc Include="Settings\InterfacePane.h" />
<QtMoc Include="Settings\PathPane.h" />
<QtMoc Include="Settings\USBDeviceAddToWhitelistDialog.h" />
<QtMoc Include="Settings\WiiPane.h" />
<QtMoc Include="TAS\GCTASInputWindow.h" />
<QtMoc Include="TAS\IRWidget.h" />
<QtMoc Include="TAS\StickWidget.h" />
<QtMoc Include="TAS\TASCheckBox.h" />
<QtMoc Include="TAS\TASInputWindow.h" />
<QtMoc Include="TAS\WiiTASInputWindow.h" />
<QtMoc Include="ToolBar.h" />
<QtMoc Include="Updater.h" />
</ItemGroup>
<!--TODO figure out how to get QtMoc to add outputs to ClCompile's inputs...-->
<ItemGroup>
<ClCompile Include="$(QtMocOutPrefix)AboutDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)AdvancedPane.cpp" />
<ClCompile Include="$(QtMocOutPrefix)AdvancedWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ARCodeWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)AspectRatioWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)AudioPane.cpp" />
<ClCompile Include="$(QtMocOutPrefix)BlockUserInputFilter.cpp" />
<ClCompile Include="$(QtMocOutPrefix)BreakpointWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)CheatCodeEditor.cpp" />
<ClCompile Include="$(QtMocOutPrefix)CheatsManager.cpp" />
<ClCompile Include="$(QtMocOutPrefix)CheatWarningWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ChunkedProgressDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)CodeViewWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)CodeWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ControllerInterfaceWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ControllersWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ConvertDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)DiscordHandler.cpp" />
<ClCompile Include="$(QtMocOutPrefix)DiscordJoinRequestDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)DoubleClickEventFilter.cpp" />
<ClCompile Include="$(QtMocOutPrefix)DualShockUDPClientAddServerDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)DualShockUDPClientWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ElidedButton.cpp" />
<ClCompile Include="$(QtMocOutPrefix)EnhancementsWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)FIFOAnalyzer.cpp" />
<ClCompile Include="$(QtMocOutPrefix)FIFOPlayerWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)FileOpenEventFilter.cpp" />
<ClCompile Include="$(QtMocOutPrefix)FilesystemWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)FlowLayout.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GameConfigEdit.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GameConfigHighlighter.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GameConfigWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GameCubePane.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GameList.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GameListDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GameListModel.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GameTracker.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GCKeyboardEmu.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GCMemcardCreateNewDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GCMemcardManager.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GCMicrophone.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GCPadEmu.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GCPadWiiUConfigDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GCTASInputWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GeckoCodeWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GeneralPane.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GeneralWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GraphicsBool.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GraphicsChoice.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GraphicsInteger.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GraphicsRadio.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GraphicsSlider.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GraphicsWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GraphicsWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)GridProxyModel.cpp" />
<ClCompile Include="$(QtMocOutPrefix)HacksWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)Host.cpp" />
<ClCompile Include="$(QtMocOutPrefix)Hotkey3D.cpp" />
<ClCompile Include="$(QtMocOutPrefix)HotkeyControllerProfile.cpp" />
<ClCompile Include="$(QtMocOutPrefix)HotkeyDebugging.cpp" />
<ClCompile Include="$(QtMocOutPrefix)HotkeyGeneral.cpp" />
<ClCompile Include="$(QtMocOutPrefix)HotkeyGraphics.cpp" />
<ClCompile Include="$(QtMocOutPrefix)HotkeyScheduler.cpp" />
<ClCompile Include="$(QtMocOutPrefix)HotkeyStates.cpp" />
<ClCompile Include="$(QtMocOutPrefix)HotkeyStatesOther.cpp" />
<ClCompile Include="$(QtMocOutPrefix)HotkeyTAS.cpp" />
<ClCompile Include="$(QtMocOutPrefix)HotkeyWii.cpp" />
<ClCompile Include="$(QtMocOutPrefix)InfoWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)InterfacePane.cpp" />
<ClCompile Include="$(QtMocOutPrefix)IOWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)IRWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)JITWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ListProxyModel.cpp" />
<ClCompile Include="$(QtMocOutPrefix)LogConfigWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)LogWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MainWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MappingButton.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MappingIndicator.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MappingNumeric.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MappingWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MappingWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MD5Dialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MemoryViewWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MemoryWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)MenuBar.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ModalMessageBox.cpp" />
<ClCompile Include="$(QtMocOutPrefix)NetPlayBrowser.cpp" />
<ClCompile Include="$(QtMocOutPrefix)NetPlayDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)NetPlaySetupDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)NetworkWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)NewBreakpointDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)NewPatchDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)NKitWarningDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)PadMappingDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ParallelProgressDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)PatchesWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)PatchInstructionDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)PathPane.cpp" />
<ClCompile Include="$(QtMocOutPrefix)PostProcessingConfigWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)PropertiesDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)RegisterWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)RenderWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)SearchBar.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ServerStringValidator.cpp" />
<ClCompile Include="$(QtMocOutPrefix)Settings.cpp" />
<ClCompile Include="$(QtMocOutPrefix)SettingsWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)SoftwareRendererWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)StickWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)TASCheckBox.cpp" />
<ClCompile Include="$(QtMocOutPrefix)TASInputWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ThreadWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)ToolBar.cpp" />
<ClCompile Include="$(QtMocOutPrefix)Updater.cpp" />
<ClCompile Include="$(QtMocOutPrefix)USBDeviceAddToWhitelistDialog.cpp" />
<ClCompile Include="$(QtMocOutPrefix)UTF8CodePointCountValidator.cpp" />
<ClCompile Include="$(QtMocOutPrefix)VerifyWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)WatchWidget.cpp" />
<ClCompile Include="$(QtMocOutPrefix)WiimoteEmuExtension.cpp" />
<ClCompile Include="$(QtMocOutPrefix)WiimoteEmuExtensionMotionInput.cpp" />
<ClCompile Include="$(QtMocOutPrefix)WiimoteEmuExtensionMotionSimulation.cpp" />
<ClCompile Include="$(QtMocOutPrefix)WiimoteEmuGeneral.cpp" />
<ClCompile Include="$(QtMocOutPrefix)WiimoteEmuMotionControl.cpp" />
<ClCompile Include="$(QtMocOutPrefix)WiimoteEmuMotionControlIMU.cpp" />
<ClCompile Include="$(QtMocOutPrefix)WiiPane.cpp" />
<ClCompile Include="$(QtMocOutPrefix)WiiTASInputWindow.cpp" />
<ClCompile Include="$(QtMocOutPrefix)WindowActivationEventFilter.cpp" />
<ClCompile Include="AboutDialog.cpp" />
<ClCompile Include="CheatsManager.cpp" />
<ClCompile Include="Config\ARCodeWidget.cpp" />
@ -442,7 +180,11 @@
<ClCompile Include="Updater.cpp" />
<ClCompile Include="WiiUpdate.cpp" />
</ItemGroup>
<!--Put standard C/C++ headers here. Headers that are listed in the QtMoc ItemGroup must NOT be listed here.-->
<!--
Put C/C++ headers here. If moc needs to be run for the file (only needed if
Q_OBJECT is used in the file), set the item type to QtMoc. This list can
also be modified using the VS UI.
-->
<ItemGroup>
<ClInclude Include="Config\Mapping\MappingCommon.h" />
<ClInclude Include="Debugger\RegisterColumn.h" />
@ -455,6 +197,133 @@
<ClInclude Include="Resources.h" />
<ClInclude Include="Translation.h" />
<ClInclude Include="WiiUpdate.h" />
<QtMoc Include="AboutDialog.h" />
<QtMoc Include="CheatsManager.h" />
<QtMoc Include="Config\ARCodeWidget.h" />
<ClInclude Include="Config\CheatCodeEditor.h" />
<QtMoc Include="Config\CheatWarningWidget.h" />
<QtMoc Include="Config\ControllerInterface\ControllerInterfaceWindow.h" />
<QtMoc Include="Config\ControllerInterface\DualShockUDPClientAddServerDialog.h" />
<QtMoc Include="Config\ControllerInterface\DualShockUDPClientWidget.h" />
<QtMoc Include="Config\ControllerInterface\ServerStringValidator.h" />
<QtMoc Include="Config\ControllersWindow.h" />
<QtMoc Include="Config\FilesystemWidget.h" />
<ClInclude Include="Config\GameConfigEdit.h" />
<QtMoc Include="Config\GameConfigHighlighter.h" />
<QtMoc Include="Config\GameConfigWidget.h" />
<QtMoc Include="Config\GeckoCodeWidget.h" />
<QtMoc Include="Config\Graphics\AdvancedWidget.h" />
<QtMoc Include="Config\Graphics\EnhancementsWidget.h" />
<QtMoc Include="Config\Graphics\GeneralWidget.h" />
<QtMoc Include="Config\Graphics\GraphicsBool.h" />
<QtMoc Include="Config\Graphics\GraphicsChoice.h" />
<QtMoc Include="Config\Graphics\GraphicsInteger.h" />
<QtMoc Include="Config\Graphics\GraphicsRadio.h" />
<QtMoc Include="Config\Graphics\GraphicsSlider.h" />
<QtMoc Include="Config\Graphics\GraphicsWidget.h" />
<QtMoc Include="Config\Graphics\GraphicsWindow.h" />
<QtMoc Include="Config\Graphics\HacksWidget.h" />
<QtMoc Include="Config\Graphics\PostProcessingConfigWindow.h" />
<QtMoc Include="Config\Graphics\SoftwareRendererWidget.h" />
<QtMoc Include="Config\InfoWidget.h" />
<QtMoc Include="Config\LogConfigWidget.h" />
<QtMoc Include="Config\LogWidget.h" />
<QtMoc Include="Config\Mapping\GCKeyboardEmu.h" />
<QtMoc Include="Config\Mapping\GCMicrophone.h" />
<QtMoc Include="Config\Mapping\GCPadEmu.h" />
<QtMoc Include="Config\Mapping\GCPadWiiUConfigDialog.h" />
<QtMoc Include="Config\Mapping\Hotkey3D.h" />
<QtMoc Include="Config\Mapping\HotkeyControllerProfile.h" />
<QtMoc Include="Config\Mapping\HotkeyDebugging.h" />
<QtMoc Include="Config\Mapping\HotkeyGeneral.h" />
<QtMoc Include="Config\Mapping\HotkeyGraphics.h" />
<QtMoc Include="Config\Mapping\HotkeyStates.h" />
<QtMoc Include="Config\Mapping\HotkeyStatesOther.h" />
<QtMoc Include="Config\Mapping\HotkeyTAS.h" />
<QtMoc Include="Config\Mapping\HotkeyWii.h" />
<QtMoc Include="Config\Mapping\IOWindow.h" />
<QtMoc Include="Config\Mapping\MappingButton.h" />
<ClInclude Include="Config\Mapping\MappingIndicator.h" />
<ClInclude Include="Config\Mapping\MappingNumeric.h" />
<QtMoc Include="Config\Mapping\MappingWidget.h" />
<QtMoc Include="Config\Mapping\MappingWindow.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuExtension.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuExtensionMotionInput.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuExtensionMotionSimulation.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuGeneral.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuMotionControl.h" />
<QtMoc Include="Config\Mapping\WiimoteEmuMotionControlIMU.h" />
<ClInclude Include="Config\NewPatchDialog.h" />
<ClInclude Include="Config\PatchesWidget.h" />
<QtMoc Include="Config\PropertiesDialog.h" />
<QtMoc Include="Config\SettingsWindow.h" />
<QtMoc Include="Config\VerifyWidget.h" />
<QtMoc Include="ConvertDialog.h" />
<QtMoc Include="Debugger\BreakpointWidget.h" />
<QtMoc Include="Debugger\CodeViewWidget.h" />
<QtMoc Include="Debugger\CodeWidget.h" />
<QtMoc Include="Debugger\JITWidget.h" />
<QtMoc Include="Debugger\MemoryViewWidget.h" />
<QtMoc Include="Debugger\MemoryWidget.h" />
<QtMoc Include="Debugger\NetworkWidget.h" />
<QtMoc Include="Debugger\NewBreakpointDialog.h" />
<QtMoc Include="Debugger\PatchInstructionDialog.h" />
<QtMoc Include="Debugger\RegisterWidget.h" />
<QtMoc Include="Debugger\ThreadWidget.h" />
<QtMoc Include="Debugger\WatchWidget.h" />
<QtMoc Include="DiscordHandler.h" />
<QtMoc Include="DiscordJoinRequestDialog.h" />
<QtMoc Include="FIFO\FIFOAnalyzer.h" />
<QtMoc Include="FIFO\FIFOPlayerWindow.h" />
<QtMoc Include="GameList\GameList.h" />
<QtMoc Include="GameList\GameListModel.h" />
<QtMoc Include="GameList\GameTracker.h" />
<QtMoc Include="GameList\GridProxyModel.h" />
<QtMoc Include="GameList\ListProxyModel.h" />
<QtMoc Include="GCMemcardCreateNewDialog.h" />
<QtMoc Include="GCMemcardManager.h" />
<QtMoc Include="Host.h" />
<QtMoc Include="HotkeyScheduler.h" />
<QtMoc Include="MainWindow.h" />
<QtMoc Include="MenuBar.h" />
<QtMoc Include="NetPlay\ChunkedProgressDialog.h" />
<QtMoc Include="NetPlay\GameListDialog.h" />
<QtMoc Include="NetPlay\MD5Dialog.h" />
<QtMoc Include="NetPlay\NetPlayBrowser.h" />
<QtMoc Include="NetPlay\NetPlayDialog.h" />
<QtMoc Include="NetPlay\NetPlaySetupDialog.h" />
<QtMoc Include="NetPlay\PadMappingDialog.h" />
<QtMoc Include="NKitWarningDialog.h" />
<QtMoc Include="QtUtils\AspectRatioWidget.h" />
<QtMoc Include="QtUtils\BlockUserInputFilter.h" />
<QtMoc Include="QtUtils\DoubleClickEventFilter.h" />
<QtMoc Include="QtUtils\ElidedButton.h" />
<QtMoc Include="QtUtils\FileOpenEventFilter.h" />
<ClInclude Include="QtUtils\FlowLayout.h" />
<ClInclude Include="QtUtils\ModalMessageBox.h" />
<QtMoc Include="QtUtils\ParallelProgressDialog.h" />
<QtMoc Include="QtUtils\UTF8CodePointCountValidator.h" />
<QtMoc Include="QtUtils\WindowActivationEventFilter.h" />
<ClInclude Include="QtUtils\WrapInScrollArea.h" />
<QtMoc Include="RenderWidget.h" />
<QtMoc Include="SearchBar.h" />
<QtMoc Include="Settings.h" />
<QtMoc Include="Settings\AdvancedPane.h" />
<QtMoc Include="Settings\AudioPane.h" />
<QtMoc Include="Settings\GameCubePane.h" />
<QtMoc Include="Settings\GeneralPane.h" />
<QtMoc Include="Settings\InterfacePane.h" />
<QtMoc Include="Settings\PathPane.h" />
<QtMoc Include="Settings\USBDeviceAddToWhitelistDialog.h" />
<QtMoc Include="Settings\WiiPane.h" />
<QtMoc Include="TAS\GCTASInputWindow.h" />
<QtMoc Include="TAS\IRWidget.h" />
<QtMoc Include="TAS\StickWidget.h" />
<QtMoc Include="TAS\TASCheckBox.h" />
<QtMoc Include="TAS\TASInputWindow.h" />
<QtMoc Include="TAS\WiiTASInputWindow.h" />
<QtMoc Include="ToolBar.h" />
<QtMoc Include="Updater.h" />
</ItemGroup>
<ItemGroup>
<Text Include="CMakeLists.txt" />
@ -531,9 +400,7 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VSPropsDir)QtCompile.targets" />
</ImportGroup>
<ImportGroup Label="ExtensionTargets" />
<!--Copy Exe, Data directory and DLLs which should be located in the executable directory-->
<ItemGroup>
<DataSysFiles Include="$(DolphinRootDir)Data\**\Sys\**\*.*" />

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Label="UserMacros">
<QTDIRDefault Condition="'$(Platform)'=='x64'">$(ExternalsDir)Qt\Qt5.15.0\msvc2019_64\</QTDIRDefault>
<QTDIRDefault Condition="'$(Platform)'=='ARM64'">$(ExternalsDir)Qt\Qt5.15.0\msvc2019_arm64\</QTDIRDefault>
@ -12,7 +12,6 @@
<QtBinDir>$(QTDIR)bin\</QtBinDir>
<QtPluginsDir>$(QTDIR)plugins\</QtPluginsDir>
<QtToolOutDir>$(IntDir)</QtToolOutDir>
<QtMocOutPrefix>$(QtToolOutDir)moc_</QtMocOutPrefix>
<QtDebugSuffix>d</QtDebugSuffix>
<QtLibSuffix Condition="'$(Configuration)'=='Debug'">$(QtDebugSuffix)</QtLibSuffix>
<QtPluginFolder>QtPlugins</QtPluginFolder>
@ -22,7 +21,6 @@
<PreprocessorDefinitions Condition="'$(Configuration)'=='Release'">QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>QT_USE_QSTRINGBUILDER;QT_NO_CAST_FROM_ASCII;QT_NO_CAST_TO_ASCII;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(QtToolOutDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(QtIncludeDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>$(QtIncludeDir)QtCore;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
@ -45,46 +43,32 @@
</Link>
</ItemDefinitionGroup>
<!--Compile files needed to MOC and output in the build directory-->
<!--TODO find a way to autocreate from ClCompile settings-->
<PropertyGroup>
<MocDefines>-DQT_USE_QSTRINGBUILDER -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_DLL -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -D_SECURE_SCL=0 -D_ARCH_64=1 -D_M_X86_64=1 -D_M_X86=1 -DUSE_UPNP -D_CRT_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_DEPRECATE -D_UNICODE -DUNICODE</MocDefines>
<MocDefines Condition="'$(Configuration)'=='Release'">-DQT_NO_DEBUG -DNDEBUG $(MocDefines)</MocDefines>
<!-- !!!HOLY UGLY BATMAN!!!
Be very careful here when adding include directories. Each path must have the whole arg surrounded by doublequotes - HOWEVER,
the ending doublequote cannot be directly preceeded by a directory seperator. In other words, you must use:
"-I$(SomeDir) "
instead of
"-I$(SomeDir)"
in order to prevent the trailing slash from escaping the doublequote after value replacement.
-->
<MocIncludes>"-I$(QtIncludeDir)QtWidgets" "-I$(QtIncludeDir)QtGui" "-I$(QtIncludeDir)QtCore" "-I$(QtIncludeDir) " "-I$(QtToolOutDir) " -I.</MocIncludes>
<MocIncludes>"-I$(ExternalsDir)xxhash" "-I$(ExternalsDir)zlib" "-I$(ExternalsDir)SFML\include" "-I$(ExternalsDir)mbedtls\include" "-I$(ExternalsDir)miniupnpc\src" "-I$(ExternalsDir)LZO" "-I$(ExternalsDir)libusbx\libusb" "-I$(ExternalsDir)libpng" "-I$(ExternalsDir)GL" "-I$(ExternalsDir)Bochs_disasm" "-I$(CoreDir) " $(MocIncludes)</MocIncludes>
</PropertyGroup>
<Target Name="QtMoc"
BeforeTargets="ClCompile"
Condition="'@(QtMoc)'!=''"
Inputs="%(QtMoc.Identity);%(QtMoc.AdditionalDependencies);$(MSBuildProjectFile)"
Outputs="$(QtToolOutDir)moc_%(QtMoc.Filename).cpp">
<Message Text="moc %(QtMoc.Filename)" Importance="High" />
<Error Condition="!$(QtDirValid)" Text="QTDIR not set or non-existent (pull the submodule?)" />
<MakeDir Directories="$(QtToolOutDir)" />
<Exec Command="&quot;$(QtBinDir)moc.exe&quot; &quot;%(QtMoc.FullPath)&quot; -o &quot;$(QtToolOutDir)moc_%(QtMoc.Filename).cpp&quot; -f%(QtMoc.Filename)%(QtMoc.Extension) $(MocDefines) $(MocIncludes)" />
</Target>
<ItemGroup>
<MocOutputs Include="$(QtToolOutDir)moc_*.cpp" />
</ItemGroup>
<Target Name="QtMocClean">
<Delete Files="@(MocOutputs)" />
<!--
Use the moc implementation provided by "Qt VS Tools"
see: https://code.qt.io/cgit/qt-labs/vstools.git/tree/src/qtmsbuild
This provides a wrapper around moc which deals with parallel dispatch to moc,
as well as creating ClCompile inputs from the moc outputs.
Note that we currently pass the same ClCompile.PreprocessorDefinitions to moc,
but not the include paths, as passing include paths drastically slows down
moc, and it doesn't appear to actually need them anyway.
-->
<Import Project="qtmoc.props" />
<ItemDefinitionGroup>
<QtMoc>
<OutputFile>$(QtToolOutDir)moc_%(Filename).cpp</OutputFile>
<QtMocDir>$(QtToolOutDir)</QtMocDir>
</QtMoc>
</ItemDefinitionGroup>
<Import Project="qt_globals.targets"/>
<Import Project="qt_tasks.targets"/>
<Import Project="qtmoc.targets" />
<Target Name="QtCheckQtDir" BeforeTargets="QtMocInit" Condition="!$(QtDirValid)">
<Error Text="QTDIR not set or non-existent (pull the submodule?)" />
</Target>
<!--Expose the new targets to VS-->
<ItemGroup>
<PropertyPageSchema Include="$(MSBuildThisFileDirectory)$(MSBuildThisFileName).xml" />
<AvailableItemName Include="QtMoc">
<Targets>QtMoc</Targets>
</AvailableItemName>
</ItemGroup>
<!--Copy the needed dlls-->

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<CleanDependsOn>QtMocClean;$(CleanDependsOn)</CleanDependsOn>
<!--
<ComputeLinkInputsTargets>$(ComputeLinkInputsTargets);QtComputeMocOutput;</ComputeLinkInputsTargets>
<ComputeLibInputsTargets>$(ComputeLibInputsTargets);QtComputeMocOutput;</ComputeLibInputsTargets>
-->
</PropertyGroup>
</Project>

View File

@ -0,0 +1,558 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt VS Tools.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
-->
<!--
///////////////////////////////////////////////////////////////////////////////////////////////////
/// Qt/MSBuild global definitions
///////////////////////////////////////////////////////////////////////////////////////////////////
// -->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
// Build dependencies
// -->
<PropertyGroup>
<BuildDependsOn>
QtVersion;
$(BuildDependsOn);
Qt
</BuildDependsOn>
<CleanDependsOn>
$(CleanDependsOn);
QtClean
</CleanDependsOn>
<DesignTimeBuildInitTargets>
$(DesignTimeBuildInitTargets);
Qt
</DesignTimeBuildInitTargets>
<ComputeCompileInputsTargets>
$(ComputeCompileInputsTargets);
Qt
</ComputeCompileInputsTargets>
<BeforeClCompileTargets>
$(BeforeClCompileTargets);
Qt
</BeforeClCompileTargets>
<ComputeLinkInputsTargets>
$(ComputeLinkInputsTargets);
Qt
</ComputeLinkInputsTargets>
</PropertyGroup>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
// Qt/MSBuild global properties
// -->
<Import Project="..\version.targets" Condition="Exists('..\version.targets')"/>
<PropertyGroup>
<QtMsBuildVersion>$(QtVSToolsVersion)</QtMsBuildVersion>
<QtDebug Condition="'$(QtDebug)' == ''">false</QtDebug>
<QtLogFilePath Condition="'$(QtLogFilePath)' == ''"
>$([System.IO.Path]::Combine($(ProjectDir),$(IntDir)qt_work.log))</QtLogFilePath>
<QtMaxProcs Condition="'$(QtMaxProcs)' == ''"
>$([System.Environment]::ProcessorCount)</QtMaxProcs>
</PropertyGroup>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtGetDefaultClCompile
/////////////////////////////////////////////////////////////////////////////////////////////////
// Get default C++ properties
// -->
<Target Name="QtGetDefaultClCompile">
<ItemGroup>
<ClCompile Include="DefaultClCompile"/>
</ItemGroup>
</Target>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtClean
/////////////////////////////////////////////////////////////////////////////////////////////////
// Clean-up from previous build
// -->
<Target Name="QtClean">
<Message Importance="High" Condition="'$(QtDebug)' == 'true'" Text="## Qt Clean"/>
<Delete Files="$(QtLogFilePath)"/>
</Target>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtVersion
/////////////////////////////////////////////////////////////////////////////////////////////////
// Print debug message with Qt/MSBuild version
// -->
<Target Name="QtVersion">
<Message Importance="High" Condition="'$(QtDebug)' == 'true'"
Text="Qt/MSBuild v$(QtMsBuildVersion) ($(MSBuildThisFileDirectory))"/>
</Target>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtPrepare
/////////////////////////////////////////////////////////////////////////////////////////////////
// Prepare Qt build: read and parse work log file
// -->
<Target Name="QtPrepare"
Condition="'$(QtSkipWork)' != 'true'"
DependsOnTargets="$(QtDependsOn)"
BeforeTargets="QtWorkPrepare">
<Message Importance="High" Condition="'$(QtDebug)' == 'true'" Text="#### QtPrepare"/>
<ReadLinesFromFile File="$(QtLogFilePath)">
<Output TaskParameter="Lines" ItemName="QtLogData"/>
</ReadLinesFromFile>
<ItemGroup Condition="'@(QtLogData)' != ''">
<QtWorkLog
Include="@(QtLogData->'$([System.String]::Copy('%(QtLogData.Identity)').Split('|')[0])')">
<Hash>$([System.String]::Copy('%(QtLogData.Identity)').Split('|')[1])</Hash>
</QtWorkLog>
</ItemGroup>
</Target>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtWorkPrepare
/////////////////////////////////////////////////////////////////////////////////////////////////
// Analyze work request and decide if the Qt tool needs to be called or if the output from the
// previous call is still valid.
// -->
<Target Name="QtWorkPrepare" DependsOnTargets="$(QtDependsOn);$(QtBuildTargets)"
Condition="'$(QtSkipWork)' != 'true'"
Inputs="%(QtWork.WorkType)(%(QtWork.Identity))"
Outputs="@(QtWork->'####### Don't skip this target #######')">
<Message Importance="High" Condition="'$(QtDebug)' == 'true' AND '@(QtWork)' != ''"
Text="## QtWorkPrepare %(QtWork.Identity)" />
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Calculate hash for the requested work item, based on its associated tool and options
// -->
<GetItemHash Condition="'@(QtWork)' != ''"
Item="@(QtWork)" Keys="Identity;WorkType;ToolPath;Options">
<Output TaskParameter="Hash" PropertyName="work_hash" />
</GetItemHash>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Try to find entry in Qt work log for the requested work item; get logged hash
// -->
<PropertyGroup Condition="'@(QtWork)' != ''">
<work_key>@(QtWork->'%(WorkType)(%(Identity))')</work_key>
<dependencies_changed>@(QtWork->'%(DependenciesChanged)')</dependencies_changed>
<input_changed>@(QtWork->'%(InputChanged)')</input_changed>
<project_changed
Condition="'$(dependencies_changed)' == 'true' AND '$(input_changed)' != 'true'"
>true</project_changed>
</PropertyGroup>
<FindInList Condition="'@(QtWork)' != '' AND '$(input_changed)' != 'true'"
CaseSensitive="false" List="@(QtWorkLog)" ItemSpecToFind="$(work_key)">
<Output TaskParameter="ItemFound" ItemName="log_entry"/>
</FindInList>
<PropertyGroup Condition="'@(QtWork)' != ''">
<log_hash Condition="'@(log_entry)' != ''">@(log_entry->'%(Hash)')</log_hash>
</PropertyGroup>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Skip work item if:
// * work is not needed:
// - input was not modified
// - AND project was not modified OR command line did not change (i.e. hashes are the same)
// * OR we're in a design-time build
// -->
<PropertyGroup>
<do_work
Condition="'$(input_changed)' == 'true'
OR ('$(project_changed)' == 'true' AND '$(log_hash)' != '$(work_hash)')"
>true</do_work>
<skip_work
Condition="'$(do_work)' != 'true' OR '$(DesignTimeBuild)' == 'true'"
>true</skip_work>
</PropertyGroup>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Skip work item
// -->
<ItemGroup Condition="'@(QtWork)' != '' AND '$(skip_work)' == 'true'">
<QtWorkResult Include="@(QtWork)">
<ExitCode>0</ExitCode>
<Skipped>true</Skipped>
</QtWorkResult>
<QtWork Remove="@(QtWork)" />
</ItemGroup>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Generate new work log entry and ensure path to output exists
// -->
<ItemGroup Condition="'@(QtWork)' != '' AND '$(skip_work)' != 'true'">
<QtWorkLog Remove="$(work_key)"/>
<QtWorkLog Include="$(work_key)">
<Hash>$(work_hash)</Hash>
</QtWorkLog>
</ItemGroup>
<MakeDir Condition="'@(QtWork)' != '' AND '$(skip_work)' != 'true'"
Directories="$([System.IO.Path]::GetDirectoryName(%(QtWork.OutputFile)))"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Clean-up
// -->
<PropertyGroup>
<work_key/>
<log_hash/>
<dependencies_changed/>
<input_changed/>
<project_changed/>
<do_work/>
<skip_work/>
</PropertyGroup>
<ItemGroup>
<log_entry Remove="@(log_entry)"/>
</ItemGroup>
</Target>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtWork
/////////////////////////////////////////////////////////////////////////////////////////////////
// Run Qt tools and add dynamic C++ sources to build
// -->
<Target Name="QtWork"
Condition="'$(QtSkipWork)' != 'true'"
DependsOnTargets="QtWorkPrepare;QtGetDefaultClCompile">
<Message Importance="High" Condition="'$(QtDebug)' == 'true'"
Text="## Qt Build $(QtBuildTargets.Replace(';',' ').Trim())" />
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Run work locally in parallel processes
// -->
<QtRunWork
Condition="'$(ApplicationType)' != 'Linux' AND '@(QtWork)' != ''
AND '%(QtWork.ParallelBuild)' == 'true'
AND '$(DesignTimeBuild)' != 'true'"
QtWork="@(QtWork)" QtMaxProcs="$(QtMaxProcs)" QtDebug="$(QtDebug)">
<Output TaskParameter="Result" ItemName="QtWorkResult" />
</QtRunWork>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Run work locally in a single process
// -->
<QtRunWork
Condition="'$(ApplicationType)' != 'Linux' AND '@(QtWork)' != ''
AND '%(QtWork.ParallelBuild)' != 'true'
AND '$(DesignTimeBuild)' != 'true'"
QtWork="@(QtWork)" QtMaxProcs="1" QtDebug="$(QtDebug)">
<Output TaskParameter="Result" ItemName="QtWorkResult" />
</QtRunWork>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Run work in build host
// -->
<!-- // Translate local paths to host paths -->
<Flatten
Condition="'$(ApplicationType)' == 'Linux'
AND '@(QtWork)' != '' AND '$(DesignTimeBuild)' != 'true'"
Items="@(QtWork)" Metadata="ResourceFiles">
<Output TaskParameter="Result" ItemName="ResourceFiles"/>
</Flatten>
<ItemGroup
Condition="'$(ApplicationType)' == 'Linux'
AND '@(QtWork)' != '' AND '$(DesignTimeBuild)' != 'true'">
<LocalPath Include="%(QtWork.Identity)">
<Name>InputPath</Name>
<Item>%(QtWork.Identity)</Item>
<Value>%(QtWork.Identity)</Value>
</LocalPath>
<LocalPath
Condition="'%(ResourceFiles.Identity)' != ''"
Include="@(ResourceFiles->'%(Item)')">
<Name>InputPath</Name>
<Item>@(ResourceFiles->'%(Value)')</Item>
<Value>@(ResourceFiles->'%(Value)')</Value>
</LocalPath>
<LocalPath Include="%(QtWork.Identity)">
<Name>OutputPath</Name>
<Item>%(QtWork.OutputFile)</Item>
<Value>%(QtWork.OutputFile)</Value>
</LocalPath>
</ItemGroup>
<HostTranslatePaths
Condition="'$(ApplicationType)' == 'Linux'
AND '@(QtWork)' != '' AND '$(DesignTimeBuild)' != 'true'"
Items="@(LocalPath)" Names="InputPath;OutputPath">
<Output TaskParameter="Result" ItemName="HostPath"/>
</HostTranslatePaths>
<ItemGroup>
<InputPath Include="@(HostPath->WithMetadataValue('Name', 'InputPath'))" />
<OutputPath Include="@(HostPath->WithMetadataValue('Name', 'OutputPath'))" />
</ItemGroup>
<!-- // Run command -->
<HostExec
Condition="'$(ApplicationType)' == 'Linux'
AND '%(Identity)' != '' AND '$(DesignTimeBuild)' != 'true'"
Message="@(QtWork->'%(WorkType) %(Identity)')"
Command="@(QtWork->'%(ToolPath) %(Options)')"
Inputs="@(InputPath)"
Outputs="@(OutputPath)"
RemoteTarget="$(ResolvedRemoteTarget)"
RemoteProjectDir="$(_ResolvedRemoteProjectDir)">
</HostExec>
<!-- // Generate result item -->
<ItemGroup
Condition="'$(ApplicationType)' == 'Linux'
AND '@(QtWork)' != '' AND '$(DesignTimeBuild)' != 'true'">
<QtWorkResult Include="@(QtWork)">
<ExitCode>0</ExitCode>
</QtWorkResult>
</ItemGroup>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Save tracking log of files read during build; used by VS to check the up-to-date status
// -->
<ItemGroup Condition="'$(DesignTimeBuild)' != 'true'">
<read_log Include="^%(QtWorkResult.FullPath);%(QtWorkResult.AdditionalDependencies)"
Condition="'%(QtWorkResult.ExitCode)' == '0' AND '%(QtWorkResult.DisableLog)' != 'true'">
<WorkType>%(QtWorkResult.WorkType)</WorkType>
</read_log>
<read_log>
<Path Condition="$([System.String]::Copy('%(Identity)').StartsWith('^'))">%(Identity)</Path>
<Path Condition="!$([System.String]::Copy('%(Identity)').StartsWith('^'))"
>$([System.IO.Path]::Combine('$(MSBuildProjectDirectory)','%(Identity)'))</Path>
</read_log>
</ItemGroup>
<WriteLinesToFile
Condition="'@(read_log)' != ''"
File="$(TLogLocation)%(read_log.WorkType).read.1u.tlog"
Lines="@(read_log->MetaData('Path')->ToUpperInvariant());"
Overwrite="true"
Encoding="Unicode"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Save tracking log of files written during build; used by VS to check the up-to-date status
// -->
<ItemGroup Condition="'$(DesignTimeBuild)' != 'true'">
<write_log Include="^%(QtWorkResult.FullPath);%(QtWorkResult.OutputFile)"
Condition="'%(QtWorkResult.ExitCode)' == '0' AND '%(QtWorkResult.DisableLog)' != 'true'">
<WorkType>%(QtWorkResult.WorkType)</WorkType>
</write_log>
<write_log>
<Path Condition="$([System.String]::Copy('%(Identity)').StartsWith('^'))">%(Identity)</Path>
<Path Condition="!$([System.String]::Copy('%(Identity)').StartsWith('^'))"
>$([System.IO.Path]::Combine('$(MSBuildProjectDirectory)','%(Identity)'))</Path>
</write_log>
</ItemGroup>
<WriteLinesToFile Condition="'@(write_log)' != ''"
File="$(TLogLocation)%(write_log.WorkType).write.1u.tlog"
Lines="@(write_log->MetaData('Path')->ToUpperInvariant());"
Overwrite="true" Encoding="Unicode"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Log output files; this is used by VS to determine what files to delete on "Clean"
// -->
<ItemGroup Condition="'$(DesignTimeBuild)' != 'true'">
<clean_log Include="%(QtWorkResult.OutputFile)"
Condition="'%(QtWorkResult.ExitCode)' == '0'">
<Source>@(QtWorkResult, '|')</Source>
</clean_log>
</ItemGroup>
<WriteLinesToFile Condition="'@(clean_log)' != ''"
File="$(TLogLocation)$(ProjectName).write.1u.tlog"
Lines="^%(clean_log.Source);@(clean_log->'%(Fullpath)')"
Encoding="Unicode"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Log calls to Qt tools; used in QtWorkPrepare to detect changes to the options of Qt tools
// -->
<WriteLinesToFile Condition="'@(QtWorkLog)' != '' AND '$(DesignTimeBuild)' != 'true'"
File="$(QtLogFilePath)"
Lines="@(QtWorkLog->'%(Identity)|%(Hash)')"
Overwrite="true" Encoding="Unicode"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Generate build error if a Qt tool did not terminate correctly
// -->
<Error
Condition="'%(QtWorkResult.ExitCode)' != ''
AND '%(QtWorkResult.ExitCode)' != '0'
AND '$(DesignTimeBuild)' != 'true'"
File="%(QtWorkResult.Identity)" Code="%(QtWorkResult.ExitCode)"
Text="%(QtWorkResult.WorkType) (%(QtWorkResult.ToolPath))"/>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Add dynamic C++ sources to build
// -->
<ItemGroup>
<QtWork_ClCompile
Condition="'%(QtWorkResult.ExitCode)' == '0' AND '%(QtWorkResult.ClCompile)' != ''"
Include="@(QtWorkResult->'%(ClCompile)')"/>
<QtWork_ClCompile
Condition="Exists('$(QtVarsOutputDir)\qtvars_plugin_import.cpp')"
Include="$(QtVarsOutputDir)\qtvars_plugin_import.cpp"/>
</ItemGroup>
<ItemGroup Condition="'$(ApplicationType)' == 'Linux'">
<QtWork_ClCompile Condition="'%(QtWork_ClCompile.ObjectFileName)' == ''">
<ObjectFileName>$(IntDir)%(Filename).o</ObjectFileName>
</QtWork_ClCompile>
</ItemGroup>
<!-- // Copy default C++ compiler properties -->
<Expand Condition="'@(QtWork_ClCompile)' != ''"
Items="@(QtWork_ClCompile)"
BaseItem="@(ClCompile->WithMetadataValue('Identity', 'DefaultClCompile'))">
<Output TaskParameter="Result" ItemName="QtWork_ClCompile_Expanded"/>
</Expand>
<!-- // Force pre-compiled header include -->
<ItemGroup Condition="'$(ApplicationType)' != 'Linux'">
<QtWork_ClCompile_Expanded>
<AdditionalIncludeDirectories
>$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<ForcedIncludeFiles Condition="'%(PrecompiledHeader)' == 'Use'"
>%(PrecompiledHeaderFile)</ForcedIncludeFiles>
</QtWork_ClCompile_Expanded>
</ItemGroup>
<!-- // Add C++ source items and clean-up temp items -->
<ItemGroup>
<ClCompile Include="@(QtWork_ClCompile_Expanded)"/>
<QtWork_ClCompile_Expanded Remove="@(QtWork_ClCompile_Expanded)"/>
<QtWork_ClCompile Remove="@(QtWork_ClCompile)"/>
</ItemGroup>
<!--// If sources were manually selected (e.g. by the 'Compile' option in the context menu for
// project items), add generated C++ sources to the list of selected files -->
<PropertyGroup Condition="'$(SelectedFiles)' != ''">
<SelectedClCompile>@(QtWorkResult->'%(ClCompile)')</SelectedClCompile>
</PropertyGroup>
<PropertyGroup Condition="'$(SelectedClCompile)' != ''">
<SelectedFiles>$(SelectedFiles);$(SelectedClCompile)</SelectedFiles>
</PropertyGroup>
<ItemGroup Condition="'$(SelectedClCompile)' != ''">
<SelectedFiles Include="$(SelectedClCompile)"/>
</ItemGroup>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Update C++ sources with generated information
// -->
<PropertyGroup>
<QtIncludePath>@(QtIncludePath->Distinct())</QtIncludePath>
</PropertyGroup>
<ItemGroup>
<ClCompile_Updated Include="@(ClCompile)">
<AdditionalIncludeDirectories
>$(QtIncludePath);%(ClCompile.AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile_Updated>
<ClCompile Remove="@(ClCompile)"/>
<ClCompile Include="@(ClCompile_Updated)"/>
<ClCompile_Updated Remove="@(ClCompile_Updated)"/>
</ItemGroup>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Clean-up
// -->
<ItemGroup>
<QtWork Remove="@(QtWork)"/>
<QtWorkResult Remove="@(QtWorkResult)"/>
<QtWorkLog Remove="@(QtWorkLog)"/>
<read_log Remove="@(read_log)"/>
<write_log Remove="@(write_log)"/>
<clean_log Remove="@(clean_log)"/>
</ItemGroup>
</Target>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET Qt
/////////////////////////////////////////////////////////////////////////////////////////////////
// Root Qt target
// -->
<Target Name="Qt" DependsOnTargets="QtPrepare;QtWork" BeforeTargets="FixupCLCompileOptions">
<ItemGroup>
<ClCompile Remove="DefaultClCompile" />
</ItemGroup>
</Target>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtOuterBuild
/////////////////////////////////////////////////////////////////////////////////////////////////
// Run targets in $(QtOuterBuildDependsOn) and then recursively invoke build
// -->
<Target Name="QtOuterBuild" DependsOnTargets="$(QtOuterBuildDependsOn)">
<!--// Invoke inner build: recursive build in second MSBuild instance -->
<MSBuild
Projects="$(MSBuildProjectFullPath)"
Targets="Build"
Properties="QtInnerBuild=$(MSBuildProjectFullPath);RandomFileName=$(RandomFileName)">
</MSBuild>
</Target>
<PropertyGroup
Condition="'$(QtInnerBuild)' == '' AND '$(DesignTimeBuild)' != 'true'">
<!--// Outer build: invoke inner build -->
<BuildDependsOn>$(QtOuterBuildPrepare);QtOuterBuild;$(QtOuterBuildFinalize)</BuildDependsOn>
<QtInnerBuild>$(MSBuildProjectFullPath)</QtInnerBuild>
<RandomFileName>$([System.IO.Path]::GetRandomFileName())</RandomFileName>
</PropertyGroup>
<PropertyGroup
Condition="'$(QtInnerBuild)' != '$(MSBuildProjectFullPath)' AND '$(DesignTimeBuild)' != 'true'">
<!--// Dependent project inner build: skip build -->
<BuildDependsOn>$(QtOuterBuildPrepare);$(QtOuterBuildFinalize)</BuildDependsOn>
</PropertyGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt VS Tools.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
-->
<!--
///////////////////////////////////////////////////////////////////////////////////////////////////
// Qt/MSBuild moc property definitions
// -->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
// Import pre-requisites
// -->
<Import
Condition="'$(QtMsBuildProps_BeforeMoc)' != ''"
Project="$(QtMsBuildProps_BeforeMoc)"/>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
// QtMoc item template
// -->
<ItemDefinitionGroup>
<QtMoc>
<ExecutionDescription>moc %(Identity)</ExecutionDescription>
<QTDIR Condition="'$(QtVsProjectSettings)' != 'true'"
>$(QTDIR)</QTDIR>
<QTDIR Condition="'$(QtVsProjectSettings)' == 'true'"
>$(QtInstallDir)</QTDIR>
<InputFile>%(FullPath)</InputFile>
<OutputFile Condition="'$(QtVsProjectSettings)' != 'true'"
>$(ProjectDir)GeneratedFiles\$(Configuration)\moc_%(Filename).cpp</OutputFile>
<QtMocDir Condition="'$(QtVsProjectSettings)' == 'true'"
>$(IntDir)moc\</QtMocDir>
<QtMocFileName Condition="'$(QtVsProjectSettings)' == 'true'"
>moc_%(Filename).cpp</QtMocFileName>
<DynamicSource>output</DynamicSource>
<ParallelProcess>true</ParallelProcess>
<CommandLineTemplate>[AllOptions] [AdditionalOptions]</CommandLineTemplate>
<Outputs>%(OutputFile)</Outputs>
<OverrideClCompile>false</OverrideClCompile>
</QtMoc>
</ItemDefinitionGroup>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
// Import dependants
// -->
<Import
Condition="'$(QtMsBuildProps_AfterMoc)' != ''"
Project="$(QtMsBuildProps_AfterMoc)"/>
</Project>

View File

@ -0,0 +1,510 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
/****************************************************************************
**
** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt VS Tools.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
-->
<!--
///////////////////////////////////////////////////////////////////////////////////////////////////
// Definitions specific to moc
///////////////////////////////////////////////////////////////////////////////////////////////////
// -->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
// Import pre-requisites
// -->
<Import
Condition="'$(QtMsBuildTargets_BeforeMoc)' != ''"
Project="$(QtMsBuildTargets_BeforeMoc)"/>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
// Qt/MSBuild global properties
// -->
<PropertyGroup>
<QtBuildTargets>QtMoc;$(QtBuildTargets)</QtBuildTargets>
</PropertyGroup>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
// Setup item type and property page
// -->
<Choose>
<When Condition="'$(QtVsProjectSettings)' == 'true' AND '$(QtVsProjectClProperties)' == 'true'">
<ItemGroup>
<PropertyPageSchema
Include="$(MSBuildThisFileDirectory)qtmoc_v3.xml" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup Condition="'$(QtVsProjectSettings)' == 'false'">
<PropertyPageSchema
Include="$(MSBuildThisFileDirectory)qtmoc.xml" />
</ItemGroup>
</Otherwise>
</Choose>
<ItemGroup>
<AvailableItemName Include="QtMoc">
<Targets>Qt;_ClCompile</Targets>
</AvailableItemName>
</ItemGroup>
<PropertyGroup>
<QtMocRuleName>QtRule30_Moc</QtMocRuleName>
</PropertyGroup>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtMocInit
/////////////////////////////////////////////////////////////////////////////////////////////////
// Initialize default metadata
// -->
<Target Name="QtMocInit">
<!--// Initialize %(OutputFile) -->
<ItemGroup Condition="'$(QtVsProjectSettings)' == 'true' AND '@(QtMoc)' != ''">
<QtMocAux Include="@(QtMoc)">
<OutputFile
>$([System.IO.Path]::Combine('%(QtMoc.QtMocDir)','%(QtMoc.QtMocFileName)'))</OutputFile>
</QtMocAux>
<QtMoc Remove="@(QtMoc)"/>
<QtMoc Include="@(QtMocAux)"/>
<QtMocAux Remove="@(QtMocAux)"/>
</ItemGroup>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Add moc output dir to C++ include path
// -->
<ItemGroup Condition="'@(QtMoc)' != ''">
<QtIncludePath Include="$([System.IO.Path]::GetDirectoryName('%(QtMoc.OutputFile)'))"/>
</ItemGroup>
</Target>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtMocPrepare
/////////////////////////////////////////////////////////////////////////////////////////////////
// Prepare to process sources
// -->
<Target Name="QtMocPrepare" DependsOnTargets="_SelectedFiles;QtMocInit"
Inputs="%(QtMoc.Identity)" Outputs="@(QtMoc->'####### Don't skip this target #######')">
<Message Importance="High" Condition="'$(QtDebug)' == 'true'"
Text="## QtMocPrepare @(QtMoc)"/>
<PropertyGroup>
<selected_files>[@(SelectedFiles->'%(Identity)','][')]</selected_files>
<file>[@(QtMoc->'%(Identity)')]</file>
<output_file>@(QtMoc->'%(OutputFile)')</output_file>
<is_selected Condition="$(selected_files.Contains('$(file)'))">true</is_selected>
<is_selected Condition="!$(selected_files.Contains('$(file)'))">false</is_selected>
</PropertyGroup>
<!--// Delete output file to force build of source if it was manually selected to build
// (e.g. by the 'Compile' option in the context menu for the file) -->
<Delete Files="$(output_file)"
Condition="'$(SelectedFiles)' != '' AND '$(is_selected)' == 'true'" />
<!--// If a source was manually selected to build, remove all other sources -->
<ItemGroup Condition="'@(SelectedFiles)' != ''">
<QtMoc Remove="@(QtMoc)"
Condition="'$(SelectedFiles)' != '' AND '$(is_selected)' != 'true'" />
</ItemGroup>
<!--// Remove sources excluded from build -->
<ItemGroup>
<QtMoc Remove="@(QtMoc)"
Condition="'$(SelectedFiles)' == '' AND '%(QtMoc.ExcludedFromBuild)' == 'true'"/>
</ItemGroup>
<PropertyGroup>
<selected_files/>
<file/>
<output_file/>
<is_selected/>
</PropertyGroup>
</Target>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtMocSetModified
/////////////////////////////////////////////////////////////////////////////////////////////////
// Set InputChanged flag if source file or dependencies have been modified
// -->
<Target Name="QtMocSetModified" DependsOnTargets="QtMocPrepare"
Condition="'@(QtMoc)' != ''"
Inputs="%(QtMoc.FullPath);%(QtMoc.AdditionalDependencies)" Outputs="@(QtMoc->'%(OutputFile)')">
<Message Importance="High" Condition="'$(QtDebug)' == 'true'"
Text="## QtMocSetModified @(QtMoc)" />
<CreateProperty Value="true">
<Output TaskParameter="ValueSetByTask" PropertyName="input_changed" />
</CreateProperty>
<ItemGroup>
<QtMoc>
<InputChanged>$(input_changed)</InputChanged>
</QtMoc>
</ItemGroup>
</Target>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtMocOverrideCpp
/////////////////////////////////////////////////////////////////////////////////////////////////
//
// -->
<Import Project="qtmoc_cl.targets"/>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
/// TARGET QtMoc
/////////////////////////////////////////////////////////////////////////////////////////////////
// Process each source file and produce the corresponding QtWork items
// -->
<PropertyGroup>
<QtMocDependsOn>
QtPrepare;
QtMocPrepare;
QtMocSetModified;
QtMocOverrideCpp;
$(QtMocDependsOn)
</QtMocDependsOn>
</PropertyGroup>
<Target Name="QtMoc"
DependsOnTargets="$(QtMocDependsOn)"
BeforeTargets="$(QtMocBeforeTargets)" AfterTargets="$(QtMocAfterTargets)"
Condition="'@(QtMoc)' != ''"
Inputs="%(QtMoc.FullPath);%(QtMoc.AdditionalDependencies);$(MSBuildProjectFile)"
Outputs="@(QtMoc->'%(OutputFile)')">
<Message Importance="High" Condition="'$(QtDebug)' == 'true'" Text="## QtMoc @(QtMoc)" />
<CreateProperty Value="true">
<Output TaskParameter="ValueSetByTask" PropertyName="dependencies_changed" />
</CreateProperty>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Convert string lists in source item properties to lists of items
// -->
<Flatten Items="@(QtMoc)"
Metadata="InputFile;
OutputFile;
IncludePath;
MacFramework;
PreprocessOnly;
Define;
Undefine;
Metadata;
CompilerFlavor;
NoInclude;
PathPrefix;
ForceInclude;
PrependInclude;
Include;
NoNotesWarnings;
NoNotes;
NoWarnings;
IgnoreConflicts;
OptionsFile">
<Output
TaskParameter="Result" ItemName="options" />
</Flatten>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Translate local paths to build host paths
// -->
<HostTranslatePaths
Items="@(options)"
Names="InputFile;
OutputFile;
IncludePath;
MacFramework;
PathPrefix;
ForceInclude;
PrependInclude;
Include;
OptionsFile">
<Output
TaskParameter="Result" ItemName="HostPath" />
</HostTranslatePaths>
<ItemGroup>
<options Condition="'%(Identity)' != ''">
<Value>@(HostPath->'%(Value)')</Value>
</options>
</ItemGroup>
<ItemGroup>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////
// Escape double-quotes in macro definitions
// -->
<options>
<Value Condition="('%(Name)' == 'Define' OR '%(Name)' == 'Undefine')
AND ($([System.String]::Copy('%(Value)').Contains(' '))
OR $([System.String]::Copy('%(Value)').Contains('&quot;')))"
> &quot;$([System.String]::Copy('%(Value)').Replace('&quot;', '\&quot;'))&quot;</Value>
</options>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////
// Remove quotes from all paths
// Escape trailing back-slash in paths
// Add quotes to paths containing spaces
// -->
<options>
<Value Condition="'%(Name)' == 'InputFile' OR '%(Name)' == 'OutputFile'
OR '%(Name)' == 'IncludePath' OR '%(Name)' == 'MacFramework' OR '%(Name)' == 'PathPrefix'
OR '%(Name)' == 'ForceInclude' OR '%(Name)' == 'PrependInclude' OR '%(Name)' == 'Include'
OR '%(Name)' == 'OptionsFile'"
>$([System.String]::Copy('%(Value)').Replace('&quot;', ''))</Value>
</options>
<options>
<Value Condition="('%(Name)' == 'InputFile' OR '%(Name)' == 'OutputFile'
OR '%(Name)' == 'IncludePath' OR '%(Name)' == 'MacFramework' OR '%(Name)' == 'PathPrefix'
OR '%(Name)' == 'ForceInclude' OR '%(Name)' == 'PrependInclude' OR '%(Name)' == 'Include'
OR '%(Name)' == 'OptionsFile')
AND $([System.String]::Copy('%(Value)').Contains(' '))
AND $([System.String]::Copy('%(Value)').EndsWith('\'))"
>%(Value)\</Value>
</options>
<options>
<Value Condition="('%(Name)' == 'InputFile' OR '%(Name)' == 'OutputFile'
OR '%(Name)' == 'IncludePath' OR '%(Name)' == 'MacFramework' OR '%(Name)' == 'PathPrefix'
OR '%(Name)' == 'ForceInclude' OR '%(Name)' == 'PrependInclude' OR '%(Name)' == 'Include'
OR '%(Name)' == 'OptionsFile')
AND $([System.String]::Copy('%(Value)').Contains(' '))"
>&quot;%(Value)&quot;</Value>
</options>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Generate tool command line arguments
// -->
<!--// [header-file] Header file to read from -->
<options>
<Value Condition="'%(Name)' == 'InputFile'">%(Value)</Value>
</options>
<!--// -o <file> Write output to file -->
<options>
<Value Condition="'%(Name)' == 'OutputFile'">-o %(Value)</Value>
</options>
<!--// -I <dir> Add dir to the include path for header files -->
<options>
<Value Condition="'%(Name)' == 'IncludePath'">-I%(Value)</Value>
</options>
<!--// -F <framework> Add macOS framework to the include path for headers -->
<options>
<Value Condition="'%(Name)' == 'MacFramework'">-F %(Value)</Value>
</options>
<!--// -E Preprocess only; do not generate meta object code -->
<options>
<Value Condition="'%(Name)' == 'PreprocessOnly' AND '%(Value)' != 'true'"></Value>
</options>
<options>
<Value Condition="'%(Name)' == 'PreprocessOnly' AND '%(Value)' == 'true'">-E</Value>
</options>
<!--// -D <macro[=def]> Define macro, with optional definition -->
<options>
<Value Condition="'%(Name)' == 'Define'">-D%(Value)</Value>
</options>
<!--// -U <macro> Undefine macro-->
<options>
<Value Condition="'%(Name)' == 'Undefine'">-U%(Value)</Value>
</options>
<!--// -M <key=value> Add key/value pair to plugin meta data -->
<options>
<Value Condition="'%(Name)' == 'Metadata'">-M%(Value)</Value>
</options>
<!--// -compiler-flavor <flavor> Set the compiler flavor: either "msvc" or "unix" -->
<options>
<Value Condition="'%(Name)' == 'CompilerFlavor'">--compiler-flavor %(Value)</Value>
</options>
<!--// -i Do not generate an #include statement -->
<options>
<Value Condition="'%(Name)' == 'NoInclude' AND '%(Value)' != 'true'"></Value>
</options>
<options>
<Value Condition="'%(Name)' == 'NoInclude' AND '%(Value)' == 'true'">-i</Value>
</options>
<!--// -p <path> Path prefix for included file -->
<options>
<Value Condition="'%(Name)' == 'PathPrefix'">-p%(Value)</Value>
</options>
<!--// -f <file> Force #include <file> (overwrite default) -->
<options>
<Value Condition="'%(Name)' == 'ForceInclude'">-f %(Value)</Value>
</options>
<!--// -b <file> Prepend #include <file> (preserve default include) -->
<options>
<Value Condition="'%(Name)' == 'PrependInclude'">-b %(Value)</Value>
</options>
<!--// -include <file> Parse <file> as an #include before the main source(s) -->
<options>
<Value Condition="'%(Name)' == 'Include'">--include %(Value)</Value>
</options>
<!--// -n <which> Do not display notes (-nn) or warnings (-nw) -->
<options>
<Value Condition="'%(Name)' == 'NoNotesWarnings'">-n%(Value)</Value>
</options>
<!--// -no-notes Do not display notes -->
<options>
<Value Condition="'%(Name)' == 'NoNotes' AND '%(Value)' != 'true'"></Value>
</options>
<options>
<Value Condition="'%(Name)' == 'NoNotes' AND '%(Value)' == 'true'">--no-notes</Value>
</options>
<!--// -no-warnings Do not display warnings (implies -no-notes) -->
<options>
<Value Condition="'%(Name)' == 'NoWarnings' AND '%(Value)' != 'true'"></Value>
</options>
<options>
<Value Condition="'%(Name)' == 'NoWarnings' AND '%(Value)' == 'true'">--no-warnings</Value>
</options>
<!--// -ignore-option-clashes Ignore all options that conflict with compilers -->
<options>
<Value Condition="'%(Name)' == 'IgnoreConflicts' AND '%(Value)' != 'true'"></Value>
</options>
<options>
<Value Condition="'%(Name)' == 'IgnoreConflicts' AND '%(Value)' == 'true'"
>--ignore-option-clashes</Value>
</options>
<!--// [@option-file] Read additional options from option-file-->
<options>
<Value Condition="'%(Name)' == 'OptionsFile'">@%(Value)</Value>
</options>
</ItemGroup>
<PropertyGroup>
<options>@(options->'%(Value)', ' ')</options>
</PropertyGroup>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Aux properties
// -->
<PropertyGroup>
<!--// Force modified flag if source was manually selected to build -->
<input_changed Condition="'$(SelectedFiles)' != ''"
>true</input_changed>
<input_changed Condition="'$(SelectedFiles)' == ''"
>%(QtMoc.InputChanged)</input_changed>
<!--// Run work in parallel processes -->
<run_parallel Condition="'@(QtMoc)' != ''
AND '%(QtMoc.ParallelProcess)' == 'true'
AND '$(SelectedFiles)' == ''"
>true</run_parallel>
<!--// Run work in single process -->
<run_single Condition="'@(QtMoc)' != ''
AND ('%(QtMoc.ParallelProcess)' != 'true'
OR '$(SelectedFiles)' != '')"
>true</run_single>
<!--// Get relative path to output -->
<output_relative
>$([MSBuild]::MakeRelative($(ProjectDir), %(QtMoc.OutputFile)).TrimStart('\'))</output_relative>
<!--// Get relative path to input -->
<input_relative
>$([MSBuild]::MakeRelative($(ProjectDir), %(QtMoc.InputFile)).TrimStart('\'))</input_relative>
</PropertyGroup>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Create work item
// -->
<ItemGroup Condition="'$(run_parallel)' == 'true' OR '$(run_single)' == 'true'">
<QtWork Include="@(QtMoc)">
<WorkType>moc</WorkType>
<ToolPath Condition="'$(QtVsProjectSettings)' == 'true'"
>$(QtToolsPath)/moc</ToolPath>
<ToolPath Condition="'$(QtVsProjectSettings)' != 'true'"
>%(QtMoc.QTDIR)\bin\moc.exe</ToolPath>
<Options>$(options)</Options>
<Message>%(QtMoc.ExecutionDescription)</Message>
<DependenciesChanged>$(dependencies_changed)</DependenciesChanged>
<InputChanged>$(input_changed)</InputChanged>
<ParallelBuild Condition="'$(run_parallel)' == 'true'">true</ParallelBuild>
<ParallelBuild Condition="'$(run_single)' == 'true'">false</ParallelBuild>
<!--
///////////////////////////////////////////////////////////////////////////////////////////
// C++ dynamic source -->
<ClCompile Condition="'%(QtMoc.DynamicSource)' == 'output'">$(output_relative)</ClCompile>
<ClCompile Condition="'%(QtMoc.DynamicSource)' == 'input'">$(input_relative)</ClCompile>
</QtWork>
</ItemGroup>
<!--
///////////////////////////////////////////////////////////////////////////////////////////////
// Clean-up
// -->
<PropertyGroup>
<options/>
<dependencies_changed/>
<input_changed/>
<run_parallel/>
<run_single/>
<output_relative/>
<input_relative/>
</PropertyGroup>
<ItemGroup>
<options Remove="@(options)"/>
</ItemGroup>
</Target>
<!--
/////////////////////////////////////////////////////////////////////////////////////////////////
// Import dependants
// -->
<Import
Condition="'$(QtMsBuildTargets_AfterMoc)' != ''"
Project="$(QtMsBuildTargets_AfterMoc)"/>
</Project>

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
*****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt VS Tools.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
*****************************************************************************
-->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="QtMocOverrideCpp" DependsOnTargets="QtMocPrepare;QtGetDefaultClCompile"
Inputs="%(QtMoc.Identity)" Outputs="@(QtMoc->'####### Don't skip this target #######')">
<Message Importance="High" Condition="'$(QtDebug)' == 'true'"
Text="## QtMocOverrideCpp @(QtMoc)" />
<!--
NOTE: This implementation was a template, which has been manually edited
for dolphin-emu specific behavior (carries over defines but not includes)
-->
<ItemGroup>
<QtMoc>
<IncludePath></IncludePath>
<Define>%(ClCompile.PreprocessorDefinitions)</Define>
<Undefine></Undefine>
</QtMoc>
</ItemGroup>
</Target>
</Project>