From e2c50e9c77114e2e46fbba8135771d7505df2b30 Mon Sep 17 00:00:00 2001 From: Mamadou Babaei Date: Tue, 11 Feb 2025 17:13:04 +0100 Subject: [PATCH] add SetupMetaXRAvailability during the build time to define WITH_METAXR --- .../SenseGloveTracking.Build.cs | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/Source/SenseGloveTracking/SenseGloveTracking.Build.cs b/Source/SenseGloveTracking/SenseGloveTracking.Build.cs index 44764c2c..fee0ab22 100644 --- a/Source/SenseGloveTracking/SenseGloveTracking.Build.cs +++ b/Source/SenseGloveTracking/SenseGloveTracking.Build.cs @@ -33,7 +33,9 @@ */ +using EpicGames.Core; using System; +using System.Diagnostics; using System.IO; using UnrealBuildTool; @@ -104,5 +106,87 @@ public class SenseGloveTracking : ModuleRules ); AddEngineThirdPartyPrivateStaticDependencies(Target, "OpenXR"); + + SetupMetaXRAvailability(Target); + } + + private string FindPluginPath(string PluginName) + { + string[] PossiblePluginDirs = new string[] + { + Path.Combine(EngineDirectory, "Plugins"), + Path.Combine(EngineDirectory, "Plugins", "Marketplace"), + Path.Combine(ModuleDirectory, "..", "..", "..", "..", "Plugins"), + }; + + foreach (string BaseDir in PossiblePluginDirs) + { + string PluginDir = Path.Combine(BaseDir, PluginName); + if (Directory.Exists(PluginDir)) + { + return PluginDir; + } + } + + return string.Empty; + } + + private void SetupMetaXRAvailability(ReadOnlyTargetRules Target) + { + const string MetaXRFriendlyName = "MetaXR"; + const string MetaXRPluginName = "OculusXR"; + + PublicDefinitions.Add("WITH_METAXR=0"); + + if (JsonObject.TryRead(Target.ProjectFile, out var UProjectRawObject)) + { + if (UProjectRawObject.TryGetObjectArrayField("Plugins", out var PluginsObject)) + { + foreach (JsonObject PluginObject in PluginsObject) + { + PluginObject.TryGetStringField("Name", out var PluginName); + PluginObject.TryGetBoolField("Enabled", out var PluginEnabled); + + if (PluginName == MetaXRPluginName && PluginEnabled) + { + string MetaXRDir = Path.GetFullPath(FindPluginPath(MetaXRFriendlyName)); + if (MetaXRDir == string.Empty) + { + Debug.Assert(false, "Cannot find the MetaXRDir!"); + } + + string MetaXRSourceDir = Path.Combine(MetaXRDir, "Source"); + string OculusXRHMDDir = Path.Combine(MetaXRSourceDir, "OculusXRInput"); + string OculusXRHMDPrivateIncludeDir = Path.Combine(OculusXRHMDDir, "Private"); + string OculusXRInputDir = Path.Combine(MetaXRSourceDir, "OculusXRHMD"); + string OculusXRInputPrivateIncludeDir = Path.Combine(OculusXRInputDir, "Private"); + + string MetaXRThirdPartyDir = Path.Combine(MetaXRSourceDir, "ThirdParty"); + string OVRPluginIncludeDir = + Path.Combine(MetaXRThirdPartyDir, "OVRPlugin", "OVRPlugin", "Include"); + + PrivateIncludePaths.AddRange( + new string[] + { + OculusXRHMDPrivateIncludeDir, + OculusXRInputPrivateIncludeDir, + OVRPluginIncludeDir, + } + ); + + PrivateIncludePathModuleNames.AddRange( + new string[] + { + "OculusXRHMD", + "OculusXRInput", + } + ); + + PublicDefinitions.Remove("WITH_METAXR=0"); + PublicDefinitions.Add("WITH_METAXR=1"); + } + } + } + } } } \ No newline at end of file