From 02e36e91f8b46daa7da9bffff1ed1eb49c89d3eb Mon Sep 17 00:00:00 2001 From: Andrew Ruthven Date: Tue, 19 Feb 2019 09:26:12 +0000 Subject: [PATCH] Convert to a non-native Debian package --- Makefile | 106 ++++-- sapphire-remote-7.1/README.txt => README.txt | 0 common.postinst | 295 ---------------- debian/patches/dkms.diff | 314 ++++++++++++++++++ debian/patches/paths.diff | 4 +- .../{remove_rmmod => remove_rmmod.diff} | 4 +- debian/patches/series | 3 +- debian/rules | 3 - debian/sapphire-remote-dkms.install | 5 + debian/sapphire-remote.docs | 2 +- debian/sapphire-remote.install | 10 +- .../extract_keydefs.sh => extract_keydefs.sh | 0 .../keymap.default => keymap.default | 0 sapphire-remote-7.1/Makefile | 86 ----- sapphire-remote-7.1/dkms.conf | 12 - sapphire-remote-7.1/sapphire.c => sapphire.c | 0 sapphire-remote-7.1/sapphire.h => sapphire.h | 0 ...eymap.sh.part1 => sapphire_keymap.sh.part1 | 0 ...eymap.sh.part3 => sapphire_keymap.sh.part3 | 0 ...sapphire_startup.sh => sapphire_startup.sh | 0 20 files changed, 413 insertions(+), 431 deletions(-) rename sapphire-remote-7.1/README.txt => README.txt (100%) delete mode 100755 common.postinst create mode 100644 debian/patches/dkms.diff rename debian/patches/{remove_rmmod => remove_rmmod.diff} (89%) create mode 100644 debian/sapphire-remote-dkms.install rename sapphire-remote-7.1/extract_keydefs.sh => extract_keydefs.sh (100%) rename sapphire-remote-7.1/keymap.default => keymap.default (100%) delete mode 100644 sapphire-remote-7.1/Makefile delete mode 100644 sapphire-remote-7.1/dkms.conf rename sapphire-remote-7.1/sapphire.c => sapphire.c (100%) rename sapphire-remote-7.1/sapphire.h => sapphire.h (100%) rename sapphire-remote-7.1/sapphire_keymap.sh.part1 => sapphire_keymap.sh.part1 (100%) rename sapphire-remote-7.1/sapphire_keymap.sh.part3 => sapphire_keymap.sh.part3 (100%) rename sapphire-remote-7.1/sapphire_startup.sh => sapphire_startup.sh (100%) diff --git a/Makefile b/Makefile index 57e13d8..16d0e14 100644 --- a/Makefile +++ b/Makefile @@ -1,28 +1,86 @@ -#/usr/bin/make -SRC = $(DESTDIR)/usr/src -SHARE = $(DESTDIR)/usr/share/$(NAME)-dkms +# +# Makefile and (un-)Installer for Sapphire remote control driver, +# by Mark Lord 2012-2018. +# +MODNAME=sapphire +MODSOURCE=$(MODNAME).c +CONFLICTS=hid_topseed +BLACKLIST=/etc/modprobe.d/blacklist-$(CONFLICTS).conf +KEYMAP_SCRIPT=sapphire_keymap.sh +EXTRACT_KEYDEFS=extract_keydefs.sh +INPUT_H=$(shell [ -e /usr/include/linux/input-event-codes.h ] && echo /usr/include/linux/input-event-codes.h || echo /usr/include/linux/input.h) -all: +## MODPARMS is not used any more, but we have to nuke old copies to prevent issues: +MODPARMS=/etc/modprobe.d/$(MODNAME).conf + +CWD = $(shell pwd -P) +KVER ?= $(shell uname -r) +KDIR = /lib/modules/$(KVER) +obj-m += $(MODNAME).o + +#EXTRA_CFLAGS += -Werror + +default: $(INPUT_H) kmod $(KEYMAP_SCRIPT) + +$(INPUT_H): + @echo "ERROR: $@: not found." + @echo + @echo "Please install the system development libraries first." + @echo "Eg. on Ubuntu/Mint systems: sudo apt-get install build-essential" + @echo + @exit 1 + +kmod: + $(MAKE) -C $(KDIR)/build M=$(CWD) modules + +$(MODNAME).ko: $(MODSOURCE) $(MODNAME).h + $(MAKE) kmod + +$(KEYMAP_SCRIPT): $(INPUT_H) $(EXTRACT_KEYDEFS) $(KEYMAP_SCRIPT).part1 $(KEYMAP_SCRIPT).part3 $(MODNAME).h $(INPUT_H) + @bash -c "type -all gawk" >/dev/null 2>&1 || (\ + echo ;\ + echo "gawk not found, needed by installer; Aborted." ;\ + echo "For Ubuntu/Debian based systems, try this: sudo apt-get install gawk" ;\ + echo ;\ + exit 2 ;\ + ) + chmod 0755 $(EXTRACT_KEYDEFS) + ./$(EXTRACT_KEYDEFS) $(INPUT_H) $(MODNAME).h | cat $(KEYMAP_SCRIPT).part1 - $(KEYMAP_SCRIPT).part3 > $(KEYMAP_SCRIPT) + chmod 0755 $(KEYMAP_SCRIPT) + +$(BLACKLIST): + @echo "Creating $(BLACKLIST)" + @echo "## $(CONFLICTS) Conflicts with $(MODNAME) driver" > $(BLACKLIST) + @echo "blacklist $(CONFLICTS)" >> $(BLACKLIST) + +modinstall: $(MODNAME).ko $(KEYMAP_SCRIPT) + $(MAKE) -C $(KDIR)/build M=$(CWD) modules_install || exit 0 + @[ -e $(KDIR)/extra/sapphire.ko -o -e $(KDIR)/extra/sapphire.ko.gz -o -e $(KDIR)/extra/sapphire.ko.xz ] || exit 1 + depmod $(KVER) + @if [ "$(KVER)" = "$$(uname -r)" ]; then \ + rmmod $(MODNAME) 2>/dev/null ;\ + rmmod $(CONFLICTS) 2>/dev/null ;\ + ./sapphire_startup.sh ;\ + else \ + exit 0 ;\ + fi clean: + $(MAKE) -C $(KDIR)/build M=$(CWD) clean + -rm -f $(KEYMAP_SCRIPT) + +clean_modparms: + @if [ -e $(MODPARAMS) ]; then rm -f $(MODPARMS) ; fi ; exit 0 + +uninstall: clean clean_modparms + -rmmod $(MODNAME) + -rm -f $(BLACKLIST) + -rm -f /usr/local/bin/$(KEYMAP_SCRIPT) + -rm -f $(KDIR)/extra/$(MODNAME).ko + depmod + +install: $(MODNAME).ko clean_modparms modinstall $(BLACKLIST) $(KEYMAP_SCRIPT) + install -m 0755 $(KEYMAP_SCRIPT) /usr/local/bin/ + install -m 0755 sapphire_startup.sh /usr/local/bin/ -install: - -#source tree -ifeq ("$(wildcard $(NAME)-$(VERSION))", "$(NAME)-$(VERSION)") - install -d "$(SRC)" - cp -a $(NAME)-$(VERSION) $(SRC) - chmod 644 -R "$(SRC)/$(NAME)-$(VERSION)" -endif - -#tarball, possibly with binaries -ifeq ("$(wildcard $(NAME)-$(VERSION).dkms.tar.gz)", "$(NAME)-$(VERSION).dkms.tar.gz") - install -d "$(SHARE)" - install -m 644 $(NAME)-$(VERSION).dkms.tar.gz "$(SHARE)" -endif - -#postinst, only if we are supporting legacy mode -ifeq ("$(wildcard common.postinst)", "common.postinst") - install -d "$(SHARE)" - install -m 755 $(PREFIX)/usr/lib/dkms/common.postinst $(SHARE)/postinst -endif +all: install diff --git a/sapphire-remote-7.1/README.txt b/README.txt similarity index 100% rename from sapphire-remote-7.1/README.txt rename to README.txt diff --git a/common.postinst b/common.postinst deleted file mode 100755 index 0c8cfc1..0000000 --- a/common.postinst +++ /dev/null @@ -1,295 +0,0 @@ -#!/bin/sh -# Copyright (C) 2002-2005 Flavio Stanchina -# Copyright (C) 2005-2006 Aric Cyr -# Copyright (C) 2007 Mario Limonciello -# Copyright (C) 2009 Alberto Milone - -set -e - -uname_s=$(uname -s) - -_get_kernel_dir() { - KVER=$1 - case ${uname_s} in - Linux) DIR="/lib/modules/$KVER/build" ;; - GNU/kFreeBSD) DIR="/usr/src/kfreebsd-headers-$KVER/sys" ;; - esac - echo $DIR -} - -_check_kernel_dir() { - DIR=$(_get_kernel_dir $1) - case ${uname_s} in - Linux) test -e $DIR/include ;; - GNU/kFreeBSD) test -e $DIR/kern && test -e $DIR/conf/kmod.mk ;; - *) return 1 ;; - esac - return $? -} - -# Check the existence of a kernel named as $1 -_is_kernel_name_correct() { - CORRECT="no" - KERNEL_NAME=$1 - - for kernel in /boot/config-*; do - KERNEL=${kernel#*-} - if [ "${KERNEL}" = "${KERNEL_NAME}" ]; then - CORRECT="yes" - break - fi - done - - echo $CORRECT -} - - -# Get the most recent kernel on Debian based systems. This keeps -# into account both the version and the ABI. If the current kernel -# is the most recent kernel then the function will print a null string. -_get_newest_kernel_debian() { - NEWEST_KERNEL= - NEWEST_VERSION= - NEWEST_ABI= - - for kernel in /boot/config-*; do - KERNEL=${kernel#*-} - KERNEL_VERSION=${KERNEL%%-*} - ABI=${KERNEL#*-} - ABI=${ABI%%-*} - - if [ -z "$NEWEST_KERNEL" ]; then - # The 1st time get a version which is bigger than $1 - COMPARE_TO=$1 - else - # Get the biggest version - COMPARE_TO="$NEWEST_VERSION-$NEWEST_ABI" - fi - - # if $kernel is greater than $COMPARE_TO - if [ `dpkg --compare-versions "$KERNEL_VERSION-$ABI" gt "$COMPARE_TO" && echo "yes" || \ - echo "no"` = "yes" ]; then - NEWEST_KERNEL=$KERNEL - NEWEST_VERSION=$KERNEL_VERSION - NEWEST_ABI=$ABI - fi - done - - echo "$NEWEST_KERNEL" -} - -# Get the most recent kernel in Rhel based systems. If the current kernel -# is the most recent kernel then the function will print a null string. -_get_newest_kernel_rhel() { - NEWEST_KERNEL= - - LAST_INSTALLED_KERNEL=$(rpm -q --whatprovides kernel --last | grep kernel -m1 | cut -f1 -d' ') - - LIK_FORMATTED_NAME=$(rpm -q $LAST_INSTALLED_KERNEL --queryformat="%{VERSION}-%{RELEASE}.%{ARCH}\n") - - if [ `echo $LIK_FORMATTED_NAME | grep 2.6 >/dev/null` ]; then - # Fedora and Suse - NEWEST_KERNEL=$LIK_FORMATTED_NAME - else - # Hack for Mandriva where $LIK_FORMATTED_NAME is broken - LIK_NAME=$(rpm -q $LAST_INSTALLED_KERNEL --queryformat="%{NAME}\n") - LIK_TYPE=${LIK_NAME#kernel-} - LIK_TYPE=${LIK_TYPE%%-*} - LIK_STRIPPED=${LIK_NAME#kernel-} - LIK_STRIPPED=${LIK_STRIPPED#$LIK_TYPE-} - LIK_STRIPPED_BASE=${LIK_STRIPPED%%-*} - LIK_STRIPPED_END=${LIK_STRIPPED#$LIK_STRIPPED_BASE-} - LIK_FINAL=$LIK_STRIPPED_BASE-$LIK_TYPE-$LIK_STRIPPED_END - - NEWEST_KERNEL=$LIK_FINAL - fi - - echo $NEWEST_KERNEL -} - -# Get the newest kernel on Debian and Rhel based systems. -get_newest_kernel() { - NEWEST_KERNEL= - # Try Debian first as rpm can be installed in Debian based distros - if [ -e /usr/bin/dpkg ]; then - # If DEB based - CURRENT_KERNEL=$1 - CURRENT_VERSION=${CURRENT_KERNEL%%-*} - CURRENT_ABI=${CURRENT_KERNEL#*-} - CURRENT_FLAVOUR=${CURRENT_ABI#*-} - CURRENT_ABI=${CURRENT_ABI%%-*} - NEWEST_KERNEL=$(_get_newest_kernel_debian "$CURRENT_VERSION-$CURRENT_ABI") - - elif [ `which rpm >/dev/null` ]; then - # If RPM based - NEWEST_KERNEL=$(_get_newest_kernel_rhel) - fi - - # Make sure that kernel name that we extracted corresponds to an installed - # kernel - if [ -n "$NEWEST_KERNEL" ] && [ `_is_kernel_name_correct $NEWEST_KERNEL` = "no" ]; then - NEWEST_KERNEL= - fi - - echo $NEWEST_KERNEL -} - -NAME=$1 -VERSION=$2 -TARBALL_ROOT=$3 -ARCH=$4 -UPGRADE=$5 - -if [ -z "$NAME" ] || [ -z "$VERSION" ]; then - echo "Need NAME, and VERSION defined" - echo "ARCH is optional" - exit 1 -fi - -KERNELS=$(ls /lib/modules/ 2>/dev/null || true) -CURRENT_KERNEL=$(uname -r) - -#We never want to keep an older version side by side to prevent conflicts -if [ -e "/var/lib/dkms/$NAME/$VERSION" ]; then - echo "Removing old $NAME-$VERSION DKMS files..." - dkms remove -m $NAME -v $VERSION --all -fi - -#Load new files, by source package and by tarball -if [ -f "$TARBALL_ROOT/$NAME-$VERSION.dkms.tar.gz" ]; then - if ! dkms ldtarball --archive "$TARBALL_ROOT/$NAME-$VERSION.dkms.tar.gz"; then - echo "" - echo "" - echo "Unable to load DKMS tarball $TARBALL_ROOT/$NAME-$VERSION.dkms.tar.gz." - echo "Common causes include: " - echo " - You must be using DKMS 2.1.0.0 or later to support binaries only" - echo " distribution specific archives." - echo " - Corrupt distribution specific archive" - echo "" - echo "" - exit 2 - fi -elif [ -d "/usr/src/$NAME-$VERSION" ]; then - echo "Loading new $NAME-$VERSION DKMS files..." - dkms add -m $NAME -v $VERSION > /dev/null -fi - -# On 1st installation, let us look for a directory -# in /lib/modules which matches `uname -r`. If none -# is found it is possible that buildd is being used -# and that uname -r is giving us the name of the -# kernel used by the buildd machine. -# -# If this is the case we try to build the kernel -# module for each kernel which has a directory in -# /lib/modules. Furthermore we will have to tell -# DKMS which architecture it should build the module -# for (e.g. if the buildd machine is using a -# 2.6.24-23-xen 64bit kernel). -# -# NOTE: if the headers are not installed then the -# module won't be built, as usual -if [ -z "$UPGRADE" ]; then - echo "First Installation: checking all kernels..." - for KERNEL in $KERNELS; do - if [ ${KERNEL} = ${CURRENT_KERNEL} ]; then - # Kernel found - KERNELS=$CURRENT_KERNEL - break - fi - done -else - KERNELS=$CURRENT_KERNEL -fi - -# Here we look for the most recent kernel so that we can -# build the module for it (in addition to doing it for the -# current kernel. -NEWEST_KERNEL=$(get_newest_kernel "$KERNELS") - -# If the current kernel doesn't come from the host of a chroot -if [ `_is_kernel_name_correct $CURRENT_KERNEL` = "yes" ]; then - # See if it's worth building the module for both the newest kernel - # and for the current kernel - if [ -n "$NEWEST_KERNEL" ] && [ ${CURRENT_KERNEL} != ${NEWEST_KERNEL} ]; then - echo "Building for $CURRENT_KERNEL and $NEWEST_KERNEL" - KERNELS="$CURRENT_KERNEL $NEWEST_KERNEL" - else - echo "Building only for $CURRENT_KERNEL" - fi -# The current kernel is not useful as it's the host's -else - echo "It is likely that $CURRENT_KERNEL belongs to a chroot's host" - - # Let's use only the newest kernel - if [ -n "$NEWEST_KERNEL" ]; then - KERNELS="$NEWEST_KERNEL" - echo "Building only for $NEWEST_KERNEL" - fi -fi - -if [ -n "$ARCH" ]; then - if which lsb_release >/dev/null && [ $(lsb_release -s -i) = "Ubuntu" ]; then - case $ARCH in - amd64) - ARCH="x86_64" - ;; - lpia|i?86) - ARCH="i686" - ;; - esac - fi - echo "Building for architecture $ARCH" - ARCH="-a $ARCH" -fi - -for KERNEL in $KERNELS; do - dkms_status=`dkms status -m $NAME -v $VERSION -k $KERNEL $ARCH` - if [ `echo $KERNEL | grep -c "BOOT"` -gt 0 ]; then - echo "" - echo "Module build and install for $KERNEL was skipped as " - echo "it is a BOOT variant" - continue - fi - - - #if the module isn't yet built, try to build it - if [ `echo $dkms_status | grep -c ": built"` -eq 0 ]; then - if [ ! -L /var/lib/dkms/$NAME/$VERSION/source ]; then - echo "This package appears to be a binaries-only package" - echo " you will not be able to build against kernel $KERNEL" - echo " since the package source was not provided" - continue - fi - if _check_kernel_dir $KERNEL; then - echo "Building initial module for $KERNEL" - set +e - dkms build -m $NAME -v $VERSION -k $KERNEL $ARCH > /dev/null - case $? in - 9) - set -e - echo "Skipped." - continue - ;; - 0) - set -e - echo "Done." - ;; - *) - exit $? - ;; - esac - dkms_status=`dkms status -m $NAME -v $VERSION -k $KERNEL $ARCH` - else - echo "Module build for the currently running kernel was skipped since the" - echo "kernel source for this kernel does not seem to be installed." - fi - fi - - #if the module is built (either pre-built or just now), install it - if [ `echo $dkms_status | grep -c ": built"` -eq 1 ] && - [ `echo $dkms_status | grep -c ": installed"` -eq 0 ]; then - dkms install -m $NAME -v $VERSION -k $KERNEL $ARCH - fi -done - diff --git a/debian/patches/dkms.diff b/debian/patches/dkms.diff new file mode 100644 index 0000000..68e64bd --- /dev/null +++ b/debian/patches/dkms.diff @@ -0,0 +1,314 @@ +Files required for setting up DKMS. +--- /dev/null ++++ b/dkms.conf +@@ -0,0 +1,12 @@ ++PACKAGE_VERSION="7.1" ++ ++# Items below here should not have to change with each driver version ++PACKAGE_NAME="sapphire-remote" ++MAKE[0]="make -C ${kernel_source_dir} SUBDIRS=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build modules" ++CLEAN="make -C ${kernel_source_dir} SUBDIRS=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build clean" ++ ++BUILT_MODULE_NAME[0]="sapphire" ++DEST_MODULE_LOCATION[0]="/extra/" ++ ++AUTOINSTALL=yes ++REMAKE_INITRD=no +--- /dev/null ++++ b/postinst +@@ -0,0 +1,295 @@ ++#!/bin/sh ++# Copyright (C) 2002-2005 Flavio Stanchina ++# Copyright (C) 2005-2006 Aric Cyr ++# Copyright (C) 2007 Mario Limonciello ++# Copyright (C) 2009 Alberto Milone ++ ++set -e ++ ++uname_s=$(uname -s) ++ ++_get_kernel_dir() { ++ KVER=$1 ++ case ${uname_s} in ++ Linux) DIR="/lib/modules/$KVER/build" ;; ++ GNU/kFreeBSD) DIR="/usr/src/kfreebsd-headers-$KVER/sys" ;; ++ esac ++ echo $DIR ++} ++ ++_check_kernel_dir() { ++ DIR=$(_get_kernel_dir $1) ++ case ${uname_s} in ++ Linux) test -e $DIR/include ;; ++ GNU/kFreeBSD) test -e $DIR/kern && test -e $DIR/conf/kmod.mk ;; ++ *) return 1 ;; ++ esac ++ return $? ++} ++ ++# Check the existence of a kernel named as $1 ++_is_kernel_name_correct() { ++ CORRECT="no" ++ KERNEL_NAME=$1 ++ ++ for kernel in /boot/config-*; do ++ KERNEL=${kernel#*-} ++ if [ "${KERNEL}" = "${KERNEL_NAME}" ]; then ++ CORRECT="yes" ++ break ++ fi ++ done ++ ++ echo $CORRECT ++} ++ ++ ++# Get the most recent kernel on Debian based systems. This keeps ++# into account both the version and the ABI. If the current kernel ++# is the most recent kernel then the function will print a null string. ++_get_newest_kernel_debian() { ++ NEWEST_KERNEL= ++ NEWEST_VERSION= ++ NEWEST_ABI= ++ ++ for kernel in /boot/config-*; do ++ KERNEL=${kernel#*-} ++ KERNEL_VERSION=${KERNEL%%-*} ++ ABI=${KERNEL#*-} ++ ABI=${ABI%%-*} ++ ++ if [ -z "$NEWEST_KERNEL" ]; then ++ # The 1st time get a version which is bigger than $1 ++ COMPARE_TO=$1 ++ else ++ # Get the biggest version ++ COMPARE_TO="$NEWEST_VERSION-$NEWEST_ABI" ++ fi ++ ++ # if $kernel is greater than $COMPARE_TO ++ if [ `dpkg --compare-versions "$KERNEL_VERSION-$ABI" gt "$COMPARE_TO" && echo "yes" || \ ++ echo "no"` = "yes" ]; then ++ NEWEST_KERNEL=$KERNEL ++ NEWEST_VERSION=$KERNEL_VERSION ++ NEWEST_ABI=$ABI ++ fi ++ done ++ ++ echo "$NEWEST_KERNEL" ++} ++ ++# Get the most recent kernel in Rhel based systems. If the current kernel ++# is the most recent kernel then the function will print a null string. ++_get_newest_kernel_rhel() { ++ NEWEST_KERNEL= ++ ++ LAST_INSTALLED_KERNEL=$(rpm -q --whatprovides kernel --last | grep kernel -m1 | cut -f1 -d' ') ++ ++ LIK_FORMATTED_NAME=$(rpm -q $LAST_INSTALLED_KERNEL --queryformat="%{VERSION}-%{RELEASE}.%{ARCH}\n") ++ ++ if [ `echo $LIK_FORMATTED_NAME | grep 2.6 >/dev/null` ]; then ++ # Fedora and Suse ++ NEWEST_KERNEL=$LIK_FORMATTED_NAME ++ else ++ # Hack for Mandriva where $LIK_FORMATTED_NAME is broken ++ LIK_NAME=$(rpm -q $LAST_INSTALLED_KERNEL --queryformat="%{NAME}\n") ++ LIK_TYPE=${LIK_NAME#kernel-} ++ LIK_TYPE=${LIK_TYPE%%-*} ++ LIK_STRIPPED=${LIK_NAME#kernel-} ++ LIK_STRIPPED=${LIK_STRIPPED#$LIK_TYPE-} ++ LIK_STRIPPED_BASE=${LIK_STRIPPED%%-*} ++ LIK_STRIPPED_END=${LIK_STRIPPED#$LIK_STRIPPED_BASE-} ++ LIK_FINAL=$LIK_STRIPPED_BASE-$LIK_TYPE-$LIK_STRIPPED_END ++ ++ NEWEST_KERNEL=$LIK_FINAL ++ fi ++ ++ echo $NEWEST_KERNEL ++} ++ ++# Get the newest kernel on Debian and Rhel based systems. ++get_newest_kernel() { ++ NEWEST_KERNEL= ++ # Try Debian first as rpm can be installed in Debian based distros ++ if [ -e /usr/bin/dpkg ]; then ++ # If DEB based ++ CURRENT_KERNEL=$1 ++ CURRENT_VERSION=${CURRENT_KERNEL%%-*} ++ CURRENT_ABI=${CURRENT_KERNEL#*-} ++ CURRENT_FLAVOUR=${CURRENT_ABI#*-} ++ CURRENT_ABI=${CURRENT_ABI%%-*} ++ NEWEST_KERNEL=$(_get_newest_kernel_debian "$CURRENT_VERSION-$CURRENT_ABI") ++ ++ elif [ `which rpm >/dev/null` ]; then ++ # If RPM based ++ NEWEST_KERNEL=$(_get_newest_kernel_rhel) ++ fi ++ ++ # Make sure that kernel name that we extracted corresponds to an installed ++ # kernel ++ if [ -n "$NEWEST_KERNEL" ] && [ `_is_kernel_name_correct $NEWEST_KERNEL` = "no" ]; then ++ NEWEST_KERNEL= ++ fi ++ ++ echo $NEWEST_KERNEL ++} ++ ++NAME=$1 ++VERSION=$2 ++TARBALL_ROOT=$3 ++ARCH=$4 ++UPGRADE=$5 ++ ++if [ -z "$NAME" ] || [ -z "$VERSION" ]; then ++ echo "Need NAME, and VERSION defined" ++ echo "ARCH is optional" ++ exit 1 ++fi ++ ++KERNELS=$(ls /lib/modules/ 2>/dev/null || true) ++CURRENT_KERNEL=$(uname -r) ++ ++#We never want to keep an older version side by side to prevent conflicts ++if [ -e "/var/lib/dkms/$NAME/$VERSION" ]; then ++ echo "Removing old $NAME-$VERSION DKMS files..." ++ dkms remove -m $NAME -v $VERSION --all ++fi ++ ++#Load new files, by source package and by tarball ++if [ -f "$TARBALL_ROOT/$NAME-$VERSION.dkms.tar.gz" ]; then ++ if ! dkms ldtarball --archive "$TARBALL_ROOT/$NAME-$VERSION.dkms.tar.gz"; then ++ echo "" ++ echo "" ++ echo "Unable to load DKMS tarball $TARBALL_ROOT/$NAME-$VERSION.dkms.tar.gz." ++ echo "Common causes include: " ++ echo " - You must be using DKMS 2.1.0.0 or later to support binaries only" ++ echo " distribution specific archives." ++ echo " - Corrupt distribution specific archive" ++ echo "" ++ echo "" ++ exit 2 ++ fi ++elif [ -d "/usr/src/$NAME-$VERSION" ]; then ++ echo "Loading new $NAME-$VERSION DKMS files..." ++ dkms add -m $NAME -v $VERSION > /dev/null ++fi ++ ++# On 1st installation, let us look for a directory ++# in /lib/modules which matches `uname -r`. If none ++# is found it is possible that buildd is being used ++# and that uname -r is giving us the name of the ++# kernel used by the buildd machine. ++# ++# If this is the case we try to build the kernel ++# module for each kernel which has a directory in ++# /lib/modules. Furthermore we will have to tell ++# DKMS which architecture it should build the module ++# for (e.g. if the buildd machine is using a ++# 2.6.24-23-xen 64bit kernel). ++# ++# NOTE: if the headers are not installed then the ++# module won't be built, as usual ++if [ -z "$UPGRADE" ]; then ++ echo "First Installation: checking all kernels..." ++ for KERNEL in $KERNELS; do ++ if [ ${KERNEL} = ${CURRENT_KERNEL} ]; then ++ # Kernel found ++ KERNELS=$CURRENT_KERNEL ++ break ++ fi ++ done ++else ++ KERNELS=$CURRENT_KERNEL ++fi ++ ++# Here we look for the most recent kernel so that we can ++# build the module for it (in addition to doing it for the ++# current kernel. ++NEWEST_KERNEL=$(get_newest_kernel "$KERNELS") ++ ++# If the current kernel doesn't come from the host of a chroot ++if [ `_is_kernel_name_correct $CURRENT_KERNEL` = "yes" ]; then ++ # See if it's worth building the module for both the newest kernel ++ # and for the current kernel ++ if [ -n "$NEWEST_KERNEL" ] && [ ${CURRENT_KERNEL} != ${NEWEST_KERNEL} ]; then ++ echo "Building for $CURRENT_KERNEL and $NEWEST_KERNEL" ++ KERNELS="$CURRENT_KERNEL $NEWEST_KERNEL" ++ else ++ echo "Building only for $CURRENT_KERNEL" ++ fi ++# The current kernel is not useful as it's the host's ++else ++ echo "It is likely that $CURRENT_KERNEL belongs to a chroot's host" ++ ++ # Let's use only the newest kernel ++ if [ -n "$NEWEST_KERNEL" ]; then ++ KERNELS="$NEWEST_KERNEL" ++ echo "Building only for $NEWEST_KERNEL" ++ fi ++fi ++ ++if [ -n "$ARCH" ]; then ++ if which lsb_release >/dev/null && [ $(lsb_release -s -i) = "Ubuntu" ]; then ++ case $ARCH in ++ amd64) ++ ARCH="x86_64" ++ ;; ++ lpia|i?86) ++ ARCH="i686" ++ ;; ++ esac ++ fi ++ echo "Building for architecture $ARCH" ++ ARCH="-a $ARCH" ++fi ++ ++for KERNEL in $KERNELS; do ++ dkms_status=`dkms status -m $NAME -v $VERSION -k $KERNEL $ARCH` ++ if [ `echo $KERNEL | grep -c "BOOT"` -gt 0 ]; then ++ echo "" ++ echo "Module build and install for $KERNEL was skipped as " ++ echo "it is a BOOT variant" ++ continue ++ fi ++ ++ ++ #if the module isn't yet built, try to build it ++ if [ `echo $dkms_status | grep -c ": built"` -eq 0 ]; then ++ if [ ! -L /var/lib/dkms/$NAME/$VERSION/source ]; then ++ echo "This package appears to be a binaries-only package" ++ echo " you will not be able to build against kernel $KERNEL" ++ echo " since the package source was not provided" ++ continue ++ fi ++ if _check_kernel_dir $KERNEL; then ++ echo "Building initial module for $KERNEL" ++ set +e ++ dkms build -m $NAME -v $VERSION -k $KERNEL $ARCH > /dev/null ++ case $? in ++ 9) ++ set -e ++ echo "Skipped." ++ continue ++ ;; ++ 0) ++ set -e ++ echo "Done." ++ ;; ++ *) ++ exit $? ++ ;; ++ esac ++ dkms_status=`dkms status -m $NAME -v $VERSION -k $KERNEL $ARCH` ++ else ++ echo "Module build for the currently running kernel was skipped since the" ++ echo "kernel source for this kernel does not seem to be installed." ++ fi ++ fi ++ ++ #if the module is built (either pre-built or just now), install it ++ if [ `echo $dkms_status | grep -c ": built"` -eq 1 ] && ++ [ `echo $dkms_status | grep -c ": installed"` -eq 0 ]; then ++ dkms install -m $NAME -v $VERSION -k $KERNEL $ARCH ++ fi ++done ++ diff --git a/debian/patches/paths.diff b/debian/patches/paths.diff index 35e075a..50d1701 100644 --- a/debian/patches/paths.diff +++ b/debian/patches/paths.diff @@ -1,6 +1,6 @@ Set the path that we're installing to. ---- a/sapphire-remote-7.1/sapphire_startup.sh -+++ b/sapphire-remote-7.1/sapphire_startup.sh +--- a/sapphire_startup.sh ++++ b/sapphire_startup.sh @@ -37,5 +37,5 @@ fi fi diff --git a/debian/patches/remove_rmmod b/debian/patches/remove_rmmod.diff similarity index 89% rename from debian/patches/remove_rmmod rename to debian/patches/remove_rmmod.diff index ea57f75..e61c572 100644 --- a/debian/patches/remove_rmmod +++ b/debian/patches/remove_rmmod.diff @@ -4,8 +4,8 @@ bound, then move them over to sapphire. I was running into a problem where after unloading hid_topseed, when I loaded sapphire the remote wasn't being registered with sapphire until I unplugged it and plugged it back it. ---- a/sapphire-remote-7.1/sapphire_startup.sh -+++ b/sapphire-remote-7.1/sapphire_startup.sh +--- a/sapphire_startup.sh ++++ b/sapphire_startup.sh @@ -8,8 +8,9 @@ # TOPSEED=/sys/bus/hid/drivers/topseed diff --git a/debian/patches/series b/debian/patches/series index 1963f0a..64c6d4c 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,2 +1,3 @@ paths.diff -remove_rmmod +remove_rmmod.diff +dkms.diff diff --git a/debian/rules b/debian/rules index 6502f24..3aed04d 100755 --- a/debian/rules +++ b/debian/rules @@ -18,14 +18,12 @@ build: build-stamp build-stamp: configure-stamp dh_testdir - $(MAKE) touch $@ clean: dh_testdir dh_testroot rm -f build-stamp configure-stamp - -$(MAKE) clean dh_clean install: build @@ -38,7 +36,6 @@ install: build dh_systemd_enable dh_installdocs dh_installchangelogs - $(MAKE) DESTDIR=$(CURDIR)/debian/$(DEB_NAME)-dkms NAME=$(NAME) VERSION=$(VERSION) install binary-arch: build install diff --git a/debian/sapphire-remote-dkms.install b/debian/sapphire-remote-dkms.install new file mode 100644 index 0000000..62562ab --- /dev/null +++ b/debian/sapphire-remote-dkms.install @@ -0,0 +1,5 @@ +dkms.conf /usr/src/sapphire-remote-7.1 +Makefile /usr/src/sapphire-remote-7.1 +sapphire.c /usr/src/sapphire-remote-7.1 +sapphire.h /usr/src/sapphire-remote-7.1 +postinst /usr/share/sapphire-remote-dkms diff --git a/debian/sapphire-remote.docs b/debian/sapphire-remote.docs index 5586e4f..682db75 100644 --- a/debian/sapphire-remote.docs +++ b/debian/sapphire-remote.docs @@ -1 +1 @@ -sapphire-remote-7.1/README.txt +README.txt diff --git a/debian/sapphire-remote.install b/debian/sapphire-remote.install index 2b88d2f..47b1680 100755 --- a/debian/sapphire-remote.install +++ b/debian/sapphire-remote.install @@ -1,7 +1,7 @@ #!/usr/bin/dh-exec -sapphire-remote-7.1/extract_keydefs.sh => /usr/lib/sapphire-remote/extract_keydefs.sh -sapphire-remote-7.1/sapphire_keymap.sh.part1 => /usr/lib/sapphire-remote/sapphire_keymap.sh.part1 -sapphire-remote-7.1/sapphire_keymap.sh.part3 => /usr/lib/sapphire-remote/sapphire_keymap.sh.part3 -sapphire-remote-7.1/sapphire_startup.sh => /usr/lib/sapphire-remote/sapphire_startup.sh -sapphire-remote-7.1/keymap.default => /etc/sapphire.keymap +extract_keydefs.sh => /usr/lib/sapphire-remote/extract_keydefs.sh +sapphire_keymap.sh.part1 => /usr/lib/sapphire-remote/sapphire_keymap.sh.part1 +sapphire_keymap.sh.part3 => /usr/lib/sapphire-remote/sapphire_keymap.sh.part3 +sapphire_startup.sh => /usr/lib/sapphire-remote/sapphire_startup.sh +keymap.default => /etc/sapphire.keymap diff --git a/sapphire-remote-7.1/extract_keydefs.sh b/extract_keydefs.sh similarity index 100% rename from sapphire-remote-7.1/extract_keydefs.sh rename to extract_keydefs.sh diff --git a/sapphire-remote-7.1/keymap.default b/keymap.default similarity index 100% rename from sapphire-remote-7.1/keymap.default rename to keymap.default diff --git a/sapphire-remote-7.1/Makefile b/sapphire-remote-7.1/Makefile deleted file mode 100644 index 16d0e14..0000000 --- a/sapphire-remote-7.1/Makefile +++ /dev/null @@ -1,86 +0,0 @@ -# -# Makefile and (un-)Installer for Sapphire remote control driver, -# by Mark Lord 2012-2018. -# -MODNAME=sapphire -MODSOURCE=$(MODNAME).c -CONFLICTS=hid_topseed -BLACKLIST=/etc/modprobe.d/blacklist-$(CONFLICTS).conf -KEYMAP_SCRIPT=sapphire_keymap.sh -EXTRACT_KEYDEFS=extract_keydefs.sh -INPUT_H=$(shell [ -e /usr/include/linux/input-event-codes.h ] && echo /usr/include/linux/input-event-codes.h || echo /usr/include/linux/input.h) - -## MODPARMS is not used any more, but we have to nuke old copies to prevent issues: -MODPARMS=/etc/modprobe.d/$(MODNAME).conf - -CWD = $(shell pwd -P) -KVER ?= $(shell uname -r) -KDIR = /lib/modules/$(KVER) -obj-m += $(MODNAME).o - -#EXTRA_CFLAGS += -Werror - -default: $(INPUT_H) kmod $(KEYMAP_SCRIPT) - -$(INPUT_H): - @echo "ERROR: $@: not found." - @echo - @echo "Please install the system development libraries first." - @echo "Eg. on Ubuntu/Mint systems: sudo apt-get install build-essential" - @echo - @exit 1 - -kmod: - $(MAKE) -C $(KDIR)/build M=$(CWD) modules - -$(MODNAME).ko: $(MODSOURCE) $(MODNAME).h - $(MAKE) kmod - -$(KEYMAP_SCRIPT): $(INPUT_H) $(EXTRACT_KEYDEFS) $(KEYMAP_SCRIPT).part1 $(KEYMAP_SCRIPT).part3 $(MODNAME).h $(INPUT_H) - @bash -c "type -all gawk" >/dev/null 2>&1 || (\ - echo ;\ - echo "gawk not found, needed by installer; Aborted." ;\ - echo "For Ubuntu/Debian based systems, try this: sudo apt-get install gawk" ;\ - echo ;\ - exit 2 ;\ - ) - chmod 0755 $(EXTRACT_KEYDEFS) - ./$(EXTRACT_KEYDEFS) $(INPUT_H) $(MODNAME).h | cat $(KEYMAP_SCRIPT).part1 - $(KEYMAP_SCRIPT).part3 > $(KEYMAP_SCRIPT) - chmod 0755 $(KEYMAP_SCRIPT) - -$(BLACKLIST): - @echo "Creating $(BLACKLIST)" - @echo "## $(CONFLICTS) Conflicts with $(MODNAME) driver" > $(BLACKLIST) - @echo "blacklist $(CONFLICTS)" >> $(BLACKLIST) - -modinstall: $(MODNAME).ko $(KEYMAP_SCRIPT) - $(MAKE) -C $(KDIR)/build M=$(CWD) modules_install || exit 0 - @[ -e $(KDIR)/extra/sapphire.ko -o -e $(KDIR)/extra/sapphire.ko.gz -o -e $(KDIR)/extra/sapphire.ko.xz ] || exit 1 - depmod $(KVER) - @if [ "$(KVER)" = "$$(uname -r)" ]; then \ - rmmod $(MODNAME) 2>/dev/null ;\ - rmmod $(CONFLICTS) 2>/dev/null ;\ - ./sapphire_startup.sh ;\ - else \ - exit 0 ;\ - fi - -clean: - $(MAKE) -C $(KDIR)/build M=$(CWD) clean - -rm -f $(KEYMAP_SCRIPT) - -clean_modparms: - @if [ -e $(MODPARAMS) ]; then rm -f $(MODPARMS) ; fi ; exit 0 - -uninstall: clean clean_modparms - -rmmod $(MODNAME) - -rm -f $(BLACKLIST) - -rm -f /usr/local/bin/$(KEYMAP_SCRIPT) - -rm -f $(KDIR)/extra/$(MODNAME).ko - depmod - -install: $(MODNAME).ko clean_modparms modinstall $(BLACKLIST) $(KEYMAP_SCRIPT) - install -m 0755 $(KEYMAP_SCRIPT) /usr/local/bin/ - install -m 0755 sapphire_startup.sh /usr/local/bin/ - -all: install diff --git a/sapphire-remote-7.1/dkms.conf b/sapphire-remote-7.1/dkms.conf deleted file mode 100644 index 1217b3e..0000000 --- a/sapphire-remote-7.1/dkms.conf +++ /dev/null @@ -1,12 +0,0 @@ -PACKAGE_VERSION="7.1" - -# Items below here should not have to change with each driver version -PACKAGE_NAME="sapphire-remote" -MAKE[0]="make -C ${kernel_source_dir} SUBDIRS=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build modules" -CLEAN="make -C ${kernel_source_dir} SUBDIRS=${dkms_tree}/${PACKAGE_NAME}/${PACKAGE_VERSION}/build clean" - -BUILT_MODULE_NAME[0]="sapphire" -DEST_MODULE_LOCATION[0]="/extra/" - -AUTOINSTALL=yes -REMAKE_INITRD=no diff --git a/sapphire-remote-7.1/sapphire.c b/sapphire.c similarity index 100% rename from sapphire-remote-7.1/sapphire.c rename to sapphire.c diff --git a/sapphire-remote-7.1/sapphire.h b/sapphire.h similarity index 100% rename from sapphire-remote-7.1/sapphire.h rename to sapphire.h diff --git a/sapphire-remote-7.1/sapphire_keymap.sh.part1 b/sapphire_keymap.sh.part1 similarity index 100% rename from sapphire-remote-7.1/sapphire_keymap.sh.part1 rename to sapphire_keymap.sh.part1 diff --git a/sapphire-remote-7.1/sapphire_keymap.sh.part3 b/sapphire_keymap.sh.part3 similarity index 100% rename from sapphire-remote-7.1/sapphire_keymap.sh.part3 rename to sapphire_keymap.sh.part3 diff --git a/sapphire-remote-7.1/sapphire_startup.sh b/sapphire_startup.sh similarity index 100% rename from sapphire-remote-7.1/sapphire_startup.sh rename to sapphire_startup.sh -- 2.30.2