diff options
Diffstat (limited to 'src/liburing/configure')
-rwxr-xr-x | src/liburing/configure | 368 |
1 files changed, 368 insertions, 0 deletions
diff --git a/src/liburing/configure b/src/liburing/configure new file mode 100755 index 000000000..518a5b03e --- /dev/null +++ b/src/liburing/configure @@ -0,0 +1,368 @@ +#!/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=${CC:-gcc} +cxx=${CXX:-g++} + +for opt do + optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)') + case "$opt" in + --help|-h) show_help=yes + ;; + --prefix=*) prefix="$optarg" + ;; + --includedir=*) includedir="$optarg" + ;; + --libdir=*) libdir="$optarg" + ;; + --libdevdir=*) libdevdir="$optarg" + ;; + --mandir=*) mandir="$optarg" + ;; + --datadir=*) datadir="$optarg" + ;; + --cc=*) cc="$optarg" + ;; + --cxx=*) cxx="$optarg" + ;; + *) + echo "ERROR: unknown option $opt" + echo "Try '$0 --help' for more information" + exit 1 + ;; + esac +done + +if test -z "$prefix"; then + prefix=/usr +fi +if test -z "$includedir"; then + includedir="$prefix/include" +fi +if test -z "$libdir"; then + libdir="$prefix/lib" +fi +if test -z "$libdevdir"; then + libdevdir="$prefix/lib" +fi +if test -z "$mandir"; then + mandir="$prefix/man" +fi +if test -z "$datadir"; then + datadir="$prefix/share" +fi + +if test x"$libdir" = x"$libdevdir"; then + relativelibdir="" +else + relativelibdir="$libdir/" +fi + +if test "$show_help" = "yes"; then +cat <<EOF + +Usage: configure [options] +Options: [defaults in brackets after descriptions] + --help print this message + --prefix=PATH install in PATH [$prefix] + --includedir=PATH install headers in PATH [$includedir] + --libdir=PATH install runtime libraries in PATH [$libdir] + --libdevdir=PATH install development libraries in PATH [$libdevdir] + --mandir=PATH install man pages in PATH [$mandir] + --datadir=PATH install shared data in PATH [$datadir] +EOF +exit 0 +fi + +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_cxx() { + # Run the compiler, capturing its output to the log. + echo $cxx "$@" >> config.log + $cxx "$@" >> config.log 2>&1 || return $? + return 0 +} + +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_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 +} + +compile_prog_cxx() { + local_cflags="$1" + local_ldflags="$2 $LIBS" + echo "Compiling test case $3" >> config.log + do_cxx $CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags +} + +has() { + type "$1" >/dev/null 2>&1 +} + +output_mak() { + echo "$1=$2" >> $config_host_mak +} + +output_sym() { + output_mak "$1" "y" + echo "#define $1" >> $config_host_h +} + +print_and_output_mak() { + print_config "$1" "$2" + output_mak "$1" "$2" +} +print_and_output_mak "prefix" "$prefix" +print_and_output_mak "includedir" "$includedir" +print_and_output_mak "libdir" "$libdir" +print_and_output_mak "libdevdir" "$libdevdir" +print_and_output_mak "relativelibdir" "$relativelibdir" +print_and_output_mak "mandir" "$mandir" +print_and_output_mak "datadir" "$datadir" + +########################################## +# 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" + +########################################## +# check for __kernel_timespec +__kernel_timespec="no" +cat > $TMPC << EOF +#include <linux/time.h> +#include <linux/time_types.h> +int main(int argc, char **argv) +{ + struct __kernel_timespec ts; + ts.tv_sec = 0; + ts.tv_nsec = 1; + return 0; +} +EOF +if compile_prog "" "" "__kernel_timespec"; then + __kernel_timespec="yes" +fi +print_config "__kernel_timespec" "$__kernel_timespec" + +########################################## +# check for open_how +open_how="no" +cat > $TMPC << EOF +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <string.h> +int main(int argc, char **argv) +{ + struct open_how how; + how.flags = 0; + how.mode = 0; + how.resolve = 0; + return 0; +} +EOF +if compile_prog "" "" "open_how"; then + open_how="yes" +fi +print_config "open_how" "$open_how" + +########################################## +# check for statx +statx="no" +cat > $TMPC << EOF +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> +#include <fcntl.h> +#include <string.h> +#include <linux/stat.h> +int main(int argc, char **argv) +{ + struct statx x; + + return memset(&x, 0, sizeof(x)) != NULL; +} +EOF +if compile_prog "" "" "statx"; then + statx="yes" +fi +print_config "statx" "$statx" + +########################################## +# check for C++ +has_cxx="no" +cat > $TMPC << EOF +#include <iostream> +int main(int argc, char **argv) +{ + std::cout << "Test"; + return 0; +} +EOF +if compile_prog_cxx "" "" "C++"; then + has_cxx="yes" +fi +print_config "C++" "$has_cxx" + +############################################################################# + +if test "$__kernel_rwf_t" = "yes"; then + output_sym "CONFIG_HAVE_KERNEL_RWF_T" +fi +if test "$__kernel_timespec" = "yes"; then + output_sym "CONFIG_HAVE_KERNEL_TIMESPEC" +fi +if test "$open_how" = "yes"; then + output_sym "CONFIG_HAVE_OPEN_HOW" +fi +if test "$statx" = "yes"; then + output_sym "CONFIG_HAVE_STATX" +fi +if test "$has_cxx" = "yes"; then + output_sym "CONFIG_HAVE_CXX" +fi + +echo "CC=$cc" >> $config_host_mak +print_config "CC" "$cc" +echo "CXX=$cxx" >> $config_host_mak +print_config "CXX" "$cxx" + +# generate compat.h +compat_h="src/include/liburing/compat.h" +cat > $compat_h << EOF +/* SPDX-License-Identifier: MIT */ +#ifndef LIBURING_COMPAT_H +#define LIBURING_COMPAT_H + +EOF + +if test "$__kernel_rwf_t" != "yes"; then +cat >> $compat_h << EOF +typedef int __kernel_rwf_t; + +EOF +fi +if test "$__kernel_timespec" != "yes"; then +cat >> $compat_h << EOF +#include <stdint.h> + +struct __kernel_timespec { + int64_t tv_sec; + long long tv_nsec; +}; + +EOF +else +cat >> $compat_h << EOF +#include <linux/time_types.h> + +EOF +fi +if test "$open_how" != "yes"; then +cat >> $compat_h << EOF +#include <inttypes.h> + +struct open_how { + uint64_t flags; + uint64_t mode; + uint64_t resolve; +}; + +EOF +fi + +cat >> $compat_h << EOF +#endif +EOF |