#!/bin/bash
set -e

VERSION=0.2
SRCS="fixbuild.c fixio.c fixtask.c fiximage.c fixnative.c fixutil.c"
CFLAGS="-DFIXBUILD_BINCOMPAT -Wall -O3"
WINDOWS_LIBS="-lws2_32 -lmswsock -lwinmm"
LINUX_LIBS="-lm -lrt -lpthread -ldl"
MACOS_LIBS="-lm"
HAIKU_LIBS="-lm -lnetwork"

HAIKU32_ROOT="/opt/haiku32"
HAIKU32_HEADERS="$HAIKU32_ROOT/system/headers"
HAIKU32_CFLAGS="-I$HAIKU32_HEADERS -I$HAIKU32_HEADERS/posix -I$HAIKU32_HEADERS/os -I$HAIKU32_HEADERS/os/support"
HAIKU32_LIBS="-L$HAIKU32_ROOT/system/lib -B$HAIKU32_ROOT/system/lib"

HAIKU64_ROOT="/opt/haiku64"
HAIKU64_HEADERS="$HAIKU64_ROOT/system/headers"
HAIKU64_CFLAGS="-I$HAIKU64_HEADERS -I$HAIKU64_HEADERS/posix -I$HAIKU64_HEADERS/os -I$HAIKU64_HEADERS/os/support"
HAIKU64_LIBS="-L$HAIKU64_ROOT/system/lib -B$HAIKU64_ROOT/system/lib"

RPI32_PREFIX="/opt/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi"
RPI32_CFLAGS="-march=armv6 -mfloat-abi=hard -mfpu=vfp"

echo -e "\nPacking data..."

[ ! -f fixembed ] && gcc -Wall -O3 -o fixembed fixembed.c -lm -lrt
./fixembed -nc classes classes.h classes_script
./fixembed -nc build build.h build_scripts
./fixembed -bin common scripts.h common_scripts
./fixembed -bin bin binaries.h exec_binaries
sed -i -e 's/import \\"/import \\"build:/g' build.h

echo -e "\n[ Windows 32bit ]\n"
DIST="dist/fixscript-sdk-windows32-$VERSION"
mkdir -p $DIST
i686-w64-mingw32-gcc $CFLAGS -o $DIST/fixbuild.exe $SRCS $WINDOWS_LIBS
i686-w64-mingw32-strip $DIST/fixbuild.exe
chmod -x $DIST/fixbuild.exe

echo -e "\n[ Windows 64bit ]\n"
DIST="dist/fixscript-sdk-windows64-$VERSION"
mkdir -p $DIST
x86_64-w64-mingw32-gcc $CFLAGS -o $DIST/fixbuild.exe $SRCS $WINDOWS_LIBS
x86_64-w64-mingw32-strip $DIST/fixbuild.exe
chmod -x $DIST/fixbuild.exe

echo -e "\n[ Linux 32bit ]\n"
DIST="dist/fixscript-sdk-linux32-$VERSION"
mkdir -p $DIST
gcc -m32 -I/usr/i686-linux-gnu/include $CFLAGS -o $DIST/fixbuild $SRCS $LINUX_LIBS
strip $DIST/fixbuild

echo -e "\n[ Linux 64bit ]\n"
DIST="dist/fixscript-sdk-linux64-$VERSION"
mkdir -p $DIST
gcc $CFLAGS -o $DIST/fixbuild $SRCS $LINUX_LIBS
strip $DIST/fixbuild

echo -e "\n[ Mac OS ]\n"
DIST="dist/fixscript-sdk-macos-$VERSION"
mkdir -p $DIST
/root/osxcross/target/bin/o64-clang $CFLAGS -o $DIST/fixbuild $SRCS $MACOS_LIBS
/root/osxcross/target/bin/x86_64-apple-darwin10-strip $DIST/fixbuild

echo -e "\n[ Haiku 32bit ]\n"
DIST="dist/fixscript-sdk-haiku32-$VERSION"
mkdir -p $DIST
$HAIKU32_ROOT/bin/i586-pc-haiku-gcc $CFLAGS $HAIKU32_CFLAGS -o $DIST/fixbuild $SRCS $HAIKU_LIBS $HAIKU32_LIBS
$HAIKU32_ROOT/bin/i586-pc-haiku-strip $DIST/fixbuild

echo -e "\n[ Haiku 64bit ]\n"
DIST="dist/fixscript-sdk-haiku64-$VERSION"
mkdir -p $DIST
$HAIKU64_ROOT/bin/x86_64-unknown-haiku-gcc $CFLAGS $HAIKU64_CFLAGS -o $DIST/fixbuild $SRCS $HAIKU_LIBS $HAIKU64_LIBS
$HAIKU64_ROOT/bin/x86_64-unknown-haiku-strip $DIST/fixbuild

echo -e "\n[ Raspberry Pi 32bit ]\n"
DIST="dist/fixscript-sdk-raspi32-$VERSION"
mkdir -p $DIST
$RPI32_PREFIX-gcc $CFLAGS $RPI32_CFLAGS -o $DIST/fixbuild $SRCS $LINUX_LIBS
$RPI32_PREFIX-strip $DIST/fixbuild

echo -e "\nCreating ZIP files..."

for i in dist/*; do
	cp -R --preserve=mode dist-root/* $i/
done

rm -f *.zip
cd dist
for i in *; do
	zip -r -9 ../$i.zip $i > /dev/null
done
cd ..

echo -e "\nAll done!"
