BuildCubeE/MPW-3.2.3/Scripts/CreateMake
2019-01-13 15:57:32 +08:00

439 lines
12 KiB
Plaintext

# CreateMake - create a program makefile
#
# Usage:
# CreateMake [ -Application [ -c creator ] | -Tool | -DA |
# -CR -m mainEntryPoint -rt resourceType
# [ -t type ] [ -c creator ] ] [-sym on] program file…
# [ -mc68020 | -mc68881 | -elems881]
#
# Script CreateMake creates a simple MakeFile for building the specified
# program. The program parameter is the name of the program. Makefile
# <program>.make is created. The default program type is Application.
# The program may be written in any combination of Assembly Language, C, C++
# Pascal, and/or Rez. The list of files may include both source in
# these languages and library object files that don't appear below.
#
# CreateMake links the program with the following set of MPW Libraries:
#
# Inside Macintosh Interfaces
# {Libraries}Interface.o
#
# Runtime support - one of the following:
# {Libraries}Stubs.o # building a tool
# {Libraries}Runtime.o # no C object files
#
# C Libraries - if any source is in C
# {CLibraries}StdCLib.o
# {CLibraries}CSANELib.o
# {CLibraries}Math.o
#
# C++ Libraries - if any source is in C++
# {Clibraries}Streams.o
# {Clibraries}CPlusLib.o
# {CLibraries}StdCLib.o
# {CLibraries}CSANELib.o
# {CLibraries}Math.o
#
# Pascal Libraries - if any source is in Pascal
# {PLibraries}PasLib.o
# {PLibraries}SANELib.o
#
# For tools:
# {Libraries}ToolLibs.o
#
# For desk accessories:
# {Libraries}DRVRRuntime.o
#
#
# Copyright Apple Computer, Inc. 1987 - 1990
# All rights reserved.
Set Exit 0
Set CaseSensitive 0
Set type Application
Set creator '????'
Set runtime '{Libraries}Runtime.o'
Set interface '{Libraries}Interface.o'
Set cFloatLib '{CLibraries}CSANELib.o {CLibraries}Math.o #{CLibraries}Complex.o'
Set cplusFloatLib '{CLibraries}CSANELib.o {CLibraries}Math.o ∂
{CLibraries}CplusLib.o #{CLibraries}Complex.o'
Set pFloatLib '{PLibraries}SANELib.o'
Unset sources clibs plibs toollibs DRVRRuntime resource objects program suffix typ
Unset cSeen tSeen rtSeen mSeen multipleType typeSpec CPls CLang symarg symseen compileOptions
Unset hardwardFloat cCompileOptions pCompileOptions multipleHWOptions
# Collect the script parameters.
Loop
Break if {#} == 0
If "{1}" =~ /-application/
Set type Application
Unset toollibs
If {typeSpec} == 0
Set typeSpec 1
Else
Set multipleType 1
End
shift 1
continue
Else If "{1}" =~ /-tool/
Set type Tool
Set toollibs '{Libraries}ToolLibs.o'
If {typeSpec} == 0
Set typeSpec 1
Else
Set multipleType 1
End
shift 1
continue
Else If "{1}" =~ /-da/
Set type DA
Unset toollibs
If {typeSpec} == 0
Set typeSpec 1
Else
Set multipleType 1
End
shift 1
continue
Else If "{1}" =~ /-cr/
Set type CR
Unset toollibs
If {typeSpec} == 0
Set typeSpec 1
Else
Set multipleType 1
End
shift 1
continue
Else If "{1}" =~ /-siow/
Set type SIOW
If {typeSpec} == 0
Set typeSpec 1
Else
Set multipleType 1
End
shift 1
continue
Else If "{1}" =~ /-mc68020/
If "{cCompileOptions}" == ""
set cCompileOptions "-mc68020 "
set pCompileOptions "-mc68020 "
Else
set multipleHWOptions 1
End
shift 1
continue
Else If "{1}" =~ /-mc68881/
If "{cCompileOptions}" == ""
set cCompileOptions "-mc68020 -mc68881 "
set pCompileOptions "-mc68020 -mc68881 "
set hardwareFloat 1
Else
set multipleHWOptions 1
End
shift 1
continue
Else If "{1}" =~ /-elems881/
If "{cCompileOptions}" == ""
set cCompileOptions "-mc68020 -mc68881 -elems881 "
set pCompileOptions "-mc68020 -mc68881 -d elems881=true "
set hardwareFloat 1
Else
set multipleHWOptions 1
End
shift 1
continue
Else If "{1}" =~ /-c/
set creator "{2}"
set cseen 1
shift 2
continue
Else If "{1}" =~ /-t/
set typ "{2}"
set tseen 1
shift 2
continue
Else If "{1}" =~ /-rt/
set rtype "{2}"
set rtseen 1
shift 2
continue
Else If "{1}" =~ /-m/
set mentry "{2}"
set mseen 1
shift 2
continue
Else If "{1}" =~ /-sym/
set symarg {2}
set symseen 1
shift 2
continue
Else If ("{1}" =~ /≈.[acpr]/ || "{1}" =~ /≈.cp/)
Set sources "{sources}'{1}' "
shift 1
continue
Else If "{1}" =~ /≈.[o]/
Set objects "{objects}'{1}' "
shift 1
continue
Else If "{program}" == "" && "{1}" !~ /-≈/
Set program "{1}"
shift 1
continue
Else If "{1}" =~ /-≈/
Echo "### {0} - ∂"{1}∂" is not an option." > Dev:StdErr
Echo "# Usage - {0} [ -Application | -Tool | -DA | -SIOW | -CR -m mainEntryPoint ∂n ∂
-rt resourceType [ -c creator ] [ -t fileType ] ] [-sym on] ∂n ∂
[ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
Exit 1
Else
Echo "### {0} - Files must end in .a, .c, .p, .cp, .r, or .o." > Dev:StdErr
Echo "# Usage - {0} [ -Application | -Tool | -DA | -SIOW | -CR -m mainEntryPoint ∂n ∂
-rt resourceType [ -c creator ] [ -t fileType ] ] [-sym on] ∂n ∂
[ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
Exit 1
End
End
If {type} == DA && {symseen}
Echo "### {0} - Option -sym not supported for desk accessory." > Dev:StdErr
Echo "# Usage - {0} [ -Application | -Tool | -DA | -SIOW | -CR -m mainEntryPoint ∂n ∂
-rt resourceType [ -c creator ] [ -t fileType ] ] [-sym on] ∂n ∂
[ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
Exit 1
End
If {type} == CR && ("{rtype}" == "" || "{mentry}" == "")
Echo "### {0} - Options -rt and -m are required for code resource." > Dev:StdErr
Echo "# Usage - {0} [ -Application | -Tool | -DA | -SIOW | -CR -m mainEntryPoint ∂n ∂
-rt resourceType [ -c creator ] [ -t fileType ] ] [-sym on] ∂n ∂
[ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
Exit 1
End
If "{program}" == ""
Echo "### {0} - A program name is required." > Dev:StdErr
Echo "### {0} - Don't include the .a, .c, .cp, or .p suffix." > Dev:StdErr
Echo "# Usage - {0} [ -Application | -Tool | -DA | -SIOW | -CR -m mainEntryPoint ∂n ∂
-rt resourceType [ -c creator ] [ -t fileType ] ] [-sym on] ∂n ∂
[ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
Exit 1
End
If "{sources}" == ""
Echo "### {0} - A source file is required." > Dev:StdErr
Echo "# Usage - {0} [ -Application | -Tool | -DA | -SIOW | -CR -m mainEntryPoint ∂n ∂
-rt resourceType [ -c creator ] [ -t fileType ] ] [-sym on] ∂n ∂
[ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
Exit 1
End
If {multipleType} != 0
Echo "### {0} - Only one of Application, DA, Tool, or CR may be specified." > Dev:StdErr
Echo "# Usage - {0} [ -Application | -Tool | -DA | -SIOW | -CR -m mainEntryPoint ∂n ∂
-rt resourceType [ -c creator ] [ -t fileType ] ] [-sym on] ∂n ∂
[ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
Exit 1
End
If {multipleHWOptions} != 0
Echo "### {0} - Only one of -mc68020, -mc68881, or -elems881 may be specified." > Dev:StdErr
Echo "# Usage - {0} [ -Application | -Tool | -DA | -SIOW | -CR -m mainEntryPoint ∂n ∂
-rt resourceType [ -c creator ] [ -t fileType ] ] [-sym on] ∂n ∂
[ -mc68020 | -mc68881 | -elems881] program file…" > Dev:StdErr
Exit 1
End
If {cSeen} != 0 && ({type} == Tool || {type} == DA)
Echo "### {0} - Warning: Option -c ignored for {type}." > Dev:StdErr
End
If {tseen} != 0 && {type} != CR
Echo "### {0} - Warning: Option -t ignored for {type}." > Dev:StdErr
End
If {rtseen} != 0 && {type} != CR
Echo "### {0} - Warning: Option -rt ignored for {type}." > Dev:StdErr
End
If {mseen} != 0 && {type} != CR
Echo "### {0} - Warning: Option -m ignored for {type}." > Dev:StdErr
End
If {type} == Tool
Set options "-d -c 'MPS ' -t 'MPST'"
Else If {type} == Application
Set options " -t 'APPL' -c '{creator}'"
Else If {type} == SIOW
Set options "-d -c '????' -t 'APPL'"
End
# Create the heading at the top of the makefile.
Begin
Echo -n '# File: '; Quote "{program}".make
Echo -n '# Target: '; Quote "{program}"
If "{sources}" =~ /≈«1,80»/
Echo -n '# Sources: '; Quote {sources}
Else
Set heading '# Sources: '
For i In {sources}
Echo -n "{heading}"
Quote "{i}"
Set heading '# '
End
End
Echo -n '# Created: '; Date
Echo
Echo
# Create list of implicit objects
For file in {sources}
If "{file}" =~ /≈.[acp]/ || "{file}" =~ /≈.cp/
Set objects "{objects} '{file}.o' "
End
End
# generate OBJECTS definitions
quote -n OBJECTS =
If "{objects}" =~ /?«1,80»/
Echo -n " "; Quote {objects}
Else
For i In {objects}
Echo ' ∂'
Echo -n ∂t∂t; Quote -n "{i}"
End
Echo
End
Echo
# Set up library definitions and link options
If {symseen} == 1
Set compileOptions "-sym {symarg}"
End
If {hardwareFloat} == 1
Set cFloatLib '{CLibraries}Clib881.o {CLibraries}CSANELib881.o {CLibraries}Math881.o ∂
#{CLibraries}Complex881.o'
Set cplusFloatLib '{CLibraries}Clib881.o {CLibraries}CSANELib881.o {CLibraries}Math881.o ∂
{CLibraries}CplusLib881.o #{CLibraries}Complex881.o'
Set pFloatLib '{PLibraries}SANELib881.o'
End
Echo
For file in {sources}
If "{file}" =~ /≈.c/
Set CLang 1
Else If "{file}" =~ /≈.cp/
Set CPls 1
Else If "{file}" =~ /≈.p/
Set plibs "{pFloatLib} ∂{PLibraries∂}PasLib.o"
End
End
If {CPls} == 1
Set clibs "{cplusFloatLib} ∂{CLibraries∂}StdCLib.o"
Else If {CLang} == 1
Set clibs "{cFloatLib} ∂{CLibraries∂}StdClib.o"
End
If {type} == Tool
set runtime "∂{Libraries∂}Stubs.o {runtime}"
End
If {type} == SIOW
set runtime "∂{MPW∂}Libraries:Libraries:SIOW.o {runtime}"
End
For file in {sources}
If "{file}" =~ /≈.r/
Set resource "{file}"
End
End
# Generate rez call
For file in {sources}
If "{file}" =~ /≈.r/
If {type} == DA
Quote "{program}" ƒ "{program}".make "{program}".DRVW "{file}"
Echo -n ∂t; Quote Rez -rd -c DMOV -t DFIL -d NOASM_BUILD "{file}" -o "{program}"
Else
Quote "{program}" ƒƒ "{program}".make "{file}"
Echo -n ∂t; Quote Rez "{file}" -append -o "{program}"
If {type} == CR
Echo -n ∂t; Quote SetFile -a B "{program}"
Echo -n ∂t; Quote Duplicate -y "{program}" "{SystemFolder}"
End
End
End
End
Echo
If {type} == DA
If "{resource}" == ""
Set options "-t '????' -c '????' -rt DRVW=12 -sg '{program}'"
Else
Set options "-t '????' -c '????' -rt DRVW=0 -sg '{program}'"
End
Set DRVRruntime '{Libraries}DRVRRuntime.o'
Quote -n "{program}".DRVW ƒ "{program}".make
Echo ∂ ∂{OBJECTS∂}
Set suffix '.DRVW'
Else If {type} == CR
Quote -n "{program}" ƒƒ "{program}".make
Echo ∂ ∂{OBJECTS∂}
If {typ} == 0
set typ '????'
End
Set options "-t '{typ}' -c '{creator}' -rt '{rtype}' -m '{mentry}' ∂
-sg '{program}'"
Else
Quote -n "{program}" ƒƒ "{program}".make
Echo ∂ ∂{OBJECTS∂}
End
# Generate Link rule.
If {symseen} == 1
Set options "{options} -sym {symarg} -mf"
End
Echo -n ∂t; Quote -n Link {options}; Echo ' ∂'
If {type} == DA
Echo -n ∂t∂t
Echo -n {DRVRRuntime}; Echo ' ∂'
End
Echo -n ∂t∂t; Echo -n ∂{OBJECTS∂}; Echo ' ∂'
For i In {clibs} {runtime} {interface} {plibs} {toollibs}
If "{i}" =~ /(≈)®1(∂{≈∂})®2(≈)®3/ # contains {}s ?
Echo -n ∂t∂t; Echo "{®1}∂"{®2}∂"{®3}" ∂∂
Else
Echo -n ∂t∂t; Quote -n "{i}"; Echo ' ∂'
End
End
Echo -n ∂t∂t; Quote -o "{program}{suffix}"
# Generate Asm, C, C++, Pascal, and Rez rules.
For file in {sources}
If "{file}" =~ /≈.a/
Quote "{file}".o ƒ "{program}".make "{file}"
Echo -n ∂t Asm "{compileOptions} "; Quote "{file}"
Else If "{file}" =~ /≈.c/
Quote "{file}".o ƒ "{program}".make "{file}"
Echo -n ∂t C -r "{compileOptions} {cCompileOptions}"; Quote "{file}"
Else If "{file}" =~ /≈.cp/
Quote "{file}".o ƒ "{program}".make "{file}"
Echo -n ∂t CPlus "{compileOptions} {cCompileOptions}"; Quote "{file}"
Else If "{file}" =~ /≈.p/
Quote "{file}".o ƒ "{program}".make "{file}"
Echo -n ∂t Pascal "{compileOptions} {pCompileOptions}"; Quote "{file}"
End
End
If {type} == SIOW
Quote -n "{program}"; Echo ' 'ƒƒ ∂"∂{MPW∂}∂"Interfaces:Rincludes:SIOW.r
Echo -n ∂t; Echo Rez -a ∂"∂{MPW∂}∂"Interfaces:Rincludes:SIOW.r -o "{program}"
End
End > "{program}".make
Echo "{program}"