#!/usr/bin/make -f
# Copyright (C) 2002-2006 Flavio Stanchina
# Licensed under the GNU General Public License, version 2.

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

CFLAGS = -Wall

ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -g
endif
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -O0
else
	CFLAGS += -O2
endif

ifeq (,$(DEB_BUILD_ARCH))
	DEB_BUILD_ARCH := $(shell dpkg-architecture -qDEB_BUILD_ARCH)
endif

VERSION := $(shell dpkg-parsechangelog|egrep '^Version:'|cut -d' ' -f2|cut -d':' -f2)
UPSTREAM_VERSION := $(shell dpkg-parsechangelog|grep "^Version:"|cut -d" " -f2|rev|cut -d- -f2-|rev|cut -d':' -f2)

KSRCDIR  := usr/src/modules/fglrx
DKMSBASE	:= usr/src/fglrx-VERSION
DKMSSRCDIR := usr/src/fglrx-$(UPSTREAM_VERSION)

ifeq ($(DEB_BUILD_ARCH),amd64)
ARCH := arch/x86_64
XDIR := x750_64a
LIB  := lib64
else
ARCH := arch/x86
XDIR := x750
LIB  := lib
endif

# Package names
PKG_driver      := fglrx-driver
PKG_glx         := fglrx-glx
PKG_glx_ia32    := fglrx-glx-ia32
PKG_source		:= fglrx-source
PKG_control     := fglrx-control
PKG_daemon      := fglrx-atieventsd
PKG_dkms		:= fglrx-modules-dkms

ifneq (,$(filter VER=%,$(DEB_BUILD_OPTIONS)))
	NEW_UPSTREAM_VERSION := $(subst VER=,,$(filter VER=%,$(DEB_BUILD_OPTIONS)))
	INSTALLER := ati-driver-installer-$(NEW_UPSTREAM_VERSION)-x86.x86_64.run
	URL_PATH := www2.ati.com/drivers/linux
	CACHEDIR := /tmp
endif

build: debian/man/Makefile
	dh_testdir
	# Build man pages.
	$(MAKE) -C debian/man

debian/man/Makefile: debian/man/configure
	(cd debian/man && \
	chmod +x configure install-sh missing && \
	LICENSE_FILE=/usr/share/doc/$(PKG_driver)/copyright \
	./configure --prefix=/usr --mandir=/usr/share/man --with-xserver=Xorg)

debian/man/configure:
	(cd debian/man && \
	chmod +x autogen.sh && \
	./autogen.sh --copy)

clean:
	dh_testdir
	dh_clean
	rm -rf extra_src
	# Clean manpages.
	[ ! -f debian/man/Makefile ] || $(MAKE) -C debian/man maintainer-clean

distclean: clean

binary: binary-arch binary-indep

binary-arch: build
	dh_testdir
	dh_testroot
	dh_prep
	dh_installdirs
	dh_install
	dh_install --ignore=debian/$(PKG_driver).install -p$(PKG_driver)  "$(ARCH)/usr/X11R6/bin/fgl*" "usr/bin"
	dh_install --ignore=debian/$(PKG_driver).install -p$(PKG_driver)  "$(ARCH)/usr/X11R6/bin/ati*" "usr/bin"
	dh_install --ignore=debian/$(PKG_daemon).install -p$(PKG_daemon)  "$(ARCH)/usr/sbin/ati*" "usr/sbin"
	dh_install --ignore=debian/$(PKG_glx).install -p$(PKG_glx)     "$(ARCH)/usr/X11R6/$(LIB)/libGL*" "usr/lib"
ifeq ($(DEB_BUILD_ARCH),amd64)
	dh_install --ignore=debian/$(PKG_driver).install -p$(PKG_driver)	"$(ARCH)/usr/lib64/*" "usr/lib"
else
	dh_install --ignore=debian/$(PKG_driver).install -p$(PKG_driver)  "$(ARCH)/usr/lib/*" "usr/lib"
endif
	dh_install --ignore=debian/$(PKG_driver).install -p$(PKG_driver)  "$(ARCH)/usr/X11R6/$(LIB)/libfglrx*" "usr/lib"
	dh_install --ignore=debian/$(PKG_driver).install -p$(PKG_driver)  "$(ARCH)/usr/X11R6/$(LIB)/libati*" "usr/lib"
	dh_install --ignore=debian/$(PKG_driver).install -p$(PKG_driver)  "$(ARCH)/usr/X11R6/$(LIB)/modules/dri/*" "usr/lib/dri"
	dh_install --ignore=debian/$(PKG_driver).install -p$(PKG_driver)	"$(ARCH)/usr/X11R6/$(LIB)/lib*XvB*" "usr/lib"
	dh_install --ignore=debian/$(PKG_driver).install -p$(PKG_driver)  "$(XDIR)/usr/X11R6/$(LIB)/modules/*" "usr/lib/xorg/modules"
	dh_install --ignore=debian/$(PKG_source).install -p$(PKG_source)  "$(ARCH)/lib/modules/fglrx/build_mod/lib*" "$(KSRCDIR)"
	dh_install --ignore=debian/$(PKG_dkms).install -p$(PKG_dkms)	"$(ARCH)/lib/modules/fglrx/build_mod/lib*" "$(DKMSBASE)"
	dh_install --ignore=debian/$(PKG_control).install -p$(PKG_control) "$(ARCH)/usr/X11R6/bin/amdcccle" "usr/bin"
ifeq ($(DEB_BUILD_ARCH),amd64)
    # Replace library paths -- careful, these are binary files!
    # The new string must have same length as the old one..
	rpl -v -e '/usr/X11R6/lib64/modules/dri\0' \
	          '/usr/lib/dri\0!!!!!!!!!!!!!!!!' \
	          debian/$(PKG_glx)/usr/lib/libGL.so.1.2
	rpl -v -e '/usr/X11R6/lib/modules/dri\0' \
	          '/usr/lib32/dri\0!!!!!!!!!!!!' \
	          debian/$(PKG_glx_ia32)/usr/lib32/libGL.so.1.2
else
	rpl -v -e '/usr/X11R6/lib/modules/dri\0' \
	          '/usr/lib/dri\0!!!!!!!!!!!!!!' \
	          debian/$(PKG_glx)/usr/lib/libGL.so.1.2
endif
	# Generate dkms.conf.
	cat debian/dkms/dkms.conf.template|sed "s/_VERSION_/$(UPSTREAM_VERSION)/g" \
		> debian/$(PKG_dkms)/$(DKMSBASE)/dkms.conf
	# Rename the DKMSBASE to DKMSSRCDIR and fix permissions.
	mv debian/$(PKG_dkms)/$(DKMSBASE) debian/$(PKG_dkms)/$(DKMSSRCDIR)
	chmod -x debian/$(PKG_dkms)/$(DKMSSRCDIR)/*
	chmod 0755 debian/$(PKG_dkms)/$(DKMSSRCDIR)/make.sh
	# Create symlinks to shared libs; fixes a lintian error.
	/sbin/ldconfig -n debian/$(PKG_glx)/usr/lib
	/sbin/ldconfig -n debian/$(PKG_glx_ia32)/usr/lib32
	/sbin/ldconfig -n debian/$(PKG_driver)/usr/lib
	chmod -x debian/$(PKG_driver)/etc/ati/*
	chmod +x debian/$(PKG_daemon)/etc/ati/authatieventsd.sh
	chmod +x debian/$(PKG_driver)/etc/acpi/*.sh
	chmod +x debian/$(PKG_source)/$(KSRCDIR)/debian/rules
	chmod +x debian/$(PKG_source)/$(KSRCDIR)/make.sh
	chmod -x debian/$(PKG_control)/usr/share/icons/*
	# Remove this ugly RPATH..
	chrpath -d -k debian/$(PKG_control)/usr/bin/amdcccle
	# Create the fglrx source tarball.
	(cd debian/$(PKG_source)/usr/src \
	 && chown -R root:src modules \
	 && tar -c modules | bzip2 > fglrx.tar.bz2 \
	 && rm -rf modules)
	dh_installinit
	dh_installchangelogs
	dh_installdocs
	dh_installman
	dh_installmenu
	dh_installdebconf
	dh_link
	dh_lintian
	dh_strip
	dh_compress
	dh_fixperms
ifeq ($(DEB_BUILD_ARCH),amd64)
	dh_makeshlibs -XlibGL
else
	dh_makeshlibs -XlibGL -Xfglrx-glx-ia32
endif
	dh_installdeb
	dh_shlibdeps
	dh_md5sums
	dh_gencontrol -p$(PKG_driver)
	dh_gencontrol -p$(PKG_control)
	dh_gencontrol -p$(PKG_glx)
	dh_gencontrol -p$(PKG_source)
	dh_gencontrol -p$(PKG_daemon)
	dh_gencontrol -p$(PKG_dkms)
ifeq ($(DEB_BUILD_ARCH),amd64)
	dh_gencontrol -p$(PKG_glx_ia32)
	dh_builddeb -p$(PKG_glx_ia32)
endif
	dh_builddeb -p$(PKG_driver)
	dh_builddeb -p$(PKG_control)
	dh_builddeb -p$(PKG_glx)
	dh_builddeb -p$(PKG_source)
	dh_builddeb -p$(PKG_daemon)
	dh_builddeb -p$(PKG_dkms)

binary-indep: build

get-orig-source-checks:
	# This target needs DEB_BUILD_OPTIONS to contain the version specification
	# in the following form: VER=some.version.number
	(if [ -z "$(NEW_UPSTREAM_VERSION)" ] ; \
	 then \
	  echo "Version not defined" ; \
	  exit 1 ; \
	 fi)
	# If dpkg-parsechangelog fails, we're not running
	# the command from the proper place,
	(if [ -z "$(UPSTREAM_VERSION)" ] ; \
	 then \
	  echo "Run this command from the root of the $(PKG_driver) package" ; \
	  exit 1 ; \
	 fi)

$(INSTALLER):
	# Make sure the .run package is in the proper place,
	# but first try to look in the "cache".
	# For some reason wget refuses to clobber and restarts everytime.
	# wget $(URL_PATH)/$(INSTALLER) -c -O $(CACHEDIR)/$(INSTALLER)
	[ -f $(CACHEDIR)/$(INSTALLER) ] || wget $(URL_PATH)/$(INSTALLER) -c -O $(CACHEDIR)/$(INSTALLER)
	cp $(CACHEDIR)/$(INSTALLER) .

get-orig-source: ../$(PKG_driver)_$(NEW_UPSTREAM_VERSION).orig.tar.bz2

../$(PKG_driver)_$(NEW_UPSTREAM_VERSION).orig.tar.bz2: get-orig-source-checks $(INSTALLER)
	(mkdir $(PKG_driver)-$(NEW_UPSTREAM_VERSION) \
	 && cd $(PKG_driver)-$(NEW_UPSTREAM_VERSION) \
	 && /bin/sh ../$(INSTALLER) --extract . \
	 && rm -f README.distro *.sh \
	 && rm -rf packages setup.data x4* \
	 && rm -rf x6* \
	 && rm -f arch/*/lib/modules/fglrx/fglrx.*.o)
	# Create the tarball.
	(tar -cjf $(PKG_driver)_$(NEW_UPSTREAM_VERSION).orig.tar.bz2 \
	 $(PKG_driver)-$(NEW_UPSTREAM_VERSION) && mv \
	 $(PKG_driver)_$(NEW_UPSTREAM_VERSION).orig.tar.bz2 ../)
	# Cleanup.
	rm -fr $(PKG_driver)-$(NEW_UPSTREAM_VERSION) && \
	rm $(INSTALLER)

.PHONY: binary binary-arch binary-indep build clean distclean get-orig-source get-orig-source-checks
