diff --git a/jni/pjproject-android/.svn/pristine/54/54c30d18592b1c9c13fdd45672715ac02be9b7db.svn-base b/jni/pjproject-android/.svn/pristine/54/54c30d18592b1c9c13fdd45672715ac02be9b7db.svn-base
new file mode 100644
index 0000000..a6d6250
--- /dev/null
+++ b/jni/pjproject-android/.svn/pristine/54/54c30d18592b1c9c13fdd45672715ac02be9b7db.svn-base
@@ -0,0 +1,1569 @@
+AC_INIT(pjproject,2.x)
+
+host_orig="$host"
+
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+AC_CONFIG_HEADER([pjlib/include/pj/compat/os_auto.h
+		  pjlib/include/pj/compat/m_auto.h
+		  pjmedia/include/pjmedia/config_auto.h
+		  pjmedia/include/pjmedia-codec/config_auto.h
+		  pjsip/include/pjsip/sip_autoconf.h
+		 ])
+AC_CONFIG_FILES([build.mak 
+		 build/os-auto.mak 
+		 build/cc-auto.mak
+		 pjlib/build/os-auto.mak 
+		 pjlib-util/build/os-auto.mak 
+		 pjmedia/build/os-auto.mak
+		 pjsip/build/os-auto.mak
+		 third_party/build/os-auto.mak
+		 third_party/build/portaudio/os-auto.mak 
+		 ])
+
+
+dnl
+dnl Setup default CFLAGS
+dnl
+if test "$CFLAGS" = ""; then
+  CFLAGS="-O2"
+else
+  CFLAGS="$CFLAGS"
+fi
+
+CXXFLAGS="$CFLAGS $CXXFLAGS"
+
+dnl #
+dnl # Configure tools
+dnl #
+AC_PROG_CC
+AC_PROG_CXX
+AC_LANG_C
+
+dnl #
+dnl # Setup CROSS_COMPILE variable
+dnl #
+if test -z "$CROSS_COMPILE"; then 
+    CROSS_COMPILE=`echo ${CC} | sed 's/gcc//'`
+fi
+
+if test "$AR" = ""; then AR="${CROSS_COMPILE}ar rv"; fi
+AC_SUBST(AR)
+if test "$LD" = ""; then LD="$CC"; fi
+AC_SUBST(LD)
+if test "$LDOUT" = ""; then LDOUT="-o "; fi
+AC_SUBST(LDOUT)
+if test "$RANLIB" = ""; then RANLIB="${CROSS_COMPILE}ranlib"; fi
+AC_SUBST(RANLIB)
+if test "$OBJEXT" = ""; then OBJEXT='o'; fi
+AC_SUBST(OBJEXT)
+if test "$LIBEXT" = ""; then LIBEXT='a'; fi
+AC_SUBST(LIBEXT)
+if test "$LIBEXT2" = ""; then LIBEXT2=""; fi
+AC_SUBST(LIBEXT2)
+if test "$CC_OUT" = ""; then CC_OUT="-o "; fi
+AC_SUBST(CC_OUT)
+if test "$CC_INC" = ""; then CC_INC="-I"; fi
+AC_SUBST(CC_INC)
+if test "$CC_DEF" = ""; then CC_DEF="-D"; fi
+AC_SUBST(CC_DEF)
+if test "$CC_OPTIMIZE" = ""; then CC_OPTIMIZE="-O2"; fi
+AC_SUBST(CC_OPTIMIZE)
+if test "$CC_CFLAGS" = ""; then CC_CFLAGS="-Wall"; fi
+AC_SUBST(CC_CFLAGS)
+
+
+
+AC_SUBST(ac_pjdir)
+AC_SUBST(ac_build_mak_vars)
+
+case $host in 
+    *mingw* | *cygw* | *win32* | *w32* )
+	if pwd -W 2&> /dev/null; then
+	   ac_pjdir=`pwd -W`
+	else
+	   # We're probably cross-compiling mingw on Linux
+	   ac_pjdir=`pwd`
+	fi
+	;;
+    *)
+	ac_pjdir=`pwd`
+	;;
+esac
+
+AC_SUBST(ac_shlib_suffix)
+case $target in
+    *mingw* | *cygw* | *win32* | *w32* )
+	ac_shlib_suffix=dll
+	;;
+    *darwin*)
+	ac_shlib_suffix=dylib
+	;;
+    *)
+	ac_shlib_suffix=so
+	;;
+esac
+
+AC_SUBST(ac_cross_compile)
+if test "$build" = "$host"; then
+    ac_cross_compile=
+else
+    ac_cross_compile=${host_orig}-
+fi
+
+AC_CHECK_LIB(pthread,pthread_create)
+AC_CHECK_LIB(wsock32,puts)
+AC_CHECK_LIB(ws2_32,puts)
+AC_CHECK_LIB(ole32,puts)
+AC_CHECK_LIB(winmm,puts)
+AC_CHECK_LIB(socket,puts)
+AC_CHECK_LIB(rt,puts)
+AC_CHECK_LIB(nsl,puts)
+AC_CHECK_LIB(uuid,uuid_generate)
+AC_CHECK_LIB(uuid,uuid_generate,[ac_has_uuid_lib=1])
+
+AC_MSG_RESULT([Setting PJ_M_NAME to $target_cpu])
+AC_DEFINE_UNQUOTED(PJ_M_NAME,["$target_cpu"])
+
+dnl
+dnl Memory alignment detection
+dnl
+AC_MSG_CHECKING([memory alignment])
+case $target in
+    sparc64-* | ia64-* | x86_64-* )
+	AC_DEFINE(PJ_POOL_ALIGNMENT, 8)
+	AC_MSG_RESULT([8 bytes])
+	;;
+    * )
+	AC_DEFINE(PJ_POOL_ALIGNMENT, 4)
+	AC_MSG_RESULT([4 bytes (default)])
+	;;
+esac
+
+
+dnl
+dnl Endianness detection
+dnl
+AC_C_BIGENDIAN
+
+if test "x$ac_cv_c_bigendian" = "xyes"; then
+  CFLAGS="$CFLAGS -DPJ_IS_BIG_ENDIAN=1 -DPJ_IS_LITTLE_ENDIAN=0"
+else
+  CFLAGS="$CFLAGS -DPJ_IS_BIG_ENDIAN=0 -DPJ_IS_LITTLE_ENDIAN=1"
+fi
+
+dnl
+dnl Legacy macros
+dnl
+case $target in
+    *android*)
+	AC_DEFINE(PJ_ANDROID,1)
+	;;
+    *mingw* | *cygw* | *win32* | *w32* )
+	AC_DEFINE(PJ_WIN32,1)
+	AC_DEFINE(PJ_WIN32_WINNT,0x0400)
+	AC_DEFINE(WIN32_LEAN_AND_MEAN)
+	;;
+    *darwin*)
+	AC_DEFINE(PJ_DARWINOS,1)
+	;;
+    *linux*)
+	AC_DEFINE(PJ_LINUX,1)
+	;;
+    *rtems*)
+	AC_DEFINE(PJ_RTEMS,1)
+	;;
+    *sunos* | *solaris* )
+	AC_DEFINE(PJ_SUNOS,1)
+	;;
+    *)
+	;;
+esac
+
+
+
+
+dnl # --disable-floating-point option
+AC_ARG_ENABLE(floating-point,
+	      AC_HELP_STRING([--disable-floating-point],
+			     [Disable floating point where possible]),
+	      [if test "$enable_floating_point" = "no"; then
+		AC_DEFINE(PJ_HAS_FLOATING_POINT,0)
+		AC_MSG_RESULT([Checking if floating point is disabled... yes])
+	       fi],
+	      [
+		AC_DEFINE(PJ_HAS_FLOATING_POINT,1)
+	        AC_MSG_RESULT([Checking if floating point is disabled... no]) 
+		AC_CHECK_LIB(m,fmod)
+	      ])
+
+
+AC_CHECK_HEADER(arpa/inet.h,[AC_DEFINE(PJ_HAS_ARPA_INET_H,1)])
+AC_CHECK_HEADER(assert.h,[AC_DEFINE(PJ_HAS_ASSERT_H,1)])
+AC_CHECK_HEADER(ctype.h,[AC_DEFINE(PJ_HAS_CTYPE_H,1)])
+
+case $target in
+    *mingw* | *cygw* | *win32* | *w32* )
+	AC_DEFINE(PJ_HAS_ERRNO_H,0)
+	;;
+    *)
+	AC_CHECK_HEADER(errno.h,[AC_DEFINE(PJ_HAS_ERRNO_H,1)])
+	;;
+esac
+
+AC_CHECK_HEADER(fcntl.h,[AC_DEFINE(PJ_HAS_FCNTL_H,1)])
+AC_CHECK_HEADER(linux/socket.h,[AC_DEFINE(PJ_HAS_LINUX_SOCKET_H,1)])
+AC_CHECK_HEADER(limits.h,[AC_DEFINE(PJ_HAS_LIMITS_H,1)])
+AC_CHECK_HEADER(malloc.h,[AC_DEFINE(PJ_HAS_MALLOC_H,1)])
+AC_CHECK_HEADER(netdb.h,[AC_DEFINE(PJ_HAS_NETDB_H,1)])
+AC_CHECK_HEADER(netinet/in_systm.h,[AC_DEFINE(PJ_HAS_NETINET_IN_SYSTM_H,1)])
+AC_CHECK_HEADER(netinet/in.h,[AC_DEFINE(PJ_HAS_NETINET_IN_H,1)])
+AC_CHECK_HEADER(netinet/ip.h,[AC_DEFINE(PJ_HAS_NETINET_IP_H,1)],[],
+		 [#if PJ_HAS_SYS_TYPES_H
+          	  #	include <sys/types.h>
+          	  #endif
+		  #if PJ_HAS_NETINET_IN_SYSTM_H
+          	  #	include <netinet/in_systm.h>
+          	  #endif
+		  #if PJ_HAS_NETINET_IN_H
+          	  #	include <netinet/in.h>
+          	  #endif
+          	 ])
+AC_CHECK_HEADER(netinet/tcp.h,[AC_DEFINE(PJ_HAS_NETINET_TCP_H,1)])
+AC_CHECK_HEADER(ifaddrs.h,
+		[AC_CHECK_FUNC(getifaddrs,[AC_DEFINE(PJ_HAS_IFADDRS_H,1)])])
+AC_CHECK_HEADER(semaphore.h,[AC_DEFINE(PJ_HAS_SEMAPHORE_H,1)])
+AC_CHECK_HEADER(setjmp.h,[AC_DEFINE(PJ_HAS_SETJMP_H,1)])
+AC_CHECK_HEADER(stdarg.h,[AC_DEFINE(PJ_HAS_STDARG_H,1)])
+AC_CHECK_HEADER(stddef.h,[AC_DEFINE(PJ_HAS_STDDEF_H,1)])
+AC_CHECK_HEADER(stdio.h,[AC_DEFINE(PJ_HAS_STDIO_H,1)])
+AC_CHECK_HEADER(stdint.h,[AC_DEFINE(PJ_HAS_STDINT_H,1)])
+AC_CHECK_HEADER(stdlib.h,[AC_DEFINE(PJ_HAS_STDLIB_H,1)])
+AC_CHECK_HEADER(string.h,[AC_DEFINE(PJ_HAS_STRING_H,1)])
+AC_CHECK_HEADER(sys/ioctl.h,[AC_DEFINE(PJ_HAS_SYS_IOCTL_H,1)])
+AC_CHECK_HEADER(sys/select.h,[AC_DEFINE(PJ_HAS_SYS_SELECT_H,1)])
+AC_CHECK_HEADER(sys/socket.h,[AC_DEFINE(PJ_HAS_SYS_SOCKET_H,1)])
+AC_CHECK_HEADER(sys/time.h,[AC_DEFINE(PJ_HAS_SYS_TIME_H,1)])
+AC_CHECK_HEADER(sys/timeb.h,[AC_DEFINE(PJ_HAS_SYS_TIMEB_H,1)])
+AC_CHECK_HEADER(sys/types.h,[AC_DEFINE(PJ_HAS_SYS_TYPES_H,1)])
+AC_CHECK_HEADER(sys/filio.h,[AC_DEFINE(PJ_HAS_SYS_FILIO_H,1)])
+AC_CHECK_HEADER(sys/sockio.h,[AC_DEFINE(PJ_HAS_SYS_SOCKIO_H,1)])
+AC_CHECK_HEADER(sys/utsname.h,[AC_DEFINE(PJ_HAS_SYS_UTSNAME_H,1)])
+AC_CHECK_HEADER(time.h,[AC_DEFINE(PJ_HAS_TIME_H,1)])
+AC_CHECK_HEADER(unistd.h,[AC_DEFINE(PJ_HAS_UNISTD_H,1)])
+AC_CHECK_HEADER(winsock.h,[AC_DEFINE(PJ_HAS_WINSOCK_H,1)])
+AC_CHECK_HEADER(winsock2.h,[AC_DEFINE(PJ_HAS_WINSOCK2_H,1)])
+AC_CHECK_HEADER(mswsock.h,[AC_DEFINE(PJ_HAS_MSWSOCK_H,1)],[],
+		 [#if PJ_HAS_WINSOCK2_H
+          	  #	include <winsock2.h>
+		  #elif PJ_HAS_WINSOCK_H
+          	  #	include <winsock.h>
+          	  #endif
+          	 ])
+AC_CHECK_HEADER(ws2tcpip.h,[AC_DEFINE(PJ_HAS_WS2TCPIP_H,1)])
+AC_CHECK_HEADER(uuid/uuid.h,[ac_has_uuid_h=1])
+AC_CHECK_HEADER(net/if.h,[AC_DEFINE(PJ_HAS_NET_IF_H,1)],[],
+		 [#if PJ_HAS_SYS_TYPES_H
+          	  #	include <sys/types.h>
+          	  #endif
+		  #if PJ_HAS_SYS_SOCKET_H
+
+          	  #	include <sys/socket.h>
+          	  #endif
+          	 ])
+AC_MSG_RESULT([Setting PJ_OS_NAME to $target])
+AC_DEFINE_UNQUOTED(PJ_OS_NAME,["$target"])
+
+AC_MSG_RESULT([Setting PJ_HAS_ERRNO_VAR to 1])
+AC_DEFINE(PJ_HAS_ERRNO_VAR,1)
+
+AC_MSG_RESULT([Setting PJ_HAS_HIGH_RES_TIMER to 1])
+AC_DEFINE(PJ_HAS_HIGH_RES_TIMER,1)
+
+AC_MSG_RESULT([Setting PJ_HAS_MALLOC to 1])
+AC_DEFINE(PJ_HAS_MALLOC,1)
+
+AC_MSG_RESULT([Setting PJ_NATIVE_STRING_IS_UNICODE to 0])
+AC_DEFINE(PJ_NATIVE_STRING_IS_UNICODE,0)
+
+AC_MSG_RESULT([Setting PJ_ATOMIC_VALUE_TYPE to long])
+AC_DEFINE(PJ_ATOMIC_VALUE_TYPE,long)
+
+dnl # Determine if inet_aton() is available
+AC_MSG_CHECKING([if inet_aton() is available])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+				     #include <sys/socket.h>
+				     #include <arpa/inet.h>]],
+		    		  [inet_aton(0, 0);])],
+		  [AC_DEFINE(PJ_SOCK_HAS_INET_ATON,1)
+		   AC_MSG_RESULT(yes)],
+		  [AC_MSG_RESULT(no)])
+
+dnl # Determine if inet_pton() is available
+AC_MSG_CHECKING([if inet_pton() is available])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+				     #include <sys/socket.h>
+				     #include <arpa/inet.h>]],
+		    		  [inet_pton(0, 0, 0);])],
+		  [AC_DEFINE(PJ_SOCK_HAS_INET_PTON,1)
+		   AC_MSG_RESULT(yes)],
+		  [AC_MSG_RESULT(no)])
+
+dnl # Determine if inet_ntop() is available
+AC_MSG_CHECKING([if inet_ntop() is available])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+				     #include <sys/socket.h>
+				     #include <arpa/inet.h>]],
+		    		  [inet_ntop(0, 0, 0, 0);])],
+		  [AC_DEFINE(PJ_SOCK_HAS_INET_NTOP,1)
+		   AC_MSG_RESULT(yes)],
+		  [AC_MSG_RESULT(no)])
+
+dnl # Determine if getaddrinfo() is available
+AC_MSG_CHECKING([if getaddrinfo() is available])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+				     #include <sys/socket.h>
+				     #include <netdb.h>]],
+		    		  [getaddrinfo(0, 0, 0, 0);])],
+		  [AC_DEFINE(PJ_SOCK_HAS_GETADDRINFO,1)
+		   AC_MSG_RESULT(yes)],
+		  [AC_MSG_RESULT(no)])
+
+dnl # Determine if sockaddr_in has sin_len member
+AC_MSG_CHECKING([if sockaddr_in has sin_len member])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+				     #include <sys/socket.h>
+		    		     #include <netinet/in.h>
+		    		     #include <arpa/inet.h>]],
+		    		  [struct sockaddr_in a; a.sin_len=0;])],
+		  [AC_DEFINE(PJ_SOCKADDR_HAS_LEN,1)
+		   AC_MSG_RESULT(yes)],
+		  AC_MSG_RESULT(no))
+
+dnl # Determine if socklen_t is available
+AC_MSG_CHECKING([if socklen_t is available])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+                                     #include <sys/socket.h>]],
+		    		   [socklen_t xxx = 0;])],
+		  [AC_DEFINE(PJ_HAS_SOCKLEN_T,1)
+		   AC_MSG_RESULT(yes)],
+		  AC_MSG_RESULT(no))
+
+dnl # Determine if SO_ERROR is available
+AC_MSG_CHECKING([if SO_ERROR is available])
+case $target in
+    *mingw* | *cygw* | *win32* | *w32* )
+	AC_DEFINE(PJ_HAS_SO_ERROR,1)
+	AC_MSG_RESULT(yes)
+	;;
+    *)
+	AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
+					     #include <sys/socket.h>
+					     #include <netinet/in.h>
+					     #include <arpa/inet.h>]],
+					  [int i=SO_ERROR;])],
+			  [AC_DEFINE(PJ_HAS_SO_ERROR,1)
+			   AC_MSG_RESULT(yes)],
+			  AC_MSG_RESULT(no))
+	;;
+esac
+
+
+dnl # Determine if RW-mutex is available
+AC_MSG_CHECKING([if pthread_rwlock_t is available])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+		    		   [pthread_rwlock_t *x;])],
+		  [AC_DEFINE(PJ_EMULATE_RWMUTEX,0)
+		   ac_rwmutex="yes"
+  		   AC_MSG_RESULT(yes)],
+		  [AC_DEFINE(PJ_EMULATE_RWMUTEX,1)
+		   ac_rwmutex="no"
+		   AC_MSG_RESULT(no)])
+
+dnl # If rwmutex is not detected, check again but this time
+dnl # with _POSIX_READER_WRITER_LOCKS defined (newlib needs this)
+if test "$ac_rwmutex" = "no"; then
+    AC_MSG_CHECKING([if pthread_rwlock_t is available with _POSIX_READER_WRITER_LOCKS])
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define _POSIX_READER_WRITER_LOCKS
+					 #include <pthread.h>]],
+				       [pthread_rwlock_t *x;])],
+		      [AC_DEFINE(PJ_EMULATE_RWMUTEX,0)
+		       CFLAGS="$CFLAGS -D_POSIX_THREADS -D_POSIX_READER_WRITER_LOCKS"
+		       AC_MSG_RESULT(yes)],
+		      [AC_DEFINE(PJ_EMULATE_RWMUTEX,1)
+		       AC_MSG_RESULT(no)])
+fi
+
+dnl # Do we have pthread_mutexattr_settype()?
+AC_MSG_CHECKING([if pthread_mutexattr_settype() is available])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+		    		   [pthread_mutexattr_settype(0,PTHREAD_MUTEX_FAST_NP);])],
+		  [AC_DEFINE(PJ_HAS_PTHREAD_MUTEXATTR_SETTYPE,1)
+  		   AC_MSG_RESULT(yes)],
+		  [AC_MSG_RESULT(no)])
+
+dnl # Does pthread_mutexattr_t has "recursive" member?
+AC_MSG_CHECKING([if pthread_mutexattr_t has recursive member])
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+		    		   [[pthread_mutexattr_t attr;
+				     attr.recursive=1;]])],
+		  [AC_DEFINE(PJ_PTHREAD_MUTEXATTR_T_HAS_RECURSIVE,1)
+  		   AC_MSG_RESULT(yes)],
+		  [AC_MSG_RESULT(no)])
+
+dnl ######################
+dnl # ioqueue selection
+dnl # 
+AC_SUBST(ac_os_objs)
+AC_MSG_CHECKING([ioqueue backend])
+AC_ARG_ENABLE(epoll,
+	      AC_HELP_STRING([--enable-epoll],
+			     [Use /dev/epoll ioqueue on Linux (experimental)]),
+	      [
+		ac_os_objs=ioqueue_epoll.o
+		AC_MSG_RESULT([/dev/epoll])
+	      ],
+	      [
+		ac_os_objs=ioqueue_select.o
+	        AC_MSG_RESULT([select()]) 
+	      ])
+
+
+dnl ######################
+dnl # OS specific files
+dnl #
+case $target in
+  *mingw* | *cygw* | *win32* | *w32* )
+	ac_os_objs="$ac_os_objs file_access_win32.o file_io_win32.o os_core_win32.o os_error_win32.o os_time_win32.o os_timestamp_win32.o guid_win32.o"
+	;;
+  *)
+	ac_os_objs="$ac_os_objs file_access_unistd.o file_io_ansi.o os_core_unix.o os_error_unix.o os_time_unix.o os_timestamp_posix.o"
+	case $target in
+	  arm-apple-darwin*)
+		ac_os_objs="$ac_os_objs os_info_iphone.o"
+		;;
+	esac
+	# UUID
+	if test "$ac_has_uuid_lib" = "1" -a "$ac_has_uuid_h" = "1"; then
+		ac_os_objs="$ac_os_objs guid_uuid.o"
+	else
+		ac_os_objs="$ac_os_objs guid_simple.o"
+	fi
+	;;
+esac
+
+case $target in
+  *darwin*)
+	ac_os_objs="$ac_os_objs os_core_darwin.o"
+	;;
+esac
+
+dnl ##########################################
+dnl #
+dnl # PJMEDIA
+dnl #
+
+dnl # Use external Speex installation
+AC_SUBST(ac_external_speex,0)
+AC_ARG_WITH(external-speex,
+    AC_HELP_STRING([--with-external-speex],
+		   [Use external Speex development files, not the one in "third_party" directory. When this option is set, make sure that Speex is accessible to use (hint: use CFLAGS and LDFLAGS env var to set the include/lib paths)]),
+    [
+	if test "x$with_external_speex" != "xno"; then
+		# Test Speex installation
+		AC_MSG_CHECKING([if external Speex devkit is installed])
+		AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <speex/speex.h>
+						     #include <speex/speex_echo.h>
+						     ]],
+						  [speex_echo_state_init(0, 0); speex_encoder_init(0); ])],
+				  [AC_MSG_RESULT(yes!!)
+				   AC_DEFINE(PJMEDIA_EXTERNAL_SPEEX_CODEC, 1)
+				   ac_external_speex="1"
+				   ],
+				  [AC_MSG_ERROR([Unable to use external Speex library. If Speex development files are not available in the default locations, use CFLAGS and LDFLAGS env var to set the include/lib paths])])
+	fi
+    ]
+    )
+
+dnl # Use external GSM codec library installation
+AC_SUBST(ac_external_gsm,0)
+AC_ARG_WITH(external-gsm,
+    AC_HELP_STRING([--with-external-gsm],
+		   [Use external GSM codec library, not the one in "third_party" directory. When this option is set, make sure that the GSM include/lib files are accessible to use (hint: use CFLAGS and LDFLAGS env var to set the include/lib paths)]),
+    [
+	if test "x$with_external_gsm" != "xno"; then
+                # Test GSM library installation
+                AC_MSG_CHECKING([if external GSM devkit is installed as gsm/gsm.h])
+                AC_COMPILE_IFELSE(
+                    [AC_LANG_PROGRAM([[#include <gsm/gsm.h> ]], [gsm_create(); ]) ],
+                    [AC_MSG_RESULT(yes!!)
+                     AC_DEFINE(PJMEDIA_EXTERNAL_GSM_CODEC, 1)
+                     AC_DEFINE(PJMEDIA_EXTERNAL_GSM_GSM_H, 1)
+                     ac_external_gsm="1"
+                    ],
+                    [
+                     AC_MSG_RESULT(no)
+                     AC_MSG_CHECKING([if external GSM devkit is installed as gsm.h])
+                     AC_COMPILE_IFELSE(
+                        [AC_LANG_PROGRAM([[#include <gsm.h> ]], [gsm_create(); ]) ],
+                        [AC_MSG_RESULT(yes!!)
+                         AC_DEFINE(PJMEDIA_EXTERNAL_GSM_CODEC, 1)
+                         AC_DEFINE(PJMEDIA_EXTERNAL_GSM_H, 1)
+                         ac_external_gsm="1"
+                        ],
+                        [AC_MSG_ERROR([Unable to use external GSM library. If GSM development files are not available in the default locations, use CFLAGS and LDFLAGS env var to set the include/lib paths])
+                        ]
+                     )
+                    ]
+                )
+	fi
+    ]
+    )
+
+
+
+dnl # Sound device backend selection
+AC_SUBST(ac_pjmedia_snd)
+AC_ARG_ENABLE(sound,
+	      AC_HELP_STRING([--disable-sound],
+			     [Exclude sound (i.e. use null sound)]),
+	      [if test "$enable_sound" = "no"; then
+		[ac_pjmedia_snd=null]
+		AC_MSG_RESULT([Checking if sound is disabled... yes])
+	       fi]
+	      )
+
+dnl # Use external PortAudio installation
+AC_SUBST(ac_external_pa,0)
+AC_ARG_WITH(external-pa,
+    AC_HELP_STRING([--with-external-pa],
+		   [Use external PortAudio development files, not the one in "third_party" directory. When this option is set, make sure that PortAudio is accessible to use (hint: use CFLAGS and LDFLAGS env var to set the include/lib paths)]),
+    [
+	if test "x$with_external_pa" != "xno"; then
+		# Test PortAudio installation
+		AC_MSG_CHECKING([if external PortAudio devkit is installed])
+		AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <portaudio.h>
+						     ]],
+						  [Pa_Initialize();])],
+				  [AC_MSG_RESULT(yes!!)
+				   ac_external_pa="1"
+				   ],
+				  [AC_MSG_ERROR([Unable to use PortAudio. If PortAudio development files are not available in the default locations, use CFLAGS and LDFLAGS env var to set the include/lib paths])])
+	fi
+    ]
+    )
+
+AC_SUBST(ac_pa_cflags)
+AC_CHECK_HEADER(sys/soundcard.h,
+	 	[ac_pa_cflags="$ac_pa_cflags -DHAVE_SYS_SOUNDCARD_H"])
+AC_CHECK_HEADER(linux/soundcard.h,
+	 	[ac_pa_cflags="$ac_pa_cflags -DHAVE_LINUX_SOUNDCARD_H"])
+AC_CHECK_HEADER(machine/soundcard.h,
+	 	[ac_pa_cflags="$ac_pa_cflags -DHAVE_MACHINE_SOUNDCARD_H"])
+
+if test "x$ac_cv_c_bigendian" = "xyes"; then
+  ac_pa_cflags="$ac_pa_cflags -DPA_BIG_ENDIAN"
+else
+  ac_pa_cflags="$ac_pa_cflags -DPA_LITTLE_ENDIAN"
+fi
+
+if test "$enable_sound" = "no"; then
+  true;
+else
+ case $target in
+  *android*)
+	LIBS="$LIBS -lOpenSLES"
+	AC_MSG_RESULT([Checking sound device backend... OpenSL ES])
+	;;
+  arm-apple-darwin*)
+	LIBS="$LIBS -framework CoreAudio -framework CoreFoundation -framework AudioToolbox -framework CFNetwork -framework UIKit"
+	AC_MSG_RESULT([Checking sound device backend... AudioUnit])
+	;;
+  *darwin*)
+	LIBS="$LIBS -framework CoreAudio -framework CoreServices -framework AudioUnit -framework AudioToolbox"
+	if test "`uname -r`" = "6.8"; then
+		#ac_pa_cflags="$ac_pa_cflags -DPA_OLD_CORE_AUDIO -DMOSX_USE_NON_ATOMIC_FLAG_BITS"
+		#AC_MSG_RESULT([Setting additional PortAudio CFLAGS.. -DPA_OLD_CORE_AUDIO -DMOSX_USE_NON_ATOMIC_FLAG_BITS])
+		ac_pjmedia_snd=pa_old_darwinos
+		AC_MSG_RESULT([Checking sound device backend... old coreaudio])
+	else
+		ac_pjmedia_snd=pa_darwinos
+		AC_MSG_RESULT([Checking sound device backend... coreaudio])
+	fi
+	;;
+  *cygwin* | *mingw*)
+	ac_pjmedia_snd=pa_win32
+	AC_MSG_RESULT([Checking sound device backend... win32 sound])
+	;;
+  *rtems*)
+	ac_pjmedia_snd=null
+	AC_MSG_RESULT([Checking sound device backend... null sound])
+	;;
+  *)
+	dnl # Check if ALSA is available
+	ac_pjmedia_snd=pa_unix
+	AC_CHECK_HEADER(alsa/version.h,
+			[AC_SUBST(ac_pa_use_alsa,1)
+			 LIBS="$LIBS -lasound"
+			],
+		        [AC_SUBST(ac_pa_use_alsa,0)])
+	AC_MSG_RESULT([Checking sound device backend... unix])
+
+	dnl # Check if OSS is disabled
+	AC_SUBST(ac_pa_use_oss,1)
+	AC_ARG_ENABLE(oss,
+		      AC_HELP_STRING([--disable-oss],
+				     [Disable OSS audio (default: not disabled)]),
+		      [
+			if test "$enable_oss" = "no"; then
+			 [ac_pa_use_oss=0]
+			 AC_MSG_RESULT([Checking if OSS audio is disabled... yes])
+			fi
+		      ])
+	;;
+ esac
+fi
+
+AC_SUBST(ac_pjmedia_video)
+
+dnl # --disable-video option
+AC_ARG_ENABLE(video,
+	      AC_HELP_STRING([--disable-video],
+	      		     [Disable video feature]),
+	      [if test "$enable_video" = "no"; then
+	        #AC_DEFINE(PJMEDIA_HAS_VIDEO,0)
+                AC_MSG_RESULT([Video is disabled]) 
+                enable_sdl="no"
+                enable_ffmpeg="no"
+		enable_v4l2="no"
+               fi],
+	      [])
+
+case $target in
+ *android*)
+	LIBS="$LIBS -llog -lgcc"
+	;;
+ arm-apple-darwin*)
+ 	LIBS="$LIBS -framework UIKit"
+	;;
+ *darwin*)
+ 	LIBS="$LIBS -framework Foundation -framework AppKit"
+	;;
+esac
+
+if test "$enable_video" = "no"; then
+  true;
+else
+ case $target in
+  arm-apple-darwin*)
+	ac_pjmedia_video=iphone_os
+	AC_SUBST(ac_pjmedia_video_has_ios)
+	AC_SUBST(ac_ios_cflags)
+	SAVED_LIBS="$LIBS"
+	LIBS="-framework AVFoundation -framework CoreGraphics -framework QuartzCore -framework CoreVideo -framework CoreMedia"
+	AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [])],[ac_pjmedia_video_has_ios=yes],[ac_pjmedia_video_has_ios=no])
+	LIBS="$SAVED_LIBS"
+	if test "$ac_pjmedia_video_has_ios" = "yes"; then
+	  ac_ios_cflags="-DPJMEDIA_VIDEO_DEV_HAS_IOS=1"
+	  LIBS="$LIBS -framework AVFoundation -framework CoreGraphics -framework QuartzCore -framework CoreVideo -framework CoreMedia"
+	  AC_MSG_RESULT([Checking if AVFoundation framework is available... yes])
+	else
+	  AC_MSG_RESULT([Checking if AVFoundation framework is available... no])
+	fi
+	;;
+  *darwin*)
+	ac_pjmedia_video=mac_os
+	AC_SUBST(ac_pjmedia_video_has_qt)
+	AC_SUBST(ac_qt_cflags)
+	SAVED_LIBS="$LIBS"
+	LIBS="-framework QTKit"
+	AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [])],[ac_pjmedia_video_has_qt=yes],[ac_pjmedia_video_has_qt=no])
+	LIBS="$SAVED_LIBS"
+	if test "$ac_pjmedia_video_has_qt" = "yes"; then
+	  ac_qt_cflags="-DPJMEDIA_VIDEO_DEV_HAS_QT=1"
+	  LIBS="$LIBS -framework QTKit -framework QuartzCore -framework OpenGL"
+	  AC_MSG_RESULT([Checking if QTKit framework is available... yes])
+	else
+	  AC_MSG_RESULT([Checking if QTKit framework is available... no])
+	fi
+	;;
+ esac
+fi
+
+AC_ARG_ENABLE(ext_sound,
+	      AC_HELP_STRING([--enable-ext-sound],
+			     [PJMEDIA will not provide any sound device backend]),
+	      [if test "$enable_ext_sound" = "yes"; then
+		[ac_pjmedia_snd=external]
+		AC_MSG_RESULT([Checking if external sound is set... yes])
+	       fi]
+	      )
+
+dnl # Include resampling small filter
+AC_SUBST(ac_no_small_filter)
+AC_ARG_ENABLE(small-filter,
+	      AC_HELP_STRING([--disable-small-filter],
+			     [Exclude small filter in resampling]),
+	      [if test "$enable_small_filter" = "no"; then
+		[ac_no_small_filter='-DPJMEDIA_HAS_SMALL_FILTER=0']
+		AC_MSG_RESULT([Checking if small filter is disabled... yes])
+	       fi],
+	      AC_MSG_RESULT([Checking if small filter is disabled... no]))
+
+dnl # Include resampling large filter
+AC_SUBST(ac_no_large_filter)
+AC_ARG_ENABLE(large-filter,
+	      AC_HELP_STRING([--disable-large-filter],
+			     [Exclude large filter in resampling]),
+	      [if test "$enable_large_filter" = "no"; then
+		[ac_no_large_filter='-DPJMEDIA_HAS_LARGE_FILTER=0']
+		AC_MSG_RESULT([Checking if large filter is disabled... yes])
+	       fi],
+	      AC_MSG_RESULT([Checking if large filter is disabled... no]))
+
+dnl # Include Speex AEC
+AC_SUBST(ac_no_speex_aec)
+AC_ARG_ENABLE(speex-aec,
+	      AC_HELP_STRING([--disable-speex-aec],
+			     [Exclude Speex Acoustic Echo Canceller/AEC]),
+	      [if test "$enable_speex_aec" = "no"; then
+		[ac_no_speex_aec='-DPJMEDIA_HAS_SPEEX_AEC=0']
+		AC_MSG_RESULT([Checking if Speex AEC is disabled...yes])
+	       fi],
+	      AC_MSG_RESULT([Checking if Speex AEC is disabled...no]))
+
+dnl # Include G711 codec
+AC_SUBST(ac_no_g711_codec)
+AC_ARG_ENABLE(g711-codec,
+	      AC_HELP_STRING([--disable-g711-codec],
+			     [Exclude G.711 codecs from the build]),
+	      [if test "$enable_g711_codec" = "no"; then
+		[ac_no_g711_codec=1]
+		AC_DEFINE(PJMEDIA_HAS_G711_CODEC,0)
+		AC_MSG_RESULT([Checking if G.711 codec is disabled...yes])
+	       fi],
+	      AC_MSG_RESULT([Checking if G.711 codec is disabled...no]))
+
+
+dnl # Include L16 codec
+AC_SUBST(ac_no_l16_codec)
+AC_ARG_ENABLE(l16-codec,
+	      AC_HELP_STRING([--disable-l16-codec],
+			     [Exclude Linear/L16 codec family from the build]),
+	      [if test "$enable_l16_codec" = "no"; then
+		[ac_no_l16_codec=1]
+		AC_DEFINE(PJMEDIA_HAS_L16_CODEC,0)
+		AC_MSG_RESULT([Checking if L16 codecs are disabled...yes])
+	       fi],
+	      AC_MSG_RESULT([Checking if L16 codec is disabled...no]))
+
+
+dnl # Include GSM codec
+AC_SUBST(ac_no_gsm_codec)
+AC_ARG_ENABLE(gsm-codec,
+	      AC_HELP_STRING([--disable-gsm-codec],
+			     [Exclude GSM codec in the build]),
+	      [if test "$enable_gsm_codec" = "no"; then
+		[ac_no_gsm_codec=1]
+		AC_DEFINE(PJMEDIA_HAS_GSM_CODEC,0)
+		AC_MSG_RESULT([Checking if GSM codec is disabled...yes])
+	       fi],
+	      AC_MSG_RESULT([Checking if GSM codec is disabled...no]))
+
+dnl # Include G.722 codec
+AC_SUBST(ac_no_g722_codec)
+AC_ARG_ENABLE(g722-codec,
+	      AC_HELP_STRING([--disable-g722-codec],
+			     [Exclude G.722 codec in the build]),
+	      [if test "$enable_g722_codec" = "no"; then
+		[ac_no_g722_codec=1]
+		AC_DEFINE(PJMEDIA_HAS_G722_CODEC,0)
+		AC_MSG_RESULT([Checking if G.722 codec is disabled...yes])
+	       fi],
+	      AC_MSG_RESULT([Checking if G.722 codec is disabled...no]))
+
+dnl # Include G722.1 codec
+AC_SUBST(ac_no_g7221_codec)
+AC_ARG_ENABLE(g7221-codec,
+	      AC_HELP_STRING([--disable-g7221-codec],
+			     [Exclude G.7221 codec in the build]),
+	      [if test "$enable_g7221_codec" = "no"; then
+		[ac_no_g7221_codec=1]
+		AC_DEFINE(PJMEDIA_HAS_G7221_CODEC,0)
+		AC_MSG_RESULT([Checking if G.722.1 codec is disabled...yes])
+	       fi],
+	      AC_MSG_RESULT([Checking if G.722.1 codec is disabled...no]))
+
+dnl # Include Speex codec
+AC_SUBST(ac_no_speex_codec)
+AC_ARG_ENABLE(speex-codec,
+	      AC_HELP_STRING([--disable-speex-codec],
+			     [Exclude Speex codecs in the build]),
+	      [if test "$enable_speex_codec" = "no"; then
+		[ac_no_speex_codec=1]
+		AC_DEFINE(PJMEDIA_HAS_SPEEX_CODEC,0)
+		AC_MSG_RESULT([Checking if Speex codec is disabled...yes])
+	       fi],
+	      AC_MSG_RESULT([Checking if Speex codec is disabled...no]))
+
+dnl # Include iLBC codec
+AC_SUBST(ac_no_ilbc_codec)
+AC_ARG_ENABLE(ilbc-codec,
+	      AC_HELP_STRING([--disable-ilbc-codec],
+			     [Exclude iLBC codec in the build]),
+	      [if test "$enable_ilbc_codec" = "no"; then
+		[ac_no_ilbc_codec=1]
+		AC_DEFINE(PJMEDIA_HAS_ILBC_CODEC,0)
+		AC_MSG_RESULT([Checking if iLBC codec is disabled...yes])
+	       fi],
+	      AC_MSG_RESULT([Checking if iLBC codec is disabled...no]))
+
+dnl # Include libsamplerate
+AC_ARG_ENABLE(libsamplerate,
+	      AC_HELP_STRING([--enable-libsamplerate],
+			     [Link with libsamplerate when available. Note that PJMEDIA_RESAMPLE_IMP must also be configured]),
+	      [ AC_CHECK_LIB(samplerate,src_new) ],
+	      AC_MSG_RESULT([Skipping libsamplerate detection])
+	     )
+
+dnl # Include libsamplerate
+AC_SUBST(ac_resample_dll)
+AC_ARG_ENABLE(resample_dll,
+	      AC_HELP_STRING([--enable-resample-dll],
+			     [Build libresample as shared library]),
+	      [if test "$enable_resample_dll" = "yes"; then
+		[ac_resample_dll=1]
+		AC_MSG_RESULT([Building libresample as shared library... yes])
+	       fi],
+	      AC_MSG_RESULT([Building libresample as shared library... no])
+	      )
+
+dnl # SDL alt prefix
+AC_ARG_WITH(sdl,
+    AC_HELP_STRING([--with-sdl=DIR],
+		   [Specify alternate libSDL prefix]),
+    [],
+    [with_sdl=no]
+    )
+
+dnl # Do not use default SDL installation if we are cross-compiling
+if test "x$ac_cross_compile" != "x" -a "x$with_sdl" = "xno"; then
+    enable_sdl=no
+fi
+
+dnl # SDL
+AC_ARG_ENABLE(sdl,
+	      AC_HELP_STRING([--disable-sdl],
+			     [Disable SDL (default: not disabled)]),
+	      [
+		if test "$enable_sdl" = "no"; then
+		  AC_MSG_RESULT([Checking if SDL is disabled... yes])
+		fi
+	      ],
+	      [
+		  if test "x$with_sdl" != "xno" -a "x$with_sdl" != "x"; then
+			AC_MSG_RESULT([Using SDL prefix... $with_sdl])
+			AC_PATH_PROGS(SDL_CONFIG,sdl2-config sdl-config,,$with_sdl/bin)
+                  else
+			AC_PATH_PROGS(SDL_CONFIG, sdl2-config sdl-config)
+		  fi
+		  
+		  AC_MSG_CHECKING([SDL availability])
+		  if test "x$SDL_CONFIG" = "x"; then
+			AC_MSG_RESULT([not found])
+		  elif (sh -c "$SDL_CONFIG --version" | grep -e '^1\.3' -e '^2\.') then
+			AC_SUBST(ac_sdl_cflags)
+			AC_SUBST(ac_sdl_ldflags)
+			ac_sdl_cflags=`$SDL_CONFIG --cflags`
+			ac_sdl_cflags="-DPJMEDIA_VIDEO_DEV_HAS_SDL=1 $ac_sdl_cflags"
+			ac_sdl_ldflags=`$SDL_CONFIG --libs`
+			LIBS="$LIBS $ac_sdl_ldflags"
+		  else
+			AC_MSG_RESULT([Unsupported SDL version])
+		  fi
+	      ])
+
+
+AC_ARG_WITH(ffmpeg,
+    AC_HELP_STRING([--with-ffmpeg=DIR],
+		   [Specify alternate FFMPEG prefix]),
+    [],
+    [with_ffmpeg=no]
+    )
+
+dnl # Do not use default ffmpeg installation if we are cross-compiling
+if test "x$ac_cross_compile" != "x" -a "x$with_ffmpeg" = "xno"; then
+    enable_ffmpeg=no
+fi
+
+dnl # FFMPEG stuffs
+AC_ARG_ENABLE(ffmpeg,
+	      AC_HELP_STRING([--disable-ffmpeg],
+			     [Disable ffmpeg (default: not disabled)]),
+	      [
+	        AC_SUBST(ac_has_ffmpeg,0)
+		if test "$enable_ffmpeg" = "no"; then
+			AC_MSG_RESULT([Checking if ffmpeg is disabled... yes])
+		fi
+	      ],
+	      [
+		AC_SUBST(ac_ffmpeg_cflags)
+		AC_SUBST(ac_ffmpeg_ldflags)
+
+		FFMPEG_PREFIX=""
+		AC_SUBST(SAVED_PKG_CONFIG_PATH)
+		SAVED_PKG_CONFIG_PATH=$PKG_CONFIG_PATH
+    		if test "x$with_ffmpeg" != "xno" -a "x$with_ffmpeg" != "x"; then
+			FFMPEG_PREFIX=$with_ffmpeg
+			AC_MSG_RESULT([Using ffmpeg prefix... $FFMPEG_PREFIX])
+			export PKG_CONFIG_PATH=$FFMPEG_PREFIX/lib/pkgconfig
+		fi
+
+		AC_CHECK_PROGS(PKG_CONFIG,pkg-config "python pkgconfig.py",none)
+
+		if test "$PKG_CONFIG" != "none"; then
+			AC_MSG_CHECKING([ffmpeg packages])
+			av_pkg=""
+			if $PKG_CONFIG --exists libdevice; then
+				ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBAVDEVICE=1"
+				av_pkg="$av_pkg libdevice"
+			fi
+			if $PKG_CONFIG --exists libavformat; then
+				ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBAVFORMAT=1"
+				av_pkg="$av_pkg libavformat"
+			fi
+			if $PKG_CONFIG --exists libavcodec; then
+				ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBAVCODEC=1"
+				av_pkg="$av_pkg libavcodec"
+			fi
+			if $PKG_CONFIG --exists libswscale; then
+				ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBSWSCALE=1"
+				av_pkg="$av_pkg libswscale"
+			fi
+			if $PKG_CONFIG --exists libavutil; then
+				ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBAVUTIL=1"
+				av_pkg="$av_pkg libavutil"
+			fi
+			if $PKG_CONFIG --exists libavcore; then
+				ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBAVCORE=1"
+				av_pkg="$av_pkg libavcore"
+			fi
+			
+			if test "x$av_pkg" == "x"; then
+			   AC_MSG_RESULT([none detected (check the prefix)! **])
+			else
+			   AC_MSG_RESULT([$av_pkg])
+			fi
+			
+			ac_ffmpeg_cflags="$ac_ffmpeg_cflags `$PKG_CONFIG --cflags $av_pkg`"
+			ac_ffmpeg_ldflags="$ac_ffmpeg_ldflags `$PKG_CONFIG --libs $av_pkg`"
+
+		else
+			dnl #
+			dnl # Use hardcoded values to configure ffmpeg
+			dnl #
+			
+			AC_MSG_RESULT([*** Warning: neither pkg-config nor python is available, ffmpeg dependency cannot be calculated. If ffmpeg libraries are not detected, you need to specify the correct CFLAGS and LDFLAGS settings for ffmpeg prior to invoking configure ***])
+			
+			LIBS="-L$FFMPEG_PREFIX/lib $LIBS"
+			LDFLAGS="-L$FFMPEG_PREFIX/lib $LDFLAGS"
+			CFLAGS="-I$FFMPEG_PREFIX/include $CFLAGS"
+			
+			AC_CHECK_LIB(avdevice,
+				     avdevice_version,
+				     [ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBAVDEVICE=1"
+				      ac_ffmpeg_ldflags="$ac_ffmpeg_ldflags -lavdevice"
+				     ]
+				     )
+			AC_CHECK_LIB(avutil,
+				     av_malloc,
+				     [ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBAVUTIL=1"
+				      ac_ffmpeg_ldflags="$ac_ffmpeg_ldflags -lavutil"
+				     ]
+				     )
+			AC_CHECK_LIB(avcodec,
+				     avcodec_init,
+				     [ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBAVCODEC=1"
+				      ac_ffmpeg_ldflags="$ac_ffmpeg_ldflags -lavcodec"
+				     ],
+				     [],
+				     [-lavutil]
+				     )
+			AC_CHECK_LIB(avformat,
+				     av_register_all,
+				     [ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBAVFORMAT=1"
+				      ac_ffmpeg_ldflags="$ac_ffmpeg_ldflags -lavformat"
+				     ],
+				     [],
+				     [-lavcodec -lavutil]
+				     )
+			AC_CHECK_LIB(swscale,
+				     sws_scale,
+				     [ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBSWSCALE=1"
+				      ac_ffmpeg_ldflags="$ac_ffmpeg_ldflags -lswscale"
+				     ],
+				     [],
+				     [-lavutil]
+				     )
+			AC_CHECK_LIB(avcore,
+				     avcore_version,
+				     [ac_ffmpeg_cflags="$ac_ffmpeg_cflags -DPJMEDIA_HAS_LIBAVCORE=1"
+				      ac_ffmpeg_ldflags="$ac_ffmpeg_ldflags -lavcore"
+				     ]
+				     )
+			
+		fi
+		
+		LIBS="$LIBS $ac_ffmpeg_ldflags"
+		export PKG_CONFIG_PATH=$SAVED_PKG_CONFIG_PATH
+	      ]
+	      )
+
+dnl # Video for Linux 2
+AC_ARG_ENABLE(v4l2,
+	      AC_HELP_STRING([--disable-v4l2],
+			     [Disable Video4Linux2 (default: not disabled)]),
+	      [
+		if test "$enable_v4l2" = "no"; then
+		  AC_MSG_RESULT([Checking if V4L2 is disabled... yes])
+		fi
+	      ],
+	      [
+	        AC_SUBST(ac_v4l2_cflags)
+	        AC_SUBST(ac_v4l2_ldflags)
+		AC_CHECK_LIB(v4l2,
+			     v4l2_open,
+			     [ac_v4l2_cflags="-DPJMEDIA_VIDEO_DEV_HAS_V4L2=1"
+			      ac_v4l2_ldflags="-lv4l2"
+			      LIBS="$LIBS -lv4l2"
+			     ]
+			     )
+	      ])
+
+dnl ########################################################
+dnl # Intel IPP support
+dnl #
+AC_ARG_ENABLE(ipp,
+    AC_HELP_STRING([--enable-ipp],
+		   [Enable Intel IPP support. Specify the Intel IPP package and samples location using IPPROOT and IPPSAMPLES env var or with --with-ipp and --with-ipp-samples options]),
+    [],
+    [enable_ipp=no]
+    )
+
+AC_ARG_WITH(ipp,
+    AC_HELP_STRING([--with-ipp=DIR],
+		   [Specify the Intel IPP location]),
+    [],
+    [with_ipp=no]
+    )
+
+AC_ARG_WITH(ipp-samples,
+    AC_HELP_STRING([--with-ipp-samples=DIR],
+		   [Specify the Intel IPP samples location]),
+    [],
+    [with_ipp_samples=no]
+    )
+
+AC_ARG_WITH(ipp-arch,
+    AC_HELP_STRING([--with-ipp-arch=ARCH],
+		   [Specify the Intel IPP ARCH suffix, e.g. "64" or "em64t. Default is blank for IA32"]),
+    [],
+    [with_ipp_arch=no]
+    )
+
+if test "x$enable_ipp" != "xno"; then
+    dnl # 
+    dnl # Verifying Intel IPP path
+    dnl #
+    AC_MSG_CHECKING([Intel IPP location])
+
+    if test "x$with_ipp" != "xno" -a "x$with_ipp" != "x"; then
+	AC_MSG_RESULT([$with_ipp])
+	IPPROOT=$with_ipp
+    elif test "x$IPPROOT" = "x"; then
+	if test -d /opt/intel/ipp; then
+	    IPPROOT=`ls -d /opt/intel/ipp/*/* | head -1`
+	    AC_MSG_RESULT([autodetected in $IPPROOT])
+	fi
+    else
+	AC_MSG_RESULT([$IPPROOT])
+    fi
+
+    if test "x$with_ipp_arch" != "xno"; then
+	IPP_SUFFIX=$with_ipp_arch
+	AC_MSG_RESULT([IPP arch suffix is set to $IPP_SUFFIX])
+    else
+	IPP_SUFFIX=""
+	AC_MSG_RESULT([IPP arch suffix is set to empty])
+    fi
+
+    if test x$IPPROOT = x; then
+	AC_MSG_ERROR([the location is neither specified nor can be guessed. Please specify with IPPROOT env var or with --with-ipp option])
+    elif test ! -d $IPPROOT; then
+	AC_MSG_ERROR([not found])
+    elif test ! -d $IPPROOT/include; then
+	AC_MSG_ERROR([directory doesn't seem to be valid])
+    else
+	# IPP directory looks okay.
+	# Remove trailing backslash
+	IPPROOT=`echo $IPPROOT | sed 's/\/$//'`
+
+	SAVED_CFLAGS="$CFLAGS"
+	SAVED_LDFLAGS="$LDFLAGS"
+	SAVED_LIBS="$LIBS"
+
+	IPP_CFLAGS="-I$IPPROOT/include"
+	IPP_LIBS="-lippsc${IPP_SUFFIX} -lipps${IPP_SUFFIX} -lippcore${IPP_SUFFIX}"
+
+#
+	# Some differences between Mac OS X and Linux
+	case $target in 
+	    *darwin* )
+		IPP_LDFLAGS="-L$IPPROOT/Libraries -L$IPPROOT/lib"
+		;;
+	    *)
+	    	# Find out where the libraries live.
+		IPP7_ARCH=""
+		if test -d $IPPROOT/lib/intel64; then
+		   IPP7_ARCH="intel64"
+		elif test -d $IPPROOT/lib/ia32; then
+		   IPP7_ARCH="ia32"
+		elif test -d $IPPROOT/lib/mic; then
+		   IPP7_ARCH="mic"
+		fi
+
+		if test -z "$IPP7_ARCH"; then
+		   # IPP6 (and possibly below)
+		   IPP_LDFLAGS="-L$IPPROOT/sharedlib"
+		   IPP_LIBS="$IPP_LIBS  -lippsr${IPP_SUFFIX} -lguide"
+		else
+		   # IPP7
+		   if ! test -d $IPPROOT/../compiler; then
+			AC_MSG_ERROR([Cannot find $IPPROOT/../compiler directory. Please set IPPROOT variable correctly])
+		   fi
+		   IPP_CFLAGS="$IPP_CFLAGS"
+		   IPP_LDFLAGS="-L$IPPROOT/lib/intel64 -L$IPPROOT/../compiler/lib/$IPP7_ARCH"
+		   IPP_LIBS="$IPP_LIBS -liomp5"
+		fi
+		;;
+	esac
+
+	#IPP_LDFLAGS="-L$IPPROOT/sharedlib"
+	#Static:
+	#IPP_LIBS="-lippscmerged -lippsrmerged -lippsmerged -lippcore"
+
+	CFLAGS="$CFLAGS $IPP_CFLAGS"
+	LDFLAGS="$LDFLAGS $IPP_LDFLAGS"
+	LIBS="$IPP_LIBS $LIBS"
+
+
+	AC_MSG_CHECKING([Intel IPP usability])
+	AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <ippcore.h>
+					   ]],
+					   [ippStaticInit();])],
+		  [AC_MSG_RESULT(ok)],
+		  [AC_MSG_FAILURE([Error: unable to recognize your IPP installation. Make sure the paths and ARCH suffix are set correctly, run with --help for more info])])
+
+	CFLAGS="$SAVED_CFLAGS"
+	LDFLAGS="$SAVED_LDFLAGS"
+	LIBS="$SAVED_LIBS"
+    fi
+
+    dnl # 
+    dnl # Verifying Intel IPP samples path
+    dnl #
+    AC_MSG_CHECKING([Intel IPP samples location])
+
+    if test "x$with_ipp_samples" != "xno" -a "x$with_ipp_samples" != "x"; then
+	AC_MSG_RESULT([$with_ipp_samples])
+	IPPSAMPLES=$with_ipp_samples
+    elif test "x$IPPSAMPLES" = "x"; then
+	if test -d /opt/intel/ipp-samples; then
+	    IPPSAMPLES=/opt/intel/ipp-samples
+	    AC_MSG_RESULT([autodetected in $IPPSAMPLES])
+	fi
+    else
+	AC_MSG_RESULT([$IPPSAMPLES])
+    fi
+
+    if test x$IPPSAMPLES = x; then
+	AC_MSG_ERROR([the location is neither specified nor can be guessed. Please specify with IPPSAMPLES env var or with --with-ipp-samples option])
+    elif test ! -d $IPPSAMPLES; then
+	AC_MSG_ERROR([not found])
+    elif test ! -d $IPPSAMPLES/speech-codecs; then
+	AC_MSG_ERROR([directory doesn't seem to be valid])
+    else
+	# Remove trailing backslash
+	IPPSAMPLES=`echo $IPPSAMPLES | sed 's/\/$//'`
+	
+	# Guess the libusc.a/libspeech.a build location
+	AC_MSG_CHECKING([Intel IPP USC build location])
+	if test -d $IPPSAMPLES/speech-codecs/bin; then
+	    IPPVER=5 
+	    IPPSAMP_DIR=`ls -d $IPPSAMPLES/speech-codecs/bin/*gcc*/lib | head -1`
+	elif test -d $IPPSAMPLES/speech-codecs/_bin; then
+	    IPPVER=6
+	    if test -d $IPPSAMPLES/speech-codecs/_bin/*gcc*; then
+		# gcc compiler
+	    	IPPSAMP_DIR=`ls -d $IPPSAMPLES/speech-codecs/_bin/*gcc*/lib | head -1`
+	    elif test -d $IPPSAMPLES/speech-codecs/_bin/*icc*; then
+		# icc compiler
+	    	IPPSAMP_DIR=`ls -d $IPPSAMPLES/speech-codecs/_bin/*icc*/lib | head -1`
+	    else
+		AC_MSG_FAILURE([Unable to find to find built binaries under $IPPSAMPLES/speech-codecs/{bin,_bin}. Have you built the IPP samples?])
+	    fi
+	else
+	    AC_MSG_FAILURE([unable to find $IPPSAMPLES/speech-codecs/bin/*gcc*/lib or $IPPSAMPLES/speech-codecs/_bin/*gcc*/lib directory. Have you built the samples?])
+	fi
+
+	# Test the directory
+	if test ! -d $IPPSAMP_DIR; then
+	    AC_MSG_FAILURE([There's something wrong with this script, directory $IPPSAMP_DIR does not exist])
+	    exit 1;
+	fi
+
+    	if test "x$IPPVER" = "x5"; then
+	    IPPSAMP_LIBS="libusc.a"
+	    IPPSAMP_LDLIBS="-lusc"
+	elif test "x$IPPVER" = "x6"; then
+	    IPPSAMP_LIBS="libspeech.a"
+	    IPPSAMP_LDLIBS="-lspeech"
+	else
+	    AC_MSG_FAILURE([bug in this script: unsupported IPP version])
+	fi
+
+	if test ! -f $IPPSAMP_DIR/$IPPSAMP_LIBS; then
+	    AC_MSG_FAILURE([$IPPSAMP_LIBS doesn't exist in $IPPSAMP_DIR])
+	fi
+
+	AC_MSG_RESULT([$IPPSAMP_DIR])
+
+	SAVED_CFLAGS="$CFLAGS"
+	SAVED_LDFLAGS="$LDFLAGS"
+	SAVED_LIBS="$LIBS"
+
+	IPPSAMP_INC="-I$IPPSAMPLES/speech-codecs/core/usc/include"
+	CFLAGS="$CFLAGS $IPPSAMP_INC"
+	LDFLAGS="$LDFLAGS -L$IPPSAMP_DIR"
+	LIBS="$IPPSAMP_LDLIBS $LIBS"
+
+	AC_MSG_CHECKING([Intel IPP USC usability])
+	AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <usc.h>
+					   ]],
+					   [extern USC_Fxns USC_G729AFP_Fxns;])],
+		  [AC_MSG_RESULT(ok)],
+		  [AC_MSG_FAILURE(failed)])
+
+	CFLAGS="$SAVED_CFLAGS"
+	LDFLAGS="$IPP_LDFLAGS $SAVED_LDFLAGS"
+	LIBS="$IPP_LIBS $SAVED_LIBS"
+
+	IPP_CFLAGS="$IPP_CFLAGS $IPPSAMP_INC"
+	IPP_LDFLAGS="$IPP_LDFLAGS -L$IPPSAMP_DIR"
+	IPP_LIBS="$IPPSAMP_LDLIBS $IPP_LIBS"
+    fi
+
+    CFLAGS="$CFLAGS $IPP_CFLAGS"
+    LDFLAGS="$LDFLAGS $IPP_LDFLAGS"
+    LIBS="$LIBS $IPP_LIBS"
+
+    ac_build_mak_vars="$ac_build_mak_vars\n\
+export IPP_CFLAGS=$IPP_CFLAGS\n\
+export IPP_LDFLAGS=$IPP_LDFLAGS\n\
+export IPP_LIBS=$IPP_LIBS"
+else
+    AC_MSG_RESULT([Skipping Intel IPP settings (not wanted)])
+fi
+
+
+dnl ##########################################
+dnl #
+dnl # PJSIP CONFIG
+dnl #
+
+dnl # SSL alt prefix
+AC_ARG_WITH(ssl,
+    AC_HELP_STRING([--with-ssl=DIR],
+		   [Specify alternate libssl prefix]),
+    [],
+    [with_ssl=no]
+    )
+
+dnl # Do not use default SSL installation if we are cross-compiling
+if test "x$ac_cross_compile" != "x" -a "x$with_ssl" = "xno"; then
+    enable_ssl=no
+fi
+
+dnl # Include SSL support
+AC_SUBST(ac_no_ssl)
+AC_ARG_ENABLE(ssl,
+	      AC_HELP_STRING([--disable-ssl],
+			     [Exclude SSL support the build (default: autodetect)])
+	      ,
+	      [
+		if test "$enable_ssl" = "no"; then
+		 [ac_no_ssl=1]
+		 AC_MSG_RESULT([Checking if SSL support is disabled... yes])
+	        fi
+	      ],
+	      [
+		AC_MSG_RESULT([checking for OpenSSL installations..])
+                if test "x$with_ssl" != "xno" -a "x$with_ssl" != "x"; then
+                    CFLAGS="$CFLAGS -I$with_ssl/include"
+                    LDFLAGS="$LDFLAGS -L$with_ssl/lib"
+                    AC_MSG_RESULT([Using SSL prefix... $with_ssl])
+                fi
+		AC_SUBST(openssl_h_present)
+		AC_SUBST(libssl_present)
+		AC_SUBST(libcrypto_present)
+		AC_CHECK_HEADER(openssl/ssl.h,[openssl_h_present=1])
+		AC_CHECK_LIB(crypto,ERR_load_BIO_strings,[libcrypto_present=1 && LIBS="$LIBS -lcrypto"])
+		AC_CHECK_LIB(ssl,SSL_library_init,[libssl_present=1 && LIBS="$LIBS -lssl"])
+		if test "x$openssl_h_present" = "x1" -a "x$libssl_present" = "x1" -a "x$libcrypto_present" = "x1"; then
+	        	AC_MSG_RESULT([OpenSSL library found, SSL support enabled])
+			# PJSIP_HAS_TLS_TRANSPORT setting follows PJ_HAS_SSL_SOCK
+			#AC_DEFINE(PJSIP_HAS_TLS_TRANSPORT, 1)
+			AC_DEFINE(PJ_HAS_SSL_SOCK, 1)
+		else
+			AC_MSG_RESULT([** OpenSSL libraries not found, disabling SSL support **])
+		fi
+	      ])
+
+dnl # Obsolete option --with-opencore-amrnb
+AC_ARG_WITH(opencore-amrnb,
+    AC_HELP_STRING([--with-opencore-amrnb=DIR],
+		   [This option is obsolete and replaced by --with-opencore-amr=DIR]),
+    [AC_MSG_ERROR(This option is obsolete and replaced by --with-opencore-amr=DIR)],
+    []
+    )
+
+dnl # opencore-amr alt prefix
+AC_ARG_WITH(opencore-amr,
+    AC_HELP_STRING([--with-opencore-amr=DIR],
+		   [Specify alternate libopencore-amr prefix]),
+    [],
+    [with_opencore_amr=no]
+    )
+
+dnl # Do not use default opencore-amr installation if we are cross-compiling
+if test "x$ac_cross_compile" != "x" -a "x$with_opencore_amr" = "xno"; then
+    enable_opencore_amr=no
+fi
+
+dnl # vo-amrwbenc alt prefix
+AC_ARG_WITH(opencore-amrwbenc,
+    AC_HELP_STRING([--with-opencore-amrwbenc=DIR],
+		   [Specify alternate libvo-amrwbenc prefix]),
+    [],
+    [with_opencore_amrwbenc=no]
+    )
+
+dnl # Do not use default vo-amrwbenc installation if we are cross-compiling
+if test "x$ac_cross_compile" != "x" -a "x$with_opencore_amrwbenc" = "xno"; then
+    enable_opencore_amrwbenc=no
+fi
+
+
+dnl # Include opencore-amr support
+AC_SUBST(ac_no_opencore_amrnb)
+AC_SUBST(ac_no_opencore_amrwb)
+AC_ARG_ENABLE(opencore_amr,
+	      AC_HELP_STRING([--disable-opencore-amr],
+			     [Exclude OpenCORE AMR support from the build (default: autodetect)])
+	      ,
+	      [
+		if test "$enable_opencore_amr" = "no"; then
+		 [ac_no_opencore_amrnb=1]
+		 [ac_no_opencore_amrwb=1]
+		 AC_DEFINE(PJMEDIA_HAS_OPENCORE_AMRNB_CODEC,0)
+		 AC_DEFINE(PJMEDIA_HAS_OPENCORE_AMRWB_CODEC,0)
+		 AC_MSG_RESULT([Checking if OpenCORE AMR support is disabled... yes])
+	        fi
+	      ],
+	      [
+		AC_MSG_RESULT([checking for OpenCORE AMR installations..])
+                if test "x$with_opencore_amr" != "xno" -a "x$with_opencore_amr" != "x"; then
+                    CFLAGS="$CFLAGS -I$with_opencore_amr/include"
+                    LDFLAGS="$LDFLAGS -L$with_opencore_amr/lib"
+                    AC_MSG_RESULT([Using OpenCORE AMR prefix... $with_opencore_amr])
+                fi
+                if test "x$with_opencore_amrwbenc" != "xno" -a "x$with_opencore_amrwbenc" != "x"; then
+                    CFLAGS="$CFLAGS -I$with_opencore_amrwbenc/include"
+                    LDFLAGS="$LDFLAGS -L$with_opencore_amrwbenc/lib"
+                    AC_MSG_RESULT([Using OpenCORE AMRWB-enc prefix... $with_opencore_amrwbenc])
+                fi
+		AC_SUBST(opencore_amrnb_h_present)
+		AC_SUBST(opencore_amrnb_present)
+		AC_CHECK_HEADER(opencore-amrnb/interf_enc.h,[opencore_amrnb_h_present=1])
+		AC_CHECK_LIB(opencore-amrnb,Encoder_Interface_init,[opencore_amrnb_present=1 && LIBS="$LIBS -lopencore-amrnb"])
+		if test "x$opencore_amrnb_h_present" = "x1" -a "x$opencore_amrnb_present" = "x1"; then
+	        	AC_MSG_RESULT([OpenCORE AMR-NB library found, AMR-NB support enabled])
+	        	AC_DEFINE(PJMEDIA_HAS_OPENCORE_AMRNB_CODEC,1)
+		else
+			[ac_no_opencore_amrnb=1]
+			AC_DEFINE(PJMEDIA_HAS_OPENCORE_AMRNB_CODEC,0)
+		fi
+		AC_SUBST(opencore_amrwb_enc_h_present)
+		AC_SUBST(opencore_amrwb_enc_present)
+		AC_SUBST(opencore_amrwb_dec_h_present)
+		AC_SUBST(opencore_amrwb_dec_present)
+		AC_CHECK_HEADER(vo-amrwbenc/enc_if.h,[opencore_amrwb_enc_h_present=1])
+		AC_CHECK_HEADER(opencore-amrwb/dec_if.h,[opencore_amrwb_dec_h_present=1])
+		AC_CHECK_LIB(opencore-amrwb,D_IF_init,[opencore_amrwb_dec_present=1 && LIBS="$LIBS -lopencore-amrwb"])
+		AC_CHECK_LIB(vo-amrwbenc,E_IF_init,[opencore_amrwb_enc_present=1 && LIBS="$LIBS -lvo-amrwbenc"])
+		if test "x$opencore_amrwb_enc_h_present" = "x1" -a "x$opencore_amrwb_dec_h_present" = "x1" -a "x$opencore_amrwb_enc_present" = "x1" -a "x$opencore_amrwb_dec_present" = "x1"; then
+	        	AC_MSG_RESULT([OpenCORE AMR-WB library found, AMR-WB support enabled])
+	        	AC_DEFINE(PJMEDIA_HAS_OPENCORE_AMRWB_CODEC,1)
+		else
+			[ac_no_opencore_amrwb=1]
+			AC_DEFINE(PJMEDIA_HAS_OPENCORE_AMRWB_CODEC,0)
+		fi
+
+	      ])
+
+dnl # SILK prefix
+AC_ARG_WITH(silk,
+    AC_HELP_STRING([--with-silk=DIR],
+		   [Specify alternate SILK prefix]),
+    [],
+    [with_silk=no]
+    )
+
+dnl # Do not use default SILK installation if we are cross-compiling
+if test "x$ac_cross_compile" != "x" -a "x$with_silk" = "xno"; then
+    enable_silk=no
+fi
+
+dnl # Include SILK support
+AC_SUBST(ac_no_silk)
+AC_ARG_ENABLE(silk,
+	      AC_HELP_STRING([--disable-silk],
+			     [Exclude SILK support from the build (default: autodetect)])
+	      ,
+	      [
+		if test "$enable_silk" = "no"; then
+		 [ac_no_silk=1]
+		 AC_DEFINE(PJMEDIA_HAS_SILK_CODEC,0)
+		 AC_MSG_RESULT([Checking if SILK support is disabled... yes])
+	        fi
+	      ],
+	      [
+		AC_MSG_RESULT([checking for SILK installations..])
+                if test "x$with_silk" != "xno" -a "x$with_silk" != "x"; then
+                    CFLAGS="$CFLAGS -I$with_silk/interface"
+		    CPPFLAGS="$CPPFLAGS -I$with_silk/interface"
+                    LDFLAGS="$LDFLAGS -L$with_silk"
+                    AC_MSG_RESULT([Using SILK prefix... $with_silk])
+                fi                
+		AC_SUBST(silk_h_present)
+		AC_SUBST(silk_present)
+		AC_CHECK_HEADER(SKP_Silk_SDK_API.h,[silk_h_present=1])
+		AC_CHECK_LIB(SKP_SILK_SDK,SKP_Silk_SDK_get_version,[silk_present=1 && LIBS="$LIBS -lSKP_SILK_SDK"])
+		if test "x$silk_h_present" = "x1" -a "x$silk_present" = "x1"; then
+	        	AC_MSG_RESULT([SILK library found, SILK support enabled])
+	        	AC_DEFINE(PJMEDIA_HAS_SILK_CODEC,1)
+		else
+			[ac_no_silk=1]
+			AC_DEFINE(PJMEDIA_HAS_SILK_CODEC,0)
+		fi
+	      ])
+
+
+dnl ##########################################
+dnl #
+dnl # MANUAL CONFIG
+dnl #
+
+
+dnl # Determine if select() requires nfds to be filled up with
+dnl # correct value (max_fd+1). If zero, nfds will be filled up with
+dnl # PJ_FD_SETSIZE
+AC_MSG_CHECKING([if select() needs correct nfds])
+case $target in
+  *rtems*) AC_DEFINE(PJ_SELECT_NEEDS_NFDS,1)
+	   AC_MSG_RESULT(yes)
+	;;
+  *) AC_DEFINE(PJ_SELECT_NEEDS_NFDS,0)
+     AC_MSG_RESULT([no (default)])
+     AC_MSG_RESULT([** Decided that select() doesn't need correct nfds (please check)])
+	;;
+esac
+
+dnl # Determine if pj_thread_create() should enforce thread stack size when
+dnl # creating thread. Default is zero, to allow OS to allocate appropriate
+dnl # thread's stack size.
+AC_MSG_CHECKING([if pj_thread_create() should enforce stack size])
+case $target in
+  *rtems*) AC_DEFINE(PJ_THREAD_SET_STACK_SIZE,1)
+	   AC_MSG_RESULT(yes)
+	;;
+  *) AC_DEFINE(PJ_THREAD_SET_STACK_SIZE,0)
+     AC_MSG_RESULT([no (default)])
+	;;
+esac
+
+dnl # Determine if pj_thread_create() should allocate thread's stack from
+dnl # the pool. Default is zero, to let OS allocate thread's stack.
+AC_MSG_CHECKING([if pj_thread_create() should allocate stack])
+case $target in
+  *rtems*) AC_DEFINE(PJ_THREAD_ALLOCATE_STACK,1)
+	   AC_MSG_RESULT(yes)
+	;;
+  *) AC_DEFINE(PJ_THREAD_ALLOCATE_STACK,0)
+     AC_MSG_RESULT([no (default)])
+	;;
+esac
+
+dnl # This value specifies the value set in errno by the OS when a non-blocking
+dnl # socket recv() can not return immediate data.
+case $target in
+  *mingw* | *cygw* | *win32* | *w32* )
+	AC_DEFINE(PJ_BLOCKING_ERROR_VAL,WSAEWOULDBLOCK)
+	;;
+  *) AC_DEFINE(PJ_BLOCKING_ERROR_VAL,EAGAIN)
+     AC_MSG_RESULT([** Setting non-blocking recv() retval to EAGAIN (please check)])
+	;;
+esac
+
+dnl # This value specifies the value set in errno by the OS when a non-blocking
+dnl # socket connect() can not get connected immediately.
+case $target in
+  *mingw* | *cygw* | *win32* | *w32* )
+	AC_DEFINE(PJ_BLOCKING_CONNECT_ERROR_VAL,WSAEWOULDBLOCK)
+	;;
+  *) AC_DEFINE(PJ_BLOCKING_CONNECT_ERROR_VAL,EINPROGRESS)
+     AC_MSG_RESULT([** Setting non-blocking connect() retval to EINPROGRESS (please check)])
+	;;
+esac
+
+
+AC_SUBST(target)
+AC_SUBST(ac_linux_poll,select)
+AC_SUBST(ac_host,unix)
+AC_SUBST(ac_main_obj)
+case $target in
+  *rtems*)
+	ac_main_obj=main_rtems.o
+	;;
+  *)
+	ac_main_obj=main.o
+	;;
+esac
+AC_SUBST(CC)
+
+ac_build_mak_vars=`echo $ac_build_mak_vars | sed 's/\\\\n/\n/g'`
+AC_OUTPUT()
+
+
+AC_MSG_RESULT([
+
+Configurations for current target have been written to 'build.mak', and 'os-auto.mak' in various build directories, and pjlib/include/pj/compat/os_auto.h.
+
+Further customizations can be put in:
+  - 'user.mak'
+  - 'pjlib/include/pj/config_site.h'
+
+The next step now is to run 'make dep' and 'make'.
+])
+
