summarylogtreecommitdiffstats
path: root/ulwgl-faugus
blob: d52bb855dfe50496767c9c39206f5affb12e7725 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/bin/sh

# use for debug only.
# set -x

if [ -z "$1" ] || [ -z "$WINEPREFIX" ] || [ -z "$GAMEID" ]; then
 echo "Usage: WINEPREFIX=<wine-prefix-path> GAMEID=<ulwgl-id> PROTONPATH=<proton-version-path> ./gamelauncher.sh <executable-path> <arguments>"
 echo "Ex:"
 echo "WINEPREFIX=$HOME/Games/epic-games-store GAMEID=egs PROTONPATH=\"$HOME/.steam/steam/compatibilitytools.d/GE-Proton8-28\" ./gamelauncher.sh \"$HOME/Games/epic-games-store/drive_c/Program Files (x86)/Epic Games/Launcher/Portal/Binaries/Win32/EpicGamesLauncher.exe\" \"-opengl -SkipBuildPatchPrereq\""
 exit 1
fi

ULWGL_PROTON_VER="ULWGL-Proton-8.0-5"
ULWGL_LAUNCHER_VER="0.1-RC3"

me="$(readlink -f "$0")"
#here="${me%/*}"

# Self-update
# In flatpak it will check for /app/share/ULWGL/ULWGL-launcher.tar.gz and check version
# In distro package it will check for /usr/share/ULWGL/ULWGL-launcher.tar.gz and check version
# If tarball does not exist it will just download it.
if [ ! -d "$HOME"/.local/share/ULWGL/ ]; then
  if [ -f "${me%/*/*}"/share/ULWGL/ULWGL-launcher.tar.gz ]; then
    tar -zxvf "${me%/*/*}"/share/ULWGL/ULWGL-launcher.tar.gz --one-top-level="$HOME"/.local/share/ULWGL
  else
    wget https://github.com/Open-Wine-Components/ULWGL-launcher/releases/download/$ULWGL_LAUNCHER_VER/ULWGL-launcher.tar.gz
    tar -zxvf ULWGL-launcher.tar.gz --one-top-level="$HOME"/.local/share/ULWGL
  fi
else
    if [ "$ULWGL_LAUNCHER_VER" != "$(cat "$HOME"/.local/share/ULWGL/ULWGL-VERSION)" ]; then
      rm -Rf "$HOME"/.local/share/ULWGL/
      if [ -f "${me%/*/*}"/share/ULWGL/ULWGL-launcher.tar.gz ]; then
        tar -zxvf "${me%/*/*}"/share/ULWGL/ULWGL-launcher.tar.gz --one-top-level="$HOME"/.local/share/ULWGL
      else
        wget https://github.com/Open-Wine-Components/ULWGL-launcher/releases/download/$ULWGL_LAUNCHER_VER/ULWGL-launcher.tar.gz
        tar -zxvf ULWGL-launcher.tar.gz --one-top-level="$HOME"/.local/share/ULWGL
      fi
    fi
fi

if [ "$WINEPREFIX" ]; then
   if [ ! -d "$WINEPREFIX" ]; then
     mkdir -p "$WINEPREFIX"
     export PROTON_DLL_COPY="*"
   fi
   if [ ! -d "$WINEPREFIX"/pfx ]; then
     ln -s "$WINEPREFIX" "$WINEPREFIX"/pfx > log 2>&1
   fi
   if [ ! -f "$WINEPREFIX"/tracked_files ]; then
     touch "$WINEPREFIX"/tracked_files
   fi
   if [ ! -f "$WINEPREFIX/dosdevices/" ]; then
     mkdir -p "$WINEPREFIX"/dosdevices
     ln -s "../drive_c" "$WINEPREFIX/dosdevices/c:" > log 2>&1
   fi
fi
if [ -n "$PROTONPATH" ]; then
  if [ ! -d "$PROTONPATH" ]; then
    echo "ERROR: $PROTONPATH is invalid, aborting!"    exit 1
    exit 1
  fi
fi
if [ -z "$PROTONPATH" ]; then
  if [ ! -d "$HOME"/.local/share/Steam/compatibilitytools.d/$ULWGL_PROTON_VER ]; then
    wget https://github.com/Open-Wine-Components/ULWGL-Proton/releases/download/$ULWGL_PROTON_VER/$ULWGL_PROTON_VER.tar.gz
    wget https://github.com/Open-Wine-Components/ULWGL-Proton/releases/download/$ULWGL_PROTON_VER/$ULWGL_PROTON_VER.sha512sum
    checksum=$(sha512sum $ULWGL_PROTON_VER.tar.gz)
    if [ "$checksum" = "$(cat $ULWGL_PROTON_VER.sha512sum)" ]; then
      tar -zxvf $ULWGL_PROTON_VER.tar.gz --one-top-level="$HOME"/.local/share/Steam/compatibilitytools.d/
      rm $ULWGL_PROTON_VER.tar.gz
      rm $ULWGL_PROTON_VER.sha512sum
    else
      echo "ERROR: $ULWGL_PROTON_VER.tar.gz checksum does not match $ULWGL_PROTON_VER.sha512sum, aborting!"
      rm $ULWGL_PROTON_VER.tar.gz
      rm $ULWGL_PROTON_VER.sha512sum
      exit 1
    fi
  fi
  PROTONPATH="$HOME"/.local/share/Steam/compatibilitytools.d/$ULWGL_PROTON_VER
else
  export PROTONPATH="$PROTONPATH"
fi
export ULWGL_ID="$GAMEID"
export STEAM_COMPAT_APP_ID="0"
numcheck='^[0-9]+$'
if echo "$ULWGL_ID" | cut -d "-" -f  2 | grep -Eq "$numcheck"; then
  STEAM_COMPAT_APP_ID=$(echo "$ULWGL_ID" | cut -d "-" -f  2)
  export STEAM_COMPAT_APP_ID
fi
export SteamAppId="$STEAM_COMPAT_APP_ID"
export SteamGameId="$STEAM_COMPAT_APP_ID"

# TODO: Ideally this should be the main game install path, which is often, but not always the path of the game's executable.
if [ -z "$STEAM_COMPAT_INSTALL_PATH" ]; then
  exepath="$(readlink -f "$1")"
  gameinstallpath="${exepath%/*}"
  export STEAM_COMPAT_INSTALL_PATH="$gameinstallpath"
fi

compat_lib_path=$(findmnt -T "$STEAM_COMPAT_INSTALL_PATH" | tail -n 1 | awk '{ print $1 }')
if [ "$compat_lib_path" != "/" ]; then
    export STEAM_COMPAT_LIBRARY_PATHS="${STEAM_COMPAT_LIBRARY_PATHS:+"${STEAM_COMPAT_LIBRARY_PATHS}:"}$compat_lib_path"
fi

if [ -z "$STEAM_RUNTIME_LIBRARY_PATH" ]; then
  # The following info taken from steam ~/.local/share/ubuntu12_32/steam-runtime/run.sh
  host_library_paths=
  exit_status=0
  ldconfig_output=$(/sbin/ldconfig -XNv 2> /dev/null; exit $?) || exit_status=$?
  if [ $exit_status != 0 ]; then
      echo "Warning: An unexpected error occurred while executing \"/sbin/ldconfig -XNv\", the exit status was $exit_status"
  fi

  echo "$ldconfig_output" | while IFS= read -r line; do
    # If line starts with a leading / and contains :, it's a new path prefix
    case "$line" in
    /*:*)
        library_path_prefix=$(echo "$line" | cut -d: -f1)
        host_library_paths="$host_library_paths$library_path_prefix:"
        ;;
    esac
  done

  host_library_paths="${LD_LIBRARY_PATH:+"${LD_LIBRARY_PATH}:"}$host_library_paths"
  steam_runtime_library_paths="${STEAM_COMPAT_INSTALL_PATH}:${host_library_paths}"
  export STEAM_RUNTIME_LIBRARY_PATH="$steam_runtime_library_paths"
fi

if [ -z "$PROTON_VERB" ]; then
  export PROTON_VERB="waitforexitandrun"
fi

export STEAM_COMPAT_CLIENT_INSTALL_PATH=''
export STEAM_COMPAT_DATA_PATH="$WINEPREFIX"
export STEAM_COMPAT_SHADER_PATH="$STEAM_COMPAT_DATA_PATH"/shadercache

export PROTON_CRASH_REPORT_DIR='/tmp/ULWGL_crashreports'
export FONTCONFIG_PATH=''

export EXE="$1"
if [ "$EXE" = "createprefix"  ]; then
	# Hack, leave empty.
	# forces proton to create a prefix without actually running anything.
	EXE=""
fi
shift 1

export STEAM_COMPAT_TOOL_PATHS="$PROTONPATH:$HOME"/.local/share/ULWGL
export STEAM_COMPAT_MOUNTS="$PROTONPATH:$HOME"/.local/share/ULWGL

"$HOME"/.local/share/ULWGL/ULWGL "--verb=$PROTON_VERB" -- "$PROTONPATH"/proton "$PROTON_VERB" "$EXE" "$@"