]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Packaging improvements for RHEL and SLES
authorBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 16 Jun 2009 17:44:59 +0000 (10:44 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 16 Jun 2009 17:44:59 +0000 (10:44 -0700)
- Properly honor --prefix in build system and rpm spec file.
- Add '--define require_kdir' to spec file to support building
  rpms against kernel sources installed in non-default locations.
- Add '--define require_kobj' to spec file to support building
  rpms against kernel object installed in non-default locations.
- Stop suppressing errors in autogen.sh script.
- Improved logic to detect missing kernel objects when they are
  not located with the source.  This is the common case for SLES
  as well as in-tree chaos kernel builds and is done to simply
  support for multiple arches.
- Moved spl-devel build products to /usr/src/spl-<version>, a
  spl symlink is created to reference the last installed version.

Makefile.am
Makefile.in
autogen.sh
config/spl-build.m4
configure
include/Makefile.am
include/Makefile.in
module/Makefile.in
spl.spec.in

index 63d6ba7e4091eb50e336baa548b09eab21510ccf..c0a4a6b65c909cd7a7efbda408724d21592f3ed5 100644 (file)
@@ -16,8 +16,11 @@ distclean-local::
                -type f -print | xargs $(RM)
 
 install-data-local:
-       $(INSTALL) -D spl_config.h $(DESTDIR)/$(LINUX)/include/spl/spl_config.h
-       $(INSTALL) -D spl_unconfig.h $(DESTDIR)/$(LINUX)/include/spl/spl_unconfig.h
+       instdest=$(DESTDIR)/${prefix}/src/spl-$(SPL_META_VERSION); \
+       for instfile in $(noinst_HEADERS) module/Module.symvers; do \
+               $(INSTALL) -D $$instfile $$instdest/$$instfile; \
+       done
+       (cd $(DESTDIR)/${prefix}/src && ln -f -s spl-$(SPL_META_VERSION) spl)
 
 ctags:
        $(RM) $(top_srcdir)/tags
@@ -50,6 +53,6 @@ srpm: dist
 rpm: srpm
        rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \
        $(MAKE) $(AM_MAKEFLAGS) rpmbuild="$$rpmbuild" rpm-local || exit 1; \
-       /usr/bin/rpmbuild --define "_tmppath $$rpmbuild/TMP" --define "_topdir $$rpmbuild" --define "dist %{nil}" --define "require_kver $(LINUX_VERSION)" --nodeps --rebuild $(distdir)-$(SPL_META_RELEASE).src.rpm || exit 1; \
+       /usr/bin/rpmbuild --define "_tmppath $$rpmbuild/TMP" --define "_topdir $$rpmbuild" --define "dist %{nil}" --define "require_kdir $(LINUX)" --define "require_kobj $(LINUX_OBJ)" --define "require_kver $(LINUX_VERSION)" --nodeps --rebuild $(distdir)-$(SPL_META_RELEASE).src.rpm || exit 1; \
        cp $$rpmbuild/RPMS/*/* . || exit 1; \
        $(RM) -R $$rpmbuild
index 27825361ea0a83a4ac7e1fa5547e804a90c6c274..5c3bf0227fe84026cac4c77e144b6b1aab1c3026 100644 (file)
@@ -660,8 +660,11 @@ distclean-local::
                -type f -print | xargs $(RM)
 
 install-data-local:
-       $(INSTALL) -D spl_config.h $(DESTDIR)/$(LINUX)/include/spl/spl_config.h
-       $(INSTALL) -D spl_unconfig.h $(DESTDIR)/$(LINUX)/include/spl/spl_unconfig.h
+       instdest=$(DESTDIR)/${prefix}/src/spl-$(SPL_META_VERSION); \
+       for instfile in $(noinst_HEADERS) module/Module.symvers; do \
+               $(INSTALL) -D $$instfile $$instdest/$$instfile; \
+       done
+       (cd $(DESTDIR)/${prefix}/src && ln -f -s spl-$(SPL_META_VERSION) spl)
 
 ctags:
        $(RM) $(top_srcdir)/tags
@@ -694,7 +697,7 @@ srpm: dist
 rpm: srpm
        rpmbuild=`mktemp -t -d $(PACKAGE)-build-$$USER-XXXXXXXX`; \
        $(MAKE) $(AM_MAKEFLAGS) rpmbuild="$$rpmbuild" rpm-local || exit 1; \
-       /usr/bin/rpmbuild --define "_tmppath $$rpmbuild/TMP" --define "_topdir $$rpmbuild" --define "dist %{nil}" --define "require_kver $(LINUX_VERSION)" --nodeps --rebuild $(distdir)-$(SPL_META_RELEASE).src.rpm || exit 1; \
+       /usr/bin/rpmbuild --define "_tmppath $$rpmbuild/TMP" --define "_topdir $$rpmbuild" --define "dist %{nil}" --define "require_kdir $(LINUX)" --define "require_kobj $(LINUX_OBJ)" --define "require_kver $(LINUX_VERSION)" --nodeps --rebuild $(distdir)-$(SPL_META_RELEASE).src.rpm || exit 1; \
        cp $$rpmbuild/RPMS/*/* . || exit 1; \
        $(RM) -R $$rpmbuild
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
index e5614cf32632d59f2e6694df738762163fde6075..728000ae4af588df82ebe2df1f54a364382b538a 100755 (executable)
@@ -3,6 +3,6 @@
 aclocal -I config &&
 libtoolize --automake --copy
 autoheader &&
-automake --add-missing --include-deps --copy 2>/dev/null
+automake --add-missing --include-deps --copy
 autoconf
 rm -rf autom4te.cache aclocal.m4
index 75021894100b21e5393ffb7e0c37c3e8630ea276..a141fce50790525fc990c9b504bce5372d6e6034 100644 (file)
@@ -2,7 +2,7 @@ AC_DEFUN([SPL_AC_KERNEL], [
        AC_ARG_WITH([linux],
                AS_HELP_STRING([--with-linux=PATH],
                [Path to kernel source]),
-               [kernelsrc="$withval"; kernelbuild="$withval"])
+               [kernelsrc="$withval"])
 
        AC_ARG_WITH([linux-obj],
                AS_HELP_STRING([--with-linux-obj=PATH],
@@ -16,7 +16,6 @@ AC_DEFUN([SPL_AC_KERNEL], [
 
                if test -e ${sourcelink}; then
                        kernelsrc=`readlink -f ${sourcelink}`
-                       kernelbuild=
                else
                        AC_MSG_RESULT([Not found])
                        AC_MSG_ERROR([
@@ -31,10 +30,14 @@ AC_DEFUN([SPL_AC_KERNEL], [
 
        AC_MSG_RESULT([$kernelsrc])
        AC_MSG_CHECKING([kernel build directory])
-       if test -z "$kernelbuild" && test -d ${kernelsrc}-obj; then
-               kernelbuild=${kernelsrc}-obj/`arch`/`arch`
-       else
-               kernelbuild=${kernelsrc}
+       if test -z "$kernelbuild"; then
+               if test -d ${kernelsrc}-obj; then
+                       kernelbuild=${kernelsrc}-obj/`arch`/`arch`
+               elif test -d `dirname ${kernelsrc}`/build-`arch`; then
+                       kernelbuild=`dirname ${kernelsrc}`/build-`arch`
+               else
+                       kernelbuild=${kernelsrc}
+               fi
        fi
        AC_MSG_RESULT([$kernelbuild])
 
index e42d7bfb98051759c3b3d934d6deace1a2f779c3..d2e177cedd95e2ed5d9bb03882f815e88187405d 100755 (executable)
--- a/configure
+++ b/configure
@@ -18930,7 +18930,7 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 # Check whether --with-linux or --without-linux was given.
 if test "${with_linux+set}" = set; then
   withval="$with_linux"
-  kernelsrc="$withval"; kernelbuild="$withval"
+  kernelsrc="$withval"
 fi;
 
 
@@ -18948,7 +18948,6 @@ echo $ECHO_N "checking kernel source directory... $ECHO_C" >&6
 
                if test -e ${sourcelink}; then
                        kernelsrc=`readlink -f ${sourcelink}`
-                       kernelbuild=
                else
                        echo "$as_me:$LINENO: result: Not found" >&5
 echo "${ECHO_T}Not found" >&6
@@ -18970,10 +18969,14 @@ echo "$as_me: error:
 echo "${ECHO_T}$kernelsrc" >&6
        echo "$as_me:$LINENO: checking kernel build directory" >&5
 echo $ECHO_N "checking kernel build directory... $ECHO_C" >&6
-       if test -z "$kernelbuild" && test -d ${kernelsrc}-obj; then
-               kernelbuild=${kernelsrc}-obj/`arch`/`arch`
-       else
-               kernelbuild=${kernelsrc}
+       if test -z "$kernelbuild"; then
+               if test -d ${kernelsrc}-obj; then
+                       kernelbuild=${kernelsrc}-obj/`arch`/`arch`
+               elif test -d `dirname ${kernelsrc}`/build-`arch`; then
+                       kernelbuild=`dirname ${kernelsrc}`/build-`arch`
+               else
+                       kernelbuild=${kernelsrc}
+               fi
        fi
        echo "$as_me:$LINENO: result: $kernelbuild" >&5
 echo "${ECHO_T}$kernelbuild" >&6
index f85380f79b93dac099866bbd7e2dd41c97ed35df..d1990dcb0a0276cc62c59b697d8844fa6ec882b5 100644 (file)
@@ -16,7 +16,7 @@ noinst_HEADERS += util/*.h
 noinst_HEADERS += vm/*.h
 
 install-data-local:
-       instdest=$(DESTDIR)/$(LINUX)/include/spl; \
+       instdest=$(DESTDIR)/${prefix}/src/spl-$(SPL_META_VERSION); \
        instfiles=`find . -name '*.h'`; \
         for instfile in $$instfiles; do \
                $(INSTALL) -D $$instfile $$instdest/$$instfile; \
index e70ab9ff7f1a3b60ab2729d922bd8c9e326ff142..7b1437a4d2b0b47ec9e5abfdb0a8f278cd60278e 100644 (file)
@@ -387,7 +387,7 @@ uninstall-am: uninstall-info-am
 
 
 install-data-local:
-       instdest=$(DESTDIR)/$(LINUX)/include/spl; \
+       instdest=$(DESTDIR)/${prefix}/src/spl-$(SPL_META_VERSION); \
        instfiles=`find . -name '*.h'`; \
         for instfile in $$instfiles; do \
                $(INSTALL) -D $$instfile $$instdest/$$instfile; \
index abb3794823ad9aa39c57438fb96a1b41208e8b75..b93a1d769cb94c90c813a1e451d0d3824b62988c 100644 (file)
@@ -9,8 +9,6 @@ modules clean:
 modules_install:
        $(MAKE) -C @LINUX@ SUBDIRS=`pwd` \
                INSTALL_MOD_PATH=$(DESTDIR) INSTALL_MOD_DIR=addon $@
-       $(INSTALL) -D Module.symvers \
-               $(DESTDIR)/@LINUX@/include/spl/Module.symvers
 
 distdir:
        list='$(subdir-m)'; for subdir in $$list; do \
index cb264850939bec7e7e9afb6b9690de1b26af0114..4cd71de05d29d77209c55caa7fa66bc671318943 100644 (file)
@@ -1,22 +1,52 @@
 # The following block is used to allow the source RPM to be rebuilt 
 # against arbitrary kernels.  It ensure the release name is correct
 # and the proper build/install requires are set.
+
+# When require_kdir is defined we do one of two things:
+#   require_kver: Ideally defined to match the kernel.
+#  !require_kver: A best guess is made.
+%if 0%{?require_kdir:1}
 %if 0%{?require_kver:1}
 %define kver %{require_kver}
+%define kdir %{require_kdir}
+%else
+%{!?require_kobj: %define require_kobj %{require_kdir}}
+%define kdir %{require_kdir}
+%define kuts %{require_kobj}/include/linux/utsrelease.h \
+             %{require_kobj}/include/linux/version.h
+%define kver %((grep UTS_RELEASE %{kuts}) | cut -f2 -d'"' | tail -1)
+%endif
+
+# When require_kdir is not defined we do one of two things:
+#    require_kver: Locate the requested kernel in default dirs.
+#   !require_kver: Locate the newest kernel in default dirs.
+%else
+%if 0%{?require_kver:1}
+%define kver %{require_kver}
+%define kdef %{_prefix}/src/kernels/%{kver} %{_prefix}/src/linux-%{kver}
+%define kdir %((echo X; ls -1d %kdef 2>/dev/null)|sed -e 's/linux-//'|tail -1)
+%else
+%define kdef %{_prefix}/src/kernels/* %{_prefix}/src/linux-*
+%define kdir %((echo X; ls -1d %kdef 2>/dev/null)|sed -e 's/linux-//'|tail -1)
+%define kver %(basename %{kdir})
+%endif
+%endif
+
+# Kernel objects may not be located with the source.  Assume 
+# that they are but allow this to be overrided if required.
+%if 0%{?require_kobj:1}
+%define kobj %{require_kobj}
 %else
-%define _kdir %((echo X; ls -1d /usr/src/kernels/* /usr/src/linux-* 2>/dev/null)|sed -e 's/linux-//' | tail -1)
-%define kver %(basename %{_kdir})
+%define kobj %{kdir}
 %endif
 
 # Each distro has its own kernel package naming convention.
 %if 0%{?ch4}
 %define kstr chaos-kernel
 %define kdev chaos-kernel-devel
-%define kdir /usr/src/kernels/%{kver}
 %else
 %define kstr kernel
 %define kdev kernel-devel
-%define kdir /usr/src/kernels/%{kver}
 %endif
 
 %define debug_package %{nil}
@@ -69,7 +99,7 @@ symbols needed for building additional modules which use %{name}.
 %prep
 %setup
 %build
-%configure --with-linux=%{kdir}
+%configure --with-linux=%{kdir} --with-linux-obj=%{kobj}
 make
 
 %install
@@ -87,7 +117,7 @@ rm -rf $RPM_BUILD_ROOT
 
 %files devel
 %defattr(-,root,root)
-%{kdir}/include/spl/*
+%{_prefix}/src/*
 
 %post
 if [ -f /boot/System.map-%{kver} ]; then