# Configuration fragment for BFD.
-DupIfChange {srcdir}hosts:mpw.h sysdep.h
+forward-include "{srcdir}"hosts:mpw.h sysdep.h
-StreamEdit -e '/@WORDSIZE@/ Replace /@WORDSIZE@/ "32"' {srcdir}bfd-in2.h >bfd.h-new
+# We can only handle 32-bit targets right now.
+
+sed -e 's/@WORDSIZE@/32/' -e "s/@VERSION@/`Catenate {srcdir}VERSION`/" {srcdir}bfd-in2.h >bfd.h-new
MoveIfChange bfd.h-new bfd.h
-#DupIfChange {srcdir}mpw.bfd.h bfd.h
+# Pre-expand some macros in coffswap.h, so MPW C doesn't choke.
+
+sed -e 's/^ PUT_AOUTHDR_TSIZE (/ bfd_h_put_32 (/' -e 's/^ PUT_AOUTHDR_DSIZE (/ bfd_h_put_32 (/' -e 's/^ PUT_AOUTHDR_BSIZE (/ bfd_h_put_32 (/' -e 's/^ PUT_AOUTHDR_ENTRY (/ bfd_h_put_32 (/' -e 's/^ PUT_AOUTHDR_TEXT_START (/ bfd_h_put_32 (/' -e 's/^ PUT_AOUTHDR_DATA_START (/ bfd_h_put_32 (/' {srcdir}coffswap.h >coffswap.h-new
+MoveIfChange coffswap.h-new coffswap.h
+
+# This is almost always correct.
+
+Set selarchs bfd_{target_cpu}_arch
+Set defvec ""
+Set selvecs ""
+
+If "{target_canonical}" =~ /m68k-apple-macos/
+ Set BFD_BACKENDS '"{o}"coff-m68k.c.o "{o}"cofflink.c.o'
+ Set defvec m68kcoff_vec
+ Set selvecs '&m68kcoff_vec'
+Else If "{target_canonical}" =~ /powerpc-apple-macos/
+ Set BFD_BACKENDS '"{o}"coff-rs6000.c.o'
+ Set defvec rs6000coff_vec
+ Set selvecs '&rs6000coff_vec'
+ Set selarchs bfd_powerpc_arch
+Else If "{target_canonical}" =~ /i386-unknown-go32/
+ Set BFD_BACKENDS '"{o}"coff-i386.c.o'
+ Set defvec i386coff_vec
+ Set selvecs '&i386coff_vec'
+Else If "{target_canonical}" =~ /mips-idt-ecoff/
+ Set BFD_BACKENDS '"{o}"coff-mips.c.o "{o}"ecoff.c.o "{o}"ecofflink.c.o'
+ Set defvec ecoff_big_vec
+ Set selvecs '&ecoff_big_vec,&ecoff_little_vec'
+Else If "{target_canonical}" =~ /sh-hitachi-hms/
+ Set BFD_BACKENDS '"{o}"coff-sh.c.o "{o}"cofflink.c.o'
+ Set defvec shcoff_vec
+ Set selvecs '&shcoff_vec,&shlcoff_vec'
+End If
+
+Set ta `echo {selarchs} | sed -e 's/bfd_/{o}cpu-/g' -e 's/_arch/.c.o/g'`
+
+Set tdefaults "-d DEFAULT_VECTOR={defvec} -d SELECT_VECS={selvecs} -d SELECT_ARCHITECTURES={selarchs}"
+
+Echo '# From mpw-config.in' > "{o}"mk.tmp
+
+Echo 'WORDSIZE = 32' >> "{o}"mk.tmp
+
+Echo 'BFD_MACHINES = ' {ta} >>"{o}"mk.tmp
+
+Echo 'BFD_BACKENDS = ' {BFD_BACKENDS} >> "{o}"mk.tmp
+
+Echo 'TDEFAULTS = ' {tdefaults} >> "{o}"mk.tmp
-Echo "#ifndef __va_list__" >varargs.h
-Echo "#define __va_list__" >>varargs.h
-Echo "typedef char *va_list;" >>varargs.h
-Echo "#endif" >>varargs.h
-Echo "#define va_dcl int va_alist;" >>varargs.h
-Echo "#define va_start(list) list = (char *) &va_alist" >>varargs.h
-Echo "#define va_end(list)" >>varargs.h
-Echo "#define va_arg(list,mode) ((mode *)(list += sizeof(mode)))[-1]" >>varargs.h
+Echo '# End from mpw-config.in' >> "{o}"mk.tmp