VirtualBox

source: vbox/trunk/configure.vbs@ 30037

Last change on this file since 30037 was 28800, checked in by vboxsync, 14 years ago

Automated rebranding to Oracle copyright/license strings via filemuncher

  • Property svn:eol-style set to CRLF
  • Property svn:keywords set to Id
File size: 68.5 KB
Line 
1' $Id: configure.vbs 28800 2010-04-27 08:22:32Z vboxsync $
2'' @file
3' The purpose of this script is to check for all external tools, headers, and
4' libraries VBox OSE depends on.
5'
6' The script generates the build configuration file 'AutoConfig.kmk' and the
7' environment setup script 'env.bat'. A log of what has been done is
8' written to 'configure.log'.
9'
10
11'
12' Copyright (C) 2006-2007 Oracle Corporation
13'
14' This file is part of VirtualBox Open Source Edition (OSE), as
15' available from http://www.virtualbox.org. This file is free software;
16' you can redistribute it and/or modify it under the terms of the GNU
17' General Public License (GPL) as published by the Free Software
18' Foundation, in version 2 as it comes in the "COPYING" file of the
19' VirtualBox OSE distribution. VirtualBox OSE is distributed in the
20' hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
21'
22
23
24'*****************************************************************************
25'* Global Variables *
26'*****************************************************************************
27dim g_strPath, g_strEnvFile, g_strLogFile, g_strCfgFile, g_strShellOutput
28g_strPath = Left(Wscript.ScriptFullName, Len(Wscript.ScriptFullName) - Len("\configure.vbs"))
29g_strEnvFile = g_strPath & "\env.bat"
30g_strCfgFile = g_strPath & "\AutoConfig.kmk"
31g_strLogFile = g_strPath & "\configure.log"
32'g_strTmpFile = g_strPath & "\configure.tmp"
33
34dim g_objShell, g_objFileSys
35Set g_objShell = WScript.CreateObject("WScript.Shell")
36Set g_objFileSys = WScript.CreateObject("Scripting.FileSystemObject")
37
38dim g_strPathkBuild, g_strPathkBuildBin, g_strPathDev, g_strPathVCC, g_strPathPSDK, g_strPathDDK, g_strSubOutput
39g_strPathkBuild = ""
40g_strPathDev = ""
41g_strPathVCC = ""
42g_strPathPSDK = ""
43g_strPathDDK = ""
44
45dim g_blnDisableCOM, g_strDisableCOM
46g_blnDisableCOM = False
47g_strDisableCOM = ""
48
49' The internal mode is primarily for skipping some large libraries.
50dim g_blnInternalMode
51g_blnInternalMode = False
52
53' Whether to try the internal stuff first or last.
54dim g_blnInternalFirst
55g_blnInternalFirst = True
56
57
58
59''
60' Converts to unix slashes
61function UnixSlashes(str)
62 UnixSlashes = replace(str, "\", "/")
63end function
64
65
66''
67' Converts to dos slashes
68function DosSlashes(str)
69 DosSlashes = replace(str, "/", "\")
70end function
71
72
73''
74' Read a file (typically the tmp file) into a string.
75function FileToString(strFilename)
76 const ForReading = 1, TristateFalse = 0
77 dim objLogFile, str
78
79 set objFile = g_objFileSys.OpenTextFile(DosSlashes(strFilename), ForReading, False, TristateFalse)
80 str = objFile.ReadAll()
81 objFile.Close()
82
83 FileToString = str
84end function
85
86
87''
88' Deletes a file
89sub FileDelete(strFilename)
90 if g_objFileSys.FileExists(DosSlashes(strFilename)) then
91 g_objFileSys.DeleteFile(DosSlashes(strFilename))
92 end if
93end sub
94
95
96''
97' Appends a line to an ascii file.
98sub FileAppendLine(strFilename, str)
99 const ForAppending = 8, TristateFalse = 0
100 dim objFile
101
102 set objFile = g_objFileSys.OpenTextFile(DosSlashes(strFilename), ForAppending, True, TristateFalse)
103 objFile.WriteLine(str)
104 objFile.Close()
105end sub
106
107
108''
109' Checks if the file exists.
110function FileExists(strFilename)
111 FileExists = g_objFileSys.FileExists(DosSlashes(strFilename))
112end function
113
114
115''
116' Checks if the directory exists.
117function DirExists(strDirectory)
118 DirExists = g_objFileSys.FolderExists(DosSlashes(strDirectory))
119end function
120
121
122''
123' Checks if this is a WOW64 process.
124function IsWow64()
125 if g_objShell.Environment("PROCESS")("PROCESSOR_ARCHITEW6432") <> "" then
126 IsWow64 = 1
127 else
128 IsWow64 = 0
129 end if
130end function
131
132
133''
134' Translates a register root name to a value
135function RegTransRoot(strRoot)
136 const HKEY_LOCAL_MACHINE = &H80000002
137 const HKEY_CURRENT_USER = &H80000001
138 select case strRoot
139 case "HKLM"
140 RegTransRoot = HKEY_LOCAL_MACHINE
141 case "HKCU"
142 RegTransRoot = HKEY_CURRENT_USER
143 case else
144 MsgFatal "RegEnumSubKeys: Unknown root: " & strRoot
145 RegTransRoot = 0
146 end select
147end function
148
149
150'' The registry globals
151dim g_objReg, g_objRegCtx
152dim g_blnRegistry
153g_blnRegistry = false
154
155
156''
157' Init the register provider globals.
158function RegInit()
159 RegInit = false
160 On Error Resume Next
161 if g_blnRegistry = false then
162 set g_objRegCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
163 ' Comment out the following for lines if the cause trouble on your windows version.
164 if IsWow64() then
165 g_objRegCtx.Add "__ProviderArchitecture", 64
166 g_objRegCtx.Add "__RequiredArchitecture", true
167 end if
168 set objLocator = CreateObject("Wbemscripting.SWbemLocator")
169 set objServices = objLocator.ConnectServer("", "root\default", "", "", , , , g_objRegCtx)
170 set g_objReg = objServices.Get("StdRegProv")
171 g_blnRegistry = true
172 end if
173 RegInit = true
174end function
175
176
177''
178' Gets a value from the registry. Returns "" if string wasn't found / valid.
179function RegGetString(strName)
180 RegGetString = ""
181 if RegInit() then
182 dim strRoot, strKey, strValue
183 dim iRoot
184
185 ' split up into root, key and value parts.
186 strRoot = left(strName, instr(strName, "\") - 1)
187 strKey = mid(strName, instr(strName, "\") + 1, instrrev(strName, "\") - instr(strName, "\"))
188 strValue = mid(strName, instrrev(strName, "\") + 1)
189
190 ' Must use ExecMethod to call the GetStringValue method because of the context.
191 Set InParms = g_objReg.Methods_("GetStringValue").Inparameters
192 InParms.hDefKey = RegTransRoot(strRoot)
193 InParms.sSubKeyName = strKey
194 InParms.sValueName = strValue
195 On Error Resume Next
196 set OutParms = g_objReg.ExecMethod_("GetStringValue", InParms, , g_objRegCtx)
197 if OutParms.ReturnValue = 0 then
198 RegGetString = OutParms.sValue
199 end if
200 else
201 ' fallback mode
202 On Error Resume Next
203 RegGetString = g_objShell.RegRead(strName)
204 end if
205end function
206
207
208''
209' Returns an array of subkey strings.
210function RegEnumSubKeys(strRoot, strKeyPath)
211 dim iRoot
212 iRoot = RegTransRoot(strRoot)
213 RegEnumSubKeys = Array()
214
215 if RegInit() then
216 ' Must use ExecMethod to call the EnumKey method because of the context.
217 Set InParms = g_objReg.Methods_("EnumKey").Inparameters
218 InParms.hDefKey = RegTransRoot(strRoot)
219 InParms.sSubKeyName = strKeyPath
220 On Error Resume Next
221 set OutParms = g_objReg.ExecMethod_("EnumKey", InParms, , g_objRegCtx)
222 if OutParms.ReturnValue = 0 then
223 RegEnumSubKeys = OutParms.sNames
224 end if
225 else
226 ' fallback mode
227 dim objReg, rc, arrSubKeys
228 set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
229 On Error Resume Next
230 rc = objReg.EnumKey(iRoot, strKeyPath, arrSubKeys)
231 if rc = 0 then
232 RegEnumSubKeys = arrSubKeys
233 end if
234 end if
235end function
236
237
238''
239' Gets the commandline used to invoke the script.
240function GetCommandline()
241 dim str, i
242
243 '' @todo find an api for querying it instead of reconstructing it like this...
244 GetCommandline = "cscript configure.vbs"
245 for i = 1 to WScript.Arguments.Count
246 str = WScript.Arguments.Item(i - 1)
247 if str = "" then
248 str = """"""
249 elseif (InStr(1, str, " ")) then
250 str = """" & str & """"
251 end if
252 GetCommandline = GetCommandline & " " & str
253 next
254end function
255
256
257''
258' Gets an environment variable.
259function EnvGet(strName)
260 EnvGet = g_objShell.Environment("PROCESS")(strName)
261end function
262
263
264''
265' Sets an environment variable.
266sub EnvSet(strName, strValue)
267 g_objShell.Environment("PROCESS")(strName) = strValue
268 LogPrint "EnvSet: " & strName & "=" & strValue
269end sub
270
271
272''
273' Appends a string to an environment variable
274sub EnvAppend(strName, strValue)
275 dim str
276 str = g_objShell.Environment("PROCESS")(strName)
277 g_objShell.Environment("PROCESS")(strName) = str & strValue
278 LogPrint "EnvAppend: " & strName & "=" & str & strValue
279end sub
280
281
282''
283' Prepends a string to an environment variable
284sub EnvPrepend(strName, strValue)
285 dim str
286 str = g_objShell.Environment("PROCESS")(strName)
287 g_objShell.Environment("PROCESS")(strName) = strValue & str
288 LogPrint "EnvPrepend: " & strName & "=" & strValue & str
289end sub
290
291
292''
293' Get the path of the parent directory. Returns root if root was specified.
294' Expects abs path.
295function PathParent(str)
296 PathParent = g_objFileSys.GetParentFolderName(DosSlashes(str))
297end function
298
299
300''
301' Strips the filename from at path.
302function PathStripFilename(str)
303 PathStripFilename = g_objFileSys.GetParentFolderName(DosSlashes(str))
304end function
305
306
307''
308' Get the abs path, use the short version if necessary.
309function PathAbs(str)
310 PathAbs = g_objFileSys.GetAbsolutePathName(DosSlashes(str))
311 if (InStr(1, PathAbs, " ") > 0) _
312 Or (InStr(1, PathAbs, "&") > 0) _
313 Or (InStr(1, PathAbs, "$") > 0) _
314 then
315 if FileExists(PathAbs) then
316 dim objFile
317 set objFile = g_objFileSys.GetFile(PathAbs)
318 PathAbs = objFile.ShortPath
319 elseif DirExists(PathAbs) then
320 dim objFolder
321 set objFolder = g_objFileSys.GetFolder(PathAbs)
322 PathAbs = objFolder.ShortPath
323 else
324 ' ignore non-existing paths.
325 end if
326 end if
327
328
329 if (FileExists(PathAbs) Or DirExists(PathAbs)) _
330 And ( (InStr(1, PathAbs, " ") > 0) _
331 Or (InStr(1, PathAbs, "&") > 0) _
332 Or (InStr(1, PathAbs, "$") > 0)) _
333 then
334 MsgFatal "PathAbs(" & str & ") attempted to return filename with problematic " _
335 & "characters in it (" & PathAbs & "). The tool/sdk referenced will probably " _
336 & "need to be copied or reinstalled to a location without 'spaces', '$', ';' " _
337 & "or '&' in the path name. (Unless it's a problem with this script of course...)"
338 end if
339end function
340
341
342''
343' Executes a command in the shell catching output in g_strShellOutput
344function Shell(strCommand, blnBoth)
345 dim strShell, strCmdline, objExec, str
346
347 strShell = g_objShell.ExpandEnvironmentStrings("%ComSpec%")
348 if blnBoth = true then
349 strCmdline = strShell & " /c " & strCommand & " 2>&1"
350 else
351 strCmdline = strShell & " /c " & strCommand & " 2>nul"
352 end if
353
354 LogPrint "# Shell: " & strCmdline
355 Set objExec = g_objShell.Exec(strCmdLine)
356 g_strShellOutput = objExec.StdOut.ReadAll()
357 objExec.StdErr.ReadAll()
358 do while objExec.Status = 0
359 Wscript.Sleep 20
360 g_strShellOutput = g_strShellOutput & objExec.StdOut.ReadAll()
361 objExec.StdErr.ReadAll()
362 loop
363
364 LogPrint "# Status: " & objExec.ExitCode
365 LogPrint "# Start of Output"
366 LogPrint g_strShellOutput
367 LogPrint "# End of Output"
368
369 Shell = objExec.ExitCode
370end function
371
372
373''
374' Try find the specified file in the path.
375function Which(strFile)
376 dim strPath, iStart, iEnd, str
377
378 ' the path
379 strPath = EnvGet("Path")
380 iStart = 1
381 do while iStart <= Len(strPath)
382 iEnd = InStr(iStart, strPath, ";")
383 if iEnd <= 0 then iEnd = Len(strPath) + 1
384 if iEnd > iStart then
385 str = Mid(strPath, iStart, iEnd - iStart) & "/" & strFile
386 if FileExists(str) then
387 Which = str
388 exit function
389 end if
390 end if
391 iStart = iEnd + 1
392 loop
393
394 ' registry or somewhere?
395
396 Which = ""
397end function
398
399
400''
401' Append text to the log file and echo it to stdout
402sub Print(str)
403 LogPrint str
404 Wscript.Echo str
405end sub
406
407
408''
409' Prints a test header
410sub PrintHdr(strTest)
411 LogPrint "***** Checking for " & strTest & " *****"
412 Wscript.Echo "Checking for " & StrTest & "..."
413end sub
414
415
416''
417' Prints a success message
418sub PrintResult(strTest, strResult)
419 LogPrint "** " & strTest & ": " & strResult
420 Wscript.Echo " Found "& strTest & ": " & strResult
421end sub
422
423
424''
425' Warning message.
426sub MsgWarning(strMsg)
427 Print "warning: " & strMsg
428end sub
429
430
431''
432' Fatal error.
433sub MsgFatal(strMsg)
434 Print "fatal error: " & strMsg
435 Wscript.Quit
436end sub
437
438
439''
440' Error message, fatal unless flag to ignore errors is given.
441sub MsgError(strMsg)
442 Print "error: " & strMsg
443 if g_blnInternalMode = False then
444 Wscript.Quit
445 end if
446end sub
447
448
449''
450' Write a log header with some basic info.
451sub LogInit
452 FileDelete g_strLogFile
453 LogPrint "# Log file generated by " & Wscript.ScriptFullName
454 for i = 1 to WScript.Arguments.Count
455 LogPrint "# Arg #" & i & ": " & WScript.Arguments.Item(i - 1)
456 next
457 if Wscript.Arguments.Count = 0 then
458 LogPrint "# No arguments given"
459 end if
460 LogPrint "# Reconstructed command line: " & GetCommandline()
461
462 ' some Wscript stuff
463 LogPrint "# Wscript properties:"
464 LogPrint "# ScriptName: " & Wscript.ScriptName
465 LogPrint "# Version: " & Wscript.Version
466 LogPrint "# Build: " & Wscript.BuildVersion
467 LogPrint "# Name: " & Wscript.Name
468 LogPrint "# Full Name: " & Wscript.FullName
469 LogPrint "# Path: " & Wscript.Path
470 LogPrint "#"
471
472
473 ' the environment
474 LogPrint "# Environment:"
475 dim objEnv
476 for each strVar in g_objShell.Environment("PROCESS")
477 LogPrint "# " & strVar
478 next
479 LogPrint "#"
480end sub
481
482
483''
484' Append text to the log file.
485sub LogPrint(str)
486 FileAppendLine g_strLogFile, str
487 'Wscript.Echo "dbg: " & str
488end sub
489
490
491''
492' Checks if the file exists and logs failures.
493function LogFileExists(strPath, strFilename)
494 LogFileExists = FileExists(strPath & "/" & strFilename)
495 if LogFileExists = False then
496 LogPrint "Testing '" & strPath & "': " & strFilename & " not found"
497 end if
498
499end function
500
501
502''
503' Finds the first file matching the pattern.
504' If no file is found, log the failure.
505function LogFindFile(strPath, strPattern)
506 dim str
507
508 '
509 ' Yes, there are some facy database kinda interface to the filesystem
510 ' however, breaking down the path and constructing a usable query is
511 ' too much hassle. So, we'll do it the unix way...
512 '
513 if Shell("dir /B """ & DosSlashes(strPath) & "\" & DosSlashes(strPattern) & """", True) = 0 _
514 And InStr(1, g_strShellOutput, Chr(13)) > 1 _
515 then
516 ' return the first word.
517 LogFindFile = Left(g_strShellOutput, InStr(1, g_strShellOutput, Chr(13)) - 1)
518 else
519 LogPrint "Testing '" & strPath & "': " & strPattern & " not found"
520 LogFindFile = ""
521 end if
522end function
523
524
525''
526' Finds the first directory matching the pattern.
527' If no directory is found, log the failure,
528' else return the complete path to the found directory.
529function LogFindDir(strPath, strPattern)
530 dim str
531
532 '
533 ' Yes, there are some facy database kinda interface to the filesystem
534 ' however, breaking down the path and constructing a usable query is
535 ' too much hassle. So, we'll do it the unix way...
536 '
537
538 ' List the alphabetically last names as first entries (with /O-N).
539 if Shell("dir /B /AD /O-N """ & DosSlashes(strPath) & "\" & DosSlashes(strPattern) & """", True) = 0 _
540 And InStr(1, g_strShellOutput, Chr(13)) > 1 _
541 then
542 ' return the first word.
543 LogFindDir = strPath & "/" & Left(g_strShellOutput, InStr(1, g_strShellOutput, Chr(13)) - 1)
544 else
545 LogPrint "Testing '" & strPath & "': " & strPattern & " not found"
546 LogFindDir = ""
547 end if
548end function
549
550
551''
552' Initializes the config file.
553sub CfgInit
554 FileDelete g_strCfgFile
555 CfgPrint "# -*- Makefile -*-"
556 CfgPrint "#"
557 CfgPrint "# Build configuration generated by " & GetCommandline()
558 CfgPrint "#"
559 if g_blnInternalMode = False then
560 CfgPrint "VBOX_OSE := 1"
561 end if
562end sub
563
564
565''
566' Prints a string to the config file.
567sub CfgPrint(str)
568 FileAppendLine g_strCfgFile, str
569end sub
570
571
572''
573' Initializes the environment batch script.
574sub EnvInit
575 FileDelete g_strEnvFile
576 EnvPrint "@echo off"
577 EnvPrint "rem"
578 EnvPrint "rem Environment setup script generated by " & GetCommandline()
579 EnvPrint "rem"
580end sub
581
582
583''
584' Prints a string to the environment batch script.
585sub EnvPrint(str)
586 FileAppendLine g_strEnvFile, str
587end sub
588
589
590''
591' No COM
592sub DisableCOM(strReason)
593 if g_blnDisableCOM = False then
594 LogPrint "Disabled COM components: " & strReason
595 g_blnDisableCOM = True
596 g_strDisableCOM = strReason
597 CfgPrint "VBOX_WITH_MAIN="
598 CfgPrint "VBOX_WITH_QTGUI="
599 CfgPrint "VBOX_WITH_VBOXSDL="
600 CfgPrint "VBOX_WITH_DEBUGGER_GUI="
601 CfgPrint "VBOX_WITHOUT_COM=1"
602 end if
603end sub
604
605
606''
607' Checks the the path doesn't contain characters the tools cannot deal with.
608sub CheckSourcePath
609 dim sPwd
610
611 sPwd = PathAbs(g_strPath)
612 if InStr(1, sPwd, " ") > 0 then
613 MsgError "Source path contains spaces! Please move it. (" & sPwd & ")"
614 end if
615 if InStr(1, sPwd, "$") > 0 then
616 MsgError "Source path contains the '$' char! Please move it. (" & sPwd & ")"
617 end if
618 if InStr(1, sPwd, "%") > 0 then
619 MsgError "Source path contains the '%' char! Please move it. (" & sPwd & ")"
620 end if
621 if InStr(1, sPwd, Chr(10)) > 0 _
622 Or InStr(1, sPwd, Chr(13)) > 0 _
623 Or InStr(1, sPwd, Chr(9)) > 0 _
624 then
625 MsgError "Source path contains control characters! Please move it. (" & sPwd & ")"
626 end if
627 Print "Source path: OK"
628end sub
629
630
631''
632' Checks for kBuild - very simple :)
633sub CheckForkBuild(strOptkBuild)
634 PrintHdr "kBuild"
635
636 '
637 ' Check if there is a 'kmk' in the path somewhere without
638 ' any PATH_KBUILD* stuff around.
639 '
640 blnNeedEnvVars = True
641 g_strPathkBuild = strOptkBuild
642 g_strPathkBuildBin = ""
643 if (g_strPathkBuild = "") _
644 And (EnvGet("PATH_KBUILD") = "") _
645 And (EnvGet("PATH_KBUILD_BIN") = "") _
646 And (Shell("kmk.exe --version", True) = 0) _
647 And (InStr(1,g_strShellOutput, "kBuild Make 0.1") > 0) _
648 And (InStr(1,g_strShellOutput, "PATH_KBUILD") > 0) _
649 And (InStr(1,g_strShellOutput, "PATH_KBUILD_BIN") > 0) then
650 '' @todo Need to parse out the PATH_KBUILD and PATH_KBUILD_BIN values to complete the other tests.
651 'blnNeedEnvVars = False
652 MsgWarning "You've installed kBuild it seems. configure.vbs hasn't been updated to " _
653 & "deal with that yet and will use the one it ships with. Sorry."
654 end if
655
656 '
657 ' Check for the PATH_KBUILD env.var. and fall back on root/kBuild otherwise.
658 '
659 if g_strPathkBuild = "" then
660 g_strPathkBuild = EnvGet("PATH_KBUILD")
661 if (g_strPathkBuild <> "") and (FileExists(g_strPathkBuild & "/footer.kmk") = False) then
662 MsgWarning "Ignoring incorrect kBuild path (PATH_KBUILD=" & g_strPathkBuild & ")"
663 g_strPathkBuild = ""
664 end if
665
666 if g_strPathkBuild = "" then
667 g_strPathkBuild = g_strPath & "/kBuild"
668 end if
669 end if
670
671 g_strPathkBuild = UnixSlashes(PathAbs(g_strPathkBuild))
672
673 '
674 ' Determin the location of the kBuild binaries.
675 '
676 if g_strPathkBuildBin = "" then
677 dim str2
678 if EnvGet("PROCESSOR_ARCHITECTURE") = "x86" then
679 g_strPathkBuildBin = g_strPathkBuild & "/bin/win.x86"
680 else ' boldly assumes there is only x86 and amd64.
681 g_strPathkBuildBin = g_strPathkBuild & "/bin/win.amd64"
682 if FileExists(g_strPathkBuild & "/kmk.exe") = False then
683 g_strPathkBuildBin = g_strPathkBuild & "/bin/win.x86"
684 end if
685 end if
686 if FileExists(g_strPathkBuild & "/kmk.exe") = False then
687 g_strPathkBuildBin = g_strPathkBuild & "/bin/win.x86"
688 end if
689 end if
690
691 '
692 ' Perform basic validations of the kBuild installation.
693 '
694 if (FileExists(g_strPathkBuild & "/footer.kmk") = False) _
695 Or (FileExists(g_strPathkBuild & "/header.kmk") = False) _
696 Or (FileExists(g_strPathkBuild & "/rules.kmk") = False) then
697 MsgFatal "Can't find valid kBuild at '" & g_strPathkBuild & "'. Either there is an " _
698 & "incorrect PATH_KBUILD in the environment or the checkout didn't succeed."
699 exit sub
700 end if
701 if (FileExists(g_strPathkBuildBin & "/kmk.exe") = False) _
702 Or (FileExists(g_strPathkBuildBin & "/kmk_ash.exe") = False) then
703 MsgFatal "Can't find valid kBuild binaries at '" & g_strPathkBuildBin & "'. Either there is an " _
704 & "incorrect PATH_KBUILD in the environment or the checkout didn't succeed."
705 exit sub
706 end if
707
708 if (Shell(DosSlashes(g_strPathkBuildBin & "/kmk.exe") & " --version", True) <> 0) Then
709 MsgFatal "Can't execute '" & g_strPathkBuildBin & "/kmk.exe --version'. check configure.log for the out."
710 exit sub
711 end if
712
713 '
714 ' Check for env.vars that kBuild uses.
715 '
716 str = EnvGet("BUILD_TYPE")
717 if (str <> "") _
718 And (InStr(1, "|release|debug|profile|kprofile", str) <= 0) then
719 EnvPrint "set BUILD_TYPE=release"
720 EnvSet "BUILD_TYPE", "release"
721 MsgWarning "Found unknown BUILD_TYPE value '" & str &"' in your environment. Setting it to 'release'."
722 end if
723
724 str = EnvGet("BUILD_TARGET")
725 if (str <> "") _
726 And (InStr(1, "win|win32|win64", str) <= 0) then '' @todo later only 'win' will be valid. remember to fix this check!
727 EnvPrint "set BUILD_TARGET=win"
728 EnvSet "BUILD_TARGET", "win"
729 MsgWarning "Found unknown BUILD_TARGET value '" & str &"' in your environment. Setting it to 'win32'."
730 end if
731
732 str = EnvGet("BUILD_TARGET_ARCH")
733 if (str <> "") _
734 And (InStr(1, "x86|amd64", str) <= 0) then
735 EnvPrint "set BUILD_TARGET_ARCH=x86"
736 EnvSet "BUILD_TARGET_ARCH", "x86"
737 MsgWarning "Found unknown BUILD_TARGET_ARCH value '" & str &"' in your environment. Setting it to 'x86'."
738 end if
739
740 str = EnvGet("BUILD_TARGET_CPU")
741 ' perhaps a bit pedantic this since this isn't clearly define nor used much...
742 if (str <> "") _
743 And (InStr(1, "i386|i486|i686|i786|i868|k5|k6|k7|k8", str) <= 0) then
744 EnvPrint "set BUILD_TARGET_CPU=i386"
745 EnvSet "BUILD_TARGET_CPU", "i386"
746 MsgWarning "Found unknown BUILD_TARGET_CPU value '" & str &"' in your environment. Setting it to 'i386'."
747 end if
748
749 str = EnvGet("BUILD_PLATFORM")
750 if (str <> "") _
751 And (InStr(1, "win|win32|win64", str) <= 0) then '' @todo later only 'win' will be valid. remember to fix this check!
752 EnvPrint "set BUILD_PLATFORM=win"
753 EnvSet "BUILD_PLATFORM", "win"
754 MsgWarning "Found unknown BUILD_PLATFORM value '" & str &"' in your environment. Setting it to 'win32'."
755 end if
756
757 str = EnvGet("BUILD_PLATFORM_ARCH")
758 if (str <> "") _
759 And (InStr(1, "x86|amd64", str) <= 0) then
760 EnvPrint "set BUILD_PLATFORM_ARCH=x86"
761 EnvSet "BUILD_PLATFORM_ARCH", "x86"
762 MsgWarning "Found unknown BUILD_PLATFORM_ARCH value '" & str &"' in your environment. Setting it to 'x86'."
763 end if
764
765 str = EnvGet("BUILD_PLATFORM_CPU")
766 ' perhaps a bit pedantic this since this isn't clearly define nor used much...
767 if (str <> "") _
768 And (InStr(1, "i386|i486|i686|i786|i868|k5|k6|k7|k8", str) <= 0) then
769 EnvPrint "set BUILD_PLATFORM_CPU=i386"
770 EnvSet "BUILD_PLATFORM_CPU", "i386"
771 MsgWarning "Found unknown BUILD_PLATFORM_CPU value '" & str &"' in your environment. Setting it to 'i386'."
772 end if
773
774 '
775 ' If PATH_DEV is set, check that it's pointing to something useful.
776 '
777 str = EnvGet("PATH_DEV")
778 g_strPathDev = str
779 if (str <> "") _
780 And False then '' @todo add some proper tests here.
781 strNew = UnixSlashes(g_strPath & "/tools")
782 EnvPrint "set PATH_DEV=" & strNew
783 EnvSet "PATH_DEV", strNew
784 MsgWarning "Found PATH_DEV='" & str &"' in your environment. Setting it to '" & strNew & "'."
785 g_strPathDev = strNew
786 end if
787 if g_strPathDev = "" then g_strPathDev = UnixSlashes(g_strPath & "/tools")
788
789 '
790 ' Write PATH_KBUILD to the environment script if necessary.
791 '
792 if blnNeedEnvVars = True then
793 EnvPrint "set PATH_KBUILD=" & g_strPathkBuild
794 EnvSet "PATH_KBUILD", g_strPathkBuild
795 EnvPrint "set PATH=" & g_strPathkBuildBin & ";%PATH%"
796 EnvPrepend "PATH", g_strPathkBuildBin & ";"
797 end if
798
799 PrintResult "kBuild", g_strPathkBuild
800 PrintResult "kBuild binaries", g_strPathkBuildBin
801end sub
802
803
804''
805' Checks for Visual C++ version 7 or 8.
806sub CheckForVisualCPP(strOptVC, strOptVCCommon, blnOptVCExpressEdition)
807 dim strPathVC, strPathVCCommon, str, str2, blnNeedMsPDB
808 PrintHdr "Visual C++"
809
810 '
811 ' Try find it...
812 '
813 strPathVC = ""
814 strPathVCCommon = ""
815 if (strPathVC = "") And (strOptVC <> "") then
816 if CheckForVisualCPPSub(strOptVC, strOptVCCommon, blnOptVCExpressEdition) then
817 strPathVC = strOptVC
818 strPathVCCommon = strOptVCCommon
819 end if
820 end if
821
822 if (strPathVC = "") And (g_blnInternalFirst = True) Then
823 strPathVC = g_strPathDev & "/win.x86/vcc/v8"
824 if CheckForVisualCPPSub(strPathVC, "", blnOptVCExpressEdition) = False then
825 strPathVC = g_strPathDev & "/win.x86/vcc/v7"
826 if CheckForVisualCPPSub(strPathVC, "", blnOptVCExpressEdition) = False then
827 strPathVC = ""
828 end if
829 end if
830 end if
831
832 if (strPathVC = "") _
833 And (Shell("cl.exe", True) = 0) then
834 str = Which("cl.exe")
835 if FileExists(PathStripFilename(strClExe) & "/build.exe") then
836 ' don't know how to deal with this cl.
837 Warning "Ignoring DDK cl.exe (" & str & ")."
838 else
839 strPathVC = PathParent(PathStripFilename(str))
840 strPathVCCommon = PathParent(strPathVC) & "/Common7"
841 end if
842 end if
843
844 if strPathVC = "" then
845 str = RegGetString("HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\8.0\Setup\VS\ProductDir")
846 str2 = RegGetString("HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\8.0\Setup\VS\EnvironmentDirectory")
847 if str <> "" And str2 <> "" Then
848 str = str & "VC"
849 str2 = PathParent(str2)
850 if CheckForVisualCPPSub(str, str2, blnOptVCExpressEdition) then
851 strPathVC = str
852 strPathVCCommon = str2
853 end if
854 end if
855 end if
856
857 if strPathVC = "" then
858 str = RegGetString("HKLM\SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS\ProductDir")
859 str2 = RegGetString("HKLM\SOFTWARE\Microsoft\VisualStudio\8.0\Setup\VS\EnvironmentDirectory")
860 if str <> "" And str2 <> "" Then
861 str = str & "VC"
862 str2 = PathParent(str2)
863 if CheckForVisualCPPSub(str, str2, blnOptVCExpressEdition) then
864 strPathVC = str
865 strPathVCCommon = str2
866 end if
867 end if
868 end if
869
870 if strPathVC = "" then
871 '' @todo check what this really looks like on 7.1
872 str = RegGetString("HKLM\SOFTWARE\Microsoft\VisualStudio\7.1\Setup\VS\ProductDir")
873 str2 = RegGetString("HKLM\SOFTWARE\Microsoft\VisualStudio\7.1\Setup\VS\EnvironmentDirectory")
874 if str <> "" And str2 <> "" Then
875 str = str & "VC7"
876 str2 = PathParent(str2)
877 if CheckForVisualCPPSub(str, str2, blnOptVCExpressEdition) then
878 strPathVC = str
879 strPathVCCommon = str2
880 end if
881 end if
882 end if
883
884 if strPathVC = "" then
885 str = RegGetString("HKLM\SOFTWARE\Microsoft\VisualStudio\7.0\Setup\VS\ProductDir")
886 str2 = RegGetString("HKLM\SOFTWARE\Microsoft\VisualStudio\7.0\Setup\VS\EnvironmentDirectory")
887 if str <> "" And str2 <> "" Then
888 str = str & "VC7"
889 str2 = PathParent(str2)
890 if CheckForVisualCPPSub(str, str2, blnOptVCExpressEdition) then
891 strPathVC = str
892 strPathVCCommon = str2
893 end if
894 end if
895 end if
896
897 if strPathVC = "" then
898 str = RegGetString("HKLM\SOFTWARE\Microsoft\Wow6432Node\VisualStudio\SxS\VC7\8.0")
899 if str <> "" then
900 str2 = PathParent(str) & "/Common7"
901 if CheckForVisualCPPSub(str, str2, blnOptVCExpressEdition) then
902 strPathVC = str
903 strPathVCCommon = str2
904 end if
905 end if
906 end if
907
908 if strPathVC = "" then
909 str = RegGetString("HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VC7\8.0")
910 if str <> "" then
911 str2 = PathParent(str) & "/Common7"
912 if CheckForVisualCPPSub(str, str2, blnOptVCExpressEdition) then
913 strPathVC = str
914 strPathVCCommon = str2
915 end if
916 end if
917 end if
918
919 ' finally check for the express edition.
920 if strPathVC = "" then
921 str = RegGetString("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft Visual C++ 2005 Express Edition - ENU\InstallLocation")
922 if str <> "" then
923 str2 = str & "Common7"
924 str = str & "VC/"
925 if CheckForVisualCPPSub(str, str2, blnOptVCExpressEdition) then
926 strPathVC = str
927 strPathVCCommon = str2
928 end if
929 end if
930 end if
931
932 if (strPathVC = "") And (g_blnInternalFirst = False) Then
933 strPathVC = g_strPathDev & "/win.x86/vcc/v8"
934 if CheckForVisualCPPSub(strPathVC, "", blnOptVCExpressEdition) = False then
935 strPathVC = g_strPathDev & "/win.x86/vcc/v7"
936 if CheckForVisualCPPSub(strPathVC, "", blnOptVCExpressEdition) = False then
937 strPathVC = ""
938 end if
939 end if
940 end if
941
942 if strPathVC = "" then
943 MsgError "Cannot find cl.exe (Visual C++) anywhere on your system. Check the build requirements."
944 exit sub
945 end if
946
947 '
948 ' Clean up the path and determin the VC directory.
949 '
950 strPathVC = UnixSlashes(PathAbs(strPathVC))
951 g_strPathVCC = strPathVC
952
953 '
954 ' Check the version.
955 ' We'll have to make sure mspdbXX.dll is somewhere in the PATH.
956 '
957 if (strPathVCCommon <> "") Then
958 EnvAppend "PATH", ";" & strPathVCCommon & "/IDE"
959 end if
960 if Shell(DosSlashes(strPathVC & "/bin/cl.exe"), True) <> 0 then
961 MsgError "Executing '" & strClExe & "' (which we believe to be the Visual C++ compiler driver) failed."
962 exit sub
963 end if
964
965 if (InStr(1, g_strShellOutput, "Version 13.10") <= 0) _
966 And (InStr(1, g_strShellOutput, "Version 14.") <= 0) then
967 MsgError "The Visual C++ compiler we found ('" & strPathVC & "') isn't 7.1 or 8.0. Check the build requirements."
968 exit sub
969 end if
970
971 '
972 ' Ok, emit build config variables.
973 '
974 if InStr(1, g_strShellOutput, "Version 14.") > 0 then
975 CfgPrint "VBOX_USE_VCC80 := 1"
976 CfgPrint "PATH_TOOL_VCC80 := " & g_strPathVCC
977 CfgPrint "PATH_TOOL_VCC80X86 = $(PATH_TOOL_VCC80)"
978 CfgPrint "PATH_TOOL_VCC80AMD64 = $(PATH_TOOL_VCC80)"
979 if blnOptVCExpressEdition _
980 And LogFileExists(strPathVC, "atlmfc/include/atlbase.h") = False _
981 then
982 CfgPrint "TOOL_VCC80X86_MT = $(PATH_SDK_WINPSDK)/Bin/mt.exe"
983 CfgPrint "TOOL_VCC80AMD64_MT = $(TOOL_VCC80X86_MT)"
984 CfgPrint "VBOX_WITHOUT_COMPILER_REDIST=1"
985 DisableCOM "No ATL"
986 PrintResult "Visual C++ v8 (or later) without ATL", g_strPathVCC
987 else
988 PrintResult "Visual C++ v8 (or later)", g_strPathVCC
989 end if
990 else
991 CfgPrint "PATH_TOOL_VCC70 := " & g_strPathVCC
992 if blnOptVCExpressEdition _
993 And LogFileExists(strPathVC, "atlmfc/include/atlbase.h") = False _
994 then
995 CfgPrint "VBOX_WITHOUT_COMPILER_REDIST=1"
996 DisableCOM "No ATL"
997 PrintResult "Visual C++ v7.1 without ATL", g_strPathVCC
998 else
999 PrintResult "Visual C++ v7.1", g_strPathVCC
1000 end if
1001 end if
1002
1003 ' and the env.bat path fix.
1004 if strPathVCCommon <> "" then
1005 EnvPrint "set PATH=%PATH%;" & strPathVCCommon & "/IDE;"
1006 end if
1007end sub
1008
1009''
1010' Checks if the specified path points to a usable PSDK.
1011function CheckForVisualCPPSub(strPathVC, strPathVCCommon, blnOptVCExpressEdition)
1012 strPathVC = UnixSlashes(PathAbs(strPathVC))
1013 CheckForVisualCPPSub = False
1014 LogPrint "trying: strPathVC=" & strPathVC & " strPathVCCommon=" & strPathVCCommon & " blnOptVCExpressEdition=" & blnOptVCExpressEdition
1015 if LogFileExists(strPathVC, "bin/cl.exe") _
1016 And LogFileExists(strPathVC, "bin/link.exe") _
1017 And LogFileExists(strPathVC, "include/string.h") _
1018 And LogFileExists(strPathVC, "lib/libcmt.lib") _
1019 And LogFileExists(strPathVC, "lib/msvcrt.lib") _
1020 then
1021 if blnOptVCExpressEdition _
1022 Or ( LogFileExists(strPathVC, "atlmfc/include/atlbase.h") _
1023 And LogFileExists(strPathVC, "atlmfc/lib/atls.lib")) _
1024 Then
1025 '' @todo figure out a way we can verify the version/build!
1026 CheckForVisualCPPSub = True
1027 end if
1028 end if
1029end function
1030
1031
1032''
1033' Checks for a platform SDK that works with the compiler
1034sub CheckForPlatformSDK(strOptSDK)
1035 dim strPathPSDK, str
1036 PrintHdr "Windows Platform SDK (recent)"
1037
1038 strPathPSDK = ""
1039
1040 ' Check the supplied argument first.
1041 str = strOptSDK
1042 if str <> "" then
1043 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1044 end if
1045
1046 ' The tools location (first).
1047 if (strPathPSDK = "") And (g_blnInternalFirst = True) then
1048 str = g_strPathDev & "/win.x86/sdk/200604"
1049 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1050 end if
1051
1052 if (strPathPSDK = "") And (g_blnInternalFirst = True) then
1053 str = g_strPathDev & "/win.x86/sdk/200504"
1054 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1055 end if
1056
1057 if (strPathPSDK = "") And (g_blnInternalFirst = True) then
1058 str = g_strPathDev & "/win.x86/sdk/200209"
1059 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1060 end if
1061
1062 ' Look for it in the environment
1063 str = EnvGet("MSSdk")
1064 if (strPathPSDK = "") And (str <> "") then
1065 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1066 end if
1067
1068 str = EnvGet("Mstools")
1069 if (strPathPSDK = "") And (str <> "") then
1070 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1071 end if
1072
1073 ' Check if there is one installed with the compiler.
1074 if (strPathPSDK = "") And (str <> "") then
1075 str = g_strPathVCC & "/PlatformSDK"
1076 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1077 end if
1078
1079 ' Check the registry next. (first pair is vista, second is pre-vista)
1080 arrSubKeys = RegEnumSubKeys("HKLM", "SOFTWARE\Microsoft\Microsoft SDKs\Windows")
1081 for Each strSubKey In arrSubKeys
1082 str = RegGetString("HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\" & strSubKey & "\InstallationFolder")
1083 if (strPathPSDK = "") And (str <> "") then
1084 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1085 end if
1086 Next
1087 arrSubKeys = RegEnumSubKeys("HKCU", "SOFTWARE\Microsoft\Microsoft SDKs\Windows")
1088 for Each strSubKey In arrSubKeys
1089 str = RegGetString("HKCU\SOFTWARE\Microsoft\Microsoft SDKs\Windows\" & strSubKey & "\InstallationFolder")
1090 if (strPathPSDK = "") And (str <> "") then
1091 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1092 end if
1093 Next
1094
1095 arrSubKeys = RegEnumSubKeys("HKLM", "SOFTWARE\Microsoft\MicrosoftSDK\InstalledSDKs")
1096 for Each strSubKey In arrSubKeys
1097 str = RegGetString("HKLM\SOFTWARE\Microsoft\MicrosoftSDK\InstalledSDKs\" & strSubKey & "\Install Dir")
1098 if (strPathPSDK = "") And (str <> "") then
1099 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1100 end if
1101 Next
1102 arrSubKeys = RegEnumSubKeys("HKCU", "SOFTWARE\Microsoft\MicrosoftSDK\InstalledSDKs")
1103 for Each strSubKey In arrSubKeys
1104 str = RegGetString("HKCU\SOFTWARE\Microsoft\MicrosoftSDK\InstalledSDKs\" & strSubKey & "\Install Dir")
1105 if (strPathPSDK = "") And (str <> "") then
1106 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1107 end if
1108 Next
1109
1110 ' The tools location (post).
1111 if (strPathPSDK = "") And (g_blnInternalFirst = False) then
1112 str = g_strPathDev & "/win.x86/sdk/200604"
1113 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1114 end if
1115
1116 if (strPathPSDK = "") And (g_blnInternalFirst = False) then
1117 str = g_strPathDev & "/win.x86/sdk/200504"
1118 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1119 end if
1120
1121 if (strPathPSDK = "") And (g_blnInternalFirst = False) then
1122 str = g_strPathDev & "/win.x86/sdk/200209"
1123 if CheckForPlatformSDKSub(str) then strPathPSDK = str
1124 end if
1125
1126 ' Give up.
1127 if strPathPSDK = "" then
1128 MsgError "Cannot find a suitable Platform SDK. Check configure.log and the build requirements."
1129 exit sub
1130 end if
1131
1132 '
1133 ' Emit the config.
1134 '
1135 strPathPSDK = UnixSlashes(PathAbs(strPathPSDK))
1136 CfgPrint "PATH_SDK_WINPSDK := " & strPathPSDK
1137 CfgPrint "PATH_SDK_WINPSDKINCS = $(PATH_SDK_WINPSDK)"
1138 CfgPrint "PATH_SDK_WIN32SDK = $(PATH_SDK_WINPSDK)"
1139 CfgPrint "PATH_SDK_WIN64SDK = $(PATH_SDK_WINPSDK)"
1140
1141 PrintResult "Windows Platform SDK", strPathPSDK
1142 g_strPathPSDK = strPathPSDK
1143end sub
1144
1145''
1146' Checks if the specified path points to a usable PSDK.
1147function CheckForPlatformSDKSub(strPathPSDK)
1148 CheckForPlatformSDKSub = False
1149 LogPrint "trying: strPathPSDK=" & strPathPSDK
1150 if LogFileExists(strPathPSDK, "include/Windows.h") _
1151 And LogFileExists(strPathPSDK, "lib/Kernel32.Lib") _
1152 And LogFileExists(strPathPSDK, "lib/User32.Lib") _
1153 then
1154 CheckForPlatformSDKSub = True
1155 end if
1156end function
1157
1158
1159''
1160' Checks for a Windows 2003 DDK that works with the compiler intrinsics.
1161sub CheckForWin2k3DDK(strOptDDK)
1162 dim strPathDDK, str, strSubKeys
1163 PrintHdr "Windows 2003 DDK, build 3790 or later"
1164
1165 '
1166 ' Find the DDK.
1167 '
1168 strPathDDK = ""
1169 ' The specified path.
1170 if (strPathDDK = "") And (strOptDDK <> "") then
1171 if CheckForWin2k3DDKSub(strOptDDK, True) then strPathDDK = strOptDDK
1172 end if
1173
1174 ' The tools location (first).
1175 if (strPathDDK = "") And (g_blnInternalFirst = True) then
1176 str = g_strPathDev & "/win.x86/ddkwin2k3/200503"
1177 if CheckForWin2k3DDKSub(str, False) then strPathDDK = str
1178 end if
1179
1180 if (strPathDDK = "") And (g_blnInternalFirst = True) then
1181 str = g_strPathDev & "/win.x86/ddkwin2k3/2004"
1182 if CheckForWin2k3DDKSub(str, False) then strPathDDK = str
1183 end if
1184
1185 ' Check the environment
1186 str = EnvGet("DDK_INC_PATH")
1187 if (strPathDDK = "") And (str <> "") then
1188 str = PathParent(PathParent(str))
1189 if CheckForWin2k3DDKSub(str, True) then strPathDDK = str
1190 end if
1191
1192 str = EnvGet("BASEDIR")
1193 if (strPathDDK = "") And (str <> "") then
1194 if CheckForWin2k3DDKSub(str, True) then strPathDDK = str
1195 end if
1196
1197 ' Check the registry next. (the first pair is for vista (WDK), the second for pre-vista (DDK))
1198 arrSubKeys = RegEnumSubKeys("HKLM", "SOFTWARE\Microsoft\WINDDK") '' @todo Need some sorting stuff here.
1199 for Each strSubKey In arrSubKeys
1200 str = RegGetString("HKLM\SOFTWARE\Microsoft\WINDDK\" & strSubKey & "\Setup\BUILD")
1201 if (strPathDDK = "") And (str <> "") then
1202 if CheckForWin2k3DDKSub(str, False) then strPathDDK = str
1203 end if
1204 Next
1205 arrSubKeys = RegEnumSubKeys("HKCU", "SOFTWARE\Microsoft\WINDDK") '' @todo Need some sorting stuff here.
1206 for Each strSubKey In arrSubKeys
1207 str = RegGetString("HKCU\SOFTWARE\Microsoft\WINDDK\" & strSubKey & "\Setup\BUILD")
1208 if (strPathDDK = "") And (str <> "") then
1209 if CheckForWin2k3DDKSub(str, False) then strPathDDK = str
1210 end if
1211 Next
1212
1213 arrSubKeys = RegEnumSubKeys("HKLM", "SOFTWARE\Microsoft\WINDDK") '' @todo Need some sorting stuff here.
1214 for Each strSubKey In arrSubKeys
1215 str = RegGetString("HKLM\SOFTWARE\Microsoft\WINDDK\" & strSubKey & "\SFNDirectory")
1216 if (strPathDDK = "") And (str <> "") then
1217 if CheckForWin2k3DDKSub(str, False) then strPathDDK = str
1218 end if
1219 Next
1220 arrSubKeys = RegEnumSubKeys("HKCU", "SOFTWARE\Microsoft\WINDDK") '' @todo Need some sorting stuff here.
1221 for Each strSubKey In arrSubKeys
1222 str = RegGetString("HKCU\SOFTWARE\Microsoft\WINDDK\" & strSubKey & "\SFNDirectory")
1223 if (strPathDDK = "") And (str <> "") then
1224 if CheckForWin2k3DDKSub(str, False) then strPathDDK = str
1225 end if
1226 Next
1227
1228 ' The tools location (post).
1229 if (strPathDDK = "") And (g_blnInternalFirst = False) then
1230 str = g_strPathDev & "/win.x86/ddkwin2k3/200503"
1231 if CheckForWin2k3DDKSub(str, False) then strPathDDK = str
1232 end if
1233
1234 if (strPathDDK = "") And (g_blnInternalFirst = False) then
1235 str = g_strPathDev & "/win.x86/ddkwin2k3/2004"
1236 if CheckForWin2k3DDKSub(str, False) then strPathDDK = str
1237 end if
1238
1239 ' Give up.
1240 if strPathDDK = "" then
1241 MsgError "Cannot find a suitable Windows 2003 DDK. Check configure.log and the build requirements."
1242 exit sub
1243 end if
1244
1245 '
1246 ' Emit the config.
1247 '
1248 strPathDDK = UnixSlashes(PathAbs(strPathDDK))
1249 CfgPrint "PATH_SDK_W2K3DDK := " & strPathDDK
1250 CfgPrint "PATH_SDK_W2K3DDKX86 = $(PATH_SDK_W2K3DDK)"
1251 CfgPrint "PATH_SDK_W2K3DDKAMD64 = $(PATH_SDK_W2K3DDK)"
1252
1253 PrintResult "Windows 2003 DDK", strPathDDK
1254 g_strPathDDK = strPathDDK
1255end sub
1256
1257'' Quick check if the DDK is in the specified directory or not.
1258function CheckForWin2k3DDKSub(strPathDDK, blnCheckBuild)
1259 CheckForWin2k3DDKSub = False
1260 LogPrint "trying: strPathDDK=" & strPathDDK & " blnCheckBuild=" & blnCheckBuild
1261 '' @todo vista: if ( LogFileExists(strPathDDK, "inc/ddk/wnet/ntdef.h") _
1262 ' Or LogFileExists(strPathDDK, "inc/api/ntdef.h")) _
1263 if LogFileExists(strPathDDK, "inc/ddk/wnet/ntdef.h") _
1264 And LogFileExists(strPathDDK, "lib/wnet/i386/int64.lib") _
1265 then
1266 '' @todo figure out a way we can verify the version/build!
1267 CheckForWin2k3DDKSub = True
1268 end if
1269end function
1270
1271
1272''
1273' Finds midl.exe
1274sub CheckForMidl()
1275 dim strMidl
1276 PrintHdr "Midl.exe"
1277
1278 ' Skip if no COM/ATL.
1279 if g_blnDisableCOM then
1280 PrintResult "Midl", "Skipped (" & g_strDisableCOM & ")"
1281 exit sub
1282 end if
1283
1284 if LogFileExists(g_strPathPSDK, "bin/Midl.exe") then
1285 strMidl = g_strPathPSDK & "/bin/Midl.exe"
1286 elseif LogFileExists(g_strPathVCC, "Common7/Tools/Bin/Midl.exe") then
1287 strMidl = g_strPathVCC & "/Common7/Tools/Bin/Midl.exe"
1288 elseif LogFileExists(g_strPathDDK, "bin/x86/Midl.exe") then
1289 strMidl = g_strPathDDK & "/bin/x86/Midl.exe"
1290 elseif LogFileExists(g_strPathDDK, "bin/Midl.exe") then
1291 strMidl = g_strPathDDK & "/bin/Midl.exe"
1292 elseif LogFileExists(g_strPathDev, "win.x86/bin/Midl.exe") then
1293 strMidl = g_strPathDev & "/win.x86/bin/Midl.exe"
1294 else
1295 MsgWarning "Midl.exe not found!"
1296 exit sub
1297 end if
1298
1299 CfgPrint "VBOX_MAIN_IDL = " & strMidl
1300 PrintResult "Midl.exe", strMidl
1301end sub
1302
1303
1304''
1305' Checks for a recent DirectX SDK.
1306sub CheckForDirectXSDK(strOptDXSDK)
1307 dim strPathDXSDK, str, arrSubKeys, arrSubKeys2, strKey, strKey2
1308 PrintHdr "Direct X SDK"
1309
1310 '
1311 ' Find the DX SDK.
1312 '
1313 strPathDXSDK = ""
1314 ' The specified path.
1315 if (strPathDXSDK = "") And (strOptDXSDK <> "") then
1316 if CheckForDirectXSDKSub(strOptDXSDK) then strPathDXSDK = strOptDXSDK
1317 end if
1318
1319 ' The tools location (first).
1320 if (strPathDXSDK = "") And (g_blnInternalFirst = True) then
1321 str = g_strPathDev & "/win.x86/dxsdk/200610"
1322 if CheckForDirectXSDKSub(str) then strPathDXSDK = str
1323 end if
1324
1325 ' Check the installer registry (sucks a bit).
1326 arrSubKeys = RegEnumSubKeys("HKLM", "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData")
1327 for Each strSubKey In arrSubKeys
1328 strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\" & strSubKey & "\Products"
1329 arrSubKeys2 = RegEnumSubKeys("HKLM", strKey)
1330 for Each strSubKey2 In arrSubKeys2
1331 strKey2 = "HKLM\" & strKey & "\" & strSubKey2 & "\InstallProperties"
1332 str = RegGetString(strKey2 & "\DisplayName")
1333 if InStr(1, str, "Microsoft DirectX SDK") > 0 then
1334 str = RegGetString(strKey2 & "\InstallLocation")
1335 if (str <> "") And (strPathDXSDK = "") then
1336 if CheckForDirectXSDKSub(str) then
1337 strPathDXSDK = str
1338 Exit For
1339 end if
1340 end if
1341 end if
1342 Next
1343 Next
1344
1345 ' The tools location (post).
1346 if (strPathDXSDK = "") And (g_blnInternalFirst = False) then
1347 str = g_strPathDev & "/win.x86/dxsdk/200610"
1348 if CheckForDirectXSDKSub(str) then strPathDXSDK = str
1349 end if
1350
1351 ' Give up.
1352 if strPathDXSDK = "" then
1353 MsgError "Cannot find a suitable Direct X SDK. Check configure.log and the build requirements."
1354 exit sub
1355 end if
1356
1357 '
1358 ' Emit the config.
1359 '
1360 strPathDXSDK = UnixSlashes(PathAbs(strPathDXSDK))
1361 CfgPrint "PATH_SDK_DXSDK := " & strPathDXSDK
1362 CfgPrint "PATH_SDK_DXSDKX86 = $(PATH_SDK_DXSDK)"
1363 CfgPrint "PATH_SDK_DXSDKAMD64 = $(PATH_SDK_DXSDK)"
1364
1365 PrintResult "Direct X SDK", strPathDXSDK
1366end sub
1367
1368'' Quick check if the DXSDK is in the specified directory or not.
1369function CheckForDirectXSDKSub(strPathDXSDK)
1370 CheckForDirectXSDKSub = False
1371 LogPrint "trying: strPathDXSDK=" & strPathDXSDK
1372 if LogFileExists(strPathDXSDK, "Lib/x86/dxguid.lib") _
1373 then
1374 '' @todo figure out a way we can verify the version/build!
1375 CheckForDirectXSDKSub = True
1376 end if
1377end function
1378
1379
1380''
1381' Checks for a MingW32 suitable for building the recompiler.
1382'
1383' strOptW32API is currently ignored.
1384'
1385sub CheckForMingW(strOptMingw, strOptW32API)
1386 dim strPathMingW, strPathW32API, str
1387 PrintHdr "MinGW GCC v3.3.x + Binutils + Runtime + W32API"
1388
1389 '
1390 ' Find the MinGW and W32API tools.
1391 '
1392 strPathMingW = ""
1393 strPathW32API = ""
1394
1395 ' The specified path.
1396 if (strPathMingW = "") And (strOptMingW <> "") then
1397 if CheckForMingWSub(strOptMingW, strOptW32API) then
1398 strPathMingW = strOptMingW
1399 strPathW32API = strOptW32API
1400 end if
1401 end if
1402
1403 ' The tools location (first).
1404 if (strPathMingW = "") And (g_blnInternalFirst = True) then
1405 str = g_strPathDev & "/win.x86/mingw32/v3.3.3"
1406 str2 = g_strPathDev & "/win.x86/w32api/v2.5"
1407 if CheckForMingWSub(str, str2) then
1408 strPathMingW = str
1409 strPathW32API = str2
1410 end if
1411 end if
1412
1413 ' See if there is any gcc around.
1414 if strPathMingW = "" then
1415 str = Which("mingw32-gcc.exe")
1416 if (str <> "") then
1417 str = PathParent(PathStripFilename(str))
1418 if CheckForMingWSub(str, str) then strPathMingW = str
1419 end if
1420 end if
1421
1422 if strPathMingW = "" then
1423 str = Which("gcc.exe")
1424 if (str <> "") then
1425 str = PathParent(PathStripFilename(str))
1426 if CheckForMingWSub(str, str) then strPathMingW = str
1427 end if
1428 end if
1429
1430 ' The tools location (post).
1431 if (strPathMingW = "") And (g_blnInternalFirst = False) then
1432 str = g_strPathDev & "/win.x86/mingw32/v3.3.3"
1433 str2 = g_strPathDev & "/win.x86/w32api/v2.5"
1434 if CheckForMingWSub(str, str2) then
1435 strPathMingW = str
1436 strPathW32API = str2
1437 end if
1438 end if
1439
1440 ' Success?
1441 if strPathMingW = "" then
1442 if strOptMingw = "" then
1443 MsgError "Can't locate a suitable MinGW installation. Try specify the path with " _
1444 & "the --with-MinGW=<path> argument. If still no luck, consult the configure.log and the build requirements."
1445 else
1446 MsgError "Can't locate a suitable MinGW installation. Please consult the configure.log and the build requirements."
1447 end if
1448 exit sub
1449 end if
1450
1451 '
1452 ' Emit the config.
1453 '
1454 strPathMingW = UnixSlashes(PathAbs(strPathMingW))
1455 CfgPrint "PATH_TOOL_MINGW32 := " & strPathMingW
1456 PrintResult "MinGW (GCC v" & g_strSubOutput & ")", strPathMingW
1457 if (strPathMingW = strPathW32API) Or strPathW32API = "" then
1458 CfgPrint "PATH_SDK_W32API = $(PATH_TOOL_MINGW32)"
1459 else
1460 CfgPrint "PATH_SDK_W32API = " & strPathW32API
1461 PrintResult "W32API", strPathW32API
1462 end if
1463end sub
1464
1465''
1466' Checks if the specified path points to an usable MinGW or not.
1467function CheckForMingWSub(strPathMingW, strPathW32API)
1468 g_strSubOutput = ""
1469 if strPathW32API = "" then strPathW32API = strPathMingW
1470 LogPrint "trying: strPathMingW=" &strPathMingW & " strPathW32API=" & strPathW32API
1471
1472 if LogFileExists(strPathMingW, "bin/mingw32-gcc.exe") _
1473 And LogFileExists(strPathMingW, "bin/ld.exe") _
1474 And LogFileExists(strPathMingW, "bin/objdump.exe") _
1475 And LogFileExists(strPathMingW, "bin/dllwrap.exe") _
1476 And LogFileExists(strPathMingW, "bin/as.exe") _
1477 And LogFileExists(strPathMingW, "include/string.h") _
1478 And LogFileExists(strPathMingW, "include/_mingw.h") _
1479 And LogFileExists(strPathMingW, "lib/dllcrt1.o") _
1480 And LogFileExists(strPathMingW, "lib/dllcrt2.o") _
1481 And LogFileExists(strPathMingW, "lib/libmsvcrt.a") _
1482 _
1483 And LogFileExists(strPathW32API, "lib/libkernel32.a") _
1484 And LogFileExists(strPathW32API, "include/windows.h") _
1485 then
1486 if Shell(DosSlashes(strPathMingW & "/bin/gcc.exe") & " --version", True) = 0 then
1487 dim offVer, iMajor, iMinor, iPatch, strVer
1488
1489 ' extract the version.
1490 strVer = ""
1491 offVer = InStr(1, g_strShellOutput, "(GCC) ")
1492 if offVer > 0 then
1493 strVer = LTrim(Mid(g_strShellOutput, offVer + Len("(GCC) ")))
1494 strVer = RTrim(Left(strVer, InStr(1, strVer, " ")))
1495 if (Mid(strVer, 2, 1) = ".") _
1496 And (Mid(strVer, 4, 1) = ".") then
1497 iMajor = Int(Left(strVer, 1)) ' Is Int() the right thing here? I want atoi()!!!
1498 iMinor = Int(Mid(strVer, 3, 1))
1499 iPatch = Int(Mid(strVer, 5))
1500 else
1501 LogPrint "Malformed version: '" & strVer & "'"
1502 strVer = ""
1503 end if
1504 end if
1505 if strVer <> "" then
1506 if (iMajor = 3) And (iMinor = 3) then
1507 CheckForMingWSub = True
1508 g_strSubOutput = strVer
1509 else
1510 LogPrint "MinGW version '" & iMajor & "." & iMinor & "." & iPatch & "' is not supported (or configure.vbs failed to parse it correctly)."
1511 end if
1512 else
1513 LogPrint "Couldn't locate the GCC version in the output!"
1514 end if
1515
1516 else
1517 LogPrint "Failed to run gcc.exe!"
1518 end if
1519 end if
1520end function
1521
1522
1523''
1524' Checks for any libSDL binaries.
1525sub CheckForlibSDL(strOptlibSDL)
1526 dim strPathlibSDL, str
1527 PrintHdr "libSDL"
1528
1529 '
1530 ' Try find some SDL library.
1531 '
1532
1533 ' First, the specific location.
1534 strPathlibSDL = ""
1535 if (strPathlibSDL = "") And (strOptlibSDL <> "") then
1536 if CheckForlibSDLSub(strOptlibSDL) then strPathlibSDL = strOptlibSDL
1537 end if
1538
1539 ' The tools location (first).
1540 if (strPathlibSDL = "") And (g_blnInternalFirst = True) Then
1541 str = g_strPathDev & "/win.x86/libsdl/v1.2.11"
1542 if CheckForlibSDLSub(str) then strPathlibSDL = str
1543 end if
1544
1545 if (strPathlibSDL = "") And (g_blnInternalFirst = True) Then
1546 str = g_strPathDev & "/win.x86/libsdl/v1.2.7-InnoTek"
1547 if CheckForlibSDLSub(str) then strPathlibSDL = str
1548 end if
1549
1550 ' Poke about in the path.
1551 str = Which("SDLmain.lib")
1552 if (strPathlibSDL = "") And (str <> "") Then
1553 str = PathParent(PathStripFilename(str))
1554 if CheckForlibSDLSub(str) then strPathlibSDL = str
1555 end if
1556
1557 str = Which("SDL.dll")
1558 if (strPathlibSDL = "") And (str <> "") Then
1559 str = PathParent(PathStripFilename(str))
1560 if CheckForlibSDLSub(str) then strPathlibSDL = str
1561 end if
1562
1563 ' The tools location (post).
1564 if (strPathlibSDL = "") And (g_blnInternalFirst = False) Then
1565 str = g_strPathDev & "/win.x86/libsdl/v1.2.11"
1566 if CheckForlibSDLSub(str) then strPathlibSDL = str
1567 end if
1568
1569 if (strPathlibSDL = "") And (g_blnInternalFirst = False) Then
1570 str = g_strPathDev & "/win.x86/libsdl/v1.2.7-InnoTek"
1571 if CheckForlibSDLSub(str) then strPathlibSDL = str
1572 end if
1573
1574 ' Success?
1575 if strPathlibSDL = "" then
1576 if strOptlibSDL = "" then
1577 MsgError "Can't locate libSDL. Try specify the path with the --with-libSDL=<path> argument. " _
1578 & "If still no luck, consult the configure.log and the build requirements."
1579 else
1580 MsgError "Can't locate libSDL. Please consult the configure.log and the build requirements."
1581 end if
1582 exit sub
1583 end if
1584
1585 strPathLibSDL = UnixSlashes(PathAbs(strPathLibSDL))
1586 CfgPrint "PATH_SDK_LIBSDL := " & strPathlibSDL
1587
1588 PrintResult "libSDL", strPathlibSDL
1589end sub
1590
1591''
1592' Checks if the specified path points to an usable libSDL or not.
1593function CheckForlibSDLSub(strPathlibSDL)
1594 CheckForlibSDLSub = False
1595 LogPrint "trying: strPathlibSDL=" & strPathlibSDL
1596 if LogFileExists(strPathlibSDL, "lib/SDL.lib") _
1597 And LogFileExists(strPathlibSDL, "lib/SDLmain.lib") _
1598 And LogFileExists(strPathlibSDL, "lib/SDL.dll") _
1599 And LogFileExists(strPathlibSDL, "include/SDL.h") _
1600 And LogFileExists(strPathlibSDL, "include/SDL_syswm.h") _
1601 And LogFileExists(strPathlibSDL, "include/SDL_version.h") _
1602 then
1603 CheckForlibSDLSub = True
1604 end if
1605end function
1606
1607
1608''
1609' Checks for libxml2.
1610sub CheckForXml2(strOptXml2)
1611 dim strPathXml2, str
1612 PrintHdr "libxml2"
1613
1614 ' Skip if no COM/ATL.
1615 if g_blnDisableCOM then
1616 PrintResult "libxml2", "Skipped (" & g_strDisableCOM & ")"
1617 exit sub
1618 end if
1619
1620 '
1621 ' Try find some xml2 dll/lib.
1622 '
1623 strPathXml2 = ""
1624 if (strPathXml2 = "") And (strOptXml2 <> "") then
1625 if CheckForXml2Sub(strOptXml2) then strPathXml2 = strOptXml2
1626 end if
1627
1628 if strPathXml2 = "" Then
1629 str = Which("libxml2.lib")
1630 if str <> "" Then
1631 str = PathParent(PathStripFilename(str))
1632 if CheckForXml2Sub(str) then strPathXml2 = str
1633 end if
1634 end if
1635
1636 ' Ignore failure if we're in 'internal' mode.
1637 if (strPathXml2 = "") and g_blnInternalMode then
1638 PrintResult "libxml2", "ignored (internal mode)"
1639 exit sub
1640 end if
1641
1642 ' Success?
1643 if strPathXml2 = "" then
1644 if strOptXml2 = "" then
1645 MsgError "Can't locate libxml2. Try specify the path with the --with-libxml2=<path> argument. " _
1646 & "If still no luck, consult the configure.log and the build requirements."
1647 else
1648 MsgError "Can't locate libxml2. Please consult the configure.log and the build requirements."
1649 end if
1650 exit sub
1651 end if
1652
1653 strPathXml2 = UnixSlashes(PathAbs(strPathXml2))
1654 CfgPrint "SDK_VBOX_LIBXML2_INCS := " & strPathXml2 & "/include"
1655 CfgPrint "SDK_VBOX_LIBXML2_LIBS := " & strPathXml2 & "/lib/libxml2.lib"
1656
1657 PrintResult "libxml2", strPathXml2
1658end sub
1659
1660''
1661' Checks if the specified path points to an usable libxml2 or not.
1662function CheckForXml2Sub(strPathXml2)
1663 dim str
1664
1665 CheckForXml2Sub = False
1666 LogPrint "trying: strPathXml2=" & strPathXml2
1667 if LogFileExists(strPathXml2, "include/libxml/xmlexports.h") _
1668 And LogFileExists(strPathXml2, "include/libxml/xmlreader.h") _
1669 then
1670 str = LogFindFile(strPathXml2, "bin/libxml2.dll")
1671 if str <> "" then
1672 if LogFindFile(strPathXml2, "lib/libxml2.lib") <> "" then
1673 CheckForXml2Sub = True
1674 end if
1675 end if
1676 end if
1677end function
1678
1679
1680''
1681' Checks for libxslt.
1682sub CheckForXslt(strOptXslt)
1683 dim strPathXslt, str
1684 PrintHdr "libxslt"
1685
1686 ' Skip if no COM/ATL.
1687 if g_blnDisableCOM then
1688 PrintResult "libxslt", "Skipped (" & g_strDisableCOM & ")"
1689 exit sub
1690 end if
1691
1692 '
1693 ' Try find some libxslt dll/lib.
1694 '
1695 strPathXslt = ""
1696 if (strPathXslt = "") And (strOptXslt <> "") then
1697 if CheckForXsltSub(strOptXslt) then strPathXslt = strOptXslt
1698 end if
1699
1700 if strPathXslt = "" Then
1701 str = Which("libxslt.lib")
1702 if str <> "" Then
1703 str = PathParent(PathStripFilename(str))
1704 if CheckForXsltSub(str) then strPathXslt = str
1705 end if
1706 end if
1707
1708 if strPathXslt = "" Then
1709 str = Which("libxslt.dll")
1710 if str <> "" Then
1711 str = PathParent(PathStripFilename(str))
1712 if CheckForXsltSub(str) then strPathXslt = str
1713 end if
1714 end if
1715
1716 ' Ignore failure if we're in 'internal' mode.
1717 if (strPathXslt = "") and g_blnInternalMode then
1718 PrintResult "libxslt", "ignored (internal mode)"
1719 exit sub
1720 end if
1721
1722 ' Success?
1723 if strPathXslt = "" then
1724 if strOptXslt = "" then
1725 MsgError "Can't locate libxslt. Try specify the path with the --with-libxslt=<path> argument. " _
1726 & "If still no luck, consult the configure.log and the build requirements."
1727 else
1728 MsgError "Can't locate libxslt. Please consult the configure.log and the build requirements."
1729 end if
1730 exit sub
1731 end if
1732
1733 strPathXslt = UnixSlashes(PathAbs(strPathXslt))
1734 CfgPrint "SDK_VBOX_LIBXSLT_INCS := " & strPathXslt & "/include"
1735 CfgPrint "SDK_VBOX_LIBXSLT_LIBS := " & strPathXslt & "/lib/libxslt.lib"
1736
1737 PrintResult "libxslt", strPathXslt
1738end sub
1739
1740
1741''
1742' Checks if the specified path points to an usable libxslt or not.
1743function CheckForXsltSub(strPathXslt)
1744 dim str
1745
1746 CheckForXsltSub = False
1747 LogPrint "trying: strPathXslt=" & strPathXslt
1748
1749 if LogFileExists(strPathXslt, "include/libxslt/namespaces.h") _
1750 And LogFileExists(strPathXslt, "include/libxslt/xsltutils.h") _
1751 then
1752 str = LogFindFile(strPathXslt, "lib/libxslt.dll")
1753 if str <> "" then
1754 if LogFileExists(strPathXslt, "lib/libxslt.lib") _
1755 then
1756 CheckForXsltSub = True
1757 end if
1758 end if
1759 end if
1760end function
1761
1762
1763''
1764' Checks for openssl
1765sub CheckForSsl(strOptSsl)
1766 dim strPathSsl, str
1767 PrintHdr "openssl"
1768
1769 '
1770 ' Try find some openssl dll/lib.
1771 '
1772 strPathSsl = ""
1773 if (strPathSsl = "") And (strOptSsl <> "") then
1774 if CheckForSslSub(strOptSsl) then strPathSsl = strOptSsl
1775 end if
1776
1777 if strPathSsl = "" Then
1778 str = Which("ssleay32.lib")
1779 if str <> "" Then
1780 str = PathParent(PathStripFilename(str))
1781 if CheckForSslSub(str) then strPathSsl = str
1782 end if
1783 end if
1784
1785 ' Ignore failure if we're in 'internal' mode.
1786 if (strPathSsl = "") and g_blnInternalMode then
1787 PrintResult "openssl", "ignored (internal mode)"
1788 exit sub
1789 end if
1790
1791 ' Success?
1792 if strPathSsl = "" then
1793 if strOptSsl = "" then
1794 MsgError "Can't locate openssl. Try specify the path with the --with-openssl=<path> argument. " _
1795 & "If still no luck, consult the configure.log and the build requirements."
1796 else
1797 MsgError "Can't locate openssl. Please consult the configure.log and the build requirements."
1798 end if
1799 exit sub
1800 end if
1801
1802 strPathSsl = UnixSlashes(PathAbs(strPathSsl))
1803 CfgPrint "SDK_VBOX_OPENSSL_INCS := " & strPathSsl & "/include"
1804 CfgPrint "SDK_VBOX_OPENSSL_LIBS := " & strPathSsl & "/lib/ssleay32.lib" & " " & strPathSsl & "/lib/libeay32.lib"
1805
1806 PrintResult "openssl", strPathSsl
1807end sub
1808
1809''
1810' Checks if the specified path points to an usable openssl or not.
1811function CheckForSslSub(strPathSsl)
1812
1813 CheckForSslSub = False
1814 LogPrint "trying: strPathSsl=" & strPathSsl
1815 if LogFileExists(strPathSsl, "include/openssl/md5.h") _
1816 And LogFindFile(strPathSsl, "bin/ssleay32.dll") <> "" _
1817 And LogFindFile(strPathSsl, "lib/ssleay32.lib") <> "" _
1818 And LogFindFile(strPathSsl, "bin/libeay32.dll") <> "" _
1819 And LogFindFile(strPathSsl, "lib/libeay32.lib") <> "" _
1820 then
1821 CheckForSslSub = True
1822 end if
1823end function
1824
1825
1826''
1827' Checks for libcurl
1828sub CheckForCurl(strOptCurl)
1829 dim strPathCurl, str
1830 PrintHdr "libcurl"
1831
1832 '
1833 ' Try find some cURL dll/lib.
1834 '
1835 strPathCurl = ""
1836 if (strPathCurl = "") And (strOptCurl <> "") then
1837 if CheckForCurlSub(strOptCurl) then strPathCurl = strOptCurl
1838 end if
1839
1840 if strPathCurl = "" Then
1841 str = Which("libcurl.lib")
1842 if str <> "" Then
1843 str = PathParent(PathStripFilename(str))
1844 if CheckForCurlSub(str) then strPathCurl = str
1845 end if
1846 end if
1847
1848 ' Ignore failure if we're in 'internal' mode.
1849 if (strPathCurl = "") and g_blnInternalMode then
1850 PrintResult "curl", "ignored (internal mode)"
1851 exit sub
1852 end if
1853
1854 ' Success?
1855 if strPathCurl = "" then
1856 if strOptCurl = "" then
1857 MsgError "Can't locate libcurl. Try specify the path with the --with-libcurl=<path> argument. " _
1858 & "If still no luck, consult the configure.log and the build requirements."
1859 else
1860 MsgError "Can't locate libcurl. Please consult the configure.log and the build requirements."
1861 end if
1862 exit sub
1863 end if
1864
1865 strPathCurl = UnixSlashes(PathAbs(strPathCurl))
1866 CfgPrint "SDK_VBOX_LIBCURL_INCS := " & strPathCurl & "/include"
1867 CfgPrint "SDK_VBOX_LIBCURL_LIBS := " & strPathCurl & "/libcurl.lib"
1868
1869 PrintResult "libcurl", strPathCurl
1870end sub
1871
1872''
1873' Checks if the specified path points to an usable libcurl or not.
1874function CheckForCurlSub(strPathCurl)
1875
1876 CheckForCurlSub = False
1877 LogPrint "trying: strPathCurl=" & strPathCurl
1878 if LogFileExists(strPathCurl, "include/curl/curl.h") _
1879 And LogFindFile(strPathCurl, "libcurl.dll") <> "" _
1880 And LogFindFile(strPathCurl, "libcurl.lib") <> "" _
1881 then
1882 CheckForCurlSub = True
1883 end if
1884end function
1885
1886
1887
1888''
1889''
1890' Checks for any Qt4 binaries.
1891sub CheckForQt4(strOptQt4)
1892 dim strPathQt4
1893
1894 PrintHdr "Qt4"
1895
1896 '
1897 ' Try to find the Qt4 installation (user specified path with --with-qt4)
1898 '
1899 strPathQt4 = ""
1900
1901 LogPrint "Checking for user specified path of Qt4 ... "
1902 if (strPathQt4 = "") And (strOptQt4 <> "") then
1903 strOptQt4 = UnixSlashes(strOptQt4)
1904 if CheckForQt4Sub(strOptQt4) then strPathQt4 = strOptQt4
1905 end if
1906
1907 if strPathQt4 = "" then
1908 CfgPrint "VBOX_WITH_QT4GUI="
1909 PrintResult "Qt4", "not found"
1910 else
1911 CfgPrint "PATH_SDK_QT4 := " & strPathQt4
1912 CfgPrint "PATH_TOOL_QT4 = $(PATH_SDK_QT4)"
1913 CfgPrint "VBOX_PATH_QT4 = $(PATH_SDK_QT4)"
1914 PrintResult "Qt4 ", strPathQt4
1915 end if
1916end sub
1917
1918
1919'
1920'
1921function CheckForQt4Sub(strPathQt4)
1922
1923 CheckForQt4Sub = False
1924 LogPrint "trying: strPathQt4=" & strPathQt4
1925
1926 if LogFileExists(strPathQt4, "bin/moc.exe") _
1927 And LogFileExists(strPathQt4, "bin/uic.exe") _
1928 And LogFileExists(strPathQt4, "include/Qt/qwidget.h") _
1929 And LogFileExists(strPathQt4, "include/QtGui/QApplication") _
1930 And LogFileExists(strPathQt4, "include/QtNetwork/QHostAddress") _
1931 And ( LogFileExists(strPathQt4, "lib/QtCore4.lib") _
1932 Or LogFileExists(strPathQt4, "lib/VBoxQtCore4.lib") _
1933 Or LogFileExists(strPathQt4, "lib/QtCoreVBox4.lib")) _
1934 And ( LogFileExists(strPathQt4, "lib/QtNetwork4.lib") _
1935 Or LogFileExists(strPathQt4, "lib/VBoxQtNetwork4.lib") _
1936 Or LogFileExists(strPathQt4, "lib/QtNetworkVBox4.lib")) _
1937 then
1938 CheckForQt4Sub = True
1939 end if
1940
1941end function
1942
1943
1944'
1945'
1946function CheckForPython(strPathPython)
1947
1948 PrintHdr "Python"
1949
1950 CheckForPython = False
1951 LogPrint "trying: strPathPython=" & strPathPython
1952
1953 if LogFileExists(strPathPython, "python.exe") then
1954 CfgPrint "VBOX_BLD_PYTHON := " & strPathPython & "\python.exe"
1955 CheckForPython = True
1956 end if
1957
1958 PrintResult "Python ", strPathPython
1959end function
1960
1961''
1962' Show usage.
1963sub usage
1964 Print "Usage: cscript configure.vbs [options]"
1965 Print ""
1966 Print "Configuration:"
1967 Print " -h, --help"
1968 Print " --internal"
1969 Print " --internal-last"
1970 Print ""
1971 Print "Components:"
1972 Print " --disable-COM"
1973 Print ""
1974 Print "Locations:"
1975 Print " --with-DDK=PATH "
1976 Print " --with-DXSDK=PATH "
1977 Print " --with-kBuild=PATH "
1978 Print " --with-libSDL=PATH "
1979 Print " --with-MinGW=PATH "
1980 Print " --with-Qt4=PATH "
1981 Print " --with-SDK=PATH "
1982 Print " --with-VC=PATH "
1983 Print " --with-VC-Common=PATH "
1984 Print " --with-VC-Express-Edition"
1985 Print " --with-W32API=PATH "
1986 Print " --with-libxml2=PATH "
1987 Print " --with-libxslt=PATH "
1988 Print " --with-openssl=PATH "
1989 Print " --with-libcurl=PATH "
1990 Print " --with-python=PATH "
1991end sub
1992
1993
1994''
1995' The main() like function.
1996'
1997Sub Main
1998 '
1999 ' Write the log header and check that we're not using wscript.
2000 '
2001 LogInit
2002 If UCase(Right(Wscript.FullName, 11)) = "WSCRIPT.EXE" Then
2003 Wscript.Echo "This script must be run under CScript."
2004 Wscript.Quit(1)
2005 End If
2006
2007 '
2008 ' Parse arguments.
2009 '
2010 strOptDDK = ""
2011 strOptDXDDK = ""
2012 strOptkBuild = ""
2013 strOptlibSDL = ""
2014 strOptMingW = ""
2015 strOptQt4 = ""
2016 strOptSDK = ""
2017 strOptVC = ""
2018 strOptVCCommon = ""
2019 blnOptVCExpressEdition = False
2020 strOptW32API = ""
2021 strOptXml2 = ""
2022 strOptXslt = ""
2023 strOptSsl = ""
2024 strOptCurl = ""
2025 strOptPython = ""
2026 blnOptDisableCOM = False
2027 for i = 1 to Wscript.Arguments.Count
2028 dim str, strArg, strPath
2029
2030 ' Separate argument and path value
2031 str = Wscript.Arguments.item(i - 1)
2032 if InStr(1, str, "=") > 0 then
2033 strArg = Mid(str, 1, InStr(1, str, "=") - 1)
2034 strPath = Mid(str, InStr(1, str, "=") + 1)
2035 if strPath = "" then MsgFatal "Syntax error! Argument #" & i & " is missing the path."
2036 else
2037 strArg = str
2038 strPath = ""
2039 end if
2040
2041 ' Process the argument
2042 select case LCase(strArg)
2043 case "--with-ddk"
2044 strOptDDK = strPath
2045 case "--with-dxsdk"
2046 strOptDXSDK = strPath
2047 case "--with-kbuild"
2048 strOptkBuild = strPath
2049 case "--with-libsdl"
2050 strOptlibSDL = strPath
2051 case "--with-mingw"
2052 strOptMingW = strPath
2053 case "--with-qt4"
2054 strOptQt4 = strPath
2055 case "--with-sdk"
2056 strOptSDK = strPath
2057 case "--with-vc"
2058 strOptVC = strPath
2059 case "--with-vc-common"
2060 strOptVCCommon = strPath
2061 case "--with-vc-express-edition"
2062 blnOptVCExpressEdition = True
2063 case "--with-w32api"
2064 strOptW32API = strPath
2065 case "--with-libxml2"
2066 strOptXml2 = strPath
2067 case "--with-libxslt"
2068 strOptXslt = strPath
2069 case "--with-openssl"
2070 strOptSsl = strPath
2071 case "--with-libcurl"
2072 strOptCurl = strPath
2073 case "--with-python"
2074 strOptPython = strPath
2075 case "--disable-com"
2076 blnOptDisableCOM = True
2077 case "--enable-com"
2078 blnOptDisableCOM = False
2079 case "--internal"
2080 g_blnInternalMode = True
2081 case "--internal-last"
2082 g_blnInternalFirst = False
2083 case "-h", "--help", "-?"
2084 usage
2085 Wscript.Quit(0)
2086 case else
2087 Wscript.echo "syntax error: Unknown option '" & str &"'."
2088 usage
2089 Wscript.Quit(1)
2090 end select
2091 next
2092
2093 '
2094 ' Initialize output files.
2095 '
2096 CfgInit
2097 EnvInit
2098
2099 '
2100 ' Check that the Shell function is sane.
2101 '
2102 g_objShell.Environment("PROCESS")("TESTING_ENVIRONMENT_INHERITANCE") = "This works"
2103 if Shell("set TESTING_ENVIRONMENT_INHERITANC", False) <> 0 then ' The 'E' is missing on purpose (4nt).
2104 MsgFatal "shell execution test failed!"
2105 end if
2106 if g_strShellOutput <> "TESTING_ENVIRONMENT_INHERITANCE=This works" & CHR(13) & CHR(10) then
2107 MsgFatal "shell inheritance or shell execution isn't working right."
2108 end if
2109 g_objShell.Environment("PROCESS")("TESTING_ENVIRONMENT_INHERITANCE") = ""
2110 Print "Shell inheritance test: OK"
2111
2112 '
2113 ' Do the checks.
2114 '
2115 if blnOptDisableCOM = True then
2116 DisableCOM "--disable-com"
2117 end if
2118 CheckSourcePath
2119 CheckForkBuild strOptkBuild
2120 CheckForVisualCPP strOptVC, strOptVCCommon, blnOptVCExpressEdition
2121 CheckForPlatformSDK strOptSDK
2122 CheckForWin2k3DDK strOptDDK
2123 CheckForMidl
2124 CheckForDirectXSDK strOptDXSDK
2125 CheckForMingW strOptMingw, strOptW32API
2126 CheckForlibSDL strOptlibSDL
2127 ' Don't check for these libraries by default as they are part of OSE
2128 ' Using external libs can add a dependency to iconv
2129 if (strOptXml2 <> "") then
2130 CheckForXml2 strOptXml2
2131 end if
2132 if (strOptXslt <> "") then
2133 CheckForXslt strOptXslt
2134 end if
2135 CheckForSsl strOptSsl
2136 CheckForCurl strOptCurl
2137 CheckForQt4 strOptQt4
2138 if (strOptPython <> "") then
2139 CheckForPython strOptPython
2140 end if
2141 if g_blnInternalMode then
2142 EnvPrint "call " & g_strPathDev & "/env.cmd %1 %2 %3 %4 %5 %6 %7 %8 %9"
2143 end if
2144
2145 Print ""
2146 Print "Execute env.bat once before you start to build VBox:"
2147 Print ""
2148 Print " env.bat"
2149 Print " kmk"
2150 Print ""
2151
2152End Sub
2153
2154
2155Main
2156
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use