diff -ru vte-0.26.2.orig/configure.in vte-0.26.2/configure.in
--- vte-0.26.2.orig/configure.in	2011-08-17 08:30:55 +0200
+++ vte-0.26.2/configure.in	2011-08-17 08:35:42 +0200
@@ -362,7 +362,11 @@
 	AC_DEFINE(HAVE_RECVMSG,1,[Define if you have the recvmsg function.])
 fi
 AC_CHECK_FUNC(floor,,AC_CHECK_LIB(m,floor,LIBS=["$LIBS -lm"]))
-AC_CHECK_FUNCS([ceil floor])
+dnl if the first check didn't find floor, it caches the "no" value,
+dnl and doesn't recheck. this makes the below check fail always on
+dnl systems with floor in -lm. thus we unset the chached result.
+unset ac_cv_func_floor
+AC_CHECK_FUNCS([ceil floor round])
 
 # Look for tgetent
 
diff -ru vte-0.26.2.orig/src/vte.c vte-0.26.2/src/vte.c
--- vte-0.26.2.orig/src/vte.c	2011-08-17 08:30:58 +0200
+++ vte-0.26.2/src/vte.c	2011-08-17 08:38:09 +0200
@@ -63,6 +63,18 @@
 #include <locale.h>
 #endif
 
+#ifndef HAVE_ROUND
+# if defined(HAVE_CEIL) && defined(HAVE_FLOOR)
+static inline double round(double x) {
+	if(x - floor(x) < 0.5) {
+		return floor(x);
+	} else {
+		return ceil(x);
+	}
+}
+# endif
+#endif
+
 #if GTK_CHECK_VERSION (2, 90, 7)
 #define GDK_KEY(symbol) GDK_KEY_##symbol
 #else
