From 6e66e75114b8d5d3e22532930081fa8e902589e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Thu, 16 Apr 2020 11:57:01 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@1031 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- utils/deploy_tool/main.cpp | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/utils/deploy_tool/main.cpp b/utils/deploy_tool/main.cpp index 79c7145e..3909e67d 100644 --- a/utils/deploy_tool/main.cpp +++ b/utils/deploy_tool/main.cpp @@ -111,7 +111,7 @@ int depth = 5; 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; PIStringList styles, lib_dirs, add_libs, platforms, sqldrivers; -PISet all_libs, miss_libs, all_deps, frameworks, miss_frameworks, qt_plugins, ignore_libs; +PISet all_libs, miss_libs, all_deps, frameworks, framework_libs, miss_frameworks, qt_plugins, ignore_libs; PIMap 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) { FILE * fp = popen(cmd.dataAscii(), "r"); PIString ret; @@ -232,6 +237,7 @@ void procLdd(PIString file, bool ext_lib = false, int cur_depth = 0) { PIString fname = frameworkName(l); if (!fname.isEmpty()) { frameworks << fname; + framework_libs << l; checkQtLib(fname.toLowerCase()); continue; } @@ -367,14 +373,21 @@ bool procDpkg(const PIString & l) { void patchNameTool() { if (nametool.isEmpty()) return; - PIVector clibs = all_libs.toVector(); - PIString local_lib, libname, cmd; + PIVector clibs = all_libs.toVector(), flibs = framework_libs.toVector(), patch_list; + PIString libname, cmd; PIStringList dlibs; //PICout(DefaultControls) << "start patch" << clibs; PIFile::FileInfo fi; piForeach (PIString l, clibs) { 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 += "\" | grep -o \".*(\""; dlibs = execute(cmd).split("\n"); @@ -388,23 +401,22 @@ void patchNameTool() { libname = fi.name(); PIString fl = findLib(libname), fname = frameworkName(sys_lib); if (all_libs.contains(fl)) { - PICout(DefaultControls) << " " << "depend on lib" << fl; + PICout(DefaultControls) << " depend on lib" << fl; cmd = nametool + " -change \"" + sys_lib + "\""; cmd += " \"@executable_path/../Frameworks/" + libname + "\""; cmd += " \"" + local_lib + "\""; - PICout(DefaultControls) << " " << cmd; + //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; + PICout(DefaultControls) << " depend on framework" << fl; cmd = nametool + " -change \"" + sys_lib + "\""; - cmd += " \"@executable_path/../Frameworks/" + fname + "/" + fintpath + "\""; + cmd += " \"@executable_path/../Frameworks/" + fname + "/" + frameworkInternalPath(sys_lib) + "\""; cmd += " \"" + local_lib + "\""; - PICout(DefaultControls) << " " << cmd; - //execute(cmd); + //PICout(DefaultControls) << " " << cmd; + execute(cmd); } } }