Commit 7785079c authored by Francois-Rene Rideau's avatar Francois-Rene Rideau

2.26.77: Fix package mix. Export driver. Move encoding support to stream.

parent 3aa35aa3
......@@ -51,8 +51,8 @@ archive-copy: archive build/asdf.lisp
${MAKE} push
git checkout master
driver_lisp := header.lisp package.lisp compatibility.lisp utility.lisp upgrade.lisp pathname.lisp stream.lisp os.lisp image.lisp run-program.lisp lisp-build.lisp
asdf_lisp := component.lisp system.lisp find-system.lisp find-component.lisp operation.lisp action.lisp lisp-action.lisp plan.lisp operate.lisp configuration.lisp output-translations.lisp source-registry.lisp backward-internals.lisp defsystem.lisp bundle.lisp concatenate-source.lisp backward-interface.lisp interface.lisp footer.lisp
driver_lisp := header.lisp package.lisp compatibility.lisp utility.lisp pathname.lisp stream.lisp os.lisp image.lisp run-program.lisp lisp-build.lisp driver.lisp
asdf_lisp := upgrade.lisp component.lisp system.lisp find-system.lisp find-component.lisp operation.lisp action.lisp lisp-action.lisp plan.lisp operate.lisp configuration.lisp output-translations.lisp source-registry.lisp backward-internals.lisp defsystem.lisp bundle.lisp concatenate-source.lisp backward-interface.lisp interface.lisp footer.lisp
build/asdf.lisp: $(wildcard *.lisp)
mkdir -p build
......
......@@ -11,8 +11,9 @@ that you can't portably construct a complete program without using them."
(:file "compatibility" :depends-on ("package"))
(:file "utility" :depends-on ("compatibility"))
(:file "pathname" :depends-on ("utility"))
(:file "stream" :depends-on ("utility"))
(:file "stream" :depends-on ("pathname"))
(:file "os" :depends-on ("pathname" "stream"))
(:file "image" :depends-on ("os"))
(:file "run-program" :depends-on ("os"))
(:file "lisp-build" :depends-on ("image"))))
(:file "lisp-build" :depends-on ("image"))
(:file "driver" :depends-on ("lisp-build" "run-program"))))
......@@ -15,7 +15,7 @@
:licence "MIT"
:description "Another System Definition Facility"
:long-description "ASDF builds Common Lisp software organized into defined systems."
:version "2.26.76" ;; to be automatically updated by bin/bump-revision
:version "2.26.77" ;; to be automatically updated by bin/bump-revision
:depends-on ()
:components ((:module "build" :components ((:file "asdf")))))
......
......@@ -3,7 +3,7 @@
(asdf/package:define-package :asdf/component
(:recycle :asdf/component :asdf)
(:use :common-lisp :asdf/utility :asdf/pathname :asdf/upgrade)
(:use :common-lisp :asdf/utility :asdf/pathname :asdf/stream :asdf/upgrade)
(:intern #:name #:version #:description #:long-description
#:sibling-dependencies #:if-feature #:in-order-to #:inline-methods
#:relative-pathname #:absolute-pathname #:operation-times #:around-compile
......@@ -21,10 +21,7 @@
#:component-inline-methods ;; backward-compatibility only. DO NOT USE!
#:component-operation-times ;; For internal use only.
;; portable ASDF encoding and implementation-specific external-format
#:component-external-format #:component-encoding
#:detect-encoding #:*encoding-detection-hook* #:always-default-encoding
#:encoding-external-format #:*encoding-external-format-hook* #:default-encoding-external-format
#:*default-encoding* #:*utf-8-external-format*))
#:component-external-format #:component-encoding))
(in-package :asdf/component)
(defgeneric* component-name (component)
......@@ -162,57 +159,11 @@ another pathname in a degenerate way."))
;;;; Encodings
(defvar *default-encoding* :default
"Default encoding for source files.
The default value :default preserves the legacy behavior.
A future default might be :utf-8 or :autodetect
reading emacs-style -*- coding: utf-8 -*- specifications,
and falling back to utf-8 or latin1 if nothing is specified.")
(defparameter *utf-8-external-format*
#+(and asdf-unicode (not clisp)) :utf-8
#+(and asdf-unicode clisp) charset:utf-8
#-asdf-unicode :default
"Default :external-format argument to pass to CL:OPEN and also
CL:LOAD or CL:COMPILE-FILE to best process a UTF-8 encoded file.
On modern implementations, this will decode UTF-8 code points as CL characters.
On legacy implementations, it may fall back on some 8-bit encoding,
with non-ASCII code points being read as several CL characters;
hopefully, if done consistently, that won't affect program behavior too much.")
(defun* always-default-encoding (pathname)
(declare (ignore pathname))
*default-encoding*)
(defvar *encoding-detection-hook* #'always-default-encoding
"Hook for an extension to define a function to automatically detect a file's encoding")
(defun* detect-encoding (pathname)
(if (and pathname (not (directory-pathname-p pathname)) (probe-file pathname))
(funcall *encoding-detection-hook* pathname)
*default-encoding*))
(defmethod component-encoding ((c component))
(or (loop :for x = c :then (component-parent x)
:while x :thereis (%component-encoding x))
(detect-encoding (component-pathname c))))
(defun* default-encoding-external-format (encoding)
(case encoding
(:default :default) ;; for backward-compatibility only. Explicit usage discouraged.
(:utf-8 *utf-8-external-format*)
(otherwise
(cerror "Continue using :external-format :default" (compatfmt "~@<Your ASDF component is using encoding ~S but it isn't recognized. Your system should :defsystem-depends-on (:asdf-encodings).~:>") encoding)
:default)))
(defvar *encoding-external-format-hook*
#'default-encoding-external-format
"Hook for an extension to define a mapping between non-default encodings
and implementation-defined external-format's")
(defun* encoding-external-format (encoding)
(funcall *encoding-external-format-hook* encoding))
(defmethod component-external-format ((c component))
(encoding-external-format (component-encoding c)))
......
;;;; ---------------------------------------------------------------------------
;;;; Re-export all the functionality in asdf/driver
(asdf/package:define-package :asdf/driver
(:use
:common-lisp :asdf/package :asdf/compatibility :asdf/utility
:asdf/pathname :asdf/stream :asdf/os :asdf/image :asdf/run-program :asdf/lisp-build)
(:reexport
:asdf/package :asdf/compatibility :asdf/utility
:asdf/pathname :asdf/stream :asdf/os :asdf/image :asdf/run-program :asdf/lisp-build))
......@@ -3,8 +3,8 @@
(asdf/package:define-package :asdf/find-system
(:recycle :asdf/find-system :asdf)
(:use :common-lisp :asdf/compatibility :asdf/utility :asdf/upgrade :asdf/pathname :asdf/os
:asdf/component :asdf/system)
(:use :common-lisp :asdf/compatibility :asdf/utility :asdf/pathname :asdf/stream :asdf/os
:asdf/upgrade :asdf/component :asdf/system)
(:export
#:coerce-name #:find-system #:locate-system #:load-sysdef #:with-system-definitions
#:system-registered-p #:register-system #:registered-systems #:clear-system #:map-systems
......
;; -*- mode: Common-Lisp; Base: 10 ; Syntax: ANSI-Common-Lisp ; coding: utf-8 -*-
;;; This is ASDF 2.26.76: Another System Definition Facility.
;;; This is ASDF 2.26.77: Another System Definition Facility.
;;;
;;; Feedback, bug reports, and patches are all welcome:
;;; please mail to <asdf-devel@common-lisp.net>.
......
......@@ -274,7 +274,7 @@ or when loading the package is optional."
(when intern (intern* name package)))
(t (rehome-symbol recycled package))))))
(ensure-export (name p)
(multiple-value-bind (symbol status) (find-symbol name p)
(multiple-value-bind (symbol status) (find-symbol* name p)
(assert status)
(unless (eq status :external)
(ensure-exported name symbol p))))
......@@ -305,12 +305,10 @@ or when loading the package is optional."
(loop :for p :in (set-difference (package-use-list package) (append mix use))
:do (unuse-package p package))
(dolist (name unintern) (unintern* name package nil))
(loop :for sym :in export :for name = (string sym) :do
(setf (gethash name exported) t))
(dolist (sym export) (setf (gethash (string sym) exported) t))
(loop :for p :in reexport :do
(do-external-symbols (sym p)
(let ((name (string sym)))
(export (find-symbol* name package) package) (setf (gethash name exported) t))))
(setf (gethash (string sym) exported) t)))
(do-external-symbols (sym package)
(unless (gethash (symbol-name sym) exported) (unexport sym package)))
(loop :for s :in shadow :for name = (string s) :do
......@@ -329,17 +327,16 @@ or when loading the package is optional."
(do-external-symbols (sym p) (ensure-mix sym p)))
(loop :for (p . syms) :in import-from :do
(dolist (sym syms) (ensure-import sym p)))
(loop :for p :in use :for sp = (string p) :for pp = (find-package* sp) :do
(do-external-symbols (sym pp) (ensure-inherited sym sp))
(loop :for p :in (append use mix) :for pp = (find-package* p) :do
(do-external-symbols (sym pp) (ensure-inherited sym pp))
(use-package pp package))
(loop :for name :being :the :hash-keys :of exported :do
(ensure-symbol name t))
(dolist (name intern)
(ensure-symbol (string name) t)
(ensure-export name package))
(dolist (name intern)
(ensure-symbol (string name) t))
(do-symbols (sym package)
(ensure-symbol (symbol-name sym)))
(loop :for name :being :the :hash-keys :of exported :do
(ensure-export name package))
package))))
(eval-when (:load-toplevel :compile-toplevel :execute)
......
......@@ -37,11 +37,6 @@ as either a recognizing function or a sequence of characters."
(t (error "requires-escaping-p: no good-char criterion")))
token))
(defun output-string (string &optional stream)
(if stream
(with-output (stream) (princ string stream))
string))
(defun escape-token (token &key stream quote good-chars bad-chars escaper)
"Call the ESCAPER function on TOKEN string if it needs escaping as per
REQUIRES-ESCAPING-P using GOOD-CHARS and BAD-CHARS, otherwise output TOKEN,
......
......@@ -3,18 +3,21 @@
(asdf/package:define-package :asdf/stream
(:recycle :asdf/stream)
(:use :cl :asdf/package :asdf/compatibility :asdf/utility)
(:use :cl :asdf/package :asdf/compatibility :asdf/utility :asdf/pathname)
(:export
#:*default-stream-element-type* #:*stderr*
#:finish-outputs #:format!
#:with-output #:with-input #:call-with-input-file
#:with-output #:output-string #:with-input #:call-with-input-file
#:with-safe-io-syntax #:read-function
#:read-file-forms #:read-first-file-form
#:copy-stream-to-stream #:concatenate-files
#:copy-stream-to-stream-line-by-line
#:slurp-stream-string #:slurp-stream-lines
#:slurp-stream-forms #:slurp-file-string
#:slurp-file-lines #:slurp-file-forms))
#:slurp-file-lines #:slurp-file-forms
#:detect-encoding #:*encoding-detection-hook* #:always-default-encoding
#:encoding-external-format #:*encoding-external-format-hook* #:default-encoding-external-format
#:*default-encoding* #:*utf-8-external-format*))
(in-package :asdf/stream)
(defvar *default-stream-element-type* (or #+(or abcl cmu cormanlisp scl xcl) 'character :default)
......@@ -77,6 +80,11 @@ Otherwise, signal an error.")
as per FORMAT, and evaluate BODY within the scope of this binding."
`(call-with-output ,value #'(lambda (,x) ,@body)))
(defun output-string (string &optional stream)
(if stream
(with-output (stream) (princ string stream))
string))
;;; Input helpers
......@@ -188,3 +196,52 @@ reading contents line by line."
"Open FILE with option KEYS, read its contents as a list of forms"
(apply 'call-with-input-file file 'slurp-stream-forms keys))
;;; Encodings
(defvar *default-encoding* :default
"Default encoding for source files.
The default value :default preserves the legacy behavior.
A future default might be :utf-8 or :autodetect
reading emacs-style -*- coding: utf-8 -*- specifications,
and falling back to utf-8 or latin1 if nothing is specified.")
(defparameter *utf-8-external-format*
#+(and asdf-unicode (not clisp)) :utf-8
#+(and asdf-unicode clisp) charset:utf-8
#-asdf-unicode :default
"Default :external-format argument to pass to CL:OPEN and also
CL:LOAD or CL:COMPILE-FILE to best process a UTF-8 encoded file.
On modern implementations, this will decode UTF-8 code points as CL characters.
On legacy implementations, it may fall back on some 8-bit encoding,
with non-ASCII code points being read as several CL characters;
hopefully, if done consistently, that won't affect program behavior too much.")
(defun* always-default-encoding (pathname)
(declare (ignore pathname))
*default-encoding*)
(defvar *encoding-detection-hook* #'always-default-encoding
"Hook for an extension to define a function to automatically detect a file's encoding")
(defun* detect-encoding (pathname)
(if (and pathname (not (directory-pathname-p pathname)) (probe-file pathname))
(funcall *encoding-detection-hook* pathname)
*default-encoding*))
(defun* default-encoding-external-format (encoding)
(case encoding
(:default :default) ;; for backward-compatibility only. Explicit usage discouraged.
(:utf-8 *utf-8-external-format*)
(otherwise
(cerror "Continue using :external-format :default" (compatfmt "~@<Your ASDF component is using encoding ~S but it isn't recognized. Your system should :defsystem-depends-on (:asdf-encodings).~:>") encoding)
:default)))
(defvar *encoding-external-format-hook*
#'default-encoding-external-format
"Hook for an extension to define a mapping between non-default encodings
and implementation-defined external-format's")
(defun* encoding-external-format (encoding)
(funcall *encoding-external-format-hook* encoding))
......@@ -31,7 +31,7 @@
;; "2.345.6" would be a development version in the official upstream
;; "2.345.0.7" would be your seventh local modification of official release 2.345
;; "2.345.6.7" would be your seventh local modification of development version 2.345.6
(asdf-version "2.26.76")
(asdf-version "2.26.77")
(existing-asdf (find-class (find-symbol* :component :asdf nil) nil))
(existing-version *asdf-version*)
(already-there (equal asdf-version existing-version)))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment