| 12
 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
 
 | #!/usr/bin/make -f
include /usr/share/dpkg/default.mk
LSB_DISTRIBUTOR := $(shell lsb_release -is)
NAME := $(shell awk '$$1 == "Name:" { print $$2; }' META)
LINUX_MIN  := $(shell awk '/Linux-Minimum:/{print $$2}' META)
LINUX_NEXT := $(shell awk -F'[ .]' '/Linux-Maximum:/{print $$2 "." $$3+1}' META)
DKMSFILES := module include config zfs.release.in autogen.sh copy-builtin META AUTHORS \
		COPYRIGHT LICENSE README.md CODE_OF_CONDUCT.md NEWS NOTICE RELEASES.md
DKMSFILESEXCLUDE := include/os/freebsd module/os/freebsd module/Makefile.bsd
ifndef BUILD_UDEB
BUILD_UDEB=false
endif
ifndef KVERS
KVERS=$(shell uname -r)
endif
non_epoch_version=$(shell echo $(KVERS) | perl -pe 's/^\d+://')
PACKAGE=zfs
pmodules = $(PACKAGE)-modules-$(non_epoch_version)
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
NUM_CPUS = $(shell nproc 2>/dev/null)
PARALLEL = $(subst parallel=,,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
NJOBS    = -j$(or $(PARALLEL),$(NUM_CPUS),1)
%:
	dh $@ --with autoreconf,python3,sphinxdoc
override_dh_autoreconf:
	@# Embed the downstream version in the module.
	@sed -e 's/^Version:.*/Version:       $(DEB_VERSION_UPSTREAM)/' -i.orig META
	dh_autoreconf
override_dh_auto_configure:
ifeq ($(BUILD_UDEB), true)
	cat debian/control.udeb.in >> debian/control
endif
	@# Build the userland, but don't build the kernel modules.
	dh_auto_configure -- \
	  --bindir=/usr/bin \
	  --sbindir=/usr/sbin \
	  --with-mounthelperdir=/usr/sbin \
	  --libdir=/usr/lib/"$(DEB_HOST_MULTIARCH)" \
	  --with-udevdir=/usr/lib/udev \
	  --with-zfsexecdir=/usr/lib/zfs-linux \
	  --enable-systemd \
	  --enable-pyzfs \
	  --with-python=python3 \
	  --with-pammoduledir='/usr/lib/$(DEB_HOST_MULTIARCH)/security' \
	  --with-pkgconfigdir='/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig' \
	  --with-systemdunitdir=/usr/lib/systemd/system \
	  --with-systemdpresetdir=/usr/lib/systemd/system-preset \
	  --with-systemdgeneratordir=/usr/lib/systemd/system-generators \
	  --with-config=user
	for i in $(wildcard $(CURDIR)/debian/*.install.in) ; do \
		basename "$$i" | grep _KVERS_ && continue ; \
		sed 's/@DEB_HOST_MULTIARCH@/$(DEB_HOST_MULTIARCH)/g' "$$i" > "$${i%%.in}" ; \
	done
override_dh_gencontrol:
	dh_gencontrol -- -Vlinux:Recommends="linux-libc-dev (<< $(LINUX_NEXT)~), linux-libc-dev (>= $(LINUX_MIN)~),"
override_dh_auto_build:
	@# Get a bare copy of the source code for DKMS.
	@# This creates the $(CURDIR)/$(NAME)-$(DEB_VERSION_UPSTREAM)/ tree, which does not
	@# contain the userland sources. NB: Remove-userland-dist-rules.patch
	$(MAKE) distdir
	dh_auto_build
override_dh_auto_test:
ifeq (amd64,$(DEB_HOST_ARCH))
	# Upstream provides an ABI guarantee that we validate here
	-$(MAKE) checkabi
endif
	# The dh_auto_test rule is disabled because
	# `make check` cannot run in an unprivileged build environment.
override_dh_auto_install:
	@# Install the utilities.
	$(MAKE) install DESTDIR='$(CURDIR)/debian/tmp'
	@# Install the DKMS source.
	@# We only want the files needed to build the modules
	install -D -t '$(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/scripts' \
		'$(CURDIR)/scripts/dkms.postbuild'
	$(foreach file,$(DKMSFILES),mv '$(CURDIR)/$(NAME)-$(DEB_VERSION_UPSTREAM)/$(file)' '$(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)' || exit 1;)
	@# Do not include FreeBSD kernel sources in the Linux DKMS package
	$(foreach file,$(DKMSFILESEXCLUDE),rm -r '$(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/$(file)' || exit 1;)
	@# Only ever build Linux modules
	echo 'SUBDIRS = linux' > '$(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/include/os/Makefile.am'
	@# Hellish awk line:
	@#  * Deletes from configure.ac the parts not needed for building the kernel module
	@#     * It deletes from inside AC_CONFIG_FILES([]) everything except:
	@#        - Makefile$
	@#        - include/(Makefile|sys|os/(Makefile|linux))
	@#        - module/
	@#        - zfs.release$
	@#  * Takes care of spaces and tabs
	@#  * Remove reference to ZFS_AC_PACKAGE
	awk '/^AC_CONFIG_FILES\(\[/,/^\]\)/ {\
		if ($$0 !~ /^(AC_CONFIG_FILES\(\[([ \t]+)?$$|\]\)([ \t]+)?$$|([ \t]+)?(include\/(Makefile|sys|os\/(Makefile|linux))|module\/|Makefile([ \t]+)?$$|zfs\.release([ \t]+)?$$))/) \
		{next} } {print}' \
		'$(CURDIR)/$(NAME)-$(DEB_VERSION_UPSTREAM)/configure.ac' | sed '/ZFS_AC_PACKAGE/d' > '$(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/configure.ac'
	@# Set "SUBDIRS = module include" for CONFIG_KERNEL and remove SUBDIRS for all other configs.
	@# Do not regenerate zfs_gitrev.h during dkms build
	sed '1,/CONFIG_KERNEL/s/SUBDIRS.*=.*//g;s/SUBDIRS.*=.*/SUBDIRS = module include/g;/make_gitrev.sh/d' \
		'$(CURDIR)/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am' > '$(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am'
	sed -i '/^include.*freebsd.*Makefile\.am/d' \
		'$(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/include/Makefile.am'
	@# Sanity test
	grep -q 'SUBDIRS = module include' '$(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am'
	sed -i '/rpm.Makefile/d' $(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am
	sed -i '/cmd.Makefile/d' $(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am
	sed -i '/contrib.Makefile/d' $(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am
	sed -i '/etc.Makefile/d' $(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am
	sed -i '/lib.Makefile/d' $(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am
	sed -i '/man.Makefile/d' $(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am
	sed -i '/scripts.Makefile/d' $(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am
	sed -i '/tests.Makefile/d' $(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am
	sed -i '/udev.Makefile/d' $(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/Makefile.am
	@# Run autogen on the stripped source tree
	cd '$(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)'; ./autogen.sh
	rm -fr '$(CURDIR)/debian/tmp/usr/src/$(NAME)-$(DEB_VERSION_UPSTREAM)/autom4te.cache'
	chmod a-x '$(CURDIR)/debian/tmp/etc/zfs/zfs-functions'
	chmod a-x '$(CURDIR)/debian/tmp/etc/default/zfs'
override_dh_python3:
	dh_python3 -p python3-pyzfs
override_dh_dkms:
	'$(CURDIR)/scripts/dkms.mkconf' -n $(NAME) -v $(DEB_VERSION_UPSTREAM) -f '$(CURDIR)/scripts/zfs-dkms.dkms'
	dh_dkms
	rm -f '$(CURDIR)/scripts/zfs-dkms.dkms'
override_dh_makeshlibs:
	dh_makeshlibs -a -V
ifeq ($(BUILD_UDEB), true)
	dh_makeshlibs -V -plibnvpair3linux --add-udeb=libnvpair3-udeb
	dh_makeshlibs -V -plibuutil3linux --add-udeb=libuutil3-udeb
	dh_makeshlibs -V -plibzfs4linux --add-udeb=libzfs4-udeb
	dh_makeshlibs -V -plibzfsbootenv1linux --add-udeb=libzfsbootenv1-udeb
	dh_makeshlibs -V -plibzpool5linux --add-udeb=libzpool5-udeb
	dh_makeshlibs -V -pzfsutils-linux --add-udeb=zfsutils-udeb
endif
override_dh_strip:
	dh_strip
ifeq ($(BUILD_UDEB), true)
	dh_strip -plibnvpair3-udeb
	dh_strip -plibuutil3-udeb
	dh_strip -plibzfs4-udeb
	dh_strip -plibzfsbootenv1-udeb
	dh_strip -plibzpool5-udeb
	dh_strip -pzfsutils-udeb
endif
override_dh_auto_clean:
	find . -name .gitignore -delete
	rm -rf zfs-$(DEB_VERSION_UPSTREAM)
	dh_auto_clean
	debconf-updatepo
	@if test -e META.orig; then mv META.orig META; fi
ifeq ($(BUILD_UDEB), true)
	cat debian/control.udeb.in >> debian/control
endif
override_dh_install:
	find debian/tmp/usr/lib -name '*.la' -delete
	dh_install
override_dh_missing:
	dh_missing --fail-missing
override_dh_installinit:
	dh_installinit -r --no-restart-after-upgrade --name zfs-import
	dh_installinit -r --no-restart-after-upgrade --name zfs-mount
	dh_installinit -r --no-restart-after-upgrade --name zfs-load-key
	dh_installinit -R --name zfs-share
	dh_installinit -R --name zfs-zed
override_dh_installsystemd:
	mkdir -p debian/zfsutils-linux/usr/lib/systemd/system
	ln -sr /dev/null debian/zfsutils-linux/usr/lib/systemd/system/zfs-import.service
	dh_installsystemd --no-stop-on-upgrade -X zfs-zed.service
	dh_installsystemd --name zfs-zed
override_dh_installdocs:
	dh_installdocs -A
	dh_installdocs -a -i -A debian/README.Debian
ifeq (,$(findstring nodoc, $(DEB_BUILD_OPTIONS)))
	http_proxy='127.0.0.1:9' sphinx-build -N -bhtml "$(CURDIR)/contrib/pyzfs/docs/source/" debian/pyzfs-doc/usr/share/doc/pyzfs-doc/html/
endif
# ------------
override_dh_prep-deb-files:
	for templ in $(wildcard $(CURDIR)/debian/*_KVERS_*.in); do \
		sed -e 's/##KVERS##/$(KVERS)/g ; s/#KVERS#/$(KVERS)/g ; s/_KVERS_/$(KVERS)/g ; s/##KDREV##/$(KDREV)/g ; s/#KDREV#/$(KDREV)/g ; s/_KDREV_/$(KDREV)/g ; s/_ARCH_/$(DEB_HOST_ARCH)/' \
		< $$templ > `echo $$templ | sed -e 's/_KVERS_/$(KVERS)/g ; s/_ARCH_/$(DEB_HOST_ARCH)/g ; s/\.in$$//'` ; \
	done
	sed -e 's/##KVERS##/$(KVERS)/g ; s/#KVERS#/$(KVERS)/g ; s/_KVERS_/$(KVERS)/g ; s/##KDREV##/$(KDREV)/g ; s/#KDREV#/$(KDREV)/g ; s/_KDREV_/$(KDREV)/g ; s/_ARCH_/$(DEB_HOST_ARCH)/g' \
	< debian/control.modules.in > debian/control
override_dh_configure_modules_udeb: override_dh_configure_modules_udeb_stamp
override_dh_configure_modules_udeb_stamp:
	./configure \
		--without-selinux \
		--with-config=kernel \
		--with-linux=$(KSRC) \
		--with-linux-obj=$(KOBJ)
	touch override_dh_configure_modules_udeb_stamp
override_dh_configure_modules: override_dh_configure_modules_stamp
override_dh_configure_modules_stamp:
	./configure \
		--with-config=kernel \
		--with-linux=$(KSRC) \
		--with-linux-obj=$(KOBJ)
	touch override_dh_configure_modules_stamp
override_dh_binary-modules-udeb: override_dh_prep-deb-files override_dh_configure_modules_udeb
	dh_testdir
	dh_testroot
	dh_prep
	$(MAKE) $(NJOBS) -C $(CURDIR)/module modules
	dh_installdirs -p${pmodules}-di
	dh_install -p${pmodules}-di
	dh_gencontrol -p${pmodules}-di
	dh_builddeb -p${pmodules}-di
override_dh_binary-modules: override_dh_prep-deb-files override_dh_configure_modules
	dh_testdir
	dh_testroot
	dh_prep
	$(MAKE) $(NJOBS) -C $(CURDIR)/module modules
	dh_install -p${pmodules}
	dh_installdocs -p${pmodules}
	dh_installchangelogs -p${pmodules}
	dh_compress -p${pmodules}
	dh_strip -p${pmodules}
	dh_fixperms -p${pmodules}
	dh_installdeb -p${pmodules}
	dh_gencontrol -p${pmodules}
	dh_md5sums -p${pmodules}
	dh_builddeb -p${pmodules}
debian-copyright:
	cme update dpkg-copyright -file debian/copyright.cme
 |