Option Explicit ' vbslib ver3.00 Sep.22, 2009 ' Copyright (c) 2008-2009, T's-Neko at Sage Plaisir 21 (Japan) ' All rights reserved. Based on 3-clause BSD license. Dim g_SrcPath Dim g_VisualStudio_Path g_VisualStudio_Path = g_SrcPath Const E_PathNotFound2 = &h80070002 '******************************************************************************** ' <<< [devenv_rebuild] Visual Studio 2005 command line build >>> '******************************************************************************** Sub devenv_rebuild( sln_path, config ) Dim m : Set m = get_DevEnvObj() m.Rebuild sln_path, config End Sub '******************************************************************************** ' <<< [devenv_build] Visual Studio 2005 command line build >>> '******************************************************************************** Sub devenv_build( sln_path, config ) Dim m : Set m = get_DevEnvObj() m.Build sln_path, config End Sub '******************************************************************************** ' <<< [devenv_clean] Visual Studio 2005 clean >>> '******************************************************************************** Sub devenv_clean( ByVal sln ) Dim m : Set m = get_DevEnvObj() m.Clean sln End Sub '******************************************************************************** ' <<< [get_DevEnvObj] >>> '******************************************************************************** Dim g_DevEnvObj Function get_DevEnvObj() '// has_interface_of ClassI If IsEmpty( g_DevEnvObj ) Then _ Set g_DevEnvObj = new DevEnvObj : ErrCheck Set get_DevEnvObj = g_DevEnvObj End Function '------------------------------------------------------------------------- ' ### <<<< [DevEnvObj] Class >>>> '------------------------------------------------------------------------- Class DevEnvObj Public m_InstallDir2008 Public m_InstallDir2005 '// vbslib var: devenv_ver_name Private Sub Class_Initialize() Dim v m_InstallDir2008 = RegRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\"+_ "InstallDir" ) v = RegRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\StartPage\NewsChannel" ) If not IsEmpty( v ) Then If IsEmpty( GetVar( "devenv_ver_name" ) ) Then SetVar "devenv_ver_name", "vs2008" End IF End If m_InstallDir2005 = RegRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\"+_ "InstallDir" ) v = RegRead( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\StartPage\NewsChannel" ) If not IsEmpty( v ) Then If IsEmpty( GetVar( "devenv_ver_name" ) ) Then SetVar "devenv_ver_name", "vs2005" End IF End If End Sub '******************************************************************************** ' <<< [devenv] >>> '******************************************************************************** Public Sub devenv( SlnPath, param, config ) Dim r, cmdline Dim install_dir '//=== Get install_dir Select Case GetSlnFileVer( SlnPath ) Case 2008 If IsEmpty( m_InstallDir2008 ) Then Raise 1,"Visual Studio 2008 がインストールされていません" install_dir = m_InstallDir2008 Case 2005 If IsEmpty( m_InstallDir2005 ) Then Raise 1,"Visual Studio 2005 がインストールされていません" install_dir = m_InstallDir2005 End Select '//=== Start build cmdline = """" + install_dir + "devenv.exe"" " + param + " """ + config + """" r = g_sh.Run( cmdline,, True ) If r <> 0 Then Err.raise E_BuildFail,,"devenv failed " + param + " in " + g_sh.CurrentDirectory End Sub '******************************************************************************** ' <<< [Rebuild] >>> '******************************************************************************** Public Sub Rebuild( sln_path, config ) Dim sln_path2 : sln_path2 = env( sln_path ) echo_c ">devenv.exe """+sln_path2+""" /rebuild "+config echo_c " (if cl.exe was already run background by stop build, it may be fail.)" Me.devenv sln_path2, """" + sln_path2 + """ /rebuild", config End Sub '******************************************************************************** ' <<< [Build] >>> '******************************************************************************** Public Sub Build( sln_path, config ) Dim sln_path2 : sln_path2 = env( sln_path ) echo_c ">devenv.exe """+sln_path2+""" /build "+config echo_c " (if cl.exe was already run background by stop build, it may be fail.)" Me.devenv sln_path2, """" + sln_path2 + """ /build", config End Sub '******************************************************************************** ' <<< [Clean] >>> '******************************************************************************** Public Sub Clean( sln_path ) Dim sln_path2 : sln_path2 = env( sln_path ) If not g_fs.FileExists( sln_path2 ) Then Err.Raise E_FileNotExist,,"Not found : " + sln_path2 echo_c ">devenv.exe """+sln_path2+""" /clean *" Dim ec : Set ec = new EchoOff Me.devenv sln_path2, """"+sln_path2+""" /clean", "Release" del "Release" Me.devenv sln_path2, """"+sln_path2+""" /clean", "Debug" del "Debug" del "*.ncb" del "*.suo" del "*.user" End Sub End Class '******************************************************************************** ' <<< [GetSlnFileVer] >>> ' - ret : 2008, 2005 '******************************************************************************** Function GetSlnFileVer( SlnPath ) Dim f, line, args, i Dim ec : Set ec = new EchoOff Set f = OpenForRead( SlnPath ) i=1 Do Until f.AtEndOfStream line = f.ReadLine() If InStr( line, "# Visual Studio" ) > 0 Then GetSlnFileVer = CInt( Mid( line, 17 ) ) Exit Function End If If i=10 Then Exit Do i=i+1 Loop Raise 1,"" End Function