~ chicken-core (chicken-5) 0a6036bfc146993f19f41d88ba6e6c90a344f355
commit 0a6036bfc146993f19f41d88ba6e6c90a344f355 Author: Peter Bex <peter@more-magic.net> AuthorDate: Tue Nov 1 10:39:32 2022 +0100 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Tue Nov 1 10:51:53 2022 +0100 Add a way to pass in already-quoted arguments to qs* The librarian options are kept around in the binary as a foreign string which may contain multiple flags separated by spaces. These should be taken verbatim by print-build-command. The way we do this is by wrapping such verbatim snippets in a "raw" record type and detecting these values in qs* and unpacking their strings directly from the struct instead of quoting them. Signed-off-by: felix <felix@call-with-current-continuation.org> diff --git a/egg-compile.scm b/egg-compile.scm index 662fad3d..c1f2ceb0 100644 --- a/egg-compile.scm +++ b/egg-compile.scm @@ -650,7 +650,7 @@ link-objects)))) (print-build-command (list out3) `(,out2 ,@lobjs) - `(,target-librarian ,target-librarian-options ,out3 ,out2 ,@lobjs) + `(,target-librarian ,(raw-arg target-librarian-options) ,out3 ,out2 ,@lobjs) platform))) (print-end-command platform))) @@ -1152,10 +1152,19 @@ EOF ;; have to undo that here again. It can also convert slashes to ;; backslashes on Windows, which is necessary in many cases when ;; running programs via "cmd". +;; +;; It also supports already-quoted arguments which can be taken as-is. (define (qs* arg platform #!optional slashify?) - (let* ((arg (->string arg)) - (path (if slashify? (slashify arg platform) arg))) - (qs path (if (eq? platform 'windows) 'mingw32 platform)))) + (if (raw-arg? arg) + (raw-arg-value arg) + (let* ((arg (->string arg)) + (path (if slashify? (slashify arg platform) arg))) + (qs path (if (eq? platform 'windows) 'mingw32 platform))))) + +(define-record-type raw-arg + (raw-arg value) + raw-arg? + (value raw-arg-value)) (define (slashify str platform) (if (eq? platform 'windows)Trap