~ubuntu-branches/ubuntu/trusty/nvidia-graphics-drivers-304-updates/trusty-updates

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
#!/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

DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
# If the host is i386 set OTHER_ARCH to x86_64 and vice versa
OTHER_ARCH := $(shell (echo "$(DEB_HOST_MULTIARCH)" | grep i386 >/dev/null) && \
		echo "$(DEB_HOST_MULTIARCH)" | sed s/i386/x86_64/ || \
		echo "$(DEB_HOST_MULTIARCH)" | sed s/x86_64/i386/)

# Hack for pbuild
PATH := $(PATH):/usr/sbin

# Package names
PKG_flavour          := $(shell dpkg-parsechangelog | sed -n 's/^Source: //p' | sed 's/nvidia\-graphics\-drivers\-//g')
PKG_driver           := nvidia-$(PKG_flavour)
PKG_driver_dev       := $(PKG_driver)-dev
PKG_version          := $(shell dpkg-parsechangelog | awk -F' ' '/^Version:/ {print $$2}' | awk -F- '{print $$1}')
PKG_version          := $(shell echo $(PKG_version) | sed s/.*\.really\.//g)
PKG_source           := $(shell dpkg-parsechangelog | sed -n 's/^Source: //p')
PKG_module           := $(shell echo "$(PKG_driver)" | sed s/\-/_/g)

# Priority of the alternative
alt_priority         := 9701

# 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)

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

release_notes        := http://www.nvidia.com/object/linux-display-$(web_arch)-$(PKG_version)-driver.html

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_path      := $(libdir)/$(DEB_HOST_MULTIARCH)/xorg
xorg_extra_modules   := $(xorg_extra_path)/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)

#These "define" bits are needed for the blacklist file
define newline


endef

define blacklist_file
# This file was installed by $(PKG_driver)
# Do not edit this file manually

blacklist nouveau
blacklist lbm-nouveau
blacklist nvidia-173
blacklist nvidia-96
blacklist nvidia-current-updates
blacklist nvidia-173-updates
blacklist nvidia-96-updates
alias nvidia $(PKG_module)
alias nouveau off
alias lbm-nouveau off
endef

define blacklist_hybrid
# This file was installed by $(PKG_driver)
# Do not edit this file manually

blacklist nouveau
blacklist lbm-nouveau
alias nouveau off
alias lbm-nouveau off
endef

# -Xlib32
DEB_DH_SHLIBDEPS_ARGS_$(PKG_driver)="-Xtls -Xconf" -X$(PKG_libdir32)#
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)/

.PHONY: download-sources
download-sources:
	# Remove any previous installers
	rm -f NVIDIA-Linux-x86*
	# Downloads the installers from NVIDIA's website
	wget $(url_x86) $(url_x86_64)

.PHONY: gen-abi-substvars
gen-abi-substvars:
	# Generate the xserver ABI dependencies
	cat debian/substvars >> debian/$(PKG_driver).substvars

.PHONY: regen-from-templates
regen-from-templates:
	# Get rid of files belonging to different flavours
	for i in debian/templates/*.in; do \
		old=`echo $$i | sed -e "s|templates\/||g" | \
				sed -e "s|\.in\$$||g" | \
				sed -e "s|nvidia-graphics-drivers|nvidia-*|g"`; \
		rm -f $$old; done
	# Create important strings
	for i in debian/templates/*.in; do \
		dest=`echo $$i | sed -e "s|templates\/||g" | \
				 sed -e "s|\.in\$$||g" | \
				 sed -e "s|nvidia-graphics-drivers|$(PKG_driver)|"`; \
		sed -e "s|#LIBDIR#|$(libdir)|g"         \
			-e "s|#LIBDIR32#|$(libdir32)|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|#PKGDRIVERSDIR#|$(PKG_driversdir)|g" \
			-e "s|#XORGEXTRA#|$(xorg_extra_modules)|g" \
			-e "s|#XORGEXTRAPATH#|$(xorg_extra_path)|g" \
			-e "s|#NVIDIAEXTENSION#|$(PKG_extensionsdir)|g" \
			-e "s|#XORGEXTENSIONSDIR#|$(xorg_extensionsdir)|g" \
			-e "s|#DRIVERNAME#|$(PKG_driver)|g" \
			-e "s|#FLAVOUR#|$(PKG_flavour)|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|#GRUBBLKLISTDIR#|$(grub_blacklistdir)|g" \
			-e "s|#DEB_HOST_MULTIARCH#|$(DEB_HOST_MULTIARCH)|g" \
			-e "s|#OTHER_ARCH#|$(OTHER_ARCH)|g" \
			-e "s|#RELEASENOTES#|$(release_notes)|g" \
			$$i > $$dest;      \
	done
ifeq ($(DEB_BUILD_ARCH),amd64)
	cat $(CURDIR)/debian/$(PKG_driver).links $(CURDIR)/debian/$(PKG_driver).links32 > \
	$(CURDIR)/debian/$(PKG_driver).links_new
	mv -f $(CURDIR)/debian/$(PKG_driver).links_new $(CURDIR)/debian/$(PKG_driver).links
endif
# Pre-config
#makebuilddir/$(PKG_driver):: regen-from-templates

configure/$(PKG_driver)::
	rm -rf $(dirname_x86) $(dirname_x86_64)

	# Make the installers executable and extract them
	chmod 755 $(filename_x86)
	chmod 755 $(filename_x86_64)
	./$(filename_x86) --extract-only
	./$(filename_x86_64) --extract-only

	# Get around Xen checks
	cp $(dirname)/kernel/nv.c $(dirname)/kernel/nv1.c
	cp $(dirname)/kernel/nv-linux.h $(dirname)/kernel/nv-linux1.h
	sed 's/CONFIG_XEN/CONFIG_ALB/g'  $(dirname)/kernel/nv1.c > $(dirname)/kernel/nv.c
	sed 's/CONFIG_XEN/CONFIG_ALB/g'  $(dirname)/kernel/nv-linux1.h > $(dirname)/kernel/nv-linux.h
	rm $(dirname)/kernel/nv1.c
	rm $(dirname)/kernel/nv-linux1.h

	# kernel module source
	mkdir -p $(CURDIR)/debian/temp/modules/nvidia-kernel
	cp -R $(CURDIR)/$(dirname)/kernel $(CURDIR)/debian/temp/modules/nvidia-kernel/
	cp $(CURDIR)/debian/temp/modules/nvidia-kernel/kernel/Makefile.kbuild \
	   $(CURDIR)/debian/temp/modules/nvidia-kernel/kernel/Makefile

	# Rename the png file for nvidia-settings
	mv $(CURDIR)/$(dirname)/nvidia-settings.png \
	$(CURDIR)/$(dirname)/$(PKG_driver)-settings.png

	# Disable the stack markings of binaries for security reasons.
	# See (LP: #409456)
	find $(CURDIR)/$(dirname) -name *.so* | xargs -n1 execstack -c

ifeq ($(DEB_BUILD_ARCH),amd64)
	# Disable the stack markings of 32bit binaries on amd64
	# See (LP: #409456)
	find $(CURDIR)/$(dirname_x86) -name *.so* | xargs -n1 execstack -c
endif
	# Disable the stack markings of other binaries (only for the current arch)
	#   Note: don't use for loops or pass more than 1 argument to execstack
	#         or it will fail.
	execstack -c $(CURDIR)/$(dirname)/nvidia-xconfig || true
	execstack -c $(CURDIR)/$(dirname)/nvidia-smi || true

#binary-install/$(PKG_driver_dev)::

binary-install/$(PKG_driver):: gen-abi-substvars
ifeq ($(DEB_BUILD_ARCH),amd64)
	#32 bit libraries on 64 bit
	dh_installdirs -p$(PKG_driver) "$(PKG_libdir32)"
	dh_installdirs -p$(PKG_driver) "$(PKG_tlsdir32)"

	dh_install -p$(PKG_driver) "$(dirname_x86)/libGL*.so*"  "$(PKG_libdir32)"
	dh_install -p$(PKG_driver) "$(dirname_x86)/libGL.la"  "$(PKG_libdir32)"
	dh_install -p$(PKG_driver) "$(dirname_x86)/libnvidia*.so*"  "$(PKG_libdir32)"
	dh_install -p$(PKG_driver) "$(dirname_x86)/libcuda*.so*"  "$(PKG_libdir32)"

	dh_install -p$(PKG_driver)  "$(dirname_x86)/libvdpau*"  "$(PKG_vdpaudir32)"
	dh_install -p$(PKG_driver)  "$(dirname_x86)/tls/lib*"  "$(PKG_tlsdir32)"

	dh_install -p$(PKG_driver) "$(dirname_x86)/libOpenCL*.so*"  "$(PKG_libdir32)"
	dh_install -p$(PKG_driver) "$(dirname_x86)/libnvidia-compiler*.so*"  "$(PKG_libdir32)"
	dh_install -p$(PKG_driver) "$(dirname_x86)/libnvcuvid*.so*"  "$(PKG_libdir32)"
	dh_install -p$(PKG_driver) "$(dirname_x86)/libnvidia-ml*.so*"  "$(PKG_libdir32)"
	dh_install -p$(PKG_driver) "$(dirname_x86)/libXvMCNVIDIA*.so.*" "$(PKG_libdir32)"
endif

	# Generate modaliases for Jockey and nvidia-common
	mkdir -p $(CURDIR)/debian/$(PKG_driver)-modaliases/usr/share/jockey/modaliases/
	sh -e $(CURDIR)/debian/nvidia_supported \
		$(PKG_module) $(PKG_driver) \
		$(dirname)/README.txt \
		$(dirname)/kernel/nv-kernel.o \
		> $(CURDIR)/debian/$(PKG_driver).modaliases
	# Take additional card ids from a text file
	for id in $(shell cat $(CURDIR)/debian/additional_card_ids); do \
		printf 'alias pci:v%08Xd%08Xsv*sd*bc03sc*i* %s %s\n' \
		0x10de "0x$$id" "$(PKG_module)" "$(PKG_driver)" \
		>> $(CURDIR)/debian/$(PKG_driver).modaliases; done
	dh_modaliases
	rm $(CURDIR)/debian/$(PKG_driver).modaliases

	# Configuration stuff

	# ld.so.conf
	dh_installdirs -p$(PKG_driver) "$(ld_so_conf_dir)"
	echo "$(PKG_libdir)" >	"$(CURDIR)/debian/$(PKG_driver)$(ld_so_conf_path)"
ifeq ($(DEB_BUILD_ARCH),amd64)
	echo "$(PKG_libdir32)" >>	$(CURDIR)/debian/$(PKG_driver)$(ld_so_conf_path)
endif
	# empty ld.so.conf for the fake multi-arch alternative
	$(shell touch "$(CURDIR)/debian/$(PKG_driver)$(alt_ld_so_conf_path)")

	# Blacklist any other driver that udev may want to load instead of $(PKG_module)
	# and create an alias for the module so that it can be used as nvidia
	printf '$(subst $(newline),\n,${blacklist_file})' > $(CURDIR)/debian/$(PKG_driver)$(PKG_libconfdir)/modprobe.conf

	# Permanently blacklist nouveau so that hybrid graphics can work without having to rebuild
	# the initramfs when nvidia is installed but disabled
	printf '$(subst $(newline),\n,${blacklist_hybrid})' > \
               $(CURDIR)/debian/$(PKG_driver)$(sysconfdir)/modprobe.d/$(PKG_driver)_hybrid.conf

	# XvMCConfig
	dh_installdirs -p$(PKG_driver) "$(PKG_configdir)"
	echo "libXvMCNVIDIA_dynamic.so.1" > $(CURDIR)/debian/$(PKG_driver)/$(PKG_configdir)/XvMCConfig

	dh_install -p$(PKG_driver) $(dirname)/nvidia-xconfig.1.gz "$(mandir)";
	dh_install -p$(PKG_driver) $(dirname)/nvidia-settings.1.gz "$(mandir)";
	dh_install -p$(PKG_driver) $(dirname)/nvidia-smi.1.gz "$(mandir)";

	# Rename the man pages in order to use alternatives
	for file in $(CURDIR)/debian/$(PKG_driver)$(mandir)/*.gz; do \
		mv $$file $(CURDIR)/debian/$(PKG_driver)$(mandir)/`basename $$file | sed 's/nvidia/alt-$(PKG_driver)/'`; \
	done

	rm -rf debian/temp


clean:: regen-from-templates
#	for file in $(CURDIR)/debian/*.in \
#	; do \
#		if [ `basename $$file` != "control.in" ]; then \
#			rm -f $(CURDIR)/debian/`basename $$file | sed 's/\.in\$$//'`; \
#		fi \
#	done
	rm -fr $(CURDIR)/$(dirname_x86) $(CURDIR)/$(dirname_x86_64)
	rm -fr debian/temp
	rm -f debian/$(PKG_driver).substvars