mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 02:49:32 +03:00
6732e223bf
Let Debian use the sysv-rc variant of the script, even when OpenRC is
installed. Unlike on Gentoo, OpenRC on Debian consumes both the
sysv-rc scripts and OpenRC ones. ZFS initscripts on Debian should be
the sysv-rc version to provide most compatibility and to integrate
with the rest of initscripts for dependency tracking.
Restrict the substitution in the Makefile to the dedicated list.
This construct is inspired by Mo Zhou's detection of the execution
shell and follows the strategy of Peter in 6ef28c526b
.
As of 2024, the initscripts are mostly relevant on Debian, Gentoo and
their derivatives.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Benda Xu <orv@debian.org>
Issue #8063
Issue #8204
Issue #8359
Closes #15977
650 lines
19 KiB
Plaintext
650 lines
19 KiB
Plaintext
AC_DEFUN([ZFS_AC_LICENSE], [
|
|
AC_MSG_CHECKING([zfs author])
|
|
AC_MSG_RESULT([$ZFS_META_AUTHOR])
|
|
|
|
AC_MSG_CHECKING([zfs license])
|
|
AC_MSG_RESULT([$ZFS_META_LICENSE])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_DEBUG_ENABLE], [
|
|
DEBUG_CFLAGS="-Werror"
|
|
DEBUG_CPPFLAGS="-DDEBUG -UNDEBUG"
|
|
DEBUG_LDFLAGS=""
|
|
DEBUG_ZFS="_with_debug"
|
|
WITH_DEBUG="true"
|
|
AC_DEFINE(ZFS_DEBUG, 1, [zfs debugging enabled])
|
|
|
|
KERNEL_DEBUG_CFLAGS="-Werror"
|
|
KERNEL_DEBUG_CPPFLAGS="-DDEBUG -UNDEBUG"
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_DEBUG_DISABLE], [
|
|
DEBUG_CFLAGS=""
|
|
DEBUG_CPPFLAGS="-UDEBUG -DNDEBUG"
|
|
DEBUG_LDFLAGS=""
|
|
DEBUG_ZFS="_without_debug"
|
|
WITH_DEBUG=""
|
|
|
|
KERNEL_DEBUG_CFLAGS=""
|
|
KERNEL_DEBUG_CPPFLAGS="-UDEBUG -DNDEBUG"
|
|
])
|
|
|
|
dnl #
|
|
dnl # When debugging is enabled:
|
|
dnl # - Enable all ASSERTs (-DDEBUG)
|
|
dnl # - Promote all compiler warnings to errors (-Werror)
|
|
dnl #
|
|
dnl # (If INVARIANTS is detected, we need to force DEBUG, or strange panics
|
|
dnl # can ensue.)
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_DEBUG], [
|
|
AC_MSG_CHECKING([whether assertion support will be enabled])
|
|
AC_ARG_ENABLE([debug],
|
|
[AS_HELP_STRING([--enable-debug],
|
|
[Enable compiler and code assertions @<:@default=no@:>@])],
|
|
[],
|
|
[enable_debug=no])
|
|
|
|
AS_CASE(["x$enable_debug"],
|
|
["xyes"],
|
|
[ZFS_AC_DEBUG_ENABLE],
|
|
["xno"],
|
|
[ZFS_AC_DEBUG_DISABLE],
|
|
[AC_MSG_ERROR([Unknown option $enable_debug])])
|
|
|
|
AS_CASE(["x$enable_invariants"],
|
|
["xyes"],
|
|
[],
|
|
["xno"],
|
|
[],
|
|
[ZFS_AC_DEBUG_INVARIANTS_DETECT])
|
|
|
|
AS_CASE(["x$enable_invariants"],
|
|
["xyes"],
|
|
[ZFS_AC_DEBUG_ENABLE],
|
|
["xno"],
|
|
[],
|
|
[AC_MSG_ERROR([Unknown option $enable_invariants])])
|
|
|
|
AC_SUBST(DEBUG_CFLAGS)
|
|
AC_SUBST(DEBUG_CPPFLAGS)
|
|
AC_SUBST(DEBUG_LDFLAGS)
|
|
AC_SUBST(DEBUG_ZFS)
|
|
AC_SUBST(WITH_DEBUG)
|
|
|
|
AC_SUBST(KERNEL_DEBUG_CFLAGS)
|
|
AC_SUBST(KERNEL_DEBUG_CPPFLAGS)
|
|
|
|
AC_MSG_RESULT([$enable_debug])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_DEBUGINFO_ENABLE], [
|
|
DEBUG_CFLAGS="$DEBUG_CFLAGS -g -fno-inline $NO_IPA_SRA"
|
|
|
|
KERNEL_DEBUG_CFLAGS="$KERNEL_DEBUG_CFLAGS -fno-inline $KERNEL_NO_IPA_SRA"
|
|
KERNEL_MAKE="$KERNEL_MAKE CONFIG_DEBUG_INFO=y"
|
|
|
|
DEBUGINFO_ZFS="_with_debuginfo"
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_DEBUGINFO_DISABLE], [
|
|
DEBUGINFO_ZFS="_without_debuginfo"
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_DEBUGINFO], [
|
|
AC_MSG_CHECKING([whether debuginfo support will be forced])
|
|
AC_ARG_ENABLE([debuginfo],
|
|
[AS_HELP_STRING([--enable-debuginfo],
|
|
[Force generation of debuginfo @<:@default=no@:>@])],
|
|
[],
|
|
[enable_debuginfo=no])
|
|
|
|
AS_CASE(["x$enable_debuginfo"],
|
|
["xyes"],
|
|
[ZFS_AC_DEBUGINFO_ENABLE],
|
|
["xno"],
|
|
[ZFS_AC_DEBUGINFO_DISABLE],
|
|
[AC_MSG_ERROR([Unknown option $enable_debuginfo])])
|
|
|
|
AC_SUBST(DEBUG_CFLAGS)
|
|
AC_SUBST(DEBUGINFO_ZFS)
|
|
|
|
AC_SUBST(KERNEL_DEBUG_CFLAGS)
|
|
AC_SUBST(KERNEL_MAKE)
|
|
|
|
AC_MSG_RESULT([$enable_debuginfo])
|
|
])
|
|
|
|
dnl #
|
|
dnl # Disabled by default, provides basic memory tracking. Track the total
|
|
dnl # number of bytes allocated with kmem_alloc() and freed with kmem_free().
|
|
dnl # Then at module unload time if any bytes were leaked it will be reported
|
|
dnl # on the console.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_DEBUG_KMEM], [
|
|
AC_MSG_CHECKING([whether basic kmem accounting is enabled])
|
|
AC_ARG_ENABLE([debug-kmem],
|
|
[AS_HELP_STRING([--enable-debug-kmem],
|
|
[Enable basic kmem accounting @<:@default=no@:>@])],
|
|
[],
|
|
[enable_debug_kmem=no])
|
|
|
|
AS_IF([test "x$enable_debug_kmem" = xyes], [
|
|
KERNEL_DEBUG_CPPFLAGS="${KERNEL_DEBUG_CPPFLAGS} -DDEBUG_KMEM"
|
|
DEBUG_KMEM_ZFS="_with_debug_kmem"
|
|
], [
|
|
DEBUG_KMEM_ZFS="_without_debug_kmem"
|
|
])
|
|
|
|
AC_SUBST(KERNEL_DEBUG_CPPFLAGS)
|
|
AC_SUBST(DEBUG_KMEM_ZFS)
|
|
|
|
AC_MSG_RESULT([$enable_debug_kmem])
|
|
])
|
|
|
|
dnl #
|
|
dnl # Disabled by default, provides detailed memory tracking. This feature
|
|
dnl # also requires --enable-debug-kmem to be set. When enabled not only will
|
|
dnl # total bytes be tracked but also the location of every kmem_alloc() and
|
|
dnl # kmem_free(). When the module is unloaded a list of all leaked addresses
|
|
dnl # and where they were allocated will be dumped to the console. Enabling
|
|
dnl # this feature has a significant impact on performance but it makes finding
|
|
dnl # memory leaks straight forward.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_DEBUG_KMEM_TRACKING], [
|
|
AC_MSG_CHECKING([whether detailed kmem tracking is enabled])
|
|
AC_ARG_ENABLE([debug-kmem-tracking],
|
|
[AS_HELP_STRING([--enable-debug-kmem-tracking],
|
|
[Enable detailed kmem tracking @<:@default=no@:>@])],
|
|
[],
|
|
[enable_debug_kmem_tracking=no])
|
|
|
|
AS_IF([test "x$enable_debug_kmem_tracking" = xyes], [
|
|
KERNEL_DEBUG_CPPFLAGS="${KERNEL_DEBUG_CPPFLAGS} -DDEBUG_KMEM_TRACKING"
|
|
DEBUG_KMEM_TRACKING_ZFS="_with_debug_kmem_tracking"
|
|
], [
|
|
DEBUG_KMEM_TRACKING_ZFS="_without_debug_kmem_tracking"
|
|
])
|
|
|
|
AC_SUBST(KERNEL_DEBUG_CPPFLAGS)
|
|
AC_SUBST(DEBUG_KMEM_TRACKING_ZFS)
|
|
|
|
AC_MSG_RESULT([$enable_debug_kmem_tracking])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_DEBUG_INVARIANTS_DETECT_FREEBSD], [
|
|
AS_IF([sysctl -n kern.conftxt | grep -Fqx $'options\tINVARIANTS'],
|
|
[enable_invariants="yes"],
|
|
[enable_invariants="no"])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_DEBUG_INVARIANTS_DETECT], [
|
|
AM_COND_IF([BUILD_FREEBSD],
|
|
[ZFS_AC_DEBUG_INVARIANTS_DETECT_FREEBSD],
|
|
[enable_invariants="no"])
|
|
])
|
|
|
|
dnl #
|
|
dnl # Detected for the running kernel by default, enables INVARIANTS features
|
|
dnl # in the FreeBSD kernel module. This feature must be used when building
|
|
dnl # for a FreeBSD kernel with "options INVARIANTS" in the KERNCONF and must
|
|
dnl # not be used when the INVARIANTS option is absent.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_DEBUG_INVARIANTS], [
|
|
AC_MSG_CHECKING([whether FreeBSD kernel INVARIANTS checks are enabled])
|
|
AC_ARG_ENABLE([invariants],
|
|
[AS_HELP_STRING([--enable-invariants],
|
|
[Enable FreeBSD kernel INVARIANTS checks [[default: detect]]])],
|
|
[], [ZFS_AC_DEBUG_INVARIANTS_DETECT])
|
|
|
|
AS_IF([test "x$enable_invariants" = xyes],
|
|
[WITH_INVARIANTS="true"],
|
|
[WITH_INVARIANTS=""])
|
|
AC_SUBST(WITH_INVARIANTS)
|
|
|
|
AC_MSG_RESULT([$enable_invariants])
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
|
|
AX_COUNT_CPUS([])
|
|
AC_SUBST(CPU_COUNT)
|
|
|
|
ZFS_AC_CONFIG_ALWAYS_CC_NO_CLOBBERED
|
|
ZFS_AC_CONFIG_ALWAYS_CC_INFINITE_RECURSION
|
|
ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_INFINITE_RECURSION
|
|
ZFS_AC_CONFIG_ALWAYS_CC_IMPLICIT_FALLTHROUGH
|
|
ZFS_AC_CONFIG_ALWAYS_CC_FRAME_LARGER_THAN
|
|
ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_TRUNCATION
|
|
ZFS_AC_CONFIG_ALWAYS_CC_NO_FORMAT_ZERO_LENGTH
|
|
ZFS_AC_CONFIG_ALWAYS_CC_FORMAT_OVERFLOW
|
|
ZFS_AC_CONFIG_ALWAYS_CC_NO_OMIT_FRAME_POINTER
|
|
ZFS_AC_CONFIG_ALWAYS_CC_NO_IPA_SRA
|
|
ZFS_AC_CONFIG_ALWAYS_KERNEL_CC_NO_IPA_SRA
|
|
ZFS_AC_CONFIG_ALWAYS_CC_ASAN
|
|
ZFS_AC_CONFIG_ALWAYS_CC_UBSAN
|
|
ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD
|
|
ZFS_AC_CONFIG_ALWAYS_SYSTEM
|
|
ZFS_AC_CONFIG_ALWAYS_ARCH
|
|
ZFS_AC_CONFIG_ALWAYS_PYTHON
|
|
ZFS_AC_CONFIG_ALWAYS_PYZFS
|
|
ZFS_AC_CONFIG_ALWAYS_SED
|
|
ZFS_AC_CONFIG_ALWAYS_CPPCHECK
|
|
ZFS_AC_CONFIG_ALWAYS_SHELLCHECK
|
|
ZFS_AC_CONFIG_ALWAYS_PARALLEL
|
|
])
|
|
|
|
AC_DEFUN([ZFS_AC_CONFIG], [
|
|
|
|
dnl # Remove the previous build test directory.
|
|
rm -Rf build
|
|
|
|
ZFS_CONFIG=all
|
|
AC_ARG_WITH([config],
|
|
AS_HELP_STRING([--with-config=CONFIG],
|
|
[Config file 'kernel|user|all|srpm']),
|
|
[ZFS_CONFIG="$withval"])
|
|
AC_ARG_ENABLE([linux-builtin],
|
|
[AS_HELP_STRING([--enable-linux-builtin],
|
|
[Configure for builtin in-tree kernel modules @<:@default=no@:>@])],
|
|
[],
|
|
[enable_linux_builtin=no])
|
|
|
|
AC_MSG_CHECKING([zfs config])
|
|
AC_MSG_RESULT([$ZFS_CONFIG]);
|
|
AC_SUBST(ZFS_CONFIG)
|
|
|
|
ZFS_AC_CONFIG_ALWAYS
|
|
|
|
AM_COND_IF([BUILD_LINUX], [
|
|
AC_ARG_VAR([TEST_JOBS], [simultaneous jobs during configure])
|
|
if test "x$ac_cv_env_TEST_JOBS_set" != "xset"; then
|
|
TEST_JOBS=$CPU_COUNT
|
|
fi
|
|
AC_SUBST(TEST_JOBS)
|
|
])
|
|
|
|
ZFS_INIT_SYSV=
|
|
ZFS_INIT_SYSTEMD=
|
|
ZFS_WANT_MODULES_LOAD_D=
|
|
|
|
case "$ZFS_CONFIG" in
|
|
kernel) ZFS_AC_CONFIG_KERNEL ;;
|
|
user) ZFS_AC_CONFIG_USER ;;
|
|
all) ZFS_AC_CONFIG_USER
|
|
ZFS_AC_CONFIG_KERNEL ;;
|
|
dist) ;;
|
|
srpm) ;;
|
|
*)
|
|
AC_MSG_RESULT([Error!])
|
|
AC_MSG_ERROR([Bad value "$ZFS_CONFIG" for --with-config,
|
|
user kernel|user|all|srpm]) ;;
|
|
esac
|
|
|
|
AM_CONDITIONAL([INIT_SYSV], [test "x$ZFS_INIT_SYSV" = "xyes"])
|
|
AM_CONDITIONAL([INIT_SYSTEMD], [test "x$ZFS_INIT_SYSTEMD" = "xyes"])
|
|
AM_CONDITIONAL([WANT_MODULES_LOAD_D], [test "x$ZFS_WANT_MODULES_LOAD_D" = "xyes"])
|
|
|
|
AM_CONDITIONAL([CONFIG_USER],
|
|
[test "$ZFS_CONFIG" = user -o "$ZFS_CONFIG" = all])
|
|
AM_CONDITIONAL([CONFIG_KERNEL],
|
|
[test "$ZFS_CONFIG" = kernel -o "$ZFS_CONFIG" = all] &&
|
|
[test "x$enable_linux_builtin" != xyes ])
|
|
AM_CONDITIONAL([CONFIG_QAT],
|
|
[test "$ZFS_CONFIG" = kernel -o "$ZFS_CONFIG" = all] &&
|
|
[test "x$qatsrc" != x ])
|
|
AM_CONDITIONAL([WANT_DEVNAME2DEVID], [test "x$user_libudev" = xyes ])
|
|
AM_CONDITIONAL([WANT_MMAP_LIBAIO], [test "x$user_libaio" = xyes ])
|
|
AM_CONDITIONAL([PAM_ZFS_ENABLED], [test "x$enable_pam" = xyes])
|
|
])
|
|
|
|
dnl #
|
|
dnl # Check for rpm+rpmbuild to build RPM packages. If these tools
|
|
dnl # are missing it is non-fatal but you will not be able to build
|
|
dnl # RPM packages and will be warned if you try too.
|
|
dnl #
|
|
dnl # By default the generic spec file will be used because it requires
|
|
dnl # minimal dependencies. Distribution specific spec files can be
|
|
dnl # placed under the 'rpm/<distribution>' directory and enabled using
|
|
dnl # the --with-spec=<distribution> configure option.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_RPM], [
|
|
RPM=rpm
|
|
RPMBUILD=rpmbuild
|
|
|
|
AC_MSG_CHECKING([whether $RPM is available])
|
|
AS_IF([tmp=$($RPM --version 2>/dev/null)], [
|
|
RPM_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }')
|
|
HAVE_RPM=yes
|
|
AC_MSG_RESULT([$HAVE_RPM ($RPM_VERSION)])
|
|
],[
|
|
HAVE_RPM=no
|
|
AC_MSG_RESULT([$HAVE_RPM])
|
|
])
|
|
|
|
AC_MSG_CHECKING([whether $RPMBUILD is available])
|
|
AS_IF([tmp=$($RPMBUILD --version 2>/dev/null)], [
|
|
RPMBUILD_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }')
|
|
HAVE_RPMBUILD=yes
|
|
AC_MSG_RESULT([$HAVE_RPMBUILD ($RPMBUILD_VERSION)])
|
|
],[
|
|
HAVE_RPMBUILD=no
|
|
AC_MSG_RESULT([$HAVE_RPMBUILD])
|
|
])
|
|
|
|
RPM_DEFINE_COMMON='--define "$(DEBUG_ZFS) 1"'
|
|
RPM_DEFINE_COMMON=${RPM_DEFINE_COMMON}' --define "$(DEBUGINFO_ZFS) 1"'
|
|
RPM_DEFINE_COMMON=${RPM_DEFINE_COMMON}' --define "$(DEBUG_KMEM_ZFS) 1"'
|
|
RPM_DEFINE_COMMON=${RPM_DEFINE_COMMON}' --define "$(DEBUG_KMEM_TRACKING_ZFS) 1"'
|
|
RPM_DEFINE_COMMON=${RPM_DEFINE_COMMON}' --define "$(ASAN_ZFS) 1"'
|
|
RPM_DEFINE_COMMON=${RPM_DEFINE_COMMON}' --define "$(UBSAN_ZFS) 1"'
|
|
|
|
AS_IF([test "x$enable_debuginfo" = xyes], [
|
|
RPM_DEFINE_COMMON=${RPM_DEFINE_COMMON}' --define "__strip /bin/true"'
|
|
])
|
|
|
|
RPM_DEFINE_UTIL=' --define "_initconfdir $(initconfdir)"'
|
|
|
|
dnl # Make the next three RPM_DEFINE_UTIL additions conditional, since
|
|
dnl # their values may not be set when running:
|
|
dnl #
|
|
dnl # ./configure --with-config=srpm
|
|
dnl #
|
|
AS_IF([test -n "$dracutdir" ], [
|
|
RPM_DEFINE_UTIL=${RPM_DEFINE_UTIL}' --define "_dracutdir $(dracutdir)"'
|
|
])
|
|
AS_IF([test -n "$udevdir" ], [
|
|
RPM_DEFINE_UTIL=${RPM_DEFINE_UTIL}' --define "_udevdir $(udevdir)"'
|
|
])
|
|
AS_IF([test -n "$udevruledir" ], [
|
|
RPM_DEFINE_UTIL=${RPM_DEFINE_UTIL}' --define "_udevruledir $(udevruledir)"'
|
|
])
|
|
AS_IF([test -n "$bashcompletiondir" ], [
|
|
RPM_DEFINE_UTIL=${RPM_DEFINE_UTIL}' --define "_bashcompletiondir $(bashcompletiondir)"'
|
|
])
|
|
RPM_DEFINE_UTIL=${RPM_DEFINE_UTIL}' $(DEFINE_SYSTEMD)'
|
|
RPM_DEFINE_UTIL=${RPM_DEFINE_UTIL}' $(DEFINE_PYZFS)'
|
|
RPM_DEFINE_UTIL=${RPM_DEFINE_UTIL}' $(DEFINE_PAM)'
|
|
RPM_DEFINE_UTIL=${RPM_DEFINE_UTIL}' $(DEFINE_PYTHON_VERSION)'
|
|
RPM_DEFINE_UTIL=${RPM_DEFINE_UTIL}' $(DEFINE_PYTHON_PKG_VERSION)'
|
|
|
|
dnl # Override default lib directory on Debian/Ubuntu systems. The
|
|
dnl # provided /usr/lib/rpm/platform/<arch>/macros files do not
|
|
dnl # specify the correct path for multiarch systems as described
|
|
dnl # by the packaging guidelines.
|
|
dnl #
|
|
dnl # https://wiki.ubuntu.com/MultiarchSpec
|
|
dnl # https://wiki.debian.org/Multiarch/Implementation
|
|
dnl #
|
|
AS_IF([test "$DEFAULT_PACKAGE" = "deb"], [
|
|
MULTIARCH_LIBDIR="lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
|
|
RPM_DEFINE_UTIL=${RPM_DEFINE_UTIL}' --define "_lib $(MULTIARCH_LIBDIR)"'
|
|
AC_SUBST(MULTIARCH_LIBDIR)
|
|
])
|
|
|
|
dnl # Make RPM_DEFINE_KMOD additions conditional on CONFIG_KERNEL,
|
|
dnl # since the values will not be set otherwise. The spec files
|
|
dnl # provide defaults for them.
|
|
dnl #
|
|
RPM_DEFINE_KMOD='--define "_wrong_version_format_terminate_build 0"'
|
|
AM_COND_IF([CONFIG_KERNEL], [
|
|
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernels $(LINUX_VERSION)"'
|
|
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "ksrc $(LINUX)"'
|
|
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kobj $(LINUX_OBJ)"'
|
|
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_cc KERNEL_CC=$(KERNEL_CC)"'
|
|
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_ld KERNEL_LD=$(KERNEL_LD)"'
|
|
RPM_DEFINE_KMOD=${RPM_DEFINE_KMOD}' --define "kernel_llvm KERNEL_LLVM=$(KERNEL_LLVM)"'
|
|
])
|
|
|
|
RPM_DEFINE_DKMS=''
|
|
|
|
SRPM_DEFINE_COMMON='--define "build_src_rpm 1"'
|
|
SRPM_DEFINE_UTIL=
|
|
SRPM_DEFINE_KMOD=
|
|
SRPM_DEFINE_DKMS=
|
|
|
|
RPM_SPEC_DIR="rpm/generic"
|
|
AC_ARG_WITH([spec],
|
|
AS_HELP_STRING([--with-spec=SPEC],
|
|
[Spec files 'generic|redhat']),
|
|
[RPM_SPEC_DIR="rpm/$withval"])
|
|
|
|
AC_MSG_CHECKING([whether spec files are available])
|
|
AC_MSG_RESULT([yes ($RPM_SPEC_DIR/*.spec.in)])
|
|
|
|
AC_SUBST(HAVE_RPM)
|
|
AC_SUBST(RPM)
|
|
AC_SUBST(RPM_VERSION)
|
|
|
|
AC_SUBST(HAVE_RPMBUILD)
|
|
AC_SUBST(RPMBUILD)
|
|
AC_SUBST(RPMBUILD_VERSION)
|
|
|
|
AC_SUBST(RPM_SPEC_DIR)
|
|
AC_SUBST(RPM_DEFINE_UTIL)
|
|
AC_SUBST(RPM_DEFINE_KMOD)
|
|
AC_SUBST(RPM_DEFINE_DKMS)
|
|
AC_SUBST(RPM_DEFINE_COMMON)
|
|
AC_SUBST(SRPM_DEFINE_UTIL)
|
|
AC_SUBST(SRPM_DEFINE_KMOD)
|
|
AC_SUBST(SRPM_DEFINE_DKMS)
|
|
AC_SUBST(SRPM_DEFINE_COMMON)
|
|
])
|
|
|
|
dnl #
|
|
dnl # Check for dpkg+dpkg-buildpackage to build DEB packages. If these
|
|
dnl # tools are missing it is non-fatal but you will not be able to build
|
|
dnl # DEB packages and will be warned if you try too.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_DPKG], [
|
|
DPKG=dpkg
|
|
DPKGBUILD=dpkg-buildpackage
|
|
|
|
AC_MSG_CHECKING([whether $DPKG is available])
|
|
AS_IF([tmp=$($DPKG --version 2>/dev/null)], [
|
|
DPKG_VERSION=$(echo $tmp | $AWK '/Debian/ { print $[7] }')
|
|
HAVE_DPKG=yes
|
|
AC_MSG_RESULT([$HAVE_DPKG ($DPKG_VERSION)])
|
|
],[
|
|
HAVE_DPKG=no
|
|
AC_MSG_RESULT([$HAVE_DPKG])
|
|
])
|
|
|
|
AC_MSG_CHECKING([whether $DPKGBUILD is available])
|
|
AS_IF([tmp=$($DPKGBUILD --version 2>/dev/null)], [
|
|
DPKGBUILD_VERSION=$(echo $tmp | \
|
|
$AWK '/Debian/ { print $[4] }' | cut -f-4 -d'.')
|
|
HAVE_DPKGBUILD=yes
|
|
AC_MSG_RESULT([$HAVE_DPKGBUILD ($DPKGBUILD_VERSION)])
|
|
],[
|
|
HAVE_DPKGBUILD=no
|
|
AC_MSG_RESULT([$HAVE_DPKGBUILD])
|
|
])
|
|
|
|
AC_SUBST(HAVE_DPKG)
|
|
AC_SUBST(DPKG)
|
|
AC_SUBST(DPKG_VERSION)
|
|
|
|
AC_SUBST(HAVE_DPKGBUILD)
|
|
AC_SUBST(DPKGBUILD)
|
|
AC_SUBST(DPKGBUILD_VERSION)
|
|
AC_SUBST([CFGOPTS], ["$CFGOPTS"])
|
|
])
|
|
|
|
dnl #
|
|
dnl # Until native packaging for various different packing systems
|
|
dnl # can be added the least we can do is attempt to use alien to
|
|
dnl # convert the RPM packages to the needed package type. This is
|
|
dnl # a hack but so far it has worked reasonable well.
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_ALIEN], [
|
|
ALIEN=alien
|
|
|
|
AC_MSG_CHECKING([whether $ALIEN is available])
|
|
AS_IF([tmp=$($ALIEN --version 2>/dev/null)], [
|
|
ALIEN_VERSION=$(echo $tmp | $AWK '{ print $[3] }')
|
|
ALIEN_MAJOR=$(echo ${ALIEN_VERSION} | $AWK -F'.' '{ print $[1] }')
|
|
ALIEN_MINOR=$(echo ${ALIEN_VERSION} | $AWK -F'.' '{ print $[2] }')
|
|
ALIEN_POINT=$(echo ${ALIEN_VERSION} | $AWK -F'.' '{ print $[3] }')
|
|
HAVE_ALIEN=yes
|
|
AC_MSG_RESULT([$HAVE_ALIEN ($ALIEN_VERSION)])
|
|
],[
|
|
HAVE_ALIEN=no
|
|
AC_MSG_RESULT([$HAVE_ALIEN])
|
|
])
|
|
|
|
AC_SUBST(HAVE_ALIEN)
|
|
AC_SUBST(ALIEN)
|
|
AC_SUBST(ALIEN_VERSION)
|
|
AC_SUBST(ALIEN_MAJOR)
|
|
AC_SUBST(ALIEN_MINOR)
|
|
AC_SUBST(ALIEN_POINT)
|
|
])
|
|
|
|
dnl #
|
|
dnl # Using the VENDOR tag from config.guess set the default
|
|
dnl # package type for 'make pkg': (rpm | deb | tgz)
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [
|
|
AC_MSG_CHECKING([os distribution])
|
|
AC_ARG_WITH([vendor],
|
|
[AS_HELP_STRING([--with-vendor],
|
|
[Distribution vendor @<:@default=check@:>@])],
|
|
[with_vendor=$withval],
|
|
[with_vendor=check])
|
|
AS_IF([test "x$with_vendor" = "xcheck"],[
|
|
if test -f /etc/toss-release ; then
|
|
VENDOR=toss ;
|
|
elif test -f /etc/fedora-release ; then
|
|
VENDOR=fedora ;
|
|
elif test -f /etc/redhat-release ; then
|
|
VENDOR=redhat ;
|
|
elif test -f /etc/gentoo-release ; then
|
|
VENDOR=gentoo ;
|
|
elif test -f /etc/arch-release ; then
|
|
VENDOR=arch ;
|
|
elif test -f /etc/SuSE-release ; then
|
|
VENDOR=sles ;
|
|
elif test -f /etc/slackware-version ; then
|
|
VENDOR=slackware ;
|
|
elif test -f /etc/lunar.release ; then
|
|
VENDOR=lunar ;
|
|
elif test -f /etc/lsb-release ; then
|
|
VENDOR=ubuntu ;
|
|
elif test -f /etc/debian_version ; then
|
|
VENDOR=debian ;
|
|
elif test -f /etc/alpine-release ; then
|
|
VENDOR=alpine ;
|
|
elif test -f /bin/freebsd-version ; then
|
|
VENDOR=freebsd ;
|
|
elif test -f /etc/openEuler-release ; then
|
|
VENDOR=openeuler ;
|
|
else
|
|
VENDOR= ;
|
|
fi],
|
|
[ test "x${with_vendor}" != x],[
|
|
VENDOR="$with_vendor" ],
|
|
[ VENDOR= ; ]
|
|
)
|
|
AC_MSG_RESULT([$VENDOR])
|
|
AC_SUBST(VENDOR)
|
|
|
|
AC_MSG_CHECKING([default package type])
|
|
case "$VENDOR" in
|
|
toss) DEFAULT_PACKAGE=rpm ;;
|
|
redhat) DEFAULT_PACKAGE=rpm ;;
|
|
fedora) DEFAULT_PACKAGE=rpm ;;
|
|
gentoo) DEFAULT_PACKAGE=tgz ;;
|
|
alpine) DEFAULT_PACKAGE=tgz ;;
|
|
arch) DEFAULT_PACKAGE=tgz ;;
|
|
sles) DEFAULT_PACKAGE=rpm ;;
|
|
slackware) DEFAULT_PACKAGE=tgz ;;
|
|
lunar) DEFAULT_PACKAGE=tgz ;;
|
|
ubuntu) DEFAULT_PACKAGE=deb ;;
|
|
debian) DEFAULT_PACKAGE=deb ;;
|
|
freebsd) DEFAULT_PACKAGE=pkg ;;
|
|
openeuler) DEFAULT_PACKAGE=rpm ;;
|
|
*) DEFAULT_PACKAGE=rpm ;;
|
|
esac
|
|
AC_MSG_RESULT([$DEFAULT_PACKAGE])
|
|
AC_SUBST(DEFAULT_PACKAGE)
|
|
|
|
AC_MSG_CHECKING([default init directory])
|
|
case "$VENDOR" in
|
|
freebsd) initdir=$sysconfdir/rc.d ;;
|
|
*) initdir=$sysconfdir/init.d;;
|
|
esac
|
|
AC_MSG_RESULT([$initdir])
|
|
AC_SUBST(initdir)
|
|
|
|
AC_MSG_CHECKING([default shell])
|
|
case "$VENDOR" in
|
|
gentoo|alpine) DEFAULT_INIT_SHELL=/sbin/openrc-run
|
|
IS_SYSV_RC=false ;;
|
|
*) DEFAULT_INIT_SHELL=/bin/sh
|
|
IS_SYSV_RC=true ;;
|
|
esac
|
|
|
|
AC_MSG_RESULT([$DEFAULT_INIT_SHELL])
|
|
AC_SUBST(DEFAULT_INIT_SHELL)
|
|
AC_SUBST(IS_SYSV_RC)
|
|
|
|
AC_MSG_CHECKING([default nfs server init script])
|
|
AS_IF([test "$VENDOR" = "debian"],
|
|
[DEFAULT_INIT_NFS_SERVER="nfs-kernel-server"],
|
|
[DEFAULT_INIT_NFS_SERVER="nfs"]
|
|
)
|
|
AC_MSG_RESULT([$DEFAULT_INIT_NFS_SERVER])
|
|
AC_SUBST(DEFAULT_INIT_NFS_SERVER)
|
|
|
|
AC_MSG_CHECKING([default init config directory])
|
|
case "$VENDOR" in
|
|
alpine) initconfdir=/etc/conf.d ;;
|
|
gentoo) initconfdir=/etc/conf.d ;;
|
|
toss) initconfdir=/etc/sysconfig ;;
|
|
redhat) initconfdir=/etc/sysconfig ;;
|
|
fedora) initconfdir=/etc/sysconfig ;;
|
|
sles) initconfdir=/etc/sysconfig ;;
|
|
openeuler) initconfdir=/etc/sysconfig ;;
|
|
ubuntu) initconfdir=/etc/default ;;
|
|
debian) initconfdir=/etc/default ;;
|
|
freebsd) initconfdir=$sysconfdir/rc.conf.d;;
|
|
*) initconfdir=/etc/default ;;
|
|
esac
|
|
AC_MSG_RESULT([$initconfdir])
|
|
AC_SUBST(initconfdir)
|
|
|
|
AC_MSG_CHECKING([whether initramfs-tools is available])
|
|
if test -d /usr/share/initramfs-tools ; then
|
|
RPM_DEFINE_INITRAMFS='--define "_initramfs 1"'
|
|
AC_MSG_RESULT([yes])
|
|
else
|
|
RPM_DEFINE_INITRAMFS=''
|
|
AC_MSG_RESULT([no])
|
|
fi
|
|
AC_SUBST(RPM_DEFINE_INITRAMFS)
|
|
|
|
AC_MSG_CHECKING([default bash completion directory])
|
|
case "$VENDOR" in
|
|
ubuntu) bashcompletiondir=/usr/share/bash-completion/completions ;;
|
|
debian) bashcompletiondir=/usr/share/bash-completion/completions ;;
|
|
freebsd) bashcompletiondir=$sysconfdir/bash_completion.d;;
|
|
gentoo) bashcompletiondir=/usr/share/bash-completion/completions ;;
|
|
*) bashcompletiondir=/etc/bash_completion.d ;;
|
|
esac
|
|
AC_MSG_RESULT([$bashcompletiondir])
|
|
AC_SUBST(bashcompletiondir)
|
|
|
|
])
|
|
|
|
dnl #
|
|
dnl # Default ZFS package configuration
|
|
dnl #
|
|
AC_DEFUN([ZFS_AC_PACKAGE], [
|
|
ZFS_AC_DEFAULT_PACKAGE
|
|
AS_IF([test x$VENDOR != xfreebsd], [
|
|
ZFS_AC_RPM
|
|
ZFS_AC_DPKG
|
|
ZFS_AC_ALIEN
|
|
])
|
|
])
|