~ chicken-core (master) f597fa17480a0ea5b57fa7c9707ced1f704ba487
commit f597fa17480a0ea5b57fa7c9707ced1f704ba487
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Mon Jan 22 21:46:21 2024 +0100
Commit: Mario Domenech Goulart <mario@parenteses.org>
CommitDate: Sun Jan 28 16:32:14 2024 +0100
Deprecate chicken-home, add include-path
init ##sys#include-pathnames in library.scm and populate with contents
of CHICKEN_INCLUDE_PATH directly, instead of doing this in csi/chicken.
Also move chop-separator from support.scm to batch-driver since it is only
used there.
Signed-off-by: Mario Domenech Goulart <mario@parenteses.org>
diff --git a/DEPRECATED b/DEPRECATED
index c8d19bd1..716a148b 100644
--- a/DEPRECATED
+++ b/DEPRECATED
@@ -8,6 +8,10 @@ Deprecated functions and variables
- "set-signal-handler!" and "signal-handler" have been deprecated
in favor of "make-signal-handler" and "ignore-signal" which are
better suited in a multithreaded environment.
+- "chicken-home" is deprecated as it is not possible to override
+ when installing eggs into a custom location. Use "include-path" instead
+ (or "##sys#include-pathnames" for code that is intended to be
+ backwards compatible) when accessing the data location.
5.2.1
- current-milliseconds and its C implementations C_milliseconds and
diff --git a/NEWS b/NEWS
index 46c5d423..6b09db47 100644
--- a/NEWS
+++ b/NEWS
@@ -35,6 +35,8 @@
longer memoized (fixes #1830).
- Condition objects produced by procedures that change errno now have
an `errno' property.
+ - Deprecated "chicken-home" and added "include-path" in the
+ chicken.platform module.
- Tools
- The -R option for csi and csc now accepts list-notation like
diff --git a/batch-driver.scm b/batch-driver.scm
index 8f0a4f35..b9cbe674 100644
--- a/batch-driver.scm
+++ b/batch-driver.scm
@@ -219,7 +219,7 @@
'()
`((import-syntax ,@default-imports)))))
(cleanup-forms '(((chicken.base#implicit-exit-handler))))
- (outfile (cond ((memq 'output-file options)
+ (outfile (cond ((memq 'output-file options)
=> (lambda (node)
(let ((oname (option-arg node)))
(if (symbol? oname)
@@ -227,18 +227,15 @@
oname) ) ) )
((memq 'to-stdout options) #f)
(else (make-pathname #f (if filename (pathname-file filename) "out") "c")) ) )
- (ipath (map chop-separator
- (##sys#split-path
- (or (get-environment-variable "CHICKEN_INCLUDE_PATH") ""))))
(opasses (default-optimization-passes))
(time0 #f)
(time-breakdown #f)
(forms '())
(inline-output-file #f)
(profile (or (memq 'profile options)
- (memq 'accumulate-profile options)
+ (memq 'accumulate-profile options)
(memq 'profile-name options)))
- (profile-name
+ (profile-name
(and-let* ((pn (memq 'profile-name options))) (cadr pn)))
(hsize (memq 'heap-size options))
(kwstyle (memq 'keyword-style options))
@@ -339,6 +336,13 @@
no contf) )
db) ) )
+ (define (chop-separator str)
+ (let ((len (sub1 (string-length str))))
+ (if (and (> len 0)
+ (memq (string-ref str len) '(#\\ #\/)))
+ (substring str 0 len)
+ str) ) )
+
(when unit
(set! unit-name (string->symbol (option-arg unit))))
(when (or unit-name dynamic)
@@ -347,7 +351,7 @@
(set! ##sys#dload-disabled #t)
(repository-path #f))
(set! enable-specialization (memq 'specialize options))
- (set! debugging-chicken
+ (set! debugging-chicken
(append-map
(lambda (do)
(map (lambda (c) (string->symbol (string c)))
@@ -452,8 +456,7 @@
(set! ##sys#read-error-with-line-number #t)
(set! ##sys#include-pathnames
(append (map chop-separator (collect-options 'include-path))
- ##sys#include-pathnames
- ipath) )
+ ##sys#include-pathnames) )
(when (and outfile filename (string=? outfile filename))
(quit-compiling "source- and output-filename are the same") )
(when (memq 'keep-shadowed-macros options)
diff --git a/csi.scm b/csi.scm
index 63ff4221..7523bbcf 100644
--- a/csi.scm
+++ b/csi.scm
@@ -1022,13 +1022,10 @@ EOF
(let* ([eval? (member* '("-e" "-p" "-P" "-eval" "-print" "-pretty-print") args)]
[batch (or script (member* '("-b" "-batch") args) eval?)]
[quietflag (member* '("-q" "-quiet") args)]
- [quiet (or script quietflag eval?)]
- [ipath (map chop-separator
- (##sys#split-path
- (or (get-environment-variable "CHICKEN_INCLUDE_PATH") "")))])
+ [quiet (or script quietflag eval?)])
(define (collect-options opt)
(let loop ([opts args])
- (cond [(member opt opts)
+ (cond [(member opt opts)
=> (lambda (p)
(if (null? (cdr p))
(##sys#error "missing argument to command-line option" opt)
@@ -1072,12 +1069,11 @@ EOF
(for-each register-feature! (collect-options "-feature"))
(for-each register-feature! (collect-options "-D"))
(for-each unregister-feature! (collect-options "-no-feature"))
- (set! ##sys#include-pathnames
+ (set! ##sys#include-pathnames
(delete-duplicates
(append (map chop-separator (collect-options "-include-path"))
(map chop-separator (collect-options "-I"))
- ##sys#include-pathnames
- ipath)
+ ##sys#include-pathnames)
string=?) )
(when kwstyle
(cond [(not (pair? (cdr kwstyle)))
diff --git a/eval.scm b/eval.scm
index e760aad0..6d01e0f8 100644
--- a/eval.scm
+++ b/eval.scm
@@ -1283,8 +1283,6 @@
;;; Find included file:
-(define ##sys#include-pathnames (list (chicken-home)))
-
(define ##sys#resolve-include-filename
(let ((string-append string-append) )
(lambda (fname exts repo source)
diff --git a/library.scm b/library.scm
index 3ec87a74..4a8a2d33 100644
--- a/library.scm
+++ b/library.scm
@@ -6555,7 +6555,9 @@ static C_word C_fcall C_setenv(C_word x, C_word y) {
;;; Platform configuration inquiry:
(module chicken.platform
- (build-platform chicken-version chicken-home
+ (build-platform chicken-version
+ chicken-home ;; DEPRECATED
+ include-path
feature? features machine-byte-order machine-type
repository-path installation-repository
register-feature! unregister-feature!
@@ -6628,6 +6630,7 @@ static C_word C_fcall C_setenv(C_word x, C_word y) {
(define-foreign-variable installation-home c-string "C_INSTALL_SHARE_HOME")
(define-foreign-variable install-egg-home c-string "C_INSTALL_EGG_HOME")
+;; DEPRECATED
(define (chicken-home) installation-home)
(define path-list-separator
@@ -6678,6 +6681,21 @@ static C_word C_fcall C_setenv(C_word x, C_word y) {
(get-environment-variable "CHICKEN_INSTALL_REPOSITORY")
install-egg-home)))
+(define (chop-separator str)
+ (let ((len (fx- (string-length str) 1)))
+ (if (and (> len 0)
+ (memq (string-ref str len) '(#\\ #\/)))
+ (substring str 0 len)
+ str) ) )
+
+(define ##sys#include-pathnames
+ (cond ((get-environment-variable "CHICKEN_INCLUDE_PATH")
+ => (lambda (p)
+ (map chop-separator (##sys#split-path p))))
+ (else (list installation-home))))
+
+(define (include-path) ##sys#include-pathnames)
+
;;; Feature identifiers:
diff --git a/manual/Module (chicken platform) b/manual/Module (chicken platform)
index 7453195c..2d513034 100644
--- a/manual/Module (chicken platform)
+++ b/manual/Module (chicken platform)
@@ -26,12 +26,6 @@ building the executing system, which is one of the following:
sun
unknown
-==== chicken-home
-
-<procedure>(chicken-home)</procedure>
-
-Returns a string which represents the installation directory (usually {{/usr/local/share/chicken}} on UNIX-like systems).
-
==== chicken-version
<procedure>(chicken-version [FULL])</procedure>
@@ -40,6 +34,16 @@ Returns a string containing the version number of the CHICKEN runtime
system. If the optional argument {{FULL}} is given and true, then
a full version string is returned.
+==== include-path
+
+<procedure>(include-path)</procedure>
+
+Returns a list of strings representing directory names where included files are located,
+which defaults to the value of the environment variable
+{{CHICKEN_INCLUDE_PATH}}, split on {{:}} (or {{;}} on Windows).
+If the variable is not set, the list is initialized to contain the installation directory
+(usually {{/usr/local/share/chicken}} on UNIX-like systems).
+
==== repository-path
<parameter>repository-path</parameter>
diff --git a/support.scm b/support.scm
index 1e74239a..a11c26ed 100644
--- a/support.scm
+++ b/support.scm
@@ -56,7 +56,7 @@
register-foreign-type! lookup-foreign-type clear-foreign-type-table!
estimate-foreign-result-size estimate-foreign-result-location-size
finish-foreign-result foreign-type->scrutiny-type scan-used-variables
- scan-free-variables chop-separator
+ scan-free-variables
make-block-variable-literal block-variable-literal?
block-variable-literal-name make-random-name
clear-real-name-table! get-real-name set-real-name!
@@ -1459,18 +1459,9 @@
(values vars hvars) ) ) ; => freevars hiddenvars
-;;; Some pathname operations:
-
-(define (chop-separator str) ; Used only in batch-driver.scm
- (let ([len (sub1 (string-length str))])
- (if (and (> len 0)
- (memq (string-ref str len) '(#\\ #\/)))
- (substring str 0 len)
- str) ) )
-
;;; Special block-variable literal type:
-(define-record-type block-variable-literal
+(define-record-type block-variable-literal
(make-block-variable-literal name)
block-variable-literal?
(name block-variable-literal-name)) ; symbol
diff --git a/types.db b/types.db
index ad4f547f..c7c6e2b2 100644
--- a/types.db
+++ b/types.db
@@ -1356,7 +1356,8 @@
(chicken.platform#build-platform (#(procedure #:pure) chicken.platform#build-platform () symbol))
(chicken.platform#chicken-version (#(procedure #:pure) chicken.platform#chicken-version (#!optional *) string))
-(chicken.platform#chicken-home (#(procedure #:clean) chicken.platform#chicken-home () string))
+(chicken.platform#chicken-home deprecated)
+(chicken.platform#include-path (#(procedure #:clean) chicken.platform#include-path () string))
(chicken.platform#feature? (#(procedure #:clean) chicken.platform#feature? (#!rest (or keyword symbol string)) boolean))
(chicken.platform#features (#(procedure #:clean) chicken.platform#features () (list-of keyword)))
(chicken.platform#software-type (#(procedure #:pure) chicken.platform#software-type () symbol))
Trap