1
|
(*
Make our stationery project from scratch that will
be used to make all other libraries. This allows us to get all of these common
settings out of the makeall script.
*)
-- create library or application stationery?
property pCreateLibrary : false
property pProjectFileExtension : ".mcp"
property pTargetList : {"Carbon Debug", "Carbon Final", "Mach-O Debug", "Mach-O Final"}
global gAccessRoot
global gMWCWfolder
(* ====== Stand alone. When run by itself, make the appropriate stationery. ====== *)
set my pCreateLibrary to true
SetGlobals()
CreateFolders()
CreateStationeryProject(gStationeryName, gRsrcsDir, gMWCWfolder)
set my pCreateLibrary to false
SetGlobals()
CreateFolders()
CreateStationeryProject(gStationeryName, gRsrcsDir, gMWCWfolder)
on CreateStationeryProject(projName, projDir, cwDir)
-- make sure the Metrowerks folder spec is global.
if gMWCWfolder is not cwDir then
set gMWCWfolder to cwDir
end if
set projFilename to projName & pProjectFileExtension
set projPathname to projDir & projFilename
tell application "CodeWarrior IDE"
try
close (the first project document whose name is projFilename)
end try
-- try
-- display dialog "creating project: " & projPathname buttons {"OK"} default button 1
Create Project {projPathname}
-- end try
repeat with t in pTargetList
my SetupTarget(t, projName)
end repeat
-- finish up.
if my IsOSX() and not pCreateLibrary then
display dialog "To finish add the following files into " & projFilename & "'s Mach-O targets:" & return & �
" /System/Library/Frameworks/Carbon.framework" & return & �
" /System/Library/Frameworks/System.framework" & return & �
" /usr/lib/crt1.o" & return & return & �
"Sorry, but Codewarrior's Applescript won't do these." buttons {"OK"} default button 1
else
Close Project
end if
end tell
CleanupFolder(projDir, projName)
end CreateStationeryProject
-- Delete files and folders created during this process we do not need.
-- particularly the project's Data directory and output files and directories.
on CleanupFolder(thePath, projName)
repeat with f in list folder (thePath) without invisibles
if ((f as string) begins with "xxxx_" or (f as string) is projName & " Data") then
try
tell application "Finder" to delete folder (thePath & f)
end try
try
tell application "Finder" to delete file (thePath & f)
end try
end if
end repeat
end CleanupFolder
on SetupTarget(targetName, projName)
tell application "CodeWarrior IDE"
-- display dialog "Setup target: " & targetName & return & "project: " & projName
-- Figure out what our output file will be (tentatively) named.
set targetFilename to "xxxx" -- The real target's output name will get set later.
set targetAPI to ""
set debugFlag to ""
-- Linker & Output type.
if targetName contains "Carbon" then
set targetFilename to targetFilename & "_C"
set targetAPI to "Carbon"
else if targetName contains "Mach-O" and my IsOSX() then
set targetFilename to targetFilename & "_M"
set targetAPI to "Mach-O"
else
-- I do not know what kind of target you are talking about.
-- or we are on a OS 9 machine and I don't know what Mach-O is.
-- ignore this argument.
return
end if
-- Debug or not.
if targetName contains "Final" or targetName contains "Release" then
set debugFlag to "Final"
set targetFilename to targetFilename & "_O" -- for Optimized.
else
-- Assume Debug if nothing else.
set debugFlag to "Debug"
set targetFilename to targetFilename & "_D"
end if
if pCreateLibrary then
set targetFilename to targetFilename & ".lib"
set targetName to "Library " & targetName
else
set targetFilename to targetFilename & ".app"
set targetName to "Application " & targetName
end if
-- Make the new target, and set the current target to be it.
if (count targets of project document 1) is 1 and �
(name of target 1 of project document 1) is projName then
-- brand new project comes with one default target, same name as the project.
-- rename that one.
set (name of target 1 of project document 1) to targetName
set the current target of project document 1 to the target 1 of project document 1
else
-- make all the subsequent targets.
make new target at project document 1 with properties {name:targetName}
set the current target of project document 1 to the result
end if
-- set all the preference panels
-- display dialog " API: " & targetAPI & return & " filename: " & targetFilename & return & debugFlag
my SetPreferences(targetAPI, targetFilename, debugFlag is "Debug")
end tell
end SetupTarget
------ All Preference Panel settings in here. -----
on SetPreferences(targetAPI, targetFilename, shouldDebug)
set weAreMach to (targetAPI is "Mach-O")
tell application "CodeWarrior IDE"
if weAreMach then
set linkerName to "MacOS X PPC Linker"
set targetPanelName to "PPC Mac OS X Project"
set codeGenPanelName to "PPC CodeGen Mach-O"
set linkerPanelName to "PPC Mac OS X Linker"
else
set linkerName to "MacOS PPC Linker"
set targetPanelName to "PPC Project"
set codeGenPanelName to "PPC CodeGen"
set linkerPanelName to "PPC Linker"
end if
(* ===== Section "Target" ===== *)
Set Preferences of panel "Target Settings" to {Linker:linkerName}
-- Panel "PPC or Mac OS X Target"
if pCreateLibrary then
Set Preferences of panel targetPanelName to {Project Type:library, File Name:targetFilename}
else
if weAreMach then
Set Preferences of panel targetPanelName to �
{Project Type:application package, File Name:targetFilename, File Creator:"NCBI", File Type:"APPL"}
else
Set Preferences of panel targetPanelName to �
{Project Type:standard application, File Name:targetFilename, File Creator:"NCBI", File Type:"APPL", SIZE Flags:22720, Preferred Heap Size:8000, Min Heap Size:5000, Stack Size:64} �
-- the following only needed on pre-OS X systems when we turn on the Output Flags post-linker,
-- but it is harmless in other cases.
Set Preferences of panel "Output Flags" to {Has Bundle:true}
end if
end if
(* ===== Section "Language Settings" ===== *)
-- Panel "C/C++ Language"
Set Preferences of panel "C/C++ Compiler" to �
{Activate CPlusPlus:false �
, ARM Conformance:false �
, Exception Handling:true �
, RTTI:true �
, Pool Strings:true �
, Dont Reuse Strings:false �
, Require Function Prototypes:true �
, Enable bool Support:true �
, Enable wchar_t:true �
, C99:false �
, ANSI Strict:false �
, ANSI Keywords Only:false �
, Expand Trigraph Sequences:false �
, MPW Newlines:false �
, MPW Pointer Type Rules:false �
, Enums Always Ints:false �
, Prefix File:""}
-- Panel "C/C++ Warnings"
Set Preferences of panel "C/C++ Warnings" to �
{Treat Warnings As Errors:false �
, Illegal Pragmas:true �
, Empty Declarations:true �
, Possible Errors:true �
, Unused Variables:true �
, Unused Arguments:false �
, Extra Commas:true �
, Extended Error Checking:true �
, Hidden Virtual Functions:true �
, Implicit Arithmetic Conversions:false �
, NonInlined Functions:false �
, Inconsistent Class Struct:true}
(* ===== Section "Code Generation" ===== *)
-- Panel "PPC CodeGen Mach-O"
Set Preferences of panel codeGenPanelName to �
{Struct Alignment:Align_PPC �
, Make Strings ReadOnly:true �
, Use FMADD Instructions:false �
, Schedule:false �
, Peephole Optimizer:true}
if not weAreMach then
-- preferences that are only on non-Mach targets.
Set Preferences of panel codeGenPanelName to �
{Store Data in TOC:true �
, Traceback Tables:TB_Inline}
end if
(* ===== Section "Debugger" ===== *)
if shouldDebug then
(* ==== Debug settings ==== *)
(* ===== Panel PPC Global Optimizer ===== *)
Set Preferences of panel "PPC Global Optimizer" to �
{Optimize For:code_Speed, Level:0}
(* ===== Panel PPC Linker ===== *)
Set Preferences of panel linkerPanelName to �
{Generate SYM File:true �
, Full Path In SYM:true �
, Generate Link Map:false �
, Link Mode:fast}
(* ===== Panel C/C++ Language ===== *)
Set Preferences of panel "C/C++ Compiler" to �
{Inlining:inline_none, AutoInlining:false}
else
(* ==== optimized/release settings ==== *)
(* ===== Panel PPC Global Optimizer ===== *)
Set Preferences of panel "PPC Global Optimizer" to �
{Optimize For:code_Speed, Level:4}
(* ===== Panel PPC Linker ===== *)
Set Preferences of panel linkerPanelName to �
{Generate SYM File:false �
, Generate Link Map:false �
, Link Mode:fast}
(* ===== Panel C/C++ Language ===== *)
Set Preferences of panel "C/C++ Compiler" to �
{Inlining:inline_smart, AutoInlining:true}
end if
-- Panel "Debugger Settings"
Set Preferences of panel "Debugger Target" to �
{Log System Messages:false}
(* ===== Panel Access Paths ===== *)
-- when building projects add the other paths at the end of User Paths.
-- since 'Always Full Search' is true they will get searched before the default System Paths.
-- But MachO needs to move the /usr/.. directories to User Paths.
Set Preferences of panel "Access Paths" to {Always Full Search:true, Convert Paths:true, Require Framework Includes:false}
my SetPaths(weAreMach)
-- add libraries to this target
if not pCreateLibrary then
if not weAreMach then
if shouldDebug then
set libsToAdd to {gMWCWfolder & "MacOS Support:Libraries:Runtime:Libs:MSL_All_Carbon_D.lib"}
else
set libsToAdd to {gMWCWfolder & "MacOS Support:Libraries:Runtime:Libs:MSL_All_Carbon.lib"}
end if
copy (gMWCWfolder & "MacOS Support:Universal:Libraries:StubLibraries:CarbonLib") to end of libsToAdd
else
if shouldDebug then
set libsToAdd to {gMWCWfolder & "MacOS X Support:Libraries:Runtime:Libs:MSL_All_Mach-O_D.lib"}
else
set libsToAdd to {gMWCWfolder & "MacOS X Support:Libraries:Runtime:Libs:MSL_All_Mach-O.lib"}
end if
copy (gMWCWfolder & "MSL:MSL_C:MSL_MacOS:Src:console_OS_X.c") to end of libsToAdd
copy ("/usr/lib/crt1.o") to end of libsToAdd
copy "abc:System:Library:Frameworks:Carbon.framework" to end of libsToAdd
copy "abc:System:Library:Frameworks:System.framework" to end of libsToAdd
end if
Add Files libsToAdd
end if
end tell
end SetPreferences
on SetPaths(weAreMach)
tell application "CodeWarrior IDE"
(* ===== Panel Access Paths ===== *)
-- This removes the compiler default folders because otherwise setting the paths only adds on to the end. Never deletes anything.
Set Preferences of panel "Access Paths" to {User Paths:{}, System Paths:{}}
-- set up User Paths
set userPaths to {{name:":", format:MacOS Path, origin:project relative, recursive:true}}
if weAreMach then
copy {name:":usr:include:", format:MacOS Path, origin:root relative, root:"OS X Volume", recursive:false} �
to end of userPaths
if not pCreateLibrary then
copy {name:":usr:lib:", format:MacOS Path, origin:root relative, root:"OS X Volume", recursive:false} �
to end of userPaths
end if
end if
-- set up System Paths
if weAreMach then
set sysPaths to {�
{name:":MSL:MSL_C:", format:MacOS Path, origin:shell relative, recursive:true}, �
{name:":MacOS Support:", format:MacOS Path, origin:shell relative, recursive:true}, �
{name:":MacOS X Support:", format:MacOS Path, origin:shell relative, recursive:true}}
else
set sysPaths to {�
{name:":MSL:", format:MacOS Path, origin:shell relative, recursive:true}, �
{name:":MacOS Support:", format:MacOS Path, origin:shell relative, recursive:true}}
end if
-- put everything back.
Set Preferences of panel "Access Paths" to {User Paths:userPaths, System Paths:sysPaths}
end tell
end SetPaths
on stripVolName(macPath)
set saveTID to get text item delimiters of AppleScript
set text item delimiters of AppleScript to ":"
set strippedPath to (rest of text items of macPath) as string
set text item delimiters of AppleScript to saveTID
return strippedPath
end stripVolName
on IsOSX()
tell application "Finder"
set vers to the version as text
if second character of vers is equal to "." then
set vers to "0" & vers
end if
return vers > 10 or vers = 10
end tell
end IsOSX
-- the following will build the stationery project in the lib directory.
-- CreateStationeryProject(gStationeryName, gDistribRoot & gBuildDir & ":" & gStationeryName & ":", gMWCWfolder)
-- the following are needed to run this script by itself,
-- they are not needed when it is called by another script.
--
-- Global variables
--
global gStartupDisk
global gHomeDir
global gMWroot
global gDistribRoot
global gBuildDir
global gRsrcsDir
global gStationeryName
global gDirsToCreate
on ResolveAlias(pathname)
tell application "Finder"
if exists folder pathname then return pathname & ":"
if exists alias file pathname then return the original item of alias file pathname as string
error "The folder (or alias) '" & pathname & "' doesn't exist."
end tell
end ResolveAlias
on HomeDir()
tell application "Finder"
if my IsOSX() then
return the home as string
else
return gStartupDisk
end if
end tell
end HomeDir
on ModuleRoot()
set modRoot to ""
try
set modRoot to ResolveAlias(gMWroot & "ncbi")
on error
try
set modRoot to ResolveAlias(gHomeDir & "ncbi")
end try
end try
return modRoot
end ModuleRoot
on MWRootDir()
set mwRoot to ""
set mwLocations to {gStartupDisk, gStartupDisk & "Applications:", gStartupDisk & "Applications (Mac OS 9):", �
gHomeDir, gHomeDir & "Applications:", gHomeDir & "Applications (Mac OS 9):"}
repeat with mwVersion from 8 to 9
set dirName to "Metrowerks CodeWarrior " & mwVersion & ".0"
repeat with mwLoc in mwLocations
try
set mwRoot to ResolveAlias(mwLoc & dirName)
return mwRoot
end try
end repeat
end repeat
error "Can't find the Metrowerks CodeWarrior folder."
end MWRootDir
on SetGlobals()
tell application "Finder"
set gStartupDisk to startup disk as string
set gHomeDir to my HomeDir()
set gMWroot to my MWRootDir()
set gMWCWfolder to gMWroot & "Metrowerks CodeWarrior:"
set gDistribRoot to my ModuleRoot()
set gRsrcsDir to gDistribRoot & "link:macmet:"
if pCreateLibrary then
set gStationeryName to "LibraryStationery"
set gBuildDir to "lib"
else
set gStationeryName to "ApplicationStationery"
set gBuildDir to "build"
end if
set gDirsToCreate to {�
{relPath:"", name:gBuildDir}, �
{relPath:gBuildDir, name:gStationeryName}}
end tell
end SetGlobals
on CreateFolders()
tell application "Finder"
repeat with i in gDirsToCreate
set pth to relPath of i
if pth is not "" then set pth to pth & ":"
if not (exists folder (gDistribRoot & pth & i's name)) then
make new folder at folder (gDistribRoot & pth) with properties {name:i's name}
end if
end repeat
end tell
end CreateFolders
|