# -*- 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
# $Id$

PortSystem              1.0
PortGroup               github 1.0

github.setup            named-data ccnx ccnx-0.7.1-ndn-1
checksums               rmd160  e31ece65157a108859a1dd3bcff76a6a9f45f57c \
                        sha256  6fe26ed5e8a93d33a344a59257efce2d5fee1e8a35df31dd443601b06e9d46ab

name                    ccnx
homepage                http://www.ccnx.org/
license                 GPL-2+ LGPL-2.1+
version                 0.7.1.ndn.1
epoch                   1

categories              net
platforms               darwin
maintainers             ucla.edu:alexander.afanasyev

description             ProjectCCNx implementation of Content Centric Networking (CCN) / \
                        Named Data Networking (NDN) architecture

long_description        Project CCNx(r) exists to develop, promote, and evaluate a new \
                        approach to communication architecture we call content-centric \
                        networking.  We seek to carry out this mission by creating and \
                        publishing open protocol specifications and an open source \
                        software reference implementation of those protocols.  We provide \
                        support for a community of people interested in experimentation, \
                        research, and building applications with this technology, all \
                        contributing to its evolution.

depends_lib-append      port:openssl \
                        port:expat \
                        port:libpcap \
                        port:libxml2 \
                        port:asciidoc

set ccnxuser            ccnx
set ccnxgroup           ccnx
set ccnxdir             ${prefix}/etc/ccnx

add_users               ${ccnxuser} shell=/bin/sh group=${ccnxgroup} \
                        home=${ccnxdir} \
                        realname=CCNx\ Account

default_variants        +java +apps

variant java description {Enable Java API build} {
    configure.env-delete   BUILD_JAVA=false
}

variant apps requires java description {Enable build of reference applications} {
    configure.env-delete   BUILD_APPS=false
}

post-patch {
    reinplace   "s|\$HOME/.ccnx/|${ccnxdir}/|g" ${worksrcpath}/csrc/util/ccndstart.sh
}

configure.env-append    OPENSSL_CFLAGS=-I${prefix}/include \
                        OPENSSL_LIBS=-L${prefix}/lib \
                        INSTALL_BASE=${prefix} \
                        INSTALL_MAN=${prefix}/share/man \
                        BUILD_JAVA=false \
                        BUILD_APPS=false \

configure.cflags        -DCCNX_DIR=\\\"${ccnxdir}\\\" \
                        -O2

build.env-append        OPENSSL_CFLAGS=-I${prefix}/include \
                        OPENSSL_LIBS=-L${prefix}/lib \
                        INSTALL_BASE=${prefix} \


post-destroot {
    # Create a configuration directory, which also a home directory for ${ccnxuser}
    xinstall -d -o ${ccnxuser} -g ${ccnxgroup} "${destroot}${ccnxdir}"

    # Copy a sample ccnd.conf file
    xinstall -o ${ccnxuser} -g ${ccnxgroup} \
        ${worksrcpath}/csrc/libexec/ccnd.conf.sample \
        ${destroot}${ccnxdir}/

    # Create a sample ccndrc file
    system "echo CCNR_GLOBAL_PREFIX=/ndn/keys > \"${destroot}${ccnxdir}/ccndrc.sample\""
    system "echo CCND_LOG=${prefix}/var/log/ccnd.log >> \"${destroot}${ccnxdir}/ccndrc.sample\""
    system "echo CCND_DEBUG=16 >> \"${destroot}${ccnxdir}/ccndrc.sample\""
}

post-activate {
    # log file needs to be owned by ${ccnxuser}, otherwise ccnd will not be able to write to it
    file mkdir "${prefix}/var/log"
    touch "${prefix}/var/log/ccnd.log"
    file attributes "${prefix}/var/log/ccnd.log" -owner ${ccnxuser} -group ${ccnxgroup}
    file mkdir "${prefix}/var/run/ccnd"
    file attributes "${prefix}/var/run/ccnd" -owner ${ccnxuser} -group ${ccnxgroup}

    # Make sure initial conf files are present and setup correctly
    foreach f { ccnd.conf ccndrc } {
        if {![file exists ${ccnxdir}/${f}]} {
            file copy ${ccnxdir}/${f}.sample \
                ${ccnxdir}/${f}
        }
    }
}

startupitem.pidfile     none
startupitem.start       "su ${ccnxuser} -c \"${prefix}/bin/ccndstart\" && sleep 5 && su ${ccnxuser} -c \"${prefix}/bin/ccnd-autoconfig -d ${prefix}/var/run/ccnd/autoconfig.pid &\""
startupitem.stop        "su ${ccnxuser} -c \"kill `cat ${prefix}/var/run/ccnd/autoconfig.pid`\" ; su ${ccnxuser} -c \"${prefix}/bin/ccndstop\""
startupitem.restart     "su ${ccnxuser} -c \"${prefix}/bin/ccndc -f ${ccnxdir}/ccnd.conf\" && su ${ccnxuser} -c \"${prefix}/bin/ccnd-autoconfig\""

variant no_autoconf description {Disable automatic detection of local ccnx hub} {
    startupitem.start       "su ${ccnxuser} -c \"${prefix}/bin/ccndstart\""
    startupitem.restart     "su ${ccnxuser} -c \"${prefix}/bin/ccndc -f ${ccnxdir}/ccnd.conf\""
}

startupitem.create      yes
startupitem.name        ${name}

startupitem.netchange   yes
startupitem.logevents   yes
startupitem.logfile     ${prefix}/var/log/ccnx.log

notes "

You can add the following line into \"${ccnxdir}/ccndrc\" in order to automatically
start ccnx repo for the /ndn/keys prefix:

    CCNR_GLOBAL_PREFIX=/ndn/keys

For more information and documentation, refer to man pages and http://www.ccnx.org website.

If you have your public key signed by NDN testbed operators and you installed the certificate
\(using ndn-install-pubcert command\), you can enable automatic configuration of the default
route using your key.  To do so, you need to run the following commands once:

  # extract public key from ccnx user
  sudo HOME=${ccnxdir} ndn-extract-public-key > /tmp/ccnx.pem

  # sign public key of the ccnx user
  ndn-sign-key -i \"ccnx-autoconfig\" /tmp/ccnx.pem

  # install certification of the public key
  sudo HOME=${ccnxdir} ndn-install-pubcert /tmp/ccnx.pubcert

"
