srcdir=/src
VPATH=""
CC=sc
CPP=/cpp/cpp
CFLAGS=
LN_S=
MAKE=gmake
dot = .
lispdir = /lisp/
libsrc = /lib-src/
etc = /etc/
shortnamesdir = $(dot)$(dot)/shortnames/
cppdir = /cpp/
oldXMenudir = $(dot)$(dot)/oldXMenu/
lwlibdir = $(dot)$(dot)/lwlib/
M_FILE = ${srcdir}/m/amiga.h
S_FILE = #${srcdir}/s/amigados.h #CHFIXME: reactivate
config_h = config.h $(M_FILE) $(S_FILE)

MYCPPFLAGS=def static 
LDFLAGS=
C_SWITCH_SYSTEM=

SHELL=/bin/sh
STARTFILES = lib:c.o firstfile.o
ALL_CFLAGS=def emacs def HAVE_CONFIG_H $(MYCPPFLAGS) idir ${srcdir}       ${CFLAGS}
.c.o:
	$(CC) $(CPPFLAGS) $(ALL_CFLAGS) $< OBJNAME=t:$*.o
	@copy t:$*.o $*.o
	@rm t:$*.o

GNULIB_VAR =
LD=ld
ALL_LDFLAGS =    $(LDFLAGS)
amigasrcs=amiga_clipboard.c amiga_tty.c amiga_serial.c \
	amiga_screen.c amiga_menu.c amiga_malloc.c \
        amiga_rexx.c simplerexx.c amiga_term.c amiga_fns.c #amiga_select.c
srcs=    dispnew.c frame.c scroll.c xdisp.c window.c 	term.c cm.c emacs.c keyboard.c macros.c keymap.c amiga_sysdep.c 	buffer.c filelock.c insdel.c marker.c  	minibuf.c fileio.c dired.c filemode.c 	cmds.c casetab.c casefiddle.c indent.c search.c regex.c undo.c 	alloc.c data.c doc.c editfns.c callint.c 	eval.c floatfns.c fns.c print.c lread.c 	abbrev.c syntax.c amiga_dump.c mocklisp.c bytecode.c 	process.c callproc.c 	doprnt.c getloadavg.c ${amigasrcs}
amigaobj=amiga_clipboard.o amiga_tty.o amiga_serial.o \
	amiga_screen.o amiga_menu.o amiga_malloc.o \
        amiga_rexx.o simplerexx.o amiga_term.o amiga_xmenu.o amiga_fns.o
obj=    dispnew.o frame.o scroll.o xdisp.o window.o 	term.o cm.o $(XOBJ) 	emacs.o keyboard.o macros.o keymap.o amiga_sysdep.o 	buffer.o filelock.o insdel.o marker.o  	minibuf.o fileio.o dired.o filemode.o 	cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o 	alloc.o data.o doc.o editfns.o callint.o 	eval.o floatfns.o fns.o print.o lread.o 	abbrev.o syntax.o amiga_dump.o mocklisp.o bytecode.o 	process.o callproc.o 	doprnt.o getloadavg.o intervals.o textprop.o ${amigaobj}
SOME_MACHINE_OBJECTS = #${amigaobj}
termcapobj = termcap.o tparam.o
mallocobj = #malloc.o
allocaobj = oldalloca.o
widgetobj=

otherobj= $(termcapobj) lastfile.o $(mallocobj) $(allocaobj) $(widgetobj)
lisp= 	${lispdir}abbrev.elc 	${lispdir}buff-menu.elc 	${lispdir}byte-run.elc 	${lispdir}c-mode.elc 	${lispdir}files.elc 	${lispdir}fill.elc 	 	 	 	${lispdir}help.elc 	${lispdir}indent.elc 	${lispdir}isearch.elc 	${lispdir}lisp-mode.elc 	${lispdir}lisp.elc 	${lispdir}loaddefs.el 	${lispdir}map-ynp.elc 	${lispdir}page.elc 	${lispdir}paragraphs.elc 	${lispdir}paths.el 	${lispdir}register.elc 	${lispdir}replace.elc 	${lispdir}simple.elc 	${lispdir}startup.el 	${lispdir}subr.elc 	${lispdir}text-mode.elc 	${lispdir}vc-hooks.elc 	 	 	${lispdir}window.elc 	${lispdir}version.el
LIBES = $(LIBX)       -lg $(GNULIB_VAR)  -lc $(GNULIB_VAR)

all: emacs

emacs: temacs ${etc}DOC ${lisp}
	/src/temacs -batch -l loadup dump

${etc}DOC: ${libsrc}make-docfile ${obj} ${lisp}
	-rm -f ${etc}DOC
	${libsrc}make-docfile -o ${etc}DOC -f < <
${obj}
${SOME_MACHINE_OBJECTS} 	  
${lisp} 
${amigalisp}
< 

${libsrc}make-docfile:
	sc link {libsrc}make-docfile.c

temacs:  $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj}   prefix-args
	slink <with <
from ${STARTFILES} $(obj)
$(otherobj)
to t:temacs
lib 	//unix/src/unix.lib lib:scmieee.lib lib:sc.lib lib:amiga.lib
addsym
batch
<
	copy t:temacs temacs
	rm t:temacs

protos.h: amiga_fns_protos.h amiga_screen_protos.h amiga_menu_protos.h amiga_tty_protos.h \
	amiga_term_protos.h amiga_xmenu_protos.h

amiga_fns_protos.h: amiga_fns.c
	$(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
amiga_menu_protos.h: amiga_menu.c
	$(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
amiga_screen_protos.h: amiga_screen.c
	$(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
amiga_term_protos.h: amiga_term.c
	$(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
amiga_tty_protos.h: amiga_tty.c
	$(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<
amiga_xmenu_protos.h: amiga_xmenu.c
	$(CC) $(ALL_CFLAGS) DEF GENPROTO GENPROTO NOGenProtoTypeDEFs $<


amiga_malloc.o: amiga_malloc.c amiga.h config.h  
        $(CC) $(ALL_CFLAGS) parms=both amiga_malloc.c

amiga_select.o: amiga_select.c 
        $(CC) $(ALL_CFLAGS) parms=both amiga_select.c

prefix-args: prefix-args.c $(config_h)
	$(CC) $(ALL_CFLAGS) ${srcdir}/prefix-args.c LINK to prefix-args

CPP = $(CC) -E
paths.h: paths.h.in
	@echo "The file paths.h needs to be set up from paths.h.in."
	@echo "Consult the file \`INSTALL' for instructions for building Emacs."
	exit 1
config.h: config.h.in
	@echo "The file config.h needs to be set up from config.h.in."
	@echo "Consult the file \`INSTALL' for instructions for building Emacs."
	exit 1
alloca.o : alloca.s $(config_h)
	cp ${srcdir}/alloca.s allocatem.c
	$(CPP) $(CPPFLAGS) $(ALL_CFLAGS) allocatem.c | 	sed -e 's///' -e 's/^#.*//' | 	sed -n -e '/^..*$$/p' > allocax.s
	-rm -f alloca.o
	$(CC) -c allocax.s
	mv allocax.o alloca.o
	rm allocax.s allocatem.c
abbrev.o : abbrev.c buffer.h commands.h $(config_h)
buffer.o : buffer.c buffer.h commands.h window.h     blockinput.h $(config_h)
callint.o : callint.c window.h commands.h buffer.h mocklisp.h    keyboard.h $(config_h)
callproc.o : callproc.c paths.h buffer.h commands.h $(config_h) 	process.h systty.h syssignal.h
casefiddle.o : casefiddle.c syntax.h commands.h buffer.h $(config_h)
casetab.o : casetab.c buffer.h $(config_h)
cm.o : cm.c cm.h termhooks.h $(config_h)
cmds.o : cmds.c syntax.h buffer.h commands.h $(config_h)
pre-crt0.o : pre-crt0.c
crt0.o : crt0.c $(config_h)
	$(CC) -c $(ALL_CFLAGS)   ${srcdir}/crt0.c
dired.o : dired.c commands.h buffer.h $(config_h) regex.h
dispnew.o : dispnew.c commands.h frame.h window.h buffer.h dispextern.h    termchar.h termopts.h termhooks.h cm.h disptab.h systty.h systime.h $(config_h)
doc.o : doc.c $(config_h) paths.h buffer.h keyboard.h
doprnt.o : doprnt.c
editfns.o : editfns.c window.h buffer.h systime.h  $(config_h)
emacs.o : emacs.c commands.h systty.h syssignal.h process.h  $(config_h)
fileio.o : fileio.c window.h buffer.h systime.h  $(config_h)
filelock.o : filelock.c buffer.h paths.h $(config_h)
filemode.o : filemode.c  $(config_h)
getloadavg.o : getloadavg.c $(config_h)
indent.o : indent.c frame.h window.h indent.h buffer.h $(config_h) termchar.h    termopts.h disptab.h
insdel.o : insdel.c window.h buffer.h  blockinput.h $(config_h)
keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h    commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h    systty.h systime.h dispextern.h intervals.h blockinput.h $(config_h)
keymap.o : keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h    $(config_h)
lastfile.o : lastfile.c  $(config_h)
macros.o : macros.c window.h buffer.h commands.h macros.h $(config_h)
malloc.o : malloc.c $(config_h)
gmalloc.o : gmalloc.c $(config_h)
ralloc.o : ralloc.c $(config_h)
vm-limit.o : vm-limit.c mem-limits.h $(config_h)
marker.o : marker.c buffer.h $(config_h)
minibuf.o : minibuf.c syntax.h dispextern.h frame.h window.h    buffer.h commands.h $(config_h)
mocklisp.o : mocklisp.c buffer.h $(config_h)
process.o : process.c process.h buffer.h window.h termhooks.h termopts.h    commands.h syssignal.h systime.h systty.h syswait.h frame.h $(config_h)
regex.o : regex.c syntax.h buffer.h $(config_h) regex.h
frame.o : frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h    buffer.h $(config_h)
scroll.o : scroll.c termchar.h $(config_h) dispextern.h frame.h
search.o : search.c regex.h commands.h buffer.h syntax.h blockinput.h $(config_h)
syntax.o : syntax.c syntax.h buffer.h commands.h $(config_h)
sysdep.o : sysdep.c $(config_h) dispextern.h termhooks.h termchar.h termopts.h    frame.h syssignal.h systty.h systime.h syswait.h blockinput.h window.h
term.o : term.c termchar.h termhooks.h termopts.h $(config_h) cm.h frame.h    disptab.h
termcap.o : termcap.c $(config_h)
terminfo.o : terminfo.c $(config_h)
tparam.o : tparam.c $(config_h)
undo.o : undo.c buffer.h commands.h $(config_h)
UNEXEC_ALIAS=unexec.o
$(UNEXEC_ALIAS) : unexec.c $(config_h)
widget.o : widget.c xterm.h frame.h dispextern.h widgetprv.h $(config_h)
window.o : window.c indent.h commands.h frame.h window.h buffer.h termchar.h    termhooks.h disptab.h keyboard.h $(config_h)
xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h    termchar.h frame.h window.h disptab.h termhooks.h $(config_h)
xfaces.o : xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h    window.h $(config_h)
xfns.o : xfns.c buffer.h frame.h window.h keyboard.h xterm.h    blockinput.h $(config_h)
xmenu.o : xmenu.c xterm.h window.h frame.h keyboard.h blockinput.h $(config_h)
xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h window.h   dispextern.h frame.h disptab.h blockinput.h systime.h syssignal.h   gnu.h sink.h sinkmask.h $(config_h)
xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h $(config_h)
xrdb.o : xrdb.c $(config_h)
hftctl.o : hftctl.c $(config_h)
alloc.o : alloc.c frame.h window.h buffer.h  puresize.h syssignal.h
alloc.o : blockinput.h $(config_h)
bytecode.o : bytecode.c buffer.h $(config_h)
data.o : data.c buffer.h puresize.h syssignal.h $(config_h)
eval.o : eval.c commands.h keyboard.h blockinput.h $(config_h)
floatfns.o : floatfns.c $(config_h)
fns.o : fns.c commands.h $(config_h) frame.h buffer.h keyboard.h
print.o : print.c process.h frame.h window.h buffer.h $(config_h)
lread.o : lread.c commands.h keyboard.h buffer.h paths.h $(config_h)  termhooks.h
textprop.o : textprop.c buffer.h intervals.h $(config_h)
intervals.o : intervals.c buffer.h intervals.h puresize.h $(config_h)
sunfns.o  : sunfns.c buffer.h $(config_h)
amiga_dump.o: amiga_dump.c frame.h
amiga_menu.o: amiga_menu.c frame.h
amiga_screen.o: amiga_screen.c frame.h
amiga_term.o: amiga_term.c frame.h
amiga_tty.o: amiga_tty.c frame.h
${libsrc}emacstool: ${libsrc}emacstool.c
	cd ${libsrc}; ${MAKE} ${MFLAGS} emacstool
mostlyclean:
	rm -f temacs prefix-args core \#* *.o libXMenu11.a liblw.a
	rm -f ../etc/DOC
clean: mostlyclean
	rm -f emacs-* emacs
distclean: clean
	rm -f paths.h config.h Makefile Makefile.in ../etc/DOC-*
realclean: distclean
	rm -f TAGS
versionclean:
	-rm -f emacs emacs-* ../etc/DOC*
extraclean: distclean
	-rm -f *~ \#* m/?*~ s/?*~
SOURCES = *.[ch] [sm]/?* COPYING ymakefile 	config.h.in README COPYING ChangeLog vms.pp-trans
unlock:
	chmod u+w $(SOURCES)
relock:
	chmod -w $(SOURCES)
	chmod +w paths.h
ctagsfiles = [a-zA-Z]*.h [a-zA-Z]*.c
lisptagsfiles = ../lisp/[a-zA-Z]*.el ../lisp/term/[a-zA-Z]*.el
TAGS: $(ctagsfiles)
	../lib-src/etags --include=../lisp/TAGS $(ctagsfiles)
../lisp/TAGS: $(lisptagsfiles)
	cd ../lisp; $(MAKE) TAGS
tags: TAGS ../lisp/TAGS
.PHONY: tags
