8a242615ef
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12831 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
229 lines
6.5 KiB
AppleScript
229 lines
6.5 KiB
AppleScript
-----------------------------------------------------------------------------
|
|
-- Name: docs/mac/M5build.applescript
|
|
-- Purpose: Automatic build of projects with CodeWarrior 5
|
|
-- Author: Gilles Depeyrot
|
|
-- Modified by:
|
|
-- Created: 06.10.2001
|
|
-- RCS-ID: $Id$
|
|
-- Copyright: (c) 2001 Gilles Depeyrot
|
|
-- Licence: wxWindows licence
|
|
-----------------------------------------------------------------------------
|
|
--
|
|
-- 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 "build-" & theDate & ".log"
|
|
|
|
--
|
|
-- Ask the user to select the wxWindows samples folder
|
|
--
|
|
set theFolder to choose folder with prompt "Select the folder in which to build the projects"
|
|
|
|
--
|
|
-- Ask the user to choose the build log file
|
|
--
|
|
set theLogFile to choose file name with prompt "Save the 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 "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
|
|
|
|
--
|
|
-- BuildProjects
|
|
--
|
|
on BuildProjects(inLogFileRef, inFolder, inTarget, inRebuild)
|
|
global theProjectCount, theProjectSuccessCount
|
|
|
|
tell application "Finder" to update inFolder
|
|
|
|
try
|
|
tell application "Finder" to set theProject to ((the first file of inFolder whose name ends with gProjectSuffix) as string)
|
|
on error
|
|
set theProject to ""
|
|
end try
|
|
|
|
if theProject is not "" then
|
|
set theProjectCount to theProjectCount + 1
|
|
|
|
write "building project '" & theProject & "'" & gEol to inLogFileRef
|
|
|
|
tell application "CodeWarrior IDE 4.0.4"
|
|
--
|
|
-- Open the project in CodeWarrior
|
|
--
|
|
open theProject
|
|
--
|
|
-- 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
|
|
end if
|
|
|
|
tell application "Finder" to set theSubFolders to every folder of inFolder whose name does not end with " Data"
|
|
repeat with theFolder in theSubFolders
|
|
BuildProjects(inLogFileRef, theFolder, inTarget, inRebuild)
|
|
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)
|
|
|
|
tell me to 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
|
|
tell me to write theFile & " line " & lineNumber of theInfo & gEol to inLogFileRef
|
|
end if
|
|
tell me to 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
|