#!/bin/sh
set -e

if [ $# != 3 ]; then
	echo Usage: make_unix_layout platform source destination
	exit 1
fi

ISE_PLATFORM=$1
ISE_EIFFEL=$2
DST_DIR=$3

# If we have been called directly from the shell, we need to initialize
# our environment using `package/config.sh', otherwise the environment
# was set by the callers.
if `echo $0 | grep make_unix_layout$ > /dev/null`; then
	set -- $ISE_PLATFORM $ISE_EIFFEL
	. ./packaging/config.sh
fi

if test -d $DST_DIR; then
	echo $DST_DIR already exists, please remove it or choose a different directory
fi
mkdir -p $DST_DIR
OLD_PWD=`pwd`
cd $DST_DIR
DST_DIR=`pwd`
echo Creating unix layout in $DST_DIR

# some helper variables
UNIX_PLATFORM=unix
UNIX_BASE_PATH=/usr

BASE_PATH=$DST_DIR$UNIX_BASE_PATH
BIN_DIR=$BASE_PATH/bin
INCLUDE_DIR=$BASE_PATH/include/$PRODUCT
LIB_DIR=$BASE_PATH/lib/$PRODUCT
LIB_BIN_DIR=$LIB_DIR/studio
LIB_TOOLS_BIN_DIR=$LIB_DIR/tools
SHARE_DIR=$BASE_PATH/share/$PRODUCT
APPLICATIONS_DIR=$BASE_PATH/share/applications
ICONS_DIR=$BASE_PATH/share/icons
DOC_DIR=$BASE_PATH/share/doc/$PRODUCT
SRC_BIN_DIR=$ISE_EIFFEL/studio/spec/$ISE_PLATFORM/bin
TOOLS_BIN_DIR=$ISE_EIFFEL/tools/spec/$ISE_PLATFORM/bin

TOOLS_BINS="compile_all eiffel eiffel_echo eimgemb syntax_updater iron ace2ecf"
MAIN_BINS="estudio ec ecb finish_freezing"
LIB_BINS="ecdbgd prelink quick_finalize x2c make_precompiled_libraries"

mkdir -p $BIN_DIR
mkdir -p $INCLUDE_DIR
mkdir -p $LIB_DIR
mkdir -p $LIB_BIN_DIR
mkdir -p $LIB_TOOLS_BIN_DIR
mkdir -p $SHARE_DIR
mkdir -p $APPLICATIONS_DIR
mkdir -p $ICONS_DIR
mkdir -p $DOC_DIR

# Copy runtime
cp -r $ISE_EIFFEL/studio/spec/$ISE_PLATFORM/include/* $INCLUDE_DIR
cp -r $ISE_EIFFEL/studio/spec/$ISE_PLATFORM/lib/* $LIB_DIR

# Copy libraries
cp -r $ISE_EIFFEL/library $LIB_DIR
cp -r $ISE_EIFFEL/experimental $LIB_DIR
cp -r $ISE_EIFFEL/contrib $LIB_DIR
cp -r $ISE_EIFFEL/unstable $LIB_DIR

# Copy precompile without EIFGENs and remove WEL files
mkdir -p $SHARE_DIR/precomp/spec/$UNIX_PLATFORM
cp $ISE_EIFFEL/precomp/spec/$ISE_PLATFORM/*.ecf $SHARE_DIR/precomp/spec/$UNIX_PLATFORM/
rm -f $SHARE_DIR/precomp/spec/$UNIX_PLATFORM/wel*
if test -d "$ISE_EIFFEL/experimental/precomp/spec/$ISE_PLATFORM"; then
	mkdir -p $SHARE_DIR/experimental/precomp/spec/$UNIX_PLATFORM
	cp $ISE_EIFFEL/experimental/precomp/spec/$ISE_PLATFORM/*.ecf $SHARE_DIR/experimental/precomp/spec/$UNIX_PLATFORM/
	rm -f $SHARE_DIR/experimental/precomp/spec/$UNIX_PLATFORM/wel*
fi

# Copy documentation
cp $ISE_EIFFEL/VERSION $DOC_DIR
cp $ISE_EIFFEL/INSTALL.readme $DOC_DIR
cp -r $ISE_EIFFEL/examples $DOC_DIR

# Copy esbuilder
cp $ISE_EIFFEL/esbuilder/spec/$ISE_PLATFORM/bin/esbuilder $BIN_DIR/esbuilder$VERSION_SUFFIX
cp -r $ISE_EIFFEL/esbuilder $SHARE_DIR
rm -r $SHARE_DIR/esbuilder/spec

# Copy vision2_demo
cp $ISE_EIFFEL/vision2_demo/spec/$ISE_PLATFORM/bin/vision2_demo $BIN_DIR/vision2_demo$VERSION_SUFFIX
cp -r $ISE_EIFFEL/vision2_demo $SHARE_DIR
cp $ISE_EIFFEL/vision2_demo/readme.html $DOC_DIR/readme-vision2_demo.html
rm -r $SHARE_DIR/vision2_demo/spec
rm -f $SHARE_DIR/vision2_demo/readme.html

# Copy internal binaries
for BIN in $LIB_BINS;
do
	cp $SRC_BIN_DIR/$BIN $LIB_BIN_DIR/$BIN
done

# Copy tools binaries
for BIN in $TOOLS_BINS;
do
	cp $TOOLS_BIN_DIR/$BIN $LIB_TOOLS_BIN_DIR/$BIN
done

# Copy main binaries
for BIN in $MAIN_BINS;
do
	cp $SRC_BIN_DIR/$BIN $BIN_DIR/$BIN$VERSION_SUFFIX
done

# Copy wizards
cp -r $ISE_EIFFEL/studio/wizards $LIB_BIN_DIR

# Copy studio
cp -r $ISE_EIFFEL/studio $SHARE_DIR/studio
rm -r $SHARE_DIR/studio/spec
rm -r $SHARE_DIR/studio/wizards

# Copy tools
cp -r $ISE_EIFFEL/tools $SHARE_DIR/tools
rm -r $SHARE_DIR/tools/spec

# Copy application information
. $PACKAGING_DIR/desktop.sh
cp $PACKAGING_DIR/logo.png $ICONS_DIR/$PRODUCT.png

# Create symlinks for binaries in /usr/bin
cd $BIN_DIR
for BIN in $MAIN_BINS esbuilder vision2_demo;
do
	ln -s $BIN$VERSION_SUFFIX $BIN$RELEASE_SUFFIX
	ln -s $BIN$RELEASE_SUFFIX $BIN
done

if [ $ISE_PLATFORM != "unix" ]; then
	mv $LIB_BIN_DIR/wizards/new_projects/vision2/spec/$ISE_PLATFORM $LIB_BIN_DIR/wizards/new_projects/vision2/spec/unix
	mv $LIB_BIN_DIR/wizards/new_projects/ewf/spec/$ISE_PLATFORM $LIB_BIN_DIR/wizards/new_projects/ewf/spec/unix
	mv $LIB_BIN_DIR/wizards/others/precompile/spec/$ISE_PLATFORM $LIB_BIN_DIR/wizards/others/precompile/spec/unix
	mv $LIB_DIR/library/gobo/spec/$ISE_PLATFORM $LIB_DIR/library/gobo/spec/unix
	mv $LIB_DIR/library/vision2/spec/$ISE_PLATFORM $LIB_DIR/library/vision2/spec/unix
	mv $LIB_DIR/library/cURL/spec/$ISE_PLATFORM $LIB_DIR/library/cURL/spec/unix
	mv $LIB_DIR/library/net/spec/$ISE_PLATFORM $LIB_DIR/library/net/spec/unix
	mv $LIB_DIR/unstable/library/persistency/database/sqlite3/spec/$ISE_PLATFORM $LIB_DIR/unstable/library/persistency/database/sqlite3/spec/unix
	mv $SHARE_DIR/studio/config/$ISE_PLATFORM $SHARE_DIR/studio/config/unix
	mv $SHARE_DIR/tools/iron/spec/$ISE_PLATFORM $SHARE_DIR/studio/config/unix
fi
cd $OLD_PWD
