aboutsummaryrefslogtreecommitdiff
path: root/acinclude.m4
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2007-03-04 19:47:34 +0000
committerNick Mathewson <nickm@torproject.org>2007-03-04 19:47:34 +0000
commit0e44371a337bc4d1154eb65e9b7f2cba96365a13 (patch)
treefabe5d1654fe58cf201855ebc4d7c3f33e649cb8 /acinclude.m4
parent70e5a83a77900121ea66a28e8743ea3b25135dea (diff)
downloadtor-0e44371a337bc4d1154eb65e9b7f2cba96365a13.tar
tor-0e44371a337bc4d1154eb65e9b7f2cba96365a13.tar.gz
r11596@catbus: nickm | 2007-01-30 01:43:40 -0500
Macro-ize our "search for a library and find out how to link against it" code. This will help make our handling of libevent and openssl more similar, and with any luck better. Not pushing to main branch until after 0.1.2. svn:r9726
Diffstat (limited to 'acinclude.m4')
-rw-r--r--acinclude.m4124
1 files changed, 124 insertions, 0 deletions
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644
index 000000000..5e506a387
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,124 @@
+dnl $Id$
+dnl Helper macros for Tor configure.in
+dnl Copyright (c) 2001-2004, Roger Dingledine
+dnl Copyright (c) 2004-2007, Roger Dingledine, Nick Mathewson
+dnl See LICENSE for licensing information
+
+AC_DEFUN([TOR_EXTEND_CODEPATH],
+[
+ if test -d "$1/lib"; then
+ LDFLAGS="-L$1/lib $LDFLAGS"
+ else
+ LDFLAGS="-L$1 $LDFLAGS"
+ fi
+ if test -d "$1/include"; then
+ CPPFLAGS="-I$1/include $CPPFLAGS"
+ else
+ CPPFLAGS="-I$1 $CPPFLAGS"
+ fi
+])
+
+dnl Look for a library, and its associated includes, and how to link
+dnl against it.
+dnl
+dnl TOR_SEARCH_LIBRARY(libname, withlocation, linkargs, headers, prototype,
+dnl code, optionname)
+
+AC_DEFUN([TOR_SEARCH_LIBRARY], [
+tor_saved_LIBS="$LIBS"
+tor_saved_LDFLAGS="$LDFLAGS"
+tor_saved_CPPFLAGS="$CPPFLAGS"
+AC_CACHE_CHECK([for $1 directory], tor_cv_library_$1_dir, [
+ tor_$1_dir_found=no
+ tor_$1_any_linkable=no
+
+ for tor_trydir in "$2" "(system)" "$prefix" /usr/local /usr/pkg; do
+ LDFLAGS="$tor_saved_LDFLAGS"
+ LIBS="$tor_saved_LIBS $3"
+ CPPFLAGS="$tor_saved_CPPFLAGS"
+
+ if test -z "$tor_trydir" ; then
+ continue;
+ fi
+
+ # Skip the directory if it isn't there.
+ if test ! -d "$tor_trydir" -a "$tor_trydir" != "(system)"; then
+ continue;
+ fi
+
+ # If this isn't blank, try adding the directory (or appropriate
+ # include/libs subdirectories) to the command line.
+ if test "$tor_trydir" != "(system)"; then
+ TOR_EXTEND_CODEPATH($tor_trydir)
+ fi
+
+ # Can we link against (but not necessarily compile) the binary?
+ AC_LINK_IFELSE(AC_LANG_PROGRAM([$5], [$6]),
+ [linkable=yes], [linkable=no])
+
+ if test $linkable = yes; then
+ tor_$1_any_linkable=yes
+ AC_COMPILE_IFELSE(AC_LANG_PROGRAM([$4], [$6]),
+ [buildable=yes], [buildable=no])
+ if test $buildable = yes; then
+ tor_cv_library_$1_dir=$tor_trydir
+ tor_$1_dir_found=yes
+ break
+ fi
+ fi
+ done
+
+ if test $tor_$1_dir_found = no; then
+ if test $tor_$1_any_linkable = no ; then
+ AC_MSG_ERROR([Could not find a linkable $1. You can specify an explicit path using $7])
+ else
+ AC_MSG_ERROR([We found the libraries for $1, but we could not find the C header files. You may need to install a devel package.])
+ fi
+ fi
+
+ LDFLAGS="$tor_saved_LDFLAGS"
+ LIBS="$tor_saved_LIBS $3"
+ CPPFLAGS="$tor_saved_CPPFLAGS"
+]) dnl end cache check
+
+LIBS="$LIBS $3"
+if test $tor_cv_library_$1_dir != "(system)"; then
+ TOR_EXTEND_CODEPATH($tor_cv_library_$1_dir)
+fi
+
+if test -z "$CROSS_COMPILE"; then
+ AC_CACHE_CHECK([whether we need extra options to link $1],
+ tor_cv_library_$1_linker_option, [
+ tor_saved_LDFLAGS="$LDFLAGS"
+ tor_trydir="$tor_cv_library_$1_dir"
+ runs=no
+ linked_with=nothing
+ for tor_tryextra in "(none)" "-Wl,-R$tor_trydir" "-R$tor_trydir" \
+ "-Wl,-rpath,$le_libdir" ; do
+ if test "$tor_tryextra" = "(none)"; then
+ LDFLAGS="$saved_LDFLAGS"
+ else
+ LDFLAGS="$tor_tryextra $saved_LDFLAGS"
+ fi
+ AC_RUN_IFELSE(AC_LANG_PROGRAM([$5], [$6]),
+ [runnable=yes], [runnable=no])
+ if test "$runnable" = yes; then
+ tor_cv_library_$1_linker_option=$tor_tryextra
+ break
+ fi
+ done
+
+ if test "$runnable" = no; then
+ AC_MSG_ERROR([Found linkable $1 in $tor_cv_library_$1_dir, but it does not seem to run, even with -R. Maybe specify another using $7}])
+ fi
+ ]) dnl check for extra options.
+
+ if test "$tor_cv_library_$1_linker_option" != "(none)" ; then
+ LDFLAGS="$tor_cv_library_$1_linker_option $LDFLAGS"
+ fi
+fi # cross-compile
+
+]) dnl end defun
+
+#XXXX Check for right version
+#XXXX accept list of search paths as options