#!/usr/bin/make -f

SOVERSION=1
FULLVERSION=1.12.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)

CMAKE_TESTS = OFF
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
# some c++ tests use regex to match FP numbers precisely,
# thus are only reproducible on amd64 ISAs
ifeq ($(DEB_HOST_ARCH_CPU),amd64)
CMAKE_TESTS = ON
endif
endif

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=None \
	-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 ($(CMAKE_TESTS),ON)
	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)))
ifeq ($(CMAKE_TESTS),ON)
	cd $(BUILDDIR) && ctest --output-on-failure
else
# run only python tests on non-amd64 arch
# may be flaky on hurd (issues in numpy?)
ifneq (,$(filter $(DEB_HOST_ARCH_OS),linux))
	# set LD_LIBRARY_PATH to find compiled _core.so and libhighs.so
	LD_LIBRARY_PATH=$(shell realpath $(BUILD_LIBDIR)) dh_auto_test
endif # filter linux
endif # filter amd64
endif # nocheck

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
