Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-gnome
Path: blob/main/emulators/i386-wine-devel/files/nvidia.sh
16150 views
1
#!/bin/sh
2
# Copyright 2010 to 2015 David Naylor <[email protected]>
3
# Copyright 2012 Jan Beich <[email protected]>
4
# Copyright 2020 Lorenzo Salvadore <[email protected]>
5
# All rights reserved.
6
#
7
# Redistribution and use in source and binary forms, with or without
8
# modification, are permitted provided that the following conditions are met:
9
#
10
# 1. Redistributions of source code must retain the above copyright notice,
11
# this list of conditions and the following disclaimer.
12
#
13
# 2. Redistributions in binary form must reproduce the above copyright notice,
14
# this list of conditions and the following disclaimer in the documentation
15
# and/or other materials provided with the distribution.
16
#
17
# THIS SOFTWARE IS PROVIDED BY David Naylor ``AS IS'' AND ANY EXPRESS OR IMPLIED
18
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
20
# EVENT SHALL David Naylor OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
23
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
#
28
# The views and conclusions contained in the software and documentation are
29
# those of the authors and should not be interpreted as representing official
30
# policies, either expressed or implied, of David Naylor.
31
32
set -e
33
34
PORTSDIR=${PORTSDIR:-/usr/ports}
35
PREFIX=${PREFIX:-/usr/local}
36
DISTDIR=${DISTDIR:-${PORTSDIR}/distfiles}
37
38
if [ -d $DISTDIR ]
39
then
40
cd $DISTDIR
41
NO_REMOVE_NVIDIA="yes"
42
else
43
cd /tmp/
44
fi
45
46
terminate() {
47
48
echo "!!! $2 !!!"
49
echo "Terminating..."
50
exit $1
51
52
}
53
54
args=`getopt dn $*`
55
if [ $? -ne 0 ]
56
then
57
echo "Usage: $0 [-n]"
58
exit 7
59
fi
60
set -- $args
61
while true
62
do
63
case $1 in
64
-d)
65
rm -f ${PREFIX}/lib32/libGL.so.1
66
rm -f ${PREFIX}/lib32/libGLcore.so.1 ${PREFIX}/lib32/libnvidia-tls.so.1
67
rm -f ${PREFIX}/lib32/libnvidia-glcore.so.1 ${PREFIX}/lib32/libnvidia-tls.so.1
68
rm -rf ${PREFIX}/lib32/.nvidia/
69
exit 0
70
;;
71
-n)
72
NO_FETCH=yes
73
;;
74
--)
75
shift
76
break
77
;;
78
esac
79
shift
80
done
81
82
version() {
83
local ret pkg="$1"
84
if [ -f "/usr/local/sbin/pkg" ]
85
then
86
ret=`pkg query -g '%v' "$pkg" || true`
87
fi
88
89
# installed manually or failed to register
90
if [ -z "$ret" ] && [ "$pkg" = "nvidia-driver*" ]
91
then
92
ret=`sed -n "s/.*Version: //p" 2> /dev/null \
93
$PREFIX/share/doc/NVIDIA_GLX-1.0/README || true`
94
fi
95
echo "$ret"
96
}
97
98
[ `whoami` = root ] \
99
|| terminate 254 "This script should be run as root"
100
101
echo "===> Patching i386-wine to work with x11/nvidia-driver:"
102
103
if [ -z "${WINE}" ]
104
then
105
WINE=`version 'i386-wine*'`
106
fi
107
[ -n "$WINE" ] \
108
|| terminate 255 "Unable to detect i386-wine, please install first"
109
echo "=> Detected i386-wine: ${WINE}"
110
111
NV=`version 'nvidia-driver*'`
112
[ -n "$NV" ] \
113
|| terminate 1 "Unable to detect nvidia-driver, please install first"
114
echo "=> Detected nvidia-driver: ${NV}"
115
116
NVIDIA=${NV}
117
NV=`echo ${NV} | cut -f 1 -d _ | cut -f 1 -d ,`
118
119
if [ ! "$(pkg version -t ${NV} 440.59)" == "<" ]
120
then
121
terminate 0 "nvidia-driver 440.59+ already includes 32-bit drivers: nothing to do"
122
fi
123
124
if [ ! -f NVIDIA-FreeBSD-x86-${NV}.tar.gz ] || !(tar -tf NVIDIA-FreeBSD-x86-${NV}.tar.gz > /dev/null 2>&1)
125
then
126
[ -n "$NO_FETCH" ] \
127
&& terminate 8 "NVIDIA-FreeBSD-x86-${NV}.tar.gz unavailable"
128
echo "=> Downloading NVIDIA-FreeBSD-x86-${NV}.tar.gz from https://download.nvidia.com..."
129
rm -f NVIDIA-FreeBSD-x86-${NV}.tar.gz
130
fetch -aRr https://download.nvidia.com/XFree86/FreeBSD-x86/${NV}/NVIDIA-FreeBSD-x86-${NV}.tar.gz \
131
|| terminate 2 "Failed to download NVIDIA-FreeBSD-x86-${NV}.tar.gz"
132
echo "=> Downloaded NVIDIA-FreeBSD-x86-${NV}.tar.gz"
133
echo "Please check the following information against /usr/ports/x11/nvidia-driver/distinfo"
134
sha256 NVIDIA-FreeBSD-x86-${NV}.tar.gz
135
echo "SIZE (NVIDIA-FreeBSD-x86-${NV}.tar.gz) = `stat -f "%z" NVIDIA-FreeBSD-x86-${NV}.tar.gz`"
136
fi
137
138
echo "=> Extracting NVIDIA-FreeBSD-x86-${NV}.tar.gz to $PREFIX/lib32..."
139
EXTRACT_LIST="libGL.so.1"
140
case $NV in
141
195*|173*|96*|71*)
142
EXTRACT_LIST="$EXTRACT_LIST libGLcore.so.1 libnvidia-tls.so.1"
143
;;
144
*)
145
EXTRACT_LIST="$EXTRACT_LIST libnvidia-glcore.so.1 libnvidia-tls.so.1"
146
;;
147
esac
148
149
EXTRACT_ARGS="--no-same-owner --no-same-permissions --strip-components 2 -C $PREFIX/lib32"
150
for i in $EXTRACT_LIST
151
do
152
EXTRACT_ARGS="$EXTRACT_ARGS --include NVIDIA-FreeBSD-x86-${NV}/obj/$i"
153
done
154
umask 0333
155
tar $EXTRACT_ARGS -xvf NVIDIA-FreeBSD-x86-${NV}.tar.gz \
156
|| terminate 3 "Failed to extract NVIDIA-FreeBSD-x86-${NV}.tar.gz"
157
mkdir -m 0755 -p ${PREFIX}/lib32/.nvidia \
158
|| terminate 9 "Failed to create .nvidia shadow directory"
159
mv ${PREFIX}/lib32/libGL.so.1 ${PREFIX}/lib32/.nvidia/ \
160
|| terminate 10 "Failed to move libGL.so.1 to .nvidia/ shadow directory"
161
ln -s .nvidia/libGL.so.1 ${PREFIX}/lib32/libGL.so.1 \
162
|| terminate 11 "Failed to link to .nvidia/libGL.so.1 in the shadow directory"
163
164
echo "=> Cleaning up..."
165
[ -n "$NO_REMOVE_NVIDIA" ] || rm -vf NVIDIA-FreeBSD-x86-${NV}.tar.gz \
166
|| terminate 6 "Failed to remove files"
167
168
echo "===> i386-wine-${WINE} successfully patched for nvidia-driver-${NVIDIA}"
169
170