Portfile

# $Id: Portfile 22004 2007-02-13 20:50:43Z pipping@macports.org $
PortSystem 1.0

name cfengine
version 2.1.19p1
categories sysutils
maintainers nomaintainer@macports.org
description a tool for setting up and maintaining computer systems
long_description Cfengine, or the configuration engine is an \
autonomous agent and a middle to high level \
policy language for building expert systems \
which administrate and configure large computer \
networks.
homepage http://www.cfengine.org/
master_sites ftp://ftp.iu.hio.no/pub/cfengine/ \
ftp://sunsite.uio.no/pub/cfengine/ \
http://ftp.us.xemacs.org/ftp/pub/cfengine/cfengine-ftp/
checksums sha1 797392b67c6624ed7483f72f127b7873af9249da
platforms darwin

depends_lib port:db4 \
port:openssl \
port:pcre

post-patch {
cd ${worksrcpath}
foreach manfile [glob doc/*.8] {
reinplace "s|/usr/local|${prefix}|g" $manfile
reinplace "s|/var/cfengine|${prefix}&|g" $manfile
}
}

set cfworkdir ${prefix}/var/cfengine

configure.args --mandir='\${prefix}/share/man' \
--infodir='\${prefix}/share/info' \
--with-workdir="${cfworkdir}" \
--with-berkeleydb=default \
--with-openssl=default \
--with-pcre=default \
--with-docs

build.args ps_DATA=
destroot.args ps_DATA=

pre-destroot {
if {$env(USER) != "root"} {
ui_msg "-----------------------------------------------------------"
ui_msg "Note that you are not running as root, so files installed"
ui_msg "by this port will not end up with proper ownership and"
ui_msg "likely not work correctly with ${name}."
ui_msg "-----------------------------------------------------------"
}
}

destroot.keepdirs ${destroot}${cfworkdir}/bin \
${destroot}${cfworkdir}/inputs \
${destroot}${cfworkdir}/modules \
${destroot}${cfworkdir}/outputs \
${destroot}${cfworkdir}/ppkeys \
${destroot}${cfworkdir}/rpc_in \
${destroot}${cfworkdir}/rpc_out \
${destroot}${cfworkdir}/state
post-destroot {
# Create cfengine directories
xinstall -d -m 0755 ${destroot}${cfworkdir}
# Create cfengine sub-directories
foreach subdir {bin modules state} {
xinstall -d -m 0755 ${destroot}${cfworkdir}/${subdir}
}
foreach subdir {inputs masterfiles/inputs outputs ppkeys rpc_in rpc_out} {
xinstall -d -m 0700 ${destroot}${cfworkdir}/${subdir}
}
# Create distribution sample conf files
set hostname [exec hostname]
set host [lindex [split ${hostname} {.}] 0]
set domain [join [lrange [split ${hostname} {.}] 1 end] {.}]
set timezone [exec date +%Z]
foreach conf {cfagent.conf cfservd.conf update.conf cfrun.hosts} {
xinstall -m 0644 ${filespath}/${conf}.in \
${destroot}${cfworkdir}/masterfiles/inputs/${conf}-dist
reinplace "s|__PREFIX|${prefix}|g" \
${destroot}${cfworkdir}/masterfiles/inputs/${conf}-dist
reinplace "s|__CFWORKDIR|${cfworkdir}|g" \
${destroot}${cfworkdir}/masterfiles/inputs/${conf}-dist
reinplace "s|__HOST|${host}|g" \
${destroot}${cfworkdir}/masterfiles/inputs/${conf}-dist
reinplace "s|__DOMAIN|${domain}|g" \
${destroot}${cfworkdir}/masterfiles/inputs/${conf}-dist
reinplace "s|__TIMEZONE|${timezone}|g" \
${destroot}${cfworkdir}/masterfiles/inputs/${conf}-dist
}
# Create startup rc script (if non-Darwin)
if {![variant_isset darwin]} {
xinstall -d -m 0755 ${destroot}${prefix}/etc/rc.d
xinstall -m 0755 ${filespath}/${name}.sh.in \
${destroot}${prefix}/etc/rc.d/${name}.sh
reinplace "s|__PREFIX|${prefix}|" \
${destroot}${prefix}/etc/rc.d/${name}.sh
reinplace "s|__CFWORKDIR|${cfworkdir}|" \
${destroot}${prefix}/etc/rc.d/${name}.sh
}
}

post-activate {
# Make sure initial conf files are present and setup correctly
if {![file exists ${cfworkdir}/inputs/update.conf]} {
xinstall -m 0644 ${cfworkdir}/masterfiles/inputs/update.conf-dist \
${cfworkdir}/inputs/update.conf
}
foreach conf {cfagent.conf cfservd.conf update.conf cfrun.hosts} {
if {![file exists ${cfworkdir}/masterfiles/inputs/${conf}]} {
xinstall -m 0644 ${cfworkdir}/masterfiles/inputs/${conf}-dist \
${cfworkdir}/masterfiles/inputs/${conf}
}
}
# Check for root public-private keys, create if missing
if {![file exists ${cfworkdir}/ppkeys/localhost.priv] \
|| ![file exists ${cfworkdir}/ppkeys/localhost.pub]} {
if {[file exists ${cfworkdir}/ppkeys/localhost.priv]} {
delete ${cfworkdir}/ppkeys/localhost.priv
}
if {[file exists ${cfworkdir}/ppkeys/localhost.pub]} {
delete ${cfworkdir}/ppkeys/localhost.pub
}
system "${prefix}/sbin/cfkey"
}
}

variant psdocs {
depends_build bin:tex:teTeX \
bin:texinfo:texinfo
build.args-delete ps_DATA=
destroot.args-delete ps_DATA=
}

platform darwin {
startupitem.create yes
startupitem.name Cfengine
startupitem.start "\[ -x ${cfworkdir}/bin/cfservd \] && ${cfworkdir}/bin/cfservd"
startupitem.start-append "\[ -x ${cfworkdir}/bin/cfenvd \] && ${cfworkdir}/bin/cfenvd -H"
startupitem.start-append "\[ -x ${cfworkdir}/bin/cfexecd \] && ${cfworkdir}/bin/cfexecd"
startupitem.start-append "(\[ -x ${cfworkdir}/bin/cfservd \] && \[ -x ${cfworkdir}/bin/cfenvd \] && \\"
startupitem.start-append " \[ -x ${cfworkdir}/bin/cfexecd \] && \[ -x ${cfworkdir}/bin/cfagent \]) \\"
startupitem.start-append "\t|| ${prefix}/sbin/cfagent --no-splay -f update.conf"
startupitem.stop "/usr/bin/killall -SIGUSR1 cfagent 2>/dev/null"
startupitem.stop-append "/usr/bin/killall -SIGUSR1 cfexecd 2>/dev/null"
startupitem.stop-append "/usr/bin/killall -SIGUSR1 cfenvd 2>/dev/null"
startupitem.stop-append "/usr/bin/killall -SIGUSR1 cfservd 2>/dev/null"
}

files