#!/bin/bash
# run this from the MEGAcmd folder
# but first set up the environment per the PDF and tar files at https://sourceforge.net/projects/qosgpl/files/QNAP%20NAS%20Tool%20Chains/
# and put the MEGAcmd tree at /opt/cross-project/qnap/

#prerequisites:
#  - qnap installed cross compiler from http://download.qnap.com/dev/Toolchain/QNAP_cross_toolchains_64.20160606.tar
#     (unzipped to /opt/cross-compile)
#  - (maybe)32 bit libz, eg this works for ubuntu 16.04: sudo apt-get install zlib1g:i386

export PROJECT=aarch64-QNAP-linux-gnu
export PRJROOT=/opt/cross-project/arm_64
export ARCH=aarch64
export TARGET=$PROJECT
export CROSS_COMPILE=${TARGET}-
export TARGET_PREFIX=${PRJROOT}/${PROJECT}/bin
export SYS_TARGET_PREFIX=${PRJROOT}/${PROJECT}/bin
export PATH=${SYS_TARGET_PREFIX}:${PATH}:/usr/sbin:/sbin

export MEGA_CMD_DIR=/opt/cross-project/qnap/MEGAcmd

export MACHINE=aarch64
export CUSTOM_CONFIG_ARGS="--host=${TARGET} --disable-dependency-tracking"

export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export LD=${CROSS_COMPILE}ld
export CFLAGS="$CFLAGS -fPIC -fexceptions -fvisibility=hidden -fsigned-char "
export CPPFLAGS="-DNDEBUG "
export CXXFLAGS="$CXXFLAGS $CFLAGS $CPPFLAGS -DENABLE_BACKUPS -DMEGACMD_USERAGENT_SUFFIX=QNAP  -DHAVE_LIBUV"
export AR=${CROSS_COMPILE}ar
export NM=${CROSS_COMPILE}nm
export STRIP=${CROSS_COMPILE}strip
export RANLIB=${CROSS_COMPILE}ranlib
export OBJDUMP=${CROSS_COMPILE}objdump
export LDFLAGS=
export ConfigOpt=
#export ARCH=$ARCH
export ToolChainSysRoot=$SYS_TARGET_PREFIX
export SysRootPrefix=$SYS_TARGET_PREFIX
export SysRootInclude=$SYS_TARGET_PREFIX/include
export SysRootLib=$SYS_TARGET_PREFIX/lib

export CROSS_COMPILE=

export AUTOMAKE_OPTIONS="no-dependencies"

echo ---------- env set up --------------------
env | sort
echo ---------- env set up --------------------

#fix any utf-8 w/ BOM files that the compiler can't handle
cd $MEGA_CMD_DIR
find src -name "*.h" | xargs dos2unix
find src -name "*.c" | xargs dos2unix
find src -name "*.cpp" | xargs dos2unix
find sdk/include -name "*.h" | xargs dos2unix
find sdk/src -name "*.c" | xargs dos2unix
find sdk/src -name "*.cpp" | xargs dos2unix


cd $MEGA_CMD_DIR/sdk
pwd

mkdir -p norecurse
mv norecurse/* .

./contrib/build_sdk.sh -a -e -g -I -n -q -R -v -X -C"$CUSTOM_CONFIG_ARGS" -O linux-generic64 2>&1 | tee $MEGA_CMD_DIR/mybuildlogs-sdkbuild.out

if [ -e ./src/libmega.a ] ; then
    size=$(wc -c < ./src/libmega.a )
    if [ $size -le 5000 ] ; then
        echo "erasing bad build products"
        rm -f ./src/libmega.a 
        rm -f ./src/libmega.la 
    fi
fi

if ! [ -e src/libmega.a ] ; then
    echo "libtool could not link it so we do it ourselves. Including Zen and MediaInfo somehow reference a nonexistent path /home/slava in the Synology libtool libraries. If we left those out it would make the lib ok."
    echo "we make the lib using $AR directly, with and output the same name src/libmega.la that satisfies the configure script for MEGAcmd."
    rm -f src/libmega.la
    $AR -rcs ./src/libmega.a `find src -name "*.o"` `find sdk_build -name "*.a"`
    cp ./src/libmega.a ./src/libmega.la
fi

if ! [ -e ./sdk_build/install/lib/libmega.a ] ; then
    cp ./src/libmega* ./sdk_build/install/lib/
fi

if ! [ -e ./sdk_build/install/lib/libmega.a ] ; then
   echo "SDK build failed"
   exit 1
fi

mv ./Makefile* norecurse/
mv ./config* norecurse/
cd ..

echo -------------------------------------------------------- sdk end --------------------------------------


echo about to build megacmd ---------------------------

sh autogen.sh 2>&1 | tee $MEGA_CMD_DIR/mybuildlogs-autogen2.out
./configure --without-libraw SUBDIRS="" --enable-static --with-cryptopp --with-readline=$MEGA_CMD_DIR/sdk/sdk_build/install/include/ \
            $CUSTOM_CONFIG_ARGS  2>&1 | tee $MEGA_CMD_DIR/mybuildlogs-configure2.out 


export INCLUDES="-I$MEGA_CMD_DIR/sdk/sdk_build/install/include -I$MEGA_CMD_DIR/sdk/include/ -I$MEGA_CMD_DIR/include/mega/posix"
#somehow autotools is determined to have WIN32 defined
#make SUBDIRS='' 2>&1 | tee $MEGA_CMD_DIR/mybuildlogs-make2.out

rm -f mega-cmd-server
rm -f mega-cmd
rm -f mega-cmd-exec

$CXX $CXXFLAGS src/megacmd.cpp src/comunicationsmanager.cpp         src/megacmdutils.cpp src/configurationmanager.cpp         src/megacmdlogger.cpp src/megacmdsandbox.cpp src/listeners.cpp         src/megacmdexecuter.cpp         src/comunicationsmanagerportsockets.cpp src/comunicationsmanagerfilesockets.cpp -Isdk/include -Isdk/include/mega/posix -Isdk/sdk_build/install/include  `find sdk/src -name "*.o"` sdk/sdk_build/install/lib/libcryptopp.a    sdk/sdk_build/install/lib/libcurl.a sdk/sdk_build/install/lib/libcares.a sdk/sdk_build/install/lib/libssl.a sdk/sdk_build/install/lib/libcrypto.a  sdk/sdk_build/install/lib/libsqlite3.a sdk/sdk_build/install/lib/libfreeimage.a sdk/sdk_build/install/lib/libmediainfo.a sdk/sdk_build/install/lib/libzen.a  sdk/sdk_build/build/libuv-v1.8.0/.libs/libuv.a -lpthread -ldl -lrt sdk/sdk_build/install/lib/libz.a -o mega-cmd-server

$CXX $CXXFLAGS src/megacmdshell/*.cpp -Isdk/include -Isdk/include/mega/posix -Isdk/sdk_build/install/include  `find sdk/src -name "*.o"` sdk/sdk_build/install/lib/libcryptopp.a    sdk/sdk_build/install/lib/libcurl.a sdk/sdk_build/install/lib/libcares.a sdk/sdk_build/install/lib/libssl.a sdk/sdk_build/install/lib/libcrypto.a  sdk/sdk_build/install/lib/libsqlite3.a sdk/sdk_build/install/lib/libfreeimage.a sdk/sdk_build/install/lib/libmediainfo.a sdk/sdk_build/install/lib/libzen.a  -lpthread -ldl -lrt sdk/sdk_build/install/lib/libz.a ./sdk/sdk_build/install/lib/libreadline.a ./sdk/sdk_build/install/lib/libtermcap.a -o mega-cmd

$CXX $CXXFLAGS  src/client/*.cpp src/megacmdshell/megacmdshellcommunications.cpp -Isdk/include -Isdk/include/mega/posix -Isdk/sdk_build/install/include  `find sdk/src -name "*.o"` sdk/sdk_build/install/lib/libcryptopp.a    sdk/sdk_build/install/lib/libcurl.a sdk/sdk_build/install/lib/libcares.a sdk/sdk_build/install/lib/libssl.a sdk/sdk_build/install/lib/libcrypto.a  sdk/sdk_build/install/lib/libsqlite3.a sdk/sdk_build/install/lib/libfreeimage.a sdk/sdk_build/install/lib/libmediainfo.a sdk/sdk_build/install/lib/libzen.a -lpthread -ldl -lrt sdk/sdk_build/install/lib/libz.a -o mega-exec

echo "outputs should be 3 files: mega-cmd mega-cmd-server mega-exec.  ls output: "
ls mega-cmd mega-cmd-server mega-exec

if [ -e mega-cmd ] && [ -e mega-cmd-server ] && [ -e mega-exec ] ; then

    mkdir -p install
    cp src/client/mega-* install/
    cp mega-cmd mega-exec mega-cmd-server install/

    mkdir -p build/QNAP_NAS/megacmdpkg/arm_64
    cp install/* build/QNAP_NAS/megacmdpkg/arm_64

    MAJOR=`sed -n -e 's/.*MAJOR_VERSION \([0-9]*\).*/\1/p' < src/megacmdversion.h`
    MINOR=`sed -n -e 's/.*MINOR_VERSION \([0-9]*\).*/\1/p' < src/megacmdversion.h`
    MICRO=`sed -n -e 's/.*MICRO_VERSION \([0-9]*\).*/\1/p' < src/megacmdversion.h`
    MEGACMD_VERSION="\"$MAJOR.$MINOR.$MICRO\""
    sed -i build/QNAP_NAS/megacmdpkg/qpkg.cfg -e "s/^QPKG_VER=.*/QPKG_VER=$MEGACMD_VERSION/"
else
    echo "Build failed"
    exit 1
fi

