#!/bin/bash -e

source base-config.sh

SN=elegant
VER=2024.1.0 SDDSV=5.6 SDDSEV=5.6 OAGV=1.28 BASEV=7.0.8.1
#VER=2023.4.0 SDDSV=5.6 SDDSEV=5.6 OAGV=1.28 BASEV=7.0.8.1
#VER=2023.3.0 SDDSV=5.5 SDDSEV=5.4 OAGV=1.28 BASEV=7.0.8.1

CF=gcc
CV=13.3.0
CV2=$(cut -d '.' -f1-2 <<< ${CV})
CV2="${CV2//./_}"

MPIF=mpich
MPIV=4.3.0b1
MPIV2=$(cut -d '.' -f1-2 <<< ${MPIV})
MPIV2="${MPIV2//./_}"

module load ${CF}/${CV} ${MPIF}/${MPIV}
module load perl/5.40.0

BDIR=${SW}/${CF}-${CV2}/${MPIF}-${MPIV2}/${SN}/build/${VER}
IDIR=${SW}/${CF}-${CV2}/${MPIF}-${MPIV2}/${SN}/${VER}

echo "BDIR: $BDIR"
echo "IDIR: $IDIR"

# Make build dir and download all needed files to it
mkdir -pv $BDIR
cd $BDIR
$fetch https://epics.anl.gov/download/base/base-${BASEV}.tar.gz # https://epics.anl.gov/download/base/index.php
$fetch https://ops.aps.anl.gov/downloads/elegant.${VER}.tar.gz # https://www.aps.anl.gov/Accelerator-Operations-Physics/Software
$fetch https://epics.anl.gov/download/extensions/extensionsTop_20120904.tar.gz # https://epics.anl.gov/extensions/configure/index.php
$fetch https://ops.aps.anl.gov/downloads/SDDS.${SDDSV}.tar.gz # https://www.aps.anl.gov/Accelerator-Operations-Physics/Software
$fetch https://ops.aps.anl.gov/downloads/oag.apps.configure.tar.gz # https://www.aps.anl.gov/Accelerator-Operations-Physics/Software
$fetch https://ops.aps.anl.gov/downloads/SDDSepics.${SDDSEV}.tar.gz # https://www.aps.anl.gov/Accelerator-Operations-Physics/Software
$fetch https://ops.aps.anl.gov/downloads/elegant.${VER}.tar.gz # https://www.aps.anl.gov/Accelerator-Operations-Physics/Software
$fetch https://ops.aps.anl.gov/downloads/oag.${OAGV}.tar.gz # https://www.aps.anl.gov/Accelerator-Operations-Physics/Software
$fetch https://ops.aps.anl.gov/downloads/defns.rpn # https://www.aps.anl.gov/Accelerator-Operations-Physics/Software
$fetch https://ops.aps.anl.gov/downloads/elegantExamples.tar.gz

echo "done wget"

# Make dest dir
mkdir -pv $IDIR/epics

# Unpack epics base
cd $IDIR/epics
tar zxf $BDIR/base-${BASEV}.tar.gz
mv base-${BASEV}/ base
export HOST_ARCH=linux-x86_64
export EPICS_HOST_ARCH=linux-x86_64
cd base/configure
echo CROSS_COMPILER_TARGET_ARCHS= >> CONFIG
echo SHARED_LIBRARIES=NO >> CONFIG

# Add here CC, CCC, CXX, FC, etc to point to compilers (uncommented)
#sed -i '/^COMMANDLINE_LIBRARY = READLINE/d' os/CONFIG_SITE.Common.linux-x86_64
echo CC=$CC >> os/CONFIG_SITE.Common.linux-x86_64
echo CCC=$CXX >> os/CONFIG_SITE.Common.linux-x86_64
echo CXX=$CXX >> os/CONFIG_SITE.Common.linux-x86_64
echo FC=$FC >> os/CONFIG_SITE.Common.linux-x86_64
cd ..
make





# Upzip extension base
cd $IDIR/epics
tar zxf $BDIR/extensionsTop_20120904.tar.gz

# Build SDDS
cd $IDIR
tar zxf $BDIR/SDDS.${SDDSV}.tar.gz
cd epics/extensions/configure
make
cd ../src/SDDS/tiff
make
cd ../png
make


cd $IDIR/epics/extensions/src/SDDS
make
cd python
PYTHON3=1 make
cd ..

echo "done SDDS"

# OAG
cd $IDIR
tar zxf $BDIR/oag.apps.configure.tar.gz
tar zxf $BDIR/SDDSepics.${SDDSEV}.tar.gz
tar zxf $BDIR/elegant.${VER}.tar.gz


# OAG Apps
cd $IDIR/oag/apps/configure
echo EPICS_BASE=$IDIR/epics/base >> RELEASE
cd ../src/physics/
make
cd ../xraylib/
make
echo "done OAG Apps"

# Elegant
cd $IDIR/oag/apps/src/elegant
export PATH=$PATH:$IDIR/epics/extensions/bin/linux-x86_64
make
cd elegantTools
make
echo "done elegant"

# Pelegant
cd $IDIR/epics/extensions/src/SDDS/SDDSlib
make clean
make MPI=1
cd ../pgapack
make clean
make
cd $IDIR/oag/apps/src/elegant
make clean
make Pelegant
echo "done Pelegant"

# OAG Tcl/Tk
cd $IDIR
tar zxf $BDIR/oag.${OAGV}.tar.gz
cd oag/apps/src/tcltklib
make
cd ../pem
make
cd ../tcltkinterp/extensions
make
./installExtensions -location ../../../lib/linux-x86_64
echo "done OAG Tcl/Tk"

# Copy defns file to release area
cp $BDIR/defns.rpn $IDIR

# Configure oag
cd $IDIR/oag/apps/bin/linux-x86_64
ln -s ${TCL_BIN}/tclsh oagtclsh
ln -s ${TCL_BIN}/wish oagwish


# copy examples
cd $IDIR
tar zxf $BDIR/elegantExamples.tar.gz


echo "done"
