Commit 10fd0490 authored by Mislav Marohnić's avatar Mislav Marohnić
Browse files

Fix Yosemite builds that use gcc-4.2 through `require_gcc`

The definitions that use `require_gcc` are not compatible with Apple's
clang-powered `gcc` and need gcc-4.2 from Homebrew. However, builds
using gcc-4.2 fail on Yosemite with a warning:

    couldn't understand kern.osversion `14.0.0'

Although the warning is non-fatal, the build goes to shit from there. It
seems that setting the magical value `MACOSX_DEPLOYMENT_TARGET=10.9`
makes the build work and doesn't seem to have negative consequences.
parent e7810a61
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -85,6 +85,16 @@ os_information() {
  fi
}

#  9.1  -> 901
# 10.9  -> 1009
# 10.10 -> 1010
osx_version() {
  local ver="$(sw_vers -productVersion)"
  local major="${ver%.*}"
  local minor="${ver#*.}"
  echo $(( major*100 + minor ))
}

build_failed() {
  { echo
    colorize 1 "BUILD FAILED"
@@ -715,6 +725,9 @@ require_gcc() {
  fi

  export CC="$gcc"
  if [ "$(uname -s)" = "Darwin" ] && [ "$(osx_version)" -ge 1010 ]; then
    export MACOSX_DEPLOYMENT_TARGET=10.9
  fi
}

locate_gcc() {

test/compiler.bats

0 → 100644
+38 −0
Original line number Diff line number Diff line
#!/usr/bin/env bats

load test_helper
export MAKE=make

@test "require_gcc on OS X 10.9" {
  stub uname '-s : echo Darwin'
  stub sw_vers '-productVersion : echo 10.9'
  stub gcc '--version : echo 4.2.1'

  run_inline_definition <<DEF
require_gcc
echo CC=\$CC
echo MACOSX_DEPLOYMENT_TARGET=\${MACOSX_DEPLOYMENT_TARGET-no}
DEF
  assert_success
  assert_output <<OUT
CC=${TMP}/bin/gcc
MACOSX_DEPLOYMENT_TARGET=no
OUT
}

@test "require_gcc on OS X 10.10" {
  stub uname '-s : echo Darwin'
  stub sw_vers '-productVersion : echo 10.10'
  stub gcc '--version : echo 4.2.1'

  run_inline_definition <<DEF
require_gcc
echo CC=\$CC
echo MACOSX_DEPLOYMENT_TARGET=\${MACOSX_DEPLOYMENT_TARGET-no}
DEF
  assert_success
  assert_output <<OUT
CC=${TMP}/bin/gcc
MACOSX_DEPLOYMENT_TARGET=10.9
OUT
}