294 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Sed
		
	
	
	
	
	
			
		
		
	
	
			294 lines
		
	
	
		
			9.3 KiB
		
	
	
	
		
			Sed
		
	
	
	
	
	
| # 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}"
 | |
| 
 |