Path: blob/main/emulators/i386-wine-devel/files/nvidia.sh
16150 views
#!/bin/sh1# Copyright 2010 to 2015 David Naylor <[email protected]>2# Copyright 2012 Jan Beich <[email protected]>3# Copyright 2020 Lorenzo Salvadore <[email protected]>4# All rights reserved.5#6# Redistribution and use in source and binary forms, with or without7# modification, are permitted provided that the following conditions are met:8#9# 1. Redistributions of source code must retain the above copyright notice,10# this list of conditions and the following disclaimer.11#12# 2. Redistributions in binary form must reproduce the above copyright notice,13# this list of conditions and the following disclaimer in the documentation14# and/or other materials provided with the distribution.15#16# THIS SOFTWARE IS PROVIDED BY David Naylor ``AS IS'' AND ANY EXPRESS OR IMPLIED17# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF18# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO19# EVENT SHALL David Naylor OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,20# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT21# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,22# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF23# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING24# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,25# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.26#27# The views and conclusions contained in the software and documentation are28# those of the authors and should not be interpreted as representing official29# policies, either expressed or implied, of David Naylor.3031set -e3233PORTSDIR=${PORTSDIR:-/usr/ports}34PREFIX=${PREFIX:-/usr/local}35DISTDIR=${DISTDIR:-${PORTSDIR}/distfiles}3637if [ -d $DISTDIR ]38then39cd $DISTDIR40NO_REMOVE_NVIDIA="yes"41else42cd /tmp/43fi4445terminate() {4647echo "!!! $2 !!!"48echo "Terminating..."49exit $15051}5253args=`getopt dn $*`54if [ $? -ne 0 ]55then56echo "Usage: $0 [-n]"57exit 758fi59set -- $args60while true61do62case $1 in63-d)64rm -f ${PREFIX}/lib32/libGL.so.165rm -f ${PREFIX}/lib32/libGLcore.so.1 ${PREFIX}/lib32/libnvidia-tls.so.166rm -f ${PREFIX}/lib32/libnvidia-glcore.so.1 ${PREFIX}/lib32/libnvidia-tls.so.167rm -rf ${PREFIX}/lib32/.nvidia/68exit 069;;70-n)71NO_FETCH=yes72;;73--)74shift75break76;;77esac78shift79done8081version() {82local ret pkg="$1"83if [ -f "/usr/local/sbin/pkg" ]84then85ret=`pkg query -g '%v' "$pkg" || true`86fi8788# installed manually or failed to register89if [ -z "$ret" ] && [ "$pkg" = "nvidia-driver*" ]90then91ret=`sed -n "s/.*Version: //p" 2> /dev/null \92$PREFIX/share/doc/NVIDIA_GLX-1.0/README || true`93fi94echo "$ret"95}9697[ `whoami` = root ] \98|| terminate 254 "This script should be run as root"99100echo "===> Patching i386-wine to work with x11/nvidia-driver:"101102if [ -z "${WINE}" ]103then104WINE=`version 'i386-wine*'`105fi106[ -n "$WINE" ] \107|| terminate 255 "Unable to detect i386-wine, please install first"108echo "=> Detected i386-wine: ${WINE}"109110NV=`version 'nvidia-driver*'`111[ -n "$NV" ] \112|| terminate 1 "Unable to detect nvidia-driver, please install first"113echo "=> Detected nvidia-driver: ${NV}"114115NVIDIA=${NV}116NV=`echo ${NV} | cut -f 1 -d _ | cut -f 1 -d ,`117118if [ ! "$(pkg version -t ${NV} 440.59)" == "<" ]119then120terminate 0 "nvidia-driver 440.59+ already includes 32-bit drivers: nothing to do"121fi122123if [ ! -f NVIDIA-FreeBSD-x86-${NV}.tar.gz ] || !(tar -tf NVIDIA-FreeBSD-x86-${NV}.tar.gz > /dev/null 2>&1)124then125[ -n "$NO_FETCH" ] \126&& terminate 8 "NVIDIA-FreeBSD-x86-${NV}.tar.gz unavailable"127echo "=> Downloading NVIDIA-FreeBSD-x86-${NV}.tar.gz from https://download.nvidia.com..."128rm -f NVIDIA-FreeBSD-x86-${NV}.tar.gz129fetch -aRr https://download.nvidia.com/XFree86/FreeBSD-x86/${NV}/NVIDIA-FreeBSD-x86-${NV}.tar.gz \130|| terminate 2 "Failed to download NVIDIA-FreeBSD-x86-${NV}.tar.gz"131echo "=> Downloaded NVIDIA-FreeBSD-x86-${NV}.tar.gz"132echo "Please check the following information against /usr/ports/x11/nvidia-driver/distinfo"133sha256 NVIDIA-FreeBSD-x86-${NV}.tar.gz134echo "SIZE (NVIDIA-FreeBSD-x86-${NV}.tar.gz) = `stat -f "%z" NVIDIA-FreeBSD-x86-${NV}.tar.gz`"135fi136137echo "=> Extracting NVIDIA-FreeBSD-x86-${NV}.tar.gz to $PREFIX/lib32..."138EXTRACT_LIST="libGL.so.1"139case $NV in140195*|173*|96*|71*)141EXTRACT_LIST="$EXTRACT_LIST libGLcore.so.1 libnvidia-tls.so.1"142;;143*)144EXTRACT_LIST="$EXTRACT_LIST libnvidia-glcore.so.1 libnvidia-tls.so.1"145;;146esac147148EXTRACT_ARGS="--no-same-owner --no-same-permissions --strip-components 2 -C $PREFIX/lib32"149for i in $EXTRACT_LIST150do151EXTRACT_ARGS="$EXTRACT_ARGS --include NVIDIA-FreeBSD-x86-${NV}/obj/$i"152done153umask 0333154tar $EXTRACT_ARGS -xvf NVIDIA-FreeBSD-x86-${NV}.tar.gz \155|| terminate 3 "Failed to extract NVIDIA-FreeBSD-x86-${NV}.tar.gz"156mkdir -m 0755 -p ${PREFIX}/lib32/.nvidia \157|| terminate 9 "Failed to create .nvidia shadow directory"158mv ${PREFIX}/lib32/libGL.so.1 ${PREFIX}/lib32/.nvidia/ \159|| terminate 10 "Failed to move libGL.so.1 to .nvidia/ shadow directory"160ln -s .nvidia/libGL.so.1 ${PREFIX}/lib32/libGL.so.1 \161|| terminate 11 "Failed to link to .nvidia/libGL.so.1 in the shadow directory"162163echo "=> Cleaning up..."164[ -n "$NO_REMOVE_NVIDIA" ] || rm -vf NVIDIA-FreeBSD-x86-${NV}.tar.gz \165|| terminate 6 "Failed to remove files"166167echo "===> i386-wine-${WINE} successfully patched for nvidia-driver-${NVIDIA}"168169170