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

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

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)" ] ;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
    DXVKLIBDIR=$SETUPDIR/lib/dxvk
    DXVKFILELIST="d3d10core d3d11 dxgi"
    WINSYSDIR=$WINEPREFIX/drive_c/windows/system32
    W32SYSDIR=${WINSYSDIR%/*}/syswow64
    INSTWINE=$(cat $WINEPREFIX/.update-timestamp | 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 "Prepare wine environment for EVE"
	for DXVKFILE in d3d10_1 d3d10core d3d10 d3d11 d3d9 dxgi ;do
	    rm $WINSYSDIR/$DXVKFILE.dll* || true
	    rm $W32SYSDIR/$DXVKFILE.dll* || true
	    sed -i /\"$DXVKFILE\"=\"/d $WINEPREFIX/user.reg || true
	done
	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
	if [ -d "$DXVKLIBDIR" ] ;then
	    for DXVKFILE in $DXVKFILELIST ;do
		cp $DXVKLIBDIR/x64/$DXVKFILE.dll $WINSYSDIR/$DXVKFILE.dll
		if [ -d "$W32SYSDIR" ] ;then
		    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
    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
}

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

getdate() {
    printf $(ls -l --time-style=+%s $1 | cut -d' ' -f6) || printf 180
}

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