aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--Makefile.in42
-rw-r--r--config/rpm.am27
-rwxr-xr-xconfigure3
-rw-r--r--configure.ac1
-rw-r--r--dkms.conf.in23
-rwxr-xr-xdkms.postinst24
-rw-r--r--spl-modules.spec.in90
8 files changed, 201 insertions, 10 deletions
diff --git a/Makefile.am b/Makefile.am
index 490d12802..a60ce1a5e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -14,6 +14,7 @@ SUBDIRS = $(USER_DIR) $(KERNEL_DIR)
AUTOMAKE_OPTIONS = foreign
EXTRA_DIST = autogen.sh spl.spec.in spl-modules.spec.in META DISCLAIMER
EXTRA_DIST += config/config.awk config/rpm.am config/deb.am config/tgz.am
+EXTRA_DIST += dkms.postinst
noinst_HEADERS = spl_config.h spl.release
distclean-local::
diff --git a/Makefile.in b/Makefile.in
index a70079893..475ab084a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -80,11 +80,12 @@ target_triplet = @target@
DIST_COMMON = $(am__configure_deps) $(noinst_HEADERS) \
$(srcdir)/Makefile.am $(srcdir)/Makefile.in \
$(srcdir)/PKGBUILD-spl-modules.in $(srcdir)/PKGBUILD-spl.in \
- $(srcdir)/spl-modules.spec.in $(srcdir)/spl.release.in \
- $(srcdir)/spl.spec.in $(srcdir)/spl_config.h.in \
- $(top_srcdir)/config/arch.am $(top_srcdir)/config/deb.am \
- $(top_srcdir)/config/rpm.am $(top_srcdir)/config/tgz.am \
- $(top_srcdir)/configure $(top_srcdir)/module/Makefile.in \
+ $(srcdir)/dkms.conf.in $(srcdir)/spl-modules.spec.in \
+ $(srcdir)/spl.release.in $(srcdir)/spl.spec.in \
+ $(srcdir)/spl_config.h.in $(top_srcdir)/config/arch.am \
+ $(top_srcdir)/config/deb.am $(top_srcdir)/config/rpm.am \
+ $(top_srcdir)/config/tgz.am $(top_srcdir)/configure \
+ $(top_srcdir)/module/Makefile.in \
$(top_srcdir)/module/spl/Makefile.in \
$(top_srcdir)/module/splat/Makefile.in AUTHORS COPYING \
ChangeLog INSTALL config/config.guess config/config.sub \
@@ -102,7 +103,7 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = spl_config.h
CONFIG_CLEAN_FILES = module/Makefile module/spl/Makefile \
module/splat/Makefile spl.spec spl-modules.spec PKGBUILD-spl \
- PKGBUILD-spl-modules spl.release
+ PKGBUILD-spl-modules spl.release dkms.conf
CONFIG_CLEAN_VPATH_FILES =
AM_V_GEN = $(am__v_GEN_$(V))
am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
@@ -331,7 +332,7 @@ SUBDIRS = $(USER_DIR) $(KERNEL_DIR)
AUTOMAKE_OPTIONS = foreign
EXTRA_DIST = autogen.sh spl.spec.in spl-modules.spec.in META \
DISCLAIMER config/config.awk config/rpm.am config/deb.am \
- config/tgz.am
+ config/tgz.am dkms.postinst
noinst_HEADERS = spl_config.h spl.release
all: spl_config.h
$(MAKE) $(AM_MAKEFLAGS) all-recursive
@@ -404,6 +405,8 @@ PKGBUILD-spl-modules: $(top_builddir)/config.status $(srcdir)/PKGBUILD-spl-modul
cd $(top_builddir) && $(SHELL) ./config.status $@
spl.release: $(top_builddir)/config.status $(srcdir)/spl.release.in
cd $(top_builddir) && $(SHELL) ./config.status $@
+dkms.conf: $(top_builddir)/config.status $(srcdir)/dkms.conf.in
+ cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
-rm -f *.lo
@@ -852,13 +855,16 @@ srpm-utils:
srpm: srpm-modules srpm-utils
+rpm-dkms: srpm-modules
+@CONFIG_KERNEL_TRUE@ $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-modules" dkms-common
+
rpm-modules: srpm-modules
@CONFIG_KERNEL_TRUE@ $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-modules" rpm-common
rpm-utils: srpm-utils
@CONFIG_USER_TRUE@ $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" rpm-common
-rpm: rpm-modules rpm-utils
+rpm: rpm-modules rpm-utils rpm-dkms
rpm-local:
@(if test "${HAVE_RPMBUILD}" = "no"; then \
@@ -877,6 +883,26 @@ rpm-local:
mkdir -p $(rpmbuild)/SOURCES && \
cp $(distdir).tar.gz $(rpmbuild)/SOURCES)
+dkms-common:
+ rpmpkg=$(pkg)-$(SPL_META_VERSION)-$(SPL_META_RELEASE).src.rpm; \
+ rpmspec=$(pkg).spec; \
+ rpmdkms=$(pkg)-dkms-$(SPL_META_VERSION)-$(SPL_META_RELEASE).noarch.rpm;\
+ rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ rpmbuild="$$rpmbuild" \
+ rpmspec="$$rpmspec" \
+ rpm-local || exit 1; \
+ $(RPMBUILD) \
+ --define "_tmppath $$rpmbuild/TMP" \
+ --define "_topdir $$rpmbuild" \
+ --define "dist %{nil}" \
+ --define "_without_kernel 1" \
+ --define "_without_kernel_debug 1" \
+ --define "_with_kernel_dkms 1" \
+ --nodeps --rebuild $$rpmpkg || exit 1; \
+ cp $$rpmbuild/RPMS/noarch/$$rpmdkms . || exit 1; \
+ $(RM) -R $$rpmbuild
+
srpm-common: dist
rpmpkg=$(pkg)-$(SPL_META_VERSION)-$(SPL_META_RELEASE).src.rpm; \
rpmspec=$(pkg).spec; \
diff --git a/config/rpm.am b/config/rpm.am
index a0a4ed148..7340b4fce 100644
--- a/config/rpm.am
+++ b/config/rpm.am
@@ -18,6 +18,11 @@ endif
srpm: srpm-modules srpm-utils
+rpm-dkms: srpm-modules
+if CONFIG_KERNEL
+ $(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-modules" dkms-common
+endif
+
rpm-modules: srpm-modules
if CONFIG_KERNEL
$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}-modules" rpm-common
@@ -28,7 +33,7 @@ if CONFIG_USER
$(MAKE) $(AM_MAKEFLAGS) pkg="${PACKAGE}" rpm-common
endif
-rpm: rpm-modules rpm-utils
+rpm: rpm-modules rpm-utils rpm-dkms
rpm-local:
@(if test "${HAVE_RPMBUILD}" = "no"; then \
@@ -47,6 +52,26 @@ rpm-local:
mkdir -p $(rpmbuild)/SOURCES && \
cp $(distdir).tar.gz $(rpmbuild)/SOURCES)
+dkms-common:
+ rpmpkg=$(pkg)-$(SPL_META_VERSION)-$(SPL_META_RELEASE).src.rpm; \
+ rpmspec=$(pkg).spec; \
+ rpmdkms=$(pkg)-dkms-$(SPL_META_VERSION)-$(SPL_META_RELEASE).noarch.rpm;\
+ rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \
+ $(MAKE) $(AM_MAKEFLAGS) \
+ rpmbuild="$$rpmbuild" \
+ rpmspec="$$rpmspec" \
+ rpm-local || exit 1; \
+ $(RPMBUILD) \
+ --define "_tmppath $$rpmbuild/TMP" \
+ --define "_topdir $$rpmbuild" \
+ --define "dist %{nil}" \
+ --define "_without_kernel 1" \
+ --define "_without_kernel_debug 1" \
+ --define "_with_kernel_dkms 1" \
+ --nodeps --rebuild $$rpmpkg || exit 1; \
+ cp $$rpmbuild/RPMS/noarch/$$rpmdkms . || exit 1; \
+ $(RM) -R $$rpmbuild
+
srpm-common: dist
rpmpkg=$(pkg)-$(SPL_META_VERSION)-$(SPL_META_RELEASE).src.rpm; \
rpmspec=$(pkg).spec; \
diff --git a/configure b/configure
index bbaedb053..4d2d45895 100755
--- a/configure
+++ b/configure
@@ -24169,7 +24169,7 @@ fi
-ac_config_files="$ac_config_files Makefile lib/Makefile cmd/Makefile module/Makefile module/spl/Makefile module/splat/Makefile include/Makefile scripts/Makefile spl.spec spl-modules.spec PKGBUILD-spl PKGBUILD-spl-modules spl.release"
+ac_config_files="$ac_config_files Makefile lib/Makefile cmd/Makefile module/Makefile module/spl/Makefile module/splat/Makefile include/Makefile scripts/Makefile spl.spec spl-modules.spec PKGBUILD-spl PKGBUILD-spl-modules spl.release dkms.conf"
cat >confcache <<\_ACEOF
@@ -25091,6 +25091,7 @@ do
"PKGBUILD-spl") CONFIG_FILES="$CONFIG_FILES PKGBUILD-spl" ;;
"PKGBUILD-spl-modules") CONFIG_FILES="$CONFIG_FILES PKGBUILD-spl-modules" ;;
"spl.release") CONFIG_FILES="$CONFIG_FILES spl.release" ;;
+ "dkms.conf") CONFIG_FILES="$CONFIG_FILES dkms.conf" ;;
*) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
diff --git a/configure.ac b/configure.ac
index 75859f77e..27d3356ec 100644
--- a/configure.ac
+++ b/configure.ac
@@ -59,6 +59,7 @@ AC_CONFIG_FILES([
PKGBUILD-spl
PKGBUILD-spl-modules
spl.release
+ dkms.conf
])
AC_OUTPUT
diff --git a/dkms.conf.in b/dkms.conf.in
new file mode 100644
index 000000000..64f1f916f
--- /dev/null
+++ b/dkms.conf.in
@@ -0,0 +1,23 @@
+AUTOINSTALL="yes"
+PACKAGE_NAME="@PACKAGE@"
+PACKAGE_VERSION="@VERSION@"
+PRE_BUILD="configure
+ --prefix=/usr
+ --with-config=kernel
+ --with-linux=$(case `lsb_release -is` in
+ (Debian) echo ${kernel_source_dir/%build/source} ;;
+ (*) echo ${kernel_source_dir} ;;
+ esac)
+ --with-linux-obj=${kernel_source_dir}
+"
+POST_INSTALL="dkms.postinst -a ${arch} -k ${kernelver} -t ${dkms_tree}
+ -n ${PACKAGE_NAME} -v ${PACKAGE_VERSION}
+"
+REMAKE_INITRD="no"
+MAKE[0]="make"
+BUILT_MODULE_NAME[0]="spl"
+BUILT_MODULE_LOCATION[0]="module/spl/"
+DEST_MODULE_LOCATION[0]="/extra/spl/spl"
+BUILT_MODULE_NAME[1]="splat"
+BUILT_MODULE_LOCATION[1]="module/splat/"
+DEST_MODULE_LOCATION[1]="/extra/splat/splat"
diff --git a/dkms.postinst b/dkms.postinst
new file mode 100755
index 000000000..cecf58e79
--- /dev/null
+++ b/dkms.postinst
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+PROG=$0
+
+while getopts "a:k:n:t:v:" opt; do
+ case $opt in
+ a) arch=$OPTARG ;;
+ k) kver=$OPTARG ;;
+ n) pkgname=$OPTARG ;;
+ t) tree=$OPTARG ;;
+ v) pkgver=$OPTARG ;;
+ esac
+done
+
+if [ -z "${arch}" -o -z "${kver}" -o -z "${pkgname}" -o \
+ -z "${tree}" -o -z "${pkgver}" ]; then
+ echo "Usage: $PROG -a <arch> -k <kver> -n <pkgname>" \
+ "-t <tree> -v <pkgver>"
+ exit 1
+fi
+
+cp ${tree}/${pkgname}/${pkgver}/build/spl_config.h \
+ ${tree}/${pkgname}/${pkgver}/build/module/Module.symvers \
+ ${tree}/${pkgname}/${pkgver}/${kver}/${arch}/
diff --git a/spl-modules.spec.in b/spl-modules.spec.in
index c27d0a5f9..044225098 100644
--- a/spl-modules.spec.in
+++ b/spl-modules.spec.in
@@ -44,6 +44,17 @@
%endif
%endif
+# Set using 'rpmbuild ... --with kernel-dkms ...', defaults to disabled.
+%if %{defined _with_kernel_dkms}
+ %define with_kernel_dkms 1
+%else
+ %if %{defined _without_kernel_dkms}
+ %define with_kernel_dkms 0
+ %else
+ %define with_kernel_dkms 0
+ %endif
+%endif
+
# Set using 'rpmbuild ... --with debug ...', defaults to disabled.
%if %{defined _with_debug}
%define kdebug --enable-debug
@@ -118,12 +129,15 @@
%define kpkg_kern kernel-%{kverextra}
%define kpkg_dbug %{nil}
+ %define kpkg_dkms dkms
%define kdevpkg_kern kernel-source
%define kdevpkg_dbug %{nil}
+ %define kdevpkg_dkms dkms
%define kverpkg_kern %(echo %{kver_kern} | %{__sed} -e 's/-%{kverextra}//g')
%define kverpkg_dbug %{nil}
+ %define kverpkg_dkms 2.2.0.2
# The kernel and rpm versions do not strictly match under SLES11
# e.g. kernel version 2.6.27.19-5 != rpm version 2.6.27.19-5.1
@@ -165,10 +179,13 @@
%define kpkg_kern kernel
%define kpkg_dbug kernel-debug
+ %define kpkg_dkms dkms
%define kdevpkg_kern kernel-devel
%define kdevpkg_dbug kernel-debug-devel
+ %define kdevpkg_dkms dkms
+ %define kverpkg_dkms 2.2.0.2
%if %{defined el6} || %{defined ch5}
%define kverpkg_kern %(echo %{kver_kern} | %{__sed} -e 's/.%{_target_cpu}//g')
%define kverpkg_dbug %(echo %{kver_dbug} | %{__sed} -e 's/.%{_target_cpu}//g' | %{__sed} -e 's/.debug//g')
@@ -216,10 +233,13 @@
%define kpkg_kern kernel
%define kpkg_dbug kernel-debug
+ %define kpkg_dkms dkms
%define kdevpkg_kern kernel-devel
%define kdevpkg_dbug kernel-debug-devel
+ %define kdevpkg_dkms dkms
+ %define kverpkg_dkms 2.2.0.2
%define kverpkg_kern %(echo %{kver_kern} | %{__sed} -e 's/.%{_target_cpu}//g')
%define kverpkg_dbug %(echo %{kver_dbug} | %{__sed} -e 's/.%{_target_cpu}//g' | %{__sed} -e 's/.debug//g')
@@ -253,6 +273,7 @@
%define kverpkg_kern %{kver_kern}
%define kverpkg_dbug %{nil}
+ %define kverpkg_dkms %{nil}
%if %{undefined kdir}
%define kdir_kern /lib/modules/%{kver_kern}/build
@@ -285,12 +306,16 @@
%if %{defined build_src_rpm}
%define rel_kern @SPL_META_RELEASE@
%define rel_dbug @SPL_META_RELEASE@
+%define rel_dkms @SPL_META_RELEASE@
%if %{defined kpkg_kern}
%define req_kern %{kpkg_kern}
%endif
%if %{defined kpkg_dbug}
%define req_dbug %{kpkg_dbug}
%endif
+%if %{defined kpkg_dkms}
+%define req_dkms %{kpkg_dkms}
+%endif
%if %{defined kdevpkg_kern}
%define devreq_kern %{kdevpkg_kern}
%endif
@@ -302,12 +327,16 @@
%define relext_dbug %(echo %{kverpkg_dbug} | %{__sed} -e 's/-/_/g')
%define rel_kern @SPL_META_RELEASE@_%{relext_kern}
%define rel_dbug @SPL_META_RELEASE@_%{relext_dbug}
+%define rel_dkms @SPL_META_RELEASE@
%if %{defined kpkg_kern}
%define req_kern %{kpkg_kern} %{koppkg} %{kverpkg_kern}
%endif
%if %{defined kpkg_dbug}
%define req_dbug %{kpkg_dbug} %{koppkg} %{kverpkg_dbug}
%endif
+%if %{defined kpkg_dkms}
+%define req_dkms %{kpkg_dkms} >= %{kverpkg_dkms}
+%endif
%if %{defined kdevpkg_kern}
%define devreq_kern %{kdevpkg_kern} %{koppkg} %{kverpkg_kern}
%endif
@@ -398,6 +427,30 @@ Module{s}.symvers symbols needed for building additional modules which
use %{name}-debug.
%endif
+%if %{?with_kernel_dkms}
+
+%package dkms
+Summary: Solaris Porting Layer Modules (DKMS)
+Group: Utilities/System
+Release: %{rel_dkms}
+Provides: %{name}
+BuildArch: noarch
+%if %{defined req_dkms}
+Requires: %{req_dkms}
+%endif
+%if %{defined kdevpkg_dkms}
+BuildRequires: %{kdevpkg_dkms}
+%endif
+
+%description dkms
+The %{name}-dkms package contains all the necessary pieces to build and
+install Solaris Porting Layer (SPL) kernel modules with Dynamic Kernel
+Modules Support (DKMS). The SPL modules emulate Solaris style primatives
+in the the linux kernel. They include, but are not limited to: atomic,
+condvar, debug, error, memory, kobject, kstat, mutex, rwlock, taskq,
+thread, time, and vnode APIs.
+
+%endif
%prep
%setup -n @PACKAGE@-%{version}
@@ -422,6 +475,16 @@ make
make DESTDIR=$RPM_BUILD_ROOT install
%endif
+%if %{?with_kernel_dkms}
+
+%configure --with-config=kernel \
+ %{kdebug} %{kdebug_log} %{kdebug_kmem} %{kdebug_kmem_tracking}
+make dist
+mkdir -p $RPM_BUILD_ROOT/%{_prefix}/src
+tar -xf @PACKAGE@-%{version}.tar.gz -C $RPM_BUILD_ROOT/%{_prefix}/src
+cp -af dkms.conf $RPM_BUILD_ROOT/%{_prefix}/src/@PACKAGE@-%{version}
+
+%endif
%clean
rm -rf $RPM_BUILD_ROOT
@@ -476,3 +539,30 @@ else
fi
%endif
+%if %{?with_kernel_dkms}
+
+%files dkms
+%defattr(-,root,root)
+%{_prefix}/src/@PACKAGE@-%{version}/*
+
+%post dkms
+for POSTINST in %{_prefix}/lib/dkms/common.postinst; do
+ if [ -f $POSTINST ]; then
+ $POSTINST @PACKAGE@ %{version}
+ exit $?
+ fi
+ echo "WARNING: $POSTINST does not exist."
+done
+echo -e "ERROR: DKMS version is too old and @PACKAGE@ was not"
+echo -e "built with legacy DKMS support."
+echo -e "You must either rebuild @PACKAGE@ with legacy postinst"
+echo -e "support or upgrade DKMS to a more current version."
+exit 1
+
+%preun dkms
+echo -e
+echo -e "Uninstall of @PACKAGE@ module (version %{version}) beginning:"
+dkms remove -m @PACKAGE@ -v %{version} --all --rpm_safe_upgrade
+exit 0
+
+%endif