#!/usr/bin/make -f

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

export DEB_BUILD_MAINT_OPTIONS   := hardening=+bindnow
SHELL := bash

DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)

# Use this variable to define the particular version of OGRE that we're building
OGRE_VERSION=2.1

OGRE_CHANGELOG = Docs/ChangeLog.html

# Directories to install with Multi-arch and versioned OGRE dir names
LIB_MULTIARCH_DIR = /usr/lib/$(DEB_HOST_MULTIARCH)

LIB_MULTIARCH_OGRE_RELATIVE=lib/$(DEB_HOST_MULTIARCH)/OGRE-$(OGRE_VERSION)
LIB_MULTIARCH_PRIVATE_DIR = /usr/$(LIB_MULTIARCH_OGRE_RELATIVE)
HEADERS_MULTIARCH_PRIVATE_DIR = /usr/include/OGRE-$(OGRE_VERSION)

UURL = git://github.com/OGRECave/ogre.git
UURL_BRANCH=v2-1

PKD  = $(abspath $(dir $(MAKEFILE_LIST)))
PKG  = ogre-2.1
DATE = $(shell date +%Y%m%d)
#HASH = $(shell git ls-remote $(UURL) $(UURL_BRANCH) | cut -c 1-6)
LATEST_VER ?= $(shell dpkg-parsechangelog -l debian/changelog | grep ^Version | sed -n 's/.* \([0-9]\+\.[0-9]\+\.[0-9]\+\)\+.*/\1/p')
VER = $(LATEST_VER)+$(DATE)r$(HASH)

EXTRA_CMAKE_FLAGS =
ifeq ($(DEB_HOST_ARCH),arm64)
  EXTRA_CMAKE_FLAGS = -DOGRE_SIMD_NEON:BOOL=FALSE
endif


.PHONY: get-orig-source \
	override_dh_auto_configure \
	override_dh_auto_build-indep \
	override_dh_installchangelogs \
	override_dh_shlibdeps

override_dh_auto_configure:
	# Samples removed (do not meet DFSG), modify CMake files accordingly
	sed -i 's|^add_subdirectory(Samples)|#add_subdirectory(Samples)|' CMakeLists.txt
	#sed -i "/OGRE_.*_PATH/ s|share/OGRE|share/OGRE-$(OGRE_VERSION)|g" CMake/InstallResources.cmake


        # RPATH from http://www.ogre3d.org/tikiwiki/Building+Ogre+With+CMake
	dh_auto_configure -- \
		-DOGRE_LIB_DIRECTORY="$(LIB_MULTIARCH_OGRE_RELATIVE)" \
		-DOGRE_FULL_RPATH:BOOL=FALSE \
		-DOGRE_BUILD_RENDERSYSTEM_GLES2:BOOL=FALSE \
		-DOGRE_BUILD_DOCS:BOOL=TRUE \
		-DOGRE_INSTALL_DOCS:BOOL=TRUE \
		-DOGRE_BUILD_SAMPLES:BOOL=FALSE \
		-DOGRE_INSTALL_SAMPLES:BOOL=FALSE \
		-DOGRE_INSTALL_SAMPLES_SOURCE:BOOL=FALSE $(EXTRA_CMAKE_FLAGS)

override_dh_auto_build-indep:
	dh_auto_build -i --

        # generate doxygen API doc
        #cd obj-$(DEB_HOST_MULTIARCH) && make OgreDoc
	dh_auto_build -i -- OgreDoc

        # API generated again in makedocs.sh, disable and generate only manual
        # and vbo-update
	#sed -i 's|doxygen src/html.cfg|#doxygen src/html.cfg|g' Docs/src/makedocs.sh
	#sed -i '/texi2html/ s|texi2html -Verbose|makeinfo --html --force|g;s|-split=node -top_file=index.html|--split=node|g' Docs/src/makedocs.sh
	#cd Docs && bash ./src/makedocs.sh

override_dh_install-arch:
	# Support multiple OGRE versions at once. Relocate headers
	mv debian/tmp/usr/include/OGRE/ debian/tmp/${HEADERS_MULTIARCH_PRIVATE_DIR}
	sed -i '/^includedir/s/$$/\/OGRE-$(OGRE_VERSION)/' debian/tmp/usr/$(LIB_MULTIARCH_OGRE_RELATIVE)/pkgconfig/*
	# Modify pkgconfig names
	sed -i 's/Name:\ OGRE/Name:\ OGRE-$(OGRE_VERSION)/' debian/tmp/usr/$(LIB_MULTIARCH_OGRE_RELATIVE)/pkgconfig/*
	# Change pkgconfig file names
	for f in $(wildcard  debian/tmp/usr/$(LIB_MULTIARCH_OGRE_RELATIVE)/pkgconfig/*.pc); do \
	   mv $$f `sed 's/OGRE\(.*\)OGRE\(.*\).pc/OGRE\1OGRE-$(OGRE_VERSION)\2.pc/' <<< $$f`; \
	done
	# Remove extra Include in main pkgconfig file and MeshLoadGenerator
	sed -i 's:-I$${includedir}/OGRE::' debian/tmp/usr/$(LIB_MULTIARCH_OGRE_RELATIVE)/pkgconfig/OGRE-${OGRE_VERSION}.pc
	sed -i 's:$${includedir}/OGRE:$${includedir}:' debian/tmp/usr/$(LIB_MULTIARCH_OGRE_RELATIVE)/pkgconfig/OGRE-${OGRE_VERSION}-MeshLodGenerator.pc

	# Change pkgconfig/cmake path to be in the standard location
	mv debian/tmp/usr/$(LIB_MULTIARCH_OGRE_RELATIVE)/pkgconfig/ debian/tmp/$(LIB_MULTIARCH_DIR)/
	mv debian/tmp/usr/$(LIB_MULTIARCH_OGRE_RELATIVE)/OGRE/cmake debian/tmp/$(LIB_MULTIARCH_DIR)/OGRE-${OGRE_VERSION}/
        # Move libraries (.so.2.*) to standard location
	mv debian/tmp/usr/$(LIB_MULTIARCH_OGRE_RELATIVE)/lib*.so.2.* debian/tmp/$(LIB_MULTIARCH_DIR)/
	# Fix symlinks to .so.2.* moved above
	for f in $(wildcard debian/tmp/usr/$(LIB_MULTIARCH_OGRE_RELATIVE)/*.so); do \
	    ln -sfn `readlink $$f | sed s:^:../:` $$f ; \
	done

        # Samples
        #sed -i "/OGRE/ s|/OGRE|/OGRE-$(OGRE_VERSION)|g" debian/tmp/usr/share/OGRE/*.cfg
        #mv debian/tmp/usr/share/OGRE debian/tmp/usr/share/OGRE-$(OGRE_VERSION)

	dh_install -a
	dh_missing --list-missing

override_dh_installchangelogs:
	dh_installchangelogs -- $(OGRE_CHANGELOG)

# workaround in Debian buster for the error:
# man: error while loading shared libraries: libmandb-2.8.5.so: cannot stat shared object: Permission denied 
override_dh_installman:
	true

get-orig-source: $(PKG)_$(VER).orig.tar.xz $(info I: $(PKG)_$(VER))

$(PKG)_$(VER).orig.tar.xz:
	$(if $(wildcard $(PKG)-$(VER)),$(error $(PKG)-$(VER) exist, aborting..))
	@echo "# Downloading ${PKG} repo ..."
	git clone $(UURL) $(PKG)-$(VER) \
	|| $(RM) -r $(PKG)-$(VER)
	cd $(PKG)-$(VER) \
	&& git checkout ${UURL_BRANCH} \
	&& echo "# Setting times..." \
	&& git ls-tree -r --name-only HEAD | while read F ; do touch --no-dereference -d "$$(git log -1 --format="%ai" -- "$$F")" "$$F"; done \
	&& echo "# Cleaning-up..." \
	&& $(RM) -r -v \
	notneededdir/unwantedfile1 \
	notneededdir/unwantedfiles.* \
	&& $(RM) -r .git .git*
	@echo "# Packing..."
	find -L "$(PKG)-$(VER)" -xdev -type f -print | LC_ALL=C sort \
	| XZ_OPT="-0v" tar -caf "$(PKG)_$(VER).orig.tar.xz" -T- --owner=root --group=root --mode=a+rX \
	&& $(RM) -r "$(PKG)-$(VER)"

%:
	dh $@ --buildsystem=cmake
