PortSystem 1.0
PortGroup  clang_dependency 1.0

name            ncurses
version         6.5
categories      devel
platforms       darwin freebsd
license         MIT
maintainers     {jmr @jmroot}
description     emulation of curses in System V Release 4.0
long_description \
    The Ncurses (new curses) library is a free software emulation of    \
    curses in System V Release 4.0, and more. It uses Terminfo format,  \
    supports pads and color and multiple highlights and forms           \
    characters and function-key mapping, and has all the other          \
    SYSV-curses enhancements over BSD Curses.

homepage        https://invisible-island.net/ncurses/
master_sites    gnu https://invisible-mirror.net/archives/ncurses/
checksums       rmd160 f8b26cee31b1156da483551ed291cc91c94f7970 \
                sha256 136d91bc269a9a5785e5f9e980bc76ab57428f604ce3e5a5a90cebc767971cc6

# hex.diff from https://opensource.apple.com/source/ncurses/ncurses-57/patches.applied/
patchfiles      hex.diff \
                modules.patch

# Also needed by later clangs.
if {${os.platform} eq "darwin" && ${os.major} < 11 && ${cxx_stdlib} eq "libc++"} {
    clang_dependency.extra_versions 3.7
}

configure.cppflags
configure.ldflags
configure.args  --enable-widec \
                --disable-lib-suffixes \
                --enable-overwrite \
                --with-shared \
                --with-cxx-shared \
                --without-debug  \
                --without-ada \
                --with-manpage-format=normal \
                --without-pkg-config \
                --enable-pc-files \
                --with-pkg-config-libdir="${prefix}/lib/pkgconfig" \
                --disable-mixed-case

if {[string match *clang* ${configure.cxx}] && ${configure.cxx_stdlib} ne ""} {
    configure.env-append    CXXLIBS=-stdlib=${configure.cxx_stdlib}
}

post-configure {
    # check that this doesn't start breaking anything with new versions
    if {[variant_exists universal] && [variant_isset universal]} {
        reinplace s/1UL/1U/g "${worksrcpath}/include/curses.head"
        system -W ${worksrcpath} "ed - include/curses.head < ${filespath}/include_curses.head.ed"
    }
}

post-destroot {
    ln -s ncurses6-config ${destroot}${prefix}/bin/ncursesw6-config
    foreach f {form menu ncurses ncurses++ panel} {
        ln -s lib${f}.a ${destroot}${prefix}/lib/lib${f}w.a
        ln -s ${f}.pc ${destroot}${prefix}/lib/pkgconfig/${f}w.pc
    }
    platform darwin {
        set major [lindex [split $version .] 0]
        set archflags [get_canonical_archflags ld]
        foreach f {form menu ncurses ncurses++ panel} {
            ln -s lib${f}.${major}.dylib ${destroot}${prefix}/lib/lib${f}w.dylib
            ln -s lib${f}.${major}.dylib ${destroot}${prefix}/lib/lib${f}w.${major}.dylib
            reinplace "s|-Wl,-syslibroot,${configure.sdkroot}||" ${destroot}${prefix}/lib/pkgconfig/${f}.pc
            reinplace "s|${archflags}||" ${destroot}${prefix}/lib/pkgconfig/${f}.pc
        }
        ln -s libncurses.${major}.dylib ${destroot}${prefix}/lib/libtermcap.dylib
        reinplace "s|-Wl,-syslibroot,${configure.sdkroot}||" ${destroot}${prefix}/bin/ncurses6-config
        reinplace "s|${archflags}||" ${destroot}${prefix}/bin/ncurses6-config
    }
}

livecheck.regex ${name}-(\[\\d.-\]+)${extract.suffix}