#!/bin/bash

libs="unix.cmxa"
OCAMLOPT="ocamlopt.opt -g"

extmodules="fugue filepath filesystem"
libmodules="gconf types dag taskdep dagutils filetype modname hier expr pp utils helper process findlibConf prog dependencies target project meta dist analyze configure prepare buildprogs build exception"
mainmodules="sdist doc init help install main"

set -e

########################################################################
########################################################################
########################################################################
# build ext
cd ext
rm -f *.cmi *.cmx *.o
APPEND=""
for mod in $extmodules
do
	echo "COMPILING $mod"
	[ -f ${mod}.mli ] && $OCAMLOPT -for-pack Ext -c ${mod}.mli
	$OCAMLOPT -for-pack Ext -c ${mod}.ml
	APPEND+="ext/${mod}.cmx "
done;
cd ..

echo "BUILDING library obuild_ext.cmxa"
$OCAMLOPT -pack -o ext.cmx -I ext/ $APPEND
$OCAMLOPT -a -o obuild_ext.cmxa ext.cmx

########################################################################
########################################################################
########################################################################
# build the library
cd obuild
rm -f *.cmi *.cmx *.o

APPEND=""
for mod in $libmodules
do
	echo "COMPILING $mod"
	[ -f ${mod}.mli ] && $OCAMLOPT -for-pack Obuild -I ../ -c ${mod}.mli
	$OCAMLOPT -for-pack Obuild -I ../ -c ${mod}.ml
	APPEND+="obuild/${mod}.cmx "
done;
cd ..
echo "BUILDING library obuild.cmxa"
$OCAMLOPT -pack -o obuild.cmx -I ext/ $APPEND
$OCAMLOPT -a -o obuild.cmxa obuild.cmx

# then bootstrap the main executable
cd src
APPEND=""
for mod in $mainmodules
do
	echo "COMPILING $mod"
	[ -f ${mod}.mli ] && $OCAMLOPT -I ../ -c ${mod}.mli
	$OCAMLOPT -I ../ -c ${mod}.ml
	APPEND+="${mod}.cmx "
done
echo "LINKING obuild.bootstrap"
$OCAMLOPT -o ../obuild.bootstrap -I ../ ${libs} obuild_ext.cmxa obuild.cmxa $APPEND
cd ..

rm -f obuild/*.cmi obuild/*.cmx obuild/*.o
rm -f src/*.cmi src/*.cmx src/*.o
rm -f *.cmi *.o *a *.cmx *.cmxa
########################################################################
########################################################################
########################################################################

# rebuild everything with the bootstraped version
export OCAMLRUNPARAM=b
./obuild.bootstrap clean
./obuild.bootstrap configure
time ./obuild.bootstrap build
if [ -x dist/build/obuild/obuild ]; then
	rm obuild.bootstrap
fi
