// // Created by taynpg on 24-8-6. // #include "FunctionImp.h" #include 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 CFunPack::parse_result(const wxArrayString& array) { std::list 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; }