#!/bin/sh
##
##  perl-openpkg -- OpenPKG utility for use in Perl module packages
##  Copyright (c) 2002-2003 Ralf S. Engelschall <rse@engelschall.com> 
##

#   hard-coded OpenPKG instance prefix
l_prefix="/kolab"

#   make sure we are running in the RPM environment
if [ ".$RPM_BUILD_ROOT" = . ]; then
    echo "perl-openpkg:ERROR: \$RPM_BUILD_ROOT not set" 1>&2
    exit 1
fi
if [ ".$RPM_BUILD_DIR" = . ]; then
    echo "perl-openpkg:ERROR: \$RPM_BUILD_DIR not set" 1>&2
    exit 1
fi

#   helper function for logging
log () {
    echo "perl-openpkg: $*" 1>&2
}

cmd="$1"
shift
case $cmd in
    prolog )
        #   prepare Perl module installation area
        log "prepare Perl module installation area"
        rm -rf $RPM_BUILD_ROOT
        l_shtool=`${l_prefix}/bin/rpm --eval '%{l_shtool}'`
        ${l_shtool} mkdir -f -p -m 755 ${RPM_BUILD_ROOT}${l_prefix}/lib/perl

        #   prepare Perl executable wrapper
        log "prepare Perl executable wrapper"
        eval `${l_prefix}/bin/perl -V:installarchlib -V:installprivlib -V:installsitearch -V:installsitelib`
        tag="${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}-${RPM_PACKAGE_RELEASE}"
        perl="${RPM_BUILD_DIR}/perl-$tag"
        echo "#!/bin/sh" >$perl
        echo "exec ${l_prefix}/bin/perl \\" >>$perl
        echo " -I${RPM_BUILD_ROOT}${installarchlib}  \\" >>$perl
        echo " -I${RPM_BUILD_ROOT}${installprivlib}  \\" >>$perl
        echo " -I${RPM_BUILD_ROOT}${installsitearch} \\" >>$perl
        echo " -I${RPM_BUILD_ROOT}${installsitelib}  \\" >>$perl
        echo " \"\$@\"" >>$perl
        chmod a+x $perl
        ;;

    install )
        #   determine build parameters
        log "determine build parameters"
        tag="${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}-${RPM_PACKAGE_RELEASE}"
        perl="${RPM_BUILD_DIR}/perl-$tag"
        perl_args="PREFIX=${RPM_BUILD_ROOT}${l_prefix} INSTALLDIRS=site"
        perl_args="${perl_args} PERL=${perl} FULLPERL=${perl}"
        make=`${l_prefix}/bin/rpm --eval '%{l_make} %{l_mflags}'`
        make_args="PERL=${perl} FULLPERL=${perl}"

        #   optionally enter sub-directory of module
        oldpwd=`pwd`
        if [ ".$1" = ".-d" ]; then
            shift
            dir="$1"
            shift
            if [ -d $dir ]; then
                log "entering sub-directory $dir"
                cd $dir
            else
                dir=`echo "$dir" | sed -e 's;^.*/\([^/]*\)\.tar\.gz$;\1;' -e 's;^.*/\([^/]*\)\.tgz$;\1;'`
                if [ -d $dir ]; then
                    log "entering sub-directory $dir"
                    cd $dir
                fi
            fi
        fi

        #   optionally provide installation path
        if [ ".$1" = ".-p" ]; then
            shift
            sitelib="$1"
            shift
            perl_args="${perl_args} INSTALLSITELIB=$sitelib"
        fi

        #   configuring Perl module
        log "configuring Perl module"
        chmod -R u+rw Makefile.PL
        cp Makefile.PL Makefile.PL.orig
        sed -e "s:\$^X:'$perl':g" <Makefile.PL.orig >Makefile.PL
        $perl Makefile.PL ${1+"$@"} $perl_args </dev/null

        #   building Perl module
        log "building Perl module"
        $make $make_args pure_all

        #   installing Perl module
        log "installing Perl module"
        $make $make_args pure_install
        ;;

    epilog )
        #   pruning installation area
        log "pruning installation area"
        find ${RPM_BUILD_ROOT}${l_prefix} \
            -name perllocal.pod -print | xargs rm -f
        find ${RPM_BUILD_ROOT}${l_prefix} \
            -name .packlist -print | xargs rm -f
        find ${RPM_BUILD_ROOT}${l_prefix} \
            -type d -depth -print | (xargs rmdir >/dev/null 2>&1 || true)

        #   determining installation files
        log "determining installation files"
        tag="${RPM_PACKAGE_NAME}-${RPM_PACKAGE_VERSION}-${RPM_PACKAGE_RELEASE}"
        perl="${RPM_BUILD_DIR}/perl-$tag"
        eval `${l_prefix}/bin/perl -V:installarchlib -V:installprivlib -V:installsitearch -V:installsitelib`
        l_rpmtool=`${l_prefix}/bin/rpm --eval '%{l_rpmtool}'`
        eval ${l_rpmtool} files -v -ofiles -r${RPM_BUILD_ROOT} \
            `${l_prefix}/bin/rpm --eval '%{l_files_std}'` \
            "\"%not %dir ${l_prefix}/lib/perl\"" \
            "\"%not %dir ${l_prefix}/lib/perl/*\"" \
            "\"%not %dir $installarchlib\"" \
            "\"%not %dir $installprivlib\"" \
            "\"%not %dir $installsitearch\"" \
            "\"%not %dir $installsitelib\"" \
            "\"%not %dir $installarchlib/auto\"" \
            "\"%not %dir $installprivlib/auto\"" \
            "\"%not %dir $installsitearch/auto\"" \
            "\"%not %dir $installsitelib/auto\"" \
            "\"%not ${l_prefix}/man\""

        #   cleanup
        rm -f $perl
        ;;
esac

