diff --git a/utils/deploy_tool/main.cpp b/utils/deploy_tool/main.cpp index 2f90299b..79c7145e 100644 --- a/utils/deploy_tool/main.cpp +++ b/utils/deploy_tool/main.cpp @@ -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) { FILE * fp = popen(cmd.dataAscii(), "r"); PIString ret; @@ -217,16 +229,10 @@ void procLdd(PIString file, bool ext_lib = false, int cur_depth = 0) { piForeachC (PIString & sl, lines) { PIString l = sl.trimmed(); if (!otool.isEmpty()) { - if (l.contains(".framework/")) { - PIStringList ll = l.split("/"); - piForeachRC (PIString & _f, ll) { - if (_f.endsWith(".framework")) { - l = _f; - piBreak; - } - } - frameworks << l; - checkQtLib(l.toLowerCase()); + PIString fname = frameworkName(l); + if (!fname.isEmpty()) { + frameworks << fname; + checkQtLib(fname.toLowerCase()); continue; } } @@ -362,33 +368,44 @@ bool procDpkg(const PIString & l) { void patchNameTool() { if (nametool.isEmpty()) return; PIVector clibs = all_libs.toVector(); - PIString ll, cmd; + PIString local_lib, libname, cmd; PIStringList dlibs; - PICout(DefaultControls) << "start patch" << clibs; + //PICout(DefaultControls) << "start patch" << clibs; + PIFile::FileInfo fi; piForeach (PIString l, clibs) { - PIFile::FileInfo fi; fi.path = l; - ll = out_dir + fi.name(); - cmd = otool + " -L \"" + ll; + local_lib = out_dir + fi.name(); + cmd = otool + " -L \"" + local_lib; cmd += "\" | grep -o \".*(\""; dlibs = execute(cmd).split("\n"); if (!dlibs.isEmpty()) { - execute("chmod +w \"" + ll + "\""); + execute("chmod +w \"" + local_lib + "\""); } - PICout(DefaultControls) << "patch" << ll; - piForeach (PIString dl, dlibs) { - dl.cutRight(1).trim(); - PIFile::FileInfo fi2; - fi2.path = dl; - PIString fl = findLib(fi2.name()); - PICout(DefaultControls) << " depend on" << fl << "..."; - if (!all_libs.contains(fl)) continue; - PICout(DefaultControls) << " yes"; - cmd = nametool + " -change \"" + dl + "\""; - cmd += " \"@executable_path/../Frameworks/" + fi2.name() + "\""; - cmd += " \"" + ll + "\""; - PICout(DefaultControls) << cmd; - execute(cmd); + PICout(DefaultControls) << "patch" << local_lib; + piForeach (PIString sys_lib, dlibs) { + sys_lib.cutRight(1).trim(); + fi.path = sys_lib; + libname = fi.name(); + PIString fl = findLib(libname), fname = frameworkName(sys_lib); + if (all_libs.contains(fl)) { + PICout(DefaultControls) << " " << "depend on lib" << fl; + cmd = nametool + " -change \"" + sys_lib + "\""; + cmd += " \"@executable_path/../Frameworks/" + libname + "\""; + cmd += " \"" + local_lib + "\""; + PICout(DefaultControls) << " " << 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); + } } } }