CefBrowser.Build.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. // Copyright aXiuShen. All Rights Reserved.
  2. using UnrealBuildTool;
  3. using System;
  4. using System.IO;
  5. using System.Text;
  6. using System.Collections.Generic;
  7. public class CefBrowser : ModuleRules
  8. {
  9. public CefBrowser(ReadOnlyTargetRules Target) : base(Target)
  10. {
  11. CheckLicense(Path.GetDirectoryName(Target.ProjectFile.ToString()));
  12. Type = ModuleType.External;
  13. PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "include"));
  14. string LibType;
  15. string platform_bin;
  16. if (Target.bBuildEditor == true)
  17. {
  18. LibType = "Editor";
  19. }
  20. else if (Target.Configuration == UnrealTargetConfiguration.Development ||
  21. Target.Configuration == UnrealTargetConfiguration.Shipping)
  22. {
  23. LibType = Target.Configuration.ToString();
  24. }
  25. else
  26. {
  27. return;
  28. }
  29. MergeFile(ModuleDirectory);
  30. platform_bin = Path.Combine(ModuleDirectory, "Binaries", Target.Platform.ToString(), LibType);
  31. if (!Directory.Exists(platform_bin)) Directory.CreateDirectory(platform_bin);
  32. foreach (string FileName in Directory.EnumerateFiles(platform_bin, "*.lib", SearchOption.TopDirectoryOnly))
  33. {
  34. PublicAdditionalLibraries.Add(FileName);
  35. }
  36. foreach (string FileName in Directory.EnumerateFiles(platform_bin, "*.dll", SearchOption.TopDirectoryOnly))
  37. {
  38. PublicDelayLoadDLLs.Add(System.IO.Path.GetFileName(FileName));
  39. RuntimeDependencies.Add(FileName);
  40. }
  41. foreach (string FileName in Directory.EnumerateFiles(platform_bin, "*.so", SearchOption.TopDirectoryOnly))
  42. {
  43. PublicAdditionalLibraries.Add(FileName);
  44. }
  45. foreach (string FileName in Directory.EnumerateFiles(platform_bin, "*.a", SearchOption.TopDirectoryOnly))
  46. {
  47. PublicAdditionalLibraries.Add(FileName);
  48. }
  49. return;
  50. }
  51. void MergeFile(string PathRoot)
  52. {
  53. string split = ".split";
  54. // merge file
  55. Dictionary<string, Dictionary<int, string>> mapFile = new Dictionary<string, Dictionary<int, string>>();
  56. foreach (string FileName in Directory.EnumerateFiles(PathRoot, "*" + split, SearchOption.AllDirectories))
  57. {
  58. string file = Path.GetFileName(FileName);
  59. string filePath = Path.GetDirectoryName(FileName);
  60. if (!filePath.EndsWith(".dir")) continue;
  61. string splitName = Path.GetFileName(filePath).Replace(".dir", "");
  62. string splitPath = Path.GetDirectoryName(filePath);
  63. string splitPN = Path.Combine(splitPath, splitName);
  64. if (File.Exists(splitPN)) continue;
  65. if (!mapFile.ContainsKey(splitPN))
  66. mapFile.Add(splitPN, new Dictionary<int, string>());
  67. int idx = int.Parse(file.Replace(split, ""));
  68. mapFile[splitPN].Add(idx, FileName);
  69. }
  70. const int maxBuff = 1024 * 1024 * 100;
  71. byte[] readBuff = new byte[maxBuff];//
  72. foreach (KeyValuePair<string, Dictionary<int, string>> kvp in mapFile)
  73. {
  74. if (kvp.Value.Count == 0) continue;
  75. FileStream fileDst = new FileStream(kvp.Key, FileMode.OpenOrCreate);
  76. for (int index = 1; index <= kvp.Value.Count; index++)
  77. {
  78. string filePathSplit = kvp.Value[index];
  79. FileStream fileSrc = new FileStream(filePathSplit, FileMode.Open);
  80. long fileSize = fileSrc.Length;
  81. while (0 < fileSize)
  82. {
  83. int readLen = fileSrc.Read(readBuff, 0, maxBuff);
  84. fileDst.Write(readBuff, 0, readLen);
  85. fileSize -= readLen;
  86. }
  87. }
  88. }
  89. }
  90. void CheckLicense(string ProjectDir)
  91. {
  92. string licensePath = Path.Combine(ProjectDir, "Content", "license");
  93. if (!Directory.Exists(licensePath))
  94. {
  95. Directory.CreateDirectory(licensePath);
  96. }
  97. string GamePath = Path.Combine(ProjectDir, "Config");
  98. string GameCfg = Path.Combine(GamePath, "DefaultGame.ini");
  99. if (!Directory.Exists(GamePath))
  100. {
  101. Directory.CreateDirectory(GamePath);
  102. }
  103. if (!File.Exists(GameCfg))
  104. {
  105. File.Create(GameCfg);
  106. }
  107. string content;
  108. try { content = File.ReadAllText(GameCfg/*, Encoding.UTF8*/); }
  109. catch
  110. {//
  111. return;
  112. }
  113. string licenseDst = "+DirectoriesToAlwaysStageAsUFS=(Path=\"license\")";
  114. string licenseSrc = "-DirectoriesToAlwaysStageAsUFS=(Path=\"license\")";
  115. string licenseNode = "[/Script/UnrealEd.ProjectPackagingSettings]";
  116. if (content.Contains(licenseNode))
  117. {
  118. if (content.Contains(licenseDst))
  119. {
  120. Console.WriteLine(GameCfg + " has configure!");
  121. return;//
  122. }
  123. else if (content.Contains(licenseSrc))
  124. {
  125. content = content.Replace(licenseSrc, licenseDst + "\n");
  126. }
  127. else
  128. content = content.Replace(licenseNode, licenseNode + "\n" + licenseDst);
  129. }
  130. else
  131. {
  132. content += "\n\n" + licenseNode + "\n" + licenseDst;
  133. }
  134. File.WriteAllText(GameCfg, content, Encoding.UTF8);
  135. Console.WriteLine(GameCfg + " auto configure!");
  136. }
  137. }