;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 126.9
;;; Reason:
;;;  Implements some new #+ and #- syntax for cross compilation:
;;;    #+(TARGET FOO)  looks for FOO on COMPILER:*TARGET-FEATURES*
;;;  For symmetry and completeness:
;;;    #-(LOCAL FOO)   looks for FOO on *FEATURES*
;;; Written 3-Aug-88 12:48:45 by smh (Steve Haflich) at site Gigamos Cambridge
;;; while running on Harpo from band 1
;;; with ZWEI 125.9, ZMail 73.0, Local-File 75.1, File-Server 24.1, Unix-Interface 13.0, Tape 24.2, Lambda-Diag 17.0, Experimental System 126.7, microcode 1761, SDU Boot Tape 3.12, SDU ROM 102, 126.2 + k-sys.



; From modified file DJ: L.IO; READ.LISP#467 at 3-Aug-88 12:48:52
#8R SYSTEM-INTERNALS#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS")))
  (COMPILER::PATCH-SOURCE-FILE "SYS: IO; READ  "

(DEFUN XR-FEATURE-PRESENT (FEATURE &optional (feature-list *features*))
  (COND ((SYMBOLP FEATURE)
	 ;; recent common-lisp flamage claims that this should be memq, not member :test #'string=
	 ;;  Personally, I can't think of a more poorly-designed advertised feature in the
	 ;;  clisp manual than *features* and *modules*
	 (MEMQ FEATURE feature-list))
	((NUMBERP FEATURE)
	 (MEMBER-EQL FEATURE feature-list))
	((ATOM FEATURE)
	 (READ-ERROR "Unknown form ~S in #+ or #- feature list." FEATURE))
	((EQ (CAR FEATURE) :NOT)
	 (NOT (XR-FEATURE-PRESENT (CADR FEATURE) feature-list)))
	((EQ (CAR FEATURE) :AND)
	 (loop for f in (cdr feature)
	       always (XR-FEATURE-PRESENT f feature-list)))
	((EQ (CAR FEATURE) :OR)
	 (loop for f in (cdr feature)
	       thereis (XR-FEATURE-PRESENT f feature-list)))
	((eq (car feature) :PACKAGE-ROOT-NAME)	;extension, 7/18/87, RG.
	 (string-equal (si:package-root-name *previous-package*)
		       (cadr feature)))
	((eq (car feature) :target)		;cross compilation extension - 3aug88 smh
	 (xr-feature-present (cadr feature) compiler:*target-features*))
	((eq (car feature) :local)		;cross compilation extension - 3aug88 smh
	 (xr-feature-present (cadr feature) *features*))
	(T (READ-ERROR "Unknown form ~S in #+ or #- feature list." FEATURE))))

))
