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()
 |