diff -r bb95e351270c -r 75f430ebeb74 cmake_modules/FindClang.cmake --- a/cmake_modules/FindClang.cmake Tue Jun 18 09:48:10 2013 +0200 +++ b/cmake_modules/FindClang.cmake Tue Jun 18 10:03:11 2013 +0200 @@ -1,21 +1,36 @@ -# Load LLVM/Clang -if (CLANG) - set(CLANG_EXECUTABLE ${CLANG}) -else() - find_program(CLANG_EXECUTABLE +# - Try to find the Clang/LLVM executable +# Once done this will define +# +# CLANG_FOUND - system has Clang +# CLANG_VERSION - Clang version +# CLANG_EXECUTABLE - Clang executable +# +# Copyright (c) 2013, Vittorio Giovara +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +find_program(CLANG_EXECUTABLE NAMES clang-mp-3.3 clang-mp-3.2 clang-mp-3.1 clang-mp-3.0 clang PATHS /opt/local/bin /usr/local/bin /usr/bin) + +if (CLANG_EXECUTABLE) + execute_process(COMMAND ${CLANG_EXECUTABLE} --version + OUTPUT_VARIABLE CLANG_VERSION_OUTPUT + ERROR_VARIABLE CLANG_VERSION_ERROR + RESULT_VARIABLE CLANG_VERSION_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + if(${CLANG_VERSION_RESULT} EQUAL 0) + string(REGEX MATCH "[0-9]+\\.[0-9]+" CLANG_VERSION "${CLANG_VERSION_OUTPUT}") + string(REGEX REPLACE "([0-9]+\\.[0-9]+)" "\\1" CLANG_VERSION "${CLANG_VERSION}") + else() + message(SEND_ERROR "Command \"${CLANG_EXECUTABLE} --version\" failed with output: ${CLANG_VERSION_ERROR}") + endif() endif() -# Check LLVM/Clang version -if (CLANG_EXECUTABLE) - exec_program(${CLANG_EXECUTABLE} ARGS "-v" OUTPUT_VARIABLE CLANG_VERSION_FULL) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Clang DEFAULT_MSG CLANG_EXECUTABLE CLANG_VERSION) +mark_as_advanced(CLANG_VERSION) - string(REGEX MATCH "[0-9]+\\.[0-9]+" CLANG_VERSION_LONG "${CLANG_VERSION_FULL}") - string(REGEX REPLACE "([0-9]+\\.[0-9]+)" "\\1" CLANG_VERSION "${CLANG_VERSION_LONG}") -else() - message(FATAL_ERROR "No LLVM/Clang compiler found (required for engine_c target)") -endif() - -set(CMAKE_C_COMPILER ${CLANG_EXECUTABLE}) -set(CMAKE_CXX_COMPILER ${CLANG_EXECUTABLE})