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

This commit is contained in:
2020-04-16 11:38:02 +00:00
parent aa738cf17a
commit 3b4212eb61

View File

@@ -126,6 +126,18 @@ PIString findLib(const PIString & l) {
} }
PIString frameworkName(const PIString & l) {
if (!l.contains(".framework/")) return "";
PIStringList ll = l.split("/");
piForeachRC (PIString & _f, ll) {
if (_f.endsWith(".framework")) {
return _f;
}
}
return "";
}
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;
@@ -217,16 +229,10 @@ void procLdd(PIString file, bool ext_lib = false, int cur_depth = 0) {
piForeachC (PIString & sl, lines) { piForeachC (PIString & sl, lines) {
PIString l = sl.trimmed(); PIString l = sl.trimmed();
if (!otool.isEmpty()) { if (!otool.isEmpty()) {
if (l.contains(".framework/")) { PIString fname = frameworkName(l);
PIStringList ll = l.split("/"); if (!fname.isEmpty()) {
piForeachRC (PIString & _f, ll) { frameworks << fname;
if (_f.endsWith(".framework")) { checkQtLib(fname.toLowerCase());
l = _f;
piBreak;
}
}
frameworks << l;
checkQtLib(l.toLowerCase());
continue; continue;
} }
} }
@@ -362,33 +368,44 @@ 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();
PIString ll, cmd; PIString local_lib, libname, cmd;
PIStringList dlibs; PIStringList dlibs;
PICout(DefaultControls) << "start patch" << clibs; //PICout(DefaultControls) << "start patch" << clibs;
PIFile::FileInfo fi;
piForeach (PIString l, clibs) { piForeach (PIString l, clibs) {
PIFile::FileInfo fi;
fi.path = l; fi.path = l;
ll = out_dir + fi.name(); local_lib = out_dir + fi.name();
cmd = otool + " -L \"" + ll; cmd = otool + " -L \"" + local_lib;
cmd += "\" | grep -o \".*(\""; cmd += "\" | grep -o \".*(\"";
dlibs = execute(cmd).split("\n"); dlibs = execute(cmd).split("\n");
if (!dlibs.isEmpty()) { if (!dlibs.isEmpty()) {
execute("chmod +w \"" + ll + "\""); execute("chmod +w \"" + local_lib + "\"");
} }
PICout(DefaultControls) << "patch" << ll; PICout(DefaultControls) << "patch" << local_lib;
piForeach (PIString dl, dlibs) { piForeach (PIString sys_lib, dlibs) {
dl.cutRight(1).trim(); sys_lib.cutRight(1).trim();
PIFile::FileInfo fi2; fi.path = sys_lib;
fi2.path = dl; libname = fi.name();
PIString fl = findLib(fi2.name()); PIString fl = findLib(libname), fname = frameworkName(sys_lib);
PICout(DefaultControls) << " depend on" << fl << "..."; if (all_libs.contains(fl)) {
if (!all_libs.contains(fl)) continue; PICout(DefaultControls) << " " << "depend on lib" << fl;
PICout(DefaultControls) << " yes"; cmd = nametool + " -change \"" + sys_lib + "\"";
cmd = nametool + " -change \"" + dl + "\""; cmd += " \"@executable_path/../Frameworks/" + libname + "\"";
cmd += " \"@executable_path/../Frameworks/" + fi2.name() + "\""; cmd += " \"" + local_lib + "\"";
cmd += " \"" + ll + "\""; PICout(DefaultControls) << " " << cmd;
PICout(DefaultControls) << cmd; execute(cmd);
execute(cmd); }
if (frameworks.contains(fname)) {
fl = findLib(fname);
if (fl.isEmpty()) continue;
PIString fintpath = sys_lib.right(sys_lib.size_s() - sys_lib.lastIndexOf(".framework") - 11);
PICout(DefaultControls) << " " << "depend on framework" << fl;
cmd = nametool + " -change \"" + sys_lib + "\"";
cmd += " \"@executable_path/../Frameworks/" + fname + "/" + fintpath + "\"";
cmd += " \"" + local_lib + "\"";
PICout(DefaultControls) << " " << cmd;
//execute(cmd);
}
} }
} }
} }