Created SILC Runtime Toolkit git repository Part I.
[runtime.git] / srt.m4
diff --git a/srt.m4 b/srt.m4
new file mode 100644 (file)
index 0000000..300f303
--- /dev/null
+++ b/srt.m4
@@ -0,0 +1,159 @@
+#
+#  silc.m4
+#
+#  Author: Pekka Riikonen <priikone@silcnet.org>
+#
+#  Copyright (C) 2007 Pekka Riikonen
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; version 2 of the License.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+
+# Function to check if system has SMP kernel.
+#
+# Usage: SILC_SYSTEM_IS_SMP([ACTION-IF-FOUND] [, ACTION-IF-NOT-FOUND]
+#                           [, ACTION-IF-NOT-DETECTED])
+#
+# The ACTION-IF-NOT-DETECTED is called if we could not detect whether or 
+# not the system is SMP.
+#
+# x_is_smp variable is set to true or false as a result for calling this
+# function.  Caller may use the variable to check for the result in the 
+# code.
+#
+AC_DEFUN([SILC_SYSTEM_IS_SMP],
+[
+  AC_MSG_CHECKING(whether system has SMP kernel)
+  x_is_smp=false
+
+  case "$target" in
+    *-*-linux*)
+      # Take data from Linux /proc
+      if test -f /proc/stat; then
+        cpucount=`grep "^cpu" /proc/stat -c 2> /dev/null`
+        if test $cpucount -gt 1; then
+          AC_DEFINE([SILC_SMP], [], [SILC_SMP])
+          AC_MSG_RESULT(yes)
+          x_is_smp=true
+          ifelse([$1], , :, [$1])
+        else
+          AC_MSG_RESULT(no)
+          ifelse([$2], , :, [$2])
+        fi
+      else
+        AC_MSG_RESULT(no)
+        ifelse([$2], , :, [$2])
+      fi
+      ;;
+
+    *-*-*bsd*)
+      # BSDs can have SMP info in sysctl 'kern.smp.cpus' variable
+      sysctl="sysctl -n kern.smp.cpus"
+      cpucount=`(/sbin/$sysctl 2> /dev/null || \
+                 /usr/sbin/$sysctl 2> /dev/null || echo -n 0)`
+      if test $cpucount -gt 1; then
+        AC_DEFINE([SILC_SMP], [], [SILC_SMP])
+        AC_MSG_RESULT(yes)
+         x_is_smp=true
+        ifelse([$1], , :, [$1])
+      else
+        AC_MSG_RESULT(no)
+        ifelse([$2], , :, [$2])
+      fi
+      ;;
+
+    *)
+      AC_MSG_RESULT(cannot detect on this system)
+      ifelse([$3], , :, [$3])
+      ;;
+  esac
+])
+
+# Function to check for CPU feature flags.
+#
+# Usage: SILC_CPU_FLAG(flag [, ACTION-IF-FOUND] [, ACTION-IF-NOT-FOUND])
+#
+# x_have_cpu_<flag> variable is set to true or false value as a result for
+# calling this function for the <flag>.  Caller may use the variable to
+# check the result in the code.
+#
+AC_DEFUN([SILC_CPU_FLAG],
+[
+  AC_MSG_CHECKING(whether CPU supports $1)
+  x_have_cpu_$1=false
+
+  case "$target" in
+    *-*-linux*)
+      # Take data from Linux /proc
+      if test -f /proc/cpuinfo; then
+        cpuflags=`grep "^flags.*$1 " /proc/cpuinfo 2> /dev/null`
+        if test $? != 0; then
+          AC_MSG_RESULT(no)
+          ifelse([$3], , :, [$3])
+        else
+          AC_MSG_RESULT(yes)
+          x_have_cpu_$1=true
+          ifelse([$2], , :, [$2])
+        fi
+      else
+        AC_MSG_RESULT(no)
+        ifelse([$3], , :, [$3])
+      fi
+      ;;
+
+    *-*-*bsd*)
+      # BSDs have some flags in sysctl 'machdep' variable
+      cpuflags=`/sbin/sysctl machdep 2> /dev/null | grep "\.$1.*.1"`
+      if test $? != 0; then
+        AC_MSG_RESULT(no)
+        ifelse([$3], , :, [$3])
+      else
+        AC_MSG_RESULT(yes)
+        x_have_cpu_$1=true
+        ifelse([$2], , :, [$2])
+      fi
+      ;;
+
+    *)
+      AC_MSG_RESULT(no, cannot detect on this system)
+      ifelse([$3], , :, [$3])
+      ;;
+  esac
+])
+
+# Function to check if compiler option works with the compiler.  If you
+# want the option added to some other than CFLAGS variable use the
+# SILC_ADD_CC_FLAGS which supports to specifiable destination variable.
+#
+# Usage: SILC_ADD_CFLAGS(FLAGS, [ACTION-IF-FAILED])
+#
+AC_DEFUN([SILC_ADD_CFLAGS],
+[ tmp_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $1"
+  AC_MSG_CHECKING(whether $CC accepts $1 flag)
+  AC_TRY_LINK([], [], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
+                                      CFLAGS="$tmp_CFLAGS"
+                                      $2])
+  unset tmp_CFLAGS
+])
+
+# Function to check if compiler option works with the compiler,
+# destination variable specifiable
+#
+# Usage: SILC_ADD_CC_FLAGS(VAR, FLAGS, [ACTION-IF-FAILED])
+#
+AC_DEFUN([SILC_ADD_CC_FLAGS],
+[ tmp_CFLAGS="$1_CFLAGS"
+  $1_CFLAGS="${$1_CFLAGS} $2"
+  AC_MSG_CHECKING(whether $CC accepts $2 flag)
+  AC_TRY_LINK([], [], [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no)
+                                      $1_CFLAGS="$tmp_CFLAGS"
+                                      $3])
+  unset tmp_CFLAGS
+])