##########################################################################
#
# $Id: makemeta,v 1.22 93/07/30 12:22:33 vertex Exp $
#
##########################################################################
pragma +m4096

ifndef $(ONEPROTOPERFILE)
    ONEPROTOPERFILE=
endif

ifndef $(SUBSYSNAME)
    SUBSYSNAME=
endif

ifndef $(SAS6OPTIONS)
    SAS6OPTIONS=
endif

ifndef $(COMPILER_OPTS)
    COMPILER_OPTS=$(SAS6OPTIONS)
endif

ifndef $(SAS5OPTIONS)
    SAS5OPTIONS=
endif

ifndef $(COMPILER_OPTS_5)
    COMPILER_OPTS_5=$(SAS5OPTIONS)
endif

ifndef $(ASSEMBLER_DEFINES)
    ASSEMBLER_DEFINES=
endif

ifndef $(COMPILER_DEFINES)
    COMPILER_DEFINES=
endif

ifndef $(NONRCS_FILES)
    NONRCS_FILES=
endif

ifndef $(OTHERFILES_NORCS)
    OTHERFILES_NORCS=$(NONRCS_FILES)
endif

ifndef $(CLEANFILES)
    CLEANFILES=
endif

ifndef $(PRE_COMPILE)
    PRE_COMPILE=
endif


ifndef $(PRE_INTERNAL)
    PRE_INTERNAL=
endif

ifndef $(POST_INTERNAL)
    POST_INTERNAL=
endif

ifndef $(SUBSYSTEMS)
    SUBSYSTEMS=
endif

ifndef $(PROTOINC)
    PROTOINC=
endif

ifndef $(PROTOINC2)
    PROTOINC2=
endif

ifndef $(AFILES)
    AFILES=
endif

ifndef $(AFILES2)
    AFILES2=
endif

ifndef $(AFILES3)
    AFILES3=
endif

ifndef $(ASMOPTS)
    ASMOPTS=
endif

ifndef $(ASSEMBLER_OPTS)
    ASSEMBLER_OPTS=$(ASMOPTS)
endif

ifndef $(CFILES)
    CFILES=
endif

ifndef $(CPPFILES)
    CPPFILES=
endif

ifndef $(HFILES)
    HFILES=
endif

ifndef $(PUBLIC_HFILES)
    PUBLIC_HFILES=$(HFILES)
endif

ifndef $(INFILES)
    INFILES=
endif

ifndef $(PUBLIC_IFILES)
    PUBLIC_IFILES=$(INFILES)
endif

ifndef $(STARTUP_OBJECT)
    STARTUP_OBJECT=
endif

ifndef $(INCLUDEDIR)
    INCLUDEDIR=
endif

ifndef $(LIBFILES)
    LIBFILES=
endif

ifndef $(LINKERLIBS)
    LINKERLIBS=LIB:amiga.lib
endif

ifndef $(LINKER_LIBS)
    LINKER_LIBS=$(LINKERLIBS)
endif

ifndef $(LINKEROPTS)
    LINKEROPTS=
endif

ifndef $(LINKER_OPTS)
    LINKER_OPTS=$(LINKEROPTS)
endif

ifndef $(LINKER_OPTS_STRIP)
    LINKER_OPTS_STRIP=NODEBUG
endif

ifndef $(TEMPDIR)
    TEMPDIR=
endif

ifndef $(ASM_PREPROCESSOR)
    ASM_PREPROCESSOR=
endif

ifndef $(CVERSION)
    CVERSION=6
endif

if eq($(CVERSION),6)
    DEFAULTLINKER= Slink
else
    DEFAULTLINKER= Blink
endif

ifndef $(LINKER)
    LINKER=$(DEFAULTLINKER)
endif

if eq($(CVERSION),6)
    DEFAULTCOMPILER= SC
else
    DEFAULTCOMPILER= LC
endif

ifndef $(COMPILER)
    COMPILER=$(DEFAULTCOMPILER)
endif

ifndef $(ASSEMBLER)
    ASSEMBLER=HX68
endif

ifndef $(MODULETYPE)
    MODULETYPE=kickstart
endif

ifndef $(HOMEDIR)
    HOMEDIR=V$(VERSION):src/$(MODULETYPE)/$(SYSTEM)
endif

ifndef $(HOMESFD)
    HOMESFD=V$(VERSION):lib/sfd
endif

ifndef $(HOMEDOC)
    HOMEDOC=V$(VERSION):doc
endif

ifndef $(HOMEINCL)
    HOMEINCL=V$(VERSION):include/$(SYSTEM)
endif

if neq($(SUBSYSNAME),)
    SERVERDIR=$(HOMEDIR)/$(SUBSYSNAME)
    MAINFILE=/$(SUBSYSNAME).lib
    SUBDOCS=
else
    SERVERDIR=$(HOMEDIR)
    MAINFILE=$(SYSTEM).ld
    LIBFILES=${addsuffix .lib,$(SUBSYSTEMS)}
    SUBDOCS=${addsuffix /autodoc.doc,$(SUBSYSTEMS)}
endif

RCSDIR=$(SERVERDIR)/RCS/
RCSFILES=$(CFILES) $(CPPFILES) $(AFILES) $(AFILES2) $(AFILES3) $(PUBLIC_HFILES) $(PUBLIC_IFILES) $(OTHERFILES)


all: $(MAINFILE)

.PHONY: all

.include dependencies

if eq($(TEMPDIR),)
    TEMPDIR=T:
endif

if eq($(INCLUDEDIR),)
    INCLUDEDIR=include:
endif

if eq($(ASSEMBLER_OPTS),)
    ASSEMBLER_OPTS=OPTIMON 0xfdc00000 ADDSYM DEBUG
endif

if eq($(LINKER),)
    LINKER=blink
endif


OFILES=${addsuffix .o,${basename $(AFILES)}} ${addsuffix .o,${basename $(CFILES)}} ${addsuffix .o,${basename $(CPPFILES)}} ${addsuffix .o,${basename $(AFILES2)}} ${addsuffix .o,${basename $(AFILES3)}}

rev: 	RCS_link
	bumprev $(VERSION) $(SYSTEM)_rev

version: RCS_link
	bumprev $(VERSION) $(SYSTEM)_rev

revlabel: RCS_link
	@if eq($(SUBSYSNAME),)
		@type $(SYSTEM)_rev.rev to $(TEMPDIR)rev
        @endif
	@if neq($(RCSFILES),)
		@echo >T:r1 foreach i in $(RCSFILES)
		@echo >>T:r1 rcs >NIL: -nV$(VERSION)_`type $(TEMPDIR)rev`: " " noline
		@echo >>T:r1 $$i
		@echo >>T:r1 end
		@execute $(TEMPDIR)r1
		@delete $(TEMPDIR)r1 quiet
 	@endif
	@if neq($(SUBSYSTEMS),)
		@echo >T:r2 foreach j in $(SUBSYSTEMS)
		@echo >>T:r2 cd $$j
		@echo >>T:r2 bmake revlabel
		@echo >>T:r2 cd /
		@echo >>T:r2 end
		@execute $(TEMPDIR)r2
		@delete $(TEMPDIR)r2 quiet
 	@endif
	@if eq($(SUBSYSNAME),)
		@delete $(TEMPDIR)rev quiet
	@endif

RCS_link:
	@echo >RCS_link $(RCSDIR)

diff:
	@if neq($(CFILES),)
		rcsdiff $(CFILES)
	@endif
	@if neq($(CPPFILES),)
		rcsdiff $(CPPFILES)
	@endif
	@if neq($(AFILES),)
		rcsdiff $(AFILES)
	@endif
	@if neq($(AFILES2),)
		rcsdiff $(AFILES2)
	@endif
	@if neq($(AFILES3),)
		rcsdiff $(AFILES3)
	@endif
	@if neq($(PUBLIC_HFILES),)
		rcsdiff $(PUBLIC_HFILES)
	@endif
	@if neq($(PUBLIC_IFILES),)
		rcsdiff $(PUBLIC_IFILES)
	@endif
	@if neq($(SUBSYSTEMS),)
		@echo >T:d1 foreach i in $(SUBSYSTEMS)
		@echo >>T:d1 cd $$i
		@echo >>T:d1 bmake diff
		@echo >>T:d1 cd /
		@echo >>T:d1 end
		@execute $(TEMPDIR)d1
		@delete $(TEMPDIR)d1 quiet
 	@endif


checkout: RCS_link
	@if neq($(CFILES),)
		co $(CFILES)
	@endif
	@if neq($(CPPFILES),)
		co $(CPPFILES)
	@endif
	@if neq($(OTHERFILES_NORCS),)
		@echo >T:c1 foreach i in $(OTHERFILES_NORCS)
		@echo >>T:c1 copy  $(SERVERDIR)/ noline
		@echo >>T:c1 "$$i *"*""
		@echo >>T:c1 end
		@execute $(TEMPDIR)c1
		@delete $(TEMPDIR)c1 QUIET
	@endif
	@if neq($(AFILES),)
		co $(AFILES)
	@endif
	@if neq($(AFILES2),)
		co $(AFILES2)
	@endif
	@if neq($(AFILES3),)
		co $(AFILES3)
	@endif
	@if neq($(PUBLIC_HFILES),)
		co $(PUBLIC_HFILES)
	@endif
	@if neq($(PUBLIC_IFILES),)
		co $(PUBLIC_IFILES)
	@endif
	@if neq($(OTHERFILES),)
		co $(OTHERFILES)
	@endif
	@if neq($(SUBSYSTEMS),)
		@echo >T:x1 foreach i in $(SUBSYSTEMS)
		@echo >>T:x1  if not exists $$i
		@echo >>T:x1   makedir $$i
		@echo >>T:x1 endif
		@echo >>T:x1 cd $$i
		@echo >>T:x1 echo >RCS_link $(HOMEDIR)/ noline
		@echo >>T:x1 $$i/RCS/
		@echo >>T:x1  if not exists dependencies
		@echo >>T:x1   echo >dependencies "**n"
		@echo >>T:x1 endif
		@echo >>T:x1 co makefile
		@echo >>T:x1 bmake checkout
		@echo >>T:x1 cd /
		@echo >>T:x1 end
		@execute $(TEMPDIR)x1
 	@endif

checkoutlock: RCS_link
	@if neq($(OTHERFILES_NORCS),)
		@echo >T:c1 foreach j in $(OTHERFILES_NORCS)
		@echo >>T:c1 copy $(SERVERDIR)/ noline
		@echo >>T:c1 "$$j *"*""
		@echo >>T:c1 end
		@execute $(TEMPDIR)c1
		@delete $(TEMPDIR)c1 QUIET
	@endif
	@if neq($(CFILES),)
		co -l $(CFILES)
	@endif
	@if neq($(CPPFILES),)
		co -l $(CPPFILES)
	@endif
	@if neq($(AFILES),)
		co -l $(AFILES)
	@endif
	@if neq($(AFILES2),)
		co -l $(AFILES2)
	@endif
	@if neq($(AFILES3),)
		co -l $(AFILES3)
	@endif
	@if neq($(PUBLIC_HFILES),)
		co -l $(PUBLIC_HFILES)
	@endif
	@if neq($(PUBLIC_IFILES),)
		co -l $(PUBLIC_IFILES)
	@endif
	@if neq($(OTHERFILES),)
		co -l $(OTHERFILES)
	@endif
	@if neq($(SUBSYSTEMS),)
		@echo >T:x1 foreach i in $(SUBSYSTEMS)
		@echo >>T:x1  if not exists $$i
		@echo >>T:x1   makedir $$i
		@echo >>T:x1 endif
		@echo >>T:x1 cd $$i
		@echo >>T:x1 echo >RCS_link $(HOMEDIR)/ noline
		@echo >>T:x1 $$i/RCS/
		@echo >>T:x1  if not exists dependencies
		@echo >>T:x1   echo >dependencies "*"*""
		@echo >>T:x1 endif
		@echo >>T:x1 co makefile
		@echo >>T:x1 bmake checkoutlock
		@echo >>T:x1 cd /
		@echo >>T:x1 end
		@execute $(TEMPDIR)x1
 	@endif

checkinlocked:
	@if neq($(SUBSYSTEMS),)
		@echo >T:x1 foreach i in $(SUBSYSTEMS)
		@echo >>T:x1 cd $$i
		@echo >>T:x1 echo >RCS_link $(HOMEDIR)/ noline
		@echo >>T:x1 $$i/RCS/
		@echo >>T:x1 bmake checkinlocked
		@echo >>T:x1 cd /
		@echo >>T:x1 end
		@execute $(TEMPDIR)x1
 	@endif
	@if neq($(RCSFILES),)
		@echo >T:x2 foreach j in $(RCSFILES)
		@echo >>T:x2 echo -
		@echo >>T:x2 echo Checkin $$j
		@echo >>T:x2 ci -u -q $$j
		@echo >>T:x2 rcs >NIL: -u $$j
		@echo >>T:x2 end
		@execute $(TEMPDIR)x2
	@endif

%.asm: .INVISIBLE
	@if nexists($@)
		co -u $@
	@endif

%.c: .INVISIBLE
	@if nexists($@)
		co -u $@
	@endif

%.cpp: .INVISIBLE
	@if nexists($@)
		co -u $@
	@endif

%.o:%.asm
	@if neq($(ASM_PREPROCESSOR),)
		@$(ASM_PREPROCESSOR) $*.asm >T:tmp1.asm
		$(ASSEMBLER) from $(TEMPDIR)tmp1.asm TO $*.o INCDIR $(INCLUDEDIR) $(ASSEMBLER_OPTS) QUIET
	@else
		$(ASSEMBLER) from $*.asm to $*.o INCDIR $(INCLUDEDIR) $(ASSEMBLER_OPTS) QUIET
	@endif

%.o:%.c
	@if neq($(ONEPROTOPERFILE),)
		$(COMPILER) NOGPDATA GENPROTO NOGENPROTOSTATIC DEFINE=MAKE_PROTOS INCLUDEDIRECTORY=$(INCLUDEDIR) $*.c
	@endif
	@if neq($(CVERSION),6)
		$(COMPILER) $(COMPILER_OPTS_5) ${addprefix -D,$(COMPILER_DEFINES)} -i$(INCLUDEDIR) -o$*.o $*.c
	@else
		$(COMPILER) $(COMPILER_OPTS) ${addprefix DEFINE=,$(COMPILER_DEFINES)} INCLUDEDIR=$(INCLUDEDIR) OBJECTNAME=$*.o $*.c
	@endif

%.o:%.cpp
	@if neq($(ONEPROTOPERFILE),)
		$(COMPILER) NOGPDATA GENPROTO NOGENPROTOSTATIC DEFINE=MAKE_PROTOS INCLUDEDIRECTORY=$(INCLUDEDIR) $*.cpp
	@endif
	@if neq($(CVERSION),6)
		$(COMPILER) $(COMPILER_OPTS_5) ${addprefix -D,$(COMPILER_DEFINES)} -i$(INCLUDEDIR) -o$*.o $*.cpp
	@else
		$(COMPILER) $(COMPILER_OPTS) ${addprefix DEFINE=,$(COMPILER_DEFINES)} INCLUDEDIR=$(INCLUDEDIR) OBJECTNAME=$*.o $*.cpp
	@endif

%.lib:
	@echo >T:l1 cd $*
	@echo >>T:l1 bmake
	@echo >>T:l1 cd /
	@execute $(TEMPDIR)l1

$(MAINFILE): $(PRE_COMPILE) $(OFILES) $(LIBFILES) dependencies makefile
	@if neq($(SUBSYSNAME),)
	   @join #?.o as $(MAINFILE)
	@else
	   $(LINKER) from $(STARTUP_OBJECT) $(OFILES) to $(MAINFILE) lib $(LIBFILES) $(LINKER_LIBS) $(LINKER_OPTS)
	   $(LINKER) from $(MAINFILE) to $(MAINFILE).strip $(LINKER_OPTS_STRIP)
	@endif

clean:
	@echo >bmake_d_temp.o "hello"
	@delete $(MAINFILE) $(MAINFILE).strip #?.o #?.map #?.xref $(CLEANFILES) quiet
	@if neq($(SUBSYSTEMS),)
		@echo >T:x1 foreach i in $(SUBSYSTEMS)
		@echo >>T:x1 cd $$i
		@echo >>T:x1 bmake clean
		@echo >>T:x1 cd /
		@echo >>T:x1 end
		@execute $(TEMPDIR)x1
 	@endif

doc:
	@if neq($(SUBSYSTEMS),)
		@echo >T:x1 foreach i in $(SUBSYSTEMS)
		@echo >>T:x1 cd $$i
		@echo >>T:x1 bmake doc
		@echo >>T:x1 cd /
		@echo >>T:x1 end
		@execute $(TEMPDIR)x1
 	@endif
	@if neq($(SUBSYSNAME),)
		@join #?.asm #?.c #?.cpp as autodoc.doc
	@else
		@join #?.asm #?.c #?.cpp $(SUBDOCS) as $(TEMPDIR)$(SYSTEM).doc
		@autodoc >$(SYSTEM).doc $(TEMPDIR)$(SYSTEM).doc
		@copy $(SYSTEM).doc $(HOMEDOC) nopro
		@delete $(TEMPDIR)$(SYSTEM).doc QUIET
	@endif

headers:
	@if neq($(PUBLIC_IFILES),)
		@copy $(PUBLIC_IFILES) $(HOMEINCL) nopro
	@endif
	@if neq($(PUBLIC_HFILES),)
		@copy $(PUBLIC_HFILES) $(HOMEINCL) nopro
	@endif

protos:
	@echo >$(SUBSYSNAME).protos "// automatically generated prototypes"
	@echo >T:temp.perl "s/ /\n/g; print;"
	@echo >T:x1 ""
	@if neq($(CFILES),)
		@echo >T:flist1 "${strip $(CFILES)}"
		@perl -n $(TEMPDIR)temp.perl $(TEMPDIR)flist1 >T:flist2
		@delete $(TEMPDIR)flist1 quiet
		@echo >>T:x1 $(COMPILER) NOGPDATA GENPROTO NOGENPROTOSTATIC PARAMETERS=STACK DEFINE=MAKE_PROTOS INCLUDEDIRECTORY=$(INCLUDEDIR) with $(TEMPDIR)flist2
		@echo >>T:x1 join #?_protos.h as $(SUBSYSNAME).protos
	@endif
	@if neq($(CPPFILES),)
		@echo >T:flist1 "${strip $(CPPFILES)}"
		@perl -n $(TEMPDIR)temp.perl $(TEMPDIR)flist1 >T:flist2
		@delete $(TEMPDIR)flist1 quiet
		@echo >>T:x1 $(COMPILER) NOGPDATA GENPROTO NOGENPROTOSTATIC PARAMETERS=STACK DEFINE=MAKE_PROTOS INCLUDEDIRECTORY=$(INCLUDEDIR) with $(TEMPDIR)flist2
		@echo >>T:x1 join #?_protos.h as $(SUBSYSNAME).protos
	@endif
	@if neq($(AFILES),)
		@echo >>T:x1 foreach i in ${strip $(AFILES)}
		@echo >>T:x1  search $$i >>$(SUBSYSNAME).protos __asm nonum
		@echo >>T:x1 end
	@endif
	@if neq($(AFILES2),)
		@echo >>T:x1 foreach i in ${strip $(AFILES2)}
		@echo >>T:x1  search $$i >>$(SUBSYSNAME).protos __asm nonum
		@echo >>T:x1 end
	@endif
	@if neq($(AFILES3),)
		@echo >>T:x1 foreach i in ${strip $(AFILES3)}
		@echo >>T:x1  search $$i >>$(SUBSYSNAME).protos __asm nonum
		@echo >>T:x1 end
	@endif
	@protect $(TEMPDIR)x1 +s
	@$(TEMPDIR)x1
	@splat -o "^; " "" $(SUBSYSNAME).protos
	@splat -o "^;" "" $(SUBSYSNAME).protos
	@splat -o "//__asm" "" $(SUBSYSNAME).protos
	@if neq($(PROTOINC),)
		echo >>$(SUBSYSNAME).protos "$(PROTOINC)"
	@endif
	@if neq($(PROTOINC2),)
		echo >>$(SUBSYSNAME).protos "$(PROTOINC2)"
	@endif
	@if neq($(SUBSYSTEMS),)
		@echo >T:x2 foreach j in $(SUBSYSTEMS)
		@echo >>T:x2  if not exists $$j/$$j.protos
		@echo >>T:x2   echo >$$j/$$j.protos "// this is a comment"
		@echo >>T:x2 endif
		@echo >>T:x2 end
		@echo >>T:x2 foreach j in $(SUBSYSTEMS)
		@echo >>T:x2 cd $$j
		@echo >>T:x2 "bmake protos"
		@echo >>T:x2 cd /
		@echo >>T:x2 end
		@execute $(TEMPDIR)x2
 	@endif

$(SUBSYSNAME).protos :

.phony: $(SUBSYSNAME).protos


depend:
 	@echo $(AFILES)
	 @echo >maked0 ""
	 @if neq($(AFILES),)
	  @echo >>maked0 $(AFILES)
	 @endif
	 @if neq($(AFILES2),)
	  @echo >>maked0 $(AFILES2)
	 @endif
	 @if neq($(AFILES3),)
	  @echo >>maked0 $(AFILES3)
	 @endif
	 @if neq($(CFILES),)
	  @echo >>maked0 $(CFILES)
	 @endif
	 @if neq($(CPPFILES),)
	  @echo >>maked0 $(CPPFILES)
	 @endif
	 @splat -o "[\t ]+" "\n" maked0
	 @splat -o "^..+" "dep1 &" maked0
	 @echo >T:maked1 "alias dep1 depend [] makedx"
	 @join $(TEMPDIR)maked1 maked0 as maked1
	 @splat -o "\x0d" "" maked1
	 @execute maked1
	 @splat -o "\.o" ".o" makedx
	 @copy makedx dependencies
	 @echo >>dependencies ""
	 @delete maked1 maked0 makedx QUIET
	@if neq($(SUBSYSTEMS),)
		@echo >T:x2 foreach j in $(SUBSYSTEMS)
		@echo >>T:x2 cd $$j
		@echo >>T:x2 bmake depend
		@echo >>T:x2 cd /
		@echo >>T:x2 end
		@execute $(TEMPDIR)x2
 	@endif

toremote:
	@if neq($(CFILES),)
		@copy $(CFILES) $(SERVERDIR) nopro quiet
	@endif
	@if neq($(CPPFILES),)
		@copy $(CPPFILES) $(SERVERDIR) nopro quiet
	@endif
	@if neq($(OTHERFILES_NORCS),)
		@copy $(OTHERFILES_NORCS) $(SERVERDIR) nopro quiet
	@endif
	@if neq($(AFILES),)
		@copy $(AFILES) $(SERVERDIR) nopro quiet
	@endif
	@if neq($(AFILES2),)
		@copy $(AFILES2) $(SERVERDIR) nopro quiet
	@endif
	@if neq($(AFILES3),)
		@copy $(AFILES3) $(SERVERDIR) nopro quiet
	@endif
	@if neq($(PUBLIC_HFILES),)
		@copy $(PUBLIC_HFILES) $(SERVERDIR) nopro quiet
	@endif
	@if neq($(PUBLIC_IFILES),)
		@copy $(PUBLIC_IFILES) $(SERVERDIR) nopro quiet
	@endif
	@if neq($(OTHERFILES),)
		@copy $(OTHERFILES) $(SERVERDIR) nopro quiet
	@endif
	@copy $(MAINFILE) $(MAINFILE).strip $(SERVERDIR) nopro quiet

internal: $(PRE_INTERNAL) $(MAINFILE) toremote $(POST_INTERNAL)
	@if neq($(SUBSYSTEMS),)
		@echo >T:x2 foreach j in $(SUBSYSTEMS)
		@echo >>T:x2 cd $$j
		@echo >>T:x2 bmake toremote
		@echo >>T:x2 cd /
		@echo >>T:x2 end
		@execute $(TEMPDIR)x2
	@endif
	@if exists($(SYSTEM)_lib.sfd)
		@copy $(SYSTEM)_lib.sfd $(HOMESFD) nopro quiet
	@endif

release: doc internal revlabel headers

releaseunlock: checkinlocked doc internal revlabel headers

killlocal:
	@if neq($(SUBSYSTEMS),)
		@echo >T:x2 foreach j in $(SUBSYSTEMS)
		@echo >>T:x2 cd $$j
		@echo >>T:x2 bmake killlocal
		@echo >>T:x2 cd /
		@echo >>T:x2 end
		@execute $(TEMPDIR)x2
	@endif
	@delete $(OFILES) $(PUBLIC_HFILES) $(PUBLIC_IFILES) quiet
	@delete $(CPPFILES) $(AFILES) $(AFILES2) $(AFILES3) quiet
	@delete $(CFILES) $(OTHERFILES) $(OTHERFILES_NORCS) $(CLEANFILES) quiet

Who :
	@echo >T:x1 ""
	@if neq($(CFILES),)
		@echo >>T:x1 foreach i in ${strip $(CFILES)}
		@echo >>T:x1 "rlog -h -L $$i | *"" noline
		@echo >>T:x1 "'ExecIO STEM FileLines.'; USER='';" noline
		@echo >>T:x1 "DO Line=1 to FileLines.0;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'Working file:')>0 THEN DO; PARSE VAR FileLines.Line 'Working file:'FileName; FileName=STRIP(FileName); END;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'locks:')>0 THEN DO; PARSE VAR FileLines.Line 'locks:' User ':'; User=STRIP(User); END; END ; "noline
		@echo >>T:x1 "IF LENGTH(USER)>0 THEN DO; fl='$(TEMPDIR)Locks.'||User; IF ~exists(fl) THEN 'echo > 'fl' *"*"**NFiles owned by 'User'*"*"'" noline
		@echo >>T:x1 "; 'echo >>'fl '" noline
		@echo >>T:x1 "*"*"    'FileName'*"*"'" noline
		@echo >>T:x1 "; END"
		@echo >>T:x1 end
	@endif
	@if neq($(CPPFILES),)
		@echo >>T:x1 foreach i in ${strip $(CPPFILES)}
		@echo >>T:x1 "rlog -h -L $$i | *"" noline
		@echo >>T:x1 "'ExecIO STEM FileLines.'; USER='';" noline
		@echo >>T:x1 "DO Line=1 to FileLines.0;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'Working file:')>0 THEN DO; PARSE VAR FileLines.Line 'Working file:'FileName; FileName=STRIP(FileName); END;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'locks:')>0 THEN DO; PARSE VAR FileLines.Line 'locks:' User ':'; User=STRIP(User); END; END ; "noline
		@echo >>T:x1 "IF LENGTH(USER)>0 THEN DO; fl='$(TEMPDIR)Locks.'||User; IF ~exists(fl) THEN 'echo > 'fl' *"*"**NFiles owned by 'User'*"*"'" noline
		@echo >>T:x1 "; 'echo >>'fl '" noline
		@echo >>T:x1 "*"*"    'FileName'*"*"'" noline
		@echo >>T:x1 "; END"
		@echo >>T:x1 end
	@endif
	@if neq($(AFILES),)
		@echo >>T:x1 foreach i in ${strip $(AFILES)}
		@echo >>T:x1 "rlog -h -L $$i | *"" noline
		@echo >>T:x1 "'ExecIO STEM FileLines.'; USER='';" noline
		@echo >>T:x1 "DO Line=1 to FileLines.0;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'Working file:')>0 THEN DO; PARSE VAR FileLines.Line 'Working file:'FileName; FileName=STRIP(FileName); END;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'locks:')>0 THEN DO; PARSE VAR FileLines.Line 'locks:' User ':'; User=STRIP(User); END; END ; "noline
		@echo >>T:x1 "IF LENGTH(USER)>0 THEN DO; fl='$(TEMPDIR)Locks.'||User; IF ~exists(fl) THEN 'echo > 'fl' *"*"**NFiles owned by 'User'*"*"'" noline
		@echo >>T:x1 "; 'echo >>'fl '" noline
		@echo >>T:x1 "*"*"    'FileName'*"*"'" noline
		@echo >>T:x1 "; END"
		@echo >>T:x1 end
	@endif
	@if neq($(AFILES2),)
		@echo >>T:x1 foreach i in ${strip $(AFILES2)}
		@echo >>T:x1 "rlog -h -L $$i | *"" noline
		@echo >>T:x1 "'ExecIO STEM FileLines.'; USER='';" noline
		@echo >>T:x1 "DO Line=1 to FileLines.0;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'Working file:')>0 THEN DO; PARSE VAR FileLines.Line 'Working file:'FileName; FileName=STRIP(FileName); END;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'locks:')>0 THEN DO; PARSE VAR FileLines.Line 'locks:' User ':'; User=STRIP(User); END; END ; "noline
		@echo >>T:x1 "IF LENGTH(USER)>0 THEN DO; fl='$(TEMPDIR)Locks.'||User; IF ~exists(fl) THEN 'echo > 'fl' *"*"**NFiles owned by 'User'*"*"'" noline
		@echo >>T:x1 "; 'echo >>'fl '" noline
		@echo >>T:x1 "*"*"    'FileName'*"*"'" noline
		@echo >>T:x1 "; END"
		@echo >>T:x1 end
	@endif
	@if neq($(AFILES3),)
		@echo >>T:x1 foreach i in ${strip $(AFILES3)}
		@echo >>T:x1 "rlog -h -L $$i | *"" noline
		@echo >>T:x1 "'ExecIO STEM FileLines.'; USER='';" noline
		@echo >>T:x1 "DO Line=1 to FileLines.0;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'Working file:')>0 THEN DO; PARSE VAR FileLines.Line 'Working file:'FileName; FileName=STRIP(FileName); END;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'locks:')>0 THEN DO; PARSE VAR FileLines.Line 'locks:' User ':'; User=STRIP(User); END; END ; "noline
		@echo >>T:x1 "IF LENGTH(USER)>0 THEN DO; fl='$(TEMPDIR)Locks.'||User; IF ~exists(fl) THEN 'echo > 'fl' *"*"**NFiles owned by 'User'*"*"'" noline
		@echo >>T:x1 "; 'echo >>'fl '" noline
		@echo >>T:x1 "*"*"    'FileName'*"*"'" noline
		@echo >>T:x1 "; END"
		@echo >>T:x1 end
	@endif
	@if neq($(PUBLIC_HFILES),)
		@echo >>T:x1 foreach i in ${strip $(PUBLIC_HFILES)}
		@echo >>T:x1 "rlog -h -L $$i | *"" noline
		@echo >>T:x1 "'ExecIO STEM FileLines.'; USER='';" noline
		@echo >>T:x1 "DO Line=1 to FileLines.0;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'Working file:')>0 THEN DO; PARSE VAR FileLines.Line 'Working file:'FileName; FileName=STRIP(FileName); END;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'locks:')>0 THEN DO; PARSE VAR FileLines.Line 'locks:' User ':'; User=STRIP(User); END; END ; "noline
		@echo >>T:x1 "IF LENGTH(USER)>0 THEN DO; fl='$(TEMPDIR)Locks.'||User; IF ~exists(fl) THEN 'echo > 'fl' *"*"**NFiles owned by 'User'*"*"'" noline
		@echo >>T:x1 "; 'echo >>'fl '" noline
		@echo >>T:x1 "*"*"    'FileName'*"*"'" noline
		@echo >>T:x1 "; END"
		@echo >>T:x1 end
	@endif
	@if neq($(PUBLIC_IFILES),)
		@echo >>T:x1 foreach i in ${strip $(PUBLIC_IFILES)}
		@echo >>T:x1 "rlog -h -L $$i | *"" noline
		@echo >>T:x1 "'ExecIO STEM FileLines.'; USER='';" noline
		@echo >>T:x1 "DO Line=1 to FileLines.0;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'Working file:')>0 THEN DO; PARSE VAR FileLines.Line 'Working file:'FileName; FileName=STRIP(FileName); END;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'locks:')>0 THEN DO; PARSE VAR FileLines.Line 'locks:' User ':'; User=STRIP(User); END; END ; "noline
		@echo >>T:x1 "IF LENGTH(USER)>0 THEN DO; fl='$(TEMPDIR)Locks.'||User; IF ~exists(fl) THEN 'echo > 'fl' *"*"**NFiles owned by 'User'*"*"'" noline
		@echo >>T:x1 "; 'echo >>'fl '" noline
		@echo >>T:x1 "*"*"    'FileName'*"*"'" noline
		@echo >>T:x1 "; END"
		@echo >>T:x1 end
	@endif
	@if neq($(OTHERFILES),)
		@echo >>T:x1 foreach i in ${strip $(OTHERFILES)}
		@echo >>T:x1 "rlog -h -L $$i | *"" noline
		@echo >>T:x1 "'ExecIO STEM FileLines.'; USER='';" noline
		@echo >>T:x1 "DO Line=1 to FileLines.0;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'Working file:')>0 THEN DO; PARSE VAR FileLines.Line 'Working file:'FileName; FileName=STRIP(FileName); END;" noline
		@echo >>T:x1 "IF INDEX(FileLines.Line,'locks:')>0 THEN DO; PARSE VAR FileLines.Line 'locks:' User ':'; User=STRIP(User); END; END ; "noline
		@echo >>T:x1 "IF LENGTH(USER)>0 THEN DO; fl='$(TEMPDIR)Locks.'||User; IF ~exists(fl) THEN 'echo > 'fl' *"*"**NFiles owned by 'User'*"*"'" noline
		@echo >>T:x1 "; 'echo >>'fl '" noline
		@echo >>T:x1 "*"*"    'FileName'*"*"'" noline
		@echo >>T:x1 "; END"
		@echo >>T:x1 end
	@endif
	@execute $(TEMPDIR)x1
	@if neq($(SUBSYSTEMS),)
		@echo >T:x2 foreach j in $(SUBSYSTEMS)
		@echo >>T:x2 cd $$j
		@echo >>T:x2 "bmake Who"
		@echo >>T:x2 cd /
		@echo >>T:x2 end
		@execute $(TEMPDIR)x2
		@echo >>T:locks. That's all
		@list lformat "type $(TEMPDIR)%s" $(TEMPDIR)locks.#? > $(TEMPDIR)x1
		@execute $(TEMPDIR)x1
		@delete $(TEMPDIR)locks.#? QUIET
 	@endif

.DEFAULT:
	@echo
