(DEFMACRO DEFINE-SYSTEM (NAME DIRECTORY &BODY MODULES)
  ;; TRANSLATE INTO SIMPLE LINEAR ORDER, LOAD, COMPILE.
  ;; TAKE CARE OF DIFFERENT OBJECT DIRECTORIES.
  `(DEFSYSTEM ,NAME
     (:PATHNAME-DEFAULT ,(STRING-APPEND "AI-SYS:" DIRECTORY ";"))
     ,@(MAPCAR #'(LAMBDA (M)
		   `(:MODULE ,M ((,(STRING M)
				  ,(STRING-APPEND #-TI "AI-SYS:BIN;" #+TI "AI-SYS:BIN."
						  #+(AND LMI REL2) "LMI-REL-2;"
						  #+(AND LMI REL3) "LMI-REL-3;"
						  #+TI             "TI-REL-2;"
						  M)))))
	       MODULES)
     ,@(MAPCAR #'(LAMBDA (M)
		   (LET ((NEED (BUTLAST MODULES (- (LENGTH MODULES)
						   (FIND-POSITION-IN-LIST M MODULES)))))
		     (IF (NOT NEED)
			 `(:COMPILE-LOAD ,M)
		       `(:COMPILE-LOAD ,M (:FASLOAD ,@NEED) (:FASLOAD ,@NEED)))))
	       MODULES)))