#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# GNU copyright 1997 to 1999 by Joey Hess.

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

export PACKAGE=tor
include /usr/share/dpatch/dpatch.make

# These are used for cross-compiling and for saving the configure script
# from having to guess our platform (since we know it already)
#
# See /usr/share/doc/autotools-dev/README.Debian.gz which suggests
# this way of passing --build and --host.  Also see the thread on
# debian-devel './configure in debian/rules' from February/March 2006,
# starting with <43FF212C.5020800@xs4all.nl> by Pjotr Kourzanov.
export DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
export DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
  confflags += --build $(DEB_HOST_GNU_TYPE)
else
  confflags += --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
endif

CFLAGS ?= -Wall -g

LOCALHOST_IP  ?= $(shell getent hosts localhost | awk '{print $$1}')

# Do not optimize the build with "noopt"
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -O0
else
	CFLAGS += -O2
endif

# Do not strip the binary with "nostrip"
#ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
#	INSTALL_PROGRAM += -s
#endif

# Prevent the unit tests from being run with "nocheck"
ifneq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
	RUN_TEST = no
endif
ifneq (,$(findstring notest,$(DEB_BUILD_OPTIONS)))
	RUN_TEST = no
endif

# Support passing of parallel=<n> in build options
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	MAKEFLAGS += -j$(NUMJOBS)
endif

CONF_OPTIONS =
# build against libdmalloc4 - it better be installed
ifneq (,$(findstring with-dmalloc,$(DEB_BUILD_OPTIONS)))
	CONF_OPTIONS += --with-dmalloc
endif
# allow building with --enable-openbsd-malloc
ifneq (,$(findstring enable-openbsd-malloc,$(DEB_BUILD_OPTIONS)))
	CONF_OPTIONS += --enable-openbsd-malloc
endif

configure: patch-stamp
config.status: configure
	@if [ "$(LOCALHOST_IP)" != "127.0.0.1" ]; then echo; echo; echo; echo; echo; echo "######################################################################"; echo "WARNING: This system does not think localhost is 127.0.0.1.  Will ignore result of testsuite.  Please fix your system/chroot."; echo "######################################################################"; echo; echo; echo; echo; echo "Note: 'getent hosts localhost' should return '127.0.0.1 localhost'"; echo; fi
	dh_testdir
	CFLAGS="$(CFLAGS)" ./configure \
		$(confflags) \
		--prefix=/usr \
		--mandir=\$${prefix}/share/man \
		--infodir=\$${prefix}/share/info \
		--localstatedir=/var \
		--sysconfdir=/etc \
		$(CONF_OPTIONS)


build: build-stamp

build-stamp:  config.status
	dh_testdir
	! [ -e debian/micro-revision.i ] || cp debian/micro-revision.i src/or/micro-revision.i

	$(MAKE)
	@echo
	@echo
	# Running unit tests
	@if [ "$(RUN_TEST)" != "no" ]; then \
		if [ "$(LOCALHOST_IP)" != "127.0.0.1" ]; then \
			echo; echo; echo "######################################################################"; echo "WARNING: This system does not think localhost is 127.0.0.1.  Will ignore result of testsuite.  Please fix your system/chroot."; echo "######################################################################"; echo; echo; \
			echo "src/or/test || true"; \
			src/or/test || true; \
		else \
			echo "src/or/test"; \
			src/or/test; \
		fi; \
	else \
		echo -e "\n\nSkipping unittests\n\n"; \
	fi
	@echo

	touch build-stamp

clean:
	dh_testdir
	dh_testroot
	rm -f build-stamp

	[ ! -f Makefile ] || $(MAKE) distclean
	! [ -e debian/micro-revision.i ] || rm -f src/or/micro-revision.i

	dh_clean

install: build
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs

	$(MAKE) install DESTDIR=$(CURDIR)/debian/tor
	# move tor to where it belongs
	mv $(CURDIR)/debian/tor/etc/tor/torrc.sample $(CURDIR)/debian/tor/etc/tor/torrc
	mv $(CURDIR)/debian/tor/usr/bin/tor $(CURDIR)/debian/tor/usr/sbin/tor

	install -m 755 contrib/torify $(CURDIR)/debian/tor/usr/bin
	install -m 644 contrib/tor-tsocks.conf $(CURDIR)/debian/tor/etc/tor

	install -m 644 debian/tor.lintian-override $(CURDIR)/debian/tor/usr/share/lintian/overrides/tor

	rm -f $(CURDIR)/debian/tor/usr/bin/tor-control.py

	# tor-geoip
	mv $(CURDIR)/debian/tor/usr/share/tor/geoip $(CURDIR)/debian/tor-geoipdb/usr/share/tor
	rmdir $(CURDIR)/debian/tor/usr/share/tor || true

	install -d -m 755 $(CURDIR)/debian/tor-geoipdb/usr/share/doc/tor-geoipdb
	ln -s ../tor/changelog.gz $(CURDIR)/debian/tor-geoipdb/usr/share/doc/tor-geoipdb
	ln -s ../tor/changelog.Debian.gz $(CURDIR)/debian/tor-geoipdb/usr/share/doc/tor-geoipdb

	install -m 644 debian/tor-geoipdb.lintian-override $(CURDIR)/debian/tor-geoipdb/usr/share/lintian/overrides/tor-geoipdb

# Must not depend on anything. This is to be called by
# binary-arch/binary-indep
# in another 'make' thread.
binary-common:
	dh_testdir
	dh_testroot
	dh_installchangelogs --package=tor ChangeLog
	dh_installexamples
	dh_installlogrotate
	dh_installinit
	#dh_installman
	dh_link
	dh_strip --dbg-package=tor-dbg
	dh_compress
	dh_fixperms
	dh_installdeb
	dh_shlibdeps
	dh_gencontrol
	dh_md5sums
	dh_builddeb

# Build architecture independant packages using the common target.
binary-indep: install
	$(MAKE) -f debian/rules DH_OPTIONS=-i binary-common

# Build architecture dependant packages using the common target.
binary-arch: install
	$(MAKE) -f debian/rules DH_OPTIONS=-s binary-common
	@if [ "$(LOCALHOST_IP)" != "127.0.0.1" ]; then echo; echo; echo; echo; echo; echo "######################################################################"; echo "WARNING: This system does not think localhost is 127.0.0.1.  Result of testsuite has been ignored.  Please fix your system/chroot."; echo "######################################################################"; echo; echo; echo; echo; echo "Note: 'getent hosts localhost' should return '127.0.0.1 localhost'"; echo; fi

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