#https://github.com/TASVideos/fceux.git
#
# Script tested in a fresh install of Linux Mint 19.3 x86_64 Cinnamon
#
# Binaries tested and working with: 
# -ARCOS x86_64, run the .sh
# -Debian 11 XFCE x86_64, run the fceux
# -Linux Mint 19.x3, run the .sh
# -Linux Void GLIBC, run the .sh
#
# COMPILER VERSION WITH LIBAVCODEC AND x264 [11-11-2021]
#
glibc="$(ldd --version | awk '/ldd/{print $NF}')"
time_start=`date +%s`
version=2.6.2
sudo apt-get install git cmake g++ qtbase5-dev qttools5-dev zlib1g-dev libminizip-dev libsdl2-dev nasm

#Create staging directory
STAGING=$HOME/staging/fceux
mkdir -p $STAGING


#Sources
SRC=$STAGING/src
mkdir -p $SRC

#Build artifacts
OUT=$STAGING/build
mkdir -p $OUT

export LD_LIBRARY_PATH=$STAGING/build/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$STAGING/build/lib/pkgconfig:$PKG_CONFIG_PATH
export LDFLAGS='-L/$STAGING/build/lib/include'

notify-send "Building x264"
git clone https://code.videolan.org/videolan/x264.git $SRC/x264
pushd $SRC/x264
./configure --enable-shared --prefix=$OUT
make -j3 install
popd

notify-send "Building ffmpeg .so"
wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 -qO-|tar -C $SRC -xj
pushd $SRC/ffmpeg*/
./configure --enable-shared --disable-static --prefix=$OUT --disable-doc  --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-avdevice --disable-protocols
make -j3 install
popd

notify-send "Building FCEUX git"
git clone https://github.com/TASVideos/fceux.git $SRC/fceux
pushd $SRC/fceux*
#sed -i 's/  pkg_check_modules( LIBAV /#  pkg_check_modules( LIBAV /g' src/CMakeLists.txt
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release  ..   -DCMAKE_C_FLAGS="$CFLAGS -fPIC -w" -DCMAKE_CXX_FLAGS="$CXXFLAGS -fPIC -w"
make -j4 
cd src
strip fceux
mkdir fceux.$version.x86_64_GLIBC_"$glibc"
cp fceux fceux.$version.x86_64_GLIBC_"$glibc"
cd fceux.$version.x86_64_GLIBC_"$glibc"

mkdir -p usr/lib/x86_64-linux-gnu/pulseaudio

cp /usr/lib/x86_64-linux-gnu/libminizip.so.1 usr/lib/x86_64-linux-gnu/
cp /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5 usr/lib/x86_64-linux-gnu/
cp /usr/lib/x86_64-linux-gnu/libQt5Sql.so.5 usr/lib/x86_64-linux-gnu/
cp /usr/lib/x86_64-linux-gnu/libSDL2-2.0.so.0 usr/lib/x86_64-linux-gnu/
cp /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 usr/lib/x86_64-linux-gnu/
cp /usr/lib/x86_64-linux-gnu/libQt5Help.so.5 usr/lib/x86_64-linux-gnu/
cp /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5 usr/lib/x86_64-linux-gnu/
cp -r /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-11.1.so usr/lib/x86_64-linux-gnu/pulseaudio/
cp -P $OUT/lib/* usr/lib/x86_64-linux-gnu/


echo '#!/bin/sh' >fceux.$version.sh
echo '   BIN=./fceux' >>fceux.$version.sh
echo 'export LD_LIBRARY_PATH=lib/x86_64-linux-gnu:/lib64:usr/lib/x86_64-linux-gnu/' >>fceux.$version.sh
echo 'exec $BIN $@' >>fceux.$version.sh
chmod +x fceux.$version.sh

cd ..
tar cvfa ../../../../fceux.$version.with.libavcodec.and.x264.x86_64_GLIBC_"$glibc".txz fceux.$version.x86_64_GLIBC_"$glibc"/*

echo "YOU CAN FOUND THE COMPILED AND COMPRESSED FCEUX $version AT $STAGING/fceux.$version.with.libavcodec.and.x264.x86_64_GLIBC_"$glibc".txz"

time_end=`date +%s`
time_exec=`expr $(( $time_end - $time_start ))`
echo "EL PROCESO DE COMPILADO HA TARDADO UN TOTAL DE $(($time_exec / 60)) minutos y $(($time_exec % 60)) segundos."
