You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							103 lines
						
					
					
						
							3.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							103 lines
						
					
					
						
							3.6 KiB
						
					
					
				
								# - Includes a public function for assisting users in trying to determine the
							 | 
						|
								# Visual Studio service pack in use.
							 | 
						|
								#
							 | 
						|
								# Sets the passed in variable to one of the following values or an empty
							 | 
						|
								# string if unknown.
							 | 
						|
								#    vc80
							 | 
						|
								#    vc80sp1
							 | 
						|
								#    vc90
							 | 
						|
								#    vc90sp1
							 | 
						|
								#
							 | 
						|
								# Usage:
							 | 
						|
								# ===========================
							 | 
						|
								#
							 | 
						|
								#    if(MSVC)
							 | 
						|
								#       include(CMakeDetermineVSServicePack)
							 | 
						|
								#       DetermineVSServicePack( my_service_pack )
							 | 
						|
								#
							 | 
						|
								#       if( my_service_pack )
							 | 
						|
								#           message(STATUS "Detected: ${my_service_pack}")
							 | 
						|
								#       endif()
							 | 
						|
								#    endif()
							 | 
						|
								#
							 | 
						|
								# ===========================
							 | 
						|
								
							 | 
						|
								#=============================================================================
							 | 
						|
								# Copyright 2009-2010 Kitware, Inc.
							 | 
						|
								# Copyright 2009-2010 Philip Lowman <philip@yhbt.com>
							 | 
						|
								#
							 | 
						|
								# Distributed under the OSI-approved BSD License (the "License");
							 | 
						|
								# see accompanying file Copyright.txt for details.
							 | 
						|
								#
							 | 
						|
								# This software is distributed WITHOUT ANY WARRANTY; without even the
							 | 
						|
								# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
							 | 
						|
								# See the License for more information.
							 | 
						|
								#=============================================================================
							 | 
						|
								# (To distribute this file outside of CMake, substitute the full
							 | 
						|
								#  License text for the above reference.)
							 | 
						|
								
							 | 
						|
								# [INTERNAL]
							 | 
						|
								# Please do not call this function directly
							 | 
						|
								function(_DetermineVSServicePackFromCompiler _OUT_VAR _cl_version)
							 | 
						|
								   if    (${_cl_version} VERSION_EQUAL "14.00.50727.42")
							 | 
						|
								       set(_version "vc80")
							 | 
						|
								   elseif(${_cl_version} VERSION_EQUAL "14.00.50727.762")
							 | 
						|
								       set(_version "vc80sp1")
							 | 
						|
								   elseif(${_cl_version} VERSION_EQUAL "15.00.21022.08")
							 | 
						|
								       set(_version "vc90")
							 | 
						|
								   elseif(${_cl_version} VERSION_EQUAL "15.00.30729.01")
							 | 
						|
								       set(_version "vc90sp1")
							 | 
						|
								   elseif(${_cl_version} VERSION_EQUAL "16.00.30319.01")
							 | 
						|
								       set(_version "vc100")
							 | 
						|
								   else()
							 | 
						|
								       set(_version "")
							 | 
						|
								   endif()
							 | 
						|
								   set(${_OUT_VAR} ${_version} PARENT_SCOPE)
							 | 
						|
								endfunction()
							 | 
						|
								
							 | 
						|
								#
							 | 
						|
								# A function to call to determine the Visual Studio service pack
							 | 
						|
								# in use.  See documentation above.
							 | 
						|
								function(DetermineVSServicePack _pack)
							 | 
						|
								    if(NOT DETERMINED_VS_SERVICE_PACK OR NOT ${_pack})
							 | 
						|
										if(${CMAKE_BUILD_TOOL} STREQUAL "nmake")
							 | 
						|
											EXECUTE_PROCESS(COMMAND ${CMAKE_CXX_COMPILER} "/?"
							 | 
						|
												ERROR_VARIABLE _output)
							 | 
						|
											set(DETERMINED_VS_SERVICE_PACK ${_output})
							 | 
						|
									    else()	
							 | 
						|
											file(WRITE "${CMAKE_BINARY_DIR}/return0.cc"
							 | 
						|
												"int main() { return 0; }\n")
							 | 
						|
								
							 | 
						|
											try_compile(DETERMINED_VS_SERVICE_PACK
							 | 
						|
												"${CMAKE_BINARY_DIR}"
							 | 
						|
												"${CMAKE_BINARY_DIR}/return0.cc"
							 | 
						|
												OUTPUT_VARIABLE _output
							 | 
						|
												COPY_FILE "${CMAKE_BINARY_DIR}/return0.cc")
							 | 
						|
								        
							 | 
						|
											file(REMOVE "${CMAKE_BINARY_DIR}/return0.cc")
							 | 
						|
										endif()
							 | 
						|
								                
							 | 
						|
								        if(DETERMINED_VS_SERVICE_PACK AND _output)
							 | 
						|
								            string(REGEX MATCH "Compiler Version [0-9]+.[0-9]+.[0-9]+.[0-9]+"
							 | 
						|
								                _cl_version "${_output}")
							 | 
						|
								            if(_cl_version)
							 | 
						|
								                string(REGEX MATCHALL "[0-9]+"
							 | 
						|
								                    _cl_version_list "${_cl_version}")
							 | 
						|
								                list(GET _cl_version_list 0 _major)
							 | 
						|
								                list(GET _cl_version_list 1 _minor)
							 | 
						|
								                list(GET _cl_version_list 2 _patch)
							 | 
						|
								                list(GET _cl_version_list 3 _tweak)
							 | 
						|
								
							 | 
						|
								                set(_cl_version_string ${_major}.${_minor}.${_patch}.${_tweak})
							 | 
						|
								                
							 | 
						|
								                # Call helper function to determine VS version
							 | 
						|
								                _DetermineVSServicePackFromCompiler(_sp "${_cl_version_string}")
							 | 
						|
								                if(_sp)
							 | 
						|
								                    #set(${_pack} "${_sp}(${_cl_version_string})" CACHE INTERNAL
							 | 
						|
													set(${_pack} "${_sp}" CACHE INTERNAL
							 | 
						|
								                        "The Visual Studio Release with Service Pack")
							 | 
						|
								                endif()
							 | 
						|
								            endif()
							 | 
						|
								        endif()
							 | 
						|
								    endif()
							 | 
						|
								endfunction()
							 |