]> git.saurik.com Git - wxWidgets.git/commitdiff
AppleScript that finds and rebuilds all the CodeWarrior projects
authorGilles Depeyrot <gilles_depeyrot@mac.com>
Sun, 7 Oct 2001 16:46:16 +0000 (16:46 +0000)
committerGilles Depeyrot <gilles_depeyrot@mac.com>
Sun, 7 Oct 2001 16:46:16 +0000 (16:46 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11876 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/mac/BuildSamplesM5.as [new file with mode: 0755]

diff --git a/docs/mac/BuildSamplesM5.as b/docs/mac/BuildSamplesM5.as
new file mode 100755 (executable)
index 0000000..474bf0a
--- /dev/null
@@ -0,0 +1,227 @@
+--
+-- 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
\ No newline at end of file