Blame configure

Packit d3489f
#!/bin/sh
Packit d3489f
#
Packit d3489f
# set temporary file name
Packit d3489f
if test ! -z "$TMPDIR" ; then
Packit d3489f
    TMPDIR1="${TMPDIR}"
Packit d3489f
elif test ! -z "$TEMPDIR" ; then
Packit d3489f
    TMPDIR1="${TEMPDIR}"
Packit d3489f
else
Packit d3489f
    TMPDIR1="/tmp"
Packit d3489f
fi
Packit d3489f
Packit d3489f
cc=${CC:-gcc}
Packit d3489f
cxx=${CXX:-g++}
Packit d3489f
Packit d3489f
for opt do
Packit d3489f
  optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
Packit d3489f
  case "$opt" in
Packit d3489f
  --help|-h) show_help=yes
Packit d3489f
  ;;
Packit d3489f
  --prefix=*) prefix="$optarg"
Packit d3489f
  ;;
Packit d3489f
  --includedir=*) includedir="$optarg"
Packit d3489f
  ;;
Packit d3489f
  --libdir=*) libdir="$optarg"
Packit d3489f
  ;;
Packit d3489f
  --libdevdir=*) libdevdir="$optarg"
Packit d3489f
  ;;
Packit d3489f
  --mandir=*) mandir="$optarg"
Packit d3489f
  ;;
Packit d3489f
  --datadir=*) datadir="$optarg"
Packit d3489f
  ;;
Packit d3489f
  --cc=*) cc="$optarg"
Packit d3489f
  ;;
Packit d3489f
  --cxx=*) cxx="$optarg"
Packit d3489f
  ;;
Packit d3489f
  *)
Packit d3489f
    echo "ERROR: unknown option $opt"
Packit d3489f
    echo "Try '$0 --help' for more information"
Packit d3489f
    exit 1
Packit d3489f
  ;;
Packit d3489f
  esac
Packit d3489f
done
Packit d3489f
Packit d3489f
if test -z "$prefix"; then
Packit d3489f
  prefix=/usr
Packit d3489f
fi
Packit d3489f
if test -z "$includedir"; then
Packit d3489f
  includedir="$prefix/include"
Packit d3489f
fi
Packit d3489f
if test -z "$libdir"; then
Packit d3489f
  libdir="$prefix/lib"
Packit d3489f
fi
Packit d3489f
if test -z "$libdevdir"; then
Packit d3489f
  libdevdir="$prefix/lib"
Packit d3489f
fi
Packit d3489f
if test -z "$mandir"; then
Packit d3489f
  mandir="$prefix/man"
Packit d3489f
fi
Packit d3489f
if test -z "$datadir"; then
Packit d3489f
  datadir="$prefix/share"
Packit d3489f
fi
Packit d3489f
Packit d3489f
if test x"$libdir" = x"$libdevdir"; then
Packit d3489f
  relativelibdir=""
Packit d3489f
else
Packit d3489f
  relativelibdir="$libdir/"
Packit d3489f
fi
Packit d3489f
Packit d3489f
if test "$show_help" = "yes"; then
Packit d3489f
cat <
Packit d3489f
Packit d3489f
Usage: configure [options]
Packit d3489f
Options: [defaults in brackets after descriptions]
Packit d3489f
  --help                   print this message
Packit d3489f
  --prefix=PATH            install in PATH [$prefix]
Packit d3489f
  --includedir=PATH        install headers in PATH [$includedir]
Packit d3489f
  --libdir=PATH            install runtime libraries in PATH [$libdir]
Packit d3489f
  --libdevdir=PATH         install development libraries in PATH [$libdevdir]
Packit d3489f
  --mandir=PATH            install man pages in PATH [$mandir]
Packit d3489f
  --datadir=PATH           install shared data in PATH [$datadir]
Packit d3489f
EOF
Packit d3489f
exit 0
Packit d3489f
fi
Packit d3489f
Packit d3489f
TMPC="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.c"
Packit d3489f
TMPC2="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}-2.c"
Packit d3489f
TMPO="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.o"
Packit d3489f
TMPE="${TMPDIR1}/fio-conf-${RANDOM}-$$-${RANDOM}.exe"
Packit d3489f
Packit d3489f
# NB: do not call "exit" in the trap handler; this is buggy with some shells;
Packit d3489f
# see <1285349658-3122-1-git-send-email-loic.minier@linaro.org>
Packit d3489f
trap "rm -f $TMPC $TMPC2 $TMPO $TMPE" EXIT INT QUIT TERM
Packit d3489f
Packit d3489f
rm -rf config.log
Packit d3489f
Packit d3489f
config_host_mak="config-host.mak"
Packit d3489f
config_host_h="config-host.h"
Packit d3489f
Packit d3489f
rm -rf $config_host_mak
Packit d3489f
rm -rf $config_host_h
Packit d3489f
Packit d3489f
fatal() {
Packit d3489f
  echo $@
Packit d3489f
  echo "Configure failed, check config.log and/or the above output"
Packit d3489f
  rm -rf $config_host_mak
Packit d3489f
  rm -rf $config_host_h
Packit d3489f
  exit 1
Packit d3489f
}
Packit d3489f
Packit d3489f
# Print result for each configuration test
Packit d3489f
print_config() {
Packit d3489f
  printf "%-30s%s\n" "$1" "$2"
Packit d3489f
}
Packit d3489f
Packit d3489f
# Default CFLAGS
Packit d3489f
CFLAGS="-D_GNU_SOURCE -include config-host.h"
Packit d3489f
BUILD_CFLAGS=""
Packit d3489f
Packit d3489f
# Print configure header at the top of $config_host_h
Packit d3489f
echo "/*" > $config_host_h
Packit d3489f
echo " * Automatically generated by configure - do not modify" >> $config_host_h
Packit d3489f
printf " * Configured with:" >> $config_host_h
Packit d3489f
printf " * '%s'" "$0" "$@" >> $config_host_h
Packit d3489f
echo "" >> $config_host_h
Packit d3489f
echo " */" >> $config_host_h
Packit d3489f
Packit d3489f
echo "# Automatically generated by configure - do not modify" > $config_host_mak
Packit d3489f
printf "# Configured with:" >> $config_host_mak
Packit d3489f
printf " '%s'" "$0" "$@" >> $config_host_mak
Packit d3489f
echo >> $config_host_mak
Packit d3489f
Packit d3489f
do_cxx() {
Packit d3489f
    # Run the compiler, capturing its output to the log.
Packit d3489f
    echo $cxx "$@" >> config.log
Packit d3489f
    $cxx "$@" >> config.log 2>&1 || return $?
Packit d3489f
    return 0
Packit d3489f
}
Packit d3489f
Packit d3489f
do_cc() {
Packit d3489f
    # Run the compiler, capturing its output to the log.
Packit d3489f
    echo $cc "$@" >> config.log
Packit d3489f
    $cc "$@" >> config.log 2>&1 || return $?
Packit d3489f
    # Test passed. If this is an --enable-werror build, rerun
Packit d3489f
    # the test with -Werror and bail out if it fails. This
Packit d3489f
    # makes warning-generating-errors in configure test code
Packit d3489f
    # obvious to developers.
Packit d3489f
    if test "$werror" != "yes"; then
Packit d3489f
        return 0
Packit d3489f
    fi
Packit d3489f
    # Don't bother rerunning the compile if we were already using -Werror
Packit d3489f
    case "$*" in
Packit d3489f
        *-Werror*)
Packit d3489f
           return 0
Packit d3489f
        ;;
Packit d3489f
    esac
Packit d3489f
    echo $cc -Werror "$@" >> config.log
Packit d3489f
    $cc -Werror "$@" >> config.log 2>&1 && return $?
Packit d3489f
    echo "ERROR: configure test passed without -Werror but failed with -Werror."
Packit d3489f
    echo "This is probably a bug in the configure script. The failing command"
Packit d3489f
    echo "will be at the bottom of config.log."
Packit d3489f
    fatal "You can run configure with --disable-werror to bypass this check."
Packit d3489f
}
Packit d3489f
Packit d3489f
compile_prog() {
Packit d3489f
  local_cflags="$1"
Packit d3489f
  local_ldflags="$2 $LIBS"
Packit d3489f
  echo "Compiling test case $3" >> config.log
Packit d3489f
  do_cc $CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Packit d3489f
}
Packit d3489f
Packit d3489f
compile_prog_cxx() {
Packit d3489f
  local_cflags="$1"
Packit d3489f
  local_ldflags="$2 $LIBS"
Packit d3489f
  echo "Compiling test case $3" >> config.log
Packit d3489f
  do_cxx $CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
Packit d3489f
}
Packit d3489f
Packit d3489f
has() {
Packit d3489f
  type "$1" >/dev/null 2>&1
Packit d3489f
}
Packit d3489f
Packit d3489f
output_mak() {
Packit d3489f
  echo "$1=$2" >> $config_host_mak
Packit d3489f
}
Packit d3489f
Packit d3489f
output_sym() {
Packit d3489f
  output_mak "$1" "y"
Packit d3489f
  echo "#define $1" >> $config_host_h
Packit d3489f
}
Packit d3489f
Packit d3489f
print_and_output_mak() {
Packit d3489f
  print_config "$1" "$2"
Packit d3489f
  output_mak "$1" "$2"
Packit d3489f
}
Packit d3489f
print_and_output_mak "prefix" "$prefix"
Packit d3489f
print_and_output_mak "includedir" "$includedir"
Packit d3489f
print_and_output_mak "libdir" "$libdir"
Packit d3489f
print_and_output_mak "libdevdir" "$libdevdir"
Packit d3489f
print_and_output_mak "relativelibdir" "$relativelibdir"
Packit d3489f
print_and_output_mak "mandir" "$mandir"
Packit d3489f
print_and_output_mak "datadir" "$datadir"
Packit d3489f
Packit d3489f
##########################################
Packit d3489f
# check for __kernel_rwf_t
Packit d3489f
__kernel_rwf_t="no"
Packit d3489f
cat > $TMPC << EOF
Packit d3489f
#include <linux/fs.h>
Packit d3489f
int main(int argc, char **argv)
Packit d3489f
{
Packit d3489f
  __kernel_rwf_t x;
Packit d3489f
  x = 0;
Packit d3489f
  return x;
Packit d3489f
}
Packit d3489f
EOF
Packit d3489f
if compile_prog "" "" "__kernel_rwf_t"; then
Packit d3489f
  __kernel_rwf_t="yes"
Packit d3489f
fi
Packit d3489f
print_config "__kernel_rwf_t" "$__kernel_rwf_t"
Packit d3489f
Packit d3489f
##########################################
Packit d3489f
# check for __kernel_timespec
Packit d3489f
__kernel_timespec="no"
Packit d3489f
cat > $TMPC << EOF
Packit d3489f
#include <linux/time.h>
Packit d3489f
#include <linux/time_types.h>
Packit d3489f
int main(int argc, char **argv)
Packit d3489f
{
Packit d3489f
  struct __kernel_timespec ts;
Packit d3489f
  ts.tv_sec = 0;
Packit d3489f
  ts.tv_nsec = 1;
Packit d3489f
  return 0;
Packit d3489f
}
Packit d3489f
EOF
Packit d3489f
if compile_prog "" "" "__kernel_timespec"; then
Packit d3489f
  __kernel_timespec="yes"
Packit d3489f
fi
Packit d3489f
print_config "__kernel_timespec" "$__kernel_timespec"
Packit d3489f
Packit d3489f
##########################################
Packit d3489f
# check for open_how
Packit d3489f
open_how="no"
Packit d3489f
cat > $TMPC << EOF
Packit d3489f
#include <sys/types.h>
Packit d3489f
#include <sys/stat.h>
Packit d3489f
#include <fcntl.h>
Packit d3489f
#include <string.h>
Packit d3489f
int main(int argc, char **argv)
Packit d3489f
{
Packit d3489f
  struct open_how how;
Packit d3489f
  how.flags = 0;
Packit d3489f
  how.mode = 0;
Packit d3489f
  how.resolve = 0;
Packit d3489f
  return 0;
Packit d3489f
}
Packit d3489f
EOF
Packit d3489f
if compile_prog "" "" "open_how"; then
Packit d3489f
  open_how="yes"
Packit d3489f
fi
Packit d3489f
print_config "open_how" "$open_how"
Packit d3489f
Packit d3489f
##########################################
Packit d3489f
# check for statx
Packit d3489f
statx="no"
Packit d3489f
cat > $TMPC << EOF
Packit d3489f
#include <sys/types.h>
Packit d3489f
#include <sys/stat.h>
Packit d3489f
#include <unistd.h>
Packit d3489f
#include <fcntl.h>
Packit d3489f
#include <string.h>
Packit d3489f
#include <linux/stat.h>
Packit d3489f
int main(int argc, char **argv)
Packit d3489f
{
Packit d3489f
  struct statx x;
Packit d3489f
Packit d3489f
  return memset(&x, 0, sizeof(x)) != NULL;
Packit d3489f
}
Packit d3489f
EOF
Packit d3489f
if compile_prog "" "" "statx"; then
Packit d3489f
  statx="yes"
Packit d3489f
fi
Packit d3489f
print_config "statx" "$statx"
Packit d3489f
Packit d3489f
##########################################
Packit d3489f
# check for C++
Packit d3489f
has_cxx="no"
Packit d3489f
cat > $TMPC << EOF
Packit d3489f
#include <iostream>
Packit d3489f
int main(int argc, char **argv)
Packit d3489f
{
Packit d3489f
  std::cout << "Test";
Packit d3489f
  return 0;
Packit d3489f
}
Packit d3489f
EOF
Packit d3489f
if compile_prog_cxx "" "" "C++"; then
Packit d3489f
  has_cxx="yes"
Packit d3489f
fi
Packit d3489f
print_config "C++" "$has_cxx"
Packit d3489f
Packit d3489f
#############################################################################
Packit d3489f
Packit d3489f
if test "$__kernel_rwf_t" = "yes"; then
Packit d3489f
  output_sym "CONFIG_HAVE_KERNEL_RWF_T"
Packit d3489f
fi
Packit d3489f
if test "$__kernel_timespec" = "yes"; then
Packit d3489f
  output_sym "CONFIG_HAVE_KERNEL_TIMESPEC"
Packit d3489f
fi
Packit d3489f
if test "$open_how" = "yes"; then
Packit d3489f
  output_sym "CONFIG_HAVE_OPEN_HOW"
Packit d3489f
fi
Packit d3489f
if test "$statx" = "yes"; then
Packit d3489f
  output_sym "CONFIG_HAVE_STATX"
Packit d3489f
fi
Packit d3489f
if test "$has_cxx" = "yes"; then
Packit d3489f
  output_sym "CONFIG_HAVE_CXX"
Packit d3489f
fi
Packit d3489f
Packit d3489f
echo "CC=$cc" >> $config_host_mak
Packit d3489f
print_config "CC" "$cc"
Packit d3489f
echo "CXX=$cxx" >> $config_host_mak
Packit d3489f
print_config "CXX" "$cxx"
Packit d3489f
Packit d3489f
# generate compat.h
Packit d3489f
compat_h="src/include/liburing/compat.h"
Packit d3489f
cat > $compat_h << EOF
Packit d3489f
/* SPDX-License-Identifier: MIT */
Packit d3489f
#ifndef LIBURING_COMPAT_H
Packit d3489f
#define LIBURING_COMPAT_H
Packit d3489f
Packit d3489f
EOF
Packit d3489f
Packit d3489f
if test "$__kernel_rwf_t" != "yes"; then
Packit d3489f
cat >> $compat_h << EOF
Packit d3489f
typedef int __kernel_rwf_t;
Packit d3489f
Packit d3489f
EOF
Packit d3489f
fi
Packit d3489f
if test "$__kernel_timespec" != "yes"; then
Packit d3489f
cat >> $compat_h << EOF
Packit d3489f
#include <stdint.h>
Packit d3489f
Packit d3489f
struct __kernel_timespec {
Packit d3489f
	int64_t		tv_sec;
Packit d3489f
	long long	tv_nsec;
Packit d3489f
};
Packit d3489f
Packit d3489f
EOF
Packit d3489f
else
Packit d3489f
cat >> $compat_h << EOF
Packit d3489f
#include <linux/time_types.h>
Packit d3489f
Packit d3489f
EOF
Packit d3489f
fi
Packit d3489f
if test "$open_how" != "yes"; then
Packit d3489f
cat >> $compat_h << EOF
Packit d3489f
#include <inttypes.h>
Packit d3489f
Packit d3489f
struct open_how {
Packit d3489f
	uint64_t	flags;
Packit d3489f
	uint64_t	mode;
Packit d3489f
	uint64_t	resolve;
Packit d3489f
};
Packit d3489f
Packit d3489f
EOF
Packit d3489f
fi
Packit d3489f
Packit d3489f
cat >> $compat_h << EOF
Packit d3489f
#endif
Packit d3489f
EOF