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