# -*- 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
PortGroup           cmake 1.1

name                mosquitto
version             2.0.9
revision            1

categories          net devel
platforms           darwin
license             {EPL-1 EDL-1}

maintainers         {gmail.com:slewsys @slewsys} openmaintainer

description         Mosquitto is an open-source MQTT 3.1/3.1.1 broker

long_description    \
    MQTT is a machine-to-machine / "Internet of Things" connectivity protocol. \
    Mosquito provides an open-source MQTT v3.1.1 broker (i.e., server) and \
    both  C and C++ client libraries.

homepage            https://mosquitto.org
master_sites        http://mosquitto.org/files/source/

checksums           rmd160  6925455f51b6c79ebd160aba2f3709864aa5c05d \
                    sha256  1b8553ef64a1cf5e4f4cfbe098330ae612adccd3d37f35b2db6f6fab501b01d4 \
                    size    757878

depends_build-append \
                    path:bin/xsltproc:libxslt

depends_lib         port:c-ares \
                    port:libwebsockets \
                    port:tcp_wrappers \
                    path:lib/libssl.dylib:openssl

depends_test-append \
                    port:python27

configure.args-append \
                    -DUSE_LIBWRAP:BOOL=ON \
                    -DWITH_SRV:BOOL=ON \
                    -DWITH_WEBSOCKETS:BOOL=ON

test.run            yes
test.target         -C ${build.dir}/test test

pre-build {
    reinplace -E "s|\\.so\\.\[^\[:space:\]\]+|.dylib |g" ${worksrcpath}/config.mk
}

pre-test {
    if {![file exist ${build.dir}/test]} {
        foreach path [list config.mk test lib/mosquitto.h lib/cpp/mosquittopp.h src/mosquitto_broker.h src/mosquitto_plugin.h] {
            copy -force ${worksrcpath}/${path} ${build.dir}/${path}
        }
    }

    fs-traverse path ${build.dir}/test {
        if {[file tail ${path}] eq "Makefile"} {
            reinplace -E "s|\\.so\\.\[^\[:space:\]\]+|.dylib|g" $path
            reinplace -E "s|\\.so\[\[:space:\]\]+|.dylib |g" $path
        } elseif {[string match "*.py" ${path}]} {
            reinplace "s|^#!/usr/bin/env python$|#!${prefix}/bin/python2.7|" $path
            reinplace {s|[[:<:]]LD_LIBRARY_PATH|DY&|} $path
        }
    }

    # `auth_plugin.c' and `auth_plugin_acl.c' have missing dependencies
    reinplace "s|^all :.*|all : auth_plugin_pwd.dylib auth_plugin_v2.dylib auth_plugin_msg_params.dylib 08|" \
        ${build.dir}/test/broker/c/Makefile
    # Test target 08 fails due to expired certificate.
    # Test target 09 fails due to I/O error when launching broker.
    reinplace "s|^test :.*|test : test-compile 01 02 03 04 05 06 07 10 11|" \
        ${build.dir}/test/broker/Makefile
    # Test target 02-subpub-qos.*-bad.* fails due to socket error
    reinplace "s|\\./02-subpub-qos.*-bad.*|#&|" \
        ${build.dir}/test/broker/Makefile
    # `09-util-utf8-validate.c' fails to compile due to invalid encoding.
    reinplace "s|^09 :.*|09 : 09-util-topic-matching.test 09-util-topic-tokenise.test|" \
        ${build.dir}/test/lib/c/Makefile \
        ${build.dir}/test/lib/cpp/Makefile
    # Test target 08 fails due to expired certificate.
    reinplace "s|^all :.*|all : 01 02 03 04 09|" \
        ${build.dir}/test/lib/cpp/Makefile
    # Test targets ./08.* fail due to expired certificate.
    reinplace "s|\\./08|#./08|" \
        ${build.dir}/test/lib/Makefile
    # Test target 09-util-utf8-validate fails due to invalid encoding.
    reinplace "s|\\./09-util-utf8|#./09-util-utf8|" \
        ${build.dir}/test/lib/Makefile
}

set mosquitto_user  mosquitto
set mosquitto_group mosquitto

add_users ${mosquitto_user} group=${mosquitto_group} shell=/bin/sh \
    home=${prefix}/var/lib/${name} realname=Mosquitto\ MQTT\ Server

startupitem.create  yes
startupitem.init    \
    "MOSQUITTO=${prefix}/sbin/mosquitto"
startupitem.start    \
    "su ${mosquitto_user} -c \"\${MOSQUITTO}\""
startupitem.stop    \
    "su ${mosquitto_user} -c \"\pkill -U ${mosquitto_user} mosquitto\""

livecheck.type  regex
livecheck.url   ${master_sites}
livecheck.regex ${name}-(\\d+\\.\\d+\\.\\d+)\\.tar
