#!/usr/bin/make -f

#export DH_VERBOSE = 1

export FX_GLIDE_PIC = 1

include debian/vars

SRC_DIR = $(SOURCE_DIR)

this = $(MAKE) -f debian/rules
dbs_build := $(MAKE) -f /usr/share/dbs/sys-build.mk
glide2_build := $(MAKE) -C $(SRC_DIR)/glide2x -f makefile.linux

pkg_dir := $(CURDIR)/debian

glide2_bin_dir := $(pkg_dir)/glide2-bin
glide3_bin_dir := $(pkg_dir)/glide3-bin
libglide2_dir := $(pkg_dir)/libglide2
libglide3_dir := $(pkg_dir)/libglide3
libglide2_dev_dir := $(pkg_dir)/libglide2-dev
libglide3_dev_dir := $(pkg_dir)/libglide3-dev

INSTALL=install
INSTALL_PROGRAM=$(INSTALL) -m 755
INSTALL_SCRIPT=$(INSTALL) -m 755
INSTALL_LIB=$(INSTALL) -m 644
INSTALL_DATA=$(INSTALL) -m 644

DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH)

CFLAGS = -g -Wall

ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
  CFLAGS += -O0
else
ifeq ($(DEB_HOST_ARCH),alpha)
  CFLAGS += -O2 -mcpu=ev5 -fomit-frame-pointer \
	    -fexpensive-optimizations -mieee -DBIG_OPT
else
ifeq ($(DEB_HOST_ARCH),i386)
  CFLAGS += -O3 -march=i486 -fomit-frame-pointer -funroll-loops \
	    -fexpensive-optimizations -ffast-math -DBIG_OPT
else
  CFLAGS += -O2 -fomit-frame-pointer -fexpensive-optimizations -ffast-math \
	    -DBIG_OPT
endif
endif
endif


debian/po/templates.pot: debian/libglide2.templates debian/libglide3.templates
	@debconf-updatepo

unpack:
	$(dbs_build) source.make

make-patch:
	$(dbs_build) make-diff

$(SRC_DIR)/glide2x $(SRC_DIR)/glide3x: $(STAMP_DIR)/SRC_DIR_glide
$(STAMP_DIR)/SRC_DIR_glide:
	$(dbs_build) source.make
	cd $(SRC_DIR)/glide2x; ln -s ../swlibs swlibs
	cd $(SRC_DIR)/glide3x; ln -s ../swlibs swlibs
	touch $(STAMP_DIR)/SRC_DIR_glide

ifeq ($(DEB_HOST_ARCH),i386)
BUILD_GLIDE2 := build.glide2
else
BUILD_GLIDE2 := install.headers.glide2
endif

build: $(BUILD_GLIDE2) build.glide3 debian/po/templates.pot
build.glide2: build.glide2.cvg build.glide2.h3
build.glide3: build.glide3.h3 build.glide3.h5

build.glide2.cvg: $(SRC_DIR)/glide2x $(STAMP_DIR)/build.glide2.cvg
$(STAMP_DIR)/build.glide2.cvg:
	$(glide2_build) FX_GLIDE_HW=cvg CNODEBUG="$(CFLAGS)"
	touch $(STAMP_DIR)/build.glide2.cvg

build.glide2.h3: $(SRC_DIR)/glide2x $(STAMP_DIR)/build.glide2.h3
$(STAMP_DIR)/build.glide2.h3:
	$(glide2_build) FX_GLIDE_HW=h3 CNODEBUG="$(CFLAGS)"
	touch $(STAMP_DIR)/build.glide2.h3

install.headers.glide2: $(SRC_DIR)/glide2x $(STAMP_DIR)/install.headers.glide2
$(STAMP_DIR)/install.headers.glide2:
	$(glide2_build) FX_GLIDE_HW=cvg CNODEBUG="$(CFLAGS)" incs
	$(glide2_build) FX_GLIDE_HW=h3 CNODEBUG="$(CFLAGS)" incs
	touch $(STAMP_DIR)/install.headers.glide2

build.glide3.h3: $(SRC_DIR)/glide3x $(STAMP_DIR)/build.glide3.h3
$(STAMP_DIR)/build.glide3.h3:
	( \
	  cd $(SRC_DIR)/glide3x; \
	  mkdir $(CURDIR)/debian/tmp.h3; \
	  ./chores.3dfx --generate "--configure=--enable-fx-glide-hw=h3 \
		--prefix=/usr" --build-dir=build.h3; \
	  cd build.h3; \
	  ./build.3dfx --no-x DESTDIR="$(CURDIR)/debian/tmp.h3/" \
		CFLAGS="$(CFLAGS)" install; \
	)
	touch $(STAMP_DIR)/build.glide3.h3

build.glide3.h5: $(SRC_DIR)/glide3x $(STAMP_DIR)/build.glide3.h5
$(STAMP_DIR)/build.glide3.h5:
	( \
	  cd $(SRC_DIR)/glide3x; \
	  mkdir $(CURDIR)/debian/tmp.h5; \
	  ./chores.3dfx --generate "--configure=--enable-fx-glide-hw=h5 \
		--prefix=/usr" --build-dir=build.h5; \
	  cd build.h5; \
	  ./build.3dfx --no-x DESTDIR="$(CURDIR)/debian/tmp.h5/" \
		CFLAGS="$(CFLAGS)" install; \
	)
	touch $(STAMP_DIR)/build.glide3.h5


sys-clean:
	cd $(SRC_DIR)/glide3x; ./chores.3dfx --clean
	rm -rf $(SRC_DIR)/glide3x/build.h3 $(CURDIR)/debian/tmp.h3
	rm -rf $(SRC_DIR)/glide3x/build.h5 $(CURDIR)/debian/tmp.h5
	rm -f $(STAMP_DIR)/build.glide2.* $(STAMP_DIR)/build.glide3.*
	$(glide2_build) FX_GLIDE_HW=cvg clobber
	$(glide2_build) FX_GLIDE_HW=h3 clobber

clean:
	# No need to run clean
	$(dbs_build) source.clean
	rm -f $(STAMP_DIR)
	rm -rf $(CURDIR)/debian/tmp.h3 $(CURDIR)/debian/tmp.h5
	dh_clean

binary: binary-indep binary-arch

ifeq ($(DEB_HOST_ARCH),i386)
BINARY_ARCH_GLIDE2 := binary-libglide2 binary-glide2-bin binary-libglide2-dev
endif

binary-indep:

binary-arch: build $(BINARY_ARCH_GLIDE2) binary-libglide3 binary-libglide3-dev

binary-libglide2:
	DH_OPTIONS="-plibglide2" $(this) binary-libglide2-real

binary-libglide2-real: build
	dh_testdir
	dh_testroot
	dh_clean -k

	dh_installdirs

	$(INSTALL_LIB) $(SRC_DIR)/glide2x/cvg/lib/libglide.so.2.53 \
		       $(libglide2_dir)/usr/lib/glide2/libglide_cvg.so.2.53
	$(INSTALL_LIB) $(SRC_DIR)/glide2x/h3/lib/libglide.so.2.60 \
		       $(libglide2_dir)/usr/lib/glide2/libglide_h3.so.2.60
	$(INSTALL_LIB) $(SRC_DIR)/glide2x/swlibs/lib/libtexus.so.1.1 \
		       $(libglide2_dir)/usr/lib/
	dh_strip

	dh_installdocs
	dh_installchangelogs
	dh_installdebconf
	dh_link

	dh_compress
	dh_fixperms
	dh_makeshlibs
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_builddeb

binary-libglide2-dev:
	DH_OPTIONS="-plibglide2-dev" $(this) binary-libglide2-dev-real

binary-libglide2-dev-real: build
	dh_testdir
	dh_testroot
	dh_clean -k

	dh_installdirs

	$(INSTALL_DATA) $(SRC_DIR)/glide2x/h3/include/glide.h \
			$(libglide2_dev_dir)/usr/include/glide/
	$(INSTALL_DATA) $(SRC_DIR)/glide2x/h3/include/glidesys.h \
			$(libglide2_dev_dir)/usr/include/glide/
	$(INSTALL_DATA) $(SRC_DIR)/glide2x/h3/include/glideutl.h \
			$(libglide2_dev_dir)/usr/include/glide/
	$(INSTALL_DATA) $(SRC_DIR)/glide2x/h3/include/sst1vid.h \
			$(libglide2_dev_dir)/usr/include/glide/
	$(INSTALL_DATA) $(SRC_DIR)/glide2x/h3/include/gump.h \
			$(libglide2_dev_dir)/usr/include/glide/

	$(INSTALL_DATA) $(SRC_DIR)/glide2x/swlibs/include/3dfx.h \
			$(libglide2_dev_dir)/usr/include/glide/
	$(INSTALL_DATA) $(SRC_DIR)/glide2x/swlibs/include/linutil.h \
			$(libglide2_dev_dir)/usr/include/glide/
	$(INSTALL_DATA) $(SRC_DIR)/glide2x/swlibs/include/texus.h \
			$(libglide2_dev_dir)/usr/include/glide/

	dh_strip

	dh_installdocs
	dh_installchangelogs
	dh_link

	dh_compress
	dh_fixperms
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_builddeb

binary-glide2-bin:
	DH_OPTIONS="-pglide2-bin" $(this) binary-glide2-bin-real

binary-glide2-bin-real: build
	dh_testdir
	dh_testroot
	dh_clean -k

	dh_installdirs

	$(INSTALL_PROGRAM) $(SRC_DIR)/glide2x/h3/glide/tests/test[0-9][0-9] \
			   $(glide2_bin_dir)/usr/lib/glide2/bin/
	$(INSTALL_PROGRAM) $(SRC_DIR)/glide2x/cvg/bin/pass \
			   $(glide2_bin_dir)/usr/lib/glide2/bin/
	dh_strip

	dh_installdocs
	dh_installchangelogs
	dh_link

	dh_compress
	dh_fixperms
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_builddeb

binary-libglide3:
	DH_OPTIONS="-plibglide3" $(this) binary-libglide3-real

binary-libglide3-real: build
	dh_testdir
	dh_testroot
	dh_clean -k

	dh_installdirs

	$(INSTALL_LIB) $(CURDIR)/debian/tmp.h3/usr/lib/libglide3.so.3.10.0 \
		       $(libglide3_dir)/usr/lib/glide3/libglide3_h3.so.3.10.0
	$(INSTALL_LIB) $(CURDIR)/debian/tmp.h5/usr/lib/libglide3.so.3.10.0 \
		       $(libglide3_dir)/usr/lib/glide3/libglide3_h5.so.3.10.0

	dh_strip

	dh_installdocs
	dh_installchangelogs
	dh_link
	dh_installdebconf

	dh_compress
	dh_fixperms
	dh_makeshlibs
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_builddeb

binary-libglide3-dev:
	DH_OPTIONS="-plibglide3-dev" $(this) binary-libglide3-dev-real

binary-libglide3-dev-real: build
	dh_testdir
	dh_testroot
	dh_clean -k

	dh_installdirs

	$(INSTALL_DATA) $(CURDIR)/debian/tmp.h5/usr/include/glide3/* \
			$(libglide3_dev_dir)/usr/include/glide3/

	dh_strip

	dh_installdocs
	dh_installchangelogs
	dh_link

	dh_compress
	dh_fixperms
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_builddeb

binary-glide3-bin:
	DH_OPTIONS="-pglide3-bin" $(this) binary-glide3-bin-real

binary-glide3-bin-real: build
	dh_testdir
	dh_testroot
	dh_clean -k

	dh_installdirs

	$(INSTALL_PROGRAM) $(SRC_DIR)/glide3x/h3/glide/tests/test[0-9][0-9] \
			   $(glide3_bin_dir)/usr/lib/glide3/bin/
	dh_strip

	dh_installdocs
	dh_installchangelogs
	dh_link

	dh_compress
	dh_fixperms
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_builddeb

.PHONY: unpack make-patch build sys-clean clean binary binary-arch binary-indep
.PHONY: install.headers.glide2
.PHONY: build.glide2 build.glide2.cvg build.glide2.h3
.PHONY: build.glide3 build.glide3.h3 build.glide3.h5

