# $Id: Portfile 92453 2012-04-28 23:18:23Z jeremyhu@macports.org $

PortSystem              1.0
name                    cctools
# XCode 4.3
version                 822
revision                2
categories              devel
platforms               darwin
maintainers             mfeiri jeremyhu openmaintainer
license                 {APSL-2.0 GPL-2+}
description             Compiler Tools for Mac OS X and Darwin
long_description        A set of essential tools to support development \
                        on Mac OS X and Darwin. Conceptually similar \
                        similar to binutils on other platforms.

homepage                http://opensource.apple.com/source/${name}/
master_sites            http://opensource.apple.com/tarballs/${name}/

checksums               rmd160  1caf207acbf421cdc975926a392fc75dc1d2594c \
                        sha256  dfaa9bdbd023524d47429674f64d2d5ea393123dabf90868be0aa17f61f45289

depends_lib             port:cctools-headers
depends_build           port:ld64

patchfiles              PR-11136237.patch lto.patch cctools-822-no-lto.patch

if {${os.arch} == "powerpc"} {
    # XCode 3.1.4
    version             698.1
    revision            2
    distname            cctools-${version}
    checksums           rmd160  898c7b46869d4989c115420912fdd8d96ae923d3 \
                        sha256  383f1c0c78a2b3efdfdf7ce01adb7e2f8ee9985164dba6ab1c0fae800a211cec
    supported_archs     i386 ppc

    depends_build-delete port:ld64

    patchfiles-delete   PR-11136237.patch cctools-822-no-lto.patch
    patchfiles-append   patch-misc_libtool.c.diff PR-11136237-698.1.patch

} elseif {${os.major} == 8} {
    # XCode 4.1
    version             806
    revision            1
    distname            cctools-${version}
    checksums           rmd160  91c0a3f192f1eed60b64ef5a0a06918d0ce0b0c9 \
                        sha256  6116c06920112c634f6df2fa8b2f171ee3b90ff2176137da5856336695a6a676
    supported_archs     i386 x86_64

    patchfiles-delete   cctools-822-no-lto.patch
    patchfiles-append   PR-9087924.patch PR-9830754.patch
}

if {![variant_isset llvm29] && ![variant_isset llvm30] && ![variant_isset llvm31]} {
    if {${os.arch} == "powerpc" && ${os.major} == 8} {
        # https://trac.macports.org/ticket/33987
        default_variants +llvm29
    } else {
        default_variants +llvm30
    }
}

set llvm_version {}
variant llvm29 conflicts llvm30 llvm31 description {Use llvm-2.9 for libLTO and llvm-mc} {
    set llvm_version        2.9
    depends_run-append      port:llvm-${llvm_version}
}

variant llvm30 conflicts llvm29 llvm31 description {Use llvm-3.0 for libLTO and llvm-mc} {
    set llvm_version        3.0
    depends_run-append      port:llvm-${llvm_version}
}

variant llvm31 conflicts llvm29 llvm30 description {Use llvm-3.1 for libLTO and llvm-mc} {
    set llvm_version        3.1
    depends_run-append      port:llvm-${llvm_version}
}

use_configure           no
destroot.args           DSTROOT=${destroot}${prefix} RC_ProjectSourceVersion=${version}

post-patch {
    # We don't want to build cctools ld.  We want to use ld64
    reinplace "/^SUBDIRS_32/s/ld//" ${worksrcpath}/Makefile
    reinplace "/^COMMON_SUBDIRS/s/ ld / /" ${worksrcpath}/Makefile

    # Use our chosen version of llvm
    if {[variant_isset llvm29] || [variant_isset llvm30] || [variant_isset llvm31]} {
        reinplace "s:\"llvm-mc\":\"llvm-mc-mp-${llvm_version}\":" ${worksrcpath}/as/driver.c
        reinplace "s:@@LLVM_LIBDIR@@:${prefix}/libexec/llvm-${llvm_version}/lib:" ${worksrcpath}/libstuff/lto.c
    }

    foreach file [glob ${worksrcpath}/{*/,}Makefile] {
        reinplace "s:/usr/local:${prefix}:g" ${file}
        reinplace "s:/usr:${prefix}:g" ${file}
        reinplace "s:${prefix}/efi:${prefix}:g" ${file}
        reinplace "s:/Developer${prefix}:${prefix}:g" ${file}
        reinplace "s:${prefix}/man:${prefix}/share/man:g" ${file}

        if {${os.major} < 10} {
            reinplace "s:${prefix}/bin/mig:/usr/bin/mig:g" ${file}
        }
    }
}

use_configure   no
use_parallel_build  yes

build.target    all

pre-build {
    build.args-append \
        RC_ProjectSourceVersion=${version} \
        USE_DEPENDENCY_FILE=NO \
        BUILD_DYLIBS=NO \
        CC="${configure.cc}" \
        CXX="${configure.cxx}" \
        RC_ARCHS="[get_canonical_archs]" \
        SDK="-I${prefix}/include"

    if {[variant_isset llvm29] || [variant_isset llvm30] || [variant_isset llvm31]} {
        build.args-append \
            LTO=-DLTO_SUPPORT \
            RC_CFLAGS="[get_canonical_archflags] -I`llvm-config-mp-${llvm_version} --includedir`" \
            LLVM_MC="llvm-mc-mp-${llvm_version}"
    } else {
        build.args-append \
            LTO= \
            RC_CFLAGS="[get_canonical_archflags]"
    }

    if {[file exists ${prefix}/lib/libprunetrie.a]} {
        build.args-append \
            TRIE=-DTRIE_SUPPORT
    } else {
        build.args-append \
            TRIE=
    }
}

pre-destroot {
    destroot.args-append \
        RC_ProjectSourceVersion=${version} \
        USE_DEPENDENCY_FILE=NO \
        BUILD_DYLIBS=NO \
        CC="${configure.cc}" \
        CXX="${configure.cxx}" \
        RC_ARCHS="[get_canonical_archs]" \
        SDK="-I${prefix}/include"

    if {[variant_isset llvm29] || [variant_isset llvm30] || [variant_isset llvm31]} {
        destroot.args-append \
            LTO=-DLTO_SUPPORT \
            RC_CFLAGS="[get_canonical_archflags] `llvm-config-mp-${llvm_version} --cflags`" \
            LLVM_MC="llvm-mc-mp-${llvm_version}"
    } else {
        destroot.args-append \
            LTO= \
            RC_CFLAGS="[get_canonical_archflags]"
    }

    if {[file exists ${prefix}/lib/libprunetrie.a]} {
        destroot.args-append \
            TRIE=-DTRIE_SUPPORT
    } else {
        destroot.args-append \
            TRIE=
    }
}

platform macosx {
    build.args-append RC_OS="macos"
    destroot.args-append RC_OS="macos"
}

destroot.target install_tools
destroot.args-append DSTROOT=${destroot}
post-destroot {
    file delete -force ${destroot}${prefix}/OpenSourceLicenses
    file delete -force ${destroot}${prefix}/OpenSourceVersions
    file delete -force ${destroot}${prefix}/RelNotes

    if {${os.major} < 10} {
        file delete -force ${destroot}/Developer
    }

    # Provided by port:cctools-headers
    file delete -force ${destroot}${prefix}/include
}

livecheck.type          regex
livecheck.regex         "${name}-(\[\\d.\]+)"
