# If kversion isn't defined on the rpmbuild line, define it here. %if 0%{!?kversion:1} || "%{?kversion}" == "" %define kversion 3.10.0-693.5.2.el7.%{_target_cpu} %endif # e.g.: wacom_w8001.ko %define skip_existed_modules %{nil} %define skip_existed_modules 0 # e.g.: hid-wacom.ko %define skip_other_modules %{nil} %define skip_other_modules 0 # The kABI package contains information pertaining to the CentOS # Linux kernel ABI, including lists of kernel symbols that are # needed by external Linux kernel modules, and a yum plugin to aid # enforcement. %define support_kernel_abi_whitelists %{nil} %define support_kernel_abi_whitelists 1 %define support_kernel_plus_abi_whitelists %{nil} %define support_kernel_plus_abi_whitelists 0 # Update kernel requirements in the kmodtool script. %define update_kmodtool %{nil} %define update_kmodtool 1 # Define the kmod package name here. %define kmod_name wacom %define source_name input-%{kmod_name} # Disable the building of the debug package(s). %define debug_package %{nil} %define kmod_package kmod %if 0%{?rhel} && 0%{?rhel} <= 6 %define kmod_package module-init-tools %endif %define doc_license %{nil} %define doc_license 1 %if 0%{?rhel}%{?fedora} %if 0%{?rhel} %if 0%{?rhel} < 7 %define doc_license 0 %endif %else %if 0%{?fedora} < 19 %define doc_license 0 %endif %endif %endif %define license_files COPYING Name: %{kmod_name}-kmod Version: 0.37.1 Release: 4%{?dist} Group: System Environment/Kernel License: GPLv2 Summary: %{kmod_name} kernel module(s) #URL: https://downloads.sourceforge.net/linuxwacom/ #URL: http://linuxwacom.sourceforge.net/wiki/index.php/Input-wacom URL: https://github.com/linuxwacom/input-wacom/wiki/Installing-input-wacom-from-source # Sources. #Source0: https://downloads.sourceforge.net/linuxwacom/%{source_name}-%{version}.tar.bz2 Source0: https://github.com/linuxwacom/%{source_name}/archive/%{source_name}-%{version}.tar.gz#/%{source_name}-%{version}.tar.gz # Obsoleted - use COPYING instead. Source5: GPL-v2.0.txt Source10: kmodtool-%{kmod_name}-el7.sh ExclusiveArch: x86_64 BuildRequires: perl BuildRequires: redhat-rpm-config BuildRequires: rpm BuildRequires: coreutils BuildRequires: findutils BuildRequires: grep BuildRequires: sed BuildRequires: bash BuildRequires: make BuildRequires: gcc-c++ BuildRequires: pkgconfig BuildRequires: automake BuildRequires: autoconf BuildRequires: libtool BuildRequires: gettext BuildRequires: kernel-devel BuildRequires: %{kmod_package} # https://blog.laimbock.com/2013/11/12/rhel-kernel-abi-reference-files-not-found/ #BuildRequires: kabi-whitelists %if 0%{?support_kernel_abi_whitelists} BuildRequires: kernel-abi-whitelists %endif %if 0%{?support_kernel_plus_abi_whitelists} BuildRequires: kernel-plus-abi-whitelists %endif # Use built-in kmodtool script #BuildRequires: kmodtool Requires: %{kmod_package} # Magic hidden here. %if 0%{?update_kmodtool} # Update kernel requirements in the kmodtool script. %define kversion_required_base %( echo "%{kversion}" 2>/dev/null | grep -Eo '^[^-]+-[0-9]+' 2>/dev/null ) %define kversion_required_postfix %( echo "%{kversion}" 2>/dev/null | grep -Eo '\\.[^0-9-]+[^.]*(\\.[^.-]+)*$' 2>/dev/null ) %define kversion_required_distro %( echo "%{kversion_required_postfix}" 2>/dev/null | sed -re 's/^(.+)\\.[^.]+$/\\1/' 2>/dev/null ) %define kversion_required %{?kversion_required_base}%{?kversion_required_distro} %{expand:%( kmodtool_temp="$( mktemp "%{_builddir}/kmodtool-%{kmod_name}-el7.sh.XXXXXX" )" >/dev/null 2>&1 ; %{__cp} "%{SOURCE10}" "${kmodtool_temp}" >/dev/null 2>&1 ; sed -i -re 's/(^Requires:[[:blank:]]+kernel[[:blank:]]+(>=|==)[[:blank:]]+).*$/\1%{kversion_required}/' "${kmodtool_temp}" >/dev/null 2>&1 ; sh "${kmodtool_temp}" rpmtemplate "%{kmod_name}" "%{kversion}" "" ; %{__rm} -f "${kmodtool_temp}" >/dev/null 2>&1 )} %else %{expand:%( sh "%{SOURCE10}" rpmtemplate "%{kmod_name}" "%{kversion}" "" )} %endif %description This package provides the %{kmod_name} kernel module(s). It is built to depend upon the specific ABI provided by a range of releases of the same variant of the Linux kernel and not on any one specific build. %prep %if "%( echo "$( basename "%{SOURCE0}" 2>/dev/null | tail -n 1 2>/dev/null | grep -Eo '\.[^.]+$' 2>/dev/null )" 2>/dev/null )" == ".gz" # if GitHub archive %setup -q -n "%{source_name}-%{source_name}-%{version}" %else %setup -q -n "%{source_name}-%{version}" %endif # for debug # e.g.: 3.10.0-693.5.2.el7.x86_64 echo "%{kversion}" # e.g.: 3.10.0-693.el7 echo "%{kversion_required}" %build KSRC="%{_usrsrc}/kernels/%{kversion}" %define configure_options --with-kernel-version="%{kversion}" --with-kernel="${KSRC}" if [[ -x "autogen.sh" ]]; then ./autogen.sh %{?configure_options} fi %configure %{?configure_options} %define kernel_subdirs "$( grep -E '^SUBDIRS[[:blank:]]+=[[:blank:]]+' Makefile | sed -re 's/^SUBDIRS[[:blank:]]+=[[:blank:]]+(.*)$/\\1/' )" KERNEL_SUBDIRS=%{?kernel_subdirs} export KERNEL_SUBDIRS # for debug # e.g.: 3.7 3.17 echo "${KERNEL_SUBDIRS}" %define make_options -C "${KSRC}" %{?_smp_mflags} modules M="${PWD}" %{__make} %{?make_options} for KERNEL_SUBDIR in ${KERNEL_SUBDIRS}; do if [[ -d "${KERNEL_SUBDIR}" ]]; then pushd "${KERNEL_SUBDIR}" >/dev/null %{__make} %{?make_options} popd >/dev/null fi done # The version file does not exist in GitHub repo. if [[ ! -f "version" ]]; then echo "%{version}" > "version" fi %install %{__install} -d "%{buildroot}/lib/modules/%{kversion}/extra/%{kmod_name}/" KERNEL_SUBDIRS=%{?kernel_subdirs} export KERNEL_SUBDIRS for KERNEL_SUBDIR in ${KERNEL_SUBDIRS}; do if [[ -d "${KERNEL_SUBDIR}" ]]; then pushd "${KERNEL_SUBDIR}" >/dev/null find * -mindepth 0 -maxdepth 0 -type f -name '*.ko' -print0 2>/dev/null | sort -z -uV | while IFS= read -rd '' kernel_module_path; do %if 0%{?skip_existed_modules} # skip already existed modules [[ -f "%{buildroot}/lib/modules/%{kversion}/extra/%{kmod_name}/$( basename "${kernel_module_path}" )" ]] && continue || : %endif %{__install} -p -m 0755 "${kernel_module_path}" "%{buildroot}/lib/modules/%{kversion}/extra/%{kmod_name}/" done popd >/dev/null fi %if 0%{?skip_other_modules} # skip other modules break %endif done touch "kmod-%{kmod_name}.conf" find "%{buildroot}/lib/modules/%{kversion}/extra/%{kmod_name}"/* -mindepth 0 -maxdepth 0 -type f -name '*.ko' -print0 2>/dev/null | sort -z -uV | while IFS= read -rd '' kernel_module_path; do kernel_module_file="$( basename ${kernel_module_path} )" kernel_module="${kernel_module_file%.*}" echo "override ${kernel_module} * weak-updates/%{kmod_name}" >> "kmod-%{kmod_name}.conf" done echo >> "kmod-%{kmod_name}.conf" # for debug # e.g.: # override hid-wacom * weak-updates/wacom # override wacom * weak-updates/wacom # override wacom_w8001 * weak-updates/wacom # cat "kmod-%{kmod_name}.conf" # weak-updates %{__install} -d "%{buildroot}%{_sysconfdir}/depmod.d/" %{__install} -p -m 0644 "kmod-%{kmod_name}.conf" "%{buildroot}%{_sysconfdir}/depmod.d/" # docs %{__install} -d "%{buildroot}%{_defaultdocdir}/kmod-%{kmod_name}-%{version}/" #%{__install} -p -m 0644 "%{SOURCE5}" "%{buildroot}%{_defaultdocdir}/kmod-%{kmod_name}-%{version}/" %{__install} -p -m 0644 "AUTHORS" "%{buildroot}%{_defaultdocdir}/kmod-%{kmod_name}-%{version}/" %{__install} -p -m 0644 "ChangeLog" "%{buildroot}%{_defaultdocdir}/kmod-%{kmod_name}-%{version}/" %{__install} -p -m 0644 "COPYING" "%{buildroot}%{_defaultdocdir}/kmod-%{kmod_name}-%{version}/" %{__install} -p -m 0644 "NEWS" "%{buildroot}%{_defaultdocdir}/kmod-%{kmod_name}-%{version}/" %{__install} -p -m 0644 "README" "%{buildroot}%{_defaultdocdir}/kmod-%{kmod_name}-%{version}/" %{__install} -p -m 0644 "version" "%{buildroot}%{_defaultdocdir}/kmod-%{kmod_name}-%{version}/" # Strip the modules(s) find "%{buildroot}" -type f -name '*.ko' -exec %{__strip} --strip-debug '{}' \; # Sign the modules(s) %if %{?_with_modsign:1}%{!?_with_modsign:0} # If the module signing keys are not defined, define them here. %{!?privkey: %define privkey %{_sysconfdir}/pki/SECURE-BOOT-KEY.priv} %{!?pubkey: %define pubkey %{_sysconfdir}/pki/SECURE-BOOT-KEY.der} for module in "$( find "%{buildroot}" -type f -name '*.ko' )"; do %{__perl} "/usr/src/kernels/%{kversion}/scripts/sign-file" \ sha256 "%{privkey}" "%{pubkey}" "${module}"; done %endif %clean %{__rm} -rf "%{buildroot}" # Auto-generated by kmodtool #%%files #%%if 0%{?doc_license} #%%license %{license_files} #%%else #%%doc %{license_files} #%%endif #%%doc AUTHORS ChangeLog NEWS README version #%%{_sysconfdir}/depmod.d/kmod-%{kmod_name}.conf #/lib/modules/%{kversion}/extra/%{kmod_name}/*.ko %changelog * Sun Oct 29 2017 Tomasz Tomasik - 0.37.1-4 - Update URL and Source (GitHub instead of SourceForge) - Update requirements - Update build method * Sun Oct 29 2017 Tomasz Tomasik - 0.37.1-3 - Auto-detect kernel requirements - Auto-update kmodtool script * Sun Oct 29 2017 Tomasz Tomasik - 0.37.1-2 - Add support for kernel-abi-whitelists * Sat Oct 28 2017 Tomasz Tomasik - 0.37.1-1 - Update to 0.37.1 - Update kmodtool-wacom-el7.sh - Update URL and Source - Update requirements - Drop Source5 ("GPL-v2.0.txt") - tarball already contains the "COPYING" file - Rewrite prep, build and install sections - Auto-detect supported kernel modules - Rebuilt against EL7 * Tue Apr 18 2017 Tomasz Tomasik - 0.35.0-1 - Update to 0.35.0 - Rebuilt for 3.10.0-514 kernel - Cleanup SPEC file * Thu Mar 24 2016 Tomasz Tomasik - 0.30.2-1 - Initial el7 build of the kmod package. [https://sourceforge.net/projects/linuxwacom/files/xf86-input-wacom/]