#!/usr/bin/sh

home_dir=${PWD}

projectA_name="ProjectA"
projectA_version="1.1"

projectAp_name="ProjectA"
projectAp_version="1.2"

projectB_name="ProjectB"
projectB_version="1.2"

projectC_name="ProjectC"
projectC_version="1.3"

projectD_name="ProjectD"
projectD_version="1.4"


# Create unique directory
tmploc=$(mktemp -dq -t temp.XXXXXX)

# Clean and exit
local_clean_exit() {
  cd ${home_dir}
  rm -rf ${tmploc}
  exit $1
}

# Set to the User_area
export User_area=${tmploc}
export CMAKE_PROJECT_PATH=${User_area}

export Deploy_loc=${User_area}/Deploy
if [ ! -d "${Deploy_loc}" ]; then
  mkdir -p "${Deploy_loc}"
fi


export CMAKEFLAGS="${CMAKEFLAGS} -DCMAKE_INSTALL_PREFIX=${Deploy_loc}"
export CMAKE_PREFIX_PATH="${Deploy_loc}:${CMAKE_PREFIX_PATH}"

echo "CMAKE_PROJECT_PATH: ${CMAKE_PROJECT_PATH}"
echo "BINARY_TAG: ${BINARY_TAG}"
echo "User_area ${User_area}"
echo "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}"
echo "CMAKEFLAGS: ${CMAKEFLAGS}"


# because the "-s" (standalone) option is used, this test script must work after the build only.
# The install step is not needed when the created project have no dependency onto Elements and
# its modules.

cd ${User_area}

CreateElementsProject --yes -s $projectA_name $projectA_version

# Error? stop and clean up
if [ $? -ne 0 ]; then
   echo "Error: <CreateElementsProject --yes -s $projectA_name $projectA_version> command failed!" 1>&2
   local_clean_exit 1
fi

cd $projectA_name/$projectA_version
#AddElementsModule --yes $projectA_name

make configure

if [ $? -ne 0 ]; then
   echo "Error: <Configuration of $projectA_name $projectA_version> failed!" 1>&2
   local_clean_exit 1
fi

make

if [ $? -ne 0 ]; then
   echo "Error: <Builld of $projectA_name $projectA_version> failed!" 1>&2
   local_clean_exit 1
fi

make install

if [ $? -ne 0 ]; then
   echo "Error: <Installation of $projectA_name $projectA_version> failed!" 1>&2
   local_clean_exit 1
fi

if [ -n "${BINARY_TAG}" ]; then
  if [ ! -e InstallArea/${BINARY_TAG}/manifest.xml ]; then
    echo "Error: <Installation of $projectA_name $projectA_version> failed!" 1>&2
    local_clean_exit 1
  fi
fi

cd ${User_area}

CreateElementsProject -s $projectAp_name $projectAp_version --yes

# Error? stop and clean up
if [ $? -ne 0 ]; then
   echo "Error: <CreateElementsProject -s $projectAp_name $projectAp_version> command failed!" 1>&2
   local_clean_exit 1
fi

cd $projectAp_name/$projectAp_version
#AddElementsModule $projectAp_name

make configure

if [ $? -ne 0 ]; then
   echo "Error: <Configuration of $projectAp_name $projectAp_version> failed!" 1>&2
   local_clean_exit 1
fi

make

if [ $? -ne 0 ]; then
   echo "Error: <Builld of $projectAp_name $projectAp_version> failed!" 1>&2
   local_clean_exit 1
fi

make install

if [ $? -ne 0 ]; then
   echo "Error: <Installation of $projectAp_name $projectAp_version> failed!" 1>&2
   local_clean_exit 1
fi

if [ -n "${BINARY_TAG}" ]; then
  if [ ! -e InstallArea/${BINARY_TAG}/manifest.xml ]; then
     echo "Error: <Installation of $projectAp_name $projectAp_version> failed!" 1>&2
     local_clean_exit 1
  fi
fi


cd ${User_area}

CreateElementsProject -s -d $projectA_name $projectA_version $projectB_name $projectB_version --yes

cd $projectB_name/$projectB_version
#AddElementsModule $projectB_name

make configure

if [ $? -ne 0 ]; then
   echo "Error: <Configuration of $projectB_name $projectB_version> failed!" 1>&2
   local_clean_exit 1
fi

make

if [ $? -ne 0 ]; then
   echo "Error: <Builld of $projectB_name $projectB_version> failed!" 1>&2
   local_clean_exit 1
fi

make install

if [ $? -ne 0 ]; then
   echo "Error: <Installation of $projectB_name $projectB_version> failed!" 1>&2
   local_clean_exit 1
fi


cd ${User_area}

CreateElementsProject -s -d $projectAp_name $projectAp_version $projectC_name $projectC_version --yes

cd $projectC_name/$projectC_version
#AddElementsModule $projectC_name


make configure

if [ $? -ne 0 ]; then
   echo "Error: <Configuration of $projectC_name $projectC_version> failed!" 1>&2
   local_clean_exit 1
fi

make

if [ $? -ne 0 ]; then
   echo "Error: <Builld of $projectC_name $projectC_version> failed!" 1>&2
   local_clean_exit 1
fi

make install

if [ $? -ne 0 ]; then
   echo "Error: <Installation of $projectC_name $projectC_version> failed!" 1>&2
   local_clean_exit 1
fi


cd ${User_area}

CreateElementsProject --yes -s -d $projectB_name $projectB_version -d $projectC_name $projectC_version $projectD_name $projectD_version

cd $projectD_name/$projectD_version
AddElementsModule --yes -s $projectD_name

# this one must fail because of the wrong dependency tree.
make configure

if [ $? -eq 0 ]; then
   echo "Error: <Configuration of $projectD_name $projectD_version> failed!" 1>&2
   local_clean_exit 1
fi

local_clean_exit 0
