#!/usr/bin/make -f

DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
DEB_HOST_ARCH_BITS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_BITS)

# Memory Management
# Force 1 job for both 32-bit and amd64 to ensure heavy Cycles linking doesn't OOM.
ifeq ($(DEB_HOST_ARCH),amd64)
    PARALLEL_JOBS = 1
else ifeq ($(DEB_HOST_ARCH_BITS),32)
    PARALLEL_JOBS = 1
else
    PARALLEL_JOBS = 2
endif

DEB_BUILD_OPTIONS := $(strip $(filter-out parallel=%, $(DEB_BUILD_OPTIONS)) parallel=$(PARALLEL_JOBS))
export DEB_BUILD_OPTIONS

SRC_VERSION := $(shell dpkg-parsechangelog | sed -n 's/^Version: \([0-9]:\)\?\(.*\)-.*/\2/p')
BF_VERSION  := $(shell echo $(SRC_VERSION) | sed 's/^\([0-9]\+\.[0-9]\+\).*/\1/')
PKG_SUFFIX   = git
INSTDIR      = $(CURDIR)/debian/tmp
PY3VERS      = $(shell py3versions -dv)

export DEB_CPPFLAGS_MAINT_APPEND = -DNDEBUG

# Feature Logic
ifneq (,$(filter $(DEB_HOST_ARCH), amd64 arm64 ppc64el))
    CUDA = ON
else
    CUDA = OFF
endif

ifeq ($(DEB_HOST_ARCH),amd64)
    AMD64_BUILD = ON
else
    AMD64_BUILD = OFF
endif

override_dh_auto_configure:
	# --- FIX FOR armv7l (DNA offset errors) ---
	# Disables static assertions that fail on 32-bit ARM alignment
	find . -name "BLI_assert.h" -exec sed -i 's/define BLI_STATIC_ASSERT(a, msg) static_assert(a, msg)/define BLI_STATIC_ASSERT(a, msg)/g' {} +

	# --- FIX FOR amd64/aarch64 (NanoVDB FloatGridType error at 48%) ---
	# Replaces the incompatible FloatGridType alias with the correct GridType template
	if [ -f intern/cycles/util/nanovdb.cpp ]; then \
		sed -i 's/FloatGridType/GridType/g' intern/cycles/util/nanovdb.cpp; \
	fi

	dh_auto_configure -- \
		-DCMAKE_SKIP_RPATH=ON \
		-DPYTHON_VERSION=$(PY3VERS) \
		-DWITH_ALEMBIC=ON \
		-DUSD_ROOT_DIR=/usr \
		-DWITH_CODEC_FFMPEG=ON \
		-DWITH_CODEC_SNDFILE=ON \
		-DWITH_CYCLES=ON \
		-DWITH_CYCLES_EMBREE=$(AMD64_BUILD) \
		-DWITH_CYCLES_DEVICE_CUDA=$(CUDA) \
		-DWITH_CYCLES_DEVICE_OPTIX=$(CUDA) \
		-DWITH_CYCLES_DEVICE_HIP=$(AMD64_BUILD) \
		-DWITH_DOC_MANPAGE=ON \
		-DWITH_FFTW3=ON \
		-DWITH_IMAGE_OPENJPEG=ON \
		-DWITH_INPUT_NDOF=ON \
		-DWITH_INSTALL_PORTABLE=OFF \
		-DWITH_JACK=ON \
		-DWITH_LIBS_PRECOMPILED=OFF \
		-DWITH_MOD_OCEANSIM=ON \
		-DWITH_OPENCOLORIO=ON \
		-DWITH_OPENIMAGEDENOISE=$(AMD64_BUILD) \
		-DWITH_OPENSUBDIV=ON \
		-DWITH_OPENVDB=$(AMD64_BUILD) \
		-DWITH_PYTHON_INSTALL=OFF \
		-DWITH_SYSTEM_EIGEN3=ON \
		-DWITH_DNA_CHECK=OFF

override_dh_auto_build:
	dh_auto_build -- -j$(PARALLEL_JOBS) VERBOSE=1

override_dh_install:
	if [ -e $(CURDIR)/cuda ] ; then \
		mkdir -p $(INSTDIR)/usr/share/blender/$(BF_VERSION)/scripts/addons_core/cycles/lib && \
		cp -p cuda/* $(INSTDIR)/usr/share/blender/$(BF_VERSION)/scripts/addons_core/cycles/lib ; \
	fi
	mv $(INSTDIR)/usr/bin/blender $(INSTDIR)/usr/bin/blender-$(PKG_SUFFIX)
	mv $(INSTDIR)/usr/share/man/man1/blender.1 $(INSTDIR)/usr/share/man/man1/blender-$(PKG_SUFFIX).1
	sed -i 's|blender-thumbnailer|blender-$(PKG_SUFFIX)-thumbnailer|g' \
		$(CURDIR)/blender.thumbnailer
	mv $(CURDIR)/blender.thumbnailer $(CURDIR)/blender-$(PKG_SUFFIX).thumbnailer
	mv $(INSTDIR)/usr/bin/blender-thumbnailer \
		$(INSTDIR)/usr/bin/blender-$(PKG_SUFFIX)-thumbnailer
	sed -i 's|^\(Name=Blender\)|\1 git ($(BF_VERSION))|' \
		$(INSTDIR)/usr/share/applications/blender-$(PKG_SUFFIX).desktop
	sed -i 's|^\(Exec=blender\)|\1-$(PKG_SUFFIX)|' \
		$(INSTDIR)/usr/share/applications/blender-$(PKG_SUFFIX).desktop
	sed -i 's|^\(Icon=blender\)|\1-$(PKG_SUFFIX)|' \
		$(INSTDIR)/usr/share/applications/blender-$(PKG_SUFFIX).desktop
	mv $(INSTDIR)/usr/share/doc/blender $(INSTDIR)/usr/share/doc/blender-$(PKG_SUFFIX)
	dh_install -pblender-$(PKG_SUFFIX)-data -Xlibextern_draco.so
	dh_install --remaining-packages

override_dh_python3:
	# No-op

override_dh_auto_test:
	# No-op

override_dh_dwz:
	dh_dwz -- --max-die-limit none || true

%:
	dh $@ --buildsystem=cmake --with python3