Merge branch 'master' of https://git.shs.tools/SHS/pip into micro

This commit is contained in:
Andrey
2022-02-11 12:00:49 +03:00
2 changed files with 34 additions and 43 deletions

View File

@@ -207,10 +207,19 @@ PIString execute(const PIString & cmd) {
}
PIStringList filter(const PIString & in, const PIString & f) {
PIStringList ret, lines = in.split("\n");
for (const PIString & l: lines)
if (l.contains(f)) ret << l.trimmed();
return ret;
}
void checkQtLib(PIString lib) {
PIString base = lib.toLowerCase(), pref, suff;
if (base.startsWith("lib")) {pref += "lib"; base.cutLeft(3);}
if (base.startsWith("qt5")) {pref += "Qt5"; base.cutLeft(3);}
if (base.startsWith("qt6")) {pref += "Qt6"; base.cutLeft(3);}
if (base.startsWith("qt" )) {pref += "Qt" ; base.cutLeft(2);}
if (base.find('.') >= 0) {suff = base.right(base.size_s() - base.find('.')); base = base.left(base.find('.'));}
for (int i = 0; ; ++i) {
@@ -244,44 +253,34 @@ void procLdd(PIString file, bool ext_lib = false, int cur_depth = 0) {
}
PIStringList lines;
if (is_ldd) {
lines = execute(ldd + " " + file).split("\n");
lines = execute(ldd + " \"" + file + "\"").split("\n");
} else {
PIString cmd;
if (!readelf.isEmpty()) {
cmd = readelf + " -a " + file;
cmd += " | grep \"Shared library:\" | grep -oG \"\\[.*\\]\"";
lines = filter(execute(readelf + " -a \"" + file + "\""), "Shared library:");
for (PIString & l: lines) {
l.cutRight(1);
l.cutLeft(l.find('[') + 1);
l.trim();//.append('.').prepend('.');
}
}
if (!objdump.isEmpty()) {
cmd = objdump + " -p " + file;
cmd += " | grep \"DLL Name:\"";
lines = execute(cmd).split("\n");
cmd = objdump + " -p " + file;
cmd += " | grep \"NEEDED\"";
lines << execute(cmd).split("\n");
cmd.clear();
}
if (!otool.isEmpty()) {
cmd = otool + " -L " + file;
cmd += " | grep -o \".*(\"";
}
//piCout << cmd;
if (!cmd.isEmpty())
lines = execute(cmd).split("\n");
if (!objdump.isEmpty()) {
piForeach (PIString & l, lines) {
l.trim();
if (l.startsWith("DLL")) l.cutLeft(9).trim();
else l.cutLeft(6).trim();
l.append('.').prepend('.');
PIString out = execute(objdump + " -p \"" + file + "\"");
lines = filter(out, "DLL Name:");
lines << filter(out, "NEEDED");
for (PIString & l: lines) {
if (l.startsWith("DLL")) l.cutLeft(9);
else l.cutLeft(6);
l.trim();//.append('.').prepend('.');
}
}
if (!otool.isEmpty()) {
lines = filter(execute(otool + " -L \"" + file + "\""), "(");
piForeach (PIString & l, lines) {
l.trim().cutRight(1).trim();
l.append('.').prepend('.');
l = l.left(l.find('('));
l.trim();//.append('.').prepend('.');
}
}
//piCout << "readelf:" << vs;
}
piForeachC (PIString & sl, lines) {
PIString l = sl.trimmed();
@@ -305,7 +304,7 @@ void procLdd(PIString file, bool ext_lib = false, int cur_depth = 0) {
continue;
}
} else {
l.cutLeft(1).cutRight(1).trim();
//l.cutLeft(1).cutRight(1).trim();
if (l.isEmpty()) continue;
if (!otool.isEmpty()) {
if (!l.startsWith("/usr/local/")) {
@@ -379,7 +378,7 @@ void procQt() {
PIString qloc = l.trim();
piCout << "Qt" << qv << "in" << qloc;
PIString qdir;
PIStringList suffixes({".", "..", "qt5", "../qt5"});
PIStringList suffixes({".", "..", "qt5", "../qt5", "qt6", "../qt6"});
piForeachC (PIString s, suffixes) {
PIString qd = qloc + "/" + s + "/plugins/";
if (piDebug) PICout(AddSpaces) << "Qt plugins root try" << qd << "...";
@@ -392,17 +391,6 @@ void procQt() {
}
if (qdir.isEmpty())
break;
/*#ifdef WINDOWS
if (qt_dir.isEmpty())
qdir += "/../plugins/";
else
qdir += "/plugins/";
#else
if (qt_dir.isEmpty())
qdir += "/qt5/plugins/";
else
qdir += "/plugins/";
#endif*/
piForeachC (PIString & plugin, pdirs) {
PIStringList filters = qt_filters[plugin];
piForeachC (PIString & f, filters) {
@@ -471,9 +459,11 @@ void patchNameTool() {
//PICout(DefaultControls) << "map" << f << "->" << (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");
dlibs = filter(execute(otool + " -L \"" + local_lib + "\""), "(");
piForeach (PIString & l, dlibs) {
l = l.left(l.find('('));
l.trim();
}
if (!dlibs.isEmpty()) {
execute("chmod +w \"" + local_lib + "\"");
}

View File

@@ -28,6 +28,7 @@ int main (int argc, char * argv[]) {
# include "piscreentypes.h"
# include "pisharedmemory.h"
# include "pifile.h"
# include <wingdi.h>
# include <wincon.h>
# include "../../libs/console/piterminal.cpp"