# -*- 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 # $Id$ PortSystem 1.0 name oracle-instantclient version 10.2.0.4.0 revision 4 set intel_version ${version} set powerpc_version 10.1.0.3 categories databases platforms macosx maintainers ryandesign homepage http://www.oracle.com/technetwork/database/features/instant-client/ 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-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-basic-${intel_version}-macosx-x64] \ md5 b88c9133c61a2e6b5584879641541d68 \ sha1 1e9cd2d0f77c9d2212beb73cdf5876a538eb7e14 \ rmd160 05c727d57171381c201f92079074a7d907134c2d \ [suffix instantclient-sdk-${intel_version}-macosx-x64] \ md5 fc70b8e5a2f3324f3ab64c0564fd70e3 \ sha1 05968db004808c43b4cc90cea83b904e6618bc9c \ rmd160 61b6d7059598444be54e1dd43a2e765c3793554f # 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 {} } # merge() requires universal_archs to be set correctly. Since we use merge() # even when not building universal we must always set universal_archs correctly. if {[variant_isset universal]} { # The only supported universal build is x86_64 i386. configure.universal_archs x86_64 i386 } else { configure.universal_archs ${configure.build_arch} } set my_requested_archs ${configure.universal_archs} 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 foreach my_distfile_type {basic sdk} { 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}} { foreach my_distfile_type {basic sdk} { 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" dictates they must be in ${prefix}/lib/oracle/sdk/include; # ports like php5-oracle will expect them there. xinstall -d ${my_destroot}${lib_dir}/sdk copy ${my_worksrcpath}/sdk/include ${my_destroot}${lib_dir}/sdk } } } 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 } notes " To use ${name}, export DYLD_LIBRARY_PATH=${prefix}/lib/oracle in your environment. " livecheck.type regex livecheck.url ${homepage}htdocs/intel_macsoft.html livecheck.regex instantclient-basic-(\[0-9.\]+)-macosx-x86\\.zip