#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. SHELL = bash # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 # This has to be exported to make some magic below work. export DH_OPTIONS full_version := $(shell dpkg-parsechangelog | grep ^Version: | sed -e 's/^.*: //g') tar_version := $(shell echo $(full_version) | sed -e 's/-.*//g') svn_revision := $(shell echo $(full_version) | sed -e 's/.*~svn\([0-9]*\)-[0-9]*/\1/g' -e 's/^$(full_version)$$/HEAD/g') version := $(shell echo $(full_version) | sed -e 's/[~+-].*//g') major := $(shell echo $(version) | sed -e 's/\..*//g') revision := $(shell echo $(full_version) | sed -e 's/^[^+-]*//g') include /usr/share/dpkg/architecture.mk # Determine host architecture compiler ifeq ($(origin CC),default) CC := $(DEB_HOST_GNU_TYPE)-gcc endif # Use hardening flags export DEB_BUILD_MAINT_OPTIONS = hardening=+all # Pre-define CFLAGS, for hardening, debug and optimisation level DPKG_EXPORT_BUILDFLAGS = 1 include /usr/share/dpkg/buildflags.mk MACHINE_ARCH := $(DEB_HOST_ARCH_CPU) ifeq ($(DEB_HOST_ARCH_CPU), arm) ifneq (,$(findstring armhf,$(DEB_HOST_ARCH))) MACHINE_ARCH := armv6hf else MACHINE_ARCH := armv6 endif endif EXTRA_CFLAGS = \ -D__FreeBSD_version=__FreeBSD_kernel_version \ -D_GNU_SOURCE -pipe -Wall \ -Werror=implicit-function-declaration \ -I. -I$(CURDIR)/sys \ -isystem /usr/include/freebsd \ -fPIC \ $(CPPFLAGS) \ $(NULL) CFLAGS += $(EXTRA_CFLAGS) ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) # Do not mess with MAKEFLAGS until we transfer control to BSD make (see below) BSD_MAKEFLAGS += -j$(NUMJOBS) endif SVN_BASE := https://svn.freebsd.org/base #SVN := $(SVN_BASE)/release/$(version).0 SVN := $(SVN_BASE)/releng/$(version) #SVN := $(SVN_BASE)/stable/$(major) #SVN := $(SVN_BASE)/head SOURCE = freebsd-libs ORIGDIR = $(SOURCE)-$(tar_version) TARNAME = $(SOURCE)_$(tar_version).orig.tar.xz SOURCE_DATE_EPOCH ?= $(shell date -d "$$(dpkg-parsechangelog -SDate)" +%s) PATH := /usr/lib/freebsd:$(PATH) DESTDIR = $(CURDIR)/debian/tmp CFLAGS += -I$(CURDIR)/debian/local/include PMAKE_COMMON = \ MAKEFLAGS=$(BSD_MAKEFLAGS) \ NO_WERROR=1 NOGCCERROR=1 \ NOSHARED=NO NO_SHARED=NO NO_PROFILE=1 DESTDIR=$(DESTDIR) \ SHLIB_MAJOR=0 \ bmake \ CC=$(CC) \ MACHINE_ARCH=$(MACHINE_ARCH) \ $(NULL) PMAKE = \ CFLAGS="$(CFLAGS)" \ $(PMAKE_COMMON) PMAKE_FOREIGN = \ CFLAGS="$(CFLAGS) -D__FREEBSD_GLUE_USE_EMBEDDED_HEADERS" \ $(PMAKE_COMMON) kernel = $(DEB_HOST_ARCH_OS) get-orig-source: rm -rf $(ORIGDIR) mkdir -p $(ORIGDIR)/share/misc mkdir -p $(ORIGDIR)/sys/kern mkdir -p $(ORIGDIR)/sys/sys \ $(ORIGDIR)/sys/netipx for i in lib/libcam lib/libdevstat lib/libgeom lib/libipx \ lib/libelf \ lib/libdwarf \ lib/libkiconv lib/libnetgraph lib/libjail \ lib/libkvm lib/libmemstat lib/libsbuf lib/libusb \ lib/libusbhid sys/cam \ lib/libutil \ lib/libalias sys/netinet/libalias sys/modules/libalias \ lib/Makefile.inc \ sys/kern/subr_prf.c \ sys/kern/subr_sbuf.c \ sys/sys/sbuf.h \ sys/netipx/ipx.h \ share/misc/usb_hid_usages ; do \ svn export --ignore-keywords -r $(svn_revision) $(SVN)/$$i $(ORIGDIR)/$$i || exit ; \ done # Remove unused files with non GPL compatible license (eg BSD 4 clauses) rm -f $(ORIGDIR)/sys/cam/scsi/scsi_ch.* rm -f $(ORIGDIR)/lib/libkvm/kvm_ia64.c rm -f $(ORIGDIR)/lib/libkvm/kvm_powerpc.c # Remove all CAM kernel headers to ensure system-wide version is used instead find $(ORIGDIR)/sys/cam -name \*.h | xargs rm -f # Clamp timestamps to be no newer than last changelog entry, see # https://wiki.debian.org/ReproducibleBuilds/TimestampsInTarball find $(ORIGDIR) -newermt "@$(SOURCE_DATE_EPOCH)" -print0 \ | xargs -0r touch --no-dereference --date="@$(SOURCE_DATE_EPOCH)" # Create tarball with files sorted in a stable order, see # https://wiki.debian.org/ReproducibleBuilds/FileOrderInTarballs find $(ORIGDIR) -print0 | LC_ALL=C sort -z \ | tar --null --no-recursion --files-from - \ --numeric-owner --owner 0 --group 0 \ -cJf ../$(TARNAME) rm -rf $(ORIGDIR) BUILD_ARCH_TARGETS = \ build-sbuf \ build-dwarf \ build-elf \ build-util \ build-ipx \ $(NULL) ifeq ($(kernel), kfreebsd) BUILD_ARCH_TARGETS += \ build-cam \ build-geom \ build-kiconv \ build-kvm \ build-usbhid \ build-usb \ build-devstat \ build-memstat \ build-netgraph \ build-jail \ build-alias endif build: build-indep build-arch build-indep: build-arch: $(BUILD_ARCH_TARGETS) build-cam: build-cam-stamp build-cam-stamp: build-sbuf $(PMAKE) -C $(CURDIR)/lib/libcam SHLIBDIR=./ touch $@ build-geom: build-geom-stamp build-geom-stamp: build-sbuf $(PMAKE) -C $(CURDIR)/lib/libgeom SHLIBDIR=./ touch $@ build-netgraph: build-netgraph-stamp build-netgraph-stamp: $(PMAKE) -C $(CURDIR)/lib/libnetgraph SHLIBDIR=./ touch $@ build-ipx: build-ipx-stamp build-ipx-stamp: $(PMAKE) -C $(CURDIR)/lib/libipx SHLIBDIR=./ touch $@ build-kiconv: build-kiconv-stamp build-kiconv-stamp: $(PMAKE) -C $(CURDIR)/lib/libkiconv SHLIBDIR=./ touch $@ build-kvm: build-kvm-stamp build-kvm-stamp: $(PMAKE) -C $(CURDIR)/lib/libkvm SHLIBDIR=./ touch $@ build-devstat: build-devstat-stamp build-devstat-stamp: build-kvm $(PMAKE) -C $(CURDIR)/lib/libdevstat SHLIBDIR=./ touch $@ build-elf: build-elf-stamp build-elf-stamp: $(PMAKE_FOREIGN) -C $(CURDIR)/lib/libelf SHLIBDIR=./ touch $@ build-dwarf: build-dwarf-stamp build-dwarf-stamp: build-elf $(PMAKE_FOREIGN) -C $(CURDIR)/lib/libdwarf SHLIBDIR=./ touch $@ build-memstat: build-memstat-stamp build-memstat-stamp: build-kvm $(PMAKE) -C $(CURDIR)/lib/libmemstat SHLIBDIR=./ touch $@ build-sbuf: build-sbuf-stamp build-sbuf-stamp: $(PMAKE_FOREIGN) -C $(CURDIR)/lib/libsbuf SHLIBDIR=./ touch $@ build-usbhid: build-usbhid-stamp build-usbhid-stamp: $(PMAKE) -C $(CURDIR)/lib/libusbhid SHLIBDIR=./ touch $@ build-usb: build-usb-stamp build-usb-stamp: $(PMAKE) -C $(CURDIR)/lib/libusb SHLIBDIR=./ touch $@ build-util: build-util-stamp build-util-stamp: $(PMAKE) -C $(CURDIR)/lib/libutil SHLIBDIR=./ touch $@ build-jail: build-jail-stamp build-jail-stamp: $(PMAKE) -C $(CURDIR)/lib/libjail SHLIBDIR=./ touch $@ build-alias: build-alias-stamp build-alias-stamp: $(PMAKE) -C $(CURDIR)/lib/libalias SHLIBDIR=./ touch $@ clean: dh_testdir dh_testroot $(PMAKE) -C $(CURDIR)/lib/libsbuf clean $(PMAKE) -C $(CURDIR)/lib/libdwarf clean $(PMAKE) -C $(CURDIR)/lib/libelf clean $(PMAKE) -C $(CURDIR)/lib/libutil clean ifeq ($(kernel), kfreebsd) $(PMAKE) -C $(CURDIR)/lib/libcam clean $(PMAKE) -C $(CURDIR)/lib/libnetgraph clean $(PMAKE) -C $(CURDIR)/lib/libdevstat clean $(PMAKE) -C $(CURDIR)/lib/libmemstat clean $(PMAKE) -C $(CURDIR)/lib/libgeom clean $(PMAKE) -C $(CURDIR)/lib/libipx clean $(PMAKE) -C $(CURDIR)/lib/libkiconv clean $(PMAKE) -C $(CURDIR)/lib/libkvm clean $(PMAKE) -C $(CURDIR)/lib/libusbhid clean $(PMAKE) -C $(CURDIR)/lib/libusb clean $(PMAKE) -C $(CURDIR)/lib/libjail clean $(PMAKE) -C $(CURDIR)/lib/libalias clean endif rm -f *stamp dh_clean install-indep: build-indep dh_testdir dh_testroot dh_prep -i dh_installdirs -i mkdir -p $(DESTDIR) dh_install -i --list-missing install-arch: build-arch dh_testdir dh_testroot dh_prep -a dh_installdirs -a mkdir -p \ $(DESTDIR)/lib \ $(DESTDIR)/lib/$(DEB_HOST_MULTIARCH) \ $(DESTDIR)/usr/lib \ $(DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH) \ $(DESTDIR)/usr/lib/pkgconfig \ $(DESTDIR)/usr/lib/$(DEB_HOST_MULTIARCH)/pkgconfig \ $(DESTDIR)/usr/include \ $(DESTDIR)/usr/share/man/man3 $(PMAKE) -C $(CURDIR)/lib/libsbuf install SHLIBDIR=/lib $(PMAKE) -C $(CURDIR)/lib/libdwarf install SHLIBDIR=/usr/lib $(PMAKE) -C $(CURDIR)/lib/libelf install SHLIBDIR=/usr/lib $(PMAKE) -C $(CURDIR)/lib/libutil install SHLIBDIR=/lib $(PMAKE) -C $(CURDIR)/lib/libipx install SHLIBDIR=/lib ifeq ($(kernel), kfreebsd) $(PMAKE) -C $(CURDIR)/lib/libcam install SHLIBDIR=/usr/lib $(PMAKE) -C $(CURDIR)/lib/libgeom install SHLIBDIR=/lib $(PMAKE) -C $(CURDIR)/lib/libkiconv install SHLIBDIR=/usr/lib $(PMAKE) -C $(CURDIR)/lib/libkvm install SHLIBDIR=/lib $(PMAKE) -C $(CURDIR)/lib/libdevstat install SHLIBDIR=/usr/lib $(PMAKE) -C $(CURDIR)/lib/libmemstat install SHLIBDIR=/usr/lib $(PMAKE) -C $(CURDIR)/lib/libnetgraph install SHLIBDIR=/usr/lib $(PMAKE) -C $(CURDIR)/lib/libusbhid install SHLIBDIR=/usr/lib $(PMAKE) -C $(CURDIR)/lib/libusb install SHLIBDIR=/lib/$(DEB_HOST_MULTIARCH) LIBDIR=/usr/lib/$(DEB_HOST_MULTIARCH) $(PMAKE) -C $(CURDIR)/lib/libjail install SHLIBDIR=/lib $(PMAKE) -C $(CURDIR)/lib/libalias install SHLIBDIR=/usr/lib mkdir -p $(CURDIR)/debian/tmp/usr/bin install -m755 debian/libusb-config $(CURDIR)/debian/tmp/usr/bin endif mkdir -p $(CURDIR)/debian/tmp/usr/include/sys install -m644 sys/sys/sbuf.h $(CURDIR)/debian/tmp/usr/include/sys dh_install -a --list-missing --sourcedir=debian/tmp # Build architecture-independent files here. binary-indep: install-indep dh_testdir dh_testroot dh_installchangelogs -i dh_installdocs -i dh_link -i dh_compress -i dh_fixperms -i dh_installdeb -i dh_gencontrol -i dh_md5sums -i dh_builddeb -i # Build architecture-dependent files here. binary-arch: install-arch dh_testdir dh_testroot dh_installchangelogs -a dh_installdocs -a # dh_installexamples # dh_installinit # dh_installcron # dh_installinfo # dh_installman dh_link -a dh_strip -a dh_compress -a dh_fixperms -a # dh_perl # dh_python dh_makeshlibs -a ifeq ($(kernel), kfreebsd) dh_makeshlibs -plibgeom1 --add-udeb=libgeom1-udeb dh_makeshlibs -plibipx2 --add-udeb=libipx2-udeb dh_makeshlibs -plibsbuf6 --add-udeb=libsbuf6-udeb dh_makeshlibs -plibusb3 --add-udeb=libusb3-udeb endif dh_installdeb -a dh_shlibdeps -a dh_gencontrol -a dh_md5sums -a dh_builddeb -a binary: binary-arch binary-indep .PHONY: build clean binary-indep binary-arch binary install configure