From 65acb403ce190fbf3418785f79bbf93486dad7f5 Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Mon, 14 Nov 2016 12:28:41 +0800 Subject: [PATCH] Add `nvm_clang_version` to ensure clang version > 3.5 --- nvm.sh | 10 +++-- test/fast/Unit tests/nvm_clang_version | 62 ++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 3 deletions(-) create mode 100755 test/fast/Unit tests/nvm_clang_version diff --git a/nvm.sh b/nvm.sh index 0a6ad98..544245d 100755 --- a/nvm.sh +++ b/nvm.sh @@ -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) @@ -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 @@ -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 \ diff --git a/test/fast/Unit tests/nvm_clang_version b/test/fast/Unit tests/nvm_clang_version new file mode 100755 index 0000000..dda1dad --- /dev/null +++ b/test/fast/Unit tests/nvm_clang_version @@ -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