| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 | // Copyright aXiuShen. All Rights Reserved.using UnrealBuildTool;using System;using System.IO;using System.Text;using System.Collections.Generic;public class CefBrowser : ModuleRules{    public CefBrowser(ReadOnlyTargetRules Target) : base(Target)    {        CheckLicense(Path.GetDirectoryName(Target.ProjectFile.ToString()));        Type = ModuleType.External;        PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "include"));        string LibType;        string platform_bin;        if (Target.bBuildEditor == true)        {            LibType = "Editor";        }        else if (Target.Configuration == UnrealTargetConfiguration.Development ||            Target.Configuration == UnrealTargetConfiguration.Shipping)        {            LibType = Target.Configuration.ToString();        }        else        {            return;        }        MergeFile(ModuleDirectory);        platform_bin = Path.Combine(ModuleDirectory, "Binaries", Target.Platform.ToString(), LibType);        if (!Directory.Exists(platform_bin)) Directory.CreateDirectory(platform_bin);        foreach (string FileName in Directory.EnumerateFiles(platform_bin, "*.lib", SearchOption.TopDirectoryOnly))        {            PublicAdditionalLibraries.Add(FileName);        }        foreach (string FileName in Directory.EnumerateFiles(platform_bin, "*.dll", SearchOption.TopDirectoryOnly))        {            PublicDelayLoadDLLs.Add(System.IO.Path.GetFileName(FileName));            RuntimeDependencies.Add(FileName);        }        foreach (string FileName in Directory.EnumerateFiles(platform_bin, "*.so", SearchOption.TopDirectoryOnly))        {            PublicAdditionalLibraries.Add(FileName);        }        foreach (string FileName in Directory.EnumerateFiles(platform_bin, "*.a", SearchOption.TopDirectoryOnly))        {            PublicAdditionalLibraries.Add(FileName);        }        return;    }    void MergeFile(string PathRoot)    {        string split = ".split";        // merge file        Dictionary<string, Dictionary<int, string>> mapFile = new Dictionary<string, Dictionary<int, string>>();        foreach (string FileName in Directory.EnumerateFiles(PathRoot, "*" + split, SearchOption.AllDirectories))        {            string file = Path.GetFileName(FileName);            string filePath = Path.GetDirectoryName(FileName);            if (!filePath.EndsWith(".dir")) continue;            string splitName = Path.GetFileName(filePath).Replace(".dir", "");            string splitPath = Path.GetDirectoryName(filePath);            string splitPN = Path.Combine(splitPath, splitName);            if (File.Exists(splitPN)) continue;            if (!mapFile.ContainsKey(splitPN))                mapFile.Add(splitPN, new Dictionary<int, string>());            int idx = int.Parse(file.Replace(split, ""));            mapFile[splitPN].Add(idx, FileName);        }        const int maxBuff = 1024 * 1024 * 100;        byte[] readBuff = new byte[maxBuff];//        foreach (KeyValuePair<string, Dictionary<int, string>> kvp in mapFile)        {            if (kvp.Value.Count == 0) continue;            FileStream fileDst = new FileStream(kvp.Key, FileMode.OpenOrCreate);            for (int index = 1; index <= kvp.Value.Count; index++)            {                string filePathSplit = kvp.Value[index];                FileStream fileSrc = new FileStream(filePathSplit, FileMode.Open);                long fileSize = fileSrc.Length;                while (0 < fileSize)                {                    int readLen = fileSrc.Read(readBuff, 0, maxBuff);                    fileDst.Write(readBuff, 0, readLen);                    fileSize -= readLen;                }            }        }    }    void CheckLicense(string ProjectDir)    {        string licensePath = Path.Combine(ProjectDir, "Content", "license");        if (!Directory.Exists(licensePath))        {            Directory.CreateDirectory(licensePath);        }        string GamePath = Path.Combine(ProjectDir, "Config");        string GameCfg = Path.Combine(GamePath, "DefaultGame.ini");        if (!Directory.Exists(GamePath))        {            Directory.CreateDirectory(GamePath);        }        if (!File.Exists(GameCfg))        {            File.Create(GameCfg);        }        string content;        try { content = File.ReadAllText(GameCfg/*, Encoding.UTF8*/); }        catch        {//            return;        }        string licenseDst = "+DirectoriesToAlwaysStageAsUFS=(Path=\"license\")";        string licenseSrc = "-DirectoriesToAlwaysStageAsUFS=(Path=\"license\")";        string licenseNode = "[/Script/UnrealEd.ProjectPackagingSettings]";        if (content.Contains(licenseNode))        {            if (content.Contains(licenseDst))            {                Console.WriteLine(GameCfg + " has configure!");                return;//            }            else if (content.Contains(licenseSrc))            {                content = content.Replace(licenseSrc, licenseDst + "\n");            }            else                content = content.Replace(licenseNode, licenseNode + "\n" + licenseDst);        }        else        {            content += "\n\n" + licenseNode + "\n" + licenseDst;        }        File.WriteAllText(GameCfg, content, Encoding.UTF8);        Console.WriteLine(GameCfg + " auto configure!");    }}
 |