lib/dev_msbuild.rb in dev-2.0.46 vs lib/dev_msbuild.rb in dev-2.0.47
- old
+ new
@@ -1,71 +1,143 @@
\ No newline at end of file
+#require_relative 'msbuild.rb'
+# Visual Studio 2008 version 9.0, solution format version 10.00
+# Visual Studio 2010 version 10.0, solution format version 11.00
+# Visual Studio 2012 version 11.0, solution format version 12.00
+# Visual Studio 2013 version 12.0, solution format version 12.00
+class MSBuild < Hash
+
+ def initialize
+ self[:vs9]="C:\\Windows\\Microsoft.NET\\Framework\\v3.5\\msbuild.exe" if(File.exists?("C:\\Windows\\Microsoft.NET\\Framework\\v3.5\\msbuild.exe"))
+ self[:vs10]="C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\msbuild.exe" if(File.exists?("C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\msbuild.exe"))
+ self[:vs12]="C:\\Program Files (x86)\\MSBuild\\12.0\\bin\\msbuild.exe" if(File.exists?("C:\\Program Files (x86)\\MSBuild\\12.0\\bin\\msbuild.exe"))
+ end
+
+ def self.has_version? version
+ if(defined?(MSBUILD))
+ MSBUILD.has_key?(version)
+ else
+ msb=MSBuild.new
+ return msb.has_key? version
+ end
+ end
+
+ def self.get_version version
+ if(defined?(MSBUILD))
+ MSBUILD[version]
+ else
+ msb=MSBuild.new
+ return msb[version]
+ end
+ end
+
+ def self.get_vs_version(sln_filename)
+ sln_text=File.read(sln_filename,:encoding=>'UTF-8')
+ return :vs9 if sln_text.include?('Format Version 10.00')
+ return :vs12
+ end
+
+ def self.get_configurations(sln_filename)
+ configs=Array.new
+ sln_text=File.read(sln_filename,:encoding=>'UTF-8')
+ sln_text.scan( /= ([\w]+)\|/ ).each{|m|
+ c=m.first.to_s
+ configs << c if !configs.include?(c)
+ }
+ return configs
+ end
+
+ def self.get_platforms(sln_filename)
+ platforms=Array.new
+ sln_text=File.read(sln_filename,:encoding=>"UTF-8")
+ sln_text.scan( /= [\w]+\|([\w ]+)/ ).each{|m|
+ p=m.first.to_s
+ platforms << p if !platforms.include?(p)
+ }
+ return platforms
+ end
+
+ def self.get_build_commands sln_filename
+ build_commands=nil
+ vs_version=MSBuild.get_vs_version(sln_filename)
+ if(MSBuild.has_version?(vs_version))
+ MSBuild.get_configurations(sln_filename).each{ |configuration|
+ MSBuild.get_platforms(sln_filename).each{|platform|
+ build_commands=Array.new if build_commands.nil?
+ build_commands << "\"#{MSBuild.get_version(vs_version)}\" \"#{sln_filename}\" /nologo /p:Configuration=#{configuration} /p:Platform=\"#{platform}\""
+ }
+ }
+ end
+ build_commands
+ end
+end
+