#!/usr/bin/make -f

ARCH:=$(shell dpkg --print-architecture)

# This is the debhelper compatability version to use.
#export DH_COMPAT=2

F77:=frt
GCC:=gcc
#F77FLAGS:= -pipe -O3 -fomit-frame-pointer -ff90
F77FLAGS:= -Am

ifeq ($(ARCH),alpha)
F77FLAGS:=$(F77FLAGS) -mieee
endif

###
SUFFIX=_ffc5
LIBNAME = blas$(SUFFIX)

DLIBNAME= lib$(LIBNAME).so
SLIBNAME= lib$(LIBNAME).a

BLLIB = $(SLIBNAME)
###


#ifeq ($(ARCH),mipsel)
#F77:=g77-3.2
#GCC:=gcc-3.2
#endif

#ifeq ($(ARCH),mips)
#F77:=g77-3.2
#GCC:=gcc-3.2
#endif

#ifeq ($(ARCH),sparc)
#F77:=g77-3.3
#GCC:=gcc-3.3
#endif

SO=2
VERS=$(SO).0

VN:=$(shell pwd)
VO:=$(VN).orig
UD:=$(shell dirname $$(pwd))

PDF:=cinterface
PDD:=debian/patched-docs
PDP:=$(addprefix $(PDD)/,$(PDF))
PDS:=$(addsuffix .tex,$(PDP))
PDO:=$(addsuffix .pdf,$(PDP))

$(UD)/blas.tgz:
	mkdir -p $(@D)
	cd $(@D) && wget -N ftp://ftp.netlib.org/blas/$(@F)

$(UD)/cblas.tgz:
	mkdir -p $(@D)
	cd $(@D) && wget -N ftp://ftp.netlib.org/blas/blast-forum/$(@F)

$(UD)/manpages.tgz:
	mkdir -p $(@D)
	cd $(@D) && wget -N ftp://ftp.netlib.org/lapack/$(@F)

$(VO)/src: $(UD)/blas.tgz
	mkdir -p $@
	cd $@ && tar zxf $<

TF:=s d c z
TF:=$(addsuffix blat1,$(TF)) $(addsuffix blat2,$(TF)) $(addsuffix blat3,$(TF)) \
	$(addsuffix blat2d,$(TF)) $(addsuffix blat3d,$(TF))

$(addprefix $(VO)/test/,$(TF)):
	mkdir -p $(@D)
	cd $(@D) && wget -N ftp://ftp.netlib.org/blas/$(@F)

$(VO)/test: $(addprefix $(VO)/test/,$(TF))

$(VO)/man: $(UD)/manpages.tgz
	mkdir -p $(@D)
	cd $(VO) && tar zxf $< blas
	rm -rf $@
	mv $(VO)/blas/man $@
	rmdir $(VO)/blas

$(VO)/cblas: $(UD)/cblas.tgz
	cd $(VO) && tar zxf $<
	rm -rf $@
	mv $(VO)/CBLAS $@

DF:=blas2-paper.ps blas3-paper.ps faq.html blasqr.ps 
$(addprefix $(VO)/doc/,$(DF)):
	mkdir -p $(@D)
	cd $(@D) && wget -N ftp://ftp.netlib.org/blas/$(@F)

$(VO)/doc/cinterface.pdf:
	mkdir -p $(@D)
	cd $(@D) && wget -N ftp://ftp.netlib.org/blas/blast-forum/$(@F)

$(VO)/doc/blue.gif:
	mkdir -p $(@D)
	cd $(@D) && wget -N ftp://ftp.netlib.org/scalapack/html/gif/$(@F)

%.png: %.gif
	gif2png $<

$(VO)/doc: $(addprefix $(VO)/doc/,$(DF)) $(VO)/doc/cinterface.pdf $(VO)/doc/blue.png

ori: $(addprefix $(VO)/,src test man cblas doc)

BSRC:=$(shell echo src/*.f)
BOBJ:=$(BSRC:.f=.o)

debian/patch_applied:
	! [ -e debian/$(ARCH)/patch ] || patch -p1 <debian/$(ARCH)/patch
	touch $@

debian/patch_unapplied:
	! [ -e debian/$(ARCH)/patch ] || ! [ -e debian/patch_applied ] || patch -p1 -R <debian/$(ARCH)/patch
	rm -f debian/patch_applied

debian/shared_dir debian/static_dir debian/test_dir:
	mkdir -p $(subst _dir,,$(@))
	touch $@

$(subst src/,debian/static/,$(BOBJ)): \
	debian/static/%.o : src/%.f debian/static_dir debian/patch_applied

	$(F77) $(F77FLAGS) -c $< -o $@	

$(subst src/,debian/shared/,$(BOBJ)): \
	debian/shared/%.o : src/%.f debian/shared_dir debian/patch_applied

#	$(F77) $(F77FLAGS) -fPIC -c $< -o $@	
	$(F77) $(F77FLAGS) -c $< -o $@	

$(SLIBNAME): cblas/libcblas.a $(subst src/,debian/static/,$(BOBJ)) debian/static_dir
	cd debian/static && ar x ../../$<
	ar r $@ debian/static/*.o

$(DLIBNAME).$(VERS): cblas/libcblas_pic.a $(subst src/,debian/shared/,$(BOBJ)) debian/shared_dir
	cd debian/shared && ar x ../../$<
	gcc -shared -Wl,-soname=$(DLIBNAME).$(SO) -o $@ debian/shared/*.o

$(DLIBNAME).$(SO): $(DLIBNAME).$(VERS)
	ln -snf $< $@

$(DLIBNAME): $(DLIBNAME).$(SO)
	ln -snf $< $@

cblas/Makefile.in: cblas/Makefile.LINUX
	cat $< | sed -e "s,^BLLIB = .*,BLLIB = -L $$(pwd) -l$(LIBNAME),1" \
		     -e "s,^CBDIR = .*,CBDIR = $$(pwd)/cblas,1" \
		     -e "s,^CC = gcc,CC = \$$(GCC) ,1" \
		     -e "s,^FC = g77,FC = \$$(F77) ,1" \
		     -e "s,^CFLAGS = ,CFLAGS = \$$(PICOPTS) ,1" \
		     -e "s,^FFLAGS = ,FFLAGS = \$$(PICOPTS) ,1" \
			>$@

cblas/libcblas.a: cblas/Makefile.in debian/patch_applied
	cd $(@D) && $(MAKE) cleanobj 
	cd $(@D) && $(MAKE) rmlib
	cd $(@D) && $(MAKE) CC=$(GCC) F77=$(F77) alllib
	cp cblas/lib/LINUX/cblas_LINUX.a $@

cblas/libcblas_pic.a: cblas/Makefile.in debian/patch_applied
	cd $(@D) && $(MAKE) cleanobj 
	cd $(@D) && $(MAKE) rmlib
	cd $(@D) && $(MAKE) CC=$(GCC) F77=$(F77) PICOPTS=-fPIC alllib
	cp cblas/lib/LINUX/cblas_LINUX.a $@

BIN:=s d c z
BIN:=$(addsuffix cblat1,$(BIN)) $(addsuffix cblat2,$(BIN)) $(addsuffix cblat3,$(BIN))
BIN:=$(addprefix cblas/testing/x,$(BIN))

$(BIN): $(DLIBNAME)
	cd cblas && $(MAKE) alltst CC=$(GCC) F77=$(F77) CBLIB=

FBN:=s d c z
FBN:=$(addsuffix blat1,$(FBN)) $(addsuffix blat2,$(FBN)) $(addsuffix blat3,$(FBN))
FBN:=$(addprefix test/x,$(FBN))

test/%.f: test/%
	cp $< $@

test/x%: test/%.f $(DLIBNAME) 
	$(F77) $(F77FLAGS) -o $@ $< -L $$(pwd) -l$(LIBNAME)

OUT:=$(subst cblas/testing/,debian/test/,$(BIN))
OUT1:=$(filter %1,$(OUT))
OUT23:=$(filter-out %1,$(OUT))

$(OUT1): \
	debian/test/%: cblas/testing/% debian/test_dir $(DLIBNAME)
	LD_LIBRARY_PATH=$$(pwd):$$LD_LIBRARY_PATH $< > $@
	awk '/fail/ || /FAIL/ {exit 1}' $@ || (cat $@ && false)

$(OUT23): \
	debian/test/%: cblas/testing/% debian/test_dir $(DLIBNAME)
	LD_LIBRARY_PATH=$$(pwd):$$LD_LIBRARY_PATH $< \
		< cblas/testing/$(subst x,,$(subst cblat,in,$*)) > $@
	awk '/fail/ || /FAIL/ {exit 1}' $@ || (cat $@ && false)

FOT:=$(subst test/,debian/test/,$(FBN))
FOT1:=$(filter %1,$(FOT))
FOT23:=$(filter-out %1,$(FOT))

$(FOT1): \
	debian/test/%: test/% debian/test_dir $(DLIBNAME)
	LD_LIBRARY_PATH=$$(pwd):$$LD_LIBRARY_PATH $< > $@
	awk '/fail/ || /FAIL/ {exit 1}' $@ || (cat $@ && false)

$(FOT23): \
	debian/test/%: test/% debian/test_dir $(DLIBNAME)
	rm -f *.SUMM
	LD_LIBRARY_PATH=$$(pwd):$$LD_LIBRARY_PATH $< \
		< test/$(subst x,,$*)d
	cat *.SUMM >$@
	awk '/fail/ || /FAIL/ {exit 1}' $@ || (cat $@ && false)

debian/test_results: $(OUT) $(FOT)
	cat $^ > $@
	cat $@ | awk '/fail/ || /FAIL/ {exit 1}'


debian/tmp/usr/lib/%: %
	dh_testroot
	mkdir -p $(@D)
	[ -L $* ] || install -m 644 $* $(@D)
	! [ -L $* ] || cp -d $* $(@D)

debian/tmp/usr/lib/blas/%: cblas/testing/%
	dh_testroot
	mkdir -p $(@D)
	install -m 755 cblas/testing/$* $(@D)

debian/tmp/usr/lib/blas/%: test/%
	dh_testroot
	mkdir -p $(@D)
	install -m 755 test/$* $(@D)

debian/tmp/usr/include/%: cblas/src/%
	dh_testroot
	mkdir -p $(@D)
	install -m 644 cblas/src/$* $(@D)

MFL:=$(shell echo man/manl/*)
%.3: %.l
	cat $< |sed "s,^\( *.TH  *[^ ]*  *\)l\(  *.*\),\1 3 \2,1" >$@
MF:=$(subst .l,.3,$(MFL))

IF:=so so.$(SO) so.$(VERS) a
IF:=$(addprefix debian/tmp/usr/lib/libblas$(SUFFIX).,$(IF))
IF:=$(IF) $(subst cblas/testing/,debian/tmp/usr/lib/blas/,$(BIN))
IF:=$(IF) $(subst test/,debian/tmp/usr/lib/blas/,$(FBN))
IF:=$(IF) $(addprefix debian/tmp/usr/include/cblas,.h _f77.h) $(MF) debian/test_results

$(PDO): %.pdf: %.tex
	cd $(@D) && pdflatex $(<F)

install: $(IF) $(PDO)
	dh_movefiles

build: $(DLIBNAME) $(SLIBNAME) 

clean: cblas/Makefile.in debian/patch_unapplied
	dh_testdir
	dh_testroot
	rm -f build-stamp
	rm -f debian/static/* debian/shared/* test/x* test/*.f libblas* cblas/libcblas* man/manl/*.3
	rm -f *SUMM
	rm -rf debian/test* debian/shared* debian/static*
	cd $(PDD) && rm -rf *.{pdf,log,aux,ps,dvi}

	-rm -rf static shared
	cd cblas && $(MAKE) clean && $(MAKE) rmlib
	rm -f $<

	dh_clean

# Build architecture-independent files here.
binary-indep: install
	dh_testdir -i
	dh_testroot -i
	dh_installdirs -i
	dh_installdocs -i
	cp $(PDO) debian/blas-ffc5-doc/usr/share/doc/blas-ffc5-doc/
	dh_installmanpages -p blas-ffc5-doc debian/*.1
	dh_installchangelogs -i 
	dh_strip -i
	dh_link -i
	dh_compress -i
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

# Build architecture-dependent files here.
binary-arch: install
	dh_testdir -a
	dh_testroot -a
	dh_installdirs -a
	dh_installdocs -a
	dh_installmanpages -p blas-ffc5-test man/manl/*.3
	dh_installexamples -a
	dh_installchangelogs -a 
	dh_strip -a
	dh_link -a
	dh_compress -a
	dh_fixperms -a
	dh_makeshlibs -a -V "atlas2-base | blas | blas2"
	dh_installdeb -a
	dh_shlibdeps -a -l $$(pwd)
	dh_gencontrol -a -u"-Vg77=libg2c0-dev"
	dh_md5sums -a
	dh_builddeb -a

source diff:                                                                  
	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false

binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary \
	$(addprefix $(UD)/,blas.tgz cblas.tgz manpages.tgz)
.SUFFIXES:
.INTERMEDIATE: $(VO)/doc/blue.gif
