File: M5build.applescript

package info (click to toggle)
wxwidgets2.8 2.8.10.1-3
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 239,052 kB
  • ctags: 289,550
  • sloc: cpp: 1,838,857; xml: 396,717; python: 282,506; ansic: 126,171; makefile: 51,406; sh: 14,581; asm: 299; sql: 258; lex: 194; perl: 139; yacc: 128; pascal: 95; php: 39; lisp: 38; tcl: 24; haskell: 20; java: 18; cs: 18; erlang: 17; ruby: 16; ada: 9; ml: 9; csh: 9
file content (228 lines) | stat: -rw-r--r-- 6,692 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
-----------------------------------------------------------------------------
-- 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: M5build.applescript 12831 2001-12-02 20:02:17Z GD $
-- 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