#!/usr/bin/ruby NONSTANDARD_SDKS = { '10.3.9' => '10.3', '10.4u' => '10.4' } def standardize_sdk(sdk_name) NONSTANDARD_SDKS[sdk_name] || sdk_name end def macosx_to_darwin_version(macosx_version) macosx_version =~ /^10\.(\d+)$/ $1.to_i + 4 end MINIMUM_DARWIN_VERSION_BY_ARCH = { 'ppc' => 7, 'i386' => 8, 'ppc64' => 9, 'x86_64' => 9, } MAXIMUM_DARWIN_VERSION_BY_ARCH = { 'ppc' => 9, 'ppc64' => 9, } def current_darwin_version() `uname -r` =~ /^(\d+).*$/ $1.to_i end def possible_darwin_versions(arch) min = MINIMUM_DARWIN_VERSION_BY_ARCH[arch] max = MAXIMUM_DARWIN_VERSION_BY_ARCH[arch] || current_darwin_version() min..max end def available_sdks() Hash[*(Dir['/Developer/SDKs/*.sdk'].map { |sdk| sdk =~ /.*MacOSX(.*)\.sdk/ sdk_name = $1 [macosx_to_darwin_version(standardize_sdk(sdk_name)), sdk_name] }.flatten)] end MIN_OS_VERSION_BY_DARWIN_VERSION = { 7 => '10.3.9', 8 => '10.4.11', } def min_os_version_from_darwin_version(version) MIN_OS_VERSION_BY_DARWIN_VERSION[version] || "10.#{version - 4}" end def choose_sdk(arch) sdks = available_sdks() versions = possible_darwin_versions(arch) possible_darwin_versions = versions.find_all { |v| sdks[v] } version = possible_darwin_versions[0] <