#!/usr/bin/make -f
#
# Copyright © 1997-1999 Joey Hess <joeyh@debian.org>
# Copyright © 2002-2004 Robert Millan <rmh@debian.org>
# Copyright © 2004-2012 Guillem Jover <guillem@debian.org>
# Copyright © 2018      Stephen Kitt <skitt@debian.org>
#

export DEB_BUILD_MAINT_OPTIONS = hardening=+all

tmpdir := $(CURDIR)/debian/tmp
pkg_bochs := $(CURDIR)/debian/bochs

include /usr/share/dpkg/architecture.mk

ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
  conf_gnu_type += --build $(DEB_HOST_GNU_TYPE)
else
  conf_gnu_type += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
endif

include /usr/share/dpkg/buildflags.mk

cdrom := cdrom

ifeq ($(DEB_HOST_ARCH_OS),linux)
  kernel := linux
  conf_arch_args += --enable-pcidev
  eth := eth0
  com := ttyS0
endif
ifeq ($(DEB_HOST_ARCH_OS),kfreebsd)
  kernel := fbsd
  eth := xl0
  com := cuua0
  cdrom := acd0
endif
ifeq ($(DEB_HOST_ARCH_OS),hurd)
  eth := eth0
  com := com0
endif

clean:
	dh_testdir
	dh_testroot

	[ ! -f bios/Makefile ] || $(MAKE) -C bios bios-clean
	rm -f bios/VGABIOS-*
	rm -f misc/sb16/sb16ctrl
	[ ! -f Makefile ] || $(MAKE) dist-clean
	rm -f bxversion.rc
	rm -f ltdl.* ltdlconf.*
	rm -f ltmain.sh
	rm -f aclocal.m4
	rm -f config.sub config.guess
	rm -f configure

	dh_clean

configure: configure.in
	dh_testdir

	libtoolize -c
	# XXX: Make extra sure we link against the system shared library.
	rm -rf libltdl
	aclocal
	autoconf

config.status: configure
	dh_testdir

	-test -r /usr/share/misc/config.sub && \
	  cp -fu /usr/share/misc/config.sub config.sub
	-test -r /usr/share/misc/config.guess && \
	  cp -fu /usr/share/misc/config.guess config.guess

	# Note: We disable docbook support here as a cheap way to avoid
	# building it in build-arch, and only in build-indep. This works
	# because configure only disables entering the directory.
	CPPFLAGS="$(CPPFLAGS)" \
	CFLAGS="$(CFLAGS)" \
	CXXFLAGS="$(CXXFLAGS)" \
	LDFLAGS="$(LDFLAGS)" \
	./configure \
	  $(conf_gnu_type) \
	  --prefix=/usr \
	  --mandir=\$${prefix}/share/man \
	  --with-x11 \
	  --with-rfb \
	  --with-term \
	  --with-sdl2 \
	  --with-wx \
	  --disable-docbook \
	  --enable-cdrom \
	  --enable-pci \
	  --enable-usb \
	  --enable-usb-ohci \
	  --enable-a20-pin \
	  --enable-cpu-level=6 \
	  --enable-x86-64 \
	  --enable-avx \
	  --enable-evex \
	  --enable-vmx=2 \
	  --enable-fpu \
	  --enable-debugger \
	  --enable-debugger-gui \
	  --enable-disasm \
	  --enable-idle-hack \
	  --enable-all-optimizations \
	  --enable-repeat-speedups \
	  --enable-plugins \
	  --enable-compressed-hd \
	  --enable-clgd54xx \
	  --enable-voodoo \
	  --enable-sb16 \
	  --enable-es1370 \
	  --enable-ne2000 \
	  --enable-pnic \
	  --enable-e1000 \
	  --enable-busmouse \
	  --enable-svm \
	  --enable-protection-keys \
	  --enable-usb-ehci \
	  --enable-usb-xhci \
	  --enable-smp \
	  $(conf_arch_args)

build: build-arch

build-arch: config.status
	dh_testdir

	$(MAKE)

ifeq ($(DEB_HOST_ARCH_CPU),i386)
	$(CC) misc/sb16/sb16ctrl.c -o misc/sb16/sb16ctrl
endif

build-indep: config.status
	dh_testdir

ifeq (,$(findstring $(DEB_HOST_ARCH_CPU),i386 amd64))
	$(error "build-indep will only succeed on any-i386 or any-amd64")
endif

	# bochsbios
	$(MAKE) -C bios

	# bochs-doc
	$(MAKE) -C doc/docbook USE_JADE=1

install: build
	dh_testdir
	dh_testroot
	dh_prep
	dh_installdirs -a

	# Hack to keep install target happy
	touch bios/VGABIOS-fake bios/bios.bin-fake

	$(MAKE) install DESTDIR=$(tmpdir)

	# misc cleanup
	rm -f \
	  $(tmpdir)/usr/share/bochs/install-x11-fonts \
	  $(tmpdir)/usr/share/bochs/test-x11-fonts \
	  $(tmpdir)/usr/share/man/man1/bochs-dlx.1.gz \
	  $(tmpdir)/usr/share/doc/bochs/COPYING.gz \
	  $(tmpdir)/usr/bin/bochs-docs

	# bochs
	cat $(tmpdir)/usr/share/doc/bochs/bochsrc-sample.txt \
	| sed \
	  -e "s/#kernel#/$(kernel)/g" \
	  -e "s/#eth#/$(eth)/g" \
	  -e "s/#com#/$(com)/g" \
	  -e "s/#cdrom#/$(cdrom)/g" \
	| gzip -c9n \
	> $(pkg_bochs)/usr/share/doc/bochs/examples/bochsrc.gz
	rm -f $(tmpdir)/usr/share/doc/bochs/bochsrc-sample.txt

	mv $(tmpdir)/usr/bin/bochs \
	   $(tmpdir)/usr/bin/bochs-bin
	install -m755 debian/launcher \
		      $(tmpdir)/usr/bin/bochs

	cp -a debian/etc debian/tmp/
	chmod 755 $(tmpdir)/etc/bochs-init/init.sh

ifeq ($(DEB_HOST_ARCH_CPU),i386)
	cp misc/sb16/sb16ctrl \
	   $(tmpdir)/usr/bin/
endif

install-indep: build-indep
	dh_testdir
	dh_testroot
	dh_prep
	dh_installdirs -i

	# bochsbios
	mkdir -p \
	   $(tmpdir)/usr/share/bochs/
	cp bios/BIOS* \
	   $(tmpdir)/usr/share/bochs/

	# bochs-doc
	$(MAKE) -C doc/docbook install DESTDIR=$(tmpdir)

	cp /usr/share/sgml/docbook/stylesheet/dsssl/modular/images/note.gif \
	   $(tmpdir)/usr/share/doc/bochs/images/

binary-indep: install-indep
	dh_testdir -i
	dh_testroot -i
	dh_install -i --sourcedir=$(tmpdir)

	dh_installdocs -i
	dh_installexamples -i
	dh_installchangelogs -i CHANGES
	dh_link -i
	dh_compress -i
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

binary-arch: install
	dh_testdir -a
	dh_testroot -a
	dh_install -a --sourcedir=$(tmpdir)
	dh_installdocs -a
	dh_installexamples -a
	dh_installmenu -a
	dh_installman -a
	dh_installchangelogs -a CHANGES
	dh_link -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: binary-indep binary-arch

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