diff options
author | Jens Axboe <axboe@kernel.dk> | 2019-01-15 11:14:43 -0700 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2019-01-15 11:19:16 -0700 |
commit | f16b83b29349dae16f07aae9a1709aed0dff247d (patch) | |
tree | 6bdeb2fd6d7a7572ec974638acfd5d4f387aaba5 | |
parent | 89167b457f5678fd8fae0696d616cef5e3a3c379 (diff) |
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-- | Makefile | 14 | ||||
-rwxr-xr-x | configure | 127 | ||||
-rw-r--r-- | src/compat.h | 8 | ||||
-rw-r--r-- | src/io_uring.c | 1 | ||||
-rw-r--r-- | src/liburing.h | 1 | ||||
-rw-r--r-- | src/syscall.c | 1 |
6 files changed, 152 insertions, 0 deletions
@@ -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) |