]> git.ipfire.org Git - thirdparty/dracut.git/blobdiff - configure
fix(zfcp_rules): correct shellcheck regression when parsing ccw args
[thirdparty/dracut.git] / configure
index 236868054084f42855a0f54ac2eef5e66e116ed9..8d1971b79aef09b0205cef9a5cf16789df5d5652 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,12 +1,14 @@
 #!/bin/bash
 
 # We don't support srcdir != builddir
-echo \#buildapi-variable-no-builddir >/dev/null
+echo \#buildapi-variable-no-builddir > /dev/null
 
 prefix=/usr
 
 enable_documentation=yes
+enable_dracut_cpio=no
 
+CC="${CC:-cc}"
 PKG_CONFIG="${PKG_CONFIG:-pkg-config}"
 
 # Little helper function for reading args from the commandline.
@@ -18,9 +20,9 @@ read_arg() {
     # $3 = arg parameter
     local rematch='^[^=]*=(.*)$'
     if [[ $2 =~ $rematch ]]; then
-        read "$1" <<< "${BASH_REMATCH[1]}"
+        read -r "$1" <<< "${BASH_REMATCH[1]}"
     else
-        read "$1" <<< "$3"
+        read -r "$1" <<< "$3"
         # There is no way to shift our callers args, so
         # return 1 to indicate they should do it instead.
         return 1
@@ -30,34 +32,119 @@ read_arg() {
 
 while (($# > 0)); do
     case "${1%%=*}" in
-        --prefix) read_arg prefix "$@" || shift;;
-        --libdir) read_arg libdir "$@" || shift;;
-        --datadir) read_arg datadir "$@" || shift;;
-        --sysconfdir) read_arg sysconfdir "$@" || shift;;
-        --sbindir) read_arg sbindir "$@" || shift;;
-        --mandir) read_arg mandir "$@" || shift;;
-        --disable-documentation) enable_documentation=no;;
-        --program-prefix) read_arg programprefix "$@" || shift;;
-        --exec-prefix) read_arg execprefix "$@" || shift;;
-        --bindir) read_arg bindir "$@" || shift;;
-        --includedir) read_arg includedir "$@" || shift;;
-        --libexecdir) read_arg libexecdir "$@" || shift;;
-        --localstatedir) read_arg localstatedir "$@" || shift;;
-        --sharedstatedir) read_arg sharedstatedir "$@" || shift;;
-        --infodir) read_arg infodir "$@" || shift;;
-        --systemdsystemunitdir) read_arg systemdsystemunitdir "$@" || shift;;
-        --bashcompletiondir) read_arg bashcompletiondir "$@" || shift;;
-        *) echo "Ignoring unknown option '$1'";;
+        --prefix) read_arg prefix "$@" || shift ;;
+        --libdir) read_arg libdir "$@" || shift ;;
+        --datadir) read_arg datadir "$@" || shift ;;
+        --sysconfdir) read_arg sysconfdir "$@" || shift ;;
+        --sbindir) read_arg sbindir "$@" || shift ;;
+        --mandir) read_arg mandir "$@" || shift ;;
+        --disable-documentation) enable_documentation=no ;;
+        --program-prefix) read_arg programprefix "$@" || shift ;;
+        --exec-prefix) read_arg execprefix "$@" || shift ;;
+        --bindir) read_arg bindir "$@" || shift ;;
+        --includedir) read_arg includedir "$@" || shift ;;
+        --libexecdir) read_arg libexecdir "$@" || shift ;;
+        --localstatedir) read_arg localstatedir "$@" || shift ;;
+        --sharedstatedir) read_arg sharedstatedir "$@" || shift ;;
+        --infodir) read_arg infodir "$@" || shift ;;
+        --systemdsystemunitdir) read_arg systemdsystemunitdir "$@" || shift ;;
+        --bashcompletiondir) read_arg bashcompletiondir "$@" || shift ;;
+        --enable-dracut-cpio) enable_dracut_cpio=yes ;;
+        *) echo "Ignoring unknown option '$1'" ;;
     esac
     shift
 done
 
-if ! ${PKG_CONFIG} --exists --print-errors " libkmod >= 15 "; then
-    echo "dracut needs pkg-config and libkmod >= 15." >&2
+if ! ${PKG_CONFIG} --exists --print-errors " libkmod >= 23 "; then
+    echo "dracut needs pkg-config and libkmod >= 23." >&2
     exit 1
 fi
 
-cat > Makefile.inc.$$ <<EOF
+if ! command -v "${CC}" > /dev/null; then
+    echo "dracut needs a C compiler (${CC} not found)." >&2
+    exit 1
+fi
+
+cat << EOF > conftest.c
+#include <fts.h>
+int main() {
+       return 0;
+}
+EOF
+
+# shellcheck disable=SC2086
+${CC} $CFLAGS $LDFLAGS conftest.c > /dev/null 2>&1
+ret=$?
+rm -f conftest.c a.out
+
+# musl doesn't have fts.h included
+if test $ret -ne 0; then
+    echo "dracut needs fts development files." >&2
+    exit 1
+fi
+
+cat << EOF > conftest.c
+#include <fts.h>
+int main(void) {
+       fts_open(0, 0, 0);
+       return 0;
+}
+EOF
+
+found=no
+for lib in "-lc" "-lfts"; do
+    # shellcheck disable=SC2086
+    ${CC} $CFLAGS $LDFLAGS conftest.c -Wl,$lib > /dev/null 2>&1
+    ret=$?
+    if test $ret -eq 0; then
+        FTS_LIBS="$lib"
+        found=yes
+        break
+    fi
+done
+rm -f conftest.c a.out
+
+if test $found = no; then
+    echo "dracut couldn't find usable fts library" >&2
+    exit 1
+fi
+
+cat << EOF > conftest.c
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+
+#ifndef SYS_gettid
+#error "SYS_gettid unavailable on this system"
+#endif
+
+#define gettid()    ((pid_t) syscall(SYS_gettid))
+
+int main(void) {
+  return getpid() == gettid() ? 0 : -1;
+}
+EOF
+
+# shellcheck disable=SC2086
+${CC} $CFLAGS $LDFLAGS conftest.c > /dev/null 2>&1
+ret=$?
+rm -f conftest.c a.out
+
+if test $ret -ne 0; then
+    echo "dracut needs SYS_gettid support." >&2
+    exit 1
+fi
+
+if test "$enable_dracut_cpio" = "yes"; then
+    cargo --version > /dev/null
+    ret=$?
+    if test $ret -ne 0; then
+        echo "dracut couldn't find cargo for dracut-cpio build"
+        exit 1
+    fi
+fi
+
+cat > Makefile.inc.$$ << EOF
 prefix ?= ${prefix}
 libdir ?= ${libdir:-${prefix}/lib}
 datadir ?= ${datadir:-${prefix}/share}
@@ -65,9 +152,11 @@ sysconfdir ?= ${sysconfdir:-${prefix}/etc}
 sbindir ?= ${sbindir:-${prefix}/sbin}
 mandir ?= ${mandir:-${prefix}/share/man}
 enable_documentation ?= ${enable_documentation:-yes}
+enable_dracut_cpio ?= ${enable_dracut_cpio}
 bindir ?= ${bindir:-${prefix}/bin}
-KMOD_CFLAGS ?= $(${PKG_CONFIG} --cflags " libkmod >= 15 ")
-KMOD_LIBS ?= $(${PKG_CONFIG} --libs " libkmod >= 15 ")
+KMOD_CFLAGS ?= $(${PKG_CONFIG} --cflags " libkmod >= 23 ")
+KMOD_LIBS ?= $(${PKG_CONFIG} --libs " libkmod >= 23 ")
+FTS_LIBS ?= ${FTS_LIBS}
 EOF
 
 {