# Created by: Gea-Suan Lin <gslin@gslin.org>
# $FreeBSD$

PORTNAME=	gearmand
PORTVERSION=	1.1.8
CATEGORIES=	devel
MASTER_SITES=	http://launchpad.net/gearmand/1.2/${PORTVERSION}/+download/

MAINTAINER=	glarkin@FreeBSD.org
COMMENT=	Gearman C Server and Library

BUILD_DEPENDS=	boost-libs>=0:${PORTSDIR}/devel/boost-libs \
		libexecinfo>=0:${PORTSDIR}/devel/libexecinfo \
		${PYTHON_PKGNAMEPREFIX}sphinx>=0:${PORTSDIR}/textproc/py-sphinx
LIB_DEPENDS=	event:${PORTSDIR}/devel/libevent \
		uuid:${PORTSDIR}/misc/e2fsprogs-libuuid \
		execinfo:${PORTSDIR}/devel/libexecinfo

CONFLICTS=	p5-Gearman-Server-1.* gearmand-1.0.*

.if defined(MAINTAINER_MODE) && ${MAINTAINER_MODE:Myes}
UID_FILES=	../../UIDs
GID_FILES=	../../GIDs
.if !exists(${UID_FILES}) || !exists(${GID_FILES})
.error ${UID_FILES} or ${GID_FILES} does not exist - please check
.endif
.endif

USERS=		gearmand
GROUPS=		gearmand

FETCH_ARGS=	-pRr
USE_PERL5_BUILD=yes
GNU_CONFIGURE=	yes
USE_GMAKE=	yes
USES=	pathfix
USE_LDCONFIG=	yes
USE_PYTHON_BUILD=yes
USE_RC_SUBR=	gearmand
SUB_LIST+=	USERS=${USERS} GROUPS=${GROUPS}

CONFIGURE_ARGS+=--with-lib-prefix=${LOCALBASE} --with-boost=${LOCALBASE} \
		--localstatedir=/var/db/${PORTNAME} --enable-static
CPPFLAGS+=	-I${LOCALBASE}/include
LDFLAGS+=	-L${LOCALBASE}/lib -lexecinfo

OPTIONS_DEFINE=	DRIZZLE MEMCACHED PGSQL SQLITE MYSQL HIREDIS TOKYOCAB
OPTIONS_DEFAULT=SQLITE

DRIZZLE_DESC=	Enable Drizzle support for persistent queue
MEMCACHED_DESC=	Enable memcached support for persistent queue
MYSQL_DESC=	Enable MySQL support for persistent queue
PGSQL_DESC=	Enable PostgreSQL support for persistent queue
SQLITE_DESC=	Enable SQLite support for persistent queue
HIREDIS_DESC=	Enable Hiredis support for persistent queue
TOKYOCAB_DESC=	Enable Tokyo Cabinet support for persistent queue

MAN1=	gearadmin.1 \
	gearman.1
MAN3=	gearman_actions_t.3 \
	gearman_allocator_t.3 \
	gearman_argument_make.3 \
	gearman_argument_t.3 \
	gearman_bugreport.3 \
	gearman_client_add_options.3 \
	gearman_client_add_server.3 \
	gearman_client_add_servers.3 \
	gearman_client_add_task.3 \
	gearman_client_add_task_background.3 \
	gearman_client_add_task_high.3 \
	gearman_client_add_task_high_background.3 \
	gearman_client_add_task_low.3 \
	gearman_client_add_task_low_background.3 \
	gearman_client_add_task_status.3 \
	gearman_client_clear_fn.3 \
	gearman_client_clone.3 \
	gearman_client_context.3 \
	gearman_client_create.3 \
	gearman_client_do.3 \
	gearman_client_do_background.3 \
	gearman_client_do_high.3 \
	gearman_client_do_high_background.3 \
	gearman_client_do_job_handle.3 \
	gearman_client_do_low.3 \
	gearman_client_do_low_background.3 \
	gearman_client_do_status.3 \
	gearman_client_echo.3 \
	gearman_client_errno.3 \
	gearman_client_error.3 \
	gearman_client_free.3 \
	gearman_client_has_option.3 \
	gearman_client_job_status.3 \
	gearman_client_options.3 \
	gearman_client_options_t.3 \
	gearman_client_remove_options.3 \
	gearman_client_remove_servers.3 \
	gearman_client_run_tasks.3 \
	gearman_client_set_complete_fn.3 \
	gearman_client_set_context.3 \
	gearman_client_set_created_fn.3 \
	gearman_client_set_data_fn.3 \
	gearman_client_set_exception_fn.3 \
	gearman_client_set_fail_fn.3 \
	gearman_client_set_log_fn.3 \
	gearman_client_set_memory_allocators.3 \
	gearman_client_set_namespace.3 \
	gearman_client_set_options.3 \
	gearman_client_set_status_fn.3 \
	gearman_client_set_task_context_free_fn.3 \
	gearman_client_set_timeout.3 \
	gearman_client_set_warning_fn.3 \
	gearman_client_set_workload_fn.3 \
	gearman_client_set_workload_free_fn.3 \
	gearman_client_set_workload_malloc_fn.3 \
	gearman_client_st.3 \
	gearman_client_task_free_all.3 \
	gearman_client_timeout.3 \
	gearman_client_wait.3 \
	gearman_continue.3 \
	gearman_execute.3 \
	gearman_failed.3 \
	gearman_job_free.3 \
	gearman_job_free_all.3 \
	gearman_job_function_name.3 \
	gearman_job_handle.3 \
	gearman_job_handle_t.3 \
	gearman_job_send_complete.3 \
	gearman_job_send_data.3 \
	gearman_job_send_exception.3 \
	gearman_job_send_fail.3 \
	gearman_job_send_status.3 \
	gearman_job_send_warning.3 \
	gearman_job_st.3 \
	gearman_job_take_workload.3 \
	gearman_job_unique.3 \
	gearman_job_workload.3 \
	gearman_job_workload_size.3 \
	gearman_log_fn.3 \
	gearman_parse_servers.3 \
	gearman_result_boolean.3 \
	gearman_result_integer.3 \
	gearman_result_is_null.3 \
	gearman_result_size.3 \
	gearman_result_store_integer.3 \
	gearman_result_store_string.3 \
	gearman_result_store_value.3 \
	gearman_result_string.3 \
	gearman_return_t.3 \
	gearman_strerror.3 \
	gearman_string_t.3 \
	gearman_success.3 \
	gearman_task_attr_init.3 \
	gearman_task_attr_init_background.3 \
	gearman_task_attr_init_epoch.3 \
	gearman_task_attr_t.3 \
	gearman_task_context.3 \
	gearman_task_data.3 \
	gearman_task_data_size.3 \
	gearman_task_denominator.3 \
	gearman_task_error.3 \
	gearman_task_free.3 \
	gearman_task_function_name.3 \
	gearman_task_give_workload.3 \
	gearman_task_is_known.3 \
	gearman_task_is_running.3 \
	gearman_task_job_handle.3 \
	gearman_task_numerator.3 \
	gearman_task_recv_data.3 \
	gearman_task_return.3 \
	gearman_task_send_workload.3 \
	gearman_task_set_context.3 \
	gearman_task_st.3 \
	gearman_task_take_data.3 \
	gearman_task_unique.3 \
	gearman_verbose_name.3 \
	gearman_verbose_t.3 \
	gearman_version.3 \
	gearman_worker_add_function.3 \
	gearman_worker_add_options.3 \
	gearman_worker_add_server.3 \
	gearman_worker_add_servers.3 \
	gearman_worker_clone.3 \
	gearman_worker_context.3 \
	gearman_worker_create.3 \
	gearman_worker_define_function.3 \
	gearman_worker_echo.3 \
	gearman_worker_errno.3 \
	gearman_worker_error.3 \
	gearman_worker_free.3 \
	gearman_worker_function_exist.3 \
	gearman_worker_grab_job.3 \
	gearman_worker_options.3 \
	gearman_worker_register.3 \
	gearman_worker_remove_options.3 \
	gearman_worker_remove_servers.3 \
	gearman_worker_set_context.3 \
	gearman_worker_set_identifier.3 \
	gearman_worker_set_log_fn.3 \
	gearman_worker_set_memory_allocators.3 \
	gearman_worker_set_namespace.3 \
	gearman_worker_set_options.3 \
	gearman_worker_set_timeout.3 \
	gearman_worker_set_workload_free_fn.3 \
	gearman_worker_set_workload_malloc_fn.3 \
	gearman_worker_st.3 \
	gearman_worker_timeout.3 \
	gearman_worker_unregister.3 \
	gearman_worker_unregister_all.3 \
	gearman_worker_wait.3 \
	gearman_worker_work.3 \
	libgearman.3
MAN8=	gearmand.8

.include <bsd.port.options.mk>

# Workaround for missing sigignore that wasn't introduced until
# FreeBSD 8.0
.if ${OSVERSION} < 800041
BROKEN=	Does not compile without POSIX spawn() support
.endif

.if ${PORT_OPTIONS:MDRIZZLE}
LIB_DEPENDS+=		drizzle:${PORTSDIR}/databases/libdrizzle
CONFIGURE_ARGS+=	--enable-libdrizzle
.else
CONFIGURE_ARGS+=	--disable-libdrizzle
.endif

.if ${PORT_OPTIONS:MMEMCACHED}
LIB_DEPENDS+=		memcached:${PORTSDIR}/databases/libmemcached
BUILD_DEPENDS+=		memcached>=0:${PORTSDIR}/databases/memcached
CONFIGURE_ARGS+=	--enable-libmemcached
# This hack is required for the test programs invoked by configure,
# in the event that libmemcached was compiled with SASL support.
.if exists(${LOCALBASE}/lib/libsasl.so)
LDFLAGS+=		-L${LOCALBASE}/lib -lsasl
CONFIGURE_ARGS+=	--with-memcached-sasl=${LOCALBASE}/bin/memcached
.elif exists(${LOCALBASE}/lib/libsasl2.a)
LDFLAGS+=		-L${LOCALBASE}/lib -lsasl2
CONFIGURE_ARGS+=	--with-memcached-sasl=${LOCALBASE}/bin/memcached
.else
LDFLAGS+=		-L${LOCALBASE}/lib
CONFIGURE_ARGS+=	--with-memcached=${LOCALBASE}/bin/memcached
.endif
.else
CONFIGURE_ARGS+=	--disable-libmemcached
.endif

.if ${PORT_OPTIONS:MMYSQL}
USE_MYSQL=		yes
CONFIGURE_ARGS+=	--with-mysql=yes
.else
CONFIGURE_ARGS+=	--with-mysql=no
.endif

.if ${PORT_OPTIONS:MPGSQL}
USE_PGSQL=		yes
CONFIGURE_ARGS+=	--enable-libpq
.else
CONFIGURE_ARGS+=	--disable-libpq
.endif

.if ${PORT_OPTIONS:MSQLITE}
BUILD_DEPENDS+=		sqlite3>=3.0.0:${PORTSDIR}/databases/sqlite3
LIB_DEPENDS+=		sqlite3:${PORTSDIR}/databases/sqlite3
CONFIGURE_ARGS+=	--with-sqlite3=${LOCALBASE}
.else
CONFIGURE_ARGS+=	--without-sqlite3
.endif

.if ${PORT_OPTIONS:MTOKYOCAB}
LIB_DEPENDS+=		tokyocabinet:${PORTSDIR}/databases/tokyocabinet
CONFIGURE_ARGS+=	--enable-libtokyocabinet
CONFIGURE_ENV+=		LIBTOKYOCABINET_CPPFLAGS=-I${LOCALBASE}/include \
			LIBTOKYOCABINET_LDFLAGS=-L${LOCALBASE}/lib
.else
CONFIGURE_ARGS+=	--disable-libtokyocabinet
.endif

.if ${PORT_OPTIONS:MHIREDIS}
LIB_DEPENDS+=		hiredis:${PORTSDIR}/databases/hiredis
CONFIGURE_ARGS+=	--enable-hires
CONFIGURE_ENV+=		LIBHIREDIS_CPPFLAGS=-I${LOCALBASE}/include/hiredis \
			LIBHIREDIS_LDFLAGS=-L${LOCALBASE}/lib
.else
CONFIGURE_ARGS+=	--disable-hires
.endif

.include <bsd.port.mk>