#!/usr/bin/make -f

SOVERSION=1
FULLVERSION=1.11.0

export DEB_BUILD_MAINT_OPTIONS = hardening=+all

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

# these files are to be moved out of python3-highspy package after built
TARGET_PREFIX = debian/tmp/usr
TARGET_LIBDIR = $(TARGET_PREFIX)/lib/$(DEB_HOST_MULTIARCH)
SYSTEM_LIBDIR = usr/lib/$(DEB_HOST_MULTIARCH)

# we need a hardcoded path to find in dh_auto_test
BUILDDIR = /tmp/highs-build
BUILD_LIBDIR = $(BUILDDIR)/$(TARGET_LIBDIR)

SKBUILD_ARGS = \
	-C skbuild.build-dir=$(BUILDDIR) \
	-C skbuild.ninja.version=">=1.5" \
	-C skbuild.build.verbose=true \
	-C skbuild.install.strip=false \
	-C skbuild.cmake.build-type=RelWithDebInfo \
	-C skbuild.cmake.args=-DCMAKE_C_FLAGS="$(CFLAGS) $(CPPFLAGS)" \
	-C skbuild.cmake.args=-DCMAKE_CXX_FLAGS="$(CXXFLAGS) $(CPPFLAGS)" \
	-C skbuild.cmake.args=-DCMAKE_EXE_LINKER_FLAGS="$(LDFLAGS)" \
	-C skbuild.cmake.args=-DPYTHON_BUILD_SETUP=ON \
	-C skbuild.cmake.args=-DFAST_BUILD=ON \
	-C skbuild.cmake.args=-DBUILD_SHARED_LIBS=ON \
	-C skbuild.cmake.args=-DCMAKE_INSTALL_PREFIX=/usr \
	-C skbuild.cmake.args=-DCMAKE_INSTALL_LIBDIR=$(TARGET_LIBDIR) \
	-C skbuild.cmake.args=-DCMAKE_INSTALL_INCLUDEDIR=$(TARGET_PREFIX)/include

ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	SKBUILD_ARGS += -C skbuild.cmake.args=-DALL_TESTS=ON
endif

# config pybuild and skbuild
export PYBUILD_NAME = highspy
export PYBUILD_SYSTEM = pyproject
export PYBUILD_BUILD_ARGS_$(shell py3versions -d) = $(SKBUILD_ARGS)

PY_DEST_DIR=debian/python3-highspy/usr/lib/$(shell py3versions -d)/dist-packages

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

override_dh_auto_test:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
# the tests use regex to match FP numbers precisely,
# thus are only reproducible on amd64 ISAs
ifeq ($(DEB_BUILD_ARCH_CPU),amd64)
	cd $(BUILDDIR) && ctest --output-on-failure
endif
	# set LD_LIBRARY_PATH to find compiled _core.so and libhighs.so
	LD_LIBRARY_PATH=$(shell realpath $(BUILD_LIBDIR)) dh_auto_test
endif

execute_after_dh_auto_install:
	# move files out of python3-highspy package
	mkdir -p debian/tmp/
	mv $(PY_DEST_DIR)/$(TARGET_PREFIX) $(TARGET_PREFIX)
	mv $(PY_DEST_DIR)/bin $(TARGET_PREFIX)/bin # CMAKE_INSTALL_BINDIR does not work, I don't know why
	rm -rf $(PY_DEST_DIR)/debian
	# remove hardcoded build path
	sed -i 's|#define HIGHS_DIR .*|#define HIGHS_DIR "/usr"|' $(TARGET_PREFIX)/include/highs/HConfig.h
	# generate manpage from help
	LD_LIBRARY_PATH=$(TARGET_LIBDIR) help2man --version-string=$(DEB_VERSION_UPSTREAM) --name="HiGHS -- High performance linear optimization software" -N -o highs.1 $(TARGET_PREFIX)/bin/highs

execute_after_dh_install:
	# replace duplicated .so files (copied when building wheels) with symlinks
	dh_link -p libhighs$(SOVERSION) $(SYSTEM_LIBDIR)/libhighs.so.$(FULLVERSION) $(SYSTEM_LIBDIR)/libhighs.so.$(SOVERSION)
	dh_link -p libhighs-dev $(SYSTEM_LIBDIR)/libhighs.so.$(SOVERSION) $(SYSTEM_LIBDIR)/libhighs.so
