2002-08-08 H.J. Lu <hjl@gnu.org>
[binutils.git] / config / mpw / g-mpw-make.sed
blobe7d3c770736223c6237cc6356912932ecc19ce33
1 # Sed commands to translate Unix makefiles into MPW makefiles.
2 # These are nominally generic, but work best on the makefiles used
3 # for GNU programs.
5 # Whack out any commented-out lines that are probably commands;
6 # they can only cause trouble later on.
7 /^#     /d
9 # Change dependency char.
10 /:$/s/:/ \\Option-f/g
11 /^[^    :#][^:]*:/s/\([         ]*\):\([        ]*\)/ \\Option-f /g
13 # Change syntax of Makefile vars.
14 /\$/s/\${\([a-zA-Z0-9_-]*\)}/{\1}/g
15 /\$/s/\$(\([a-zA-Z0-9_-]*\))/{\1}/g
16 / $@/s/ $@/ {Targ}/
18 # Double-$ are literals to Unix but not to MPW make.
19 /\$\$/s/\$\$/$/g
21 # Change pathname syntax.
22 /\//s,\.\./\/\.\./,:::,g
23 /\//s,\.\./,::,g
24 /\.\//s,\./,:,g
25 /\//s,/,:,g
26 # Undo excess changes.
27 /and/s,and:or$,and/or,
28 /and/s,and:or ,and/or ,
29 /want/s,want:need,want/need,
30 # Fixing up sed commands.
31 /-e/s_":\([^:]*\):d"_"/\1/d"_g
32 /-e/s_":\([^:]*\):,:\([^:]*\):d"_"/\1/,/\2/d"_g
34 /=/s/ = \.$/ = :/
36 # Make these go away so that later edits not confused.
37 /HLDENV/s/{HLDENV}//
39 # Comment out any explicit srcdir setting.
40 /srcdir/s/^srcdir/# srcdir/
42 /BASEDIR/s/^BASEDIR =.*$/BASEDIR = "{srcroot}"/
43 /{BASEDIR}:/s/{BASEDIR}:/{BASEDIR}/g
44 /{srcdir}:/s/{srcdir}:/"{srcdir}"/g
45 /"{srcdir}":/s/"{srcdir}":/"{srcdir}"/g
47 # Tweak some conventions that are backwards for the Mac.
48 /bindir/s/{exec_prefix}:bin/{exec_prefix}bin:/
49 /libdir/s/{exec_prefix}:lib/{exec_prefix}lib:/
51 # Comment out settings of anything set by mpw host config.
52 /CC/s/^CC *=/#CC =/
53 /CFLAGS/s/^CFLAGS *=/#CFLAGS =/
54 /AR/s/^AR *=/#AR =/
55 /AR_FLAGS/s/^AR_FLAGS *=/#AR_FLAGS =/
56 /RANLIB/s/^RANLIB *=/#RANLIB =/
57 /CC_LD/s/^CC_LD *=/#CC_LD =/
58 /LDFLAGS/s/^LDFLAGS *=/#LDFLAGS =/
60 # Change -I usages.
61 /-I/s/-I\./-i :/g
62 /-I/s/-I::bfd/-i ::bfd:/g
63 /-I/s/-I::include/-i ::include:/g
64 /-I/s/-I/-i /g
66 # Change -D usage.
67 /-D/s/\([ =]\)-D\([^ ]*\)/\1-d \2/g
69 # Change continuation char.
70 /\\$/s/\\$/\\Option-d/
72 # Change wildcard char.
73 /\*/s/\*/\\Option-x/g
75 # Change path of various types of source files.  This rule does not allow
76 # for file names with multiple dots in the name.
77 /\.[chly]/s/\([         ><=]\)\([-a-zA-Z0-9_${}:"]*\)\.\([chly]\)/\1"{s}"\2.\3/g
78 /\.[chly]/s/^\([-a-zA-Z0-9_${}:"]*\)\.\([chly]\)/"{s}"\1.\2/
79 # Allow files named *.tab.[ch] as a special case.
80 /\.tab\.[ch]/s/\([      ><=]\)\([-a-zA-Z0-9_${}:"]*\.tab\)\.\([ch]\)/\1"{s}"\2.\3/g
81 /\.tab\.[ch]/s/^\([-a-zA-Z0-9_${}:"]*\.tab\)\.\([ch]\)/"{s}"\1.\2/
82 # Fix some overenthusiasms.
83 /{s}/s/"{s}""{srcdir}"/"{srcdir}"/g
84 /{s}/s/"{s}"{\([a-zA-Z0-9_]*\)dir}/"{\1dir}"/g
85 /{s}/s/"{s}"{\([a-zA-Z0-9_]*\)DIR}/"{\1DIR}"/g
86 /{s}/s/"{s}""{\([a-zA-Z0-9_]*\)dir}"/"{\1dir}"/g
87 /{s}/s/"{s}""{\([a-zA-Z0-9_]*\)DIR}"/"{\1DIR}"/g
88 /{s}/s/"{s}":/:/g
89 /{s}/s/^"{s}"//g
90 /{s}/s/"{s}""{s}"/"{s}"/g
91 /{s}/s/"{s}""{srcdir}"/"{s}"/g
92 /{s}/s/"{srcdir}""{s}"/"{s}"/g
94 # The .def files are also typically source files.
95 /\.def/s/\([    ><]\)\([-a-zA-Z0-9_${}:"]*\)\.def/\1"{s}"\2.def/g
96 /\.def/s/^\([-a-zA-Z0-9_${}:"]*\)\.def/"{s}"\1.def/g
98 # Change extension and path of objects.
99 /\.o/s/\([      =]\)\([-a-zA-Z0-9_${}:"]*\)\.o/\1"{o}"\2.c.o/g
100 /\.o/s/^\([-a-zA-Z0-9_${}:"]*\)\.o/"{o}"\1.c.o/
101 # Allow *.tab.o files as a special case of a 2-dot-name file.
102 /\.o/s/\([      =]\)\([-a-zA-Z0-9_${}:"]*\)\.tab\.o/\1"{o}"\2.tab.c.o/g
103 /\.o/s/^\([-a-zA-Z0-9_${}:"]*\)\.tab\.o/"{o}"\1.tab.c.o/
104 # Clean up.
105 /"{o}"/s/"{o}""{o}"/"{o}"/g
106 /"{o}"/s/^"{o}"\([a-zA-Z0-9_]*\)=/\1=/
108 # Change extension of libs.
109 /\.a/s/lib\([a-z]*\)\.a/lib\1.o/g
111 # Remove non-fail option.
112 /-/s/^\([       ]*\)-/\1/
113 # Fix overeagernesses - assumes no one-letter commands.
114 /^[     ]*[a-z] /s/^\([         ]*\)\([a-z]\) /\1-\2 /
116 # Remove non-echo option. (watch out for autoconf things)
117 /@/s/^\([       ]*\)@/\1/
119 # Change cp to Duplicate.
120 # Catenate is perhaps more accurate, but the pattern would have to
121 # identify the output file and add a '>' redirection into it.
122 /cp/s/^\([      ]*\)cp /\1Duplicate -d -y /
123 # Change mv to Rename.
124 /mv/s/^\([      ]*\)mv /\1Rename -y /
125 /Rename/s/^\([  ]*\)Rename -y -f/\1Rename -y/
126 # Change rm to Delete.
127 /rm -rf/s/^\([  ]*\)rm -rf /\1Delete -i -y /
128 /rm -f/s/^\([   ]*\)rm -f /\1Delete -i -y /
129 /rm/s/^\([      ]*\)rm /\1Delete -i -y /
130 # Note that we don't mess with ln - directory-specific scripts
131 # must decide what to do with symlinks.
132 # Change cat to Catenate.
133 /cat/s/^\([     ]*\)cat /\1Catenate /
134 # Change touch to mpw-touch.
135 /touch/s/^\([   ]*\)touch /\1mpw-touch /
136 # Change mkdir to NewFolder.
137 /mkdir/s/^\([   ]*\)mkdir /\1NewFolder /
138 # Change var setting to Set.
139 /=/s/^\([       ]*\)\([-a-zA-Z0-9_]*\)=\([^;]*\); \\Option-d/\1Set \2 \3/
141 # Change tests.
142 /if /s/if \[ *-f \([^ ]*\) ] *; *\\Option-d/If "`Exists "\1"`" != ""/
143 /if /s/if \[ *-f \([^ ]*\) ] *; *then *\\Option-d/If "`Exists "\1"`" != ""/
144 /if /s/if \[ ! *-f \([^ ]*\) ] *; *\\Option-d/If "`Exists "\1"`" == ""/
145 /if /s/if \[ ! *-f \([^ ]*\) ] *; *then \\Option-d/If "`Exists "\1"`" == ""/
147 /if /s/if \[ *-d \([^ ]*\) ] *; *\\Option-d/If "`Exists "\1"`" != ""/
148 /if /s/if \[ *-d \([^ ]*\) ] *; *then *\\Option-d/If "`Exists "\1"`" != ""/
149 /if /s/if \[ ! *-d \([^ ]*\) ] *; *\\Option-d/If "`Exists "\1"`" == ""/
150 /if /s/if \[ ! *-d \([^ ]*\) ] *; *then *\\Option-d/If "`Exists "\1"`" == ""/
152 /if /s/if \[ -d \([^ ]*\) ] *; then true *; else mkdir \([^ ;]*\) *; fi/If "`Exists "\1"`" != "" NewFolder \2 End If/
154 /if /s/if \[ \([^ ]*\) = \([^ ]*\) ] *; *\\Option-d/If "\1" == "\2"/
155 /if /s/if \[ \([^ ]*\) = \([^ ]*\) ] *; *then *\\Option-d/If "\1" == "\2"/
157 /if /s/if \[ \([^ ]*\) != \([^ ]*\) ] *; *\\Option-d/If "\1" != "\2"/
158 /if /s/if \[ \([^ ]*\) != \([^ ]*\) ] *; *then *\\Option-d/If "\1" != "\2"/
160 /if /s/if \[ \([^ ]*\) -eq \([^ ]*\) ] *; *\\Option-d/If "\1" != "\2"/
161 /if /s/if \[ \([^ ]*\) -eq \([^ ]*\) ] *; *then *\\Option-d/If "\1" != "\2"/
163 /^[     ]*else true$/c\
164         Else\
165                 mpw-true\
168 /else/s/^\([    ]*\)else[       ]*$/\1Else/
169 /else/s/^\([    ]*\)else[;      ]*\\Option-d$/\1Else/
171 /^[     ]*else[         ]*true[         ]*$/c\
172         Else\
173                 mpw-true
175 /^[     ]*else[         ]*true[;        ]*fi$/c\
176         Else\
177                 mpw-true\
178         End If
180 /fi/s/^\([      ]*\)fi *$/\1End/
181 /fi/s/^\([      ]*\)fi *; *\\Option-d/\1End/
183 # Change looping.
184 /for/s/^\([     ]*\)for \([-a-zA-Z0-9_]*\) in \([^;]*\); *do *\\Option-d/\1For \2 In \3/
185 /^\([   ]*\)do *\\Option-d/d
186 /done/s/^\([    ]*\)done *; *\\Option-d/\1End/
187 /done/s/^\([    ]*\)done$/\1End/
189 # Trailing semicolons and continued lines are unneeded sh syntax.
190 /; \\Option-d/s/; \\Option-d//
192 # Change move-if-change to MoveIfChange.
193 /move-if-change/s/\([^  ]*\)move-if-change/MoveIfChange/g
195 # Change $(SHELL) to the script name by itself.
196 /SHELL/s/^\([   ]*\){SHELL} /\1/
198 # Change syntax of default rule dependency.
199 /^\.c\.o/s/^\.c\.o \\Option-f$/.c.o \\Option-f .c/
201 # Change default rule's action.
202 /{CC} -c/s/{CC} -c \(.*\) \$<$/{CC} @DASH_C_FLAG@ {DepDir}{Default}.c \1 @SEGMENT_FLAG({Default})@ -o {TargDir}{Default}.c.o/
204 # This is pretty disgusting, but I can't seem to detect empty rules.
205 /Option-f$/s/Option-f$/Option-f _oldest/g
207 # Remove -c from explicit compiler calls. (but should not if GCC)
208 # Handle the case of a source file that is "{xxx}"file.c.
209 / -c /s/{\([A-Z_]*\)CC}\(.*\) -c \(.*\)"\([^"]*\)"\([-a-z_]*\)\.c/{\1CC}\2 @DASH_C_FLAG@ \3"\4"\5.c -o "{o}"\5.c.o/
210 # Handle the case of a source file that is "{xxx}"dir:file.c.
211 / -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/
213 # Change linking cc to linking sequence.
214 /-o/s/^\([      ]*\){CC} \(.*\){\([A-Z_]*\)CFLAGS} \(.*\){LDFLAGS} \(.*\)-o \([^ ]*\) \(.*\)$/\1{CC_LD} \2 {\3CFLAGS} \4 {LDFLAGS} \5 -o \6{PROG_EXT} \7\
215 \1{MAKEPEF} \6{PROG_EXT} -o \6 {MAKEPEF_TOOL_FLAGS} {MAKEPEF_FLAGS}\
216 \1{REZ} "{s}"\6.r -o \6 -append -d PROG_NAME='"'\6'"' -d VERSION_STRING='"'{version}'"'/
217 /-o/s/^\([      ]*\){CC} \(.*\){\([A-Z_]*\)CFLAGS} \(.*\)-o \([^ ]*\) \(.*\){LDFLAGS} \(.*\)$/\1{CC_LD} \2 {\3CFLAGS} \4 {LDFLAGS} \6 -o \5{PROG_EXT} \7\
218 \1{MAKEPEF} \5{PROG_EXT} -o \5 {MAKEPEF_TOOL_FLAGS} {MAKEPEF_FLAGS}\
219 \1{REZ} "{s}"\5.r -o \5 -append -d PROG_NAME='"'\5'"' -d VERSION_STRING='"'{version}'"'/
220 /-o/s/^\([      ]*\){HOST_CC} \(.*\)-o \([^ ]*\) \(.*\)$/\1{HOST_CC_LD} \2 -o \3{PROG_EXT} \4\
221 \1{MAKEPEF} \3{PROG_EXT} -o \3 {MAKEPEF_TOOL_FLAGS} {MAKEPEF_FLAGS}\
222 \1{REZ} "{s}"\3.r -o \3 -append -d PROG_NAME='"'\3'"' -d VERSION_STRING='"'{version}'"'/
224 # Comment out .NOEXPORT rules.
225 /\.NOEXPORT/s/^\.NOEXPORT/#\.NOEXPORT/
226 # Comment out .PHONY rules.
227 /\.PHONY/s/^\.PHONY/#\.PHONY/
228 # Comment out .PRECIOUS rules.
229 /\.PRECIOUS/s/^\.PRECIOUS/#\.PRECIOUS/
230 # Comment out .SUFFIXES rules.
231 /\.SUFFIXES/s/^\.SUFFIXES/#\.SUFFIXES/
233 # Set the install program appropriately.
234 /INSTALL/s/^INSTALL *= *`.*`:install.sh -c/INSTALL = Duplicate -y/
236 # Don't try to decide whether to use the tree's own tools.
237 /bison/s/`.*bison:bison.*`/bison -y/
238 /byacc/s/`.*byacc:byacc.*`/byacc/
239 /flex/s/`.*flex:flex.*`/flex/
241 # Turn transformed C comments in echo commands back into comments.
242 /echo/s,echo '\(.*\):\\Option-x\(.*\)\\Option-x:\(.*\)',echo '\1/*\2*/\3',
244 # Whack out various clever expressions that search for tools, since
245 # the clever code is too /bin/sh specific.
247 /^AR_FOR_TARGET = `/,/`$/c\
248 AR_FOR_TARGET = ::binutils:ar\
251 /^RANLIB_FOR_TARGET = `/,/`$/c\
252 RANLIB_FOR_TARGET = ::binutils:ranlib\
255 /^RANLIB_TEST_FOR_TARGET = /,/ranlib ] )$/c\
256 RANLIB_TEST_FOR_TARGET = \
259 /^EXPECT = `/,/`$/c\
260 EXPECT = \
263 /^RUNTEST = `/,/`$/c\
264 RUNTEST = \
267 /^CC_FOR_TARGET = `/,/`$/c\
268 CC_FOR_TARGET = \
271 /^CXX_FOR_TARGET = `/,/`$/c\
272 CXX_FOR_TARGET = \
275 /^CHILL_FOR_TARGET = `/,/`$/c\
276 CHILL_FOR_TARGET = \
279 /^CHILL_LIB = `/,/`$/c\
280 CHILL_LIB = \
282 /sanit/s/{start-sanit...-[a-z0-9]*}//
283 /sanit/s/{end-sanit...-[a-z0-9]*}//
285 # Add standard defines and default rules.
286 /^# srcdir/a\
288 s = "{srcdir}"\
290 o = :\
292 "{o}" \\Option-f : "{s}"