Cover V11, I11
nov2002.tar

Listing 3 OpenPKG packaging for rsync (rsync.spec: RPM specification)

#   package information
Name:         rsync
Summary:      Remote Filesystem Synchronization
URL:          http://rsync.samba.org/
Vendor:       Andrew Tridgell & Paul Mackerras
Packager:     The OpenPKG Project
Distribution: OpenPKG [BASE]
Group:        Filesystem
License:      GPL
Version:      2.5.5
Release:      1.1.0

#   list of sources
Source0:      http://rsync.samba.org/ftp/rsync/rsync-%{version}.tar.gz
Source1:      rsync.conf
Source2:      rc.rsync

#   build information
Prefix:       %{l_prefix}
BuildRoot:    %{l_buildroot}
BuildPreReq:  OpenPKG, openpkg >= 1.1.0
PreReq:       OpenPKG, openpkg >= 1.1.0
AutoReq:      no
AutoReqProv:  no

%description
    Rsync is a replacement for rcp(1) that has many more features.
    Rsync uses the "rsync algorithm" which provides a very fast method
    for bringing remote files into sync. It does this by sending just
    the differences in the files across the link, without requiring
    that both sets of files are present at one of the ends of the link
    beforehand. At first glance this may seem impossible because the
    calculation of differences between two files normally requires
    local access to both files.

%prep
    #   unpack vendor sources
    %setup -q

%build
    #   configure vendor sources
    CC="%{l_cc}" \
    CFLAGS="%{l_cflags -O}" \
    ./configure \
        --prefix=%{l_prefix} \
        --disable-debug \
        --with-included-popt

    #   build vendor sources
    %{l_make} %{l_mflags -O}

%install
    #   perform vendor installation
    rm -rf $RPM_BUILD_ROOT
    %{l_make} %{l_mflags} install \
        prefix=$RPM_BUILD_ROOT%{l_prefix} \
        exec_prefix=$RPM_BUILD_ROOT%{l_prefix}

    #   post-adjust vendor installation
    strip $RPM_BUILD_ROOT%{l_prefix}/bin/* >/dev/null 2>&1 || true
    mv $RPM_BUILD_ROOT%{l_prefix}/man/man5/rsyncd.conf.5 \
       $RPM_BUILD_ROOT%{l_prefix}/man/man5/rsync.conf.5

    #   provide default (deamon) configuration
    %{l_shtool} mkdir -f -p -m 755 \
       $RPM_BUILD_ROOT%{l_prefix}/etc/rsync
    %{l_shtool} install -c -m 644 \
        -e 's;@l_prefix@;%{l_prefix};g' \
        -e 's;@l_nusr@;%{l_nusr};g' \
        -e 's;@l_ngrp@;%{l_ngrp};g' \
        -e 's;@version@;%{version};g' \
        %{SOURCE rsync.conf} $RPM_BUILD_ROOT%{l_prefix}/etc/rsync/
    %{l_shtool} install -c -m 644 /dev/null \
        $RPM_BUILD_ROOT%{l_prefix}/etc/rsync/rsync.passwd
    %{l_shtool} mkdir -f -p -m 755 \
        $RPM_BUILD_ROOT%{l_prefix}/var/rsync

    #   provide run-command script
    %{l_shtool} mkdir -f -p -m 755 \
        $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
    %{l_shtool} install -c -m 755 \
        -e 's;@l_prefix@;%{l_prefix};g' \
        -e 's;@l_musr@;%{l_musr};g' \
        -e 's;@l_mgrp@;%{l_mgrp};g' \
        %{SOURCE rc.rsync} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/

    #   determine binary package files
    %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
        %{l_files_std} '%config %{l_prefix}/etc/rsync/rsync.*'

%files -f files

%clean
    rm -rf $RPM_BUILD_ROOT