#!/usr/bin/make -f
#
# Copyright (C) 2009 Canonical Ltd
# Authors: Alberto Milone
#
# This file on the Mandriva nvidia packages, on Ubuntu's previous
# nvidia packaging scripts and on Ubuntu's fglrx scripts.

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

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

VIDEODEP = $(shell cat /usr/share/xserver-xorg/videodrvdep 2>/dev/null)
INPUTDEP = $(shell cat /usr/share/xserver-xorg/xinputdep 2>/dev/null)

VIDEOABI = $(shell cat /usr/share/xserver-xorg/videodrvdep | sed -r s/.*xorg-video-abi-\([0-9]*\).*/\\1/ 2>/dev/null)
INPUTABI = $(shell cat /usr/share/xserver-xorg/xinputdep | sed -r s/.*xorg-input-abi-\([0-9]*\).*/\\1/ 2>/dev/null)
VIDDRIVER_PROVIDES = xserver-xorg-video-$(VIDEOABI), xorg-driver-video
INPDRIVER_PROVIDES = xserver-xorg-input-$(INPUTABI), xorg-driver-input


# Package names
PKG_driver           := nvidia-tegra
PKG_driver_dev       := $(PKG_driver)-dev
PKG_version          := $(shell dpkg-parsechangelog | awk -F' ' '/^Version:/ {print $$2}' | awk -F- '{print $$1}')
PKG_source           := $(shell dpkg-parsechangelog | sed -n 's/^Source: //p')
PKG_module           := $(PKG_driver)

# Priority of the alternative
alt_priority         := 9000

# Installer details
dirname_x86          := NVIDIA-Linux-x86-$(PKG_version)
dirname_x86_64       := NVIDIA-Linux-x86_64-$(PKG_version)-no-compat32
filename_x86         := $(dirname_x86).run
filename_x86_64      := $(dirname_x86_64).run
url_x86              := ftp://download.nvidia.com/XFree86/Linux-x86/$(PKG_version)/$(filename_x86)
url_x86_64           := ftp://download.nvidia.com/XFree86/Linux-x86_64/$(PKG_version)/$(filename_x86_64)
bins_dirname         := tegra_bins
xblobs_dirname       := tegra-drivers-abi$(VIDEOABI)
bins_filename        := $(bins_dirname).tar.gz
xblobs_filename      := $(xblobs_dirname).tbz2


ifeq ($(DEB_BUILD_ARCH),amd64)
filename             := $(filename_x86_64)
dirname              := $(dirname_x86_64)
url                  := $(url_x86_64)
else
filename             := $(filename_x86)
dirname              := $(dirname_x86)
url                  := $(url_x86)
endif

bindir               := /usr/bin
datadir              := /usr/share
PKG_datadir          := $(datadir)/$(PKG_driver)
libdir               := /usr/lib
libdir32             := /usr/lib32
includedir           := /usr/include
sysconfdir           := /etc
PKG_libdir           := $(libdir)/$(PKG_driver)
PKG_libdir32         := $(libdir32)/$(PKG_driver)
xorg_libdir          := $(libdir)/xorg
xorg_extra_modules   := $(xorg_libdir)/extra-modules
xorg_extensionsdir   := $(xorg_libdir)/modules/extensions
PKG_driversdir       := $(libdir)/$(PKG_driver)/xorg
PKG_extensionsdir    := $(PKG_driversdir)
PKG_bindir           := $(PKG_libdir)/bin
PKG_deskdir          := $(PKG_datadir)
PKG_configdir        := $(PKG_libdir)
ld_so_conf_dir       := $(PKG_configdir)
ld_so_conf_file      := ld.so.conf
alt_ld_so_conf_file  := alt_ld.so.conf
ld_so_conf_path      := $(ld_so_conf_dir)/$(ld_so_conf_file)
alt_ld_so_conf_path  := $(ld_so_conf_dir)/$(alt_ld_so_conf_file)

mandir               := /usr/share/man/man1
PKG_bugdir           := /usr/share/bug/$(PKG_driver)
autostartdir         := /etc/xdg/autostart
PKG_autostartdir     := $(PKG_configdir)
autostartfile        := nvidia-autostart.desktop
desktopfile          := ubuntu-nvidia-settings.desktop
PKG_vdpaudir         := $(PKG_libdir)/vdpau
PKG_tlsdir           := $(PKG_libdir)/tls
PKG_vdpaudir32       := $(PKG_libdir32)/vdpau
PKG_tlsdir32         := $(PKG_libdir32)/tls
vdpaudir             := $(libdir)/vdpau
tlsdir               := $(libdir)/tls
vdpaudir32           := $(libdir32)/vdpau
tlsdir32             := $(libdir32)/tls
grub_blacklistdir    := /usr/share/grub-gfxpayload-lists/blacklist

# This is a hack to make sure that
# the blacklist file is available
# early in the boot process when
# /usr is on a separate partition.
# See LP: #538071.
PKG_libconfdir := /lib/$(PKG_driver)


# -Xlib32
DEB_DH_SHLIBDEPS_ARGS_$(PKG_driver)="-Xtls -Xconf"
DEB_SHLIBDEPS_INCLUDE_$(PKG_driver) := $(CURDIR)/debian/$(PKG_driver)$(PKG_libdir)/:$(libdir)/
DEB_SHLIBDEPS_INCLUDE_$(PKG_driver_dev) := $(CURDIR)/debian/$(PKG_driver_dev)$(PKG_libdir)/:$(libdir)/

# This makes sure that the xserver ABI is bumped to match the current one when the
# packages are built
.PHONY: serverabi
serverabi:
ifeq ($(VIDEODEP),)
	@echo 'error: xserver-xorg-dev >= 1.7.6.901 needs to be installed'
	@exit 1
else
	echo "xviddriver:Depends=$(VIDEODEP)" >> debian/$(PKG_driver).substvars
	echo "xinpdriver:Depends=$(INPUTDEP)" >> debian/$(PKG_driver).substvars
	# the following is there for compatibility...
	echo "xviddriver:Provides=$(VIDDRIVER_PROVIDES)" >> debian/$(PKG_driver).substvars
	echo "xinpdriver:Provides=$(INPDRIVER_PROVIDES)" >> debian/$(PKG_driver).substvars
	echo "xserver:Depends=$(VIDEODEP), $(INPUTDEP)" >> debian/$(PKG_driver).substvars
endif

.PHONY: regen-from-templates
regen-from-templates:
	#Create important strings
	for i in  $(PKG_driver).README.Debian      \
			 control                           \
			 copyright                         \
			 $(PKG_driver).install             \
			 $(PKG_driver).links               \
			 $(PKG_driver).override            \
			 $(PKG_driver).postinst            \
			 $(PKG_driver).postrm              \
			 $(PKG_driver).prerm               \
			 $(PKG_driver).dirs; do            \
		sed -e "s|#LIBDIR#|$(libdir)|g"         \
			-e "s|#BINSDIRNAME#|$(bins_dirname)|g"     \
			-e "s|#XBLOBSDIRNAME#|$(xblobs_dirname)|g"     \
			-e "s|#BINDIR#|$(bindir)|g"         \
			-e "s|#VERSION#|$(PKG_version)|g"   \
			-e "s|#SYSCONFDIR#|$(sysconfdir)|g" \
			-e "s|#MANDIR#|$(mandir)|g" \
			-e "s|#LDSOCONF#|$(ld_so_conf_path)|g" \
			-e "s|#ALTLDSOCONF#|$(alt_ld_so_conf_path)|g" \
			-e "s|#ALTPRIORITY#|$(alt_priority)|g" \
			-e "s|#AUTOSTARTDIR#|$(autostartdir)|g" \
			-e "s|#AUTOSTARTFILE#|$(autostartfile)|g" \
			-e "s|#DATADIR#|$(datadir)|g" \
			-e "s|#PKGDESKDIR#|$(PKG_deskdir)|g" \
			-e "s|#PKGDATADIR#|$(PKG_datadir)|g" \
			-e "s|#PKGCONFIGDIR#|$(PKG_configdir)|g" \
			-e "s|#PKGBINDIR#|$(PKG_bindir)|g" \
			-e "s|#PKGLIBDIR#|$(PKG_libdir)|g" \
			-e "s|#PKGLIBDIR32#|$(PKG_libdir32)|g" \
			-e "s|#LIBDIR#|$(libdir)|g" \
			-e "s|#PKGDRIVERSDIR#|$(PKG_driversdir)|g" \
			-e "s|#XORGEXTRA#|$(xorg_extra_modules)|g" \
			-e "s|#NVIDIAEXTENSION#|$(PKG_extensionsdir)|g" \
			-e "s|#XORGEXTENSIONSDIR#|$(xorg_extensionsdir)|g" \
			-e "s|#DRIVERNAME#|$(PKG_driver)|g" \
			-e "s|#DRIVERDEVNAME#|$(PKG_driver_dev)|g" \
			-e "s|#DRIVERSRCNAME#|$(PKG_source)|g" \
			-e "s|#MODULENAME#|$(PKG_module)|g" \
			-e "s|#DIRNAME#|$(dirname)|g" \
			-e "s|#INCLUDEDIR#|$(includedir)|g" \
			-e "s|#URL#|$(url)|g" \
			-e "s|#VDPAUDIR#|$(vdpaudir)|g" \
			-e "s|#VDPAUDIR32#|$(vdpaudir32)|g" \
			-e "s|#TLSDIR#|$(tlsdir)|g" \
			-e "s|#PKGVDPAUDIR#|$(PKG_vdpaudir)|g" \
			-e "s|#PKGVDPAUDIR32#|$(PKG_vdpaudir32)|g" \
			-e "s|#PKGTLSDIR#|$(PKG_tlsdir)|g" \
			-e "s|#PKGTLSDIR32#|$(PKG_tlsdir32)|g" \
			-e "s|#PKGLIBCONFDIR#|$(PKG_libconfdir)|g" \
			-e "s|#XORGLIBDIR#|$(xorg_libdir)|g" \
			debian/$$i.in > debian/$$i;      \
	done

# Pre-config
#makebuilddir/$(PKG_driver):: regen-from-templates

configure/$(PKG_driver)::
	rm -rf $(bins_dirname) $(xblobs_dirname)

	# Extract the upstream tarballs
	mkdir $(CURDIR)/$(bins_dirname)
	tar -C $(CURDIR)/$(bins_dirname) -xzvf $(CURDIR)/$(bins_filename)
	mkdir $(CURDIR)/$(xblobs_dirname)
	tar -C $(CURDIR)/$(xblobs_dirname) -xjf $(CURDIR)/$(xblobs_filename)

	# Remove the x blob from $(bins_dirname) as we need the one from
	# $(xblobs_dirname)
	rm -Rf $(CURDIR)/$(bins_dirname)$(xorg_libdir)
	# Disable the stack markings of binaries for security reasons.
	# See (LP: #409456)
	find $(CURDIR)/$(bins_dirname) -name *.so* | xargs -n1 execstack -c || true
	find $(CURDIR)/$(xblobs_dirname) -name *.so* | xargs -n1 execstack -c || true


#binary-install/$(PKG_driver_dev)::

binary-install/$(PKG_driver):: serverabi
	# ld.so.conf
	dh_installdirs -p$(PKG_driver) "$(ld_so_conf_dir)"
	echo "$(PKG_libdir)" >  "$(CURDIR)/debian/$(PKG_driver)$(ld_so_conf_path)"

	rm -rf debian/temp

clean:: regen-from-templates
	rm -rf $(CURDIR)/$(bins_dirname) $(CURDIR)/$(xblobs_dirname)
	rm -fr debian/temp

	# remove any file generated from a template
	for file in *.in; do \
		# strip only the last .in from the name \
		filename=`echo $$file | sed -e "s|.in|$1|"` \
		rm -f $(filename); \
        done

