File dkms.spec of Package dkms

# 
# spec file for package dkms
#
# norootforbuild
#

Summary: Dynamic Kernel Module Support Framework
Name: dkms
#Version: 2.2.0.4
Version: 2.2.0.3_git20141020
#Version: 2.2.0.3
Release: 0.1
License: GPL-2.0+
Vendor: The Bumblebee Project
Group: System/Kernel
BuildArch: noarch
Requires: sed gawk findutils tar cpio gzip grep mktemp
Requires: bash > 1.99
# because Mandriva calls this package dkms-minimal
Provides: dkms-minimal = %{version}
URL: http://linux.dell.com/dkms
Source0: http://linux.dell.com/dkms/permalink/dkms-%{version}.tar.bz2
Source1: %{name}.service
Source2: %{name}.systemd
Source3: %{name}.default
Source100: %{name}.changes
Source101: %{name}.rpmlintrc
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
%if 0%{?suse_version}
Patch0: %{name}-%{version}-compat_suse_init_script.diff
Requires: kernel-devel
%endif
%if 0%{?fedora}
Requires: kernel-devel
%endif
%if 0%{?fedora} || 0%{?rhel} >= 7 || 0%{?centos_version} >= 7 || 0%{?rhel_version}  >= 7
Requires:       kmod
%else
Requires:       module-init-tools
%endif
%if 0%{?fedora} >= 20 || 0%{?rhel} >= 7 || 0%{?suse_version} >= 1230
BuildRequires:          systemd
Requires(post):         systemd
Requires(preun):        systemd
Requires(postun):       systemd
%else
Requires(post):         /sbin/chkconfig
Requires(preun):        /sbin/chkconfig
Requires(preun):        /sbin/service
Requires(postun):       /sbin/service
%endif

%description
This package contains the framework for the Dynamic
Kernel Module Support (DKMS) method for installing
module RPMS as originally developed by Dell.

%prep
%setup -q
%if 0%{?suse_version}
%patch0
%endif


%build

%triggerpostun -- %{name} < 1.90.00-1
for dir in `find %{_localstatedir}/%{name} -type d -maxdepth 1 -mindepth 1`; do
	mv -f $dir %{_localstatedir}/lib/%{name}
done
[ -e %{_sysconfdir}/dkms_framework.conf ] && ! [ -e %{_sysconfdir}/%{name}/framework.conf ] && mkdir %{_sysconfdir}/%{name} && cp -a %{_sysconfdir}/dkms_framework.conf %{_sysconfdir}/%{name}/framework.conf
arch_used=""
[ `uname -m` == "x86_64" ] && [ `cat /proc/cpuinfo | grep -c "Intel"` -gt 0 ] && arch_used="ia32e" || arch_used=`uname -m`
echo ""
echo "ALERT! ALERT! ALERT!"
echo ""
echo "You are using a version of DKMS which does not support multiple system"
echo "architectures.  Your DKMS tree will now be modified to add this support."
echo ""
echo "The upgrade will assume all built modules are for arch: $arch_used"
current_kernel=`uname -r`
dkms_tree="%{_localstatedir}/lib/%{name}"
source_tree="%{_prefix}/src"
tmp_location="/tmp"
dkms_frameworkconf="%{_sysconfdir}/%{name}/framework.conf"
. $dkms_frameworkconf 2>/dev/null
echo ""
echo "Fixing directories."
for directory in `find $dkms_tree -type d -name "module" -mindepth 3 -maxdepth 4`; do
	dir_to_fix=`echo $directory | sed 's#/module$##'`
	echo "Creating $dir_to_fix/$arch_used..."
	mkdir $dir_to_fix/$arch_used
	mv -f $dir_to_fix/* $dir_to_fix/$arch_used 2>/dev/null
done
echo ""
echo "Fixing symlinks."
for symlink in `find $dkms_tree -type l -name "kernel*" -mindepth 2 -maxdepth 2`; do
	symlink_kernelname=`echo $symlink | sed 's#.*/kernel-##'`
	dir_of_symlink=`echo $symlink | sed 's#/kernel-.*$##'`
	cd $dir_of_symlink
	read_link="$symlink"
	while [ -L "$read_link" ]; do
		read_link=`ls -l $read_link | sed 's/.*-> //'`
	done
	if [ `echo $read_link | sed 's#/# #g' | wc -w | awk {'print $1'}` -lt 3 ]; then
		echo "Updating $symlink..."
		ln -sf $read_link/$arch_used kernel-$symlink_kernelname-$arch_used
		rm -f $symlink
	fi
	cd -
done
echo ""

%install
%if 0%{?fedora} >= 20 || 0%{?rhel} >= 7 || 0%{?suse_version} >= 1230
make install-redhat-systemd DESTDIR=$RPM_BUILD_ROOT \
    SBIN=$RPM_BUILD_ROOT%{_sbindir} \
    VAR=$RPM_BUILD_ROOT%{_localstatedir}/lib/%{name} \
    MAN=$RPM_BUILD_ROOT%{_mandir}/man8 \
    ETC=$RPM_BUILD_ROOT%{_sysconfdir}/%{name} \
    BASHDIR=$RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d \
    LIBDIR=$RPM_BUILD_ROOT%{_prefix}/lib/%{name}

%if 0%{?suse_version}
rm -f %{buildroot}/etc/systemd/system/dkms.service
#
mkdir -p %{buildroot}%{_unitdir}
install -p -m 644 %{SOURCE1} %{buildroot}%{_unitdir}
install -p -m 755 %{SOURCE2} %{buildroot}%{_unitdir}
mkdir -p "%{buildroot}%{_sysconfdir}/default"
install -m 644 %{SOURCE3} "%{buildroot}%{_sysconfdir}/default/dkms"
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rcdkms
%endif

# remove regular init file
rm -rf "%{buildroot}"/etc/rc.d/init.d/dkms_autoinstaller

%else
make install-redhat-sysv DESTDIR=$RPM_BUILD_ROOT \
    SBIN=$RPM_BUILD_ROOT%{_sbindir} \
    VAR=$RPM_BUILD_ROOT%{_localstatedir}/lib/%{name} \
    MAN=$RPM_BUILD_ROOT%{_mandir}/man8 \
    ETC=$RPM_BUILD_ROOT%{_sysconfdir}/%{name} \
    BASHDIR=$RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d \
    LIBDIR=$RPM_BUILD_ROOT%{_prefix}/lib/%{name}

%if 0%{?suse_version}
# create rcdkms_autoinstaller symlink for openSUSE
mkdir -p $RPM_BUILD_ROOT/%{_initddir}
mv $RPM_BUILD_ROOT/etc/rc.d/init.d/dkms_autoinstaller $RPM_BUILD_ROOT/%{_initddir}/dkms_autoinstaller 
ln -sf %{_initddir}/dkms_autoinstaller $RPM_BUILD_ROOT/usr/sbin/rcdkms_autoinstaller 
%endif
%endif

%if 0%{?fedora} >= 20 || 0%{?rhel} >= 7 || 0%{?suse_version} >= 1230

%pre
%service_add_pre dkms.service
exit 0

%post
# make it more secure
if [ ! -d %{_tmppath}/dkms ] ;
then
  mkdir -p %{_tmppath}/dkms
  chmod 700 %{_tmppath}/dkms
fi
sed -i -e 's,# tmp_location="/tmp",tmp_location="%{_tmppath}/dkms",' %{_sysconfdir}/dkms/framework.conf
# enable on initial install
%service_add_post dkms.service
systemctl enable dkms.service >/dev/null 2>&1 || :
systemctl start dkms.service >/dev/null 2>&1 || :
exit 0

%preun
# remove on uninstall
%service_del_preun dkms.service
exit 0

%postun
%service_del_postun dkms.service
# remove on uninstall
[ $1 -lt 1 ] && rm -rf %{_tmppath}/dkms || :
exit 0

%else

%post
[ -e /sbin/dkms ] && mv -f /sbin/dkms /sbin/dkms.old 2>/dev/null
# enable on initial install
[ $1 -lt 2 ] && /sbin/chkconfig dkms_autoinstaller on ||:
# make it more secure
if [ ! -d %{_tmppath}/dkms ] ;
then
  mkdir -p %{_tmppath}/dkms
  chmod 700 %{_tmppath}/dkms
fi
sed -i -e 's,# tmp_location="/tmp",tmp_location="%{_tmppath}/dkms",' %{_sysconfdir}/dkms/framework.conf

%postun
%insserv_cleanup
%restart_on_update

%preun
# remove on uninstall
[ $1 -lt 1 ] && ( /sbin/chkconfig dkms_autoinstaller off ; rm -rf %{_tmppath}/dkms ) ||:
%stop_on_removal

%endif

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
%{_sbindir}/%{name}
%if 0%{?fedora} >= 20 || 0%{?rhel} >= 7 || 0%{?suse_version} >= 1230
%if 0%{?suse_version}
%{_sbindir}/rcdkms
%{_unitdir}/dkms.service
%{_unitdir}/dkms.systemd
%config %{_sysconfdir}/default/dkms
%else
%{_sysconfdir}/systemd/system/dkms.service
%endif
%else
%if 0%{?suse_version}
%{_sbindir}/rcdkms_autoinstaller
%endif
%{_initddir}/dkms_autoinstaller
%endif
%{_localstatedir}/lib/%{name}
%{_prefix}/lib/%{name}
%{_mandir}/*/*
%config(noreplace) %{_sysconfdir}/%{name}
%doc sample.spec sample.conf AUTHORS COPYING README.dkms
%doc sample-suse-9-mkkmp.spec sample-suse-10-mkkmp.spec
# these dirs are for plugins - owned by other packages
%{_sysconfdir}/kernel/postinst.d/%{name}
%{_sysconfdir}/kernel/prerm.d/%{name}
%config %{_sysconfdir}/bash_completion.d/%{name}

%if 0%{?suse_version}
# suse doesnt yet support /etc/kernel/{prerm.d,postinst.d}, but will fail build
# with unowned dirs if we dont own them ourselves
# when opensuse *does* add this support, we will need to BuildRequires kernel
%dir %{_sysconfdir}/kernel
%dir %{_sysconfdir}/kernel/postinst.d
%dir %{_sysconfdir}/kernel/prerm.d
%endif

%changelog
openSUSE Build Service is sponsored by