#!/usr/bin/make -f

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

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

include debian/rules.defs
CUDA_VERSION_TOOLKIT	:= $(shell dpkg-parsechangelog | sed -nr '/^Version:/s/Version: (.*:)?(.*)-(.*)/\2/p')
CUDA_VERSION_MAJOR	?= $(word 1,$(subst ., ,$(CUDA_VERSION_TOOLKIT)))
CUDA_VERSION_MINOR	?= $(word 2,$(subst ., ,$(CUDA_VERSION_TOOLKIT)))
version_toolkit	 = $(CUDA_VERSION_TOOLKIT)
version_driver	 = $(CUDA_VERSION_DRIVER)
filename_i386	 = $(CUDA_FILENAME_X86)
filename_amd64	 = $(CUDA_FILENAME_X86_64)
filename	 = $(filename_$(DEB_HOST_ARCH))
download_url	 = $(if $(CUDA_BETA),$(CUDA_DOWNLOAD_URL_BETA),$(CUDA_DOWNLOAD_URL))

package_libcuda1 \
	= libcuda1 (>= $${nvidia:MinVersion}) \
	| libcuda-$${cuda:SoVersion}-1
        
package_nvidia-libopencl1 \
	= nvidia-libopencl1 (>= $${nvidia:MinVersion}) \
	| libopencl-1.1-1

# system libdir
libdir			 = usr/lib/$(DEB_HOST_MULTIARCH)

TEMPLATES	:= $(wildcard debian/*.in)
SOVERTEMPLATES	:= $(wildcard debian/*SOVER*)
AUTOGEN         += $(patsubst %.in,%,$(TEMPLATES))
AUTOGEN		+= $(subst SOVER,$(CUDA_SOVERSION),$(sort $(patsubst %.in,%,$(SOVERTEMPLATES))))
AUTOKEEP	 = debian/watch
AUTOCLEAN	 = $(filter-out $(AUTOKEEP),$(AUTOGEN))
AUTOCLEAN	+= debian/shlibs.local


.PHONY: autogen prepare
autogen: $(AUTOGEN)
prepare: autogen unpack-stamp compare-copyright-license


unpack-stamp:
	dh_testdir
	# unpack
ifeq ($(DEB_HOST_ARCH),i386)
	sh ${filename_i386} --noexec --keep --target nvidia-cuda-i386
else
	sh ${filename_amd64} --noexec --keep --target nvidia-cuda-amd64
endif
	ln -s nvidia-cuda-$(DEB_HOST_ARCH) nvidia-cuda
ifeq ($(DEB_HOST_ARCH),amd64)
	# fixup lib{,32,64} directory layout
	mv nvidia-cuda-amd64/lib nvidia-cuda-amd64/lib32
	mv nvidia-cuda-amd64/lib64 nvidia-cuda-amd64/lib
	mv nvidia-cuda-amd64/extras/CUPTI/lib nvidia-cuda-amd64/extras/CUPTI/lib32
	mv nvidia-cuda-amd64/extras/CUPTI/lib64 nvidia-cuda-amd64/extras/CUPTI/lib
	mv nvidia-cuda-amd64/nvvm/lib nvidia-cuda-amd64/nvvm/lib32
	mv nvidia-cuda-amd64/nvvm/lib64 nvidia-cuda-amd64/nvvm/lib
endif
	# shipped as files/hardlinks instead of symlinks
	ln -sf libnvvm.so.2.0.0 nvidia-cuda/nvvm/lib/libnvvm.so.2
	ln -sf libnvvm.so.2 nvidia-cuda/nvvm/lib/libnvvm.so
	QUILT_PATCHES=debian/patches QUILT_SERIES=series-postunpack quilt --quiltrc /dev/null push -a || test $$? = 2
	touch $@

# Reformat the EULA to the format needed for debian/copyright.
nvidia-cuda/EULA.txt: unpack-stamp
EULA.fmt: nvidia-cuda/EULA.txt
	cat $<  | fromdos | fromdos | expand \
		| iconv -f CP1255 -t latin1//TRANSLIT \
		| fold -s -w 80 \
		| sed -e 's/ *$$//;s/^$$/./;s/^/ /;' \
		> $@

# Compare the license in debian/copyright with the EULA shipped in the archive.
compare-copyright-license: EULA.fmt
	sed -e '1,/^License: other-NVIDIA-CUDA-TOOLKIT/d; /^$$/,$$d; /^ .$$/d' debian/copyright > copyright.tmp
	sed -e '/^ .$$/d' EULA.fmt > EULA.tmp
	diff -w copyright.tmp EULA.tmp
	rm -f copyright.tmp EULA.tmp


.PHONY: binary binary-arch binary-indep build clean install
binary binary-arch binary-indep build clean install:
	dh $@


override_dh_auto_configure: $(AUTOGEN) unpack-stamp

override_dh_auto_install:
	mkdir debian/tmp
	cp -al nvidia-cuda-$(DEB_HOST_ARCH) debian/tmp/usr
	chmod -x debian/tmp/usr/libnvvp/*.xpm
	chmod -x debian/tmp/usr/libnsight/*.xpm
	chmod -x debian/tmp/usr/bin/crt/link.stub
	chmod -x debian/tmp/usr/bin/crt/prelink.stub
	chmod -x debian/tmp/usr/nvvm/include/*.h
	chmod -x debian/tmp/usr/nvvm/libnvvm-samples/build.bat
	sed -i '/^-vm$$/ d; /^..\/jre\/bin\/java$$/ d' debian/tmp/usr/libnvvp/nvvp.ini debian/tmp/usr/libnsight/nsight.ini
	# do not prevent the use of GCC 4.9
	sed -i 's/__GNUC_MINOR__ > 8/__GNUC_MINOR__ > 9/' debian/tmp/usr/include/host_config.h
	# remove tracking scripts
	rm -rfv debian/tmp/usr/doc/html/common/scripts
	# remove tracking images
	find debian/tmp/usr/doc/html -name '*.html' -exec sed -r -i \
		-e '\,http://omniture.nvidia.com/b/ss/nvidiacudadocs/1/H.17--NS/0, { s,(<noscript>),<!-- \1,; s,img src,img DISABLED,; s,(</noscript>),\1 -->, }' \
		-e 's,(<script type="text/javascript" )src(="http://w.sharethis.com/button/buttons.js"[^>]*></script>),<!-- \1DISABLED\2 -->,' \
		{} +
	# reduce 'dh_install --list-missing' noise
	rm -rf debian/tmp/usr/include/thrust
	rm -rf debian/tmp/usr/jre
	rm -rf debian/tmp/usr/lib32
	rm -rf debian/tmp/usr/*/lib32

override_dh_install:
	dh_install --list-missing
	rm -rf debian/nvidia-visual-profiler/usr/share/nvidia-visual-profiler/plugins/org.eclipse.equinox.launcher.gtk.linux.*
	rm -rf debian/nvidia-nsight/usr/share/nvidia-nsight/plugins/org.eclipse.equinox.launcher.gtk.linux.*

override_dh_installman:
	dh_installman --language=C

# running dh_strip is not permitted by the NVIDIA license
override_dh_strip:

override_dh_compress:
	dh_compress -Xusr/share/doc/nvidia-cuda-doc/examples

override_dh_gencontrol:
	dh_gencontrol -- \
		-V'package:libcuda1=$(package_libcuda1)' \
		-V'package:nvidia-libopencl1=$(package_nvidia-libopencl1)' \
		-V'cuda:SoVersion=$(CUDA_SOVERSION)' \
		-V'nvidia:MinVersion=$(version_driver)'

override_dh_auto_clean:
	$(RM) -r .pc
	$(RM) -r nvidia-cuda nvidia-cuda-i386 nvidia-cuda-amd64
	$(RM) EULA.fmt EULA.tmp copyright.tmp

override_dh_clean:
	dh_clean
	$(RM) $(AUTOCLEAN)
	$(MAKE) -f debian/rules $(AUTOKEEP)


# Generating control files
%:: %.in debian/rules debian/rules.defs
	perl -p \
	-e 's{#VERSION_TOOLKIT#}{$(version_toolkit)}g;' \
	-e 's{#SOVERSION#}{$(CUDA_SOVERSION)}g;' \
	-e 's{#CUDA_DOWNLOAD_URL#}{$(download_url)}g;' \
	-e 's{#LIBDIR#}{$(libdir)}g;' \
	< $< > $@

lib%$(CUDA_SOVERSION).install:: lib%SOVER.install
	cp $< $@

lib%$(CUDA_SOVERSION).links:: lib%SOVER.links
	cp $< $@

lib%$(CUDA_SOVERSION).lintian-overrides:: lib%SOVER.lintian-overrides
	cp $< $@

lib%$(CUDA_SOVERSION).symbols:: lib%SOVER.symbols
	cp $< $@

############################################################################

.PHONY: get-orig-source
get-orig-source:
	rm -rf get-orig-source || true
	mkdir get-orig-source
	ln -v ../.cache/*$(CUDA_VERSION_TOOLKIT_FILENAME)*.run get-orig-source/ || true
	uscan --no-symlink --download-current-version --destdir get-orig-source
	test $$(ls get-orig-source/* | wc -l) = 2  # we need exactly 2 downloaded files
	@set -e -x ; \
	    cd get-orig-source ; \
	    newversion=$$(ls cuda*_*_linux_32.run | sed -e 's/.*_\([0-9.]*\)_linux.*\.run/\1/') ; \
	    mkdir nvidia-cuda-toolkit-$${newversion}.orig ; \
	    for file in cuda*_*linux_*.run ; do \
	    	sh "$$file" --noexec --keep --target tmp ; \
	    	find tmp -ls ; \
		if [ -d tmp/run_files ]; then \
		    mv -f tmp/run_files/cuda-linux*-rel*.run tmp/run_files/EULA.txt nvidia-cuda-toolkit-$${newversion}.orig/ ; \
		else \
		    mv "$$file" nvidia-cuda-toolkit-$${newversion}.orig/ ; \
		fi ; \
		rm -rf tmp ; \
	    done ; \
	    chmod 0755 nvidia-cuda-toolkit-$${newversion}.orig/* ; \
	    tar cfvz ../nvidia-cuda-toolkit_$${newversion}.orig.tar.gz \
		--owner=root --group=src \
		nvidia-cuda-toolkit-$${newversion}.orig
	rm -rf get-orig-source

