#!/usr/bin/make -f

include /usr/share/dpkg/architecture.mk
include /usr/share/dpkg/pkg-info.mk

export DEB_BUILD_MAINT_OPTIONS = hardening=+all

LIBDIR = /usr/lib/$(DEB_HOST_MULTIARCH)
# libminijailpreload.so is LD_PRELOADed by minijail0 rather than linked
# against, and upstream gives it no SONAME, so it must stay out of the
# public library directory or lintian errors. Upstream's LIBDIR only sets
# the preload path compiled into minijail0, nothing else.
PRELOADDIR = $(LIBDIR)/minijail
BUILDDIR = $(CURDIR)/build

# Debian ships Rust libraries as source for the consuming package to compile,
# so the two crates in rust/ are file installs: nothing there is built here.
# Upstream has never published either crate to crates.io - this tree is their
# only source - so their versions come from each crate's own Cargo.toml.
REGISTRY = usr/share/cargo/registry
SYS_VER = 0.0.14
MJ_VER = 0.2.3
SYS_DIR = debian/tmp/$(REGISTRY)/minijail-sys-$(SYS_VER)
MJ_DIR = debian/tmp/$(REGISTRY)/minijail-$(MJ_VER)

# The checksum file is what makes cargo treat a directory as a registry entry.
# There is no crates.io tarball to checksum against, so it carries the same
# placeholder debcargo uses for non-registry sources.
define checksum
	printf '%s' '{"package":"Could not get crate checksum","files":{}}' \
		> $(1)/.cargo-checksum.json

endef

%:
	dh $@

override_dh_auto_build:
	dh_auto_build -- OUT=$(BUILDDIR)/ LIBDIR=$(PRELOADDIR)
	sed -e 's|@BSLOT@|$(DEB_VERSION_UPSTREAM)|' \
	    -e 's|@INCLUDE_DIR@|/usr/include/minijail|' \
	    libminijail.pc.in > $(BUILDDIR)/libminijail.pc

override_dh_auto_install:
	install -D -m0755 $(BUILDDIR)/minijail0 \
		debian/tmp/usr/bin/minijail0
	install -D -m0644 $(BUILDDIR)/libminijail.so \
		debian/tmp$(LIBDIR)/libminijail.so.1
	ln -sf libminijail.so.1 debian/tmp$(LIBDIR)/libminijail.so
	install -D -m0644 $(BUILDDIR)/libminijailpreload.so \
		debian/tmp$(PRELOADDIR)/libminijailpreload.so
	install -D -m0644 libminijail.h \
		debian/tmp/usr/include/minijail/libminijail.h
	install -D -m0644 scoped_minijail.h \
		debian/tmp/usr/include/minijail/scoped_minijail.h
	install -D -m0644 $(BUILDDIR)/libminijail.pc \
		debian/tmp$(LIBDIR)/pkgconfig/libminijail.pc
	mkdir -p $(SYS_DIR)
	cd rust/minijail-sys && cp -a Cargo.toml build.rs lib.rs $(CURDIR)/$(SYS_DIR)/
	$(call checksum,$(SYS_DIR))
	mkdir -p $(MJ_DIR)
	cd rust/minijail && cp -a Cargo.toml src tests $(CURDIR)/$(MJ_DIR)/
	# In the upstream tree the minijail crate finds minijail-sys by relative
	# path. A packaged crate has no sibling directory, so it asks for the
	# version instead, which resolves to librust-minijail-sys-dev.
	sed -i 's|^minijail-sys = {.*|minijail-sys = "$(SYS_VER)"|' $(MJ_DIR)/Cargo.toml
	$(call checksum,$(MJ_DIR))

override_dh_auto_clean:
	rm -rf $(BUILDDIR)

# The upstream test suite enters namespaces and installs seccomp filters,
# which does not work in a build chroot.
override_dh_auto_test:
