88 lines
1.9 KiB
C++
88 lines
1.9 KiB
C++
//
|
|
// Created by taynpg on 24-8-6.
|
|
//
|
|
|
|
#include "FunctionImp.h"
|
|
#include <wx/tokenzr.h>
|
|
|
|
CFunPack::CFunPack() = default;
|
|
|
|
bool CFunPack::gen(const wxString& bin, const wxString& out_dir, const wxArrayString& dirs)
|
|
{
|
|
auto ret_source = get_depend_on(bin, dirs);
|
|
auto result = parse_result(ret_source);
|
|
return true;
|
|
}
|
|
|
|
wxArrayString CFunPack::get_depend_on(const wxString& bin, const wxArrayString& dirs)
|
|
{
|
|
wxArrayString array;
|
|
wxString cmd;
|
|
if (!dirs.empty()) {
|
|
cmd.append("export LD_LIBRARY_PATH=$LD_LIBRARY_PATH");
|
|
for (const auto& data : dirs) {
|
|
cmd.append(":" + data);
|
|
}
|
|
}
|
|
cmd.append(" && ldd " + bin);
|
|
|
|
FILE* pf = nullptr;
|
|
if ((pf = popen(cmd.c_str(), "r")) == nullptr) {
|
|
return array;
|
|
}
|
|
|
|
char buffer[1024]{};
|
|
wxString result{};
|
|
while (std::fgets(buffer, sizeof(buffer), pf)) {
|
|
result.append(buffer);
|
|
}
|
|
|
|
array = wxStringTokenize(result, "\t");
|
|
return array;
|
|
}
|
|
|
|
std::list<wxString> CFunPack::parse_result(const wxArrayString& array)
|
|
{
|
|
std::list<wxString> ret;
|
|
wxArrayString simlog;
|
|
wxArrayString bk_arry = array;
|
|
|
|
for (auto& data : bk_arry) {
|
|
|
|
if (data.empty()) {
|
|
continue;
|
|
}
|
|
|
|
if (data.Contains("not found")) {
|
|
simlog.push_back(wxT("未找到依赖:" + data));
|
|
continue;
|
|
}
|
|
|
|
data.Replace("=>", "");
|
|
wxArrayString tokens = wxStringTokenize(data, " ");
|
|
wxString dy;
|
|
if (tokens.size() == 4) {
|
|
dy = tokens[2];
|
|
}
|
|
if (tokens.size() == 3) {
|
|
dy = tokens[1];
|
|
}
|
|
if (dy.starts_with("/lib")) {
|
|
continue;
|
|
}
|
|
if (!dy.empty()) {
|
|
ret.push_back(dy);
|
|
}
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
CFunInstall::CFunInstall()
|
|
= default;
|
|
|
|
bool CFunInstall::install(const wxString& file, const wxString& ico)
|
|
{
|
|
return true;
|
|
}
|