# $Id: Portfile 92437 2012-04-28 17:48:58Z jeremyhu@macports.org $

PortSystem              1.0
PortGroup               xcode 1.0
PortGroup               xcodeversion 1.0
minimum_xcodeversions   {10 3.2.3}

name                    libunwind-headers
version                 30
revision                4
categories              devel
maintainers             mfeiri openmaintainer
homepage                http://opensource.apple.com/source/libunwind/
master_sites            http://opensource.apple.com/tarballs/libunwind/
license                 APSL-2.0
supported_archs         noarch
description             A portable way to unwind the call-chain of a program
long_description        Apple's implementation of the libunwind library \
                        provides a source compatible implementation of the \
                        http://www.nongnu.org/libunwind/man/libunwind(3).html \
                        API to unwind a call-chain. Headers only, because the \
                        library is included in the base operating system.

distname                libunwind-${version}
checksums               rmd160  3e288379a63a78b566df7d185b0677f214b37e56 \
                        sha256  6ac97d18cc2b05e6de1269bf5af03b81948bd2200dae827527f3dc618b82bd41

xcode.target            libunwind-ld

post-patch { 
    reinplace "s|/usr/local|${prefix}|g" \
            ${worksrcpath}/libunwind.xcodeproj/project.pbxproj
    reinplace "s|/usr|${prefix}|g" \
            ${worksrcpath}/libunwind.xcodeproj/project.pbxproj

    foreach header [glob ${worksrcpath}/*/{,*/}*.h{,pp}] {
        if {${os.major} < 11} {
            reinplace "s|__MAC_10_7|__MAC_NA|g" ${header}
            reinplace "s|AVAILABLE_MAC_OS_X_VERSION_10_\\(.\\)_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_7|AVAILABLE_MAC_OS_X_VERSION_10_\\1_AND_LATER|" ${header}
            reinplace "s|AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER|__attribute__((unavailable))|g" ${header}
        }
        if {${os.major} < 10} {
            reinplace "s|__MAC_10_6|__MAC_NA|g" ${header}
            reinplace "s|AVAILABLE_MAC_OS_X_VERSION_10_\\(.\\)_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_6|AVAILABLE_MAC_OS_X_VERSION_10_\\1_AND_LATER|" ${header}
            reinplace "s|AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER|__attribute__((unavailable))|g" ${header}
        }
        if {${os.major} < 9} {
            reinplace "s|__MAC_10_5|__MAC_NA|g" ${header}
            reinplace "s|AVAILABLE_MAC_OS_X_VERSION_10_\\(.\\)_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_5|AVAILABLE_MAC_OS_X_VERSION_10_\\1_AND_LATER|" ${header}
            reinplace "s|AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER|__attribute__((unavailable))|g" ${header}

            reinplace "s|Availability.h|AvailabilityMacros.h|g" ${header}
            reinplace "s|__OSX_AVAILABLE_STARTING(__MAC_NA,.*)|__attribute__((unavailable))|g" ${header}
            reinplace "s|__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,.*)|__attribute__((unavailable))|g" ${header}
            reinplace "s|__OSX_AVAILABLE_STARTING(__MAC_10_\\(\[^,\]*\\),.*)|AVAILABLE_MAC_OS_X_VERSION_10_\\1_AND_LATER|g" ${header}
            reinplace "s|__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_\\(\[^,\]*\\),__MAC_NA,.*)|AVAILABLE_MAC_OS_X_VERSION_10_\\1_AND_LATER|g" ${header}
            reinplace "s|__OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_\\(\[^,\]*\\),__MAC_10_\\(\[^,\]*\\),.*)|AVAILABLE_MAC_OS_X_VERSION_10_\\1_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_\\2|g" ${header}
        }
    }

    if {${os.major} < 9} {
        foreach reg {cr ctr eax ebp ebx ecx edi edx eip esi esp lr mq r0 r1 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r2 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r3 r30 r31 r4 r5 r6 r7 r8 r9 rax rbp rbx rcx rdi rdx rip rsi rsp srr0 srr1 vrsave xer} {
            reinplace "s|__${reg}|${reg}|g" ${worksrcpath}/src/Registers.hpp
        }
    }
}

livecheck.type          regex
livecheck.regex         "libunwind-(\[\\d.\]+)"
