#!/usr/bin/make -f

include /usr/share/dpkg/architecture.mk

export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export DEB_CPPFLAGS_MAINT_APPEND = -DH5_USE_110_API
export CCACHE_DIR := $(CURDIR)/debian/ccache

export CC=gcc-14
export CXX=g++-14

CONFIGURE_ARGS += --prefix=/usr \
	--libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \
	--with-fftw \
	--with-umfpack --enable-build-localization \
	--with-install-help-xml --enable-build-help \
	--with-tcl-library=/usr/lib/$(DEB_HOST_MULTIARCH) \
	--enable-mpi --disable-static-system-lib

ifneq ($(wildcard /usr/lib/$(DEB_HOST_MULTIARCH)/hdf5/serial/libhdf5.so),)
  CONFIGURE_ARGS += --with-hdf5-include=/usr/include/hdf5/serial \
	        --with-hdf5-library=/usr/lib/$(DEB_HOST_MULTIARCH)/hdf5/serial
endif

# requires ocamlopt
ifneq (,$(filter $(DEB_HOST_ARCH),arm64 armel ppc64el mips mipsel s390x sparc))
  CONFIGURE_ARGS += --without-modelica
endif

ifneq (,$(findstring $(DEB_HOST_ARCH),amd64))
    ifeq (,$(filter nodoc,$(DEB_BUILD_OPTIONS)))
        DOC=1
    else
        DOC=0
    endif
else
    DOC=0
endif

%:
	dh $@ --sourcedirectory=scilab --with bash-completion,javahelper

# Do not run libtoolize because it can mess up with Scilab library
override_dh_autoreconf:
	# First, making backups of some files that will get changed during the build.
	for F in $$(find . -name "Makefile.in") scilab/aclocal.m4 scilab/configure scilab/etc/Info.plist.in scilab/modules/core/includes/machine.h.in scilab/modules/core/src/cpp/banner.cpp scilab/modules/windows_tools/src/c/scilab_windows/console.c; do \
	    cp $$F $${F}.save ;\
	done
	cd scilab && autoreconf

override_dh_auto_configure:
	cd scilab && ./configure $(CONFIGURE_ARGS)

override_dh_auto_build:
ifeq ($(DOC), 1)
	cd scilab && make all doc
else
	cd scilab && make all
endif

# doesn't work
override_dh_auto_test:

override_dh_installchangelogs:
	dh_installchangelogs scilab/CHANGES.md

override_dh_auto_install:
	make -C scilab install install-data install-html \
		prefix=$(CURDIR)/debian/tmp/usr \
		bindir=$(CURDIR)/debian/tmp/usr/bin \
		libdir=$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) \
		datadir=$(CURDIR)/debian/tmp/usr/share \
		sharedir=$(CURDIR)/debian/tmp/usr/share \
		docdir=$(CURDIR)/debian/tmp/usr/share/doc

# Remove empty directories but not files (#907607: scilab-cli doesn't start)
	find debian/tmp/usr/share/scilab -type d -empty -delete
# Remove la files
	find debian/tmp/usr/lib/ -name '*.la' -delete
# Remove deps files
	rm -rf `find debian/tmp -type d -name .deps`
# Remove extra license files to make lintian happier
# See debian/copyright for them
	find debian/tmp/usr/share/scilab -type f -name "*license.txt" -delete
# Remove all readme files and the changelog (it is in /usr/share/doc/scilab/)
	find debian/tmp/usr/share/scilab -type f -iname "readme*" -delete
	find debian/tmp/usr/share/scilab -type f -name CHANGES.md -delete
# Remove COPYING file
	rm debian/tmp/usr/share/scilab/COPYING
# Remove Visual project files
	find debian/tmp/usr/share/scilab -name "*.sln" -delete
# Remove a font file which is already shipped in another package
	find debian/tmp/usr/share/scilab -name "*.ttf" -delete
# Remove dll files
	find debian/tmp -name "*.dll" -delete
	find debian/tmp -name "*.dll *" -delete
# Remove strange debug files
	find debian/tmp -name .build-id -type d -exec rm -r {} \;
# Remove git files
	find debian/tmp -name .gitignore -delete

# Remove dead code
	rm -rf debian/tmp/usr/share/scilab/modules/helptools/bin debian/tmp/usr/share/scilab/modules/tclsci/demos/tk/timer debian/tmp/usr/share/scilab/modules/intersci/examples/sedprov debian/tmp/usr/share/scilab/modules/macros

	mkdir -p $(CURDIR)/debian/scilab-cli/usr/share/icons/
	cp -R debian/tmp/usr/share/icons/hicolor/ $(CURDIR)/debian/scilab-cli/usr/share/icons/

# Management of the tests, help and demos
	for dir in debian/tmp/usr/share/scilab/modules/*; do \
		moduleName=`echo $$dir|sed -e "s|.*/\(.*\)|\1|"`; \
		target=$(CURDIR)/debian/scilab-doc/usr/share/scilab/modules/$$moduleName; \
		target_test=$(CURDIR)/debian/scilab-test/usr/share/scilab/modules/$$moduleName; \
		# Move tests in the right package; \
		if test -d $$dir/tests; then \
			mkdir -p $$target_test; \
			mv $$dir/tests $$target_test; \
		fi; \
		# Move the help in the right package; \
		if test -d $$dir/help/en_US; then \
			mkdir -p $$target/help; \
			mv $$dir/help/en_US $$target/help; \
		fi; \
		if test -d $$dir/demos; then \
			mv $$dir/demos $$target; \
		fi; \
		if test -d $$dir/help/fr_FR; then \
			mkdir -p $(CURDIR)/debian/scilab-doc-fr/usr/share/scilab/modules/$$moduleName/help; \
			mv $$dir/help/fr_FR $(CURDIR)/debian/scilab-doc-fr/usr/share/scilab/modules/$$moduleName/help/; \
		fi; \
		if test -d $$dir/help/pt_BR; then \
			mkdir -p $(CURDIR)/debian/scilab-doc-pt-br/usr/share/scilab/modules/$$moduleName/help; \
			mv $$dir/help/pt_BR $(CURDIR)/debian/scilab-doc-pt-br/usr/share/scilab/modules/$$moduleName/help/; \
		fi; \
		if test -d $$dir/help/ja_JP; then \
			mkdir -p $(CURDIR)/debian/scilab-doc-ja/usr/share/scilab/modules/$$moduleName/help; \
			mv $$dir/help/ja_JP $(CURDIR)/debian/scilab-doc-ja/usr/share/scilab/modules/$$moduleName/help/; \
		fi; \
	done
	# Remove empty directories
	find debian/tmp/usr/share/scilab -type d -empty -delete

ifeq ($(DOC), 1)
	mkdir $(CURDIR)/debian/scilab-doc/usr/share/scilab/modules/helptools/jar/
	EN_US_DOC=$(CURDIR)/debian/tmp/usr/share/scilab/modules/helptools/jar/scilab_en_US_help.jar; \
	mv $$EN_US_DOC $(CURDIR)/debian/scilab-doc/usr/share/scilab/modules/helptools/jar/

	mkdir $(CURDIR)/debian/scilab-doc-fr/usr/share/scilab/modules/helptools/jar/
	FR_FR_DOC=$(CURDIR)/debian/tmp/usr/share/scilab/modules/helptools/jar/scilab_fr_FR_help.jar; \
	mv $$FR_FR_DOC $(CURDIR)/debian/scilab-doc-fr/usr/share/scilab/modules/helptools/jar/

	mkdir $(CURDIR)/debian/scilab-doc-pt-br/usr/share/scilab/modules/helptools/jar/
	PT_BR_DOC=$(CURDIR)/debian/tmp/usr/share/scilab/modules/helptools/jar/scilab_pt_BR_help.jar; \
	mv $$PT_BR_DOC $(CURDIR)/debian/scilab-doc-pt-br/usr/share/scilab/modules/helptools/jar/

	mkdir -p $(CURDIR)/debian/scilab-doc-ja/usr/share/scilab/modules/helptools/jar/
	JA_DOC=$(CURDIR)/debian/tmp/usr/share/scilab/modules/helptools/jar/scilab_ja_JP_help.jar; \
	mv $$JA_DOC $(CURDIR)/debian/scilab-doc-ja/usr/share/scilab/modules/helptools/jar/
endif

	mkdir -p $(CURDIR)/debian/scilab-minimal-bin/usr/bin
	mv $(CURDIR)/debian/tmp/usr/bin/scilab-cli-bin $(CURDIR)/debian/scilab-minimal-bin/usr/bin/

# Move binaries
	mkdir -p $(CURDIR)/debian/scilab-full-bin/usr/bin
	mv $(CURDIR)/debian/tmp/usr/bin/scilab-bin $(CURDIR)/debian/scilab-full-bin/usr/bin/
	if test -s $(CURDIR)/debian/tmp/usr/bin/modelicac; then \
		chrpath -d $(CURDIR)/debian/tmp/usr/bin/modelicac $(CURDIR)/debian/tmp/usr/bin/XML2Modelica $(CURDIR)/debian/tmp/usr/bin/modelicat; \
		mv $(CURDIR)/debian/tmp/usr/bin/modelicac $(CURDIR)/debian/tmp/usr/bin/XML2Modelica $(CURDIR)/debian/tmp/usr/bin/modelicat $(CURDIR)/debian/scilab-full-bin/usr/bin/; \
	fi
# Move the javasci2 lib
	mkdir -p $(CURDIR)/debian/scilab-full-bin/usr/share/java/
	mkdir -p $(CURDIR)/debian/scilab-full-bin/usr/lib/jni/
	cp debian/tmp/usr/share/scilab/modules/javasci/jar/org.scilab.modules.javasci.jar $(CURDIR)/debian/scilab-full-bin/usr/share/java/
	mv debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/scilab/libjavasci2.so*  $(CURDIR)/debian/scilab-full-bin/usr/lib/jni/

execute_after_dh_install-arch:
	# Hiding the build path written in /usr/include/scilab/machine.h
	sed -i 's/\(ffile-prefix-map=\).*\(=\.\)/\1<builddir>\2/' debian/scilab-include/usr/include/scilab/machine.h

execute_after_dh_install-indep:
	# Converting encoding to UTF-8 for some files
	for F in usr/share/scilab/contrib/toolbox_skeleton/toolbox_skeleton_redist.iss usr/share/scilab/modules/graphics/tcl/ged/Axes.tcl; do \
	    iconv -f ISO_8859-1 debian/scilab-data/$$F > debian/scilab-data/$$F.temp;\
	    mv debian/scilab-data/$$F.temp debian/scilab-data/$$F;\
	done
	for F in usr/share/scilab/modules/differential_equations/demos/n_pendulum/demo_pendulum_eng.htm usr/share/scilab/modules/differential_equations/demos/n_pendulum/demo_pendulum_fr.htm; do \
	    iconv -f ISO_8859-1 debian/scilab-doc/$$F > debian/scilab-doc/$$F.temp;\
	    mv debian/scilab-doc/$$F.temp debian/scilab-doc/$$F;\
	done
	for F in usr/share/scilab/modules/elementary_functions/tests/unit_tests/asec.tst usr/share/scilab/modules/elementary_functions/tests/unit_tests/asecd.tst usr/share/scilab/modules/elementary_functions/tests/unit_tests/cosh.tst usr/share/scilab/modules/fileio/tests/nonreg_tests/bug_6449_ANSI.txt usr/share/scilab/modules/spreadsheet/tests/nonreg_tests/ticket_684.txt usr/share/scilab/modules/windows_tools/tests/nonreg_tests/text_ANSI.txt usr/share/scilab/modules/xml/tests/nonreg_tests/bug_10645.xml; do \
	    iconv -f ISO_8859-1 debian/scilab-test/$$F > debian/scilab-test/$$F.temp;\
	    mv debian/scilab-test/$$F.temp debian/scilab-test/$$F;\
	done

override_dh_fixperms-indep:
	dh_fixperms
	# Setting this script as executable
	chmod 755 debian/scilab-data/usr/share/scilab/modules/dynamic_link/src/scripts/ltmain.sh

override_dh_clean:
	# Removing .class and .jar files left by the build
	find . -name "*.class" -delete
	find . -name "*.jar" -delete
	# Removing the ccache dir, under debian/
	rm -rf $(CCACHE_DIR)
	# Saving four files that dh_clean will remove, to restore the orig source tree afterwards.
	for F in scilab/modules/atoms/tests/unit_tests/repositories.orig scilab/modules/cacsd/tests/unit_tests/dscr.tst.orig scilab/modules/differential_equations/src/patched_sundials/src/sunlinsol/lapackband/sunlinsol_lapackband.c.orig scilab/modules/differential_equations/src/patched_sundials/src/sunlinsol/lapackdense/sunlinsol_lapackdense.c.orig; do \
	    cp $$F $${F}.save ;\
	done
	dh_clean
	# Restoring files that are modified during the build.
	for F in $$(find . -name "*.save"); do \
	    if [ -e $$F ]; then \
	        mv $$F $${F%.save} ;\
	    fi \
	done
