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

name                    libiconv
version                 1.16
revision                1
checksums               rmd160  770adf60b3099e5dcae434c1b6301d8c58330a49 \
                        sha256  e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04 \
                        size    5166734

categories              textproc
license                 {LGPL-2+ GPL-3+}
maintainers             {ryandesign @ryandesign}
platforms               darwin freebsd linux
homepage                https://www.gnu.org/software/libiconv/
master_sites            gnu
use_parallel_build      yes

supported_archs         ppc ppc64 i386 x86_64 arm64

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.

depends_build           port:gperf

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

set myprefix ${prefix}

# This port is used by clang-3.4 to bootstrap libcxx
subport ${name}-bootstrap {
    set myprefix ${prefix}/libexec/libcxx-bootstrap
    configure.pre_args      --prefix=${myprefix}
    depends_build-replace   port:gperf port:gperf-bootstrap
    configure.env-append    PATH=${myprefix}/bin:$env(PATH)
    build.env-append        PATH=${myprefix}/bin:$env(PATH)
    # Avoid macports-clang dep (doesn't use C++ anyway)
    configure.cxx_stdlib
    compiler.whitelist      clang llvm-gcc-4.2 gcc-4.2 apple-gcc-4.2
}
# Also needed by later clangs.
if {${os.platform} eq "darwin" && ${os.major} < 11 && ${cxx_stdlib} eq "libc++"} {
    clang_dependency.extra_versions 3.7
}

configure.cmd-prepend   mv Makefile.devel Makefile.devel.orig \
                        && sed -E {"s|^(CFLAGS *=).*|\1 $CFLAGS|"} < Makefile.devel.orig \
                        | sed -E {"/^CFLAGS *=/s| -arch +[^ ]+||"} > Makefile.devel &&
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=${myprefix}/share/doc/${name} \
    --without-libiconv-prefix \
    --without-libintl-prefix \
    --disable-nls \
    --enable-extra-encodings

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}${myprefix}/lib/charset.alias]} {
        delete ${destroot}${myprefix}/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'
    }
}
