piątek, 17 kwietnia 2020

Skrypt budujący OpenGlide CVS i DosBox z łatkami na Glide/3Dfx

Jakiś tydzień temu ponownie potrzebny był DosBox ze wsparciem dla akceleracji 3Dfx i chociaż kiedyś już o tym pisałem, to na sieci panuje dość spory młyn bo a to jednemu nie działa taka łatka, innemu taka(bo też wersji tej łatki kilka po sieci krąży); trzeciemu z kolei to albo tamto nie działa z dosboksem z CVS lub stabilnym.

Cała sytuacja nie jest aż tak zakręcona jak napisałem, natomiast jak startujesz od zera bo "Fajnie byłoby to wypróbować" to mniej więcej taki obrazek Cię czeka. Łatwiej mają użytkownicy Gentoo którzy mają dobrze ten pakiet maintainowany w repo i trochę ich torem polecimy.

Ale do rzeczy, poniższy skrypt potrafi budować zarówno OpenGlide z CVS jak i DosBoksa z CVS(rewizja 4302) pod architektury x86 i x86_64. Z tym, że jeśli na maszynie 64 bitowej budujesz pod maszyny 32 bitowe może czekać cię trochę podmieniania pakietów - ale chcesz się bawić, to się baw - jeśli zapewnisz dobre środowisko do takich imprez ten skrypt Ci to zbuduje.

Polecam czytać README zawarte w komentarzach na początku skryptu i pamiętać, że używacie go na własną odpowiedzialność chociaż sam z niego korzystam i uważam, że jest bezpieczny - poza tym nie wymaga roota więc nie ma nawet jak czegoś bardzo popsuć. No ale, żeby nie było; używasz na własną odpowiedzialność. Dobrej zabawy.

ps. skrypt nakłada łatkę na OpenGlide pod Carmageddon w które właśnie gram więc jak tego nie chcecie wywalcie sobie linijki od 62 do 67. Jeśli chcecie nałożyć tą łatkę jest do pobrania tutaj. Wrzucacie ją do katalogu gdzie zapisaliście skrypt i zostanie nałożona na źródła.

#!/bin/sh

# OPENGLIDE CVS AND DOSBOX GLIDE PATCHED BUILDING SCRIPT
# by azn <aznlir88@gmail.com>
#
#
#  VERSION: 0.1a / DATE: 23/04/2020
#    - Added third option in the main menu
#
#  VERSION: 0.1 / DATE: 16/04/2020
#
#
# As DosBox Glide patch is a wonderful addition to original DosBox, yet it caused
# many confusions on linux and vogons forums as most users have problems to fit
# the right version of the patch with dosbox version. You can find many versions
# of the Glide patch around the internet.

# This script allows you to build OpenGlide SVN version and create a convienient
# .deb package and of course to do local installation of Glide patched DosBox
# version. I decided to install patched DosBox in local folder instead of creating
# a .deb package for system-wide installation as for it to work properly dosbox
# needs glide2x.ovl file that should be where the dosbox executable is and it does
# not sound clean to me to put it into one of the system's bin folders.
#
# You can also choose to build x86 and x86_64 versions of both OpenGlide and Glide
# patched DosBox but I recommend building 64 bit version as most of you work
# on 64 bit systems anyway these days. Option to build 32 bit version is included
# only because some sources seem to prove huge speed boost while running 32 bit
# version on 64 bit systems.
#
# While choosing 32 bit build on 64 bit system be aware that many depencies that
# allow you to build dosbox will need to be replaced with 32 bit versions of
# these packages.
#
# In Linux Mint, as this is the distro I am using dosbox will not compile for
# x86 unless you replace libsdl1.2-dev package with libsdl1.2:i386 package.
# And when you later want to compile x86_64 version of dosbox you must once
# again replace libsdl1.2-dev:i386 with 64 bit version of package. So think
# what you want to get before you start playing with this script.
#
# I consider this script safe as it does not need root access, therefore it
# is not making any system-wide changes. Everything will start and end in
# location where the script is located.
#
# BUT AS I AM NOT A PROFESSIONAL PROGRAMMER, KEEP IN MIND THAT YOU ARE USING THAT
# SCRIPT AT YOUR OWN RISK AND I AM NOT RESPONSIBLE OF ANY DAMAGE IT MAY CAUSE TO
# YOUR COMPUTER ANYHOW.

dir=$(pwd)
openglide_package="openglide-cvs"
openglide_version="0.09rc9"
openglide_release="1"
openglide_maintainer_name="azn"
openglide_maintainer_mail="aznlir88@gmail.com"
dosbox_package="dosbox"
dosbox_version="4302"

funChooseArch()
{
clear
echo "-------\n\
- THIS SOFTWARE COMES WITH NO WARRANTY, YOU\n\
- ARE USING THIS SOFTWARE AT YOUR OWN RISK.\n\
-------\n\
 OpenGlide, DosBox Glide patched build\n\
 script by azn <aznlir88@gmail.com>\n\n\
 \e[1;34mBuild packages for 32-bit or 64-bit systems?:\n\
 1. 32-bit arch\n\
 2. 64-bit arch\e[0m\n\
 \e[1;30m3. Do not know what to do?\e[0m\n"

read -p ' Your choice: ' archvar

    if [ $archvar = 1 ]
    then
        archvar1="-m32"
        archvar2="i386-pc-linux-gnu"
        archvar3="x86"
        arch="i386"
    elif [ $archvar = 2 ]
    then
        archvar1="-m64"
        archvar2="x86_64-pc-linux-gnu"
        archvar3="x86_64"
        arch="amd64"
    elif [ $archvar = 3 ]
    then
        clear
        echo "\n\e[1m  You must build and install OpenGlide\n\
  first, so Glide patched DosBox\n  can be built.\n\
 \n
  // You will return to main menu
  // in 10 seconds\e[0m\n"
        sleep 10
        funChooseArch
    else
        echo " \e[1;30mNo such option. Try again.\n\e[0m"
        exit
    fi
}

funWhatToBuild()
{
echo "\e[1;34m\n What do you want to build?\n\n\
 1. OpenGlide SVN\n\
 2. DosBox SVN + Glide patch\n\
 \e[0m\n \e[1;36m// Building for ${archvar3} systems\n\e[0m"

read -p ' Your choice: ' taskvar

    if [ $taskvar = 1 ]
    then
        echo "\e[1;34m\nPreparing OpenGlide SVN version\n\e[0m"
        funOpenGlide
    elif [ $taskvar = 2 ]
    then
        echo "\e[1;34m\nPreparing DosBox SVN + Glide patch\n\e[0m"
        funDosBox
    else
        echo " \e[1;30mNo such option. Try again.\n\e[0m"
        exit
    fi
}

funOpenGlide()
{
sleep 2
echo "\e[1;36m/------------\n\
|  FETCHING OPENGLIDE SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        cvs -z3 -d:pserver:anonymous@openglide.cvs.sourceforge.net:/cvsroot/openglide co -P openglide
        cd openglide
  
echo "\e[1;36m\n/------------\n\
|  PATCHING WITH CARMAGEDDON PATCH\n\
\----------------------/\e[0m\n"
sleep 3
        cat ../openglide-carma.diff | patch -p1

echo "\e[1;36m\n/------------\n\
|  CONFIGURING OPENGLIDE SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        ./bootstrap
        ./configure --target="${archvar2}" \
        "CFLAGS="${archvar1}"" \
        "CXXFLAGS="${archvar1}"" \
        "LDFLAGS="${archvar1}""

echo "\e[1;36m\n/------------\n\
|  COMPILING OPENGLIDE SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        make

echo "\e[1;36m\n/------------\n\
|  MAKING OPENGLIDE SVN .DEB PACKAGE\n\
\----------------------/\e[0m\n"
sleep 3
        fakeroot make \
        DESTDIR=$PWD/../$openglide_package-$openglide_version-$openglide_release-$arch \
        install
        cd ..
        mkdir $openglide_package-$openglide_version-$openglide_release-$arch/DEBIAN
        touch $openglide_package-$openglide_version-$openglide_release-$arch/DEBIAN/control
        cd $openglide_package-$openglide_version-$openglide_release-$arch/DEBIAN
        echo "Package: $openglide_package" >> control
        echo "Version: $openglide_version-$openglide_release" >> control
        echo "Architecture: $arch" >> control
        echo "Maintainer: $openglide_maintainer_name <$openglide_maintainer_mail>" >> control
        echo "Description: OpenGlide CVS" >> control
        cd ../..
        dpkg-deb -b $openglide_package-$openglide_version-$openglide_release-$arch

echo "\e[1;36m\n/------------\n\
|  CLEANING UP\n\
\----------------------/\e[0m\n"
sleep 2
        rm -rf ./openglide
        rm -rf ./$openglide_package-$openglide_version-$openglide_release-$arch

echo "\e[1;36m >>> Package name:\e[0m\n\n \
\e[0;36m$openglide_package-$openglide_version-$openglide_release-$arch.deb\e[0m\n\n \
\e[1;36mPackage location:\e[0m\n\n \
\e[0;36m$dir\e[0m\n"
}



funDosBox()
{
    sleep 2
    mkdir $dosbox_package
    cd $dosbox_package

echo "\e[1;36m/------------\n\
|  FETCHING DOSBOX SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        svn checkout -r $dosbox_version svn://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk dosbox-code-0
        mv dosbox-code-0 $dosbox_package-$dosbox_version-$archvar3

echo "\e[1;36m\n/------------\n\
|  FETCHING DOSBOX GLIDE PATCH\n\
\----------------------/\e[0m\n"
sleep 3
        wget https://raw.githubusercontent.com/voyageur/openglide/841e1071597b64ead14dd08c25a03206b2d1d1b6/platform/dosbox/dosbox_glide.diff
        cd $dosbox_package-$dosbox_version-$archvar3

echo "\e[1;36m/------------\n\
|  PATCHING DOSBOX SOURCES\n\
\----------------------/\e[0m\n"
sleep 3
        cat ../dosbox_glide.diff | patch -p1

echo "\e[1;36m\n/------------\n\
|  CONFIGURING DOSBOX SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        sh autogen.sh
        ./configure --prefix=$dir/$dosbox_package \
        --disable-screenshots \
#        --disable-alsa-midi \
        --disable-ddraw \
        --target="${archvar2}" \
        "CFLAGS="${archvar1}"" \
        "CPPFLAGS="${archvar1}" -I /usr/local/include/openglide/" \
        "LDFLAGS="${archvar1}" -L /usr/lib32"

echo "\e[1;36m\n/------------\n\
|  COMPILING DOSBOX SVN SOURCE\n\
\----------------------/\e[0m\n"
sleep 3
        make

echo "\e[1;36m\n/------------\n\
|  INSTALLING DOSBOX INTO LOCAL DIRECTORY\n\
\----------------------/\e[0m\n"
sleep 3
        make install

echo "\e[1;36m\n/------------\n\
|  FETCHING AND MOVING glide2x.ovl
\----------------------/\e[0m\n"
sleep 2
        wget https://raw.githubusercontent.com/voyageur/openglide/c300160d0a8292bc04e79dd59e6cc178aa648dec/platform/dosbox/glide2x.ovl
        mv glide2x.ovl $dir/$dosbox_package/bin

echo "\e[1;36m\n/------------\n\
|  CLEANING UP\n\
\----------------------/\e[0m\n"
sleep 2
        cd ..
        rm -rf $dosbox_package-$dosbox_version-$archvar3
        rm dosbox_glide.diff

echo "\e[1;36m\n>>> Remember to execute:\e[0m\n\n \
\e[0;36mexport LD_LIBRARY_PATH=/usr/local/lib\e[0m\n\n \
\e[1;36mBefore running dosbox\e[0m\n"
}

funChooseArch
funWhatToBuild

Brak komentarzy:

Prześlij komentarz

Kompilacja Fluxbox 1.3.7 kompilatorem C++ 17 (GCC 11)

Po aktualizacji systemu jakiś czas temu okazało się, że posiadając nową wersję gcc w systemie nie byłem w stanie poprawnie skompilować Fluxb...