# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4

PortSystem      1.0

name            boxbackup
version         0.11.1
revision        4
categories      sysutils net
license         BSD-old
maintainers     {ecronin @ecronin} openmaintainer
description     completely automatic on-line backup system.
long_description    The backup daemon, bbackupd, runs on all machines to \
                    be backed up. The store server daemon, bbstored runs \
                    on a central server. Data is sent to the store \
                    server, which stores all data on local filesystems, \
                    that is, only on local hard drives. Tape or other \
                    archive media is not used. \
                    The system is designed to be easy to set up and run, \
                    and cheap to use. Once set up, there should be no \
                    need for user or administrative intervention, apart \
                    from usual system maintenance.
homepage        http://www.boxbackup.org/
master_sites    ${homepage}svn/box/packages/
extract.suffix  .tgz
checksums       rmd160  17553b3ff06d19f353dbadc0166b7dceaa11c271 \
                sha256  1328b010477259c4767276dbfebab6580e883336cc9d25696c39991b09cc6d32

depends_lib     path:bin/perl:perl5 path:lib/libssl.dylib:openssl port:libedit

configure.args      --sysconfdir=${prefix}/etc \
                    --localstatedir=${prefix}/var/bbackupd \
                    --mandir=${prefix}/share/man

use_parallel_build  no
build.type bsd

post-patch {
    reinplace "s|man/man|share/man/man|g" \
        ${worksrcpath}/infrastructure/makeparcels.pl.in
}

# Update config.guess and config.sub to be able to build on arm64.
depends_build-append    port:automake
post-patch {
    set automake_dirs [glob -directory ${prefix}/share automake-*]
    set automake_dir [lindex [lsort -command vercmp $automake_dirs] end]
    copy -force ${automake_dir}/config.guess ${automake_dir}/config.sub \
        ${worksrcpath}
}

destroot.target     install-backup-client
destroot.keepdirs   ${destroot}${prefix}/etc/boxbackup/bbackupd \
                    ${destroot}${prefix}/var/bbackupd

post-destroot {
    xinstall -d -m 0700 ${destroot}${prefix}/etc/boxbackup/bbackupd
    xinstall -d -m 0755 ${destroot}${prefix}/var/bbackupd

    # Install the documentation
    xinstall -d -m 0755 ${destroot}${prefix}/share/doc/${name}
    file copy {*}[glob ${worksrcpath}/docs/htmlguide/*] \
        ${destroot}${prefix}/share/doc/${name}/
}

variant bdb description {Use Berkeley Data Base to cache bbackupd state} {
    depends_lib-append      port:db47

    configure.args-append   --with-bdb-headers=${prefix}/include/db47 \
                            --with-bdb-lib=${prefix}/lib/db47
}

variant server description {Install bbstored server} {
    add_users bbstored group=bbstored realname=BoxBackup\ Server \
        home=${prefix}/etc/boxbackup/bbstored
    destroot.target-append      install-backup-server
    destroot.keepdirs-append    ${destroot}${prefix}/etc/boxbackup/bbstored
    post-destroot {
        xinstall -o bbstored -g bbstored -d -m 0770 ${destroot}${prefix}/etc/boxbackup/bbstored
    }
}

post-activate {
    if {[file isdir ${prefix}/etc/box]} {
        ui_warn "${prefix}/etc/box should be moved to ${prefix}/etc/boxbackup to complete upgrade."
    }
    if {[variant_isset server]} {
        if {![file exists ${prefix}/etc/boxbackup/raidfile.conf]} {
            ui_warn "${prefix}/etc/boxbackup/raidfile.conf is missing!"
            ui_msg "You need to run 'raidfile-config' to create it."
            ui_msg "See the documentation on server setup for details:"
            #ui_msg "  file://${prefix}/share/doc/boxbackup/server.html"
            ui_msg "  http://www.boxbackup.org/server.html"
        }
        if {![file exists ${prefix}/etc/boxbackup/bbstored.conf]} {
            ui_warn "${prefix}/etc/boxbackup/bbstored.conf is missing!"
            ui_msg "You need to run 'bbstored-config' to create it."
            ui_msg "See the documentation on server setup for details:"
            #ui_msg "  file://${prefix}/share/doc/boxbackup/server.html"
            ui_msg "  http://www.boxbackup.org/server.html"
        }
    }
    if {![file exists ${prefix}/etc/boxbackup/bbackupd.conf]} {
        ui_warn "${prefix}/etc/boxbackup/bbackupd.conf is missing!"
        ui_msg "You need to run 'bbackupd-config' to create it."
        ui_msg "See the documentation on client setup for details:"
        #ui_msg "  file://${prefix}/share/doc/boxbackup/client.html"
        ui_msg "  http://www.boxbackup.org/client.html"
    }
}

test.run        yes

platform darwin {
    startupitem.create          yes
    startupitem.name            BoxBackup
    startupitem.start           "cd ${prefix}/etc/boxbackup"
    if {[variant_isset server]} {
        startupitem.start-append    "\[ -f \"${prefix}/etc/boxbackup/bbstored.conf\" \] \\"
        startupitem.start-append    "\t&& \[ -f \"${prefix}/etc/boxbackup/raidfile.conf\" \] \\"
        startupitem.start-append    "\t&& ${prefix}/sbin/bbstored"
    }
    startupitem.start-append    "\[ -f \"${prefix}/etc/boxbackup/bbackupd.conf\" \] \\"
    startupitem.start-append    "\t&& ${prefix}/sbin/bbackupd"
    startupitem.stop            "/usr/bin/killall -SIGUSR1 bbackupd"
    if {[variant_isset server]} {
        startupitem.stop-append "/usr/bin/killall -SIGUSR1 bbstored"
    }
}