;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 126.38
;;; Reason:
;;;  New MAKE-SYSTEM changes to handle :FOR-FALCON, saving
;;;  and loading environment files, etc.
;;; Written 11-Aug-88 01:35:36 by RWK at site Gigamos Cambridge
;;; while running on Harpo from band 3
;;; with Experimental System 126.37, ZWEI 125.15, ZMail 73.2, Local-File 75.2, File-Server 24.1, Unix-Interface 13.0, Tape 24.2, Lambda-Diag 17.0, microcode 1762, SDU Boot Tape 3.12, SDU ROM 102, kold 4aug88.



; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:35:37
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFUN PATHNAME-DEFAULT-BINARY-FILE-TYPE (PATHNAME)
  "Given a pathname, return the default binary file type (possibly canonical) to use with it.
This is computed from the SYSTEM which the pathname belongs to."
  (OR (SEND (SEND PATHNAME :GENERIC-PATHNAME) :GET :DEFAULT-BINARY-FILE-TYPE)
      (first (get compiler:*target-computer* 'si:make-system))
      (error "Unknown target computer ~S." compiler:*target-computer*)))

))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:36:06
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(defprop compiler:lambda-interface (:qfasl nil compiler:compile-file) si:make-system)
(defprop compiler:k
	 (:fbin #+(target lambda) :fdef		;When this code runs on the Lambda, in cross-compile mode.
		#-(target lambda) nil		;When this code runs on the Falcon, in native mode.
		compiler:compile-file-for-falcon)
  si:make-system)
))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:36:59
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(defsubst system-default-binary-file-type (system)
  (getf (system-plist system) 'default-binary-file-type (first (get compiler:*target-computer* 'si:make-system))))

(defun make-system-binary-pathname (system pathname)
  (send pathname :new-type (system-default-binary-file-type system)))
))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:37:19
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFMACRO (:DEFAULT-BINARY-FILE-TYPE DEFSYSTEM-MACRO) (TYPE)
  (case type
    ((:qfasl)
     (setq type (first (get compiler:*target-computer* 'si:make-system)))))
  (SETF (system-default-binary-file-type *SYSTEM-BEING-DEFINED*) TYPE)
  (SETQ *SYSTEM-DEFAULT-BINARY-FILE-TYPE* TYPE)
  NIL)

))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:38:43
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFUN MAKE-SYSTEM (SYSTEM &REST KEYWORDS &AUX *SOMETHING-LOADED*)
  "Operate on the files of the system SYSTEM.
Most commonly used to compile or load those files which need it.
Keywords are not followed by values.
Commonly used keywords include:
 :COMPILE - recompile source files.
 :FOR-FALCON - compile for the Falcon
 :NOLOAD - don't load compiled files.
 :RELOAD - load even files already loaded.
 :RECOMPILE - recompile files already compiled.
 :SELECTIVE - ask user about each file individually.
 :NOCONFIRM - do not ask for confirmation at all.
 :NO-INCREMENT-PATCH - don't increment the patch version number of a patchable system.
 :INCREMENT-PATCH - do increment the patch version number.
 :NO-LOAD-PATCHES - do not load patches for patchable system being loaded.
 :NO-RELOAD-SYSTEM-DECLARATION - don't reload the file that contains the DEFSYSTEM.
 :PRINT-ONLY - don't load or compile anything, just say what needs to be done.
 :DESCRIBE - say when files were compiled or loaded, etc.
 :SILENT - don't print lists of files on the terminal at all.
 :BATCH - write a file containing any warnings produced by compilation.
      Just load the file, as lisp code, to reload the warnings.
 :DO-NOT-DO-COMPONENTS - omit subsystems."
  (catch-error-restart (eh:debugger-condition
			 "Give up on making the ~A system."
			 (let ((sys (find-system-named system t)))
			   (if sys (system-name sys) system)))
    ;; Force the system-defining file to get loaded
    ;; before we bind the variables or anything like that.
    (FIND-SYSTEM-NAMED SYSTEM)
    ;; First check whether there is a new system declaration that can be loaded
    (MAYBE-RELOAD-SYSTEM-DECLARATION SYSTEM KEYWORDS)
    (PROGW *MAKE-SYSTEM-SPECIAL-VARIABLES*
      (UNWIND-PROTECT
	  (PROGN
	    (SETQ *SYSTEM-BEING-MADE* (FIND-SYSTEM-NAMED SYSTEM))
	    (SETQ *SYSTEM-DEFAULT-BINARY-FILE-TYPE*
		  (system-default-binary-file-type *SYSTEM-BEING-MADE*))
	    (SETQ *TOP-LEVEL-TRANSFORMATIONS*
		  `(,@*LOAD-TYPE-TRANSFORMATIONS* DO-COMPONENTS-INTERNAL))
	    ;; Do all the keywords
	    (DOLIST (KEYWORD KEYWORDS)
	      (LET ((FUNCTION (GET KEYWORD 'MAKE-SYSTEM-KEYWORD)))
		(OR FUNCTION
		    (FERROR NIL "~S is not a recognized option" KEYWORD))
		(FUNCALL FUNCTION)))
	    ;; Make :NO-INCREMENT-PATCH override :COMPILE even if :COMPILE comes later.
	    (WHEN *NO-INCREMENT-PATCH*
	      (SETQ *TOP-LEVEL-TRANSFORMATIONS*
		    (DEL-IF #'(LAMBDA (X)
				(MEMQ X '(INCREMENT-COMPILED-VERSION)))
			    *TOP-LEVEL-TRANSFORMATIONS*)))
	    ;; Process forms with compiler context
	    (DOLIST (FORM *MAKE-SYSTEM-FORMS-TO-BE-EVALED-BEFORE*)
	      (EVAL FORM))
	    ;; Do the work of the transformations
	    (PERFORM-TRANSFORMATIONS (COLLECT-TOP-LEVEL-TRANSFORMATIONS
				       *SYSTEM-BEING-MADE*))
	    ;; Finally process any forms queued by the keywords with compiler context
	    (DOLIST (FORM *MAKE-SYSTEM-FORMS-TO-BE-EVALED-AFTER*)
	      (EVAL FORM)))
	;; Now forms outside of compiler context
	;; These are done even if there was an error.
	(DOLIST (FORM *MAKE-SYSTEM-FORMS-TO-BE-EVALED-FINALLY*)
	  (EVAL FORM))))
    *SOMETHING-LOADED*))

))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:39:02
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFUN SYSTEM-SOURCE-FILES-1 (SYSTEM TYPES INTERMEDIATE-TOO INCLUDE-SUBSYSTEMS
			      &AUX *SYSTEM-DEFAULT-BINARY-FILE-TYPE*)
  (SETQ SYSTEM (FIND-SYSTEM-NAMED SYSTEM))
  (SETQ *SYSTEM-DEFAULT-BINARY-FILE-TYPE* (system-default-binary-file-type system))
  (NCONC (LET ((SYMBOL (SYSTEM-SYMBOLIC-NAME SYSTEM)))
	   (AND SYMBOL
		(LET ((FILE (GET-SOURCE-FILE-NAME SYMBOL 'DEFSYSTEM)))
		  (AND FILE
		       (LET ((DEFINING-SYSTEM (SEND FILE :GET 'MAYBE-RELOAD-SYSTEM)))
			 (AND DEFINING-SYSTEM
			      (SYSTEM-SOURCE-FILES-1 DEFINING-SYSTEM TYPES INTERMEDIATE-TOO
						     INCLUDE-SUBSYSTEMS)))
		       ))))
	 ;; First get inputs that come from files in modules
	 ;; We get them from transformations, but the order we consider
	 ;; the transformations is the order the modules were specified.
	 (LET ((*FORCE-PACKAGE* (SYSTEM-PACKAGE-DEFAULT SYSTEM)))
	   (LOOP FOR MODULE IN (REVERSE (SYSTEM-MODULES SYSTEM))
		 NCONC (LOOP FOR TRANSFORMATION IN (SYSTEM-TRANSFORMATIONS SYSTEM)
			     WHEN (EQ (TRANSFORMATION-INPUT TRANSFORMATION) MODULE)
			     NCONC (TRANSFORMATION-SOURCE-FILES TRANSFORMATION TYPES NIL))))
	 ;; Now get intermediate source files if wanted.
	 ;; Those are files that are "sources" for some transformations
	 ;; but are produced by others rather than specified in modules.
	 (AND INTERMEDIATE-TOO
	      (LET ((*FORCE-PACKAGE* (SYSTEM-PACKAGE-DEFAULT SYSTEM)))
		(LOOP FOR TRANSFORMATION IN (SYSTEM-TRANSFORMATIONS SYSTEM)
		      WHEN (NOT (TYPEP (TRANSFORMATION-INPUT TRANSFORMATION) 'MODULE))
		      NCONC (TRANSFORMATION-SOURCE-FILES TRANSFORMATION TYPES T))))
	 (AND INCLUDE-SUBSYSTEMS
	      (LOOP FOR SUBSYS IN (SYSTEM-COMPONENT-SYSTEMS SYSTEM)
		    NCONC (SYSTEM-SOURCE-FILES-1 SUBSYS TYPES INTERMEDIATE-TOO
						 INCLUDE-SUBSYSTEMS)))))

))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:40:06
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFINE-SIMPLE-TRANSFORMATION :FASLOAD FASLOAD-1 FILE-NEWER-THAN-INSTALLED-P
			      (*system-default-binary-file-type* *SYSTEM-load-BINARY-FILE-TYPE*) NIL "load" NIL)

(DEFINE-SIMPLE-TRANSFORMATION :COMPILE QC-FILE-1 FILE-NEWER-THAN-FILE-P
			      (:LISP) (*SYSTEM-DEFAULT-BINARY-FILE-TYPE* *system-load-binary-file-type*))
))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:40:36
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFUN FILE-NEWER-THAN-FILE-P (FILE-1 FILE-2 &optional defs)
  ;; We could look at both of them, but that would slow things down a lot.
  (let ((file-2 (or defs file-2)))
    (IF (PROBEF FILE-2)
	(> (SYSTEM-GET-CREATION-DATE FILE-1)
	   (SYSTEM-GET-CREATION-DATE FILE-2 T))
      T)))

))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:41:08
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFUN FILE-NEWER-THAN-INSTALLED-P (FILE &optional defs-file &AUX
				    (LOADED-ID (GET-FILE-LOADED-ID FILE *FORCE-PACKAGE*)))
  (AND (NOT *JUST-ACCUMULATING-FILES*)
       MAKSYS-BREAKPOINT-FLAG
       LOADED-ID
       (NOT (EQUAL LOADED-ID (SYSTEM-GET-FILE-INFO (or defs-file FILE))))
       (ERROR "TESTING MAKSYS"))
  (IF LOADED-ID
      (NOT (EQUAL LOADED-ID (SYSTEM-GET-FILE-INFO (or defs-file FILE))))
    T))

))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:41:38
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFUN FASLOAD-1 (INFILE &optional defs-file)
  (SETQ *SOMETHING-LOADED* T)
  (FASLOAD (or defs-file INFILE) *FORCE-PACKAGE* T))

))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:41:56
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFUN QC-FILE-1 (INFILE OUTFILE &optional defs-file)
  (multiple-value-bind (*system-default-binary-file-type* *system-load-binary-file-type* compiler-fun)
      (values-list (get compiler:*target-computer* 'make-system))
    (let* ((type *SYSTEM-DEFAULT-BINARY-FILE-TYPE*)
	   (special-compiler (assq type *known-binary-file-producers*)))
      (if special-compiler
	  (funcall (second special-compiler) infile outfile)
	;; This was a MULTIPLE-VALUE-CALL, but the Lambda compiler screws up badly
	;; on that!!! (I think the cross compiler wins though).
	(apply compiler-fun
	  infile
	  :output-file (send outfile :new-version nil)
	  :package *force-package*
	  (if defs-file
	      (list :environment-pathname defs-file)
	    (if (null *system-load-binary-file-type*)
		nil
	      (list :environment-pathname
		    (send (pathname (or outfile infile))
			  :new-type *system-load-binary-file-type*)))))))
    (WHEN *WARNINGS-STREAM*
      (PRINT-FILE-WARNINGS INFILE *WARNINGS-STREAM*)
      (SEND-IF-HANDLES *WARNINGS-STREAM* :FORCE-OUTPUT)
      (SEND-IF-HANDLES *WARNINGS-STREAM* :FINISH))))

))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:44:09
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

#+(target lambda)
(define-make-system-special-variable compiler:*target-computer* 'compiler:lambda-interface nil)
#+(target falcon)
(define-make-system-special-variable compiler:*target-computer* 'compiler:k nil)

(define-make-system-special-variable *system-load-binary-file-type* nil)

(define-make-system-special-variable compiler:*compilation-environment*
				     (compiler:make-compilation-environment
				       :target (case compiler:*target-computer*
						 (compiler:k 'compiler:falcon)
						 (otherwise compiler:*target-computer*)))
  nil)
))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:44:40
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

;;; For typing convenience; :FOR-FALCON is the official one.
(defun (:for-k make-system-keyword) ()
  (make-system-for-falcon))

(defun make-system-for-falcon ()
  (setq compiler:*target-computer* 'compiler:k)
  (setq *system-default-binary-file-type* :fbin)
  (setq *system-load-binary-file-type* :fdef)
  (setq compiler:*compilation-environment*
	(compiler:make-compilation-environment :target 'compiler:falcon
					       :next compiler:*falcon-environment*)))

(defun (:for-falcon make-system-keyword) ()
  (make-system-for-falcon))
))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:44:59
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFUN ReadForCompilation? (Name &AUX (Source (FUNCALL Name ':NEW-TYPE "LISP"))
			    (Binary (FUNCALL Name ':NEW-TYPE
					     (or *SYSTEM-load-BINARY-FILE-TYPE*
						 *SYSTEM-default-BINARY-FILE-TYPE*))))
  (COND ((FILE-NEWER-THAN-FILE-P Source Binary)
	 (FILE-NEWER-THAN-INSTALLED-P Source))
	(T (FILE-NEWER-THAN-INSTALLED-P Binary))))

))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:46:03
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFUN GET-TRANSFORMATION-PATHNAMES (TRANSFORMATION &AUX PATHNAME-LIST)
  (IF (SETQ PATHNAME-LIST (CDR (ASSQ TRANSFORMATION *TRANSFORMATION-OUTPUTS*)))
      (VALUES PATHNAME-LIST T)
      (LET ((INPUT (TRANSFORMATION-INPUT TRANSFORMATION)))
	(SELECTQ (TYPE-OF INPUT)
	  (MODULE
	   (SETQ PATHNAME-LIST (GET-MODULE-PATHNAMES INPUT)))
	  (TRANSFORMATION
	   (SETQ PATHNAME-LIST (GET-TRANSFORMATION-PATHNAMES INPUT)))
	  (OTHERWISE
	   (FERROR NIL "~S is not a valid transformation input" INPUT))))
      (LOOP FOR PATHNAME IN PATHNAME-LIST
	    WITH TRANSFORMATION-TYPE = (TRANSFORMATION-TRANSFORMATION-TYPE TRANSFORMATION)
	    AS PKG = (POP PATHNAME)
	    ;;Take off as many inputs as would be used
	    DO (DO L (TRANSFORMATION-TYPE-INPUT-FILE-TYPES TRANSFORMATION-TYPE)
		   (CDR L) (NULL L)
		 (POP-CAREFULLY PATHNAME))
	    ;;Now accumulate output types
	    AS OUTPUTS = (LOOP FOR FILE-TYPE IN (TRANSFORMATION-TYPE-OUTPUT-FILE-TYPES
						  TRANSFORMATION-TYPE)
			       for fte = (eval file-type)
			       COLLECT (when fte
					 (MERGE-PATHNAME-TYPE (POP-CAREFULLY PATHNAME) fte)))
	    COLLECT (CONS PKG (NCONC OUTPUTS PATHNAME)))))

))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:46:21
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

(DEFUN ADD-FILE-TRANSFORMATION (TRANSFORMATION PATHNAMES
				&AUX TRANSFORMATION-TYPE CONDITION-FUNCTION
				     INPUT-XFORM PKG INPUTS OUTPUTS ARGS FILE-TRANSFORMATION
				     SYSTEM)
  (SETQ TRANSFORMATION-TYPE (TRANSFORMATION-TRANSFORMATION-TYPE TRANSFORMATION)
	CONDITION-FUNCTION (TRANSFORMATION-CONDITION-FUNCTION TRANSFORMATION)
	SYSTEM (TRANSFORMATION-SYSTEM TRANSFORMATION))
  (SETQ PKG (POP PATHNAMES))
  (AND (LISTP PKG) (SETQ INPUT-XFORM PKG
			 PKG (FILE-TRANSFORMATION-FORCE-PACKAGE PKG)))
  (SETQ INPUTS (LOOP FOR FILE-TYPE IN (TRANSFORMATION-TYPE-INPUT-FILE-TYPES
				         TRANSFORMATION-TYPE)
		     for fte = (EVAL FILE-TYPE)
		     COLLECT (when fte
			       (MERGE-PATHNAME-TYPE (POP-CAREFULLY PATHNAMES) fte)))
	OUTPUTS (LOOP FOR FILE-TYPE IN (TRANSFORMATION-TYPE-OUTPUT-FILE-TYPES
					  TRANSFORMATION-TYPE)
		      for fte = (EVAL FILE-TYPE)
		      COLLECT (when fte
				(MERGE-PATHNAME-TYPE (POP-CAREFULLY PATHNAMES)
						     fte)))
	ARGS (NCONC INPUTS OUTPUTS))
  (COND ((SETQ FILE-TRANSFORMATION (DOLIST (FILE-XFORM *FILE-TRANSFORMATION-LIST*)
				     (AND (EQ (FILE-TRANSFORMATION-TRANSFORMATION-TYPE
						FILE-XFORM)
					      TRANSFORMATION-TYPE)
					  (EQUAL (FILE-TRANSFORMATION-ARGS FILE-XFORM) ARGS)
					  (EQ (FILE-TRANSFORMATION-FORCE-PACKAGE FILE-XFORM)
					      PKG)
					  (EQ (FILE-TRANSFORMATION-SYSTEM FILE-XFORM)
					      SYSTEM)
					  (RETURN FILE-XFORM))))
	 ;;Found, extend the condition
	 (SETF (FILE-TRANSFORMATION-CONDITION-FUNCTION FILE-TRANSFORMATION)
	       (LET ((OLD-CONDITION-FUNCTION (FILE-TRANSFORMATION-CONDITION-FUNCTION
					       FILE-TRANSFORMATION)))
		 (COND ((EQ OLD-CONDITION-FUNCTION CONDITION-FUNCTION)
			CONDITION-FUNCTION)	;The same
		       ((CLOSUREP OLD-CONDITION-FUNCTION)
			(PUSH* CONDITION-FUNCTION
			       (SYMEVAL-IN-CLOSURE OLD-CONDITION-FUNCTION
						   '*CONDITION-FUNCTIONS*)))
		       (T
			(LET-CLOSED ((*CONDITION-FUNCTIONS* (LIST OLD-CONDITION-FUNCTION
								  CONDITION-FUNCTION)))
			  'MULTIPLE-FILE-CONDITION)))))		     
	 (SETQ *FILE-TRANSFORMATION-LIST*
	       (DELQ FILE-TRANSFORMATION *FILE-TRANSFORMATION-LIST*)))
	(T
	 (SETQ FILE-TRANSFORMATION (MAKE-FILE-TRANSFORMATION TRANSFORMATION-TYPE
							       TRANSFORMATION-TYPE
							     FORCE-PACKAGE PKG
							     SYSTEM SYSTEM
							     CONDITION-FUNCTION
							       CONDITION-FUNCTION
							     OUTPUTS OUTPUTS
							     ARGS ARGS))))
  (PUSH FILE-TRANSFORMATION *ADDED-FILE-TRANSFORMATIONS*)
  (LET ((OUTPUT (CONS FILE-TRANSFORMATION (APPEND OUTPUTS PATHNAMES)))
	(ELEM (ASSQ TRANSFORMATION *TRANSFORMATION-OUTPUTS*)))
    (IF ELEM (NCONC ELEM (NCONS OUTPUT))
	(PUSH (LIST TRANSFORMATION OUTPUT) *TRANSFORMATION-OUTPUTS*)))
  (CONS INPUT-XFORM FILE-TRANSFORMATION))

))

; From modified file DJ: L.SYS2; MAKSYS.LISP#211 at 11-Aug-88 01:45:24
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; MAKSYS  "

;;; Patch-file only
(defun fixup-existing-systems ()
  (loop for sys in *systems-list*
	do
	(typecase sys
	  (system
	   (loop for trans in (system-transformations sys)
		 for type = (transformation-transformation-type trans)
		 for ntype = (assoc (car type) *transformation-type-alist*)
		 do
		 (if (not ntype)
		     (cerror "Do the rest of the transformations."
			     "Missing transformation type: ~S." (car type))
		   (setf (transformation-transformation-type trans) ntype)))))))

(fixup-existing-systems)
))
