solaris: ensure that TCP_NODELAY gets picked up
[fio.git] / configure
index 995b5df231e9129b9dceace6b867c7fb717c63be..8f8674980df1318ba59b76c9bffebd486dc9df11 100755 (executable)
--- a/configure
+++ b/configure
@@ -29,6 +29,14 @@ 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
+}
+
 # Default CFLAGS
 CFLAGS="-D_GNU_SOURCE"
 EXTFLAGS="-include config-host.h"
@@ -70,8 +78,7 @@ do_cc() {
     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."
-    echo "You can run configure with --disable-werror to bypass this check."
-    exit 1
+    fatal "You can run configure with --disable-werror to bypass this check."
 }
 
 compile_object() {
@@ -91,8 +98,7 @@ feature_not_found() {
   echo "ERROR"
   echo "ERROR: User requested feature $feature"
   echo "ERROR: configure was not able to find it"
-  echo "ERROR"
-  exit 1;
+  fatal "ERROR"
 }
 
 has() {
@@ -129,10 +135,14 @@ exit_val=0
 for opt do
   optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
   case "$opt" in
+  --cpu=*) cpu="$optarg"
+  ;;
   --cc=*) CC="$optarg"
   ;;
   --extra-cflags=*) CFLAGS="$CFLAGS $optarg"
   ;;
+  --build-32bit-win=*) build_32bit_win="$optarg"
+  ;;
   --help)
   show_help="yes"
   ;;
@@ -144,12 +154,16 @@ for opt do
 done
 
 if test "$show_help" = "yes" ; then
+  echo "--cpu=                 Specify target CPU if auto-detect fails"
   echo "--cc=                  Specify compiler to use"
   echo "--extra-cflags=        Specify extra CFLAGS to pass to compiler"
+  echo "--build-32bit-win=     Specify yes for a 32-bit build on Windows"
   exit $exit_val
 fi
 
-if check_define __linux__ ; then
+if check_define __ANDROID__ ; then
+  targetos="Android"
+elif check_define __linux__ ; then
   targetos="Linux"
 elif check_define __OpenBSD__ ; then
   targetos='OpenBSD'
@@ -183,27 +197,44 @@ SunOS)
 CYGWIN*)
   echo "Forcing known good options on Windows"
   if test -z "$CC" ; then
-    CC="x86_64-w64-mingw32-gcc"
+    if test ! -z "$build_32bit_win" && test "$build_32bit_win" = "yes"; then
+      CC="i686-w64-mingw32-gcc"
+    else
+      CC="x86_64-w64-mingw32-gcc"
+    fi
   fi
   output_sym "CONFIG_LITTLE_ENDIAN"
-  output_sym "CONFIG_64BIT_LLP64"
-  output_sym "CONFIG_CLOCK_GETTIME"
-  output_sym "CONFIG_CLOCK_MONOTONIC"
-  output_sym "CONFIG_GETTIMEOFDAY"
+  if test ! -z "$build_32bit_win" && test "$build_32bit_win" = "yes"; then
+    output_sym "CONFIG_32BIT"
+  else
+    output_sym "CONFIG_64BIT_LLP64"
+  fi
   output_sym "CONFIG_FADVISE"
   output_sym "CONFIG_SOCKLEN_T"
-  output_sym "CONFIG_POSIX_FALLOCATE"
   output_sym "CONFIG_FADVISE"
   output_sym "CONFIG_SFAA"
   output_sym "CONFIG_RUSAGE_THREAD"
   output_sym "CONFIG_WINDOWSAIO"
   output_sym "CONFIG_FDATASYNC"
+  output_sym "CONFIG_CLOCK_MONOTONIC"
   output_sym "CONFIG_GETTIMEOFDAY"
   output_sym "CONFIG_CLOCK_GETTIME"
   output_sym "CONFIG_SCHED_IDLE"
+  output_sym "CONFIG_TCP_NODELAY"
   echo "CC=$CC" >> $config_host_mak
   echo "EXTFLAGS=$CFLAGS -include config-host.h -D_GNU_SOURCE" >> $config_host_mak
   exit 0
+  ;;
+Android)
+  output_sym "CONFIG_32BIT"
+  output_sym "CONFIG_LITTLE_ENDIAN"
+  output_sym "CONFIG_SOCKLEN_T"
+  output_sym "CONFIG_GETTIMEOFDAY"
+  output_sym "CONFIG_CLOCK_GETTIME"
+  output_sym "CONFIG_CLOCK_MONOTONIC"
+  echo "CC=$cc" >> $config_host_mak
+  echo "EXTFLAGS=$CFLAGS -include config-host.h -DFIO_NO_HAVE_SHM_H -D_GNU_SOURCE" >> $config_host_mak
+  exit 0
 esac
 
 if test ! -z "$cpu" ; then
@@ -267,8 +298,7 @@ case "$cpu" in
     cpu="sparc"
   ;;
   *)
-    echo "Unknown CPU"
-    exit 1;
+  echo "Unknown CPU"
   ;;
 esac
 
@@ -319,7 +349,7 @@ int main(void)
 }
 EOF
 if compile_prog "" "" "wordsize"; then
-  wordsize=$($TMPE)
+  wordsize=`$TMPE`
 fi
 echo "Wordsize                      $wordsize"
 
@@ -861,6 +891,44 @@ if compile_prog "" "" "SCHED_IDLE"; then
 fi
 echo "SCHED_IDLE                    $sched_idle"
 
+##########################################
+# Check whether we have TCP_NODELAY
+tcp_nodelay="no"
+cat > $TMPC << EOF
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/tcp.h>
+int main(int argc, char **argv)
+{
+  return getsockopt(0, 0, TCP_NODELAY, NULL, NULL);
+}
+EOF
+if compile_prog "" "" "TCP_NODELAY"; then
+  tcp_nodelay="yes"
+elif compile_prog "" "-lnsl -lsocket" "TCP_NODELAY"; then
+  tcp_nodelay="yes"
+  LIBS="-lnsl -lsocket $LIBS" 
+fi
+echo "TCP_NODELAY                   $tcp_nodelay"
+
+##########################################
+# Check whether we have RLIMIT_MEMLOCK
+rlimit_memlock="no"
+cat > $TMPC << EOF
+#include <sys/time.h>
+#include <sys/resource.h>
+int main(int argc, char **argv)
+{
+  struct rlimit rl;
+  return getrlimit(RLIMIT_MEMLOCK, &rl);
+}
+EOF
+if compile_prog "" "" "RLIMIT_MEMLOCK"; then
+  rlimit_memlock="yes"
+fi
+echo "RLIMIT_MEMLOCK                $rlimit_memlock"
+
 #############################################################################
 
 echo "# Automatically generated by configure - do not modify" > $config_host_mak
@@ -873,8 +941,7 @@ if test "$wordsize" = "64" ; then
 elif test "$wordsize" = "32" ; then
   output_sym "CONFIG_32BIT"
 else
-  echo "Unknown wordsize!"
-  exit 1
+  fatal "Unknown wordsize!"
 fi
 if test "$bigendian" = "yes" ; then
   output_sym "CONFIG_BIG_ENDIAN"
@@ -967,6 +1034,12 @@ fi
 if test "$sched_idle" = "yes" ; then
   output_sym "CONFIG_SCHED_IDLE"
 fi
+if test "$tcp_nodelay" = "yes" ; then
+  output_sym "CONFIG_TCP_NODELAY"
+fi
+if test "$rlimit_memlock" = "yes" ; then
+  output_sym "CONFIG_RLIMIT_MEMLOCK"
+fi
 
 echo "LIBS+=$LIBS" >> $config_host_mak
 echo "CC=$cc" >> $config_host_mak