#!/usr/bin/make -f
export DH_VERBOSE = 1

# Use DEB_BUILD_OPTIONS's parallel=n option (see Policy 4.9.1)
ifneq (,$(findstring parallel,$(DEB_BUILD_OPTIONS)))
PARALLEL_JOBS := $(shell echo $(DEB_BUILD_OPTIONS) | \
	sed -e 's/.*parallel=\([0-9]\+\).*/\1/')
else
PARALLEL_JOBS := 1
endif

ifeq (amd64,$(DEB_HOST_ARCH_CPU))
BUILD_TYPE += ReleaseX64
ARCH += x64
else
ifeq (i386,$(DEB_HOST_ARCH_CPU))
BUILD_TYPE += ReleaseIA32
ARCH += ia32
else
ifeq (arm,$(DEB_HOST_ARCH_CPU))
ifeq ($(DEB_BUILD_ARCH_CPU),$(DEB_HOST_ARCH_CPU))
BUILD_TYPE += ReleaseARM
else
BUILD_TYPE += ReleaseXARM
endif
ARCH += arm
else
$(error unsupported target arch '$(DEB_HOST_ARCH_CPU)')
endif
endif
endif

# Verbose?
ifeq (1,$(DH_VERBOSE))
BUILD_ARGS += V=1
endif

%:
	dh $@

override_dh_auto_clean:
	echo $(DEB_BUILD_OPTIONS)
	rm -fr dart/out dart/Makefile
	find . -name *.tmp -execdir rm -f {} \;
	find . -name *.pyc -execdir rm -f {} \;
	find . -name *.mk -execdir rm -f {} \;
	find . -name *.Makefile -execdir rm -f {} \;

override_dh_auto_configure:
	GYP_GENERATORS=make python dart/tools/gyp_dart.py all

override_dh_auto_build:
	cd dart; \
	python tools/build.py -v -m release -a $(ARCH) $(TOOLCHAIN) create_sdk; \
	cd ..

# Building the Dart SDK will already strip all binaries.
override_dh_strip:

# This override allows us to ignore spurious missing library errors when
# cross-compiling.
override_dh_shlibdeps:
	dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info

override_dh_auto_install:
	mkdir -p debian/tmp/out
	cp -R dart/out/$(BUILD_TYPE)/dart-sdk debian/tmp/out
	mv debian/tmp/out/dart-sdk debian/tmp/out/dart
	dh_install
	dh_link
