#!/usr/bin/make -f # add DEB_* variables to the environment include /usr/share/dpkg/architecture.mk include /usr/share/dpkg/pkg-info.mk include /usr/share/dpkg/vendor.mk # determine whether this is a stable or development build VERSION=$(shell echo $(DEB_SOURCE) | sed s/wine//g) ifeq (x$(VERSION), x) DEBSUFFIX=-stable else DEBSUFFIX=$(VERSION) endif export DEBSUFFIX # installation paths MANDIR=usr/share/man BINDIR=usr/lib/wine$(VERSION) DATDIR=usr/share/wine$(VERSION) INCDIR=usr/include/wine$(VERSION) LIBDIR=usr/lib/$(DEB_HOST_MULTIARCH)/wine$(VERSION) # enable verbose build log export DH_VERBOSE=1 # specify buildflags (stack protector, fortify, and LTO are not yet supported upstream) export DEB_BUILD_MAINT_OPTIONS=hardening=+all,-fortify,-stackprotector optimize=-lto # configure options CONFLAGS=--with-gnutls \ --without-oss \ --without-sane \ --without-netapi \ --disable-tests \ --enable-werror \ --enable-maintainer-mode \ --libdir=/$(LIBDIR) \ --bindir=/$(BINDIR) \ --mandir=/$(MANDIR) \ --includedir=/$(INCDIR) \ --datarootdir=/$(DATDIR) \ LDFLAGS="" \ CFLAGS="$(shell dpkg-buildflags --get CFLAGS)" \ # enable wine64 on 64-bit architectures ifeq ($(DEB_HOST_ARCH_BITS), 64) CONFLAGS+=--enable-win64 # set "-Wno-format" (many format strings are not yet updated for 64-bit) export DEB_CFLAGS_MAINT_APPEND+=-Wno-format export DEB_BUILD_MAINT_OPTIONS=hardening=+all,-fortify,-stackprotector,-format optimize=-lto endif # build with mingw on intel architectures ifneq (,$(filter $(DEB_HOST_ARCH),i386 amd64)) CONFLAGS+=--with-mingw ZLIB_PE_LIBS=z endif # build with soft float ABI and armv7-a instruction set on armel ifeq ($(DEB_HOST_ARCH), armel) CONFLAGS+=--with-float-abi=soft --with-unwind=no CONFLAGS+=LDFLAGS="$(shell dpkg-buildflags --get LDFLAGS)" export DEB_CFLAGS_MAINT_APPEND+=-march=armv7-a export DEB_LDFLAGS_MAINT_APPEND+=-march=armv7-a endif # build with hard float ABI on armhf ifeq ($(DEB_HOST_ARCH), armhf) CONFLAGS+=--with-float-abi=hard --with-unwind=no endif # the x18 register is reserved in windows on arm64, avoid clobbering it # (see https://bugs.winehq.org/show_bug.cgi?id=38780) ifeq ($(DEB_HOST_ARCH), arm64) export DEB_CFLAGS_MAINT_APPEND+=-ffixed-x18 endif # ignore arm-specific unused functions ifneq (,$(filter $(DEB_HOST_ARCH),armel armhf arm64)) export DEB_CFLAGS_MAINT_APPEND+=-Wno-unused-function endif # extra information to add to the version string export VENDOR=$(DEB_VENDOR) $(DEB_VERSION) # parse wine's cpu string from DEB_HOST_MULTIARCH export WINE_CPU=$(shell echo $(DEB_HOST_MULTIARCH) | cut -d- -f1) # use date of the latest changelog update as the build date export WIDL_TIME_OVERRIDE=$(SOURCE_DATE_EPOCH) # additional files to generate INSTALLS=$(shell ls debian/*VERSION* | sed s/VERSION/$(VERSION)/) \ debian/bug-control \ debian/control: debian/control.in sed "s/VERSION/$(VERSION)/g;s/DEBSUFFIX/$(DEBSUFFIX)/g" < $< > $@ debian/wine$(VERSION)%: debian/wineVERSION% sed "s/VERSION/$(VERSION)/g;s/DEBSUFFIX/$(DEBSUFFIX)/g" < $< > $@ debian/wine32$(VERSION)%: debian/wine32VERSION% sed "s/VERSION/$(VERSION)/g;s/DEBSUFFIX/$(DEBSUFFIX)/g" < $< > $@ debian/wine64$(VERSION)%: debian/wine64VERSION% sed "s/VERSION/$(VERSION)/g;s/DEBSUFFIX/$(DEBSUFFIX)/g" < $< > $@ debian/libwine$(VERSION)%: debian/libwineVERSION% sed "s/VERSION/$(VERSION)/g;s/DEB_HOST_MULTIARCH/$(DEB_HOST_MULTIARCH)/g;s/WINE_CPU/$(WINE_CPU)/g" < $< > $@ debian/bug-control: debian/bug-control.in sed s/VERSION/$(VERSION)/g < $< > $@ %: dh $@ override_dh_auto_configure: # cc version $(CC) --version # mingw version $(DEB_HOST_GNU_CPU)-w64-mingw32-gcc --version || echo "" # automatically generated files ./debian/scripts/generate server/trace.generated make_requests ./debian/scripts/generate server/request.generated make_requests ./tools/make_unicode ./tools/make_requests cd dlls/dsound && ./make_fir cd dlls/opengl32 && ./make_opengl cd dlls/winevulkan && ./make_vulkan -x /usr/share/vulkan/registry/vk.xml # autotools files ln -sf /usr/share/misc/config.sub tools ln -sf /usr/share/misc/config.guess tools # image files used to generate icons for parts of wine ln -sf ../../dlls/user32/resources/oic_hand.svg dlls/display.drv16/oic_hand.svg ln -sf ../../dlls/user32/resources/oic_bang.svg dlls/comctl32/idi_tt_warn_sm.svg ln -sf ../../dlls/user32/resources/oic_note.svg dlls/comctl32/idi_tt_info_sm.svg ln -sf ../../dlls/user32/resources/oic_hand.svg dlls/comctl32/idi_tt_error_sm.svg ln -sf ../../dlls/shell32/resources/move.svg dlls/comctl32/idi_dragarrow.svg ln -sf ../../dlls/shell32/resources/image.svg programs/regedit/bin.svg ln -sf ../../dlls/shell32/resources/folder.svg programs/regedit/folder.svg ln -sf ../../dlls/shell32/resources/document.svg programs/regedit/string.svg ln -sf ../../dlls/shell32/resources/mycomputer.svg programs/regedit/computer.svg ln -sf ../../dlls/shell32/resources/folder_open.svg programs/regedit/folderopen.svg ln -sf ../../dlls/shell32/resources/window.svg programs/taskmgr/window.svg ln -sf ../../dlls/shell32/resources/window.svg programs/taskmgr/windowsm.svg ln -sf ../../dlls/shell32/resources/drive.svg dlls/comdlg32/hdisk.svg ln -sf ../../dlls/shell32/resources/folder.svg dlls/comdlg32/folder.svg ln -sf ../../dlls/shell32/resources/network.svg dlls/comdlg32/network.svg ln -sf ../../dlls/shell32/resources/folder_open.svg dlls/comdlg32/folder2.svg ln -sf ../../dlls/shell32/resources/disk_drive.svg dlls/comdlg32/floppy.svg ln -sf ../../dlls/shell32/resources/optical_drive.svg dlls/comdlg32/cdrom.svg ifneq (,$(filter $(DEB_HOST_ARCH),i386 amd64)) # ensure system zlib files are used for i386 and amd64 rm -rf libs/zlib endif # execute wine's configure script ./configure $(CONFLAGS) override_dh_auto_build-indep: # only build fonts for the architecture-independent packages make -C tools/sfnt2fon make -C fonts override_dh_auto_build-arch: # build wine's headers upfront to avoid incompatible mingw versions make -C include dh_auto_build override_dh_auto_test: # disabled, there are currently too many failing tests override_dh_auto_install-indep: $(INSTALLS) mkdir -p debian/tmp cp ANNOUNCE.md debian/tmp/NEWS cp programs/winedbg/README debian/tmp/README.winedbg sed "s|DEBSUFFIX|$(DEBSUFFIX)|g" debian/scripts/wineapploader.in > debian/tmp/wineapploader chmod 755 debian/tmp/wineapploader sed "s|BINDIR|$(BINDIR)|g;s|VERSION|$(VERSION)|g" debian/scripts/wine.in > debian/tmp/wine$(DEBSUFFIX) make $(shell find . ! -path "./.pc/*" -name *\\.man\\.in | sed s/\\.in//) for file in $$(find . ! -path "./debian/*" -name \*.man); do \ rename=$$(basename $$file | sed "s/\\./$(DEBSUFFIX)./;s/UTF-8\\.//"); \ mv $$file debian/tmp/$$rename || true; \ done # files to exclude from the architecture-independent packages rm -f debian/tmp/usr/lib/*/wineserver rm -f debian/tmp/notepad*.man debian/tmp/winemine*.man rm -rf debian/tmp/usr/share/wine$(VERSION)/wine/nls # extract hicolor icon from logo.svg sed '/image\/png/d;s|width="611"|width="209"|' programs/winecfg/logo.svg > debian/tmp/wine$(DEBSUFFIX).svg override_dh_auto_install-arch: $(INSTALLS) mkdir -p debian/tmp cp ANNOUNCE.md debian/tmp/NEWS cp tools/winedump/README debian/tmp/README.winedump mv server/wineserver debian/tmp/wineserver$(DEB_HOST_ARCH_BITS) sed "s|BINDIR|$(BINDIR)|g" debian/scripts/winegcc.in > debian/tmp/winegcc$(DEBSUFFIX) sed "s|BINDIR|$(BINDIR)|g;s|VERSION|$(VERSION)|g" debian/scripts/wineserver.in > debian/tmp/wineserver chmod 755 debian/tmp/wineserver ifeq ($(DEB_HOST_ARCH), i386) echo >> debian/libwine$(VERSION).install echo "# 16-bit windows PE files" >> debian/libwine$(VERSION).install echo "debian/tmp/usr/lib/*/*/*/*.vxd" >> debian/libwine$(VERSION).install echo "debian/tmp/usr/lib/*/*/*/*.dll16" >> debian/libwine$(VERSION).install echo "debian/tmp/usr/lib/*/*/*/*.drv16" >> debian/libwine$(VERSION).install echo "debian/tmp/usr/lib/*/*/*/*.exe16" >> debian/libwine$(VERSION).install echo "debian/tmp/usr/lib/*/*/*/*.mod16" >> debian/libwine$(VERSION).install endif ifeq (,$(filter $(DEB_HOST_ARCH),i386 amd64)) rm -f debian/libwine$(VERSION).prerm debian/libwine$(VERSION).postinst endif dh_installdirs dh_auto_install for file in $$(find . ! -path "./debian/*" -name \*.man); do \ rename=$$(basename $$file | sed "s/\\./$(DEBSUFFIX)./;s/UTF-8\\.//"); \ mv $$file debian/tmp/$$rename || true; \ done ifeq ($(DEB_HOST_ARCH_BITS), 64) # copy 64 bit wine-preloader test -f debian/tmp/$(BINDIR)/wine64-preloader && \ mv debian/tmp/$(BINDIR)/wine64-preloader debian/tmp/$(BINDIR)/wine64-preloader.static || \ cp debian/scripts/wine-preloader.static debian/tmp/$(BINDIR)/wine64-preloader.static else # copy 32 bit wine-preloader test -f debian/tmp/$(BINDIR)/wine-preloader && \ mv debian/tmp/$(BINDIR)/wine-preloader debian/tmp/$(BINDIR)/wine-preloader.static || \ cp debian/scripts/wine-preloader.static debian/tmp/$(BINDIR)/wine-preloader.static endif # files to exclude from the architecture-dependent packages rm -rf debian/tmp/usr/share/man rm -f debian/tmp/usr/lib/*/wineserver rm -f debian/tmp/usr/lib/*/*/libwine.so rm -f debian/tmp/usr/share/*/fonts/*.fon rm -f debian/tmp/usr/share/*/fonts/*.ttf rm -f debian/tmp/notepad*.man debian/tmp/winemine*.man override_dh_makeshlibs: # avoid unnecessary calls to ldconfig dh_makeshlibs --no-scripts -- -V override_dh_shlibdeps: mkdir -p debian/tmp ./debian/scripts/config2elf debian/tmp/elf.recommends ./debian/scripts/config2elf debian/tmp/elf.depends "libfontconfig|libfreetype|libncurses" dpkg-shlibdeps --warnings=1 -v -pdlopen \ -dDepends -edebian/tmp/elf.depends \ -dRecommends -edebian/tmp/elf.recommends \ -Tdebian/libwine$(VERSION).substvars 2>/dev/null dh_shlibdeps -- -v -l/$(LIBDIR)/$(WINE_CPU)-unix override_dh_bugfiles: dh_bugfiles -A override_dh_missing: dh_missing -X elf.depends -X elf.recommends -X wine.desktop override_dh_clean: dh_clean -- $(INSTALLS) make -f debian/rules debian/control override_dh_auto_clean: make -f debian/rules debian/control ifeq (,$(filter $(DEB_HOST_ARCH),i386 amd64)) # remove zlib patch on non x86 architectures QUILT_PATCHES=debian/patches quilt pop -af || true QUILT_PATCHES=debian/patches quilt delete system/zlib.patch || true endif QUILT_PATCHES=debian/patches quilt push -af || true dh_auto_clean