kmod/configure.ac
Lucas De Marchi 4063401a05 build: Stop warning for attribute clang::suppress
That attribute allows us to instruct the Clang Static Analyzer to stop
giving some false positives. However when building the code (with gcc
and clang) they warn that the attribute is ignored. Just ignore as we
know what the attribute is for.

Signed-off-by: Lucas De Marchi <lucas.de.marchi@gmail.com>
Link: https://github.com/kmod-project/kmod/pull/233
2024-11-11 18:11:11 -06:00

354 lines
12 KiB
Plaintext

AC_PREREQ(2.64)
AC_INIT([kmod],
[33],
[linux-modules@vger.kernel.org],
[kmod],
[http://git.kernel.org/?p=utils/kernel/kmod/kmod.git])
AC_CONFIG_SRCDIR([libkmod/libkmod.c])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS(config.h)
AC_CONFIG_AUX_DIR([build-aux])
AC_USE_SYSTEM_EXTENSIONS
AC_SYS_LARGEFILE
AC_PREFIX_DEFAULT([/usr])
AM_MAINTAINER_MODE([enable])
AM_INIT_AUTOMAKE([check-news foreign 1.11 silent-rules tar-pax no-dist-gzip dist-xz subdir-objects color-tests parallel-tests])
AM_SILENT_RULES([yes])
LT_INIT([disable-static pic-only])
AS_IF([test "x$enable_static" = "xyes"], [AC_MSG_ERROR([--enable-static is not supported by kmod])])
AS_IF([test "x$enable_largefile" = "xno"], [AC_MSG_ERROR([--disable-largefile is not supported by kmod])])
module_compressions=""
module_signatures="legacy"
#####################################################################
# Program checks and configurations
#####################################################################
AC_PROG_SED
AC_PROG_MKDIR_P
AC_PROG_LN_S
PKG_PROG_PKG_CONFIG
AC_PROG_CC_C99
#####################################################################
# Function and structure checks
#####################################################################
AC_CHECK_FUNCS_ONCE([open64 stat64 fopen64 __stat64_time64])
AC_CHECK_FUNCS_ONCE([secure_getenv])
CC_CHECK_FUNC_BUILTIN([__builtin_clz])
CC_CHECK_FUNC_BUILTIN([__builtin_types_compatible_p])
CC_CHECK_FUNC_BUILTIN([__builtin_uadd_overflow], [ ], [ ])
CC_CHECK_FUNC_BUILTIN([__builtin_uaddl_overflow], [ ], [ ])
CC_CHECK_FUNC_BUILTIN([__builtin_uaddll_overflow], [ ], [ ])
CC_CHECK_FUNC_BUILTIN([__builtin_umul_overflow], [ ], [ ])
CC_CHECK_FUNC_BUILTIN([__builtin_umull_overflow], [ ], [ ])
CC_CHECK_FUNC_BUILTIN([__builtin_umulll_overflow], [ ], [ ])
# dietlibc doesn't have st.st_mtim struct member
AC_CHECK_MEMBERS([struct stat.st_mtim], [], [], [#include <sys/stat.h>])
# basename may be only available in libgen.h with the POSIX behavior,
# not desired here
AC_CHECK_DECLS_ONCE([[basename]], [], [], [[#include <string.h>]])
AC_CHECK_DECLS_ONCE([[__xstat]], [], [], [[#include <sys/stat.h]])
AC_MSG_CHECKING([whether _Static_assert() is supported])
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE([[_Static_assert(1, "Test");]])],
[AC_DEFINE([HAVE_STATIC_ASSERT], [1], [Define if _Static_assert() is available])
AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])])
AC_MSG_CHECKING([whether _Noreturn is supported])
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE([[#include <stdlib.h>
_Noreturn int foo(void) { exit(0); }]])],
[AC_DEFINE([HAVE_NORETURN], [1], [Define if _Noreturn is available])
AC_MSG_RESULT([yes])],
[AC_MSG_RESULT([no])])
#####################################################################
# --with-
#####################################################################
AC_ARG_WITH([distconfdir], AS_HELP_STRING([--with-distconfdir=DIR], [directory to search for distribution configuration files]),
[], [with_distconfdir='${prefix}/lib'])
AC_SUBST([distconfdir], [$with_distconfdir])
# Ideally this would be $prefix/lib/modules but default to /lib/modules for compatibility with earlier versions
AC_ARG_WITH([module_directory],
AS_HELP_STRING([--with-module-directory=DIR], [directory in which to look for kernel modules @<:@default=/lib/modules@:>@]),
[], [with_module_directory=/lib/modules])
AC_SUBST([module_directory], [$with_module_directory])
# Check all directory arguments for consistency.
for ac_var in distconfdir module_directory
do
eval ac_val=\$$ac_var
# Remove trailing slashes.
case $ac_val in
*/ )
ac_val=`expr "X$ac_val" : 'X\(.*@<:@^/@:>@\)' \| "X$ac_val" : 'X\(.*\)'`
eval $ac_var=\$ac_val;;
esac
# Be sure to have absolute directory names.
case $ac_val in
@<:@\\/$@:>@* | ?:@<:@\\/@:>@* ) continue;;
esac
as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
done
AC_ARG_WITH([zstd],
AS_HELP_STRING([--with-zstd], [handle Zstandard-compressed modules @<:@default=disabled@:>@]),
[], [with_zstd=no])
AS_IF([test "x$with_zstd" != "xno"], [
PKG_CHECK_MODULES([libzstd], [libzstd >= 1.4.4], [LIBS="$LIBS $libzstd_LIBS"])
AC_DEFINE([ENABLE_ZSTD], [1], [Enable Zstandard for modules.])
module_compressions="zstd $module_compressions"
], [
AC_MSG_NOTICE([Zstandard support not requested])
])
CC_FEATURE_APPEND([with_features], [with_zstd], [ZSTD])
AM_CONDITIONAL([ENABLE_ZSTD], [test "x$with_zstd" != "xno"])
AC_ARG_WITH([xz],
AS_HELP_STRING([--with-xz], [handle Xz-compressed modules @<:@default=disabled@:>@]),
[], [with_xz=no])
AS_IF([test "x$with_xz" != "xno"], [
PKG_CHECK_MODULES([liblzma], [liblzma >= 4.99], [LIBS="$LIBS $liblzma_LIBS"])
AC_DEFINE([ENABLE_XZ], [1], [Enable Xz for modules.])
module_compressions="xz $module_compressions"
], [
AC_MSG_NOTICE([Xz support not requested])
])
CC_FEATURE_APPEND([with_features], [with_xz], [XZ])
AM_CONDITIONAL([ENABLE_XZ], [test "x$with_xz" != "xno"])
AC_ARG_WITH([zlib],
AS_HELP_STRING([--with-zlib], [handle gzipped modules @<:@default=disabled@:>@]),
[], [with_zlib=no])
AS_IF([test "x$with_zlib" != "xno"], [
PKG_CHECK_MODULES([zlib], [zlib], [LIBS="$LIBS $zlib_LIBS"])
AC_DEFINE([ENABLE_ZLIB], [1], [Enable zlib for modules.])
module_compressions="gzip $module_compressions"
], [
AC_MSG_NOTICE([zlib support not requested])
])
CC_FEATURE_APPEND([with_features], [with_zlib], [ZLIB])
AM_CONDITIONAL([ENABLE_ZLIB], [test "x$with_zlib" != "xno"])
AC_ARG_WITH([openssl],
AS_HELP_STRING([--with-openssl], [handle PKCS7 signatures @<:@default=disabled@:>@]),
[], [with_openssl=no])
AS_IF([test "x$with_openssl" != "xno"], [
PKG_CHECK_MODULES([libcrypto], [libcrypto >= 1.1.0], [LIBS="$LIBS $libcrypto_LIBS"])
AC_DEFINE([ENABLE_OPENSSL], [1], [Enable openssl for modinfo.])
module_signatures="PKCS7 $module_signatures"
], [
AC_MSG_NOTICE([openssl support not requested])
])
CC_FEATURE_APPEND([with_features], [with_openssl], [LIBCRYPTO])
AC_ARG_WITH([bashcompletiondir],
AS_HELP_STRING([--with-bashcompletiondir=DIR], [Bash completions directory]),
[],
[AS_IF([$($PKG_CONFIG --exists bash-completion)], [
with_bashcompletiondir=$($PKG_CONFIG --variable=completionsdir bash-completion)
] , [
with_bashcompletiondir=${datadir}/bash-completion/completions
])])
AC_SUBST([bashcompletiondir], [$with_bashcompletiondir])
AC_ARG_WITH([fishcompletiondir],
AS_HELP_STRING([--with-fishcompletiondir=DIR], [Fish completions directory]),
[],
[AS_IF([$($PKG_CONFIG --exists fish)], [
with_fishcompletiondir=$($PKG_CONFIG --variable=completionsdir fish)
] , [
with_fishcompletiondir=${datadir}/fish/vendor_functions.d
])])
AC_SUBST([fishcompletiondir], [$with_fishcompletiondir])
AC_ARG_WITH([zshcompletiondir],
AS_HELP_STRING([--with-zshcompletiondir=DIR], [Zsh completions directory]),
[],
[with_zshcompletiondir=${datadir}/zsh/site-functions])
AC_SUBST([zshcompletiondir], [$with_zshcompletiondir])
#####################################################################
# --enable-
#####################################################################
AC_ARG_ENABLE([tools],
AS_HELP_STRING([--disable-tools], [disable building tools that provide same functionality as module-init-tools @<:@default=enabled@:>@]),
[], enable_tools=yes)
AM_CONDITIONAL([BUILD_TOOLS], [test "x$enable_tools" = "xyes"])
AC_ARG_ENABLE([manpages],
AS_HELP_STRING([--disable-manpages], [disable manpages @<:@default=enabled@:>@]),
[], enable_manpages=yes)
AS_IF([test "x$enable_manpages" = "xyes"], [
AC_PATH_PROG([SCDOC], [scdoc])
AS_IF([test "x$SCDOC" = "x"],[
AC_MSG_ERROR([*** scdoc needed for building manpages. Either install it or pass --disable-manpages])
])])
AM_CONDITIONAL([BUILD_MANPAGES], [test "x$enable_manpages" = "xyes"])
AC_ARG_ENABLE([logging],
AS_HELP_STRING([--disable-logging], [disable system logging @<:@default=enabled@:>@]),
[], enable_logging=yes)
AS_IF([test "x$enable_logging" = "xyes"], [
AC_DEFINE(ENABLE_LOGGING, [1], [System logging.])
], [
AC_DEFINE(ENABLE_LOGGING, [0], [System logging.])
])
AC_ARG_ENABLE([debug],
AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]),
[], [enable_debug=no])
AS_IF([test "x$enable_debug" = "xyes"], [
AC_DEFINE(ENABLE_DEBUG, [1], [Debug messages.])
], [
AC_DEFINE(ENABLE_DEBUG, [0], [Debug messages.])
])
AC_DEFINE(ENABLE_ELFDBG, [0], [Debug elf parsing messages.])
AC_ARG_ENABLE([coverage],
AS_HELP_STRING([--enable-coverage], [enable test coverage @<:@default=disabled@:>@]),
[], [enable_coverage=no])
AS_IF([test "x$enable_coverage" = "xyes"], [
AC_CHECK_PROG(have_coverage, [lcov], [yes], [no])
AS_IF([test "x$have_coverage" = xno],[
AC_MSG_ERROR([*** lcov support requested but the program was not found])
], [
lcov_version_major="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 1`"
lcov_version_minor="`lcov --version | cut -d ' ' -f 4 | cut -d '.' -f 2`"
AS_IF([test "$lcov_version_major" -lt 1 -o "$lcov_version_minor" -lt 10], [
AC_MSG_ERROR([*** lcov version is too old. 1.10 required])
], [
have_coverage=yes
CC_CHECK_FLAGS_APPEND([with_coverage_cflags], [CFLAGS], [\
-fprofile-arcs \
-ftest-coverage])
])
])
])
AM_CONDITIONAL([ENABLE_COVERAGE], [test "x$enable_coverage" = "xyes"])
m4_ifdef([GTK_DOC_CHECK], [
GTK_DOC_CHECK([1.14],[--flavour no-tmpl-flat])
], [
AM_CONDITIONAL([ENABLE_GTK_DOC], false)])
PKG_INSTALLDIR
PKG_NOARCH_INSTALLDIR
#####################################################################
# Default CFLAGS and LDFLAGS
#####################################################################
CC_CHECK_FLAGS_APPEND(with_cflags, [CFLAGS], [\
-pipe \
-fdata-sections \
-fdiagnostics-show-option \
-ffunction-sections \
-fno-common \
-fvisibility=hidden \
-W \
-Wall \
-Wchar-subscripts \
-Wdeclaration-after-statement \
-Wendif-labels \
-Wextra \
-Wfloat-equal \
-Wformat=2 \
-Wformat-nonliteral \
-Wformat-security \
-Winit-self \
-Wlogical-op \
-Wmissing-declarations \
-Wmissing-include-dirs \
-Wmissing-noreturn \
-Wmissing-prototypes \
-Wnested-externs \
-Wno-attributes=clang::suppress \
-Wno-unused-parameter \
-Wold-style-definition \
-Wpointer-arith \
-Wredundant-decls \
-Wshadow \
-Wsign-compare \
-Wstrict-aliasing=3 \
-Wstrict-prototypes \
-Wtype-limits \
-Wundef \
-Wuninitialized \
-Wvla \
-Wwrite-strings])
AC_SUBST([OUR_CFLAGS], "$with_cflags $with_coverage_cflags")
CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [ \
-Wl,--as-needed \
-Wl,--no-undefined \
-Wl,--gc-sections])
AC_SUBST([OUR_LDFLAGS], $with_ldflags)
AC_DEFINE_UNQUOTED(KMOD_FEATURES, ["$with_features"], [Features in this build])
#####################################################################
# Generate files from *.in
#####################################################################
AC_SUBST([module_compressions], $module_compressions)
AC_SUBST([module_signatures], $module_signatures)
AC_CONFIG_FILES([
Makefile
man/Makefile
libkmod/docs/Makefile
libkmod/docs/version.xml
libkmod/libkmod.pc
tools/kmod.pc
])
#####################################################################
AC_OUTPUT
AC_MSG_RESULT([
$PACKAGE $VERSION
=======
module_directory: ${module_directory}
prefix: ${prefix}
sysconfdir: ${sysconfdir}
distconfdir: ${distconfdir}
libdir: ${libdir}
includedir: ${includedir}
bindir: ${bindir}
Bash completions dir: ${with_bashcompletiondir}
compiler: ${CC}
cflags: ${with_cflags} ${CFLAGS}
ldflags: ${with_ldflags} ${LDFLAGS}
tools: ${enable_tools}
logging: ${enable_logging}
compression: zstd=${with_zstd} xz=${with_xz} zlib=${with_zlib}
debug: ${enable_debug}
coverage: ${enable_coverage}
doc: ${enable_gtk_doc}
man: ${enable_manpages}
features: ${with_features}
])