mirror of
https://github.com/RPCS3/AppImageKit-checkrt.git
synced 2026-01-31 01:25:17 +01:00
85 lines
3.2 KiB
Diff
85 lines
3.2 KiB
Diff
--- a/AppRun.c
|
|
+++ b/AppRun.c
|
|
@@ -164,6 +164,9 @@
|
|
char *old_env;
|
|
size_t length;
|
|
const char *format;
|
|
+ checkrt(usr_in_appdir);
|
|
+ if (optional_ld_preload)
|
|
+ putenv(optional_ld_preload);
|
|
|
|
/* https://docs.python.org/2/using/cmdline.html#envvar-PYTHONHOME */
|
|
SET_NEW_ENV(new_pythonhome, appdir_s, "PYTHONHOME=%s/usr/", appdir);
|
|
@@ -171,8 +174,61 @@
|
|
old_env = getenv("PATH") ?: "";
|
|
SET_NEW_ENV(new_path, appdir_s*5 + strlen(old_env), "PATH=%s/usr/bin/:%s/usr/sbin/:%s/usr/games/:%s/bin/:%s/sbin/:%s", appdir, appdir, appdir, appdir, appdir, old_env);
|
|
|
|
+ int doUseBuiltinSTDCPP = true;
|
|
+ // we don't want stdout, only stderr
|
|
+ FILE *fp = popen("./optional/checker 2>&1 >/dev/null", "r");
|
|
+ if (fp != NULL)
|
|
+ {
|
|
+ char errorStr[1035];
|
|
+ fgets(errorStr, sizeof(errorStr), fp);
|
|
+ const char* searchStr = "*libstdc++*version `*' not found (required by";
|
|
+ int searchStrI = 0;
|
|
+ int errorStrI = 0;
|
|
+ int lastWildcard = 0;
|
|
+ while (searchStrI < strlen(searchStr))
|
|
+ {
|
|
+ if (errorStrI >= strlen(errorStr))
|
|
+ {
|
|
+ doUseBuiltinSTDCPP = false;
|
|
+ break;
|
|
+ }
|
|
+ if (errorStr[errorStrI] == searchStr[searchStrI])
|
|
+ {
|
|
+ errorStrI++;
|
|
+ searchStrI++;
|
|
+ }
|
|
+ else if (searchStr[searchStrI] == '*')
|
|
+ {
|
|
+ if (errorStr[errorStrI] == searchStr[searchStrI+1])
|
|
+ {
|
|
+ if (lastWildcard == 0)
|
|
+ lastWildcard = searchStrI;
|
|
+ searchStrI++;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ errorStrI++;
|
|
+ }
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ searchStrI = lastWildcard;
|
|
+ lastWildcard = 0;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ doUseBuiltinSTDCPP = false;
|
|
+ }
|
|
+
|
|
old_env = getenv("LD_LIBRARY_PATH") ?: "";
|
|
SET_NEW_ENV(new_ld_library_path, appdir_s*10 + strlen(old_env), "LD_LIBRARY_PATH=%s/usr/lib/:%s/usr/lib/i386-linux-gnu/:%s/usr/lib/x86_64-linux-gnu/:%s/usr/lib32/:%s/usr/lib64/:%s/lib/:%s/lib/i386-linux-gnu/:%s/lib/x86_64-linux-gnu/:%s/lib32/:%s/lib64/:%s", appdir, appdir, appdir, appdir, appdir, appdir, appdir, appdir, appdir, appdir, old_env);
|
|
+ if (doUseBuiltinSTDCPP)
|
|
+ {
|
|
+ SET_NEW_ENV(new_ld_library_path, strlen(optional_ld_library_path) + appdir_s*10 + strlen(old_env), "LD_LIBRARY_PATH=%s%s/usr/lib/:%s/usr/lib/i386-linux-gnu/:%s/usr/lib/x86_64-linux-gnu/:%s/usr/lib32/:%s/usr/lib64/:%s/lib/:%s/lib/i386-linux-gnu/:%s/lib/x86_64-linux-gnu/:%s/lib32/:%s/lib64/:%s", optional_ld_library_path, appdir, appdir, appdir, appdir, appdir, appdir, appdir, appdir, appdir, appdir, old_env);
|
|
+ }
|
|
|
|
old_env = getenv("PYTHONPATH") ?: "";
|
|
SET_NEW_ENV(new_pythonpath, appdir_s + strlen(old_env), "PYTHONPATH=%s/usr/share/pyshared/:%s", appdir, old_env);
|
|
@@ -201,6 +257,9 @@
|
|
if (ret == -1)
|
|
die("Error executing '%s': %s\n", exe, strerror(error));
|
|
|
|
+ free(optional_ld_library_path);
|
|
+ if (optional_ld_preload)
|
|
+ free(optional_ld_preload);
|
|
free(line);
|
|
free(desktop_file);
|
|
free(usr_in_appdir);
|