#!/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=x86_64-QNAP-linux-gnu
export PRJROOT=/opt/cross-project/CT
export ARCH=x86_64
export TARGET=x86_64-QNAP-linux-gnu
export CROSS_COMPILE=${TARGET}-
export TARGET_PREFIX=${PRJROOT}/${PROJECT}/cross-tools
export SYS_TARGET_PREFIX=${PRJROOT}/${PROJECT}/cross-tools
export PATH=${SYS_TARGET_PREFIX}/bin/:${PATH}:/usr/sbin:/sbin

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

#export MACHINE=
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 -O1 -fPIC -fstack-protector -fexceptions -fvisibility=hidden -fsigned-char"
export CPPFLAGS="-DNDEBUG -D_FORTIFY_SOURCE=1"
export CXXFLAGS="$CXXFLAGS $CFLAGS -D_FORTIFY_SOURCE=1 -DNDEBUG -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 --------------------

# Sanitize toolchain .la files.
find /opt/cross-project/CT -type f -name '*.la' \
    | xargs sed -i 's!/root/toolchain/docker_deploy/dockerfile/CT_auto_build!/opt/cross-project!g'

#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

echo "Cleaning up stale build artifacts..."
rm -rf ${MEGA_CMD_DIR}/install
rm -rf ${MEGA_CMD_DIR}/sdk/sdk_build/build
rm -rf ${MEGA_CMD_DIR}/sdk/sdk_build/install
rm -f ${MEGA_CMD_DIR}/mega-exec
rm -f ${MEGA_CMD_DIR}/mega-cmd
rm -f ${MEGA_CMD_DIR}/mega-cmd-server
rm -f ${MEGA_CMD_DIR}/sdk/sdk_build/*.success

cd $MEGA_CMD_DIR/sdk
pwd

mkdir -p norecurse
mv norecurse/* .

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

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 ---------------------------

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

export INCLUDES="-I${MEGA_CMD_DIR}/sdk/sdk_build/install/include"
export INCLUDES="${INCLUDES} -I${MEGA_CMD_DIR}/sdk/include"
export INCLUDES="${INCLUDES} -I${MEGA_CMD_DIR}/sdk/include/mega/posix"
export CXXFLAGS="${CXXFLAGS} -std=c++11 ${INCLUDES}"

$CXX $CXXFLAGS \
     -pie \
     src/megacmd.cpp \
     src/comunicationsmanager.cpp \
     src/megacmdutils.cpp \
     src/megacmdcommonutils.cpp \
     src/configurationmanager.cpp \
     src/megacmdlogger.cpp \
     src/megacmdsandbox.cpp \
     src/listeners.cpp \
     src/megacmdexecuter.cpp \
     src/megacmdtransfermanager.cpp \
     src/comunicationsmanagerportsockets.cpp \
     src/comunicationsmanagerfilesockets.cpp \
     sdk/sdk_build/install/lib/libmega.a \
     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/install/lib/libuv.a \
     -lpthread \
     -ldl \
     -lrt \
     sdk/sdk_build/install/lib/libsodium.a \
     sdk/sdk_build/install/lib/libz.a \
     -o mega-cmd-server || exit -1

$CXX $CXXFLAGS \
     -pie \
     src/megacmdcommonutils.cpp \
     src/megacmdshell/*.cpp \
     sdk/sdk_build/install/lib/libmega.a \
     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 \
     -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 || exit -1

$CXX $CXXFLAGS \
     -pie \
     src/megacmdcommonutils.cpp \
     src/client/*.cpp \
     src/megacmdshell/megacmdshellcommunications.cpp \
     sdk/sdk_build/install/lib/libmega.a \
     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 \
     -lpthread \
     -ldl \
     -lrt \
     sdk/sdk_build/install/lib/libz.a \
     -o mega-exec || exit -1

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/x86_64
    cp install/* build/QNAP_NAS/megacmdpkg/x86_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

