Author: Peter Bui <pbui@nd.edu>
Date: Thu Aug 11 19:38:59 2011 +0000
Description: Multiarch support for configure
 configure: add possible support for Debian multiarch environment
 Tested on wheezy/sid in virtual machine.
 git-svn-id: svn://ccl.cse.nd.edu/trunk@1410 a4d8336d-3463-0410-8bba-c098c45d37a8

 configure: add optional_include function
 This function checks normal path, and then the multiarch path if it is
 detected.  Use this function to check for header files.
 Tested on Debian Sid virtual machine.
 git-svn-id: svn://ccl.cse.nd.edu/trunk@1415 a4d8336d-3463-0410-8bba-c098c45d37a8
Origin: upstream
--- a/configure
+++ b/configure
@@ -280,6 +280,8 @@
 	ldflags="-static-libgcc"
 fi
 
+check_multiarch
+
 rm -f Makefile.config
 echo "checking for all the things I know how to build..."
 for p in $potential_packages
@@ -675,9 +677,9 @@
 optional_function pread /usr/include/unistd.h HAS_PREAD
 optional_function pwrite /usr/include/unistd.h HAS_PWRITE
 
-optional_file /usr/include/sys/statfs.h HAS_SYS_STATFS_H
-optional_file /usr/include/sys/statvfs.h HAS_SYS_STATVFS_H
-optional_file /usr/include/alloca.h HAS_ALLOCA_H
+optional_include /usr/include/sys/statfs.h HAS_SYS_STATFS_H
+optional_include /usr/include/sys/statvfs.h HAS_SYS_STATVFS_H
+optional_include /usr/include/alloca.h HAS_ALLOCA_H
 
 if check_path doxygen
 then
--- a/configure.tools
+++ b/configure.tools
@@ -89,6 +89,30 @@
 
 library_search()
 {
+	if library_search_normal $@;
+	then
+		return 0
+	fi
+	if [ X$HOST_MULTIARCH != X ] && library_search_multiarch $@;
+	then
+		return 0
+	fi
+
+	return 1
+}
+
+library_search_multiarch()
+{
+	if [ X$3 = X ];
+	then
+		library_search_normal $1 $2 $HOST_MULTIARCH
+	else
+		library_search_normal $1 $2 $HOST_MULTIARCH/$3
+	fi
+}
+
+library_search_normal()
+{
 	# If the second argument is root, and we are not careful,
 	# we will end up with a path that has two slashes, which
 	# means something unintended in Windows
@@ -163,20 +187,25 @@
 			return 0
 		fi
 	fi
-
-
+	
 	return 1
 }
 
 optional_function()
 {
+	multiarch_include=`echo $2 | sed "s|include/|include/$HOST_MULTIARCH/|"`
+
 	if check_function $1 $2
 	then
 		ccflags="${ccflags} -D$3"
 		return 0
-	else
-		return 1
+	elif [ X$HOST_MULTIARCH != X ] && check_function $1 $multiarch_include;
+	then
+		ccflags="${ccflags} -D$3"
+		return 0
 	fi
+		
+	return 1
 }
 
 optional_file()
@@ -190,6 +219,21 @@
 	fi
 }
 
+optional_include()
+{
+	multiarch_include=`echo $1 | sed "s|include/|include/$HOST_MULTIARCH/|"`
+
+	if optional_file $1 $2;
+	then
+		return 0
+	elif [ X$HOST_MULTIARCH != X ] && optional_file $multiarch_include $2;
+	then
+		return 0
+	fi
+
+	return 1
+}
+
 optional_pfs_service()
 {
 	service=$1
@@ -419,3 +463,15 @@
 		return 1
 	fi
 }
+
+check_multiarch()
+{
+	echo -n "checking for multiarch environment..." 
+	if [ -r /etc/debian_version ]; then
+		HOST_MULTIARCH=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
+		echo "$HOST_MULTIARCH"
+	else
+		HOST_MULTIARCH=
+		echo "no"
+	fi
+}
