From 4f97c5b21a983749ae47133b082d49c9327b2227 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: Wed, 18 Mar 2020 20:51:52 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@850 a8b55f48-bf90-11e4-a774-851b48703e85 --- deploy_tool/main.cpp | 64 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 50 insertions(+), 14 deletions(-) diff --git a/deploy_tool/main.cpp b/deploy_tool/main.cpp index e70bdc6..b2ad7dc 100644 --- a/deploy_tool/main.cpp +++ b/deploy_tool/main.cpp @@ -33,7 +33,7 @@ void usage() { piCout << "If depend on QtCore library, then copy all basic Qt plugins, "; piCout << " and "; piCout << ""; - piCout << Green << Bold << "Usage:" << Default << "\"deploy_tool [-hvfC] -o [-p ] [-s ] [-S ] [-l ] [-L | -W | -M ] [-d ] [-q ] [-a ] [-S ] [-P ] \"" << NewLine; + piCout << Green << Bold << "Usage:" << Default << "\"deploy_tool [-hvfC] [--dependencies] -o [-p ] [-s ] [-S ] [-l ] [-D ] [-L | -W | -M ] [-d ] [-q ] [-a ] [-S ] [-P ] \"" << NewLine; piCout << Green << Bold << "Details:"; piCout << Bold << "Debug control"; piCout << "-h " << Green << "- display this message and exit"; @@ -46,6 +46,7 @@ void usage() { piCout << "-L " << Green << "- \"readelf\" path, overrides \"ldd\""; piCout << "-W " << Green << "- \"objdump\" path, overrides \"ldd\""; piCout << "-M " << Green << "- \"otool\" path, overrides \"ldd\""; + piCout << "-D " << Green << "- \"dpkg\" path, default \"/usr/bin/dpkg\""; piCout << "-d " << Green << "- dependepcies depth, default 1"; piCout << "-q " << Green << "- path where Qt root dir, default takes from \"qmake -v\""; piCout << "-C, --Conf " << Green << "- make \"qt.conf\""; @@ -54,6 +55,7 @@ void usage() { piCout << Bold << "Output control"; piCout << "-o " << Green << "- path for libraries copy to"; piCout << "-p " << Green << "- path for Qt plugins, default \"/plugins\""; + piCout << "--dependencies " << Green << "- don`t copy, only search dependencies by and print them"; piCout << ""; piCout << Bold << "Input control"; piCout << " " << Green << "- executable to process"; @@ -64,10 +66,10 @@ void usage() { int depth = 1; -bool need_qt = false, fake = false, is_ldd = true; -PIString ldd, readelf, objdump, otool, out_dir, qt_dir, out_plugins_dir; +bool need_qt = false, fake = false, is_ldd = true, is_deps = false; +PIString ldd, readelf, objdump, otool, dpkg, out_dir, qt_dir, out_plugins_dir; PIStringList styles, lib_dirs, add_libs, platforms; -PISet all_libs, miss_libs, frameworks, miss_frameworks; +PISet all_libs, miss_libs, all_deps, frameworks, miss_frameworks; PIString findLib(const PIString & l) { @@ -84,7 +86,7 @@ PIString findLib(const PIString & l) { void procLdd(PIString file, bool ext_lib = false, int cur_depth = 0) { ++cur_depth; if (cur_depth > depth) return; - piCout << "scan" << file << "..." << cur_depth; + piCout << "scan" << file << "..."; PISet cur_libs; if (ext_lib) { if (!all_libs[file]) { @@ -278,6 +280,28 @@ void procQt() { } +void procDpkg(const PIString & l) { + PIString vs, cmd = dpkg + " -S " + l; + FILE * fp = popen(cmd.dataAscii(), "r"); + if (fp) { + const int sz = 256; + char in[sz]; + memset(in, 0, sz); + while (true) { + int r = fread(in, 1, sz, fp); + if (r <= 0) break; + vs += PIString(in, r); + } + pclose(fp); + } + if (!vs.isEmpty()) { + vs = vs.left(vs.find(":")); + if (!vs.isEmpty()) + all_deps << vs; + } +} + + int main(int argc, char * argv[]) { PICLI cli(argc, argv); //piCout << cli.rawArguments(); @@ -286,6 +310,7 @@ int main(int argc, char * argv[]) { cli.addArgument("verbose"); cli.addArgument("Conf"); cli.addArgument("fake"); + cli.addArgument("dependencies", PIChar('\0')); cli.addArgument("output", true); cli.addArgument("pqt_out_plugins", true); cli.addArgument("search_path", true); @@ -295,6 +320,7 @@ int main(int argc, char * argv[]) { cli.addArgument("Lreadelf", true); cli.addArgument("Wobjdump", true); cli.addArgument("Motool", true); + cli.addArgument("Dpkg", true); cli.addArgument("depth", true); cli.addArgument("qtdir", true); cli.addArgument("add_libs", true); @@ -306,6 +332,7 @@ int main(int argc, char * argv[]) { piDebug = cli.hasArgument("verbose"); fake = cli.hasArgument("fake"); + is_deps = cli.hasArgument("dependencies"); PIString bin = cli.optionalArguments()[0]; out_dir = cli.argumentValue("output"); lib_dirs = cli.argumentValue("search_path").split(";"); @@ -315,6 +342,7 @@ int main(int argc, char * argv[]) { readelf = cli.argumentValue("Lreadelf"); objdump = cli.argumentValue("Wobjdump"); otool = cli.argumentValue("Motool"); + dpkg = cli.argumentValue("Dpkg"); out_plugins_dir = out_dir + "plugins/"; if (!cli.argumentValue("pqt_out_plugins").isEmpty()) { out_plugins_dir = cli.argumentValue("pqt_out_plugins"); @@ -351,7 +379,7 @@ int main(int argc, char * argv[]) { piCout << s << "->" << findLib(s); procLdd(findLib(s), true); } - if (need_qt) + if (need_qt && !is_deps) procQt(); #ifdef WINDOWS @@ -362,9 +390,13 @@ int main(int argc, char * argv[]) { #ifdef WINDOWS l.replaceAll("/", "\\"); #endif - piCout << "copy" << l; - if (!fake) - system(cmd_copy + "\"" + l + "\" \"" + out_dir + "\"" + cmd_suffix); + if (is_deps) + procDpkg(l); + else { + piCout << "copy" << l; + if (!fake) + system(cmd_copy + "\"" + l + "\" \"" + out_dir + "\"" + cmd_suffix); + } } PIVector fwdirs = frameworks.toVector(); piForeachC (PIString & f, fwdirs) { @@ -377,11 +409,15 @@ int main(int argc, char * argv[]) { miss_frameworks << f; } - piCout << "copied" << clibs.size_s() << "files"; - if (!miss_libs.isEmpty()) - piCout << "Missing libraries:\n - " << PIStringList(miss_libs.toVector()).join("\n - "); - if (!miss_frameworks.isEmpty()) - piCout << "Missing frameworks:\n - " << PIStringList(miss_frameworks.toVector()).join("\n - "); + if (is_deps) { + PICout(PICoutManipulators::AddNewLine) << PIStringList(all_deps.toVector()).join(", "); + } else { + piCout << "copied" << clibs.size_s() << "files"; + if (!miss_libs.isEmpty()) + piCout << "Missing libraries:\n - " << PIStringList(miss_libs.toVector()).join("\n - "); + if (!miss_frameworks.isEmpty()) + piCout << "Missing frameworks:\n - " << PIStringList(miss_frameworks.toVector()).join("\n - "); + } return 0; }