diff acinclude.m4 @ 10245:c143a3fac58d

[gaim-migrate @ 11385] Binary relocation, step one. I had a fairly long commit message, and cvs ate it and said Read from remote host cvs.sourceforge.net: Connection reset by peer I'm displeased. This is just method one, method two to follow tomorrow after I add a way to register a fallback and try to push it upstream. That way I don't have to put method 2 inside prefix.c. As for as core/ui split goes, they can either each have their own copy after the divorce is final, or the UI can use the core's. It'll work either way, since #1 finds location of the caller, and #2 doesn't work on libraries anyway. That's one advantage I forgot to mention, btw, that #1 will let a library find its own location. So, I'm sure something isn't quite right and someone will want to fix it. So they can fix it while i implement phase two. Which won't take long at all, but the autopackage guy is in bed, and I should be too. committer: Tailor Script <tailor@pidgin.im>
author Tim Ringenbach <marv@pidgin.im>
date Tue, 23 Nov 2004 05:53:59 +0000
parents f15fcdbecf0a
children 949b7986f42c
line wrap: on
line diff
--- a/acinclude.m4	Tue Nov 23 02:49:09 2004 +0000
+++ b/acinclude.m4	Tue Nov 23 05:53:59 2004 +0000
@@ -786,3 +786,83 @@
 else
   AC_MSG_WARN(could not find perl)
 fi])dnl
+
+
+dnl This file scares me...
+# Check for binary relocation support
+# Hongli Lai
+# http://autopackage.org/
+
+AC_DEFUN([AM_BINRELOC],
+[
+	AC_ARG_ENABLE(binreloc,
+		[  --enable-binreloc       compile with binary relocation support
+                          (default=enable when available)],
+		enable_binreloc=$enableval,enable_binreloc=auto)
+
+	AC_ARG_ENABLE(binreloc-threads,
+		[  --enable-binreloc-threads      compile binary relocation with threads support
+	                         (default=yes)],
+		enable_binreloc_threads=$enableval,enable_binreloc_threads=yes)
+
+	BINRELOC_CFLAGS=
+	BINRELOC_LIBS=
+	if test "x$enable_binreloc" = "xauto"; then
+		AC_CHECK_FILE([/proc/self/maps])
+		AC_CACHE_CHECK([whether everything is installed to the same prefix],
+			       [br_cv_valid_prefixes], [
+				if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \
+					"$datadir" = '${prefix}/share' -a "$libdir" = '${exec_prefix}/lib' -a \
+					"$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc'
+				then
+					br_cv_valid_prefixes=yes
+				else
+					br_cv_valid_prefixes=no
+				fi
+				])
+	fi
+	AC_CACHE_CHECK([whether binary relocation support should be enabled],
+		       [br_cv_binreloc],
+		       [if test "x$enable_binreloc" = "xyes"; then
+		       	       br_cv_binreloc=yes
+		       elif test "x$enable_binreloc" = "xauto"; then
+			       if test "x$br_cv_valid_prefixes" = "xyes" -a \
+			       	       "x$ac_cv_file__proc_self_maps" = "xyes"; then
+				       br_cv_binreloc=yes
+			       else
+				       br_cv_binreloc=no
+			       fi
+		       else
+			       br_cv_binreloc=no
+		       fi])
+
+	if test "x$br_cv_binreloc" = "xyes"; then
+		BINRELOC_CFLAGS="-DENABLE_BINRELOC"
+		AC_DEFINE(ENABLE_BINRELOC,,[Use binary relocation?])
+		if test "x$enable_binreloc_threads" = "xyes"; then
+			AC_CHECK_LIB([pthread], [pthread_getspecific])
+		fi
+
+		AC_CACHE_CHECK([whether binary relocation should use threads],
+			       [br_cv_binreloc_threads],
+			       [if test "x$enable_binreloc_threads" = "xyes"; then
+					if test "x$ac_cv_lib_pthread_pthread_getspecific" = "xyes"; then
+						br_cv_binreloc_threads=yes
+					else
+						br_cv_binreloc_threads=no
+					fi
+			        else
+					br_cv_binreloc_threads=no
+				fi])
+
+		if test "x$br_cv_binreloc_threads" = "xyes"; then
+			BINRELOC_LIBS="-lpthread"
+			AC_DEFINE(BR_PTHREAD,1,[Include pthread support for binary relocation?])
+		else
+			BINRELOC_CFLAGS="$BINRELOC_CFLAGS -DBR_PTHREAD=0"
+			AC_DEFINE(BR_PTHREAD,0,[Include pthread support for binary relocation?])
+		fi
+	fi
+	AC_SUBST(BINRELOC_CFLAGS)
+	AC_SUBST(BINRELOC_LIBS)
+])