Skip to content

Commit

Permalink
Add nvm_clang_version to ensure clang version > 3.5
Browse files Browse the repository at this point in the history
  • Loading branch information
PeterDaveHello authored and ljharb committed Nov 14, 2016
1 parent 9f67d3e commit 65acb40
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 3 deletions.
10 changes: 7 additions & 3 deletions nvm.sh
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,10 @@ nvm_rc_version() {
fi
}

nvm_clang_version() {
clang --version | command awk '{ if ($2 == "version") print $3; else if ($3 == "version") print $4 }' | command sed 's/-.*$//g'
}

nvm_version_greater() {
command awk 'BEGIN {
if (ARGV[1] == "" || ARGV[2] == "") exit(1)
Expand Down Expand Up @@ -1854,8 +1858,8 @@ nvm_install_source() {
elif [ "${NVM_OS}" = 'aix' ]; then
make='gmake'
fi
if nvm_has "clang++" && nvm_has "clang" ; then
nvm_echo "Clang detected! Use Clang as c/c++ compiler!"
if nvm_has "clang++" && nvm_has "clang" && nvm_version_greater_than_or_equal_to nvm_clang_version 3.5 ; then
nvm_echo "Clang v3.5+ detected! Use Clang as c/c++ compiler!"
MAKE_CXX='CC=clang CXX=clang++'
fi

Expand Down Expand Up @@ -3145,7 +3149,7 @@ nvm() {
nvm_is_iojs_version nvm_is_alias \
nvm_ls_remote nvm_ls_remote_iojs nvm_ls_remote_index_tab \
nvm_ls nvm_remote_version nvm_remote_versions \
nvm_install_binary \
nvm_install_binary nvm_clang_version \
nvm_get_mirror nvm_get_download_slug nvm_download_artifact \
nvm_install_source nvm_check_file_permissions \
nvm_print_versions nvm_compute_checksum nvm_checksum \
Expand Down
62 changes: 62 additions & 0 deletions test/fast/Unit tests/nvm_clang_version
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/bin/sh

cleanup () {
unset -f die
}

die () { echo -e "$@" ; cleanup ; exit 1; }

if type "clang" > /dev/null 2>&1 ; then
clang_exec="$(type "clang")"
sudo rm -rf "${clang_exec}"
fi
if type "clang++" > /dev/null 2>&1 ; then
clangxx_exec="$(type "clang++")"
sudo rm -rf "${clangxx_exec}"
fi

NVM_ENV=testing \. ../../../nvm.sh

clang() {
if [ "$1" = "--version" ]; then
echo "${VERSION_MESSAGE}"
fi
}

assert_version_is() {
if [ "${1}" != "${2}" ]; then
die "Expected ${2}, got ${1}, origin version message:\n${VERSION_MESSAGE}"
return 1
fi
}

CLANG_VERSION_ON_DEBIAN_JESSIE="Debian clang version 3.5.0-10 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
Target: x86_64-pc-linux-gnu
Thread model: posix"

CLANG_VERSION_ON_UBUNTU_TRUSTY="Ubuntu clang version 3.4-1ubuntu3 (tags/RELEASE_34/final) (based on LLVM 3.4)
Target: x86_64-pc-linux-gnu
Thread model: posix"

CLANG_VERSION_ON_ARCHLINUX="clang version 3.9.0 (tags/RELEASE_390/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/sbin"

CLANG_VERSION_ON_FREEBSD="FreeBSD clang version 3.4.1 (tags/RELEASE_34/dot1-final 208032) 20140512
Target: x86_64-unknown-freebsd10.3
Thread model: posix"

VERSION_MESSAGE="${CLANG_VERSION_ON_DEBIAN_JESSIE}"
assert_version_is "$(nvm_clang_version)" "3.5.0"

VERSION_MESSAGE="${CLANG_VERSION_ON_UBUNTU_TRUSTY}"
assert_version_is "$(nvm_clang_version)" "3.4"

VERSION_MESSAGE="${CLANG_VERSION_ON_ARCHLINUX}"
assert_version_is "$(nvm_clang_version)" "3.9.0"

VERSION_MESSAGE="${CLANG_VERSION_ON_FREEBSD}"
assert_version_is "$(nvm_clang_version)" "3.4.1"

cleanup

0 comments on commit 65acb40

Please sign in to comment.