wxWidgets/docs/mac/BuildSamplesM5.as
2001-10-07 16:46:16 +00:00

227 lines
6.2 KiB
ActionScript
Executable File

--
-- File: BuildSamplesM5.as
-- Purpose: Automatic build of samples with CodeWarrior 5
-- Author: Gilles Depeyrot
-- Created: 06.10.2001
--
--
-- This AppleScript automatically recurses through the selected folder looking for
-- and building CodeWarrior projects.
-- To use this script, simply open it with the 'Script Editor' and run it.
--
--
-- Suffix used to recognize CodeWarrior project files
--
property gProjectSuffix : "M5.mcp"
--
-- Values used to create the log file
--
property gEol : "
"
property gSeparator : "--------------------------------------------------------------------------------" & gEol
--
-- Project and build success count
--
set theProjectCount to 0
set theProjectSuccessCount to 0
--
-- Default log file name
--
set theDate to (day of (current date)) & "/" & GetMonthIndex(current date) & "/" & (year of (current date))
set theLogFileName to "wxMac samples " & theDate & ".log"
--
-- Ask the user to select the wxWindows samples folder
--
set theFolder to choose folder with prompt "Select the wxWindows samples folder"
--
-- Ask the user to choose the build log file
--
set theLogFile to choose file name with prompt "Create the wxWindows samples build log file" default name theLogFileName
--
-- Open the log file to record the build log
--
set theLogFileRef to open for access theLogFile with write permission
--
-- Write log file header
--
write gSeparator starting at 0 to theLogFileRef
write "wxWindows samples build log" & gEol to theLogFileRef
write gSeparator to theLogFileRef
write "start on " & ((current date) as string) & gEol to theLogFileRef
write gSeparator to theLogFileRef
write "building projects in '" & (theFolder as string) & "'" & gEol to theLogFileRef
write gSeparator to theLogFileRef
--
-- Build or Rebuild targets?
--
set theText to "Build or rebuild projects?"
set theBuild to button returned of (display dialog theText buttons {"Cancel", "Build", "Rebuild"} default button "Rebuild" with icon note)
if theBuild is not equal to "Cancel" then
--
-- Build which targets?
--
set theText to theBuild & " Classic or Carbon targets?"
set theType to button returned of (display dialog theText buttons {"Cancel", "Classic", "Carbon"} default button "Carbon" with icon note)
if theType is not equal to "Cancel" then
--
-- Build Debug or Release targets?
--
set theText to theBuild & " " & theType & " Debug or " & theType & " Release targets?"
set theOption to button returned of (display dialog theText buttons {"Cancel", "Release", "Debug"} default button "Debug" with icon note)
if theOption is not equal to "Cancel" then
set theTarget to theType & " " & theOption
write "building project targets '" & theTarget & "'" & gEol to theLogFileRef
write gSeparator to theLogFileRef
BuildProjects(theLogFileRef, theFolder, theTarget, theBuild is equal to "Rebuild")
end if
end if
end if
--
-- Write log file footer
--
write "successful build of " & theProjectSuccessCount & " projects out of " & theProjectCount & gEol to theLogFileRef
write gSeparator to theLogFileRef
write "end on " & ((current date) as string) & gEol to theLogFileRef
write gSeparator to theLogFileRef
--
-- Close the log file
--
close access theLogFileRef
--
-- Open the file in BBEdit Lite
--
tell application "BBEdit Lite 6.1"
activate
open theLogFile
end tell
--
-- BuildProjects
--
on BuildProjects(inLogFileRef, inFolder, inTarget, inRebuild)
global theProjectCount, theProjectSuccessCount
tell application "Finder" to set theSubFolders to every folder of inFolder
repeat with theFolder in theSubFolders
tell application "Finder" to set theProject to (the first file of theFolder whose name ends with gProjectSuffix)
if theProject as string is not "" then
set theProjectCount to theProjectCount + 1
write "building project '" & (theProject as string) & "'" & gEol to inLogFileRef
tell application "CodeWarrior IDE 4.0.4"
--
-- Open the project in CodeWarrior
--
open theProject as string
--
-- Change to the requested target
--
Set Current Target inTarget
--
-- Remove object code if rebuild requested
--
if inRebuild then
Remove Binaries
end if
--
-- Build/Rebuild the selected target
--
set theBuildInfo to Make Project with ExternalEditor
--
-- Close the project
--
Close Project
end tell
--
-- Report errors to build log file
--
write gEol to inLogFileRef
ReportBuildInfo(inLogFileRef, theBuildInfo)
write gSeparator to inLogFileRef
else
BuildProjects(inLogFileRef, theFolder, inTarget, inRebuild)
end if
end repeat
end BuildProjects
--
-- ReportBuildInfo
--
on ReportBuildInfo(inLogFileRef, inBuildInfo)
global theProjectCount, theProjectSuccessCount
set theErrorCount to 0
set theWarningCount to 0
repeat with theInfo in inBuildInfo
tell application "CodeWarrior IDE 4.0.4"
set theKind to ((messageKind of theInfo) as string)
write "*** " & theKind & " *** " & message of theInfo & gEol to inLogFileRef
try
set theFile to ((file of theInfo) as string)
on error
set theFile to ""
end try
if theFile is not "" then
write theFile & " line " & lineNumber of theInfo & gEol to inLogFileRef
end if
write gEol to inLogFileRef
end tell
if MessageKindIsError(theKind) then
set theErrorCount to theErrorCount + 1
else
set theWarningCount to theWarningCount + 1
end if
end repeat
if theErrorCount is 0 then
set theProjectSuccessCount to theProjectSuccessCount + 1
write "build succeeded with " & theWarningCount & " warning(s)" & gEol to inLogFileRef
else
write "build failed with " & theErrorCount & " error(s) and " & theWarningCount & " warning(s)" & gEol to inLogFileRef
end if
end ReportBuildInfo
--
-- MessageKindIsError
--
on MessageKindIsError(inKind)
if inKind is "compiler error" or inKind is "linker error" or inKind is "generic error" then
return true
else
return false
end if
end MessageKindIsError
--
-- GetMonthIndex
--
on GetMonthIndex(inDate)
set theMonth to the month of inDate
set theMonthList to {January, February, March, April, May, June, July, August, September, October, November, December}
repeat with i from 1 to the number of items in theMonthList
if theMonth is item i of theMonthList then
return i
end if
end repeat
end GetMonthIndex