#! /usr/bin/make -f # Name of package package = kernmod # KSRC is the location of the kernel source. This is the default value, # when make-kpkg is used it will supply to real value KSRC = /usr/src/linux # KDREV is the package-revision, as given to make-kpkg by the user. # Just put a simply default value in here which we use when we test # the packagebuilding without make-kpkg ifeq ($(strip $(KDREV)),) KDREV = "test1.0" endif ## Now to determine the kernel version, normally supplied by make-kpkg ifeq ($(strip $(KVERS)),) # Now we need to get the kernel-version somehow (we are not running # under make-kpkg?) ifeq ($(strip $(KSRC)),) $(error Error. I do not know how to determine the kernel version) else kversion :=$(shell egrep '^VERSION +=' $(KSRC)/Makefile 2>/dev/null | \ sed -e 's/[^0-9]*\([0-9]*\)/\1/') kplevel :=$(shell egrep '^PATCHLEVEL +=' $(KSRC)/Makefile 2>/dev/null | \ sed -e 's/[^0-9]*\([0-9]*\)/\1/') ksublevel:=$(shell egrep '^SUBLEVEL +=' $(KSRC)/Makefile 2>/dev/null | \ sed -e 's/[^0-9]*\([0-9]*\)/\1/') EXTRA_VERSION:=$(shell egrep '^EXTRAVERSION +=' $(KSRC)/Makefile 2>/dev/null | \ sed -e 's/EXTRAVERSION[\t ]*=[\t ]*\(.*\)/\1/') kextra:=$(strip $(EXTRA_VERSION)) HAVE_NEW_MODLIB:=$(shell egrep '\(INSTALL_MOD_PATH\)' \ $(KSRC)/Makefile 2>/dev/null ) # If you want to have more than one kernel configuration per kernel # version, set FLAVOUR in the top level kernel Makefile *before* # invoking make-kpkg -- it will be appended to UTS_RELEASE in # version.h (separated by a hyphen). This affects everything -- the # names and versions of the image, source, headers, and doc packages, # and where the modules are searched for in /lib/modules. ifdef FLAVOUR # uhm - should check if we really have a Makefile capable of Flavours? endif FLAVOUR:=$(shell grep ^FLAVOUR $(KSRC)/Makefile 2>/dev/null | \ perl -ple 's/FLAVOUR[\s:=]+//g') ifneq ($(strip $(FLAVOUR)),) INT_FLAV := -$(FLAVOUR) FLAV_ARG := FLAVOUR=$(FLAVOUR) else INT_FLAV := FLAV_ARG := endif ## This is the replacement for FLAVOUR ifneq ($(strip $(APPEND_TO_VERSION)),) iatv := $(strip $(APPEND_TO_VERSION)) EXTRAV_ARG := EXTRAVERSION=${EXTRA_VERSION}${iatv} else iatv := EXTRAV_ARG := endif KVERS = $(kversion).$(kplevel).$(ksublevel)$(kextra)$(iatv)$(INT_FLAV) endif endif non_epoch_version=$(shell echo $(KVERS) | perl -pe 's/^\d+://') epoch=$(shell echo $(KVERS) | perl -ne 'm/^(\d+:)/ && print $$1') # We also need the package version pversion = $(shell sed -ne '1s/.*\((.*)\).*/\1/' debian/changelog) # MODDIR is the place where the final .deb package should be made. This is the # default value, when make-kpkg is used it will supply to real value MODDIR = .. # Lets define the standard targets first .PHONY: binary binary: binary-indep binary-arch # Please note that I've put binary-common with binary-indep here. For # package where binaries are in binary-common this should be moved to # binary-arch .PHONY: binary-indep binary-indep: binary-source binary-common # For binary-arch we do nothing so autobuilder don't try to build the # kernel modules. .PHONY: binary-arch binary-arch: # The kdist_configure target is called by make-kpkg modules_config. It # should configure the module so it is ready for compilation (mostly # useful for calling configure) .PHONY: kdist_config kdist_config: @echo Nothing to configure # the kdist_image target is called by make-kpkg modules_image. It is # responsible for compiling the module and creating the package. It # should also clean up after making the module. Please note we use a # seperate binary-modules target to make testing the package building # easier .PHONY: kdist_image kdist_image: $(MAKE) $(MFLAGS) debian/rules binary-modules $(MAKE) $(MFLAGS) debian/rules clean # the kdist_clean target is called by make-kpkg modules_clean. It is # responsible for cleaning up any changes that have been made by the # other kdist_commands (except for the .deb files created). .PHONY: kdist_clean kdist_clean: $(MAKE) $(MFLAGS) debian/rules clean # the binary-source target creates the kernmod-source package. It does # this by copying the entire package source into debian/tmp and running # clean in the copy .PHONY: binary-source binary-source: # Perform some simple tests test -f debian/rules test `id -u` = 0 # Initialize some things -rm -rf debian/tmp debian/substvars install -d -m 755 -o root -g root debian/tmp # Copy the entire source to the proper location install -d -m 755 -o root -g root debian/tmp/usr/src/modules/$(package) find . \( -name \*.o -path ./debian/tmp \) -prune -o print | \ cpio -admp debian/tmp/usr/src/modules/$(package) ( cd debian/tmp/usr/src/modules/$(package) ; \ $(MAKE) $(MFLAGS) -f debian/rules clean ) # Install the usual stuff now. Note that we symlink the doc-directory # to the kernmod-modules directory so we have all the docs in a single # place. install -d -m 755 -o root -g root debian/tmp/usr/doc ln -s $(package)-modules debian/tmp/usr/doc/$(package)-source install -d -m 755 -o root -g root debian/tmp/DEBIAN install -p -m 644 -o root -g root debian/control debian/tmp/DEBIAN/ # Generate the package find debian/tmp -type f | grep -v "./DEBIAN" | xargs md5sum | \ sed -e 's#debian/tmp/##' > debian/tmp/DEBIAN/md5sums dpkg-gencontrol -p$(package)-source dpkg --build debian/tmp .. # the binary-common target creates the kernmod-common package. .PHONY: binary-common binary-common: # Perform some simple tests test -f debian/rules test `id -u` = 0 # Initialize some things -rm -rf debian/tmp debian/substvars install -d -m 755 -o root -g root debian/tmp @echo TODO: put everything you want to put in the kernmod-common @echo package in here # Generate the package find debian/tmp -type f | grep -v "./DEBIAN" | xargs md5sum | \ sed -e 's#debian/tmp/##' > debian/tmp/DEBIAN/md5sums dpkg-gencontrol -p$(package)-common dpkg --build debian/tmp .. # the binary-modules target creates the kernmod-modules-XXX package. .PHONY: binary-modules binary-modules: # Perform some simple tests test -f debian/rules test `id -u` = 0 # Initialize some things -rm -rf debian/tmp debian/substvars install -d -m 755 -o root -g root debian/tmp @echo TODO: put everything you want to put in the kernmod-modules @echo package in here # Generate the package echo "kpkg:Package-Version=$(epoch)$(pversion)+$(non_epoch_version)" \ >> debian/substvars echo "kpkg:Kernel-Version=$(KVERS)" >> debian/substvars find debian/tmp -type f | grep -v "./DEBIAN" | xargs md5sum | \ sed -e 's#debian/tmp/##' > debian/tmp/DEBIAN/md5sums dpkg-gencontrol -p$(package)-modules-$(non_epoch_version) \ -v$(epoch)$(pversion)+$(non_epoch_version) dpkg --build debian/tmp ..