# A set of functions for extracting system information to nicely formattted # strings. Useful for submitting meaning build names to CDash. ########################################################################### # Returns the current git branch of the source directory function( moos_get_current_git_branch CURRENT_GIT_BRANCH_NAME ) set( GIT_QUERY_COMMAND "git" "rev-parse" "--abbrev-ref" "HEAD" ) execute_process(COMMAND ${GIT_QUERY_COMMAND} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE result OUTPUT_STRIP_TRAILING_WHITESPACE) set( ${CURRENT_GIT_BRANCH_NAME} ${result} PARENT_SCOPE ) endfunction() ########################################################################### # Returns the result of "uname -m", if uname exists. function( moos_get_uname_output UNAME_OUTPUT ) find_program(UNAME_PROGRAM NAMES uname) mark_as_advanced(UNAME_PROGRAM) if(UNAME_PROGRAM) execute_process(COMMAND ${UNAME_PROGRAM} "-m" OUTPUT_VARIABLE result OUTPUT_STRIP_TRAILING_WHITESPACE) set( ${UNAME_OUTPUT} ${result} PARENT_SCOPE ) endif() endfunction() ########################################################################### # Returns the system name to the user. Under OS X uses sw_vers, and Linux # attemps to use lsb_release -d function( moos_get_operating_system_name OPERATING_SYSTEM_NAME ) # Mac OS X - call sw_vers, put together multiple queries if( ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" ) find_program(SW_VERS_PROGRAM sw_vers) mark_as_advanced(SW_VERS_PROGRAM) # get the product name e.g "Mac OS X", version e.g "10.9" and build version execute_process(COMMAND ${SW_VERS_PROGRAM} "-productName" OUTPUT_VARIABLE product_name OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND ${SW_VERS_PROGRAM} "-productVersion" OUTPUT_VARIABLE product_version OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND ${SW_VERS_PROGRAM} "-buildVersion" OUTPUT_VARIABLE build_version OUTPUT_STRIP_TRAILING_WHITESPACE) set(${OPERATING_SYSTEM_NAME} "${product_name} ${product_version} ${build_version}" PARENT_SCOPE) endif() # Linux - attempt to use lsb_release, this works on Ubuntu if( ${CMAKE_SYSTEM_NAME} MATCHES "Linux" ) find_program(LSB_RELEASE_PROGRAM lsb_release) mark_as_advanced(LSB_RELEASE_PROGRAM) if( LSB_RELEASE_PROGRAM ) execute_process(COMMAND ${LSB_RELEASE_PROGRAM} "-d" OUTPUT_VARIABLE result OUTPUT_STRIP_TRAILING_WHITESPACE) # strip the beginning "Description:\t" text, otherwise when using the # string to submit to CDash, multiple build names seem to get created. string(REGEX REPLACE "Description:\t" "" result ${result}) set( ${OPERATING_SYSTEM_NAME} "${result}" PARENT_SCOPE ) endif() endif() endfunction() ########################################################################### # Returns the first line of the compiler --version result. # Need to know if using gcc or clang. function( moos_get_compiler_version COMPILER_VERSION ) execute_process(COMMAND "${CMAKE_CXX_COMPILER}" --version COMMAND head -n1 OUTPUT_VARIABLE compiler_info OUTPUT_STRIP_TRAILING_WHITESPACE) # replace any forward slashes with a -, the submission name changes at # different stages otherwise, resulting in apparent multiple commits string(REGEX REPLACE "/" "-" compiler_info "${compiler_info}") set( ${COMPILER_VERSION} "${compiler_info}" PARENT_SCOPE ) endfunction() ########################################################################### # Constructs a formatted string detailing build information, including # git branch, cmake build type, system information and compiler information # Useful for CDash submissions function( moos_make_informative_build_name BUILD_NAME_STRING ) moos_get_current_git_branch( git_branch ) moos_get_operating_system_name( system_name ) moos_get_uname_output( uname_result ) moos_get_compiler_version( compiler_info ) set(FULL_NAME "${system_name} - ${uname_result} - ${compiler_info} - ${git_branch} - ${CMAKE_BUILD_TYPE}") set( ${BUILD_NAME_STRING} ${FULL_NAME} PARENT_SCOPE ) endfunction()