
MACRO(SETUP_EXECUTABLE TEST_NAME)		# ARGN are the files in the test
	ADD_EXECUTABLE( ${TEST_NAME} ${ARGN} )
	INCLUDE_DIRECTORIES( ${CURL_SOURCE_DIR}/lib )		# To be able to reach "setup_once.h"
	STRING(TOUPPER TEST_NAME UPPER_TEST_NAME)

	SET(DEPENDENCIES_NAMES )

	IF(UNIX)
		LIST(APPEND DEPENDENCIES_NAMES MATH_LIBRARY)
	ENDIF()

	IF(CURL_ZLIB AND CURL_CONFIG_HAS_BEEN_RUN_BEFORE)
		LIST(APPEND DEPENDENCIES_NAMES ZLIB)
		ADD_DEFINITIONS( -DHAVE_ZLIB_H -DHAVE_ZLIB -DHAVE_LIBZ )
	ENDIF()
	IF(CURL_SSL AND CURL_CONFIG_HAS_BEEN_RUN_BEFORE)
		LIST(APPEND DEPENDENCIES_NAMES OpenSSL)
		ADD_DEFINITIONS( -DUSE_SSLEAY )
	ENDIF()

	LINK_WITH_VARIABLES( ${TEST_NAME} ${DEPENDENCIES_NAMES} )
	TARGET_LINK_LIBRARIES( ${TEST_NAME} libcurl )

	IF(NOT CURL_STATICLIB)
		# DLL / so dynamic lib
		#ADD_DEFINITIONS( -DCURL_DYNAMICLIB )
	ELSE()
		# Static lib
		ADD_DEFINITIONS( -DCURL_STATICLIB )
	ENDIF()

	ADD_DEFINITIONS( "-D${UPPER_TEST_NAME}" )
	
	################################################################################
	# Configuration
	# TODO: Check if these definitions are to be used with executables or with the lib only.
	# TODO: REPLACE THIS WITH A GENERATED HEADER #

	IF(WIN32 AND CURL_WINDOWS_SSPI)
		ADD_DEFINITIONS( -DUSE_WINDOWS_SSPI )
	ENDIF()
	IF (HTTP_ONLY)
		ADD_DEFINITIONS( -DHTTP_ONLY )
	ENDIF()
	IF (CURL_DISABLE_FTP)
		ADD_DEFINITIONS( -DCURL_DISABLE_FTP )
	ENDIF()
	IF (CURL_DISABLE_LDAP)
		ADD_DEFINITIONS( -DCURL_DISABLE_LDAP )
	ENDIF()
	IF (CURL_DISABLE_TELNET)
		ADD_DEFINITIONS( -DCURL_DISABLE_TELNET )
	ENDIF()
	IF (CURL_DISABLE_DICT)
		ADD_DEFINITIONS( -DCURL_DISABLE_DICT )
	ENDIF()
	IF (CURL_DISABLE_FILE)
		ADD_DEFINITIONS( -DCURL_DISABLE_FILE )
	ENDIF()
	IF (CURL_DISABLE_TFTP)
		ADD_DEFINITIONS( -DCURL_DISABLE_TFTP )
	ENDIF()
	IF (CURL_DISABLE_HTTP)
		ADD_DEFINITIONS( -DCURL_DISABLE_HTTP )
	ENDIF()

	# Add the postfix to the executable since it is not added automatically as for modules and shared libraries
	SET_TARGET_PROPERTIES(${TEST_NAME} PROPERTIES DEBUG_POSTFIX "${CMAKE_DEBUG_POSTFIX}")

	IF(MSVC)
		IF(NOT BUILD_RELEASE_DEBUG_DIRS)
			# Ugly workaround to remove the "/debug" or "/release" in each output
			SET_TARGET_PROPERTIES(${TEST_NAME} PROPERTIES PREFIX "../")
		ENDIF()
	ENDIF()

ENDMACRO()



SET(useful
	getpart.c getpart.h
	${CURL_SOURCE_DIR}/lib/strequal.c
	${CURL_SOURCE_DIR}/lib/base64.c ${CURL_SOURCE_DIR}/lib/mprintf.c
	${CURL_SOURCE_DIR}/lib/memdebug.c ${CURL_SOURCE_DIR}/lib/timeval.c
)

SETUP_EXECUTABLE(sws sws.c util.c util.h ${useful})
SETUP_EXECUTABLE(resolve resolve.c util.c util.h ${useful})
SETUP_EXECUTABLE(sockfilt sockfilt.c util.c util.h ${useful} ${CURL_SOURCE_DIR}/lib/inet_pton.c)
SETUP_EXECUTABLE(getpart testpart.c ${useful})
SETUP_EXECUTABLE(tftpd tftpd.c util.c util.h ${useful} tftp.h)

