#!/usr/bin/make -f

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

# disable parallelism inside this makefile (but not submakes)
.NOTPARALLEL:

# Support multiple makes at once
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
NUMJOBS := $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
else
NUMJOBS := 1
# on i386 and amd64, we query the system unless overriden by DEB_BUILD_OPTIONS
ifeq      ($(DEB_HOST_ARCH),i386)
NUMJOBS := $(shell getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1)
else ifeq ($(DEB_HOST_ARCH),amd64)
NUMJOBS := $(shell getconf _NPROCESSORS_ONLN 2>/dev/null || echo 1)
endif
endif

# workaround for bug #701244 - aspectc++ supports __int128 by default
# only when woven on 64bits, which the upstream provided sources don't.
AC_OPTFLAGS = --gnu-int128
export AC_OPTFLAGS

# we seem to have locking issues on kFreeBSD. force single threaded
ifeq ($(DEB_HOST_ARCH_OS),kfreebsd)
NUMJOBS := 1
endif

ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
	CFLAGS := -O0 -g
else
	CFLAGS := -O2 -g
endif

DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
ifneq  (,$(filter $(DEB_BUILD_ARCH),armel armhf))
	CFLAGS := -O1 -g
endif

ifneq (,$(filter $(DEB_BUILD_ARCH),mips mipsel))
	CFLAGS += -fPIC
endif

export CFLAGS

test-builds: build-arch-stamp
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	PATH=$(CURDIR)/AspectC++/bin/linux-release:$(PATH) \
	$(MAKE) -C AspectC++ FRONTEND=Clang LLVMCONF=/usr/bin/llvm-config-21 SHARED=1 AC="$(CURDIR)/AspectC++/bin/linux-release/ac++" REGRESSIONTEST=1 examples test
	PATH=$(CURDIR)/AspectC++/bin/linux-release:$(PATH) \
	$(MAKE) -C Ag++/ SHARED=1 test
endif

build: build-arch build-indep

build-indep:

build-arch: build-arch-stamp test-builds
build-arch-stamp:
	dh_testdir
	cp -v AspectC++/config/clang-21.1.6.mk AspectC++/config/clang-$(shell llvm-config-21 --version).mk
	$(MAKE) -C AspectC++/ SHARED=1 -j$(NUMJOBS) all FRONTEND=Clang LLVMCONF=/usr/bin/llvm-config-21
	$(MAKE) -C Ag++/      SHARED=1 -j$(NUMJOBS) all
	# build manpages:
	docbook-to-man debian/ac++.1.sgml > ac++.1
	docbook-to-man debian/ag++.1.sgml > ag++.1
	# mark timestamp
	touch $@

clean:
	dh_testdir
	dh_testroot
	dh_clean build-*stamp binary-*stamp
	cp -v AspectC++/config/clang-21.1.6.mk AspectC++/config/clang-$(shell llvm-config-21 --version).mk
	# cleaning up source directories:
	$(MAKE) -s -C AspectC++ cleanall FRONTEND=Clang LLVMCONF=/usr/bin/llvm-config-21
	$(MAKE) -s -C Ag++ clean
	# remove leftovers from Upstream Makefiles
	rm -rf AspectC++/tests/RepoVersion/repo.use
	rm -rf Ag++/DepFiles Ag++/ObjFiles Ag++/bin Ag++/tests/test_11.config
	rm -rf AspectC++/DepFiles AspectC++/ObjFiles AspectC++/bin
	rm -rf AspectC++/tests/*/feature.out
	rm -rf AspectC++/tests/RepoVersion/feature.fil
	# remove generated manpages:
	rm -f ac++.1 ag++.1
	# remove autopkgtest cruft
	rm -rf Ag++/tests/src/obj
	rm -rf Ag++/tests/src/test
	rm -fv AspectC++/config/clang-$(shell llvm-config-21 --version).mk
	# standard cleaning:
	dh_clean

# Build architecture-dependent files here.
binary-arch: build-arch
	dh_testdir
	dh_testroot
	dh_prep
	dh_installdirs
	dh_installchangelogs
	dh_installdocs
	dh_install -Xlicence_1_0.txt
	dh_installexamples -p aspectc++ AspectC++/examples/*
	find debian/aspectc++ -name Makefile -exec rm -v {} +
	dh_installman
	dh_link
	dh_strip
	dh_compress
	dh_fixperms
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

binary-indep:

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