mirror of
https://github.com/nilfs-dev/nilfs-utils.git
synced 2026-01-26 05:37:51 +00:00
Add a compatibility layer for getprogname() to allow utilities to retrieve the short program name uniformly, removing the need for manual argv[0] parsing. The logic prioritizes the GNU extension variable 'program_invocation_short_name', falling back to getprogname. If neither is available, the build fails with an #error. Signed-off-by: Ryusuke Konishi <konishi.ryusuke@gmail.com>
372 lines
11 KiB
Plaintext
372 lines
11 KiB
Plaintext
dnl configure.ac
|
|
dnl
|
|
dnl Copyright (C) 2007-2012 Nippon Telegraph and Telephone Corporation.
|
|
|
|
# -*- Autoconf -*-
|
|
# Process this file with autoconf to produce a configure script.
|
|
|
|
AC_PREREQ(2.60)
|
|
AC_INIT([NILFS utils],[2.3.0-dev],[linux-nilfs@vger.kernel.org])
|
|
AM_INIT_AUTOMAKE
|
|
AC_CONFIG_SRCDIR([config.h.in])
|
|
AC_CONFIG_HEADERS([config.h])
|
|
AC_CONFIG_MACRO_DIR([m4])
|
|
|
|
# Checks for programs.
|
|
AC_PROG_CC
|
|
AM_PROG_CC_C_O
|
|
AC_PROG_CPP
|
|
AC_PROG_INSTALL
|
|
AC_PROG_LN_S
|
|
AC_PROG_MAKE_SET
|
|
AC_USE_SYSTEM_EXTENSIONS
|
|
LT_PREREQ([2.4])
|
|
LT_INIT([disable-static])
|
|
AC_PATH_PROG([LDCONFIG], [ldconfig],
|
|
[AC_MSG_ERROR([ldconfig not found])],
|
|
[$PATH:/usr/sbin:/sbin])
|
|
|
|
dnl --------------------------------------------------------------------------
|
|
dnl NILFS_UTILS_DEFINE_HAVE_LIB(PREFIX)
|
|
dnl
|
|
dnl Helper macro to define HAVE_LIB<PREFIX> with a standard description.
|
|
dnl Arguments:
|
|
dnl $1 : PREFIX (e.g., UUID) - used to name HAVE_LIB* variable.
|
|
dnl --------------------------------------------------------------------------
|
|
AC_DEFUN([NILFS_UTILS_DEFINE_HAVE_LIB], [
|
|
dnl Generate library name for description (e.g., uuid)
|
|
m4_pushdef([lib_name], m4_tolower([$1]))
|
|
|
|
AC_DEFINE(AS_TR_CPP([HAVE_LIB$1]), 1,
|
|
[Define to 1 if you have the ']lib_name[' library (-l]lib_name[).])
|
|
|
|
m4_popdef([lib_name])
|
|
])
|
|
|
|
dnl --------------------------------------------------------------------------
|
|
dnl NILFS_UTILS_PKG_CHECK(PREFIX, MODULE, FALLBACK_ACTION)
|
|
dnl
|
|
dnl Arguments:
|
|
dnl $1 : PREFIX (e.g., UUID) - Used to name HAVE_LIB* variable, etc.
|
|
dnl $2 : MODULE (e.g., uuid) - pkg-config module name
|
|
dnl $3 : FALLBACK_ACTION - Code to run if pkg-config fails or is missing
|
|
dnl --------------------------------------------------------------------------
|
|
AC_DEFUN([NILFS_UTILS_PKG_CHECK], [
|
|
dnl Generate a temporary variable name (e.g., have_uuid_pkg_config)
|
|
m4_pushdef([have_pkg_var], [have_]m4_tolower([$1])[_pkg_config])
|
|
|
|
have_pkg_var=no
|
|
|
|
dnl Try pkg-config if available
|
|
m4_ifdef([PKG_CHECK_MODULES], [
|
|
PKG_CHECK_MODULES([$1], [$2], [
|
|
have_pkg_var=yes
|
|
NILFS_UTILS_DEFINE_HAVE_LIB([$1])
|
|
], [have_pkg_var=no])
|
|
], [have_pkg_var=no])
|
|
|
|
dnl Fallback if pkg-config failed or was not available
|
|
AS_IF([test "x$have_pkg_var" = "xno"], [
|
|
$3
|
|
])
|
|
|
|
m4_popdef([have_pkg_var])
|
|
])
|
|
|
|
# Check for options.
|
|
AC_ARG_WITH([libmount],
|
|
AS_HELP_STRING([--without-libmount],
|
|
[compile mount.nilfs2 without libmount support]),
|
|
[], with_libmount=yes)
|
|
|
|
AC_ARG_WITH([selinux],
|
|
AS_HELP_STRING([--without-selinux], [compile without SELinux support]),
|
|
[], with_selinux=yes)
|
|
|
|
AC_ARG_WITH([blkid],
|
|
AS_HELP_STRING([--without-blkid], [compile without blkid support]),
|
|
[], with_blkid=yes)
|
|
|
|
AC_ARG_WITH([pkgconfigdir],
|
|
[AS_HELP_STRING([--with-pkgconfigdir[[=DIR]]],
|
|
[directory for pkg-config files (no to disable) [default=auto]])],
|
|
[pkgconfigdir=$withval],
|
|
[pkgconfigdir=auto])
|
|
|
|
AC_ARG_ENABLE([uapi_header_install],
|
|
AS_HELP_STRING([--enable-uapi-header-install],
|
|
[install kernel uapi header files]),
|
|
[enable_uapi_header_install="${enableval}"],
|
|
[enable_uapi_header_install=no])
|
|
|
|
AC_ARG_ENABLE([usrmerge],
|
|
[AS_HELP_STRING([--enable-usrmerge[[=TYPE]]],
|
|
[set UsrMerge hierarchy type (no, sbin, bin, or auto);
|
|
'sbin' (default TYPE) installs to /usr/sbin, 'bin' installs to
|
|
/usr/bin [default=auto, which probes the system configuration]])],
|
|
[enable_usrmerge="${enableval}"],
|
|
[enable_usrmerge=auto])
|
|
|
|
# Checks for the existence of pkg-config itself
|
|
m4_ifdef([PKG_PROG_PKG_CONFIG], [PKG_PROG_PKG_CONFIG], [PKG_CONFIG=""])
|
|
|
|
AS_IF([test "x$pkgconfigdir" = "xno"], [enable_pkgconfig_output=no],
|
|
[test -n "$PKG_CONFIG"], [enable_pkgconfig_output=yes],
|
|
[test "x$pkgconfigdir" = "xyes"], [
|
|
AC_MSG_ERROR([pkg-config requested but not found])
|
|
], [
|
|
enable_pkgconfig_output=no
|
|
AC_MSG_WARN([pkg-config not found. PC file installation disabled.])
|
|
])
|
|
|
|
# Checks for UsrMerge hierarchy
|
|
AS_IF([test "x$enable_usrmerge" = "xauto"], [
|
|
AS_IF([test /usr/sbin -ef /usr/bin], [enable_usrmerge=bin],
|
|
[test -x /usr/bin/rpm && \
|
|
test "$(rpm --eval '%{_sbindir}')" = /usr/bin],
|
|
[enable_usrmerge=bin],
|
|
[test /usr/sbin/mkfs -ef /usr/bin/mkfs], [enable_usrmerge=bin],
|
|
[test /sbin -ef /usr/sbin], [enable_usrmerge=sbin],
|
|
[enable_usrmerge=no])
|
|
])
|
|
|
|
# Checks for libraries.
|
|
NILFS_UTILS_PKG_CHECK([UUID], [uuid], [
|
|
AC_CHECK_LIB([uuid], [uuid_generate], [
|
|
NILFS_UTILS_DEFINE_HAVE_LIB([UUID])
|
|
AC_SUBST(UUID_LIBS, ["-luuid"])
|
|
AC_SUBST(UUID_CFLAGS, ["-I/usr/include/uuid"])
|
|
], [
|
|
AC_MSG_ERROR([UUID library not found])
|
|
])
|
|
AC_CHECK_HEADERS([uuid/uuid.h])
|
|
])
|
|
|
|
LIB_POSIX_MQ=''
|
|
AC_CHECK_FUNC(mq_open,,
|
|
[AC_CHECK_LIB(rt, mq_open, LIB_POSIX_MQ=-lrt,
|
|
[AC_CHECK_LIB(posix4, mq_open, LIB_POSIX_MQ=-lposix4,
|
|
[AC_MSG_ERROR([posix message queue not found])])])])
|
|
AC_SUBST(LIB_POSIX_MQ)
|
|
|
|
LIB_POSIX_SEM=''
|
|
AC_CHECK_FUNC(sem_open,,
|
|
[AC_CHECK_LIB(rt, sem_open, LIB_POSIX_SEM=-lrt,
|
|
[AC_CHECK_LIB(pthread, sem_open, LIB_POSIX_SEM=-lpthread,
|
|
[AC_CHECK_LIB(posix4, sem_open, LIB_POSIX_SEM=-lposix4,
|
|
[AC_MSG_ERROR([posix semaphore not found])])])])])
|
|
AC_SUBST(LIB_POSIX_SEM)
|
|
|
|
LIB_POSIX_TIMER=''
|
|
AC_CHECK_FUNC(clock_gettime,,
|
|
[AC_CHECK_LIB(rt, clock_gettime, LIB_POSIX_TIMER=-lrt,
|
|
[AC_MSG_ERROR([clock_gettime not found])])])
|
|
AC_SUBST(LIB_POSIX_TIMER)
|
|
|
|
# Checks for header files.
|
|
AC_HEADER_SYS_WAIT
|
|
AC_CHECK_HEADERS([ctype.h err.h fcntl.h grp.h inttypes.h libintl.h limits.h \
|
|
linux/magic.h linux/types.h locale.h mntent.h mqueue.h \
|
|
paths.h poll.h pwd.h semaphore.h stddef.h stdint.h stdlib.h \
|
|
string.h strings.h sys/ioctl.h sys/mman.h sys/mount.h \
|
|
sys/sysmacros.h sys/time.h syslog.h time.h unistd.h])
|
|
|
|
# Check /etc/mtab
|
|
mtab_type=''
|
|
AC_MSG_CHECKING([for /etc/mtab])
|
|
if test -L /etc/mtab; then
|
|
AC_MSG_RESULT([symlink])
|
|
mtab_type=symlink
|
|
elif test -f /etc/mtab; then
|
|
AC_MSG_RESULT([regular file])
|
|
mtab_type=file
|
|
fi
|
|
|
|
# Check program_invocation_short_name and getprogname()
|
|
AC_CHECK_DECLS([program_invocation_short_name], [], [],
|
|
[[#include <errno.h>]])
|
|
|
|
AS_IF([test "x$ac_cv_have_decl_program_invocation_short_name" != "xyes"],
|
|
[AC_CHECK_FUNCS([getprogname])])
|
|
|
|
# Check for conditional libraries and headers.
|
|
AS_IF([test "${with_blkid}" = "yes"], [
|
|
NILFS_UTILS_PKG_CHECK([BLKID], [blkid], [
|
|
AC_CHECK_LIB(blkid, blkid_new_probe_from_filename, [
|
|
NILFS_UTILS_DEFINE_HAVE_LIB([BLKID])
|
|
AC_SUBST(BLKID_LIBS, ["-lblkid"])
|
|
AC_SUBST(BLKID_CFLAGS, ["-I/usr/include/blkid"])
|
|
], [
|
|
AC_MSG_ERROR([BLKID library not found])
|
|
], [$UUID_LIBS]) # Other libraries to link when compiling tests
|
|
|
|
AC_CHECK_HEADERS([blkid/blkid.h])
|
|
])
|
|
])
|
|
|
|
AS_IF([test "${with_libmount}" = "yes"], [
|
|
AS_IF([test "$mtab_type" = file], [
|
|
AC_MSG_WARN(m4_normalize([
|
|
Use --without-libmount option to generate mount helpers that work
|
|
with the legacy mtab file.
|
|
]))
|
|
])
|
|
|
|
NILFS_UTILS_PKG_CHECK([MOUNT], [mount], [
|
|
AC_CHECK_LIB(mount, mnt_context_do_mount, [
|
|
NILFS_UTILS_DEFINE_HAVE_LIB([MOUNT])
|
|
AC_SUBST(MOUNT_LIBS, ["-lmount $BLKID_LIBS"])
|
|
AC_SUBST(MOUNT_CFLAGS, ["-I/usr/include/libmount"])
|
|
], [
|
|
AC_MSG_ERROR([MOUNT library is enabled but libmount not found])
|
|
], [$BLKID_LIBS]) # Other libraries to link when compiling tests
|
|
|
|
AC_CHECK_HEADERS([libmount/libmount.h])
|
|
])
|
|
with_selinux=no
|
|
])
|
|
AM_CONDITIONAL(CONFIG_LIBMOUNT, [test "$with_libmount" = "yes"])
|
|
|
|
AS_IF([test "${with_selinux}" = "yes"], [
|
|
NILFS_UTILS_PKG_CHECK([SELINUX], [libselinux], [
|
|
AC_CHECK_LIB(selinux, getprevcon, [
|
|
NILFS_UTILS_DEFINE_HAVE_LIB([SELINUX])
|
|
AC_SUBST(SELINUX_LIBS, ["-lselinux"])
|
|
AC_SUBST(SELINUX_CFLAGS, [""])
|
|
], [
|
|
AC_MSG_ERROR([SELinux selected but libselinux not found])
|
|
])
|
|
AC_CHECK_HEADERS([selinux/context.h selinux/selinux.h])
|
|
])
|
|
# This function is missing in old libselinux 1.xx versions
|
|
AC_CHECK_FUNCS([security_get_initial_context])
|
|
])
|
|
|
|
AM_CONDITIONAL(CONFIG_UAPI_HEADER_INSTALL,
|
|
[test "$enable_uapi_header_install" = yes])
|
|
|
|
# Checks for typedefs, structures, and compiler characteristics.
|
|
AC_C_CONST
|
|
AC_C_INLINE
|
|
AC_TYPE_MODE_T
|
|
AC_TYPE_OFF_T
|
|
AC_TYPE_PID_T
|
|
AC_TYPE_SIZE_T
|
|
AC_TYPE_SSIZE_T
|
|
AC_STRUCT_TM
|
|
AC_C_VOLATILE
|
|
|
|
# Checks for library functions.
|
|
AC_FUNC_ALLOCA
|
|
AC_FUNC_CHOWN
|
|
AC_FUNC_ERROR_AT_LINE
|
|
AC_FUNC_FORK
|
|
AC_FUNC_LSTAT
|
|
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
|
|
AC_FUNC_MALLOC
|
|
AC_FUNC_MMAP
|
|
AC_FUNC_REALLOC
|
|
AC_FUNC_STAT
|
|
AC_FUNC_STRFTIME
|
|
AC_FUNC_VPRINTF
|
|
AC_CHECK_FUNC(posix_memalign,,
|
|
[AC_MSG_ERROR([cannot find posix_memalign() function])])
|
|
AC_CHECK_FUNCS([alarm atexit ftruncate getcwd getgrgid getmntent_r getpwuid \
|
|
gettimeofday localtime_r memmove memset pread strcasecmp \
|
|
strchr strdup strerror strrchr strsignal strstr strtok_r \
|
|
strtoul strtoull])
|
|
|
|
# Checks for system services
|
|
AC_SYS_LARGEFILE
|
|
|
|
# Install directories
|
|
AC_PREFIX_DEFAULT([/usr])
|
|
test "x$prefix" = "xNONE" && prefix="/usr"
|
|
test "x$exec_prefix" = "xNONE" && exec_prefix="${prefix}"
|
|
|
|
# Determine the location of /sbin binaries based on the --enable-usrmerge
|
|
# option
|
|
AS_CASE(["x$enable_usrmerge"],
|
|
[xbin], [
|
|
core_sbindir='${exec_prefix}/bin'
|
|
sbindir='${exec_prefix}/bin'
|
|
badblocksdir='/usr/bin'
|
|
create_compat_sbin_link=yes
|
|
],
|
|
[xsbin|xyes], [
|
|
core_sbindir='${exec_prefix}/sbin'
|
|
sbindir='${exec_prefix}/sbin'
|
|
badblocksdir='/usr/sbin'
|
|
create_compat_sbin_link=no
|
|
],
|
|
[
|
|
core_sbindir='/sbin'
|
|
sbindir='${exec_prefix}/sbin'
|
|
badblocksdir='/sbin'
|
|
create_compat_sbin_link=no
|
|
]
|
|
)
|
|
|
|
AC_SUBST([core_sbindir])
|
|
AC_SUBST([sbindir])
|
|
AC_SUBST([badblocksdir])
|
|
|
|
AM_CONDITIONAL([CREATE_COMPAT_SBIN_LINK],
|
|
[test "x$create_compat_sbin_link" = "xyes"])
|
|
|
|
# Automatic detection of library installation directory
|
|
|
|
AS_CASE(["$ac_configure_args"], [*--libdir*], [user_specified_libdir=yes],
|
|
[user_specified_libdir=no])
|
|
|
|
AS_IF([test "x$user_specified_libdir" = "xno" && \
|
|
test "x$libdir" = 'x${exec_prefix}/lib' && \
|
|
test "x$cross_compiling" = "xno"], [
|
|
AC_MSG_CHECKING([for architecture-specific library directory])
|
|
detected_libdir=""
|
|
|
|
AS_IF(
|
|
# 1. Primary: systemd-path (available on most modern distros)
|
|
[command -v systemd-path >/dev/null 2>&1],
|
|
[detected_libdir=$(systemd-path system-library-arch 2>/dev/null)],
|
|
|
|
# 2. Fallback: use rpm --eval for RPM-based systems
|
|
[command -v rpm >/dev/null 2>&1],
|
|
[detected_libdir=$(rpm --eval '%{_libdir}' 2>/dev/null)]
|
|
)
|
|
|
|
AS_IF([test "x$detected_libdir" != "x"], [
|
|
libdir="$detected_libdir"
|
|
AC_MSG_RESULT([$libdir (detected)])
|
|
], [
|
|
AC_MSG_RESULT([$libdir (default)])
|
|
])
|
|
])
|
|
|
|
AC_SUBST([libdir])
|
|
|
|
AC_SUBST([sysconfdir], [/etc])
|
|
AC_SUBST([localstatedir], [/var])
|
|
|
|
AS_IF([test "x$enable_pkgconfig_output" = "xyes"], [
|
|
AS_IF([test "x$pkgconfigdir" = "xyes" || test "x$pkgconfigdir" = "xauto"],
|
|
[pkgconfigdir='${libdir}/pkgconfig'])
|
|
|
|
AC_SUBST([pkgconfigdir])
|
|
AC_CONFIG_FILES([lib/nilfs.pc lib/nilfsgc.pc])
|
|
])
|
|
|
|
AM_CONDITIONAL([INSTALL_PKGCONFIG],
|
|
[test "x$enable_pkgconfig_output" = "xyes"])
|
|
|
|
AC_CONFIG_FILES([Makefile
|
|
bin/Makefile
|
|
etc/Makefile
|
|
include/Makefile
|
|
lib/Makefile
|
|
man/Makefile
|
|
sbin/Makefile
|
|
sbin/mount/Makefile
|
|
scripts/Makefile])
|
|
AC_OUTPUT
|