summaryrefslogtreecommitdiffhomepage
path: root/proto-wine
diff options
context:
space:
mode:
Diffstat (limited to 'proto-wine')
-rw-r--r--proto-wine/CMakeLists.txt4
-rw-r--r--proto-wine/ftnoir_protocol_wine.cpp32
-rw-r--r--proto-wine/ftnoir_protocol_wine.h10
-rw-r--r--proto-wine/ftnoir_protocol_wine_dialog.cpp25
-rw-r--r--proto-wine/ftnoir_winecontrols.ui113
-rw-r--r--proto-wine/lang/nl_NL.ts16
-rw-r--r--proto-wine/lang/ru_RU.ts16
-rw-r--r--proto-wine/lang/stub.ts16
-rw-r--r--proto-wine/lang/zh_CN.ts16
-rw-r--r--proto-wine/opentrack-wrapper-wine-main.cxx3
-rw-r--r--proto-wine/opentrack-wrapper-wine-windows.cxx35
-rw-r--r--proto-wine/proton.cpp94
-rw-r--r--proto-wine/wine-shm.h7
13 files changed, 293 insertions, 94 deletions
diff --git a/proto-wine/CMakeLists.txt b/proto-wine/CMakeLists.txt
index b0f18bb2..0beb50e1 100644
--- a/proto-wine/CMakeLists.txt
+++ b/proto-wine/CMakeLists.txt
@@ -16,7 +16,7 @@ if(NOT WIN32)
set(my-rt)
endif()
file(GLOB wine-deps "${CMAKE_CURRENT_SOURCE_DIR}/*.cxx")
- #install(FILES ${wine-deps} DESTINATION "${opentrack-doc-src-pfx}/proto-wine")
+ #install(FILES ${wine-deps} DESTINATION "${opentrack-src}/proto-wine")
add_custom_command(
OUTPUT opentrack-wrapper-wine.exe.so
DEPENDS ${wine-deps}
@@ -27,7 +27,7 @@ if(NOT WIN32)
add_custom_target(wine-wrapper DEPENDS opentrack-wrapper-wine.exe.so)
add_dependencies(opentrack-proto-wine wine-wrapper)
add_dependencies(wine-wrapper opentrack-compat)
- install(FILES "${CMAKE_CURRENT_BINARY_DIR}/opentrack-wrapper-wine.exe.so" DESTINATION ${opentrack-hier-pfx})
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/opentrack-wrapper-wine.exe.so" DESTINATION ${opentrack-libexec})
endif()
endif()
endif()
diff --git a/proto-wine/ftnoir_protocol_wine.cpp b/proto-wine/ftnoir_protocol_wine.cpp
index bed1fed3..af53ff1f 100644
--- a/proto-wine/ftnoir_protocol_wine.cpp
+++ b/proto-wine/ftnoir_protocol_wine.cpp
@@ -1,12 +1,15 @@
#include "ftnoir_protocol_wine.h"
-#include <QString>
-#include <string.h>
-#include <math.h>
#ifndef OTR_WINE_NO_WRAPPER
# include "csv/csv.h"
#endif
#include "compat/library-path.hpp"
+#include <cstring>
+#include <cmath>
+
+#include <QString>
+#include <QDebug>
+
wine::wine() = default;
wine::~wine()
@@ -16,11 +19,14 @@ wine::~wine()
if (shm) {
shm->stop = true;
exit = wrapper.waitForFinished(100);
+ if (exit)
+ qDebug() << "proto/wine: wrapper exit code" << wrapper.exitCode();
}
if (!exit)
{
- wrapper.kill();
- wrapper.waitForFinished(-1);
+ if (wrapper.state() != QProcess::NotRunning)
+ wrapper.kill();
+ wrapper.waitForFinished(1000);
}
#endif
//shm_unlink("/" WINE_SHM_NAME);
@@ -64,11 +70,15 @@ module_status wine::initialize()
if (s.proton_appid == 0)
return error(tr("Must specify application id for Proton (Steam Play)"));
- QProcessEnvironment make_steam_environ(const QString& proton_version, int appid);
- QString proton_path(const QString& proton_version);
+ std::tuple<QProcessEnvironment, QString, bool> make_steam_environ(const QString& proton_path, int appid);
+ QString proton_path(const QString& proton_path);
+
+ wine_path = proton_path(s.proton_path().toString());
+ auto [proton_env, error_string, success] = make_steam_environ(s.proton_path().toString(), s.proton_appid);
+ env = proton_env;
- wine_path = proton_path(s.proton_version);
- env = make_steam_environ(s.proton_version, s.proton_appid);
+ if (!success)
+ return error(error_string);
}
else
{
@@ -79,7 +89,7 @@ module_status wine::initialize()
wineprefix = qgetenv("HOME") + wineprefix.mid(1);
if (wineprefix[0] != '/')
- error(tr("Wine prefix must be an absolute path (given '%1')").arg(wineprefix));
+ return error(tr("Wine prefix must be an absolute path (given '%1')").arg(wineprefix));
env.insert("WINEPREFIX", wineprefix);
}
@@ -89,6 +99,8 @@ module_status wine::initialize()
if (s.fsync)
env.insert("WINEFSYNC", "1");
+ env.insert("OTR_WINE_PROTO", QString::number(s.protocol+1));
+
wrapper.setProcessEnvironment(env);
wrapper.setWorkingDirectory(OPENTRACK_BASE_PATH);
wrapper.start(wine_path, { library_path + "opentrack-wrapper-wine.exe.so" });
diff --git a/proto-wine/ftnoir_protocol_wine.h b/proto-wine/ftnoir_protocol_wine.h
index 8175be03..f7346be9 100644
--- a/proto-wine/ftnoir_protocol_wine.h
+++ b/proto-wine/ftnoir_protocol_wine.h
@@ -9,9 +9,10 @@
#include "options/options.hpp"
using namespace options;
-#include <QString>
-#include <QProcess>
#include <QMutex>
+#include <QProcess>
+#include <QString>
+#include <QVariant>
#include <QDebug>
@@ -24,8 +25,9 @@ struct settings : opts
esync{b, "esync", true};
value<int> proton_appid{b, "proton-appid", 0};
- value<QString> proton_version{b, "proton-version", {} },
- wineprefix{b, "wineprefix", "~/.wine"};
+ value<QVariant> proton_path{b, "proton-version", {} };
+ value<QString> wineprefix{b, "wineprefix", "~/.wine"};
+ value<int> protocol{b, "protocol", 2};
};
class wine : TR, public IProtocol
diff --git a/proto-wine/ftnoir_protocol_wine_dialog.cpp b/proto-wine/ftnoir_protocol_wine_dialog.cpp
index f1cb01c2..a954a752 100644
--- a/proto-wine/ftnoir_protocol_wine_dialog.cpp
+++ b/proto-wine/ftnoir_protocol_wine_dialog.cpp
@@ -1,25 +1,37 @@
#include "ftnoir_protocol_wine.h"
#include <QDebug>
+#include <QDir>
+
#include "api/plugin-api.hpp"
-static const char* proton_versions[] = {
- "4.11", "4.2", "3.16", "3.7",
+static const char* proton_paths[] = {
+ "/.steam/steam/steamapps/common",
+ "/.steam/root/compatibilitytools.d",
+ "/.local/share/Steam/steamapps/common",
};
FTControls::FTControls()
{
ui.setupUi(this);
- for (const char* version : proton_versions)
- ui.proton_version->addItem(version, QVariant{version});
-
- tie_setting(s.proton_version, ui.proton_version);
+ for (const char* path : proton_paths) {
+ QDir dir(QDir::homePath() + path);
+ dir.setFilter(QDir::Dirs);
+ dir.setNameFilters({ "Proton*" });
+ QFileInfoList list = dir.entryInfoList();
+ for (int i = 0; i < list.size(); ++i) {
+ QFileInfo fileInfo = list.at(i);
+ ui.proton_version->addItem(fileInfo.fileName(), QVariant{fileInfo.filePath()});
+ }
+ }
+ tie_setting(s.proton_path, ui.proton_version);
tie_setting(s.variant_wine, ui.variant_wine);
tie_setting(s.variant_proton, ui.variant_proton);
tie_setting(s.esync, ui.esync);
tie_setting(s.fsync, ui.fsync);
tie_setting(s.proton_appid, ui.proton_appid);
tie_setting(s.wineprefix, ui.wineprefix);
+ tie_setting(s.protocol, ui.protocol_selection);
connect(ui.buttonBox, &QDialogButtonBox::accepted, this, &FTControls::doOK);
connect(ui.buttonBox, &QDialogButtonBox::rejected, this, &FTControls::doCancel);
@@ -36,4 +48,3 @@ void FTControls::doCancel()
s.b->reload();
close();
}
-
diff --git a/proto-wine/ftnoir_winecontrols.ui b/proto-wine/ftnoir_winecontrols.ui
index a0a1e071..e9541447 100644
--- a/proto-wine/ftnoir_winecontrols.ui
+++ b/proto-wine/ftnoir_winecontrols.ui
@@ -9,8 +9,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>544</width>
- <height>410</height>
+ <width>528</width>
+ <height>424</height>
</rect>
</property>
<property name="windowTitle">
@@ -33,6 +33,19 @@
<string>Wine variant</string>
</property>
<layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QRadioButton" name="variant_wine">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Wine (system)</string>
+ </property>
+ </widget>
+ </item>
<item row="2" column="1" alignment="Qt::AlignRight">
<widget class="QComboBox" name="proton_version">
<property name="sizePolicy">
@@ -49,16 +62,19 @@
</property>
</widget>
</item>
- <item row="0" column="0">
- <widget class="QRadioButton" name="variant_wine">
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="wineprefix">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="text">
- <string>Wine (system)</string>
+ <property name="minimumSize">
+ <size>
+ <width>286</width>
+ <height>0</height>
+ </size>
</property>
</widget>
</item>
@@ -75,22 +91,6 @@
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QLineEdit" name="wineprefix">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>286</width>
- <height>0</height>
- </size>
- </property>
- </widget>
- </item>
</layout>
</widget>
</item>
@@ -100,6 +100,9 @@
<string>Advanced</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
+ <property name="spacing">
+ <number>6</number>
+ </property>
<item>
<widget class="QCheckBox" name="esync">
<property name="sizePolicy">
@@ -133,18 +136,80 @@
</widget>
</item>
<item>
+ <widget class="QWidget" name="widget_2" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Protocol</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="protocol_selection">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <item>
+ <property name="text">
+ <string>Freetrack</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>NPClient</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Both</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<widget class="QWidget" name="widget" native="true">
<property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
<item>
<widget class="QLabel" name="label">
<property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
diff --git a/proto-wine/lang/nl_NL.ts b/proto-wine/lang/nl_NL.ts
index f71d8ad7..e2183cc8 100644
--- a/proto-wine/lang/nl_NL.ts
+++ b/proto-wine/lang/nl_NL.ts
@@ -39,6 +39,22 @@
<source>Proton (Steam Play)</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Protocol</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freetrack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>NPClient</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Both</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>wine</name>
diff --git a/proto-wine/lang/ru_RU.ts b/proto-wine/lang/ru_RU.ts
index 9937083f..f3b44bd2 100644
--- a/proto-wine/lang/ru_RU.ts
+++ b/proto-wine/lang/ru_RU.ts
@@ -39,6 +39,22 @@
<source>Proton (Steam Play)</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Protocol</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freetrack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>NPClient</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Both</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>wine</name>
diff --git a/proto-wine/lang/stub.ts b/proto-wine/lang/stub.ts
index 9b74a44d..dd4f946f 100644
--- a/proto-wine/lang/stub.ts
+++ b/proto-wine/lang/stub.ts
@@ -39,6 +39,22 @@
<source>Proton (Steam Play)</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Protocol</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freetrack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>NPClient</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Both</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>wine</name>
diff --git a/proto-wine/lang/zh_CN.ts b/proto-wine/lang/zh_CN.ts
index 9b74a44d..dd4f946f 100644
--- a/proto-wine/lang/zh_CN.ts
+++ b/proto-wine/lang/zh_CN.ts
@@ -39,6 +39,22 @@
<source>Proton (Steam Play)</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Protocol</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Freetrack</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>NPClient</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Both</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>wine</name>
diff --git a/proto-wine/opentrack-wrapper-wine-main.cxx b/proto-wine/opentrack-wrapper-wine-main.cxx
index 3df3abc7..9248a212 100644
--- a/proto-wine/opentrack-wrapper-wine-main.cxx
+++ b/proto-wine/opentrack-wrapper-wine-main.cxx
@@ -5,7 +5,6 @@
#include <cstdio>
#include "freetrackclient/fttypes.h"
-#include "wine-shm.h"
#include "compat/export.hpp"
enum Axis {
@@ -14,6 +13,7 @@ enum Axis {
#define __WINE_OLE2_H
#include "compat/shm.h"
+#include "wine-shm.h"
void create_registry_key(void);
@@ -42,7 +42,6 @@ private:
void* mem;
void *hMutex, *hMapFile;
};
-#include <windows.h>
int main(void)
{
diff --git a/proto-wine/opentrack-wrapper-wine-windows.cxx b/proto-wine/opentrack-wrapper-wine-windows.cxx
index 88ced502..c1d552e1 100644
--- a/proto-wine/opentrack-wrapper-wine-windows.cxx
+++ b/proto-wine/opentrack-wrapper-wine-windows.cxx
@@ -4,18 +4,22 @@
#define shm_wrapper ShmWine
#define __WINE_OLE2_H
+// OSX sdk 10.8 build error otherwise
+#undef _LIBCPP_MSVCRT
+
#include "compat/shm.h"
#include "compat/shm.cpp"
#include "wine-shm.h"
#include "compat/library-path.hpp"
+#include <cstdlib>
#include <cstring>
+#include <sysexits.h>
using std::strcat;
-static void write_path(const char* key, const char* subkey)
+static void write_path(const char* key, const char* subkey, bool path)
{
- char dir[8192];
- dir[sizeof(dir)-1] = '\0';
+ char dir[8192] {};
if (GetCurrentDirectoryA(8192, dir) < 8190)
{
@@ -36,13 +40,32 @@ static void write_path(const char* key, const char* subkey)
// there's always a leading and trailing slash
strcat(dir, OPENTRACK_LIBRARY_PATH);
//strcat(dir, "/");
+ if (!path)
+ dir[0] = '\0';
(void) RegSetValueExA(hkpath, subkey, 0, REG_SZ, (BYTE*) dir, strlen(dir) + 1);
RegCloseKey(hkpath);
}
}
}
-void create_registry_key(void) {
- write_path("Software\\NaturalPoint\\NATURALPOINT\\NPClient Location", "Path");
- write_path("Software\\Freetrack\\FreeTrackClient", "Path");
+void create_registry_key(void)
+{
+ bool use_freetrack, use_npclient;
+ const char* env = getenv("OTR_WINE_PROTO");
+ char* endptr;
+ if (!env) env = "";
+ int selection = strtol(env, &endptr, 10);
+ if (*endptr)
+ selection = 0;
+
+ switch (selection)
+ {
+ default: std::exit(EX_USAGE);
+ case 1: use_freetrack = true, use_npclient = false; break;
+ case 2: use_freetrack = false, use_npclient = true; break;
+ case 3: use_freetrack = true, use_npclient = true; break;
+ }
+
+ write_path("Software\\NaturalPoint\\NATURALPOINT\\NPClient Location", "Path", use_npclient);
+ write_path("Software\\Freetrack\\FreeTrackClient", "Path", use_freetrack);
}
diff --git a/proto-wine/proton.cpp b/proto-wine/proton.cpp
index 15306d26..5ecd1f93 100644
--- a/proto-wine/proton.cpp
+++ b/proto-wine/proton.cpp
@@ -7,56 +7,86 @@
#ifndef OTR_WINE_NO_WRAPPER
-#include <QtGlobal>
-#include <QString>
+#include <QDebug>
+#include <QDir>
+#include <QFileInfo>
#include <QProcessEnvironment>
+#include <QtGlobal>
+
+
+static const char* steam_paths[] = {
+ "/.steam/steam/steamapps/compatdata",
+ "/.local/share/Steam/steamapps/compatdata",
+};
+
+static const char* runtime_paths[] = {
+ "/.local/share/Steam/ubuntu12_32/steam-runtime",
+ "/.steam/ubuntu12_32/steam-runtime",
+};
-QProcessEnvironment make_steam_environ(const QString& proton_version, int appid)
+
+std::tuple<QProcessEnvironment, QString, bool> make_steam_environ(const QString& proton_path, int appid)
{
- auto ret = QProcessEnvironment::systemEnvironment();
+ using ret = std::tuple<QProcessEnvironment, QString, bool>;
+ auto env = QProcessEnvironment::systemEnvironment();
+ QString error = "";
QString home = qgetenv("HOME");
+ QString runtime_path, app_wineprefix;
auto expand = [&](QString x) {
- x.replace("HOME", home);
- x.replace("PROTON", proton_version);
- return x;
- };
+ x.replace("HOME", home);
+ x.replace("PROTON_PATH", proton_path);
+ x.replace("RUNTIME_PATH", runtime_path);
+ return x;
+ };
+
+ for (const char* path : runtime_paths) {
+ QDir dir(QDir::homePath() + path);
+ if (dir.exists())
+ runtime_path = dir.absolutePath();
+ }
+
+ if (runtime_path.isEmpty())
+ error = QString("Couldn't find a Steam runtime.");
+
+ for (const char* path : steam_paths) {
+ QDir dir(QDir::homePath() + path + expand("/%1/pfx").arg(appid));
+ if (dir.exists())
+ app_wineprefix = dir.absolutePath();
+ }
+ if (app_wineprefix.isEmpty())
+ error = QString("Couldn't find a Wineprefix for AppId %1").arg(appid);
QString path = expand(
- ":HOME/.local/share/Steam/steamapps/common/Proton PROTON/dist/bin"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/bin"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/bin"
+ ":PROTON_PATH/dist/bin"
);
path += ':'; path += qgetenv("PATH");
- ret.insert("PATH", path);
+ env.insert("PATH", path);
QString library_path = expand(
- ":HOME/.local/share/Steam/steamapps/common/Proton PROTON/dist/lib"
- ":HOME/.local/share/Steam/steamapps/common/Proton PROTON/dist/lib64"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/pinned_libs_32"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/pinned_libs_64"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib/i386-linux-gnu"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/i386/lib"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib/i386-linux-gnu"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/i386/usr/lib"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/lib/x86_64-linux-gnu"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/lib"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib/x86_64-linux-gnu"
- ":HOME/.local/share/Steam/ubuntu12_32/steam-runtime/amd64/usr/lib"
+ ":PROTON_PATH/dist/lib"
+ ":PROTON_PATH/dist/lib64"
+ ":RUNTIME_PATH/pinned_libs_32"
+ ":RUNTIME_PATH/pinned_libs_64"
+ ":RUNTIME_PATH/i386/lib/i386-linux-gnu"
+ ":RUNTIME_PATH/i386/lib"
+ ":RUNTIME_PATH/i386/usr/lib/i386-linux-gnu"
+ ":RUNTIME_PATH/i386/usr/lib"
+ ":RUNTIME_PATH/amd64/lib/x86_64-linux-gnu"
+ ":RUNTIME_PATH/amd64/lib"
+ ":RUNTIME_PATH/amd64/usr/lib/x86_64-linux-gnu"
+ ":RUNTIME_PATH/amd64/usr/lib"
);
library_path += ':'; library_path += qgetenv("LD_LIBRARY_PATH");
- ret.insert("LD_LIBRARY_PATH", library_path);
- ret.insert("WINEPREFIX", expand("HOME/.local/share/Steam/steamapps/compatdata/%1/pfx").arg(appid));
+ env.insert("LD_LIBRARY_PATH", library_path);
+ env.insert("WINEPREFIX", app_wineprefix);
- return ret;
+ return ret(env, error, error.isEmpty());
}
-QString proton_path(const QString& proton_version)
+QString proton_path(const QString& proton_path)
{
- QString wine_path = "HOME/.local/share/Steam/steamapps/common/Proton PROTON/dist/bin/wine";
- wine_path.replace("HOME", qgetenv("HOME"));
- wine_path.replace("PROTON", proton_version);
- return wine_path;
+ return proton_path + "/dist/bin/wine";
}
#endif
diff --git a/proto-wine/wine-shm.h b/proto-wine/wine-shm.h
index 536f647f..62e8bbec 100644
--- a/proto-wine/wine-shm.h
+++ b/proto-wine/wine-shm.h
@@ -8,17 +8,10 @@
# pragma clang diagnostic ignored "-Wreserved-id-macro"
#endif
-// OSX sdk 10.8 build error otherwise
-#undef _LIBCPP_MSVCRT
-
#ifdef __clang__
# pragma clang diagnostic pop
#endif
-#include <memory>
-
-template<typename t> using ptr = std::shared_ptr<t>;
-
struct WineSHM {
double data[6];
int gameid, gameid2;