| # Sed commands to translate Unix makefiles into MPW makefiles. |
| # These are nominally generic, but work best on the makefiles used |
| # for GNU programs. |
| |
| # Whack out any commented-out lines that are probably commands; |
| # they can only cause trouble later on. |
| /^# /d |
| |
| # Change dependency char. |
| /:$/s/:/ \\Option-f/g |
| /^[^ :#][^:]*:/s/\([ ]*\):\([ ]*\)/ \\Option-f /g |
| |
| # Change syntax of Makefile vars. |
| /\$/s/\${\([a-zA-Z0-9_-]*\)}/{\1}/g |
| /\$/s/\$(\([a-zA-Z0-9_-]*\))/{\1}/g |
| / $@/s/ $@/ {Targ}/ |
| |
| # Double-$ are literals to Unix but not to MPW make. |
| /\$\$/s/\$\$/$/g |
| |
| # Change pathname syntax. |
| /\//s,\.\./\/\.\./,:::,g |
| /\//s,\.\./,::,g |
| /\.\//s,\./,:,g |
| /\//s,/,:,g |
| # Undo excess changes. |
| /and/s,and:or$,and/or, |
| /and/s,and:or ,and/or , |
| /want/s,want:need,want/need, |
| # Fixing up sed commands. |
| /-e/s_":\([^:]*\):d"_"/\1/d"_g |
| /-e/s_":\([^:]*\):,:\([^:]*\):d"_"/\1/,/\2/d"_g |
| |
| /=/s/ = \.$/ = :/ |
| |
| # Make these go away so that later edits not confused. |
| /HLDENV/s/{HLDENV}// |
| |
| # Comment out any explicit srcdir setting. |
| /srcdir/s/^srcdir/# srcdir/ |
| |
| /BASEDIR/s/^BASEDIR =.*$/BASEDIR = "{srcroot}"/ |
| /{BASEDIR}:/s/{BASEDIR}:/{BASEDIR}/g |
| /{srcdir}:/s/{srcdir}:/"{srcdir}"/g |
| /"{srcdir}":/s/"{srcdir}":/"{srcdir}"/g |
| |
| # Tweak some conventions that are backwards for the Mac. |
| /bindir/s/{exec_prefix}:bin/{exec_prefix}bin:/ |
| /libdir/s/{exec_prefix}:lib/{exec_prefix}lib:/ |
| |
| # Comment out settings of anything set by mpw host config. |
| /CC/s/^CC *=/#CC =/ |
| /CFLAGS/s/^CFLAGS *=/#CFLAGS =/ |
| /AR/s/^AR *=/#AR =/ |
| /AR_FLAGS/s/^AR_FLAGS *=/#AR_FLAGS =/ |
| /RANLIB/s/^RANLIB *=/#RANLIB =/ |
| /CC_LD/s/^CC_LD *=/#CC_LD =/ |
| /LDFLAGS/s/^LDFLAGS *=/#LDFLAGS =/ |
| |
| # Change -I usages. |
| /-I/s/-I\./-i :/g |
| /-I/s/-I::bfd/-i ::bfd:/g |
| /-I/s/-I::include/-i ::include:/g |
| /-I/s/-I/-i /g |
| |
| # Change -D usage. |
| /-D/s/\([ =]\)-D\([^ ]*\)/\1-d \2/g |
| |
| # Change continuation char. |
| /\\$/s/\\$/\\Option-d/ |
| |
| # Change wildcard char. |
| /\*/s/\*/\\Option-x/g |
| |
| # Change path of various types of source files. This rule does not allow |
| # for file names with multiple dots in the name. |
| /\.[chly]/s/\([ ><=]\)\([-a-zA-Z0-9_${}:"]*\)\.\([chly]\)/\1"{s}"\2.\3/g |
| /\.[chly]/s/^\([-a-zA-Z0-9_${}:"]*\)\.\([chly]\)/"{s}"\1.\2/ |
| # Allow files named *.tab.[ch] as a special case. |
| /\.tab\.[ch]/s/\([ ><=]\)\([-a-zA-Z0-9_${}:"]*\.tab\)\.\([ch]\)/\1"{s}"\2.\3/g |
| /\.tab\.[ch]/s/^\([-a-zA-Z0-9_${}:"]*\.tab\)\.\([ch]\)/"{s}"\1.\2/ |
| # Fix some overenthusiasms. |
| /{s}/s/"{s}""{srcdir}"/"{srcdir}"/g |
| /{s}/s/"{s}"{\([a-zA-Z0-9_]*\)dir}/"{\1dir}"/g |
| /{s}/s/"{s}"{\([a-zA-Z0-9_]*\)DIR}/"{\1DIR}"/g |
| /{s}/s/"{s}""{\([a-zA-Z0-9_]*\)dir}"/"{\1dir}"/g |
| /{s}/s/"{s}""{\([a-zA-Z0-9_]*\)DIR}"/"{\1DIR}"/g |
| /{s}/s/"{s}":/:/g |
| /{s}/s/^"{s}"//g |
| /{s}/s/"{s}""{s}"/"{s}"/g |
| /{s}/s/"{s}""{srcdir}"/"{s}"/g |
| /{s}/s/"{srcdir}""{s}"/"{s}"/g |
| |
| # The .def files are also typically source files. |
| /\.def/s/\([ ><]\)\([-a-zA-Z0-9_${}:"]*\)\.def/\1"{s}"\2.def/g |
| /\.def/s/^\([-a-zA-Z0-9_${}:"]*\)\.def/"{s}"\1.def/g |
| |
| # Change extension and path of objects. |
| /\.o/s/\([ =]\)\([-a-zA-Z0-9_${}:"]*\)\.o/\1"{o}"\2.c.o/g |
| /\.o/s/^\([-a-zA-Z0-9_${}:"]*\)\.o/"{o}"\1.c.o/ |
| # Allow *.tab.o files as a special case of a 2-dot-name file. |
| /\.o/s/\([ =]\)\([-a-zA-Z0-9_${}:"]*\)\.tab\.o/\1"{o}"\2.tab.c.o/g |
| /\.o/s/^\([-a-zA-Z0-9_${}:"]*\)\.tab\.o/"{o}"\1.tab.c.o/ |
| # Clean up. |
| /"{o}"/s/"{o}""{o}"/"{o}"/g |
| /"{o}"/s/^"{o}"\([a-zA-Z0-9_]*\)=/\1=/ |
| |
| # Change extension of libs. |
| /\.a/s/lib\([a-z]*\)\.a/lib\1.o/g |
| |
| # Remove non-fail option. |
| /-/s/^\([ ]*\)-/\1/ |
| # Fix overeagernesses - assumes no one-letter commands. |
| /^[ ]*[a-z] /s/^\([ ]*\)\([a-z]\) /\1-\2 / |
| |
| # Remove non-echo option. (watch out for autoconf things) |
| /@/s/^\([ ]*\)@/\1/ |
| |
| # Change cp to Duplicate. |
| # Catenate is perhaps more accurate, but the pattern would have to |
| # identify the output file and add a '>' redirection into it. |
| /cp/s/^\([ ]*\)cp /\1Duplicate -d -y / |
| # Change mv to Rename. |
| /mv/s/^\([ ]*\)mv /\1Rename -y / |
| /Rename/s/^\([ ]*\)Rename -y -f/\1Rename -y/ |
| # Change rm to Delete. |
| /rm -rf/s/^\([ ]*\)rm -rf /\1Delete -i -y / |
| /rm -f/s/^\([ ]*\)rm -f /\1Delete -i -y / |
| /rm/s/^\([ ]*\)rm /\1Delete -i -y / |
| # Note that we don't mess with ln - directory-specific scripts |
| # must decide what to do with symlinks. |
| # Change cat to Catenate. |
| /cat/s/^\([ ]*\)cat /\1Catenate / |
| # Change touch to mpw-touch. |
| /touch/s/^\([ ]*\)touch /\1mpw-touch / |
| # Change mkdir to NewFolder. |
| /mkdir/s/^\([ ]*\)mkdir /\1NewFolder / |
| # Change var setting to Set. |
| /=/s/^\([ ]*\)\([-a-zA-Z0-9_]*\)=\([^;]*\); \\Option-d/\1Set \2 \3/ |
| |
| # Change tests. |
| /if /s/if \[ *-f \([^ ]*\) ] *; *\\Option-d/If "`Exists "\1"`" != ""/ |
| /if /s/if \[ *-f \([^ ]*\) ] *; *then *\\Option-d/If "`Exists "\1"`" != ""/ |
| /if /s/if \[ ! *-f \([^ ]*\) ] *; *\\Option-d/If "`Exists "\1"`" == ""/ |
| /if /s/if \[ ! *-f \([^ ]*\) ] *; *then \\Option-d/If "`Exists "\1"`" == ""/ |
| |
| /if /s/if \[ *-d \([^ ]*\) ] *; *\\Option-d/If "`Exists "\1"`" != ""/ |
| /if /s/if \[ *-d \([^ ]*\) ] *; *then *\\Option-d/If "`Exists "\1"`" != ""/ |
| /if /s/if \[ ! *-d \([^ ]*\) ] *; *\\Option-d/If "`Exists "\1"`" == ""/ |
| /if /s/if \[ ! *-d \([^ ]*\) ] *; *then *\\Option-d/If "`Exists "\1"`" == ""/ |
| |
| /if /s/if \[ -d \([^ ]*\) ] *; then true *; else mkdir \([^ ;]*\) *; fi/If "`Exists "\1"`" != "" NewFolder \2 End If/ |
| |
| /if /s/if \[ \([^ ]*\) = \([^ ]*\) ] *; *\\Option-d/If "\1" == "\2"/ |
| /if /s/if \[ \([^ ]*\) = \([^ ]*\) ] *; *then *\\Option-d/If "\1" == "\2"/ |
| |
| /if /s/if \[ \([^ ]*\) != \([^ ]*\) ] *; *\\Option-d/If "\1" != "\2"/ |
| /if /s/if \[ \([^ ]*\) != \([^ ]*\) ] *; *then *\\Option-d/If "\1" != "\2"/ |
| |
| /if /s/if \[ \([^ ]*\) -eq \([^ ]*\) ] *; *\\Option-d/If "\1" != "\2"/ |
| /if /s/if \[ \([^ ]*\) -eq \([^ ]*\) ] *; *then *\\Option-d/If "\1" != "\2"/ |
| |
| /^[ ]*else true$/c\ |
| Else\ |
| mpw-true\ |
| |
| |
| /else/s/^\([ ]*\)else[ ]*$/\1Else/ |
| /else/s/^\([ ]*\)else[; ]*\\Option-d$/\1Else/ |
| |
| /^[ ]*else[ ]*true[ ]*$/c\ |
| Else\ |
| mpw-true |
| |
| /^[ ]*else[ ]*true[; ]*fi$/c\ |
| Else\ |
| mpw-true\ |
| End If |
| |
| /fi/s/^\([ ]*\)fi *$/\1End/ |
| /fi/s/^\([ ]*\)fi *; *\\Option-d/\1End/ |
| |
| # Change looping. |
| /for/s/^\([ ]*\)for \([-a-zA-Z0-9_]*\) in \([^;]*\); *do *\\Option-d/\1For \2 In \3/ |
| /^\([ ]*\)do *\\Option-d/d |
| /done/s/^\([ ]*\)done *; *\\Option-d/\1End/ |
| /done/s/^\([ ]*\)done$/\1End/ |
| |
| # Trailing semicolons and continued lines are unneeded sh syntax. |
| /; \\Option-d/s/; \\Option-d// |
| |
| # Change move-if-change to MoveIfChange. |
| /move-if-change/s/\([^ ]*\)move-if-change/MoveIfChange/g |
| |
| # Change $(SHELL) to the script name by itself. |
| /SHELL/s/^\([ ]*\){SHELL} /\1/ |
| |
| # Change syntax of default rule dependency. |
| /^\.c\.o/s/^\.c\.o \\Option-f$/.c.o \\Option-f .c/ |
| |
| # Change default rule's action. |
| /{CC} -c/s/{CC} -c \(.*\) \$<$/{CC} @DASH_C_FLAG@ {DepDir}{Default}.c \1 @SEGMENT_FLAG({Default})@ -o {TargDir}{Default}.c.o/ |
| |
| # This is pretty disgusting, but I can't seem to detect empty rules. |
| /Option-f$/s/Option-f$/Option-f _oldest/g |
| |
| # Remove -c from explicit compiler calls. (but should not if GCC) |
| # Handle the case of a source file that is "{xxx}"file.c. |
| / -c /s/{\([A-Z_]*\)CC}\(.*\) -c \(.*\)"\([^"]*\)"\([-a-z_]*\)\.c/{\1CC}\2 @DASH_C_FLAG@ \3"\4"\5.c -o "{o}"\5.c.o/ |
| # Handle the case of a source file that is "{xxx}"dir:file.c. |
| / -c /s/{\([A-Z_]*\)CC}\(.*\) -c \(.*\)"\([^"]*\)"\([-a-z_]*\):\([-a-z_]*\)\.c/{\1CC}\2 @DASH_C_FLAG@ \3"\4"\5:\6.c -o "{o}"\6.c.o/ |
| |
| # Change linking cc to linking sequence. |
| /-o/s/^\([ ]*\){CC} \(.*\){\([A-Z_]*\)CFLAGS} \(.*\){LDFLAGS} \(.*\)-o \([^ ]*\) \(.*\)$/\1{CC_LD} \2 {\3CFLAGS} \4 {LDFLAGS} \5 -o \6{PROG_EXT} \7\ |
| \1{MAKEPEF} \6{PROG_EXT} -o \6 {MAKEPEF_TOOL_FLAGS} {MAKEPEF_FLAGS}\ |
| \1{REZ} "{s}"\6.r -o \6 -append -d PROG_NAME='"'\6'"' -d VERSION_STRING='"'{version}'"'/ |
| /-o/s/^\([ ]*\){CC} \(.*\){\([A-Z_]*\)CFLAGS} \(.*\)-o \([^ ]*\) \(.*\){LDFLAGS} \(.*\)$/\1{CC_LD} \2 {\3CFLAGS} \4 {LDFLAGS} \6 -o \5{PROG_EXT} \7\ |
| \1{MAKEPEF} \5{PROG_EXT} -o \5 {MAKEPEF_TOOL_FLAGS} {MAKEPEF_FLAGS}\ |
| \1{REZ} "{s}"\5.r -o \5 -append -d PROG_NAME='"'\5'"' -d VERSION_STRING='"'{version}'"'/ |
| /-o/s/^\([ ]*\){HOST_CC} \(.*\)-o \([^ ]*\) \(.*\)$/\1{HOST_CC_LD} \2 -o \3{PROG_EXT} \4\ |
| \1{MAKEPEF} \3{PROG_EXT} -o \3 {MAKEPEF_TOOL_FLAGS} {MAKEPEF_FLAGS}\ |
| \1{REZ} "{s}"\3.r -o \3 -append -d PROG_NAME='"'\3'"' -d VERSION_STRING='"'{version}'"'/ |
| |
| # Comment out .NOEXPORT rules. |
| /\.NOEXPORT/s/^\.NOEXPORT/#\.NOEXPORT/ |
| # Comment out .PHONY rules. |
| /\.PHONY/s/^\.PHONY/#\.PHONY/ |
| # Comment out .PRECIOUS rules. |
| /\.PRECIOUS/s/^\.PRECIOUS/#\.PRECIOUS/ |
| # Comment out .SUFFIXES rules. |
| /\.SUFFIXES/s/^\.SUFFIXES/#\.SUFFIXES/ |
| |
| # Set the install program appropriately. |
| /INSTALL/s/^INSTALL *= *`.*`:install.sh -c/INSTALL = Duplicate -y/ |
| |
| # Don't try to decide whether to use the tree's own tools. |
| /bison/s/`.*bison:bison.*`/bison -y/ |
| /byacc/s/`.*byacc:byacc.*`/byacc/ |
| /flex/s/`.*flex:flex.*`/flex/ |
| |
| # Turn transformed C comments in echo commands back into comments. |
| /echo/s,echo '\(.*\):\\Option-x\(.*\)\\Option-x:\(.*\)',echo '\1/*\2*/\3', |
| |
| # Whack out various clever expressions that search for tools, since |
| # the clever code is too /bin/sh specific. |
| |
| /^AR_FOR_TARGET = `/,/`$/c\ |
| AR_FOR_TARGET = ::binutils:ar\ |
| |
| |
| /^RANLIB_FOR_TARGET = `/,/`$/c\ |
| RANLIB_FOR_TARGET = ::binutils:ranlib\ |
| |
| |
| /^RANLIB_TEST_FOR_TARGET = /,/ranlib ] )$/c\ |
| RANLIB_TEST_FOR_TARGET = \ |
| |
| |
| /^EXPECT = `/,/`$/c\ |
| EXPECT = \ |
| |
| |
| /^RUNTEST = `/,/`$/c\ |
| RUNTEST = \ |
| |
| |
| /^CC_FOR_TARGET = `/,/`$/c\ |
| CC_FOR_TARGET = \ |
| |
| |
| /^CXX_FOR_TARGET = `/,/`$/c\ |
| CXX_FOR_TARGET = \ |
| |
| |
| /^CHILL_FOR_TARGET = `/,/`$/c\ |
| CHILL_FOR_TARGET = \ |
| |
| |
| /^CHILL_LIB = `/,/`$/c\ |
| CHILL_LIB = \ |
| |
| /sanit/s/{start-sanit...-[a-z0-9]*}// |
| /sanit/s/{end-sanit...-[a-z0-9]*}// |
| |
| # Add standard defines and default rules. |
| /^# srcdir/a\ |
| \ |
| s = "{srcdir}"\ |
| \ |
| o = :\ |
| \ |
| "{o}" \\Option-f : "{s}" |
| |