dnl CF_SOCKS5 version: 13 updated: 2024/06/02 16:00:53
dnl ---------
dnl Check for socks5 configuration (allowing for socks4 and dante variants)
dnl $1 = the [optional] directory in which the library may be found
AC_DEFUN([CF_SOCKS5],[
  CF_ADD_OPTIONAL_PATH($1, [socks5 library])

AC_CHECK_LIB(socks5, SOCKSinit, cf_cv_socks_lib=socks5,[
AC_CHECK_LIB(socksd, SOCKSinit, cf_cv_socks_lib=socksd,[
AC_CHECK_LIB(socks, SOCKSinit, cf_cv_socks_lib=socks,[
cf_cv_socks_lib=no])])])

if test "$cf_cv_socks_lib" = no ; then
	AC_MSG_ERROR(cannot find socks5 library)
else
	CF_ADD_LIBS(-l$cf_cv_socks_lib)
fi

AC_DEFINE(USE_SOCKS5,1,[Define to 1 if we are using socks5 library])
AC_DEFINE(SOCKS,1,[Define to 1 if we are using socks library])

AC_CACHE_CHECK([if the socks library uses socks4 prefix],cf_use_socks4,[
cf_use_socks4=error
AC_TRY_LINK([
#include <socks.h>],[
	Rinit((char *)0)],
	[cf_use_socks4=yes],
	[AC_TRY_LINK([#include <socks.h>],
		[SOCKSinit((char *)0)],
		[cf_use_socks4=no])])])

if test "$cf_use_socks4" = "yes" ; then
	AC_DEFINE(USE_SOCKS4_PREFIX,1,[Define to 1 if socks library uses socks4 prefix])
	AC_DEFINE(accept,Raccept)
	AC_DEFINE(bind,Rbind)
	AC_DEFINE(connect,Rconnect)
	AC_DEFINE(getpeername,Rgetpeername)
	AC_DEFINE(getsockname,Rgetsockname)
	AC_DEFINE(listen,Rlisten)
	AC_DEFINE(recvfrom,Rrecvfrom)
	AC_DEFINE(select,Rselect)
elif test "$cf_use_socks4" = "no" ; then
	AC_DEFINE(accept,SOCKSaccept)
	AC_DEFINE(getpeername,SOCKSgetpeername)
	AC_DEFINE(getsockname,SOCKSgetsockname)
	AC_DEFINE(recvfrom,SOCKSrecvfrom)
else
	AC_MSG_ERROR(Cannot link with socks5 library)
fi

AC_MSG_CHECKING(if socks5p.h is available)
AC_TRY_COMPILE([
#define INCLUDE_PROTOTYPES
#include <socks.h>],[
	init((char *)0)],
	[cf_use_socks5p_h=yes],
	[cf_use_socks5p_h=no])
AC_MSG_RESULT($cf_use_socks5p_h)

test "$cf_use_socks5p_h" = yes && AC_DEFINE(INCLUDE_PROTOTYPES,1,[Define to 1 if needed to declare prototypes in socks headers])
])dnl
