#!/usr/bin/make -f

SHELL := /bin/bash

# BEGIN ENVIRONMENT SETUP
# https://www.debian.org/doc/debian-policy/ch-source.html
# nocheck: This tag says to not run any build-time test suite provided by the package.
DEB_BUILD_OPTIONS  = nocheck
# To disable stripping
#DEB_BUILD_OPTIONS += nostrip
export DEB_BUILD_OPTIONS

# Setup of $(arch), $(rockruby_libdir) and $(rockruby_archdir)
arch=$(shell gcc -print-multiarch)
ruby_ver=$(shell ruby -r rbconfig -e "print RbConfig::CONFIG['ruby_version']")
ruby_arch_dir=$(shell ruby -r rbconfig -e "print RbConfig::CONFIG['archdir']")
ruby_libdir=$(shell ruby -r rbconfig -e "print RbConfig::CONFIG['rubylibdir']")
rockruby_archdir=$(subst /usr,,$(ruby_arch_dir))
rockruby_libdir=$(subst /usr,,$(ruby_libdir))
# Setup of paths: PATH,PKG_CONFIG_PATH,RUBYLIB,...
master2006_install_dir = /opt/rock/master-20.06
env_setup =  PATH=$(master2006_install_dir)/bin:$$PATH
env_setup += HOME=/home/ 
env_setup += RUBYLIB=$(master2006_install_dir)/$(rockruby_libdir):$(master2006_install_dir)/$(rockruby_archdir):$(master2006_install_dir)/lib/ruby/vendor_ruby/standard:$(master2006_install_dir)/lib/ruby/vendor_ruby/core:$(master2006_install_dir)/lib/ruby/vendor_ruby:$$RUBYLIB
env_setup += PKG_CONFIG_PATH=$(master2006_install_dir)/lib/pkgconfig:$(master2006_install_dir)/lib/$(arch)/pkgconfig:/usr/share/pkgconfig:/usr/lib/$(arch)/pkgconfig:$$PKG_CONFIG_PATH
env_setup += Rock_DIR=$(master2006_install_dir)/share/rock/cmake:$$Rock_DIR
env_setup += LD_LIBRARY_PATH=$(master2006_install_dir)/lib:$(master2006_install_dir)/lib/$(arch):$$LD_LIBRARY_PATH
env_setup += CMAKE_PREFIX_PATH=$(master2006_install_dir):$$CMAKE_PREFIX_PATH
env_setup += OROGEN_PLUGIN_PATH=$(master2006_install_dir)/share/orogen/plugins:$$OROGEN_PLUGIN_PATH
export TYPELIB_CXX_LOADER=castxml
export DEB_CPPFLAGS_APPEND=-std=c++11
export npm_config_cache=/tmp/npm
rock_library_dirs=$(master2006_install_dir)/lib:$(master2006_install_dir)/lib/$(arch):
rock_base_install_dir=/opt/rock
rock_release_install_dir=/opt/rock/master-20.06
rock_install_dir=/opt/rock/master-20.06/rock-master-20.06-gui-osg-plugins-osgdb-bobj

# Check if a python command is available and identify the version
# and identify the setup.py file
python_cmd=$(shell command -v python 2> /dev/null)
ifneq ("$(python_cmd)","")
python_version=$(shell python -c 'import sys; print "{0}.{1}".format(sys.version_info[0],sys.version_info[1])')
# Get dirname a setup.py match
python_setup_dir=$(shell find $(DEB_SRCDIR) -name setup.py | tail -n 1 | xargs dirname)
endif

DEB_VERBOSE_ALL=1
include /usr/share/cdbs/1/rules/debhelper.mk

extra_lib_dir=$(shell pwd)/debian/rock-master-20.06-gui-osg-plugins-osgdb-bobj$(rock_install_dir)/lib
apaka_libdeps_dirs=`find $(rock_release_install_dir)/* -type d -name lib -exec echo -n ":{}" \;`
# This argument list is forwarded to dh_shlibdeps which takes the -l option and a colon separated list of libraries
# (note that this is different from the linker arguments)
DEB_DH_SHLIBDEPS_ARGS_ALL=-l$(extra_lib_dir):$(extra_lib_dir)/$(arch):$(rock_library_dirs):${apaka_libdeps_dirs}

debian_install_prefix=$(DEB_DESTDIR)$(rock_install_dir)
rock_doc_install_dir=$(rock_install_dir)/share
SOURCE_ENVSH=for file in `find $(rock_release_install_dir)/*/env.sh ! -empty -type f -name env.sh`; do source "$$file"; done;

pre-build::
	echo "Running pre-build"
	echo "Ruby stats"
	echo "   ruby version: $(ruby_ver)"
	echo "   ruby libdir: $(rockruby_libdir)"
	echo "   ruby archdir: $(rockruby_archdir)"
	# Source the available packages
	echo "Sourcing release packages' env.sh"

# END ENVIRONMENT SETUP
######################################
# BEGIN OROGEN -- This block needs to be executed before CMAKE


# END OROGEN
######################################
# BEGIN CMAKE
#
# Defining the cmake command and setting the required enviroment variables
# PKG_CONFIG_PATH Resolve Rock package via pkg-config
# Rock_DIR Set to make sure find_package(Rock) does work
# ROCK_CMAKE_MACROS Used in some patches to set the CMAKE_MODULE_PATH, allowing to find Rock.cmake
CMAKE = $(SOURCE_ENVSH) $(env_setup) cmake
DEB_CMAKE_INSTALL_PREFIX = $(rock_install_dir)

# Debian packaging discourages the use of rpath, but
# cdbs actively sets CMAKE_SKIP_RPATH=ON, so reinforcing OFF here
DEB_CMAKE_EXTRA_FLAGS = -DCMAKE_SKIP_RPATH=OFF
# Telling FindGEM.cmake to search for os packages using pkg-config and not for gems
DEB_CMAKE_EXTRA_FLAGS += -DGEM_OS_PKG=TRUE
# Leaving RUBY_EXECUTABLE unset since it maps to a path of the user executing the upload script
DEB_CMAKE_EXTRA_FLAGS += -DCMAKE_EXPORT_COMPILE_COMMANDS="ON" -DCMAKE_BUILD_TYPE="Debug" 
# Disable ROCK Testing -- since running test on the OBS would require proper setting of path, etc. (see. data_processing/type_to_vector)
DEB_CMAKE_EXTRA_FLAGS += -DROCK_TEST_ENABLED=OFF -UROCK_TEST_LOG_DIR
include /usr/share/cdbs/1/class/cmake.mk

# END CMAKE
##########################################
# BEGIN AUTOTOOLS
#


###########################################
# DOCS


# Build docs
# This checks for Doxyfile and runs doxygen with that.
# Otherwise, it tries the "doc" target.
# Since docs are not critical, ignore failures('-' on recipe line start).
# The make call is supposed to be invoked even if -t or -n is selected,
# with the appropriate flags('+' on recipe line start)

common-build-arch common-build-indep:: debian/stamp-rock-doc
debian/stamp-rock-doc:
	-+$(DEB_MAKE_INVOKE) doc
	touch $@

common-install-arch common-install-indep:: common-install-rock-doc install-extensions
common-install-rock-doc::
	mkdir -p $(DEB_DESTDIR)$(rock_doc_install_dir)
	$(if $(wildcard $(DEB_SRCDIR)/doc/html),-cp -r "$(DEB_SRCDIR)/doc/html" "$(DEB_DESTDIR)$(rock_doc_install_dir)",$(if $(wildcard $(DEB_SRCDIR)/doc),-cp -r "$(DEB_SRCDIR)/doc" "$(DEB_DESTDIR)$(rock_doc_install_dir)"))
	$(if $(wildcard $(DEB_BUILDDIR)/doc/html),-cp -r "$(DEB_BUILDDIR)/doc/html" "$(DEB_DESTDIR)$(rock_doc_install_dir)",$(if $(wildcard $(DEB_BUILDDIR)/doc),-cp -r "$(DEB_BUILDDIR)/doc" "$(DEB_DESTDIR)$(rock_doc_install_dir)"))

install-extensions:: install-python
install-python::
ifneq ("$(python_setup_dir)","")
	echo "Installing python extension in $(python_setup_dir)"
	mkdir -p $(DEB_DESTDIR)$(rock_install_dir)/lib/python$(python_version)/site-packages
	cd $(python_setup_dir); $(python_cmd) setup.py build; PYTHONPATH=$(DEB_DESTDIR)$(rock_install_dir)/lib/python$(python_version)/site-packages/ $(python_cmd) setup.py install --prefix=$(DEB_DESTDIR)$(rock_install_dir); cd -
endif

clean::
	rm -f debian/stamp-rock-doc
	rm -rf $(DEB_SRCDIR)/doc/html

# END DOCS
###########################################

define export_variable
	find $(debian_install_prefix) -type f -name '*$2' -exec dirname {} + | grep -v CMakeFiles | uniq | xargs -i printf "$1={}:\$${$1}\nexport $1\n" >> $(debian_install_prefix)/env.sh
	sed -i s#$(debian_install_prefix)#$(rock_install_dir)#g $(debian_install_prefix)/env.sh
	find $(debian_install_prefix) -type f -name '*$2' -exec dirname {} + | grep -v CMakeFiles | uniq | xargs -i printf "$1 {}\n" >> $(debian_install_prefix)/env.yml.append
	sed -i s#$(debian_install_prefix)#$(rock_install_dir)#g $(debian_install_prefix)/env.yml.append
endef

#install/rock-master-20.06-gui-osg-plugins-osgdb-bobj::
#	echo "Running post-install for package rock-master-20.06-gui-osg-plugins-osgdb-bobj"

# see https://github.com/Debian/cdbs/blob/master/1/rules/debhelper.mk.in for
# target
common-binary-fixup-arch::
	echo "Apaka: doing all the custom adaptions, once all patches have been applied"
	echo "Installing env.yml (and env.yml.append) in $(rock_install_dir)"
	$(if $(wildcard $(DEB_SRCDIR)/env.yml),-cp "$(DEB_SRCDIR)/env.yml" "$(DEB_DESTDIR)$(rock_install_dir)")
	$(if $(wildcard $(DEB_SRCDIR)/env.yml.append),-cp "$(DEB_SRCDIR)/env.yml.append" "$(DEB_DESTDIR)$(rock_install_dir)")
	echo "Updating env.sh in $(rock_install_dir)"
	$(if $(wildcard $(DEB_SRCDIR)/env.sh),-cp "$(DEB_SRCDIR)/env.sh" "$(debian_install_prefix)")
	$(if $(wildcard $(debian_install_prefix)/bin/*),-printf "PATH=$(rock_install_dir)/bin:\$${PATH}\nexport PATH\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/bin/*),-printf "PATH $(rock_install_dir)/bin\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/*),-printf "CMAKE_PREFIX_PATH=$(rock_install_dir):\$${CMAKE_PREFIX_PATH}\nexport CMAKE_PREFIX_PATH\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/*),-printf "CMAKE_PREFIX_PATH $(rock_install_dir)\n" >> $(debian_install_prefix)/env.yml.append)
	$(call export_variable,CMAKE_PREFIX_PATH,\.cmake)
	$(call export_variable,PKG_CONFIG_PATH,\.pc)
	$(if $(wildcard $(debian_install_prefix)/lib/ruby/$(ruby_ver)/*),-printf "RUBYLIB=$(rock_install_dir)/lib/ruby/$(ruby_ver):\$${RUBYLIB}\nexport RUBYLIB\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/ruby/$(ruby_ver)/*),-printf "RUBYLIB $(rock_install_dir)/lib/ruby/$(ruby_ver)\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/$(arch)/ruby/$(ruby_ver)/*),-printf "RUBYLIB=$(rock_install_dir)/lib/$(arch)/ruby/$(ruby_ver):\$${RUBYLIB}\nexport RUBYLIB\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/$(arch)/ruby/$(ruby_ver)/*),-printf "RUBYLIB $(rock_install_dir)/lib/$(arch)/ruby/$(ruby_ver)\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/site_ruby/*),-printf "RUBYLIB=$(rock_install_dir)/lib/site_ruby:\$${RUBYLIB}\nexport RUBYLIB\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/site_ruby/*),-printf "RUBYLIB $(rock_install_dir)/lib/site_ruby\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/$(arch)/site_ruby/*),-printf "RUBYLIB=$(rock_install_dir)/lib/$(arch)/site_ruby:\$${RUBYLIB}\nexport RUBYLIB\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/$(arch)/site_ruby/*),-printf "RUBYLIB $(rock_install_dir)/lib/$(arch)/site_ruby\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/ruby/vendor_ruby/*),-printf "RUBYLIB=$(rock_install_dir)/lib/ruby/vendor_ruby:\$${RUBYLIB}\nexport RUBYLIB\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/ruby/vendor_ruby/*),-printf "RUBYLIB $(rock_install_dir)/lib/ruby/vendor_ruby\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/$(arch)/ruby/vendor_ruby/$(ruby_ver)/*),-printf "RUBYLIB=$(rock_install_dir)/lib/$(arch)/ruby/vendor_ruby/$(ruby_ver):\$${RUBYLIB}\nexport RUBYLIB\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/$(arch)/ruby/vendor_ruby/$(ruby_ver)/*),-printf "RUBYLIB $(rock_install_dir)/lib/$(arch)/ruby/vendor_ruby/$(ruby_ver)\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/ruby/vendor_ruby/standard/*),-printf "RUBYLIB=$(rock_install_dir)/lib/ruby/vendor_ruby/standard:\$${RUBYLIB}\nexport RUBYLIB\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/ruby/vendor_ruby/standard/*),-printf "RUBYLIB $(rock_install_dir)/lib/ruby/vendor_ruby/standard\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/ruby/vendor_ruby/core/*),-printf "RUBYLIB=$(rock_install_dir)/lib/ruby/vendor_ruby/core:\$${RUBYLIB}\nexport RUBYLIB\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/ruby/vendor_ruby/core/*),-printf "RUBYLIB $(rock_install_dir)/lib/ruby/vendor_ruby/core\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/ruby/*),-printf "RUBYLIB=$(rock_install_dir)/lib/ruby:\$${RUBYLIB}\nexport RUBYLIB\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/ruby/*),-printf "RUBYLIB $(rock_install_dir)/lib/ruby\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/$(arch)/ruby/*),-printf "RUBYLIB=$(rock_install_dir)/lib/$(arch)/ruby:\$${RUBYLIB}\nexport RUBYLIB\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/$(arch)/ruby/*),-printf "RUBYLIB $(rock_install_dir)/lib/$(arch)/ruby\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/$(arch)/*.so),-printf "LD_LIBRARY_PATH=$(rock_install_dir)/lib/$(arch):\$${LD_LIBRARY_PATH}\nexport LD_LIBRARY_PATH\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/$(arch)/*.so),-printf "LD_LIBRARY_PATH $(rock_install_dir)/lib/$(arch)\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/*.so),-printf "LD_LIBRARY_PATH=$(rock_install_dir)/lib:\$${LD_LIBRARY_PATH}\nexport LD_LIBRARY_PATH\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/*.so),-printf "LD_LIBRARY_PATH $(rock_install_dir)/lib\n" >> $(debian_install_prefix)/env.yml.append)
	$(if $(wildcard $(debian_install_prefix)/lib/python$(python_version)/site-packages/*),-printf "PYTHONPATH=$(rock_install_dir)/lib/python$(python_version)/site-packages:\$${PYTHONPATH}\nexport PYTHONPATH\n" >> $(debian_install_prefix)/env.sh)
	$(if $(wildcard $(debian_install_prefix)/lib/python$(python_version)/site-packages/*),-printf "PYTHONPATH $(rock_install_dir)/lib/python$(python_version)/site-packages\n" >> $(debian_install_prefix)/env.yml.append)
