373 lines
12 KiB
Text
373 lines
12 KiB
Text
'
|
|
' Contributor(s):
|
|
' Michael Jerris <mike@jerris.com>
|
|
' David A. Horner http://dave.thehorners.com
|
|
'----------------------------------------------
|
|
|
|
'On Error Resume Next
|
|
' **************
|
|
' Initialization
|
|
' **************
|
|
|
|
Set WshShell = CreateObject("WScript.Shell")
|
|
Set FSO = CreateObject("Scripting.FileSystemObject")
|
|
Set WshSysEnv = WshShell.Environment("SYSTEM")
|
|
Set xml = CreateObject("Microsoft.XMLHTTP")
|
|
Dim UseWgetEXE
|
|
|
|
On Error Resume Next
|
|
Set oStream = CreateObject("Adodb.Stream")
|
|
On Error Goto 0
|
|
|
|
If Not IsObject(oStream) Then
|
|
wscript.echo("Failed to create Adodb.Stream, using alternative download method.")
|
|
UseWgetEXE=true
|
|
Else
|
|
UseWgetEXE=false
|
|
End If
|
|
Randomize
|
|
Set objArgs = WScript.Arguments
|
|
quote=Chr(34)
|
|
ScriptDir=Left(WScript.ScriptFullName,Len(WScript.ScriptFullName)-Len(WScript.ScriptName))
|
|
UtilsDir=Showpath(ScriptDir)
|
|
ToolsBase="http://files.freeswitch.org/downloads/win32/"
|
|
|
|
If UseWgetEXE Then
|
|
GetWgetEXE UtilsDir
|
|
End If
|
|
|
|
GetCompressionTools UtilsDir
|
|
|
|
|
|
If objArgs.Count >=3 Then
|
|
Select Case objArgs(0)
|
|
Case "Get"
|
|
Wget objArgs(1), Showpath(objArgs(2))
|
|
Case "GetUnzip"
|
|
WgetUnCompress objArgs(1), Showpath(objArgs(2))
|
|
Case "GetUnzipSounds"
|
|
WgetSounds objArgs(1), objArgs(2), Showpath(objArgs(3)), objArgs(4)
|
|
Case "Version"
|
|
'CreateVersion(tmpFolder, VersionDir, includebase, includedest)
|
|
CreateVersion Showpath(objArgs(1)), Showpath(objArgs(2)), objArgs(3), objArgs(4)
|
|
End Select
|
|
End If
|
|
|
|
|
|
' *******************
|
|
' Utility Subroutines
|
|
' *******************
|
|
|
|
Sub WgetSounds(PrimaryName, Freq, DestFolder, VersionFile)
|
|
BaseURL = "http://files.freeswitch.org/freeswitch-sounds"
|
|
Set objFSO = CreateObject("Scripting.FileSystemObject")
|
|
Set objTextFile = objFSO.OpenTextFile(VersionFile,1)
|
|
Do Until objTextFile.AtEndOfStream
|
|
strLine = objTextFile.Readline
|
|
if Len(strLine) > 2 then
|
|
versionPos = InstrRev(strLine, " ", -1, 1)
|
|
name = Left(strLine, versionPos-1)
|
|
if name = PrimaryName Then
|
|
version = Right(strLine, Len(strLine) - versionPos)
|
|
Wscript.Echo "Sound name: " & name & " Version " & version
|
|
URL = BaseURL & "-" & name & "-" & Freq &"-" & version & ".tar.gz"
|
|
Wscript.Echo "URL: " & URL
|
|
WgetUnCompress URL, Showpath(DestFolder)
|
|
End If
|
|
End if
|
|
Loop
|
|
End Sub
|
|
|
|
Sub WgetUnCompress(URL, DestFolder)
|
|
If Right(DestFolder, 1) <> "\" Then DestFolder = DestFolder & "\" End If
|
|
StartPos = InstrRev(URL, "/", -1, 1)
|
|
strlength = Len(URL)
|
|
filename=Right(URL,strlength-StartPos)
|
|
NameEnd = InstrRev(filename, ".",-1, 1)
|
|
filestrlength = Len(filename)
|
|
filebase = Left(filename,NameEnd)
|
|
fileext = Right(filename, Len(filename) - NameEnd)
|
|
Wget URL, DestFolder
|
|
If fileext = "zip" Then
|
|
UnCompress Destfolder & filename, DestFolder & filebase
|
|
Else
|
|
UnCompress Destfolder & filename, DestFolder
|
|
End If
|
|
End Sub
|
|
|
|
Sub GetCompressionTools(DestFolder)
|
|
Dim oExec
|
|
If Right(DestFolder, 1) <> "\" Then DestFolder = DestFolder & "\" End If
|
|
If Not FSO.FileExists(DestFolder & "7za.exe") Then
|
|
If Not FSO.FileExists(DestFolder & "7za.tag") Then
|
|
Set MyFile = fso.CreateTextFile(DestFolder & "7za.tag", True)
|
|
MyFile.WriteLine("This file marks a pending download for 7za.exe so we don't download it twice at the same time")
|
|
MyFile.Close
|
|
|
|
Wget ToolsBase & "7za.exe", DestFolder
|
|
|
|
FSO.DeleteFile DestFolder & "7za.tag" ,true
|
|
Else
|
|
WScript.Sleep(5000)
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Sub GetWgetEXE(DestFolder)
|
|
Dim oExec
|
|
If Right(DestFolder, 1) <> "\" Then DestFolder = DestFolder & "\" End If
|
|
If Not FSO.FileExists(DestFolder & "wget.exe") Then
|
|
Slow_Wget ToolsBase & "wget.exe", DestFolder
|
|
End If
|
|
End Sub
|
|
|
|
Sub UnCompress(Archive, DestFolder)
|
|
batname = "tmp" & CStr(Int(10000*Rnd)) & ".bat"
|
|
wscript.echo("Extracting: " & Archive)
|
|
Set MyFile = fso.CreateTextFile(UtilsDir & batname, True)
|
|
MyFile.WriteLine("@" & quote & UtilsDir & "7za.exe" & quote & " x " & quote & Archive & quote & " -y -o" & quote & DestFolder & quote )
|
|
MyFile.Close
|
|
Set oExec = WshShell.Exec(UtilsDir & batname)
|
|
Do
|
|
WScript.Echo OExec.StdOut.ReadLine()
|
|
Loop While Not OExec.StdOut.atEndOfStream
|
|
If FSO.FileExists(Left(Archive, Len(Archive)-3))Then
|
|
Set MyFile = fso.CreateTextFile(UtilsDir & batname, True)
|
|
MyFile.WriteLine("@" & quote & UtilsDir & "7za.exe" & quote & " x " & quote & Left(Archive, Len(Archive)-3) & quote & " -y -o" & quote & DestFolder & quote )
|
|
MyFile.Close
|
|
Set oExec = WshShell.Exec(UtilsDir & batname)
|
|
Do
|
|
WScript.Echo OExec.StdOut.ReadLine()
|
|
Loop While Not OExec.StdOut.atEndOfStream
|
|
WScript.Sleep(500)
|
|
FSO.DeleteFile Left(Archive, Len(Archive)-3) ,true
|
|
End If
|
|
If FSO.FileExists(Left(Archive, Len(Archive)-3) & "tar")Then
|
|
Set MyFile = fso.CreateTextFile(UtilsDir & batname, True)
|
|
MyFile.WriteLine("@" & quote & UtilsDir & "7za.exe" & quote & " x " & quote & Left(Archive, Len(Archive)-3) & "tar" & quote & " -y -o" & quote & DestFolder & quote )
|
|
MyFile.Close
|
|
Set oExec = WshShell.Exec(UtilsDir & batname)
|
|
Do
|
|
WScript.Echo OExec.StdOut.ReadLine()
|
|
Loop While Not OExec.StdOut.atEndOfStream
|
|
WScript.Sleep(500)
|
|
FSO.DeleteFile Left(Archive, Len(Archive)-3) & "tar",true
|
|
End If
|
|
|
|
WScript.Sleep(500)
|
|
If FSO.FileExists(UtilsDir & batname)Then
|
|
FSO.DeleteFile UtilsDir & batname, True
|
|
End If
|
|
End Sub
|
|
|
|
Sub Wget(URL, DestFolder)
|
|
StartPos = InstrRev(URL, "/", -1, 1)
|
|
strlength = Len(URL)
|
|
filename=Right(URL,strlength-StartPos)
|
|
If Right(DestFolder, 1) <> "\" Then DestFolder = DestFolder & "\" End If
|
|
|
|
Wscript.echo("Downloading: " & URL)
|
|
|
|
If UseWgetEXE Then
|
|
batname = "tmp" & CStr(Int(10000*Rnd)) & ".bat"
|
|
Set MyFile = fso.CreateTextFile(UtilsDir & batname, True)
|
|
MyFile.WriteLine("@cd " & quote & DestFolder & quote)
|
|
MyFile.WriteLine("@" & quote & UtilsDir & "wget.exe" & quote & " " & URL)
|
|
MyFile.Close
|
|
Set oExec = WshShell.Exec(UtilsDir & batname)
|
|
Do
|
|
WScript.Echo OExec.StdOut.ReadLine()
|
|
Loop While Not OExec.StdOut.atEndOfStream
|
|
|
|
Else
|
|
xml.Open "GET", URL, False
|
|
xml.Send
|
|
|
|
Const adTypeBinary = 1
|
|
Const adSaveCreateOverWrite = 2
|
|
Const adSaveCreateNotExist = 1
|
|
|
|
oStream.type = adTypeBinary
|
|
oStream.open
|
|
oStream.write xml.responseBody
|
|
oStream.savetofile DestFolder & filename, adSaveCreateOverWrite
|
|
oStream.close
|
|
End If
|
|
|
|
End Sub
|
|
|
|
Sub Slow_Wget(URL, DestFolder)
|
|
StartPos = InstrRev(URL, "/", -1, 1)
|
|
strlength = Len(URL)
|
|
filename=Right(URL,strlength-StartPos)
|
|
If Right(DestFolder, 1) <> "\" Then DestFolder = DestFolder & "\" End If
|
|
|
|
Wscript.echo("Downloading: " & URL)
|
|
xml.Open "GET", URL, False
|
|
xml.Send
|
|
|
|
const ForReading = 1 , ForWriting = 2 , ForAppending = 8
|
|
Set MyFile = fso.OpenTextFile(DestFolder & filename ,ForWriting, True)
|
|
For i = 1 to lenb(xml.responseBody)
|
|
MyFile.write Chr(Ascb(midb(xml.responseBody,i,1)))
|
|
Next
|
|
MyFile.Close()
|
|
|
|
End Sub
|
|
|
|
Function Showpath(folderspec)
|
|
Set f = FSO.GetFolder(folderspec)
|
|
showpath = f.path & "\"
|
|
End Function
|
|
|
|
|
|
Function FindVersionStringInConfigure(strConfigFile, strVersionString)
|
|
|
|
Set objRegEx = CreateObject("VBScript.RegExp")
|
|
objRegEx.Pattern = "[^#]AC_SUBST\(" & strVersionString & ".*\[([^\[]*)\]"
|
|
|
|
Set objFSO = CreateObject("Scripting.FileSystemObject")
|
|
Set objFile = objFSO.OpenTextFile(strConfigFile, 1)
|
|
strSearchString = objFile.ReadAll
|
|
objFile.Close
|
|
|
|
Set colMatches = objRegEx.Execute(strSearchString)
|
|
|
|
strResult = ""
|
|
If colMatches.Count > 0 Then
|
|
For Each strMatch in colMatches
|
|
strResult = objRegEx.Replace(strMatch.Value, "$1")
|
|
Next
|
|
End If
|
|
|
|
FindVersionStringInConfigure = strResult
|
|
|
|
End Function
|
|
|
|
Sub FindReplaceInFile(FileName, sFind, sReplace)
|
|
Const OpenAsASCII = 0 ' Opens the file as ASCII (TristateFalse)
|
|
Const OpenAsUnicode = -1 ' Opens the file as Unicode (TristateTrue)
|
|
Const OpenAsDefault = -2 ' Opens the file using the system default
|
|
|
|
Const OverwriteIfExist = -1
|
|
Const FailIfNotExist = 0
|
|
Const ForReading = 1
|
|
|
|
Set fOrgFile = FSO.OpenTextFile(FileName, ForReading, FailIfNotExist, OpenAsASCII)
|
|
sText = fOrgFile.ReadAll
|
|
fOrgFile.Close
|
|
sText = Replace(sText, sFind, sReplace)
|
|
Set fNewFile = FSO.CreateTextFile(FileName, OverwriteIfExist, OpenAsASCII)
|
|
fNewFile.WriteLine sText
|
|
fNewFile.Close
|
|
End Sub
|
|
|
|
Sub CreateVersion(tmpFolder, VersionDir, includebase, includedest)
|
|
Dim oExec
|
|
|
|
strVerMajor = FindVersionStringInConfigure(VersionDir & "configure.in", "SWITCH_VERSION_MAJOR")
|
|
strVerMinor = FindVersionStringInConfigure(VersionDir & "configure.in", "SWITCH_VERSION_MINOR")
|
|
strVerMicro = FindVersionStringInConfigure(VersionDir & "configure.in", "SWITCH_VERSION_MICRO")
|
|
strVerRev = FindVersionStringInConfigure(VersionDir & "configure.in", "SWITCH_VERSION_REVISION")
|
|
|
|
If Right(tmpFolder, 1) <> "\" Then tmpFolder = tmpFolder & "\" End If
|
|
If Not FSO.FileExists(tmpFolder & "fs_svnversion.exe") Then
|
|
Wget ToolsBase & "fs_svnversion.exe", tmpFolder
|
|
End If
|
|
|
|
If Not FSO.FileExists(tmpFolder & "libdb44.dll") Then
|
|
Wget ToolsBase & "libdb44.dll", tmpFolder
|
|
End If
|
|
If Not FSO.FileExists(tmpFolder & "libsvn_diff-1.dll") Then
|
|
Wget ToolsBase & "libsvn_diff-1.dll", tmpFolder
|
|
End If
|
|
If Not FSO.FileExists(tmpFolder & "libsvn_subr-1.dll") Then
|
|
Wget ToolsBase & "libsvn_subr-1.dll", tmpFolder
|
|
End If
|
|
If Not FSO.FileExists(tmpFolder & "libsvn_wc-1.dll") Then
|
|
Wget ToolsBase & "libsvn_wc-1.dll", tmpFolder
|
|
End If
|
|
If Not FSO.FileExists(tmpFolder & "intl3_svn.dll") Then
|
|
Wget ToolsBase & "intl3_svn.dll", tmpFolder
|
|
End If
|
|
If Not FSO.FileExists(tmpFolder & "libapr-1.dll") Then
|
|
Wget ToolsBase & "libapr-1.dll", tmpFolder
|
|
End If
|
|
If Not FSO.FileExists(tmpFolder & "libaprutil-1.dll") Then
|
|
Wget ToolsBase & "libaprutil-1.dll", tmpFolder
|
|
End If
|
|
If Not FSO.FileExists(tmpFolder & "libapriconv-1.dll") Then
|
|
Wget ToolsBase & "libapriconv-1.dll", tmpFolder
|
|
End If
|
|
If Not FSO.FileExists(tmpFolder & "libsvn_delta-1.dll") Then
|
|
Wget ToolsBase & "libsvn_delta-1.dll", tmpFolder
|
|
End If
|
|
|
|
Dim sLastFile
|
|
Const OverwriteIfExist = -1
|
|
Const ForReading = 1
|
|
|
|
if strVerRev = "" Then
|
|
if FSO.FolderExists(VersionDir & ".svn") Then
|
|
VersionCmd="fs_svnversion " & quote & VersionDir & "." & quote & " -n"
|
|
Set MyFile = fso.CreateTextFile(tmpFolder & "tmpVersion.Bat", True)
|
|
MyFile.WriteLine("@" & "cd " & quote & tmpFolder & quote )
|
|
MyFile.WriteLine("@" & VersionCmd)
|
|
MyFile.Close
|
|
Set oExec = WshShell.Exec("cmd /C " & quote & tmpFolder & "tmpVersion.Bat" & quote)
|
|
Do
|
|
strFromProc = OExec.StdOut.ReadLine()
|
|
VERSION="svn-" & strFromProc
|
|
Loop While Not OExec.StdOut.atEndOfStream
|
|
sLastVersion = ""
|
|
Set sLastFile = FSO.OpenTextFile(tmpFolder & "lastversion", ForReading, true, OpenAsASCII)
|
|
If Not sLastFile.atEndOfStream Then
|
|
sLastVersion = sLastFile.ReadLine()
|
|
End If
|
|
sLastFile.Close
|
|
End If
|
|
|
|
if FSO.FolderExists(VersionDir & ".git") Then
|
|
VersionCmd="git log --format=" & quote & "%%h %%ci" & quote & " -1 HEAD"
|
|
Set MyFile = FSO.CreateTextFile(tmpFolder & "tmpVersion.Bat", True)
|
|
MyFile.WriteLine("@" & "cd " & quote & VersionDir & quote)
|
|
MyFile.WriteLine("@" & VersionCmd)
|
|
MyFile.Close
|
|
Set oExec = WshShell.Exec("cmd /C " & quote & tmpFolder & "tmpVersion.Bat" & quote)
|
|
Do
|
|
strFromProc = Trim(OExec.StdOut.ReadLine())
|
|
VERSION="git-" & strFromProc
|
|
Loop While Not OExec.StdOut.atEndOfStream
|
|
sLastVersion = ""
|
|
Set sLastFile = FSO.OpenTextFile(tmpFolder & "lastversion", ForReading, true, OpenAsASCII)
|
|
If Not sLastFile.atEndOfStream Then
|
|
sLastVersion = sLastFile.ReadLine()
|
|
End If
|
|
sLastFile.Close
|
|
VERSION = Replace(VERSION, ":", "-")
|
|
End If
|
|
End If
|
|
|
|
if strVerRev <> "" Then
|
|
VERSION = strVerRev
|
|
End If
|
|
|
|
If VERSION = "" Then
|
|
VERSION = "UNKNOWN"
|
|
End If
|
|
|
|
If VERSION <> sLastVersion Then
|
|
Set MyFile = fso.CreateTextFile(tmpFolder & "lastversion", True)
|
|
MyFile.WriteLine(VERSION)
|
|
MyFile.Close
|
|
|
|
FSO.CopyFile includebase, includedest, true
|
|
FindReplaceInFile includedest, "@SWITCH_VERSION_REVISION@", VERSION
|
|
FindReplaceInFile includedest, "@SWITCH_VERSION_MAJOR@", strVerMajor
|
|
FindReplaceInFile includedest, "@SWITCH_VERSION_MINOR@", strVerMinor
|
|
FindReplaceInFile includedest, "@SWITCH_VERSION_MICRO@", strVerMicro
|
|
|
|
End If
|
|
|
|
End Sub
|