michael@378: ##
michael@378: ## memcached.spec -- OpenPKG RPM Package Specification
michael@378: ## Copyright (c) 2000-2011 OpenPKG Foundation e.V.
michael@378: ##
michael@378: ## Permission to use, copy, modify, and distribute this software for
michael@378: ## any purpose with or without fee is hereby granted, provided that
michael@378: ## the above copyright notice and this permission notice appear in all
michael@378: ## copies.
michael@378: ##
michael@378: ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
michael@378: ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
michael@378: ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
michael@378: ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
michael@378: ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
michael@378: ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
michael@378: ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
michael@378: ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
michael@378: ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
michael@378: ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
michael@378: ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
michael@378: ## SUCH DAMAGE.
michael@378: ##
michael@378:
michael@378: # package versions
michael@576: %define V_memcached 1.4.14
michael@576: %define V_libmemcached 1.0.10
michael@378: %define V_cache_memcached 1.28
michael@378:
michael@378: # package information
michael@378: Name: memcached
michael@378: Summary: Memory Caching Daemon
michael@378: URL: http://memcached.org/
michael@378: Vendor: Brad Fitzpatrick
michael@378: Packager: OpenPKG Foundation e.V.
michael@378: Distribution: OpenPKG Community
michael@378: Class: EVAL
michael@378: Group: System
michael@378: License: GPL
michael@378: Version: %{V_memcached}
michael@576: Release: 20120800
michael@378:
michael@378: # list of sources
michael@378: Source0: http://memcached.googlecode.com/files/memcached-%{V_memcached}.tar.gz
michael@378: Source1: http://download.tangent.org/libmemcached-%{V_libmemcached}.tar.gz
michael@378: Source2: http://www.cpan.org/authors/id/B/BR/BRADFITZ/Cache-Memcached-%{V_cache_memcached}.tar.gz
michael@378: Source3: rc.memcached
michael@378: Patch0: memcached.patch
michael@378:
michael@378: # build information
michael@576: BuildPreReq: OpenPKG, openpkg >= 20100101, gcc, make, perl, perl-openpkg
michael@576: PreReq: OpenPKG, openpkg >= 20100101
michael@576: BuildPreReq: libevent, sasl, libexecinfo
michael@576: PreReq: libevent, sasl, libexecinfo
michael@378:
michael@378: %description
michael@576: Memcached is a high performance, distributed memory object caching
michael@378: system, generic in nature, but intended for use in speeding up
michael@378: dynamic web applications by alleviating database load. Additionally,
michael@378: this package contains Perl and C client APIs to memcached.
michael@378:
michael@378: %track
michael@378: prog memcached:memcached = {
michael@378: version = %{V_memcached}
michael@378: url = http://code.google.com/p/memcached/downloads/list
michael@378: regex = memcached-(\d+(\.\d+)+)\.tar\.gz
michael@378: }
michael@378: prog memcached:cache-memcached = {
michael@378: version = %{V_cache_memcached}
michael@378: url = http://www.cpan.org/authors/id/B/BR/BRADFITZ/
michael@378: regex = Cache-Memcached-(__VER__)\.tar\.gz
michael@378: }
michael@378: prog memcached:libmemcached = {
michael@378: version = %{V_libmemcached}
michael@378: url = http://tangent.org/552/libmemcached.html
michael@378: regex = libmemcached-(__VER__)\.tar\.gz
michael@378: }
michael@378:
michael@378: %prep
michael@378: %setup -q -c
michael@378: %setup -q -T -D -a 1
michael@378: %setup -q -T -D -a 2
michael@378: %patch -p0
michael@379: %{l_shtool} subst \
michael@576: -e 's/b = \(__sync_sub_and_fetch(\&a, 2);\)/return \1/' \
michael@576: memcached-%{V_memcached}/configure
michael@576: %{l_shtool} subst \
michael@379: -e 's; *-Werror;;g' \
michael@379: memcached-%{V_memcached}/configure
michael@379: %{l_shtool} subst \
michael@379: -e 's;\(libdir="\${libdir}\)/\${isainfo_k};\1;g' \
michael@379: libmemcached-%{V_libmemcached}/configure
michael@378:
michael@378: %build
michael@378: # build daemon
michael@378: ( cd memcached-%{V_memcached}
michael@378: libs=""
michael@378: case "%{l_platform -t}" in
michael@378: *-linux* ) libs="$libs -lrt" ;;
michael@379: *-sunos* ) libs="$libs -lsocket -lnsl" ;;
michael@378: esac
michael@378: CC="%{l_cc}" \
michael@378: CFLAGS="%{l_cflags -O}" \
michael@378: CPPFLAGS="%{l_cppflags}" \
michael@378: LDFLAGS="%{l_ldflags}" \
michael@378: LIBS="$libs" \
michael@378: ./configure \
michael@378: --prefix=%{l_prefix} \
michael@378: --with-libevent=%{l_prefix} \
michael@378: --enable-sasl \
michael@378: --enable-sasl-pwdb
michael@378: %{l_make} %{l_mflags -O}
michael@378: ) || exit $?
michael@378:
michael@378: # build C client API
michael@378: ( cd libmemcached-%{V_libmemcached}
michael@576: ( echo "ac_cv_func_malloc_0_nonnull=yes"
michael@576: echo "ac_cv_func_realloc_0_nonnull=yes"
michael@576: echo "ac_cv_env_CXXFLAGS_set=barf"
michael@576: echo "ac_cv_env_CFLAGS_set=barf"
michael@576: echo "ac_cv_header_priv_h=no"
michael@576: echo "ac_cv_header_umem_h=no"
michael@576: ) >config.cache
michael@378: CC="%{l_cc}" \
michael@378: CFLAGS="%{l_cflags -O}" \
michael@378: CPPFLAGS="%{l_cppflags}" \
michael@378: LDFLAGS="%{l_ldflags}" \
michael@378: ./configure \
michael@576: --cache-file=./config.cache \
michael@378: --prefix=%{l_prefix} \
michael@378: --mandir=%{l_prefix}/man \
michael@378: --without-memcached \
michael@378: --enable-libevent \
michael@378: --with-libevent-prefix=%{l_prefix} \
michael@378: --enable-sasl \
michael@378: --with-libsasl2-prefix=%{l_prefix} \
michael@378: --without-libinnodb-prefix \
michael@378: --disable-shared
michael@378: %{l_make} %{l_mflags -O}
michael@378: ) || exit $?
michael@378:
michael@378: # build Perl client API
michael@378: %{l_prefix}/bin/perl-openpkg prepare
michael@378: %{l_prefix}/bin/perl-openpkg -d Cache-Memcached-%{V_cache_memcached} configure build
michael@378:
michael@378: %install
michael@378: # install daemon
michael@378: ( cd memcached-%{V_memcached}
michael@378: %{l_shtool} mkdir -f -p -m 775 \
michael@378: $RPM_BUILD_ROOT%{l_prefix}/bin \
michael@378: $RPM_BUILD_ROOT%{l_prefix}/man/man1
michael@378: %{l_shtool} install -c -s -m 775 \
michael@378: memcached $RPM_BUILD_ROOT%{l_prefix}/bin/
michael@378: %{l_shtool} install -c -m 644 \
michael@378: doc/memcached.1 $RPM_BUILD_ROOT%{l_prefix}/man/man1/
michael@378: ) || exit $?
michael@378:
michael@378: # install C client API
michael@378: ( cd libmemcached-%{V_libmemcached}
michael@576: %{l_make} %{l_mflags} install DESTDIR="$RPM_BUILD_ROOT"
michael@576: ) || exit $?
michael@576:
michael@576: # correct header names and references
michael@576: ( cd $RPM_BUILD_ROOT%{l_prefix}/include
michael@576: mv libmemcachedutil-[0-9]* libmemcachedutil
michael@576: mv libmemcachedprotocol-[0-9]* libmemcachedprotocol
michael@576: rm -rf libhashkit && mv libhashkit-[0-9]* libhashkit
michael@576: rm -rf libmemcached && mv libmemcached-[0-9]* libmemcached
michael@576: find . -type f -print | xargs %{l_shtool} subst \
michael@576: -e 's;\(#include /dev/null`
michael@378: [ ".$memcached_active" = .yes ] && %{l_rc} memcached restart
michael@378: exit 0
michael@378:
michael@378: %preun
michael@378: # before erase, stop service and remove log files
michael@378: [ $1 -eq 0 ] || exit 0
michael@378: %{l_rc} memcached stop 2>/dev/null
michael@378: rm -f $RPM_INSTALL_PREFIX/var/memcached/* >/dev/null 2>&1 || true
michael@378: exit 0
michael@378: