Index: configure.ac
===================================================================
--- configure.ac	(revision 73819)
+++ configure.ac	(working copy)
@@ -374,6 +374,10 @@
   AST_EXT_LIB_CHECK([CAP], [cap], [cap_from_text], [sys/capability.h])
 fi
 
+# BSD might not have exp2, and/or log2
+AST_EXT_LIB_CHECK([EXP2], [m], [exp2])
+AST_EXT_LIB_CHECK([LOG2], [m], [log2])
+
 GSM_INTERNAL="yes"
 AC_SUBST(GSM_INTERNAL)
 GSM_SYSTEM="yes"
Index: main/ast_expr2.c
===================================================================
--- main/ast_expr2.c	(revision 73819)
+++ main/ast_expr2.c	(working copy)
@@ -160,9 +160,13 @@
 #define FUNC_RINT     rintl
 #define FUNC_TRUNC     truncl
 #define FUNC_EXP       expl
+#ifdef HAVE_EXP2
 #define FUNC_EXP2       exp2l
+#endif
 #define FUNC_LOG       logl
+#ifdef HAVE_LOG2
 #define FUNC_LOG2       log2l
+#endif
 #define FUNC_LOG10       log10l
 #define FUNC_REMAINDER       remainderl
 #else
@@ -185,9 +189,13 @@
 #define FUNC_RINT     rint
 #define FUNC_TRUNC     trunc
 #define FUNC_EXP       exp
+#ifdef HAVE_EXP2
 #define FUNC_EXP2       exp2
+#endif
 #define FUNC_LOG       log
+#ifdef HAVE_LOG2
 #define FUNC_LOG2       log2
+#endif
 #define FUNC_LOG10       log10
 #define FUNC_REMAINDER       remainder
 #endif
@@ -2631,6 +2639,7 @@
 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s);
 				return make_number(0.0);
 			}
+#ifdef HAVE_EXP2
 		} else if (strcmp(funcname->u.s,"EXP2") == 0) {
 			if (arglist && !arglist->right && arglist->val){
 				to_number(arglist->val);
@@ -2640,6 +2649,7 @@
 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s);
 				return make_number(0.0);
 			}
+#endif
 		} else if (strcmp(funcname->u.s,"LOG") == 0) {
 			if (arglist && !arglist->right && arglist->val){
 				to_number(arglist->val);
@@ -2649,6 +2659,7 @@
 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s);
 				return make_number(0.0);
 			}
+#ifdef HAVE_LOG2
 		} else if (strcmp(funcname->u.s,"LOG2") == 0) {
 			if (arglist && !arglist->right && arglist->val){
 				to_number(arglist->val);
@@ -2658,6 +2669,7 @@
 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s);
 				return make_number(0.0);
 			}
+#endif
 		} else if (strcmp(funcname->u.s,"LOG10") == 0) {
 			if (arglist && !arglist->right && arglist->val){
 				to_number(arglist->val);
Index: main/ast_expr2.y
===================================================================
--- main/ast_expr2.y	(revision 73819)
+++ main/ast_expr2.y	(working copy)
@@ -41,9 +41,13 @@
 #define FUNC_RINT     rintl
 #define FUNC_TRUNC     truncl
 #define FUNC_EXP       expl
+#ifdef HAVE_EXP2
 #define FUNC_EXP2       exp2l
+#endif
 #define FUNC_LOG       logl
+#ifdef HAVE_LOG2
 #define FUNC_LOG2       log2l
+#endif
 #define FUNC_LOG10       log10l
 #define FUNC_REMAINDER       remainderl
 #else
@@ -66,9 +70,13 @@
 #define FUNC_RINT     rint
 #define FUNC_TRUNC     trunc
 #define FUNC_EXP       exp
+#ifdef HAVE_EXP2
 #define FUNC_EXP2       exp2
+#endif
 #define FUNC_LOG       log
+#ifdef HAVE_LOG2
 #define FUNC_LOG2       log2
+#endif
 #define FUNC_LOG10       log10
 #define FUNC_REMAINDER       remainder
 #endif
@@ -803,6 +811,7 @@
 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s);
 				return make_number(0.0);
 			}
+#ifdef HAVE_EXP2
 		} else if (strcmp(funcname->u.s,"EXP2") == 0) {
 			if (arglist && !arglist->right && arglist->val){
 				to_number(arglist->val);
@@ -812,6 +821,7 @@
 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s);
 				return make_number(0.0);
 			}
+#endif
 		} else if (strcmp(funcname->u.s,"LOG") == 0) {
 			if (arglist && !arglist->right && arglist->val){
 				to_number(arglist->val);
@@ -821,6 +831,7 @@
 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s);
 				return make_number(0.0);
 			}
+#ifdef HAVE_LOG2
 		} else if (strcmp(funcname->u.s,"LOG2") == 0) {
 			if (arglist && !arglist->right && arglist->val){
 				to_number(arglist->val);
@@ -830,6 +841,7 @@
 				ast_log(LOG_WARNING,"Wrong args to %s() function\n",funcname->u.s);
 				return make_number(0.0);
 			}
+#endif
 		} else if (strcmp(funcname->u.s,"LOG10") == 0) {
 			if (arglist && !arglist->right && arglist->val){
 				to_number(arglist->val);
