git-svn-id: svn://db.shs.com.ru/pip@1030 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user