#!/bin/bash

function make_dirs {
  
 mkdir -p "${1}.AppDir" || echo ""
}

function extract_packages {
  FILES=$(find ../ -name *rpm)
  for FILE in $FILES ; do
    rpm2cpio "${FILE}" | cpio -i --make-directories
  done
}

function copy_desktop {
  find . -name *desktop -exec cp {} . \;
  find . -name denemo.png -exec cp {} . \;
}

function make_apprun_skel {
cat > ./AppRun <<\EOF
#!/bin/sh
HERE=$(dirname $(readlink -f "${0}"))
echo "${HERE}"
export PATH="${HERE}/bin/":$PATH
export LD_LIBRARY_PATH="${HERE}/lib/"
export GUILE_LOAD_PATH=${HERE}/share/guile/2.0:$GUILE_LOAD_PATH:${HERE}/share/denemo/actions/denemo-modules/
export GUILE_AUTO_COMPILE=0
export DENEMO_DATA_DIR=${HERE}/share/denemo
#export EVINCE_MODULE_PATH=${HERE}/lib/evince/4/backends #seems ineffective - not documented???
cd "${HERE}/" #??? aren't we HERE already?
EOF
chmod a+x ./AppRun
}

function make_lily_skel {
cat > bin/lilypond <<\EOF
#!/bin/sh
HERE=$(dirname $(readlink -f "${0}"))
echo "Here is the bin directory where lilypond script is: ${HERE}"
export LD_LIBRARY_PATH="${HERE}/../lib/lilypond/2.18.2/guile"
export GUILE_LOAD_PATH="${HERE}/../share/lilypond/2.18.2/guile/1.8"

exec "${HERE}/lilypond.real" "$@"
EOF
}

function patch_usr {
  find . -type f -exec sed -i -e 's|/usr|././|g' {} \;
}



function build_denemo {
  ./autogen.sh
  ./configure --enable-guile_2_0 --enable-debug --prefix=`pwd`/denemo.AppDir --enable-binreloc --disable-jack  --disable-rubberband
  echo configured to install in `pwd`/denemo.AppDir
  make
}
function install_denemo {
  make install
}
function install_depend {
  mkdir lib
  mkdir etc
#mkdir -p lib/evince/4
#cp -a /usr/lib/x86_64-linux-gnu/evince/4/backends/ lib/evince/4/
cp -a /usr/lib/x86_64-linux-gnu/evince lib


#  cp -a /usr/lib/x86_64-linux-gnu/* lib !!!! this is 1.2 Gb 
#  cp $(ldd bin/denemo | cut -d \( -f1 | cut -d \> -f2) lib
#  cp $(ldd /usr/bin/lilypond | cut -d \( -f1 | cut -d \> -f2) lib
#  cp $(ldd /usr/bin/gs | cut -d \( -f1 | cut -d \> -f2) lib
#  rm lib/libtinfo*
#  rm lib/libncur*
#  cp /usr/lib/x86_64-linux-gnu/libavformat.* lib



cp -a /usr/lib/libsmf* lib



cp /usr/lib/x86_64-linux-gnu/libport* lib

cp /usr/lib/x86_64-linux-gnu/libevdocument*.so.* lib

sed -i -e 's#/usr#././#g' lib/libevdocument3.so.4  #a symlink...
sed -i -e 's#/usr#././#g'   lib/libevdocument3.so.4.0.0


cp /usr/lib/x86_64-linux-gnu/libevv*.so.* lib


mkdir lib/x86_64-linux-gnu
mkdir lib/x86_64-linux-gnu/evince
mkdir lib/x86_64-linux-gnu/evince/4
mkdir lib/x86_64-linux-gnu/evince/4/backends
mkdir lib/x86_64-linux-gnu/gdk-pixbuf-2.0
mkdir lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/
mkdir lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders

cp /usr/lib/x86_64-linux-gnu/evince/4/backends/*pdfdocument* lib/x86_64-linux-gnu/evince/4/backends



#  cp /usr/lib/x86_64-linux-gnu/libavcodec* lib
#  cp /usr/lib/x86_64-linux-gnu/libav* lib
#  cp /usr/lib/x86_64-linux-gnu/libx* lib

  cp /usr/lib/x86_64-linux-gnu/pulseaudio/* lib
  cp -a /usr/lib/x86_64-linux-gnu/libguil* lib
  cp -a /usr/lib/x86_64-linux-gnu/*gtk* lib
  cp -a /usr/lib/x86_64-linux-gnu/*gdk* lib
  cp -a /usr/lib/x86_64-linux-gnu/*gobject* lib
  cp -a /usr/lib/x86_64-linux-gnu/*fftw3* lib
  cp -a /usr/lib/x86_64-linux-gnu/*xml2* lib
  cp -a /usr/lib/x86_64-linux-gnu/*fluidsynth* lib
  cp -a /usr/lib/x86_64-linux-gnu/*rsvg* lib
  cp -a /usr/lib/x86_64-linux-gnu/*sndfile* lib
  cp -a /usr/lib/x86_64-linux-gnu/libgc* lib
  cp -a /usr/lib/x86_64-linux-gnu/libunistring* lib
  cp -a /usr/lib/x86_64-linux-gnu/libicu* lib
  cp -a /usr/lib/x86_64-linux-gnu/libjack* lib
  
  cp -a /lib/x86_64-linux-gnu/libreadline* lib
  cp -a /lib/x86_64-linux-gnu/libtinfo* lib
  
  
  #ln -s lib/libreadline.so lib/readline.so.7

#Cannot open pixbuf loader module file '/usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders.cache': No such file or directory  
  cp -a /usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders.cache lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/
  cp -a /usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders/* lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders
  #sed -i -e 's#/usr#././#g' lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders.cache 

  cd lib && patch_usr && cd ..

  cp /usr/lib/x86_64-linux-gnu/libaubio* lib

  
#cp -a /usr/lib/lilypond lib
#cp -a /usr/lib/ghostscript lib
cp -a /usr/share/guile share
cp -a /usr/share/lilypond share
cp -a /usr/share/ghostscript share
cp -a /usr/share/gtksourceview-3.0 share
#  cp -a /usr/share/locale share
cp -a /usr/lib/x86_64-linux-gnu/lilypond lib
cp /usr/bin/lily* bin
cp /usr/bin/gs bin
#  cp -a /etc/ etc 
}
function make_appdir {
  ARCH=x86_64  appimagetool-x86_64.AppImage -v -n "${1}.AppDir" "${1}_${2}.AppImage"
}

APPNAME=denemo

#make git-denemo/denemo.AppDir directory
make_dirs "${APPNAME}"

#change to the git-denemo/denemo directory
cd "${APPNAME}"
VERSION=`grep AC_INIT configure.ac | cut -d '[' -f3 | cut -d ']' -f1`
./autogen.sh && ./configure  --prefix=/home/rshann/git-denemo/denemo.AppDir --disable-jack --disable-rubberband --disable-aubio && make && make install
rc=$?; if [[ $rc != 0 ]]; then exit $rc; fi
  
#cd to git-denemo/denemo.AppDir
cd "../${APPNAME}.AppDir"


install_depend

#copy_desktop - done below instead
make_apprun_skel
echo "./bin/denemo $@" >> AppRun

make_lily_skel

##cd to git-denemo/denemo
cd ../denemo
cp denemo.desktop ../${APPNAME}.AppDir
cp pixmaps/denemo.png ../${APPNAME}.AppDir
cd ..

make_appdir "${APPNAME}" "${VERSION}"

