@ -1,24 +1,20 @@
#!/usr/bin/env bash
#!/usr/bin/env bash
set -e
# Specialized build script for Steam Runtime SDK docker
# Specialized build script for Steam Runtime SDK docker
set -e
OS_RELEASE_FILES = ( "/etc/os-release" "/usr/lib/os-release" )
IFS = " " read -ra debian_chroot < /etc/debian_chroot
XDG_DATA_HOME = " ${ XDG_DATA_HOME :- $HOME /.local/share } "
LOCAL_CC = ${ CC :- gcc -5 }
XDG_CONFIG_HOME = " ${ XDG_CONFIG_HOME :- $HOME /.config } "
LOCAL_CXX = ${ CXX :- g ++-5 }
DATA_DIR = " $XDG_DATA_HOME /MangoHud "
RUNTIME = ${ RUNTIME :- ${ debian_chroot [1] } }
CONFIG_DIR = " $XDG_CONFIG_HOME /MangoHud "
SRT_VERSION = ${ SRT_VERSION :- ${ debian_chroot [2] } }
LAYER = "build/release/usr/share/vulkan/implicit_layer.d/mangohud.json"
INSTALL_DIR = "build/package/"
IMPLICIT_LAYER_DIR = " $XDG_DATA_HOME /vulkan/implicit_layer.d "
VERSION = $( git describe --long --tags --always | sed 's/\([^-]*-g\)/r\1/;s/-/./g;s/^v//' )
VERSION = $( git describe --long --tags --always | sed 's/\([^-]*-g\)/r\1/;s/-/./g;s/^v//' )
dependencies( ) {
dependencies( ) {
if [ [ ! -f build/release/usr/lib64 /libMangoHud.so ] ] ; then
if [ [ ! -f build-srt /release/usr/lib/libMangoHud.so ] ] ; then
install( ) {
install( ) {
set +e
set +e
for i in $( eval echo $DEPS ) ; do
for i in ${ DEPS [@] } ; do
dpkg-query -s " $i " & > /dev/null
dpkg-query -s " $i " & > /dev/null
if [ [ $? = = 1 ] ] ; then
if [ [ $? = = 1 ] ] ; then
INSTALL = " $INSTALL " " $i "
INSTALL = " $INSTALL " " $i "
@ -32,19 +28,26 @@ dependencies() {
}
}
echo "# Checking Dependencies"
echo "# Checking Dependencies"
DEPS = "{gcc-5-multilib,g++-5-multilib,unzip}"
DEPS = ( ${ LOCAL_CC } -multilib ${ LOCAL_CXX } -multilib unzip)
install
install
# py3.2 is weird
ln -sf python3.5 /usr/bin/python3
# use py3.5 with scout, otherwise hope python is new enough
set +e
which python3.5 >/dev/null
if [ $? -eq 0 ] ; then
# py3.2 is weird
ln -sf python3.5 /usr/bin/python3
fi
set -e
if [ [ ! -f ./bin/get-pip.py ] ] ; then
if [ [ ! -f ./bin/get-pip.py ] ] ; then
curl https://bootstrap.pypa.io/get-pip.py -o bin/get-pip.py
curl https://bootstrap.pypa.io/get-pip.py -o bin/get-pip.py
python3.5 ./bin/get-pip.py
fi
fi
python3 ./bin/get-pip.py
if [ [ $( pip3.5 show meson; echo $? ) = = 1 || $( pip3.5 show mako; echo $? ) = = 1 ] ] ; then
if [ [ $( pip3 show meson >/dev/null ; echo $? ) = = 1 || $( pip3 show mako >/dev/null ; echo $? ) = = 1 ] ] ; then
pip3.5 install meson mako
pip3 install meson mako
fi
fi
if [ [ ! -f /usr/include/NVCtrl/NVCtrl.h ] ] ; then
if [ [ ! -f /usr/include/NVCtrl/NVCtrl.h ] ] ; then
@ -66,83 +69,49 @@ dependencies() {
configure( ) {
configure( ) {
dependencies
dependencies
git submodule update --init
git submodule update --init
if [ [ ! -f "build /meson64/build.ninja" ] ] ; then
if [ [ ! -f "build -srt /meson64/build.ninja" ] ] ; then
export CC = " gcc-5 "
export CC = " ${ LOCAL_CC } "
export CXX = " g++-5 "
export CXX = " ${ LOCAL_CXX } "
meson build/meson64 --libdir lib/mangohud/lib64 --prefix /usr -Dappend_libdir_mangohud= false ${ CONFIGURE_OPTS }
meson build-srt /meson64 --libdir lib/mangohud/lib --prefix /usr -Dappend_libdir_mangohud= false -Dld_libdir_prefix= true $@ ${ CONFIGURE_OPTS }
fi
fi
if [ [ ! -f "build /meson32/build.ninja" ] ] ; then
if [ [ ! -f "build -srt /meson32/build.ninja" ] ] ; then
export CC = " gcc-5 -m32 "
export CC = " ${ LOCAL_CC } -m32 "
export CXX = " g++-5 -m32 "
export CXX = " ${ LOCAL_CXX } -m32 "
export PKG_CONFIG_PATH = " /usr/lib32/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig: ${ PKG_CONFIG_PATH_32 } "
export PKG_CONFIG_PATH = " /usr/lib32/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig: ${ PKG_CONFIG_PATH_32 } "
export LLVM_CONFIG = "/usr/bin/llvm-config32"
meson build-srt/meson32 --libdir lib/mangohud/lib32 --prefix /usr -Dappend_libdir_mangohud= false -Dld_libdir_prefix= true $@ ${ CONFIGURE_OPTS }
meson build/meson32 --libdir lib/mangohud/lib32 --prefix /usr -Dappend_libdir_mangohud= false ${ CONFIGURE_OPTS }
fi
fi
}
}
build( ) {
build( ) {
if [ [ ! -f "build /meson64/build.ninja" || ! -f "build /meson32/build.ninja" ] ] ; then
if [ [ ! -f "build -srt /meson64/build.ninja" || ! -f "build -srt /meson32/build.ninja" ] ] ; then
configure
configure
fi
fi
DESTDIR = " $PWD /build /release" ninja -C build/meson32 install
DESTDIR = " $PWD /build -srt /release" ninja -C build-srt /meson32 install
DESTDIR = " $PWD /build /release" ninja -C build/meson64 install
DESTDIR = " $PWD /build -srt /release" ninja -C build-srt /meson64 install
}
}
package( ) {
package( ) {
LIB = "build /release/usr/lib/mangohud/lib64 /libMangoHud.so"
LIB = "build -srt /release/usr/lib/mangohud/lib/libMangoHud.so"
LIB32 = "build /release/usr/lib/mangohud/lib32/libMangoHud.so"
LIB32 = "build -srt /release/usr/lib/mangohud/lib32/libMangoHud.so"
if [ [ ! -f " $LIB " || " $LIB " -ot "build /meson64/src/libMangoHud.so" ] ] ; then
if [ [ ! -f " $LIB " || " $LIB " -ot "build -srt /meson64/src/libMangoHud.so" ] ] ; then
build
build
fi
fi
tar --numeric-owner --owner= 0 --group= 0 \
tar --numeric-owner --owner= 0 --group= 0 \
-C build/release -cvf "build /MangoHud-package.tar" .
-C build-srt /release -cvf "build -srt /MangoHud-package.tar" .
}
}
release( ) {
release( ) {
rm build/MangoHud-package.tar
rm build-srt /MangoHud-package.tar
mkdir -p build/MangoHud
mkdir -p build-srt /MangoHud
package
package
cp --preserve= mode bin/mangohud-setup.sh build/MangoHud/mangohud-setup.sh
cp --preserve= mode bin/mangohud-setup.sh build-srt /MangoHud/mangohud-setup.sh
cp build/MangoHud-package.tar build/MangoHud/MangoHud-package.tar
cp build-srt /MangoHud-package.tar build-srt /MangoHud/MangoHud-package.tar
tar --numeric-owner --owner= 0 --group= 0 \
tar --numeric-owner --owner= 0 --group= 0 \
-C build -czvf build/MangoHud-$VERSION .tar.gz MangoHud
-C build-srt -czvf build-srt/MangoHud-${ VERSION } _${ RUNTIME } -${ SRT_VERSION } .tar.gz MangoHud
}
install( ) {
rm -rf " $HOME /.local/share/MangoHud/ "
rm -f " $HOME /.local/share/vulkan/implicit_layer.d/ " { mangohud32.json,mangohud64.json}
[ " $UID " -eq 0 ] || mkdir -pv " ${ CONFIG_DIR } "
[ " $UID " -eq 0 ] || exec sudo bash " $0 " install
/usr/bin/install -vm644 -D ./build/release/usr/lib/mangohud/lib32/libMangoHud.so /usr/lib/mangohud/lib32/libMangoHud.so
/usr/bin/install -vm644 -D ./build/release/usr/lib/mangohud/lib64/libMangoHud.so /usr/lib/mangohud/lib64/libMangoHud.so
/usr/bin/install -vm644 -D ./build/release/usr/lib/mangohud/lib32/libMangoHud_dlsym.so /usr/lib/mangohud/lib32/libMangoHud_dlsym.so
/usr/bin/install -vm644 -D ./build/release/usr/lib/mangohud/lib64/libMangoHud_dlsym.so /usr/lib/mangohud/lib64/libMangoHud_dlsym.so
/usr/bin/install -vm644 -D ./build/release/usr/share/vulkan/implicit_layer.d/MangoHud.x86.json /usr/share/vulkan/implicit_layer.d/MangoHud.x86.json
/usr/bin/install -vm644 -D ./build/release/usr/share/vulkan/implicit_layer.d/MangoHud.x86_64.json /usr/share/vulkan/implicit_layer.d/MangoHud.x86_64.json
/usr/bin/install -vm644 -D ./build/release/usr/share/doc/mangohud/MangoHud.conf.example /usr/share/doc/mangohud/MangoHud.conf.example
/usr/bin/install -vm755 ./build/release/usr/bin/mangohud.x86 /usr/bin/mangohud.x86
/usr/bin/install -vm755 ./build/release/usr/bin/mangohud /usr/bin/mangohud
echo "MangoHud Installed"
}
}
clean( ) {
clean( ) {
rm -rf "build"
rm -rf "build-srt/"
}
uninstall( ) {
[ " $UID " -eq 0 ] || exec sudo bash " $0 " uninstall
rm -rfv "/usr/lib/mangohud"
rm -rfv "/usr/share/doc/mangohud"
rm -fv "/usr/share/vulkan/implicit_layer.d/mangohud.json"
rm -fv "/usr/share/vulkan/implicit_layer.d/MangoHud.json"
rm -fv "/usr/share/vulkan/implicit_layer.d/MangoHud.x86.json"
rm -fv "/usr/share/vulkan/implicit_layer.d/MangoHud.x86_64.json"
rm -fv "/usr/bin/mangohud"
rm -fv "/usr/bin/mangohud.x86"
}
}
usage( ) {
usage( ) {
@ -157,29 +126,39 @@ usage() {
echo -e "\tconfigure\tEnsures that dependencies are installed, updates git submodules, and generates files needed for building MangoHud. This is automatically run by the build command"
echo -e "\tconfigure\tEnsures that dependencies are installed, updates git submodules, and generates files needed for building MangoHud. This is automatically run by the build command"
echo -e "\tbuild\t\tIf needed runs configure and then builds (compiles) MangoHud"
echo -e "\tbuild\t\tIf needed runs configure and then builds (compiles) MangoHud"
echo -e "\tpackage\t\tRuns build if needed and then builds a tar package from MangoHud"
echo -e "\tpackage\t\tRuns build if needed and then builds a tar package from MangoHud"
echo -e "\tinstall\t\tInstall MangoHud onto your system"
echo -e "\tclean\t\tRemoves build directory"
echo -e "\tclean\t\tRemoves build directory"
echo -e "\tuninstall\tRemoves installed MangoHud files from your system"
echo -e "\trelease\t\tBuilds a MangoHud release tar package"
echo -e "\trelease\t\tBuilds a MangoHud release tar package"
}
}
for a in $@ ; do
if [ [ -z $@ ] ] ; then
case $a in
usage no-args
"" ) build; ;
fi
"pull" ) git pull; ;
"configure" ) configure; ;
while [ $# -gt 0 ] ; do
"build" ) build; ;
OPTS = ( )
arg = " $1 "
shift
while [ $# -gt 0 ] ; do
case $1 in
-*)
OPTS += ( " $1 " )
shift
; ;
*)
break
; ;
esac ;
done
echo -e "\e[1mCommand:\e[92m" $arg "\e[94m" ${ OPTS [@] } "\e[39m\e[0m"
case $arg in
"configure" ) configure ${ OPTS [@] } ; ;
"build" ) build ${ OPTS [@] } ; ;
"package" ) package; ;
"package" ) package; ;
"install" ) install; ;
"clean" ) clean; ;
"clean" ) clean; ;
"uninstall" ) uninstall; ;
"release" ) release; ;
"release" ) release; ;
*)
*)
usage
usage
esac
esac
done
done
if [ [ -z $@ ] ] ; then
usage no-args
fi