# -*- 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               clang_dependency 1.0
PortGroup               gcc_dependency 1.0
PortGroup               muniversal 1.0

name                    libiconv
version                 1.18
revision                2
categories              textproc
license                 {LGPL-2+ GPL-3+}
maintainers             {ryandesign @ryandesign}
platforms               darwin freebsd linux
description \
    Character set conversion library
long_description \
    A character-set conversion library which implements \
    the iconv() API for dealing with unicode and other types \
    of conversion.
homepage                https://www.gnu.org/software/libiconv
master_sites            gnu
checksums               rmd160  7daf36870dc6258ef8570a727b9b75af2ab65d7f \
                        sha256  3b08f5f4f9b4eb82f151a7040bfd6fe6c6fb922efe4b1659c66ea933276965e8 \
                        size    5822590

depends_build-append    port:gperf
depends_skip_archcheck  gperf

patchfiles              patch-src-Makefile.in-darwin.diff

post-patch {
    reinplace -E "s|^(CFLAGS *=).*|\\1 ${configure.cflags} -isysroot${configure.sysroot}|" ${worksrcpath}/Makefile.devel
    touch -W ${worksrcpath} aclocal.m4 srclib/Makefile.in configure config.h.in
}

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

configure.checks.implicit_function_declaration.whitelist-append alignof strchr unreachable MIN MAX

configure.cppflags
configure.ldflags
configure.args \
    ac_cv_prog_AWK=/usr/bin/awk \
    ac_cv_path_GREP=/usr/bin/grep \
    ac_cv_path_SED=/usr/bin/sed \
    --enable-static \
    --docdir=${prefix}/share/doc/${name} \
    --without-libiconv-prefix \
    --without-libintl-prefix \
    --disable-nls \
    --enable-extra-encodings

set autotools_v         1.18

build.cmd               ${build.cmd} CC=${configure.cc} -f Makefile.devel && ${build.cmd}

test.run                yes
test.target             check

platform darwin {
    patchfiles-append   patch-utf8mac.diff
}

platform freebsd {
    patchfiles-append   patch-Makefile.devel
}

post-destroot {
    if {[file exists ${destroot}${prefix}/lib/charset.alias]} {
        delete ${destroot}${prefix}/lib/charset.alias
    }
}

if {![info exists universal_possible]} {
    set universal_possible [expr {${os.universal_supported} && [llength ${configure.universal_archs}] >= 2}]
}

if {${universal_possible} && [variant_isset universal]} {
    # When cross-compiling, can guess wrong endian value.
    lappend merger_configure_env(ppc)     cl_cv_sys_endian='big endian'
    lappend merger_configure_env(ppc64)   cl_cv_sys_endian='big endian'
    lappend merger_configure_env(i386)    cl_cv_sys_endian='little endian'
    lappend merger_configure_env(x86_64)  cl_cv_sys_endian='little endian'
    lappend merger_configure_env(arm64)   cl_cv_sys_endian='little endian'

    foreach arch ${supported_archs} {
        # See https://trac.macports.org/ticket/18440
        lappend merger_configure_env(${arch}) \
            ac_cv_func_malloc_0_nonnull='yes' \
            gl_cv_func_malloc_0_nonnull='1' \
            am_cv_func_iconv='yes' \
            am_cv_proto_iconv_arg1='const'
    }
}
