#!/usr/bin/make -f
# -*- makefile -*-

export DH_OPTIONS

SHELL:=/bin/sh

ROOT:=$(CURDIR)/build-dir

CONFIGDIR:=$(ROOT)/config
SRCDIR:=$(ROOT)/src
BS_SML:=$(ROOT)/bootstrap/bin/sml
BS_LINK:=$(ROOT)/bootstrap/bin/.link-sml

SMLNJ_HOME:=/usr/lib/smlnj
BINDIR:=$(SMLNJ_HOME)/bin
HEAPDIR:=$(BINDIR)/heap
RUNDIR:=$(BINDIR)/run
LIBDIR:=$(BINDIR)/lib

VERSION=$(shell cat $(CONFIGDIR)/version)

srcdirs:=ckit cml config doc eXene heap2asm ml-burg ml-lex ml-lpt MLRISC ml-yacc nlffi pgraph smlnj-c smlnj-lib trace-debug-profile
basedirs:=cm compiler runtime system

notlibs:=smlnj-runtime smlnj-doc
libpkgs:=$(filter-out $(notlibs),$(shell dh_listpackages))

vars.sed:
	echo "s,@SHELL@,$(SHELL),g" > vars.sed
	echo "s,@SMLNJ_HOME@,$(SMLNJ_HOME)," >> vars.sed
	echo "s,@BINDIR@,$(BINDIR)," >> vars.sed
	echo "s,@VERSION@,$(VERSION)," >> vars.sed

arch-n-opsys: $(CONFIGDIR)/_arch-n-opsys vars.sed
	cat $< | sed -f vars.sed > $@
	chmod 777 $@

$(BS_SML):
	for f in $(srcdirs); do cp -a $$f $(ROOT)/bootstrap; done
	mkdir -p $(ROOT)/bootstrap/base
	for f in $(basedirs); do cp -a base/$$f $(ROOT)/bootstrap/base; done
	cd $(ROOT)/bootstrap && URLGETTER=/bin/false ./config/install.sh

boot.%.tgz: $(BS_SML)
	cd $(ROOT)/base/system && echo "CMB.make();" | $< "\$$smlnj/cmb.cm";
	cd $(ROOT)/base/system/sml.boot.$* \
	   && $(BS_LINK) @SMLboot=BOOTLIST @SMLheap=sml @SMLalloc=1M \
	                 @SMLrebuild="foo"
	rm -r $(ROOT)/base/system/sml.boot.$*
	rm -r $(ROOT)/base/system/*.bin.$*
	mv $(ROOT)/base/system/foo.boot.$* $(ROOT)/base/system/sml.boot.$*
	cd $(ROOT)/base/system && tar zcf $(ROOT)/$@ sml.boot.$*;

boot: arch-n-opsys
	eval `./arch-n-opsys` && $(MAKE) -f debian/rules boot.$$ARCH-unix.tgz;

smlnj: boot
	cd $(ROOT) && ./config/install.sh
	
	mkdir -p $(ROOT)/wrapper
	for c in `cd $(ROOT)/bin && ls`; do \
	  cat debian/wrapper.in | sed -f vars.sed -e "s/@CMD@/$$c/g" > $(ROOT)/wrapper/$$c; \
	  chmod 555 $(ROOT)/wrapper/$$c; \
	done

$(ROOT):
	mkdir -p $(ROOT)
	for d in $$(ls -A | grep -v debian); do cp -a $$d $(ROOT); done

# Architecture
build: build-arch-stamp build-indep-stamp

build-arch: build-arch-stamp
build-arch-stamp: $(ROOT)
	cp debian/targets build-dir/config/targets
	$(MAKE) -f debian/rules smlnj
	
	touch $@

build-indep: build-indep-stamp
build-indep-stamp:
ifeq (,$(filter nodoc,$(DEB_BUILD_OPTIONS)))
	cd $(ROOT)/base/cm/Doc; latex manual.tex && latex manual.tex && dvipdfmx -o cm_manual.pdf manual.dvi
	cd $(ROOT)/ml-lpt/doc; latex manual.tex && latex manual.tex && dvipdfmx -o ml-lpt_manual.pdf manual.dvi
	cd $(ROOT)/ml-burg/doc; transfig -L ps tree.fig && make && latex doc.tex && latex doc.tex && dvipdfmx -o ml-burg_manual.pdf doc.dvi
	cd $(ROOT)/nlffi/lib/Doc/manual; latex nlffi.tex && latex nlffi.tex && dvipdfmx nlffi.dvi
	cd $(ROOT)/MLRISC/Doc; make
	cd $(ROOT)/MLRISC/Tools/Doc; make
	cd $(ROOT)/ml-lex; latex lexgen.tex && latex lexgen.tex && dvipdfmx lexgen.dvi
	cd $(ROOT)/ml-yacc/doc; latex mlyacc.tex && latex mlyacc.tex && dvipdfmx mlyacc.dvi
endif
	touch $@

clean:
	dh_testdir
	dh_testroot
	rm -f *-stamp
	
	rm -rf $(ROOT)
	rm -f vars.sed
	rm -f arch-n-opsys
	rm -f boot*tgz
	rm -rf $(SRCDIR)/system/foo.* $(SRCDIR)/system/sml.*
	
	rm -rf sml.boot.*
	
	dh_clean

install: install-arch-stamp install-indep-stamp

install-indep: build-indep-stamp
	dh_testdir
	dh_testroot
	dh_installdirs -i
	dh_install -i --list-missing

install-arch: build-arch-stamp
	dh_testdir
	dh_testroot
	dh_prep
	dh_installdirs -s
	
	dh_installchangelogs -psmlnj base/compiler/ChangeLog upstream
	dh_installchangelogs -plibcml-smlnj cml/CHANGES upstream
	dh_installchangelogs -plibexene-smlnj eXene/CHANGES upstream
	dh_installchangelogs -plibsmlnj-smlnj smlnj-lib/CHANGES upstream
	dh_installchangelogs -plibckit-smlnj ckit/HISTORY upstream
	
	dh_install -s --list-missing
	
# make sure that the build path doesn't sneak in the link and run scripts
	sed -i 's/BIN_DIR=".*smlnj.*"/BIN_DIR="\/usr\/lib\/smlnj\/bin\/"/' $(CURDIR)/debian/smlnj-runtime/usr/lib/smlnj/bin/.*-sml
# install extrapathconfig rules to smlnj-runtime package to use as a seed for
# the trigger-generated pathconfig file
	install -m 644 config/extrapathconfig $(CURDIR)/debian/smlnj-runtime/usr/lib/smlnj/lib/
	echo bindir ../bin >> $(CURDIR)/debian/smlnj-runtime/usr/lib/smlnj/lib/extrapathconfig

binary-arch: install-arch
	dh_testdir -a
	dh_testroot -a 
	dh_installchangelogs -a
	dh_installdocs --exclude=".cvsignore" -a
	dh_installexamples --exclude=".cvsignore" -a
	dh_installman -a
	dh_strip -a
	dh_compress -a
	dh_fixperms -a
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

binary-indep: install-indep
	dh_testdir -i
	dh_testroot -i 
	dh_installchangelogs -i
	dh_installdocs --exclude=".cvsignore" -i
	dh_installexamples --exclude=".cvsignore" -i
	dh_installman -i
	dh_strip -i
	dh_compress -i
	dh_fixperms -i
	dh_installdeb -i
	dh_shlibdeps -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

binary: binary-arch binary-indep
.PHONY: build build-arch build-indep clean binary-arch binary-indep binary install install-arch install-indep
