diff --git a/utils/deploy_tool/main.cpp b/utils/deploy_tool/main.cpp index 1464671a..ac1ee75c 100644 --- a/utils/deploy_tool/main.cpp +++ b/utils/deploy_tool/main.cpp @@ -66,7 +66,7 @@ void usage() { piCout << Green << Bold << "Usage:" << Default << "\"deploy_tool [-hvfC] [--dependencies [--prefix ]] " "[--qt-plugins-dir ] [-s ] [--ignore ] [-S ] " "[-l ] [-D ] [--dpkg-workdir ] [-L | -W | -M ] " - "[--name-tool ] [--rpath ] [-d ] [-q ] [-a ] [-S ] " + "[--name-tool ] [--rpath] [-d ] [-q ] [-a ] [-S ] " "[-P ] [--qt-plugins ] [--qt-modules ] [--qt-conf-dir ] -o [ ...]\"" << NewLine; piCout << Green << Bold << "Details:"; piCout << Bold << "Debug control"; @@ -85,7 +85,7 @@ void usage() { piCout << "--dpkg-workdir " << Green << "- dpkg \"admindir\" path, default \"\""; piCout << "--name-tool " << Green << "- \"install_name_tool\" path, default \"install_name_tool\""; piCout << "--strip " << Green << "- \"strip\" path, default \"strip\""; - piCout << "--rpath " << Green << "- set rpath for input files to \"rpath\" using \"patchelf\" if non-empty"; + piCout << "--rpath " << Green << "- set rpath for input files using \"patchelf\""; piCout << "-d " << Green << "- maximum dependepcies depth, default 8"; piCout << ""; piCout << Bold << "Qt control"; @@ -130,9 +130,9 @@ QtDep qt_deps[] = { int depth = 8; -bool fake = false, is_ldd = true, is_deps = false, need_qt = false, make_qt_format = true; +bool fake = false, is_ldd = true, is_deps = false, need_qt = false, make_qt_format = true, rpath = false; PIString ldd, readelf, objdump, otool, dpkg, nametool, strip, out_dir, qt_dir, dpkg_workdir; -PIString qt_pref, qt_suff, qt_conf_dir, qt_plugins_dir, rpath; +PIString qt_pref, qt_suff, qt_conf_dir, qt_plugins_dir; PIStringList styles, lib_dirs, add_libs, platforms, sqldrivers, input_files, plugin_libs, qt_add_libs; PISet all_libs, miss_libs, all_deps, frameworks, framework_libs, miss_frameworks, qt_plugins, ignore_libs, qt_libs; PIMap qt_filters; @@ -491,7 +491,10 @@ void patchNameTool() { void patchRPath(const PIString & file) { - PIString cmd = "patchelf --set-rpath \"" + rpath + "\" \"" + file + "\""; + PIFile::FileInfo fi(file); + PIString rp = PIDir(fi.dir()).relative(out_dir); + if (rp.isEmpty()) rp = "."; + PIString cmd = "patchelf --set-rpath \"\\$ORIGIN/" + rp + "\" \"" + file + "\""; piCout << "set rpath" << file << cmd; execute(cmd); } @@ -521,7 +524,7 @@ int main(int argc, char * argv[]) { cli.addArgument("Wobjdump", true); cli.addArgument("Motool", true); cli.addArgument("name-tool", PIChar('\0'), true); - cli.addArgument("rpath", PIChar('\0'), true); + cli.addArgument("rpath", PIChar('\0')); cli.addArgument("strip", PIChar('\0'), true); cli.addArgument("Dpkg", true); cli.addArgument("dpkg-workdir", PIChar('\0'), true); @@ -548,7 +551,7 @@ int main(int argc, char * argv[]) { otool = cli.argumentValue("Motool"); nametool = cli.argumentValue("name-tool"); strip = cli.argumentValue("strip"); - rpath = cli.argumentValue("rpath"); + rpath = cli.hasArgument("rpath"); if (nametool.isEmpty()) nametool = "install_name_tool"; if (strip.isEmpty()) @@ -653,7 +656,7 @@ int main(int argc, char * argv[]) { } }); - if (!rpath.isEmpty()) { + if (rpath) { input_files.forEach([&](const PIString & f){ patchRPath(f); }); @@ -706,7 +709,7 @@ int main(int argc, char * argv[]) { } } - if (!rpath.isEmpty()) { + if (rpath) { plugin_libs.forEach([&](const PIString & f){ patchRPath(f); });