Beispiel #1
0
        /// <summary>
        /// Creates a rules assembly with the given parameters.
        /// </summary>
        /// <param name="PluginFileName">The plugin file to create rules for</param>
        /// <param name="bSkipCompile">Whether to skip compilation for this assembly</param>
        /// <param name="Parent">The parent rules assembly</param>
        /// <param name="bContainsEngineModules">Whether the plugin contains engine modules. Used to initialize the default value for ModuleRules.bTreatAsEngineModule.</param>
        /// <returns>The new rules assembly</returns>
        public static RulesAssembly CreatePluginRulesAssembly(FileReference PluginFileName, bool bSkipCompile, RulesAssembly Parent, bool bContainsEngineModules)
        {
            // Check if there's an existing assembly for this project
            RulesAssembly PluginRulesAssembly;

            if (!LoadedAssemblyMap.TryGetValue(PluginFileName, out PluginRulesAssembly))
            {
                // Find all the rules source files
                List <FileReference> ModuleFiles = new List <FileReference>();
                List <FileReference> TargetFiles = new List <FileReference>();

                // Create a list of plugins for this assembly. If it already exists in the parent assembly, just create an empty assembly.
                List <PluginInfo> ForeignPlugins = new List <PluginInfo>();
                if (Parent == null || !Parent.EnumeratePlugins().Any(x => x.File == PluginFileName))
                {
                    ForeignPlugins.Add(new PluginInfo(PluginFileName, PluginType.External));
                }

                // Find all the modules
                Dictionary <FileReference, PluginInfo> ModuleFileToPluginInfo = new Dictionary <FileReference, PluginInfo>();
                FindModuleRulesForPlugins(ForeignPlugins, ModuleFiles, ModuleFileToPluginInfo);

                // Compile the assembly
                FileReference AssemblyFileName = FileReference.Combine(PluginFileName.Directory, "Intermediate", "Build", "BuildRules", Path.GetFileNameWithoutExtension(PluginFileName.FullName) + "ModuleRules" + FrameworkAssemblyExtension);
                PluginRulesAssembly = new RulesAssembly(PluginFileName.Directory, ForeignPlugins, ModuleFiles, TargetFiles, ModuleFileToPluginInfo, AssemblyFileName, bContainsEngineModules, bUseBackwardsCompatibleDefaults: false, bReadOnly: false, bSkipCompile: bSkipCompile, Parent: Parent);
                LoadedAssemblyMap.Add(PluginFileName, PluginRulesAssembly);
            }
            return(PluginRulesAssembly);
        }
        /// <summary>
        /// Creates a rules assembly with the given parameters.
        /// </summary>
        /// <param name="ProjectFileName">The project file to create rules for. Null for the engine.</param>
        /// <param name="ForeignPlugins">List of foreign plugin folders to include in the assembly. May be null.</param>
        public static RulesAssembly CreatePluginRulesAssembly(FileReference PluginFileName, RulesAssembly Parent)
        {
            // Check if there's an existing assembly for this project
            RulesAssembly PluginRulesAssembly;

            if (!LoadedAssemblyMap.TryGetValue(PluginFileName, out PluginRulesAssembly))
            {
                // Find all the rules source files
                List <FileReference> ModuleFiles = new List <FileReference>();
                List <FileReference> TargetFiles = new List <FileReference>();

                // Create a list of plugins for this assembly. If it already exists in the parent assembly, just create an empty assembly.
                List <PluginInfo> ForeignPlugins = new List <PluginInfo>();
                if (Parent == null || !Parent.EnumeratePlugins().Any(x => x.File == PluginFileName))
                {
                    ForeignPlugins.Add(new PluginInfo(PluginFileName, PluginLoadedFrom.GameProject));
                }

                // Find all the modules
                Dictionary <FileReference, PluginInfo> ModuleFileToPluginInfo = new Dictionary <FileReference, PluginInfo>();
                FindModuleRulesForPlugins(ForeignPlugins, ModuleFiles, ModuleFileToPluginInfo);

                // Compile the assembly
                FileReference AssemblyFileName = FileReference.Combine(PluginFileName.Directory, BuildConfiguration.BaseIntermediateFolder, "BuildRules", Path.GetFileNameWithoutExtension(PluginFileName.FullName) + "ModuleRules.dll");
                PluginRulesAssembly = new RulesAssembly(ForeignPlugins, ModuleFiles, TargetFiles, ModuleFileToPluginInfo, AssemblyFileName, Parent);
                LoadedAssemblyMap.Add(PluginFileName, PluginRulesAssembly);
            }
            return(PluginRulesAssembly);
        }
Beispiel #3
0
        /// <summary>
        /// Creates a rules assembly with the given parameters.
        /// </summary>
        /// <param name="PluginFileName">The plugin file to create rules for</param>
        /// <param name="bSkipCompile">Whether to skip compilation for this assembly</param>
        /// <param name="Parent">The parent rules assembly</param>
        /// <param name="bContainsEngineModules">Whether the plugin contains engine modules. Used to initialize the default value for ModuleRules.bTreatAsEngineModule.</param>
        /// <returns>The new rules assembly</returns>
        public static RulesAssembly CreatePluginRulesAssembly(FileReference PluginFileName, bool bSkipCompile, RulesAssembly Parent, bool bContainsEngineModules)
        {
            // Check if there's an existing assembly for this project
            RulesAssembly PluginRulesAssembly;

            if (!LoadedAssemblyMap.TryGetValue(PluginFileName, out PluginRulesAssembly))
            {
                // Find all the rules source files
                Dictionary <FileReference, ModuleRulesContext> ModuleFiles = new Dictionary <FileReference, ModuleRulesContext>();
                List <FileReference> TargetFiles = new List <FileReference>();

                // Create a list of plugins for this assembly. If it already exists in the parent assembly, just create an empty assembly.
                List <PluginInfo> ForeignPlugins = new List <PluginInfo>();
                if (Parent == null || !Parent.EnumeratePlugins().Any(x => x.File == PluginFileName))
                {
                    ForeignPlugins.Add(new PluginInfo(PluginFileName, PluginType.External));
                }

                // Create a new scope for the plugin. It should not reference anything else.
                RulesScope Scope = new RulesScope("Plugin", Parent.Scope);

                // Find all the modules
                ModuleRulesContext PluginModuleContext = new ModuleRulesContext(Scope, PluginFileName.Directory);
                PluginModuleContext.bClassifyAsGameModuleForUHT = !bContainsEngineModules;
                FindModuleRulesForPlugins(ForeignPlugins, PluginModuleContext, ModuleFiles);

                // Compile the assembly
                FileReference AssemblyFileName = FileReference.Combine(PluginFileName.Directory, "Intermediate", "Build", "BuildRules", Path.GetFileNameWithoutExtension(PluginFileName.FullName) + "ModuleRules" + FrameworkAssemblyExtension);
                PluginRulesAssembly = new RulesAssembly(Scope, new List <DirectoryReference> {
                    PluginFileName.Directory
                }, ForeignPlugins, ModuleFiles, TargetFiles, AssemblyFileName, bContainsEngineModules, DefaultBuildSettings: null, bReadOnly: false, bSkipCompile: bSkipCompile, Parent: Parent);
                LoadedAssemblyMap.Add(PluginFileName, PluginRulesAssembly);
            }
            return(PluginRulesAssembly);
        }
		/// <summary>
		/// Creates a rules assembly with the given parameters.
		/// </summary>
		/// <param name="ProjectFileName">The project file to create rules for. Null for the engine.</param>
		/// <param name="ForeignPlugins">List of foreign plugin folders to include in the assembly. May be null.</param>
		public static RulesAssembly CreatePluginRulesAssembly(FileReference PluginFileName, RulesAssembly Parent)
		{
			// Check if there's an existing assembly for this project
			RulesAssembly PluginRulesAssembly;
			if (!LoadedAssemblyMap.TryGetValue(PluginFileName, out PluginRulesAssembly))
			{
				// Find all the rules source files
				List<FileReference> ModuleFiles = new List<FileReference>();
				List<FileReference> TargetFiles = new List<FileReference>();

				// Create a list of plugins for this assembly. If it already exists in the parent assembly, just create an empty assembly.
				List<PluginInfo> ForeignPlugins = new List<PluginInfo>();
				if (Parent == null || !Parent.EnumeratePlugins().Any(x => x.File == PluginFileName))
				{
					ForeignPlugins.Add(new PluginInfo(PluginFileName, PluginLoadedFrom.GameProject));
				}

				// Find all the modules
				Dictionary<FileReference, PluginInfo> ModuleFileToPluginInfo = new Dictionary<FileReference, PluginInfo>();
				FindModuleRulesForPlugins(ForeignPlugins, ModuleFiles, ModuleFileToPluginInfo);

				// Compile the assembly
				FileReference AssemblyFileName = FileReference.Combine(PluginFileName.Directory, BuildConfiguration.BaseIntermediateFolder, "BuildRules", Path.GetFileNameWithoutExtension(PluginFileName.FullName) + "ModuleRules.dll");
				PluginRulesAssembly = new RulesAssembly(ForeignPlugins, ModuleFiles, TargetFiles, ModuleFileToPluginInfo, AssemblyFileName, Parent);
				LoadedAssemblyMap.Add(PluginFileName, PluginRulesAssembly);
			}
			return PluginRulesAssembly;
		}