Browse Source

[master] made configure more suitable for cross-compiling (#3723)

Francis Dupont 10 years ago
parent
commit
a244e0d11e
1 changed files with 51 additions and 33 deletions
  1. 51 33
      configure.ac

+ 51 - 33
configure.ac

@@ -26,6 +26,8 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])dnl be backward compatible
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_MACRO_DIR([m4macros])
 
+AC_CANONICAL_HOST
+
 # Checks for programs.
 AC_PROG_CXX
 
@@ -253,19 +255,18 @@ case "$host" in
 
 	# In OS X 10.9 (and possibly any future versions?) pthread_cond_destroy
 	# doesn't work as documented, which makes some of unit tests fail.
-        AC_TRY_RUN([
-	#include <Availability.h>
-	int main(void)
-	{
-	#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
-	#if __MAC_OS_X_VERSION_MIN_REQUIRED < 1090
-	return 1;
-	#else
-	return 0;
-	#endif
-	#endif
-	return 1;
-	}],[kea_undefined_pthread_behavior=yes],[],[])
+	AC_MSG_CHECKING([OS X versions where destroying locked locks do not fail])
+	AC_TRY_COMPILE(
+	[#include <Availability.h>],
+	[#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED
+	 #if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090
+	 #error " OS X >= 10.9"
+	 #endif
+	 #endif
+	 return 1;],
+	[AC_MSG_RESULT([OS X < 10.9])],
+	[AC_MSG_RESULT([OS X >= 10.9])
+	 kea_undefined_pthread_behavior=yes])
 
 	# libtool doesn't work perfectly with Darwin: libtool embeds the
 	# final install path in dynamic libraries and our loadable python
@@ -364,44 +365,61 @@ AC_TYPE_SIZE_T
 
 # Detect OS type (it may be used to do OS-specific things, e.g.
 # interface detection in DHCP)
-AC_MSG_CHECKING(OS family)
-system=`uname -s`
-case $system in
-    Linux)
+AC_MSG_CHECKING(OS type)
+case $host in
+    *-linux*)
+      AC_DEFINE([OS_LINUX], [1], [Running on Linux?])
       OS_TYPE="Linux"
       CPPFLAGS="$CPPFLAGS -DOS_LINUX"
       ;;
-    Darwin | FreeBSD | NetBSD | OpenBSD)
+    *-apple-darwin*)
+      AC_DEFINE([OS_BSD], [1], [Running on BSD?])
+      AC_DEFINE([OS_OSX], [1], [Running on OSX?])
+      OS_TYPE="BSD"
+      BSD_TYPE="OSX"
+      CPPFLAGS="$CPPFLAGS -DOS_BSD"
+      ;;
+    *-freebsd*)
+      AC_DEFINE([OS_BSD], [1], [Running on BSD?])
+      AC_DEFINE([OS_FREEBSD], [1], [Running on FreeBSD?])
+      OS_TYPE="BSD"
+      BSD_TYPE="FreeBSD"
+      CPPFLAGS="$CPPFLAGS -DOS_BSD"
+      ;;
+    *-netbsd*)
+      AC_DEFINE([OS_BSD], [1], [Running on BSD?])
+      AC_DEFINE([OS_NETBSD], [1], [Running on NetBSD?])
+      OS_TYPE="BSD"
+      BSD_TYPE="NetBSD"
+      CPPFLAGS="$CPPFLAGS -DOS_BSD"
+      ;;
+    *-openbsd*)
+      AC_DEFINE([OS_BSD], [1], [Running on BSD?])
+      AC_DEFINE([OS_OPENBSD], [1], [Running on OpenBSD?])
       OS_TYPE="BSD"
+      BSD_TYPE="OpenBSD"
       CPPFLAGS="$CPPFLAGS -DOS_BSD"
       ;;
-    SunOS)
+    *-solaris*)
+      AC_DEFINE([OS_SOLARIS], [1], [Running on Solaris?])
       OS_TYPE="Solaris"
       CPPFLAGS="$CPPFLAGS -DOS_SUN"
       ;;
     *)
       OS_TYPE="Unknown"
-      AC_MSG_WARN("Unsupported OS: uname returned $system")
+      # $host_os is more user friendly than full $host
+      AC_MSG_WARN("Unsupported OS: $host_os")
       ;;
 esac
 AC_MSG_RESULT($OS_TYPE)
 
 AM_CONDITIONAL(OS_LINUX, test $OS_TYPE = Linux)
-AM_COND_IF([OS_LINUX], [AC_DEFINE([OS_LINUX], [1], [Running on Linux?])])
 AM_CONDITIONAL(OS_BSD, test $OS_TYPE = BSD)
-AM_COND_IF([OS_BSD], [AC_DEFINE([OS_BSD], [1], [Running on BSD?])])
 AM_CONDITIONAL(OS_SOLARIS, test $OS_TYPE = Solaris)
-AM_COND_IF([OS_SOLARIS], [AC_DEFINE([OS_SOLARIS], [1], [Running on Solaris?])])
-
-# Deal with variants
-AM_CONDITIONAL(OS_FREEBSD, test $system = FreeBSD)
-AM_COND_IF([OS_FREEBSD], [AC_DEFINE([OS_FREEBSD], [1], [Running on FreeBSD?])])
-AM_CONDITIONAL(OS_NETBSD, test $system = NetBSD)
-AM_COND_IF([OS_NETBSD], [AC_DEFINE([OS_NETBSD], [1], [Running on NetBSD?])])
-AM_CONDITIONAL(OS_OPENBSD, test $system = OpenBSD)
-AM_COND_IF([OS_OPENBSD], [AC_DEFINE([OS_OPENBSD], [1], [Running on OpenBSD?])])
-AM_CONDITIONAL(OS_OSX, test $system = Darwin)
-AM_COND_IF([OS_OSX], [AC_DEFINE([OS_OSX], [1], [Running on OSX?])])
+AM_CONDITIONAL(OS_OSX, test $BSD_TYPE = OSX)
+AM_CONDITIONAL(OS_FREEBSD, test $BSD_TYPE = FreeBSD)
+AM_CONDITIONAL(OS_NETBSD, test $BSD_TYPE = NetBSD)
+AM_CONDITIONAL(OS_OPENBSD, test $BSD_TYPE = OpenBSD)
 
 
 AC_MSG_CHECKING(for sa_len in struct sockaddr)