git-svn-id: svn://db.shs.com.ru/pip@1031 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2020-04-16 11:57:01 +00:00
parent 3b4212eb61
commit 6e66e75114

View File

@@ -111,7 +111,7 @@ int depth = 5;
bool fake = false, is_ldd = true, is_deps = false, need_qt = false; bool fake = false, is_ldd = true, is_deps = false, need_qt = false;
PIString ldd, readelf, objdump, otool, dpkg, nametool, out_dir, qt_dir, out_plugins_dir; PIString ldd, readelf, objdump, otool, dpkg, nametool, out_dir, qt_dir, out_plugins_dir;
PIStringList styles, lib_dirs, add_libs, platforms, sqldrivers; PIStringList styles, lib_dirs, add_libs, platforms, sqldrivers;
PISet<PIString> all_libs, miss_libs, all_deps, frameworks, miss_frameworks, qt_plugins, ignore_libs; PISet<PIString> all_libs, miss_libs, all_deps, frameworks, framework_libs, miss_frameworks, qt_plugins, ignore_libs;
PIMap<PIString, PIStringList> qt_filters; PIMap<PIString, PIStringList> qt_filters;
@@ -138,6 +138,11 @@ PIString frameworkName(const PIString & l) {
} }
PIString frameworkInternalPath(const PIString & l) {
return l.right(l.size_s() - l.lastIndexOf(".framework") - 11);
}
PIString execute(const PIString & cmd) { PIString execute(const PIString & cmd) {
FILE * fp = popen(cmd.dataAscii(), "r"); FILE * fp = popen(cmd.dataAscii(), "r");
PIString ret; PIString ret;
@@ -232,6 +237,7 @@ void procLdd(PIString file, bool ext_lib = false, int cur_depth = 0) {
PIString fname = frameworkName(l); PIString fname = frameworkName(l);
if (!fname.isEmpty()) { if (!fname.isEmpty()) {
frameworks << fname; frameworks << fname;
framework_libs << l;
checkQtLib(fname.toLowerCase()); checkQtLib(fname.toLowerCase());
continue; continue;
} }
@@ -367,14 +373,21 @@ bool procDpkg(const PIString & l) {
void patchNameTool() { void patchNameTool() {
if (nametool.isEmpty()) return; if (nametool.isEmpty()) return;
PIVector<PIString> clibs = all_libs.toVector(); PIVector<PIString> clibs = all_libs.toVector(), flibs = framework_libs.toVector(), patch_list;
PIString local_lib, libname, cmd; PIString libname, cmd;
PIStringList dlibs; PIStringList dlibs;
//PICout(DefaultControls) << "start patch" << clibs; //PICout(DefaultControls) << "start patch" << clibs;
PIFile::FileInfo fi; PIFile::FileInfo fi;
piForeach (PIString l, clibs) { piForeach (PIString l, clibs) {
fi.path = l; fi.path = l;
local_lib = out_dir + fi.name(); patch_list << (out_dir + fi.name());
}
piForeach (PIString f, flibs) {
PIString fl = findLib(frameworkName(f));
if (fl.isEmpty()) continue;
patch_list << (out_dir + frameworkName(f) + "/" + frameworkInternalPath(f));
}
piForeach (PIString local_lib, patch_list) {
cmd = otool + " -L \"" + local_lib; cmd = otool + " -L \"" + local_lib;
cmd += "\" | grep -o \".*(\""; cmd += "\" | grep -o \".*(\"";
dlibs = execute(cmd).split("\n"); dlibs = execute(cmd).split("\n");
@@ -388,23 +401,22 @@ void patchNameTool() {
libname = fi.name(); libname = fi.name();
PIString fl = findLib(libname), fname = frameworkName(sys_lib); PIString fl = findLib(libname), fname = frameworkName(sys_lib);
if (all_libs.contains(fl)) { if (all_libs.contains(fl)) {
PICout(DefaultControls) << " " << "depend on lib" << fl; PICout(DefaultControls) << " depend on lib" << fl;
cmd = nametool + " -change \"" + sys_lib + "\""; cmd = nametool + " -change \"" + sys_lib + "\"";
cmd += " \"@executable_path/../Frameworks/" + libname + "\""; cmd += " \"@executable_path/../Frameworks/" + libname + "\"";
cmd += " \"" + local_lib + "\""; cmd += " \"" + local_lib + "\"";
PICout(DefaultControls) << " " << cmd; //PICout(DefaultControls) << " " << cmd;
execute(cmd); execute(cmd);
} }
if (frameworks.contains(fname)) { if (frameworks.contains(fname)) {
fl = findLib(fname); fl = findLib(fname);
if (fl.isEmpty()) continue; if (fl.isEmpty()) continue;
PIString fintpath = sys_lib.right(sys_lib.size_s() - sys_lib.lastIndexOf(".framework") - 11); PICout(DefaultControls) << " depend on framework" << fl;
PICout(DefaultControls) << " " << "depend on framework" << fl;
cmd = nametool + " -change \"" + sys_lib + "\""; cmd = nametool + " -change \"" + sys_lib + "\"";
cmd += " \"@executable_path/../Frameworks/" + fname + "/" + fintpath + "\""; cmd += " \"@executable_path/../Frameworks/" + fname + "/" + frameworkInternalPath(sys_lib) + "\"";
cmd += " \"" + local_lib + "\""; cmd += " \"" + local_lib + "\"";
PICout(DefaultControls) << " " << cmd; //PICout(DefaultControls) << " " << cmd;
//execute(cmd); execute(cmd);
} }
} }
} }