# $Id: $

PortSystem              1.0

name                    oracle-instantclient
version                 10.2.0.4.0
revision                5
set intel_version       ${version}
set powerpc_version     10.1.0.3
categories              databases
platforms               macosx
maintainers             nomaintainer
homepage                http://www.oracle.com/technology/software/tech/oci/instantclient/
master_sites            http://download.oracle.com/otn/mac/instantclient/:powerpc \
                        http://download.oracle.com/otn/mac/instantclient/[join [lrange [split ${intel_version} .] 0 3] ""]/:intel
use_zip                 yes
use_parallel_build      no

description \
    Oracle database connection libraries

long_description \
    Oracle Instant Client allows you to run your applications without installing the standard Oracle client or having an ORACLE_HOME.

checksums \
    [suffix instantclient-basic-macosx-${powerpc_version}] \
        md5     5b38ab0565d6189d2069a4abe0bf2ab2 \
        sha1    2f3aa35e99228fd08b686b19eba84ec34db8277b \
        rmd160  d1f056f8f1b308c5493f4938b29b55fcb32452cf \
    [suffix instantclient-sdk-macosx-${powerpc_version}] \
        md5     79c7cb3f8afaff076fb20bad75b37cc9 \
        sha1    486fe1c9a6c5cfc32401e72728ff821a50a22cf9 \
        rmd160  c819db7f739b8ca468c8059dfbac31a6a6965938 \
    [suffix instantclient-sqlplus-macosx-${powerpc_version}] \
        md5     079bb7f58124dec6861f5c18c43ba938 \
        sha1    9393803cf8db8bf742e42aa4b3a7755047f64804 \
        rmd160  39a3981c4a34f61a414e10fd9b6135b06dcfe672 \
    [suffix instantclient-basic-${intel_version}-macosx-x86] \
        md5     75a7622f6852759294df19878106cd77 \
        sha1    c5ea4ca3e55eb8f2ce83b48c268f51fbb48ff867 \
        rmd160  3ce70104dfb4a53d2adda96e6ea20bb2cf43ee6f \
    [suffix instantclient-sdk-${intel_version}-macosx-x86] \
        md5     e8b5ca3b36a1849c2ca9fa3bf7979311 \
        sha1    2505faea0e24d52d50b96dc0b22081584de714cb \
        rmd160  4eb78290b0b44e1f80edbf5e7a84552cca70ac05 \
    [suffix instantclient-sqlplus-${intel_version}-macosx-x86] \
        md5     5f6cb7201e1937b22dc37c2ba206cf26 \
        sha1    06b1a891efb136d456bac1bd4aee3cdced4271b5 \
        rmd160  34142548cfd70cdb966e67f283b21fcb81e86488 \
    [suffix instantclient-basic-${intel_version}-macosx-x64] \
        md5     b88c9133c61a2e6b5584879641541d68 \
        sha1    1e9cd2d0f77c9d2212beb73cdf5876a538eb7e14 \
        rmd160  05c727d57171381c201f92079074a7d907134c2d \
    [suffix instantclient-sdk-${intel_version}-macosx-x64] \
        md5     fc70b8e5a2f3324f3ab64c0564fd70e3 \
        sha1    05968db004808c43b4cc90cea83b904e6618bc9c \
        rmd160  61b6d7059598444be54e1dd43a2e765c3793554f \
    [suffix instantclient-sqlplus-${intel_version}-macosx-x64] \
        md5     8d349dae15df2bc71b10b84378eba71b \
        sha1    b944d1cd2cd74bfc804eeaa7d2a2fee8a87c0294 \
        rmd160  220256b0bae46b0d78aeaf9e4d6ffab7e37e7e20

#   my_arch     my_tag      my_arch_version     my_distname_format              my_worksrcdir_format    weird_prefix
set my_arch_info "
    ppc         powerpc     ${powerpc_version}  instantclient-%s-macosx-%s      instantclient%s         /b/729
    i386        intel       ${intel_version}    instantclient-%s-%s-macosx-x86  instantclient_%s        /b/32_216
    x86_64      intel       ${intel_version}    instantclient-%s-%s-macosx-x64  instantclient_%s        /b/227
"

if {"powerpc" == ${os.arch}} {
    universal_variant no
} else {
    variant universal {}
}

if {[variant_isset universal]} {
#    set my_requested_archs ${configure.universal_archs}
    set my_requested_archs {x86_64 i386}
} else {
    set my_requested_archs ${configure.build_arch}
}

distfiles
foreach my_requested_arch ${my_requested_archs} {
    set found 0
    foreach {my_arch my_tag my_arch_version my_distname_format my_worksrcdir_format weird_prefix} ${my_arch_info} {
        if {${my_arch} == ${my_requested_arch}} {
            set found 1
			if {[variant_isset with_sqlplus]} {
				set my_pkgs {basic sdk sqlplus}
			} else {
				set my_pkgs {basic sdk}
			}
            foreach my_distfile_type ${my_pkgs} {
                distfiles-append [suffix [format ${my_distname_format} ${my_distfile_type} ${my_arch_version}]]:${my_tag}
            }
        }
    }
    if {0 == ${found}} {
        return -code error "${name} is not available for ${my_requested_arch}"
    }
}

pre-fetch {
    if {"darwin" != ${os.platform}} {
        ui_error "${name} requires Mac OS X."
        return -code error "incompatible operating system"
    }
    if {"i386" == ${os.arch} && ${os.major} < 9} {
        ui_error "${name} on Intel requires Mac OS X 10.5 or greater."
        return -code error "incompatible Mac OS X version"
    }
    if {"powerpc" == ${os.arch}} {
        ui_msg "Note that although the port says you're getting ${name} ${version},"
        ui_msg "on PowerPC you're actually getting version ${powerpc_version} because no newer version"
        ui_msg "is available."
        ui_msg ""
    }
    ui_warn "MacPorts may not be able to download the necessary distfiles for"
    ui_warn "${name}. If you get a checksum error, please visit this URL:"
    ui_warn ""
    ui_warn "    ${homepage}"
    ui_warn ""
    ui_warn "and download these files manually:"
    ui_warn ""
    foreach distfile ${distfiles} {
        ui_warn "    [strsed ${distfile} {/:.*$//}]"
    }
    ui_warn ""
    ui_warn "and place them in this directory:"
    ui_warn ""
    ui_warn "    ${distpath}"
}

extract {
    set my_build_dir ${extract.dir}/build
    xinstall -d ${my_build_dir}
    foreach my_requested_arch ${my_requested_archs} {
        foreach {my_arch my_tag my_arch_version my_distname_format my_worksrcdir_format weird_prefix} ${my_arch_info} {
            if {${my_arch} == ${my_requested_arch}} {
				if {[variant_isset with_sqlplus]} {
					set my_pkgs {basic sdk sqlplus}
				} else {
					set my_pkgs {basic sdk}
				}
            	foreach my_distfile_type ${my_pkgs} {
                    system "${extract.cmd} ${extract.pre_args} ${extract.post_args} ${distpath}/[suffix [format ${my_distname_format} ${my_distfile_type} ${my_arch_version}]]"
                }
                move ${extract.dir}/[format ${my_worksrcdir_format} [join [lrange [split ${my_arch_version} .] 0 1] "_"]] ${my_build_dir}/${my_arch}
            }
        }
    }
}

use_configure           no

set lib_dir ${prefix}/lib/oracle

build {
    # The pre-built libraries use weird prefixes and Oracle recommends setting
    # DYLD_LIBRARY_PATH to deal with this. I would rather fix the paths in the
    # libraries at install time.
    foreach my_requested_arch ${my_requested_archs} {
        foreach {my_arch my_tag my_arch_version my_distname_format my_worksrcdir_format weird_prefix} ${my_arch_info} {
            if {${my_arch} == ${my_requested_arch}} {
                # For each dylib in the distribution, change the directory of its own
                # "soname" to ${lib_dir}.
                foreach lib [glob -directory ${workpath}/build/${my_arch} *.dylib*] {
                    system "install_name_tool -id ${lib_dir}/[strsed ${lib} /^.*\\///] ${lib}"
                    
                    # Then for each dependent dylib with a weird path that this dylib
                    # references, fix the reference to use ${lib_dir}.
                    foreach dep [exec otool -L ${lib}] {
                        if [string match "${weird_prefix}/*" ${dep}] {
                            system "install_name_tool -change ${dep} ${lib_dir}/[strsed ${dep} /^.*\\///] ${lib}"
                        }
                    }
                }
            }
        }
    }
}

destroot {
    foreach my_requested_arch ${my_requested_archs} {
        foreach {my_arch my_tag my_arch_version my_distname_format my_worksrcdir_format weird_prefix} ${my_arch_info} {
            if {${my_arch} == ${my_requested_arch}} {
                set my_destroot ${workpath}/pre-dest/${my_arch}
                set my_worksrcpath ${workpath}/build/${my_arch}
                xinstall -d ${my_destroot}${lib_dir}
                eval xinstall \
                    [glob -directory ${my_worksrcpath} *.dylib*] \
                    [glob -directory ${my_worksrcpath} *.jar] \
                    ${my_destroot}${lib_dir}
                
                # You would think the includes should go in ${prefix}/include/oracle, but
                # the instantclient layout wants it in ${prefix}/lib/oracle/sdk/include
                xinstall -d ${my_destroot}${lib_dir}/sdk
                copy ${my_worksrcpath}/sdk/include ${my_destroot}${lib_dir}/sdk

				if {[variant_isset with_sqlplus]} {
					xinstall ${my_worksrcpath}/sqlplus ${destroot}${prefix}/bin
				}
            }
        }
    }
    
    merge ${workpath}/pre-dest
    
    # php5-oracle complains without a libclntsh.dylib symlink.
    ln -s libclntsh.dylib.10.1 ${destroot}${lib_dir}/libclntsh.dylib
    
    # Add a libocci.dylib symlink too for good measure.
    ln -s libocci.dylib.10.1 ${destroot}${lib_dir}/libocci.dylib
}

post-activate {
    ui_msg "To use ${name},"
    ui_msg "export DYLD_LIBRARY_PATH=${prefix}/lib/oracle"
    ui_msg "in your environment."
}

livecheck.type          regex
livecheck.url           ${homepage}htdocs/intel_macsoft.html
livecheck.regex         instantclient-basic-(\[0-9.\]+)-macosx-x86\\.zip

variant with_sqlplus description {with SQL*Plus CLI tool.} {}
