diff --git a/configure.in b/configure.in
index b05e935343c3b16d7a76fb6f7e0239cb0201bba4..d1b7c4441ce6e83aaf37346f37970ccc6ad495fe 100644
--- a/configure.in
+++ b/configure.in
@@ -279,7 +279,7 @@ fi
 
 AC_C_BIGENDIAN
 
-AC_SEARCH_LIBS(socket, [socket])
+AC_SEARCH_LIBS(socket, [socket network])
 AC_SEARCH_LIBS(gethostbyname, [nsl])
 AC_SEARCH_LIBS(dlopen, [dl])
 AC_SEARCH_LIBS(inet_aton, [resolv])
@@ -482,6 +482,20 @@ if test "$enable_bufferevents" = "yes"; then
 fi
 AC_SUBST(TOR_LIBEVENT_LIBS)
 
+dnl ------------------------------------------------------
+dnl Where do you live, libm?
+
+dnl On some platforms (Haiku/BeOS) the math library is
+dnl part of libroot. In which case don't link against lm
+TOR_LIB_MATH=""
+save_LIBS="$LIBS"
+AC_SEARCH_LIBS(cos, [m], , AC_MSG_ERROR([Could not find libm and libcore does not provide the functions.]))
+if test "$ac_cv_search_cos" != "none required"; then
+    TOR_LIB_MATH="$ac_cv_search_cos"
+fi
+LIBS="$save_LIBS"
+AC_SUBST(TOR_LIB_MATH)
+
 dnl ------------------------------------------------------
 dnl Where do you live, openssl?  And how do we call you?
 
diff --git a/src/or/Makefile.am b/src/or/Makefile.am
index a5682081ae1fe4e6e85991dc6c8d949764dc1253..57f5dd65e4d70c5edec2b8987b72c0a1505870d2 100644
--- a/src/or/Makefile.am
+++ b/src/or/Makefile.am
@@ -74,7 +74,7 @@ AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
 tor_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ @TOR_LDFLAGS_libevent@
 tor_LDADD = ./libtor.a ../common/libor.a ../common/libor-crypto.a \
 	../common/libor-event.a \
-	@TOR_ZLIB_LIBS@ -lm @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
+	@TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
 	@TOR_LIB_WS32@ @TOR_LIB_GDI@
 
 noinst_HEADERS = \
diff --git a/src/test/Makefile.am b/src/test/Makefile.am
index 73de300719cd1b783ff6049a4c98c0a47363e21b..e766446d3a681229a133723cd962b6bca12dc3e8 100644
--- a/src/test/Makefile.am
+++ b/src/test/Makefile.am
@@ -31,15 +31,15 @@ test_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
         @TOR_LDFLAGS_libevent@
 test_LDADD = ../or/libtor.a ../common/libor.a ../common/libor-crypto.a \
 	../common/libor-event.a \
-	@TOR_ZLIB_LIBS@ -lm @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
-	@TOR_LIB_WS32@ @TOR_LIB_GDI@
+	@TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \ 
+	@TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@
 
 bench_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
         @TOR_LDFLAGS_libevent@
 bench_LDADD = ../or/libtor.a ../common/libor.a ../common/libor-crypto.a \
 	../common/libor-event.a \
-	@TOR_ZLIB_LIBS@ -lm @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
-	@TOR_LIB_WS32@ @TOR_LIB_GDI@
+	@TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
+	@TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@
 
 noinst_HEADERS = \
 	tinytest.h \
diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am
index a9a619757a43b227d97212d61c8be9602b187208..35b0a41f53648c0ab3c0d2c5281c853a15d7e991 100644
--- a/src/tools/Makefile.am
+++ b/src/tools/Makefile.am
@@ -3,17 +3,19 @@ noinst_PROGRAMS =  tor-checkkey
 
 tor_resolve_SOURCES = tor-resolve.c
 tor_resolve_LDFLAGS =
-tor_resolve_LDADD = ../common/libor.a -lm @TOR_LIB_WS32@
+tor_resolve_LDADD = ../common/libor.a @TOR_LIB_MATH@ @TOR_LIB_WS32@
 
 tor_gencert_SOURCES = tor-gencert.c
 tor_gencert_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
 tor_gencert_LDADD = ../common/libor.a ../common/libor-crypto.a \
-        -lm @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@
+        @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
+        @TOR_LIB_WS32@ @TOR_LIB_GDI@
 
 tor_checkkey_SOURCES = tor-checkkey.c
 tor_checkkey_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
 tor_checkkey_LDADD = ../common/libor.a ../common/libor-crypto.a \
-        -lm @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@
+        @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
+        @TOR_LIB_WS32@ @TOR_LIB_GDI@
 
 SUBDIRS =      tor-fw-helper
 DIST_SUBDIRS = tor-fw-helper