summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2019-01-15 11:14:43 -0700
committerJens Axboe <axboe@kernel.dk>2019-01-15 11:19:16 -0700
commitf16b83b29349dae16f07aae9a1709aed0dff247d (patch)
tree6bdeb2fd6d7a7572ec974638acfd5d4f387aaba5
parent89167b457f5678fd8fae0696d616cef5e3a3c379 (diff)
downloadliburing-f16b83b29349dae16f07aae9a1709aed0dff247d.tar.gz
liburing-f16b83b29349dae16f07aae9a1709aed0dff247d.tar.bz2
Add configure script
Some older installs don't have __kernel_rwf_t in linux/fs.h, so add a check for that. Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r--Makefile14
-rwxr-xr-xconfigure127
-rw-r--r--src/compat.h8
-rw-r--r--src/io_uring.c1
-rw-r--r--src/liburing.h1
-rw-r--r--src/syscall.c1
6 files changed, 152 insertions, 0 deletions
diff --git a/Makefile b/Makefile
index 0fbd83c..547137d 100644
--- a/Makefile
+++ b/Makefile
@@ -14,10 +14,24 @@ all:
@$(MAKE) -C src
@$(MAKE) -C test
+config-host.mak: configure
+ @if [ ! -e "$@" ]; then \
+ echo "Running configure ..."; \
+ ./configure; \
+ else \
+ echo "$@ is out-of-date, running configure"; \
+ sed -n "/.*Configured with/s/[^:]*: //p" "$@" | sh; \
+ fi
+
+ifneq ($(MAKECMDGOALS),clean)
+include config-host.mak
+endif
+
install:
@$(MAKE) -C src install prefix=$(DESTDIR)$(prefix) includedir=$(DESTDIR)$(includedir) libdir=$(DESTDIR)$(libdir)
clean:
+ @rm -f config-host.mak config-host.h
@$(MAKE) -C src clean
@$(MAKE) -C test clean
diff --git a/configure b/configure
new file mode 100755
index 0000000..ef71a14
--- /dev/null
+++ b/configure
@@ -0,0 +1,127 @@
+#!/bin/sh
+#
+# set temporary file name
+if test ! -z "$TMPDIR" ; then
+ TMPDIR1="${TMPDIR}"
+elif test ! -z "$TEMPDIR" ; then
+ TMPDIR1="${TEMPDIR}"
+else
+ TMPDIR1="/tmp"
+fi
+
+cc=gcc
+
+TMPC="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.c"
+TMPC2="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}-2.c"
+TMPO="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.o"
+TMPE="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.exe"
+
+# NB: do not call "exit" in the trap handler; this is buggy with some shells;
+# see <1285349658-3122-1-git-send-email-loic.minier@linaro.org>
+trap "rm -f $TMPC $TMPC2 $TMPO $TMPE" EXIT INT QUIT TERM
+
+rm -rf config.log
+
+config_host_mak="config-host.mak"
+config_host_h="config-host.h"
+
+rm -rf $config_host_mak
+rm -rf $config_host_h
+
+fatal() {
+ echo $@
+ echo "Configure failed, check config.log and/or the above output"
+ rm -rf $config_host_mak
+ rm -rf $config_host_h
+ exit 1
+}
+
+# Print result for each configuration test
+print_config() {
+ printf "%-30s%s\n" "$1" "$2"
+}
+
+# Default CFLAGS
+CFLAGS="-D_GNU_SOURCE -include config-host.h"
+BUILD_CFLAGS=""
+
+# Print configure header at the top of $config_host_h
+echo "/*" > $config_host_h
+echo " * Automatically generated by configure - do not modify" >> $config_host_h
+printf " * Configured with:" >> $config_host_h
+printf " * '%s'" "$0" "$@" >> $config_host_h
+echo "" >> $config_host_h
+echo " */" >> $config_host_h
+
+echo "# Automatically generated by configure - do not modify" > $config_host_mak
+printf "# Configured with:" >> $config_host_mak
+printf " '%s'" "$0" "$@" >> $config_host_mak
+echo >> $config_host_mak
+
+do_cc() {
+ # Run the compiler, capturing its output to the log.
+ echo $cc "$@" >> config.log
+ $cc "$@" >> config.log 2>&1 || return $?
+ # Test passed. If this is an --enable-werror build, rerun
+ # the test with -Werror and bail out if it fails. This
+ # makes warning-generating-errors in configure test code
+ # obvious to developers.
+ if test "$werror" != "yes"; then
+ return 0
+ fi
+ # Don't bother rerunning the compile if we were already using -Werror
+ case "$*" in
+ *-Werror*)
+ return 0
+ ;;
+ esac
+ echo $cc -Werror "$@" >> config.log
+ $cc -Werror "$@" >> config.log 2>&1 && return $?
+ echo "ERROR: configure test passed without -Werror but failed with -Werror."
+ echo "This is probably a bug in the configure script. The failing command"
+ echo "will be at the bottom of config.log."
+ fatal "You can run configure with --disable-werror to bypass this check."
+}
+
+compile_object() {
+ do_cc $CFLAGS -c -o $TMPO $TMPC
+}
+
+compile_prog() {
+ local_cflags="$1"
+ local_ldflags="$2 $LIBS"
+ echo "Compiling test case $3" >> config.log
+ do_cc $CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
+}
+
+has() {
+ type "$1" >/dev/null 2>&1
+}
+
+output_sym() {
+ echo "$1=y" >> $config_host_mak
+ echo "#define $1" >> $config_host_h
+}
+
+##########################################
+# check for __kernel_rwf_t
+__kernel_rwf_t="no"
+cat > $TMPC << EOF
+#include <linux/fs.h>
+int main(int argc, char **argv)
+{
+ __kernel_rwf_t x;
+ x = 0;
+ return x;
+}
+EOF
+if compile_prog "" "" "__kernel_rwf_t"; then
+ __kernel_rwf_t="yes"
+fi
+print_config "__kernel_rwf_t" "$__kernel_rwf_t"
+
+#############################################################################
+
+if test "$__kernel_rwf_t" = "yes"; then
+ output_sym "CONFIG_HAVE_KERNEL_RWF_T"
+fi
diff --git a/src/compat.h b/src/compat.h
new file mode 100644
index 0000000..d322499
--- /dev/null
+++ b/src/compat.h
@@ -0,0 +1,8 @@
+#ifndef LIBURING_COMPAT_H
+#define LIBURING_COMPAT_H
+
+#if !defined(CONFIG_HAVE_KERNEL_RWF_T)
+typedef int __kernel_rwf_t;
+#endif
+
+#endif
diff --git a/src/io_uring.c b/src/io_uring.c
index a75d135..7205914 100644
--- a/src/io_uring.c
+++ b/src/io_uring.c
@@ -5,6 +5,7 @@
#include <errno.h>
#include <string.h>
+#include "compat.h"
#include "io_uring.h"
#include "liburing.h"
#include "barrier.h"
diff --git a/src/liburing.h b/src/liburing.h
index fb07583..038dd15 100644
--- a/src/liburing.h
+++ b/src/liburing.h
@@ -2,6 +2,7 @@
#define LIB_URING_H
#include <sys/uio.h>
+#include "compat.h"
#include "io_uring.h"
/*
diff --git a/src/syscall.c b/src/syscall.c
index a625b47..7097c46 100644
--- a/src/syscall.c
+++ b/src/syscall.c
@@ -4,6 +4,7 @@
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/uio.h>
+#include "compat.h"
#include "io_uring.h"
#if defined(__x86_64)