Files
envi-code/utility/copyArx/Program.cs
T
gjm ac3e6b0083 上传copyarx工程
上传copyarx工程
2026-10-25 13:34:19 +08:00

292 lines
7.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace copyARX
{
public class ItemData
{
public ItemData()
{
Platform = string.Empty;
Configuration = string.Empty;
PlatformToolset = string.Empty;
arx = string.Empty;
useSrcRoot = true;
useDescRoot = true;
src_path = string.Empty;
desc_path = string.Empty;
}
public ItemData(string platform, string config, string toolset, string arx)
{
Platform = platform;
Configuration = config;
PlatformToolset = toolset;
this.arx = arx;
}
public bool compare(ItemData data)
{
if (Platform == data.Platform
&& Configuration == data.Configuration
&& PlatformToolset == data.PlatformToolset
&& arx == data.arx) return true;
return false;
}
public string Platform;
public string Configuration;
public string PlatformToolset;
public string arx;
public bool useSrcRoot;
public bool useDescRoot;
public string src_path;
public string desc_path;
}
class Program
{
static void Main(string[] args)
{
// 共七个参数,最后一个可以没有
bool bCMake = args[0] == "CMAKE";
if (bCMake)
{
if (args.Length < 4)
{
System.Console.WriteLine("参数不足,请重新配置. -cmake");
}
string sArxPath = args[1], // 需要copy的文件名
sSDKVer = args[2], // sdk版本
sJson = args[3]; // json文件
if (!File.Exists(sJson))
{
Console.WriteLine(sJson + "文件未找到。");
return;
}
if (!File.Exists(sArxPath))
{
Console.WriteLine(sArxPath + "文件未找到。");
return;
}
string sSHEnvPath = string.Empty;
using (StreamReader reader = File.OpenText(sJson))
{
JObject obj = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
JToken jtok = string.Empty;
if (!obj.TryGetValue("desc_root", out jtok))
{
Console.WriteLine("文件未找到 desc_root 配置。");
return;
}
sSHEnvPath = jtok.ToObject<string>();
}
string dest_dir = sSHEnvPath + "\\" + sSDKVer;
if (!Directory.Exists(dest_dir))
{
Console.WriteLine(string.Format("{0} 文件夹未找到!", dest_dir));
return;
}
string dest_arx = dest_dir + "\\" + Path.GetFileName(sArxPath);
File.Copy(sArxPath, dest_arx, true);
Console.WriteLine(string.Format("拷贝文件从:\n {0}\n 到:\n {1} \n成功.", sArxPath, dest_arx));
return;
}
if (args.Length < 6)
{
System.Console.WriteLine("参数不足,请重新配置,"
, "(例如:$(ProjectName) $(PlatformToolset) $(Configuration) $(Platform) $(TargetExt) exepath.txt sysPath)");
}
string project = args[0] // 工程名
, toolset = args[1] // v90~v140
, config = args[2] // debug | release
, platform = args[3] // win32 | x64
, ext = args[4] // 扩展名
, cnfPath = args[5] // 记录 earthworm 所在主目录的文件
, srcPath = Process.GetCurrentProcess().MainModule.FileName; // 执行文件所在目录
string subSys = string.Empty;
if (args.Length > 6)
subSys = args[6];
srcPath = srcPath.Substring(0, srcPath.LastIndexOf("\\"));
cnfPath = srcPath + "\\" + cnfPath;
srcPath = srcPath.Substring(0, srcPath.LastIndexOf("\\")) + "\\";
if (!File.Exists(cnfPath))
{
Console.WriteLine(cnfPath + "文件未找到。");
return;
}
using (StreamReader reader = File.OpenText(cnfPath))
{
JObject obj = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
JToken jtok = string.Empty;
if (!obj.TryGetValue("desc_root", out jtok))
{
Console.WriteLine("文件未找到 desc_root 配置。");
return;
}
string desc_root = jtok.ToObject<string>();
if (!Directory.Exists(desc_root))
{
Console.WriteLine("desc_root 文件夹未找到!");
return;
}
if (!obj.TryGetValue("src_root", out jtok))
{
Console.WriteLine("文件未找到 src_root 配置。");
return;
}
string src_root = jtok.ToObject<string>();
if (!Directory.Exists(src_root))
{
Console.WriteLine("src_root 文件夹未找到!");
return;
}
if (!obj.TryGetValue("items", out jtok))
{
Console.WriteLine("文件未找到 items 配置。");
return;
}
JArray jar = jtok.ToObject<JArray>();
List<ItemData> items = new List<ItemData>();
foreach (JObject jo in jar)
{
ItemData data = new ItemData();
if (!jo.TryGetValue("Platform", out jtok)) continue;
data.Platform = jtok.ToObject<string>();
if (!jo.TryGetValue("Configuration", out jtok)) continue;
data.Configuration = jtok.ToObject<string>();
if (!jo.TryGetValue("PlatformToolset", out jtok)) continue;
data.PlatformToolset = jtok.ToObject<string>();
if (!jo.TryGetValue("arx", out jtok)) continue;
data.arx = jtok.ToObject<string>();
if (!jo.TryGetValue("useSrcRoot", out jtok)) continue;
data.useSrcRoot = jtok.ToObject<bool>();
if (!jo.TryGetValue("useDescRoot", out jtok)) continue;
data.useDescRoot = jtok.ToObject<bool>();
if (!jo.TryGetValue("src_path", out jtok)) continue;
data.src_path = jtok.ToObject<string>();
if (!jo.TryGetValue("desc_path", out jtok)) continue;
data.desc_path = jtok.ToObject<string>();
items.Add(data);
}
ItemData input = new ItemData(platform, config, toolset, subSys);
string srcDirArx = string.Empty;
string srcDirCore = string.Empty;
string srcfile = string.Empty;
string descFile = string.Empty;
bool bFindItem = false;
ItemData item = new ItemData();
foreach (ItemData it in items)
{
if (!it.compare(input))
continue;
else
{
item = it;
bFindItem = true;
}
}
if (!bFindItem)
{
Console.WriteLine("没有找到相关的配置项!");
return;
}
if (item.useSrcRoot)
{
srcDirArx = string.Format("{0}\\{1}\\{2}{3}"
, src_root
, item.src_path
, project
, ext);
srcDirCore = string.Format("{0}\\{1}-[]-[]\\{2}{3}"
, src_root
, item.src_path
, project
, ext);
if (File.Exists(srcDirArx) && !File.Exists(srcDirCore))
{
srcfile = srcDirArx;
}
else if (!File.Exists(srcDirArx) && File.Exists(srcDirCore))
{
srcfile = srcDirCore;
}
else if (File.Exists(srcDirArx) && File.Exists(srcDirCore))
{
DateTime dtArx = File.GetCreationTime(srcDirArx);
DateTime dtCore = File.GetCreationTime(srcDirCore);
if (dtArx >= dtCore) // 两个目录下都有这个文件,取新的
srcfile = srcDirArx;
else
srcfile = srcDirCore;
}
else
{
Console.WriteLine(string.Format("{0}未找到!", project + ext));
return;
}
}
else
{
srcfile = item.src_path + "\\" + project + ext;
}
if (!File.Exists(srcfile))
{
Console.WriteLine(string.Format("{0}未找到!", srcfile));
return;
}
if (item.useDescRoot)
{
descFile = desc_root + "\\" + item.desc_path + "\\";
}
else
{
descFile = item.desc_path + "\\";
}
if (!Directory.Exists(descFile))
{
Console.WriteLine(string.Format("{0}未找到!"), descFile);
return;
}
descFile += project + ext;
File.Copy(srcfile, descFile, true);
Console.WriteLine(string.Format("拷贝文件从:\n {0}\n 到:\n {1} \n成功.", srcfile, descFile));
return;
}
}
}
}