#!/usr/bin/make -f

# See debhelper(7) (uncomment to enable).
# Output every command that modifies files on the build system.
#export DH_VERBOSE = 1

# Force Clang: PCSX2 officially supports Clang/MSVC only. 
export CC=clang
export CXX=clang++

# See debhelper(7)
export DH_VERBOSE=1

# See FEATURE AREAS in dpkg-buildflags(1).
#export DEB_BUILD_MAINT_OPTIONS = hardening=+all

# Hardening and optimization
export DEB_BUILD_MAINT_OPTIONS = hardening=+all optimize=-lto
export DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
export DEB_HOST_ARCH      ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)

# Logic for different architectures
ifeq ($(DEB_HOST_ARCH), arm64)
    ARCH_CXX_FLAGS = -D_M_ARM64=1 -D__arm64__=1 -fno-ms-extensions -Wno-ignored-attributes
    ARCH_CMAKE_OPTS = -DENGINE_SSE41=OFF -DENGINE_AVX2=OFF
else
    ARCH_CXX_FLAGS = -Wno-ignored-attributes
    ARCH_CMAKE_OPTS = 
endif

# See ENVIRONMENT in dpkg-buildflags(1).
# Package maintainers to append CFLAGS.
#export DEB_CFLAGS_MAINT_APPEND  = -Wall -pedantic
# Package maintainers to append LDFLAGS.
#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed


%:
	dh $@


# dh_make generated override targets.
# This is an example for Cmake (see <https://bugs.debian.org/641051>).
#override_dh_auto_configure:
#	dh_auto_configure -- \
#	-DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)

override_dh_auto_configure:
	# --- FIX 1: Vulkan Header Mismatch ---
	find . -type f \( -name "*.cpp" -o -name "*.h" -o -name "*.inl" \) -exec sed -i \
		-e 's/VkPhysicalDeviceSwapchainMaintenance1FeaturesKHR/VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT/g' \
		-e 's/VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_KHR/VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT/g' \
		{} + || true

	find . -type f \( -name "*.cpp" -o -name "*.h" \) -exec sed -i \
		-e 's/VK_KHR_SURFACE_MAINTENANCE_1_EXTENSION_NAME/VK_EXT_SURFACE_MAINTENANCE_1_EXTENSION_NAME/g' \
		-e 's/VK_KHR_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME/VK_EXT_SWAPCHAIN_MAINTENANCE_1_EXTENSION_NAME/g' \
		{} + || true
	
	sed -i '/vkReleaseSwapchainImagesKHR/d' pcsx2/GS/Renderers/Vulkan/VKEntryPoints.inl || true
	sed -i '/VkReleaseSwapchainImagesInfoKHR/d' pcsx2/GS/Renderers/Vulkan/VKEntryPoints.inl || true

	sed -i 's/VkReleaseSwapchainImagesInfoKHR/VkReleaseSwapchainImagesInfoEXT/g' pcsx2/GS/Renderers/Vulkan/VKSwapChain.cpp || true
	sed -i 's/VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_KHR/VK_STRUCTURE_TYPE_RELEASE_SWAPCHAIN_IMAGES_INFO_EXT/g' pcsx2/GS/Renderers/Vulkan/VKSwapChain.cpp || true
	sed -i 's/vkReleaseSwapchainImagesKHR/vkReleaseSwapchainImagesEXT/g' pcsx2/GS/Renderers/Vulkan/VKSwapChain.cpp || true

	# --- FIX 2: 'always_inline' Fix ---
	sed -i 's/__fi /__fi inline /g' common/BitUtils.h 2>/dev/null || true
	sed -i 's/__fi /__fi inline /g' pcsx2/GS/Renderers/Common/GSDevice.h 2>/dev/null || true

	# --- FIX 3: Qt6 Private Component Errors ---
	sed -i 's/6.10.0/6.8.0/g' cmake/SearchForStuff.cmake
	sed -i 's/CorePrivate//g' cmake/SearchForStuff.cmake
	sed -i 's/GuiPrivate//g' cmake/SearchForStuff.cmake
	sed -i 's/WidgetsPrivate//g' cmake/SearchForStuff.cmake
	sed -i 's/KDDockWidgets-qt6 2.3.0/KDDockWidgets-qt6 2.0.0/g' cmake/SearchForStuff.cmake

	# --- FIX 4: libchdr Fix ---
	sed -i '1s/^/#include <stdio.h>\n#define chd_read_header_file(fp, header) chd_read_header(NULL, header)\n/' pcsx2/CDVD/ChdFileReader.cpp

	# --- FIX 5: KDDockWidgets / GameList Fix ---
	sed -i 's/beginFilterChange();/\/\/ beginFilterChange();/g' pcsx2-qt/GameList/GameListWidget.cpp || true
	sed -i 's/endFilterChange(Direction::Rows);/\/\/ endFilterChange(Direction::Rows);/g' pcsx2-qt/GameList/GameListWidget.cpp || true

	# --- aarch64 ONLY Fixes ---
ifeq ($(DEB_HOST_ARCH), arm64)
	find 3rdparty/ -name "*.h" -exec sed -i 's/#include <intrin.h>/\/\/ ARM/g' {} + || true
	find 3rdparty/ -name "float_common.h" -exec sed -i 's/defined(_M_ARM64)/0 \&\& defined(_M_ARM64)/g' {} + || true
	sed -i 's/-msse4.1//g' pcsx2/CMakeLists.txt || true
	sed -i 's/-mtune=nehalem//g' pcsx2/CMakeLists.txt || true
endif

	dh_auto_configure -- \
		-DCMAKE_BUILD_TYPE=Release \
		-DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH) \
		-DCMAKE_CXX_FLAGS="$(ARCH_CXX_FLAGS)" \
		$(ARCH_CMAKE_OPTS) \
		-DENABLE_PCH=OFF \
		-DUSE_LINKED_FFMPEG=ON \
		-DPACKAGE_MODE=ON \
		-DDISABLE_ADVANCE_SIMD=ON \
		-DENABLE_TESTS=1 \
		-DVK_INCLUDE_DIRS=/usr/include \
		-DUSE_INTERNAL_RYML=ON \
		-DQt6CorePrivate_DIR=/usr/lib/$(DEB_HOST_MULTIARCH)/cmake/Qt6Core

override_dh_auto_build:
	@echo 'blhc: ignore-line-regexp: /usr/(bin|lib)/(ccache/)?c\+\+ (?:-std=\S+ )?-w -dM -E (?:-c )?/usr/share/cmake-[0-9.]+/Modules/CMakeCXXCompilerABI.cpp .*'
	dh_auto_build

override_dh_auto_install:
	dh_auto_install --destdir=debian/tmp

execute_after_dh_auto_install:
	# Pre-packaging Skeleton Management in debian/tmp
	mkdir -p debian/tmp/usr/games
	[ -f debian/tmp/usr/bin/pcsx2-qt ] && mv debian/tmp/usr/bin/pcsx2-qt debian/tmp/usr/games/ || true
	
	mkdir -p debian/tmp/usr/share/pixmaps
	install -m644 pcsx2-qt/resources/icons/AppIcon64.png debian/tmp/usr/share/pixmaps/pcsx2-qt.png
	
	mkdir -p debian/tmp/usr/share/applications
	[ -f debian/pcsx2-qt.desktop ] && install -m644 debian/pcsx2-qt.desktop debian/tmp/usr/share/applications/pcsx2-qt.desktop || true
	
	# Cleanup non-essential files from the skeleton
	find debian/tmp/usr/share/PCSX2/resources/icons/flags/ -name "LICENSE*" -delete || true
	rm -f debian/tmp/usr/share/PCSX2/resources/sounds/achievements/README.txt

override_dh_dwz:
	@echo "Skipping dh_dwz to avoid DWARF 5 / .debug_addr incompatibility"