# Copyright 2010-2011 W-Mark Kubacki, Mao Pu
# Distributed under the terms of the OSI Reciprocal Public License
# $Header: $

EAPI="2"

inherit autotools eutils flag-o-matic

DESCRIPTION="A persistent caching system, key-value and data structures database."
HOMEPAGE="http://code.google.com/p/redis/"
SRC_URI="http://redis.googlecode.com/files/${PN}-${PV/_/-}.tar.gz"
RESTRICT="primaryuri"

LICENSE="BSD"
KEYWORDS="amd64 x86 arm ~sparc ~ppc"
IUSE="tcmalloc"
SLOT="0"

RDEPEND="tcmalloc? ( dev-util/google-perftools )
	"
DEPEND=">=sys-devel/autoconf-2.63
	${RDEPEND}"

S="${WORKDIR}/${PN}-${PV/_/-}"

pkg_setup() {
	enewgroup redis 75 || die "problem adding 'redis' group"
	enewuser redis 75 -1 /var/lib/redis redis || die "problem adding 'redis' user"
	# set tcmalloc-variable for the build as specified in
	# https://github.com/antirez/redis/blob/2.2/README. If build system gets
	# better integrated into autotools, replace with append-flags and
	# append-ldflags in src_configure()
	use tcmalloc && export EXTRA_EMAKE="${EXTRA_EMAKE} USE_TCMALLOC=yes"
}

src_prepare() {
	cd "${S}"
	# Unfortunately, redis-py does use the name "Redis" for its tarballs, too.
	# Therefore, before wasting time on configuring, we have to rule out here
	# that the wrong tarball is being used.
	test -e redis.conf \
	|| die "redis.conf is missing - most probably this is the wrong tarball. Remove ${PN}-${PV/_/-}.tar.gz from your distfiles and try again!"
	# now we will rewrite present Makefiles
	local makefiles=""
	for MKF in $(find -name 'Makefile' | cut -b 3-); do
		mv "${MKF}" "${MKF}.in"
		sed -i	-e 's:$(CC):@CC@:g' \
			-e 's:$(CFLAGS):@AM_CFLAGS@:g' \
			-e 's: $(DEBUG)::g' \
			-e 's:ARCH:TARCH:g' \
			"${MKF}.in" \
		|| die "Sed failed for ${MKF}"
		makefiles+=" ${MKF}"
	done
	# autodetection of compiler and settings; generates the modified Makefiles
	cp "${FILESDIR}"/configure.ac-2.0 configure.ac
	sed -i	-e "s:AC_CONFIG_FILES(\[Makefile\]):AC_CONFIG_FILES([${makefiles}]):g" \
		configure.ac || die "Sed failed for configure.ac"
	eautoconf
}

src_configure() {
	if ! ( use x86 || use amd64 ); then
		replace-flags "-Os" "-O2"
		filter-flags -fomit-frame-pointer "-march=*" "-mtune=*" "-mcpu=*"
	fi
	econf ${myconf} || die "econf"
}

src_install() {
	# configuration file rewrites
	insinto /etc/
	doins redis.conf || ewarn "mysteriously the configuration file is missing"
	dosed "s:daemonize no:daemonize yes:g" /etc/redis.conf
	dosed "s:# bind:bind:g" /etc/redis.conf
	dosed "s:dbfilename :dbfilename /var/lib/redis/:g" /etc/redis.conf
	dosed "s:dir ./:dir /var/lib/redis/:g" /etc/redis.conf
	dosed "s:loglevel debug:loglevel notice:g" /etc/redis.conf
	dosed "s:logfile stdout:logfile /var/log/redis/redis.log:g" /etc/redis.conf
	fowners redis:redis /etc/redis.conf
	fperms 0644 /etc/redis.conf

	newconfd "${FILESDIR}/redis.confd" redis
	newinitd "${FILESDIR}/redis.initd" redis

	dodoc 00-RELEASENOTES BUGS Changelog CONTRIBUTING COPYING README TODO
	dodoc design-documents/*
	docinto html
	dodoc doc/*

	dobin src/redis-cli \
	|| die "the redis command line client could not be found"
	dosbin src/redis-benchmark src/redis-server src/redis-check-aof src/redis-check-dump \
	|| die "some redis executables could not be found"
	fperms 0750 /usr/sbin/redis-benchmark

	diropts -m0750 -o redis -g redis
	dodir /var/lib/redis
	dodir /var/log/redis
}

pkg_postinst() {
	einfo "New features of Redis you want to consider enabling in redis.conf:"
	einfo " * unix sockets (using this is highly recommended)"
	einfo " * logging to syslog"
	einfo " * VM aka redis' own swap mechanism"
}