summarylogtreecommitdiffstats
path: root/evesetup.shlib
blob: 1a8ba6d08b5233e3982c8e5d24dab103c8eedb6c (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
#!/bin/sh

# evelauncher fixed values

CONFDIR="$HOME/.config/CCP"
EVECONF="$CONFDIR/EVE.conf"

# default value if not set

SHAREDIR="$HOME/.eve"

# evesetup shared functions

check_elv() {
	ELBIN=$(getdate $LAUNCHER/evelauncher)
	ELBIN=$(expr $ELBIN / 180 \* 180)
	ELARC=$(getdate $SETUPDIR/lib/evelauncher-$ELVER.tar.?z)
	ELARC=$(expr $ELARC / 180 \* 180)
	if [ "$ELBIN" -lt "$ELARC" ] ;then
	    if [ -d "$LAUNCHER" ] ;then
		rm -rf $LAUNCHER
		desktop_msg "Update EVE Launcher binaries"
	    fi
	    tar xf $SETUPDIR/lib/evelauncher-$ELVER.tar.?z -C $EVEDIR
	    mv $EVEDIR/evelauncher $LAUNCHER
	    if [ -f "$HOME/.config/devilspie2/evelauncher.lua" ] ;then
		sed -i 2\ s,[0-9].*\",$ELVER\", \
		    $HOME/.config/devilspie2/evelauncher.lua
	    fi
	fi
}

check_env() {
    if [ -d "$CONFDIR" ] ;then
	if [ -r "$EVECONF" ] ;then
	    SHAREDIR=$(getval SharedCacheFolder)
	fi
    fi
    [ ! -d "$SHAREDIR" ] && SHAREDIR=""
    if [ "x$SHAREDIR" != "x$EVEDIR/SharedCache/" ] ;then
	desktop_msg "Please wait, preparing environment in $EVEDIR"
	mkdir -p $CONFDIR
	echo "[General]" >$EVECONF
	echo "SharedCacheFolder=$EVEDIR/SharedCache/" >>$EVECONF
	echo "UseCustomWine=true" >>$EVECONF
	echo "CustomWinePath=$WINEPATH/wine" >>$EVECONF
	mkdir -p $EVEDIR/SharedCache
	if [ -d "$SHAREDIR/ResFiles/" ] ;then
	    mv $SHAREDIR/ResFiles/ $EVEDIR/SharedCache/
	    mv $SHAREDIR/*.txt $EVEDIR/SharedCache/
	    rm -rf $SHAREDIR
	fi
    fi
}

check_steam() {
    if [ ! -r "$LAUNCHER/steam_appid.txt" -a -x "$(which steam 2>/dev/null)" ] ;then
	echo "8500" >$LAUNCHER/steam_appid.txt
    fi
}

check_wine() {
    CUSTOMWP=$(getval CustomWinePath)
    SHAREDIR=$(getval SharedCacheFolder)
    UCW=$(getval UseCustomWine)
    WINEPREFIX=${SHAREDIR}wineenv
    if [ "x$UCW" = "xtrue" ] ;then
	WINEPATH=${CUSTOMWP%/*}
	[ -d "${SHAREDIR}wine" ] && rm -rf ${SHAREDIR}wine
    else
	CUSTOMWP=${SHAREDIR}wine
	WINEPATH=${SHAREDIR}wine/bin
    fi
    if [ -x "$WINEPATH/wine64" ] ;then
	WINE=$WINEPATH/wine64
    else
	WINE=$WINEPATH/wine
    fi
    if [ ! -x "$WINE" ] ;then
	desktop_msg "ERROR: \"$CUSTOMWP\" not found!"
	exit 1
    fi
    INSTWINE=$(cat $WINEPREFIX/.update-timestamp 2>/dev/null | tr -dc [:digit:]) || true
    WINEINFP=$(readlink -f $CUSTOMWP)
    WINECONF=$(find ${WINEINFP%bin*}share/wine* -name 'wine.inf')
    WINEDATE=$(getdate $WINECONF)
    if [ "x$WINEDATE" != "x$INSTWINE" ] ;then
	desktop_msg "Preparing wine environment for EVE"
	env WINEPREFIX=$WINEPREFIX \
	    WINEDEBUG=-all \
	    WINEDLLOVERRIDES="mscoree,mshtml=d" \
	    $WINE wineboot
	env WINEPREFIX=$WINEPREFIX \
	    $WINE reg add \
	    'HKCU\Software\Wine\FileOpenAssociations' \
	    /v Enable /d N /f >/dev/null
    fi
    if [ "x$(grep -csw winemenubuilder $WINEPREFIX/system.reg)" != "x0" ] ;then
	env WINEPREFIX=$WINEPREFIX \
	    $WINE reg delete \
	    'HKLM\Software\Microsoft\Windows\CurrentVersion\RunServices' \
	    /v winemenubuilder /f >/dev/null
    fi
    DXVKLIBDIR=$SETUPDIR/lib/dxvk
    WINSYSDIR=$WINEPREFIX/drive_c/windows/system32
    W32SYSDIR=${WINSYSDIR%/*}/syswow64
    if [ -r "$DXVKLIBDIR" -a ! -r "$WINSYSDIR/d3d11.dll.old" ] ;then
	desktop_msg "Setup DXVK in EVE's wine environment"
	for DXVKFILE in d3d10core d3d11 dxgi ;do
	    mv $WINSYSDIR/$DXVKFILE.dll $WINSYSDIR/$DXVKFILE.dll.old
	    cp $DXVKLIBDIR/x64/$DXVKFILE.dll $WINSYSDIR/$DXVKFILE.dll
	    if [ -d "$W32SYSDIR" ] ;then
		mv $W32SYSDIR/$DXVKFILE.dll $W32SYSDIR/$DXVKFILE.dll.old
		cp $DXVKLIBDIR/x32/$DXVKFILE.dll $W32SYSDIR/$DXVKFILE.dll
	    fi
	    env WINEPREFIX=$WINEPREFIX \
		$WINE reg add \
		'HKCU\Software\Wine\DllOverrides' \
		/v $DXVKFILE /d native >/dev/null
	done
    fi
}

desktop_msg() {
    if [ -x "$(which notify-send 2>/dev/null)" ] ;then
	notify-send -i eve $(basename $0) "$@"
    fi
    printf "$(basename $0): $@\n"
}

getdate() {
    printf $(ls -l --time-style=+%s $1 2>/dev/null | cut -d' ' -f6) \
	2>/dev/null || printf 180
}

getval() {
    if [ ! -r "$EVECONF" ] ;then
	desktop_msg "ERROR: EVE Configuration not found!"
	exit 1
    fi
    printf $(grep "$1" $EVECONF | cut -d= -f2)
}