# -*- 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            ProjectCCNx ccnx f0e8a6509d7545db62fdaa14591752c835b46ef8 
checksums               rmd160  49ea819c5c84b108e67bf8b45aa02f4caab4cc88 \
                        sha256  5f3c96bc47bde66fd8df555f0956a0858eb5dd69878078a5f5a4c6068794ed14

name                    ccnx
homepage                http://www.ccnx.org/
license                 GPL-2+ LGPL-2.1+
version                 0.6.1-dev
revision                1
epoch                   0

categories              net ccnx
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. 
                        
use_parallel_build      no
                        
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
}

# patchfiles              patch-macports-customizations.diff

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

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

configure.cflags -DCCNX_DIR=\\\"${prefix}/etc/ccnx\\\" -O0 -g

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}${prefix}/etc/ccnx"

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

    # Create a sample ccndrc file
    system "echo CCND_LOG=${prefix}/var/log/ccnd.log > \"${destroot}${prefix}/etc/ccnx/ccndrc.sample\""
    system "echo CCND_DEBUG=16 >> \"${destroot}${prefix}/etc/ccnx/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}

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

startupitem.pidfile     none
startupitem.start       "su ${ccnxuser} -c \"${prefix}/bin/ccndstart\""
startupitem.stop        "su ${ccnxuser} -c \"${prefix}/bin/ccndstop\""
startupitem.restart     "su ${ccnxuser} -c \"${prefix}/bin/ccndc -f ${prefix}/etc/ccnx/ccnd.conf\""

startupitem.create      yes
startupitem.name        ${name}

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

notes "
In order repo to work, you need to add the following lines at the end of your 
\[~/.bash_profile\]:

  export CCNR_DIRECTORY=${prefix}/etc/ccnx/repo

To configure environment variables for ccnd, edit your 
\[${prefix}/etc/ccnx/ccndrc\]. For example,
  
  CCND_LOG=${prefix}/var/log/ccnd.log
  CCND_DEBUG=16

To add static FIB entries, edit your \[${prefix}/etc/ccnx/ccnd.conf\]. 
For example,

  add ccnx:/ccnx.org udp 224.0.23.170 59695

Upon any networking change event (new connection or awaking from the sleep 
phase), all static FIB entries will be reapplied automatically.

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