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

PortSystem          1.0
PortGroup           makefile 1.0
PortGroup           app 1.0

name                linrad
categories          science comms
platforms           darwin macosx
license             MIT
maintainers         {ra1nb0w @ra1nb0w} openmaintainer
description         Linrad is a free multi-OS SDR receiver (A Software Defined Radio receiver).
long_description    ${description}
homepage            https://www.sm5bsz.com/linuxdsp/linrad.htm

fetch.type          svn
worksrcdir          trunk
svn.url             https://svn.code.sf.net/p/linrad/code/trunk/
svn.revision        997
version             20211204-${svn.revision}
revision            0

supported_archs     x86_64 i386 arm64
universal_variant   no

# set the arch to use during build
if {${build_arch} eq "i386"} {
    set linrad_arch 32
    build.target xlinrad
} else {
    set linrad_arch 64
    build.target xlinrad64
}

patchfiles-append \
    fix_data_directory.patch \
    fix_help_directory.patch \
    fix_errors_directory.patch \
    fix_ac_path_prog.patch \
    fix_makefile.in.patch \
    fix_march.patch \
    linrad.patch

depends_build-append \
    port:pkgconfig \
    port:nasm

depends_lib-append \
    port:xorg-libX11 \
    port:xorg-libXext \
    port:portaudio \
    port:libusb-compat \
    path:lib/pkgconfig/libusb-1.0.pc:libusb

use_autoreconf yes
use_configure  yes

configure.args-append \
    --with-portaudio-${linrad_arch} \
    --with-x11-${linrad_arch} \
    --with-xext-${linrad_arch} \
    --with-libusb0-${linrad_arch} \
    --with-libusb1-${linrad_arch}

pre-configure {
    reinplace "s|@LINRAD_BINARY@|${prefix}/bin/xlinrad${linrad_arch}|" ${worksrcpath}/bin/linrad
    reinplace "s|@HELP_DIR@|${prefix}/share/${name}|g" ${worksrcpath}/help.c
    reinplace "s|@HELP_DIR@|${prefix}/share/${name}|g" ${worksrcpath}/menu.c
}

destroot {
    xinstall -m 0755 -d ${destroot}${prefix}/bin
    xinstall -m 0755 -W ${worksrcpath} bin/linrad xlinrad${linrad_arch} ${destroot}${prefix}/bin
    xinstall -m 0755 -d ${destroot}${prefix}/share/doc/${name}
    xinstall -m 0644 {*}[glob -directory ${worksrcpath} z*.txt] \
        ${destroot}${prefix}/share/doc/${name}
    xinstall -m 0755 -d ${destroot}${prefix}/share/${name}
    xinstall -m 0644 -W ${worksrcpath} help.lir ${destroot}${prefix}/share/${name}
    xinstall -m 0644 -W ${worksrcpath} errors.lir ${destroot}${prefix}/share/${name}
}

variant airspy description "Install ${name} with support for airspy" {
    depends_lib-append port:airspy
    configure.args-append --with-airspy-${linrad_arch}
}

variant airspyhf description "Install ${name} with support for airspy hf+" {
    depends_lib-append port:airspyhf
    configure.args-append --with-airspyhf-${linrad_arch}
}

variant bladerf description "Install ${name} with support for bladerf" {
    depends_lib-append port:bladeRF
    configure.args-append --with-bladerf-${linrad_arch}
}

variant perseus description "Install ${name} with support for perseus" {
    depends_lib-append port:perseus-sdr
    configure.args-append --with-perseus-${linrad_arch}
}

variant rtlsdr description "Install ${name} with support for rtl-sdr" {
    depends_lib-append port:rtl-sdr
    configure.args-append --with-rtlsdr-${linrad_arch}
}

# only available on 64 bit
if {${build_arch} eq "x86_64"} {
    variant sdrplay description "Install ${name} with support for SDRplay" {
        depends_lib-append port:SDRplay
        configure.args-append --with-sdrplay2-${linrad_arch} 
    }
    default_variants +sdrplay
}

default_variants +airspy +airspyhf +rtlsdr

app.create yes
app.name Linrad
app.executable linrad
app.icon ${filespath}/icon.png
app.retina yes

notes {
The configuration is stored at ~/.linrad
The data files are stored at ~/.linrad/data

To use X11 you need to install the xorg-server port.
For optimum performance use MIT-SHM as X11 extension.

Note: if you have an empty configuration, you must run \
linrad from the console the first time.
}
