333 lines
5.8 KiB
C++
333 lines
5.8 KiB
C++
#include "Kyty/Scripts/BuildTools.h"
|
|
|
|
#include "Kyty/Core/ByteBuffer.h"
|
|
#include "Kyty/Core/Common.h"
|
|
#include "Kyty/Core/Database.h"
|
|
#include "Kyty/Core/DateTime.h"
|
|
#include "Kyty/Core/DbgAssert.h"
|
|
#include "Kyty/Core/Debug.h"
|
|
#include "Kyty/Core/File.h"
|
|
#include "Kyty/Core/String.h"
|
|
#include "Kyty/Scripts/Scripts.h"
|
|
|
|
namespace Kyty::BuildTools {
|
|
|
|
KYTY_SCRIPT_FUNC(call_func)
|
|
{
|
|
|
|
return 0;
|
|
}
|
|
|
|
void call_help()
|
|
{
|
|
// TODO(#108)
|
|
}
|
|
|
|
KYTY_SCRIPT_FUNC(rd_func)
|
|
{
|
|
|
|
return 0;
|
|
}
|
|
|
|
void rd_help()
|
|
{
|
|
// TODO(#108)
|
|
}
|
|
|
|
KYTY_SCRIPT_FUNC(copy_func)
|
|
{
|
|
String src;
|
|
String dst;
|
|
|
|
if (Scripts::ArgGetVarCount() == 2)
|
|
{
|
|
src = Scripts::ArgGetVar(0).ToString();
|
|
dst = Scripts::ArgGetVar(1).ToString();
|
|
} else
|
|
{
|
|
EXIT("invalid args\n");
|
|
}
|
|
|
|
Core::File::CreateDirectories(dst.DirectoryWithoutFilename());
|
|
Core::File::CopyFile(src, dst);
|
|
|
|
return 0;
|
|
}
|
|
|
|
void copy_help()
|
|
{
|
|
// TODO(#108)
|
|
}
|
|
|
|
KYTY_SCRIPT_FUNC(move_func)
|
|
{
|
|
String src;
|
|
String dst;
|
|
|
|
if (Scripts::ArgGetVarCount() == 2)
|
|
{
|
|
src = Scripts::ArgGetVar(0).ToString();
|
|
dst = Scripts::ArgGetVar(1).ToString();
|
|
} else
|
|
{
|
|
EXIT("invalid args\n");
|
|
}
|
|
|
|
Core::File::CreateDirectories(dst.DirectoryWithoutFilename());
|
|
if (!Core::File::MoveFile(src, dst))
|
|
{
|
|
EXIT("move\n");
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void move_help()
|
|
{
|
|
// TODO(#108)
|
|
}
|
|
|
|
KYTY_SCRIPT_FUNC(sync_func)
|
|
{
|
|
String src;
|
|
String dst;
|
|
int64_t del = 1;
|
|
|
|
if (Scripts::ArgGetVarCount() == 2)
|
|
{
|
|
src = Scripts::ArgGetVar(0).ToString();
|
|
dst = Scripts::ArgGetVar(1).ToString();
|
|
} else if (Scripts::ArgGetVarCount() == 3)
|
|
{
|
|
src = Scripts::ArgGetVar(0).ToString();
|
|
dst = Scripts::ArgGetVar(1).ToString();
|
|
del = Scripts::ArgGetVar(1).ToInteger();
|
|
} else
|
|
{
|
|
EXIT("invalid args\n");
|
|
}
|
|
|
|
Core::File::SyncDirectories(src, dst, del != 0);
|
|
|
|
return 0;
|
|
}
|
|
|
|
void sync_help()
|
|
{
|
|
// TODO(#108)
|
|
}
|
|
|
|
KYTY_SCRIPT_FUNC(str_to_file_func)
|
|
{
|
|
String str;
|
|
String dst;
|
|
|
|
if (Scripts::ArgGetVarCount() == 2)
|
|
{
|
|
str = Scripts::ArgGetVar(0).ToString();
|
|
dst = Scripts::ArgGetVar(1).ToString();
|
|
} else
|
|
{
|
|
EXIT("invalid args\n");
|
|
}
|
|
|
|
Core::File f;
|
|
f.Create(dst);
|
|
f.SetEncoding(Core::File::Encoding::Utf8);
|
|
|
|
if (!f.IsInvalid())
|
|
{
|
|
f.Write(str);
|
|
}
|
|
|
|
f.Close();
|
|
|
|
return 0;
|
|
}
|
|
|
|
void str_to_file_help()
|
|
{
|
|
// TODO(#108)
|
|
}
|
|
|
|
KYTY_SCRIPT_FUNC(replace_str_func)
|
|
{
|
|
String str1;
|
|
String str2;
|
|
String dst;
|
|
|
|
if (Scripts::ArgGetVarCount() == 3)
|
|
{
|
|
str1 = Scripts::ArgGetVar(0).ToString();
|
|
str2 = Scripts::ArgGetVar(1).ToString();
|
|
dst = Scripts::ArgGetVar(2).ToString();
|
|
} else
|
|
{
|
|
EXIT("invalid args\n");
|
|
}
|
|
|
|
Core::DateTime at;
|
|
Core::DateTime wt;
|
|
Core::File::GetLastAccessAndWriteTimeUTC(dst, &at, &wt);
|
|
|
|
Core::File f;
|
|
f.Open(dst, Core::File::Mode::Read);
|
|
f.SetEncoding(Core::File::Encoding::Utf8);
|
|
|
|
bool ok = false;
|
|
|
|
if (!f.IsInvalid())
|
|
{
|
|
String s = f.ReadWholeString();
|
|
s = s.ReplaceStr(str1, str2, String::Case::Insensitive);
|
|
|
|
f.Close();
|
|
f.Create(dst);
|
|
f.SetEncoding(Core::File::Encoding::Utf8);
|
|
|
|
if (!f.IsInvalid())
|
|
{
|
|
f.Write(s);
|
|
ok = true;
|
|
}
|
|
}
|
|
|
|
f.Close();
|
|
|
|
if (ok)
|
|
{
|
|
Core::File::SetLastAccessAndWriteTimeUTC(dst, at, wt);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void replace_str_help()
|
|
{
|
|
// TODO(#108)
|
|
}
|
|
|
|
KYTY_SCRIPT_FUNC(map_to_csv_func)
|
|
{
|
|
String mode;
|
|
String src;
|
|
String dst;
|
|
|
|
if (Scripts::ArgGetVarCount() == 3)
|
|
{
|
|
mode = Scripts::ArgGetVar(0).ToString();
|
|
src = Scripts::ArgGetVar(1).ToString();
|
|
dst = Scripts::ArgGetVar(2).ToString();
|
|
} else
|
|
{
|
|
EXIT("invalid args\n");
|
|
}
|
|
|
|
Core::DebugMap map;
|
|
|
|
if (Core::File::IsFileExisting(src))
|
|
{
|
|
Core::File::DeleteFile(dst);
|
|
|
|
printf("[ map] %s: %s -> %s\n", mode.C_Str(), src.C_Str(), dst.C_Str());
|
|
|
|
if (mode.EqualNoCase(U"mingw_ld_32") || mode.EqualNoCase(U"clang_ld_32"))
|
|
{
|
|
map.LoadGnuLd(src, 32);
|
|
map.DumpMap(dst);
|
|
} else if (mode.EqualNoCase(U"mingw_ld_64") || mode.EqualNoCase(U"clang_ld_64"))
|
|
{
|
|
map.LoadGnuLd(src, 64);
|
|
map.DumpMap(dst);
|
|
} else if (mode.EqualNoCase(U"clang_lld_64"))
|
|
{
|
|
map.LoadLlvmLld(src, 64);
|
|
map.DumpMap(dst);
|
|
} else if (mode.EqualNoCase(U"msvc_link_32"))
|
|
{
|
|
map.LoadMsvcLink(src, 32);
|
|
map.DumpMap(dst);
|
|
} else if (mode.EqualNoCase(U"msvc_link_64"))
|
|
{
|
|
map.LoadMsvcLink(src, 64);
|
|
map.DumpMap(dst);
|
|
} else if (mode.EqualNoCase(U"clang_lld_link_64"))
|
|
{
|
|
map.LoadMsvcLldLink(src, 64);
|
|
map.DumpMap(dst);
|
|
} else
|
|
{
|
|
printf("unknown map: %s\n", mode.C_Str());
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
void map_to_csv_help()
|
|
{
|
|
// TODO(#108)
|
|
}
|
|
|
|
void atlas_repack_help()
|
|
{
|
|
// TODO(#108)
|
|
}
|
|
|
|
KYTY_SCRIPT_FUNC(db_key_func)
|
|
{
|
|
if (Scripts::ArgGetVarCount() != 3)
|
|
{
|
|
EXIT("invalid args\n");
|
|
}
|
|
|
|
String database = Scripts::ArgGetVar(0).ToString();
|
|
String password = Scripts::ArgGetVar(1).ToString();
|
|
int64_t legacy = Scripts::ArgGetVar(2).ToInteger();
|
|
|
|
Core::Database::Connection db;
|
|
db.Open(database, Core::Database::Connection::Mode::ReadOnly);
|
|
|
|
if (db.IsInvalid() || db.IsError())
|
|
{
|
|
EXIT("Can't open file: %s\n", database.C_Str());
|
|
}
|
|
|
|
db.SetPassword(password, static_cast<int>(legacy));
|
|
auto key = db.GetKey();
|
|
|
|
FOR (i, key)
|
|
{
|
|
printf("%s0x%02" PRIx8 "%s", (i > 0 ? ", " : "{ "), std::to_integer<uint8_t>(key.At(i)), (i == key_size_ - 1 ? " }\n" : ""));
|
|
}
|
|
|
|
db.Close();
|
|
|
|
return 0;
|
|
}
|
|
|
|
void db_key_help()
|
|
{
|
|
// TODO(#108)
|
|
}
|
|
|
|
void Init()
|
|
{
|
|
Scripts::RegisterFunc("sync", BuildTools::sync_func, BuildTools::sync_help);
|
|
Scripts::RegisterFunc("copy", BuildTools::copy_func, BuildTools::copy_help);
|
|
Scripts::RegisterFunc("map_to_csv", BuildTools::map_to_csv_func, BuildTools::map_to_csv_help);
|
|
Scripts::RegisterFunc("str_to_file", BuildTools::str_to_file_func, BuildTools::str_to_file_help);
|
|
Scripts::RegisterFunc("replace_str", BuildTools::replace_str_func, BuildTools::replace_str_help);
|
|
Scripts::RegisterFunc("db_key", BuildTools::db_key_func, BuildTools::db_key_help);
|
|
}
|
|
|
|
KYTY_SUBSYSTEM_INIT(BuildTools)
|
|
{
|
|
BuildTools::Init();
|
|
}
|
|
|
|
KYTY_SUBSYSTEM_UNEXPECTED_SHUTDOWN(BuildTools) {}
|
|
|
|
KYTY_SUBSYSTEM_DESTROY(BuildTools) {}
|
|
|
|
} // namespace Kyty::BuildTools
|