From: Ralph Ronnquist Date: Sat, 18 Dec 2021 01:23:59 +0000 (+1100) Subject: implemented -C option X-Git-Tag: 0.1.0~20 X-Git-Url: https://git.rrq.au/?a=commitdiff_plain;h=1b50e1b1bb6026b7783b1f1e0986566e6854bca7;p=rrq%2Fnewlisp%2Fpacknl.git implemented -C option --- diff --git a/packnl.lsp b/packnl.lsp index 333d54e..d8adb2e 100644 --- a/packnl.lsp +++ b/packnl.lsp @@ -2,7 +2,7 @@ ;; binary, which is an embedded newlisp binary with the same embedding ;; script as binnl itself. ;; -;; Usage: [ -r ] binary ( -a archive | member )* +;; Usage: [ -r ] binary ( member | -a archive | -C dir )* ;; ;; The script processes the arguments from left to right to form then ;; named binary with the named members appended. @@ -13,6 +13,8 @@ ;; Use '-A archive' to embed all members of the nominated ar style ;; archive. ;; +;; Use '-C dir' to change source directory +;; ;; Use '-r' to overwrite an existing binary ;; The first embedded member will be the "main script". @@ -39,16 +41,26 @@ (if (= A "-A") (dolist (M MEMBERS) (compile-file M))))) (define (compile BINARY MEMBERS) + (unless (starts-with BINARY "/") + (setf BINARY (format "%s/%s" (real-path) BINARY))) (write-file BINARY (0 archive:incore core)) ; includes the marker (exec (format "chmod a+x %s" BINARY)) - (let ((A nil)) + (let ((A nil) (C nil)) (dolist (M MEMBERS) ;;(write-line 1 (string "[" M "]" (archives))) (case M ("-a" (setf A "-a")) ("-A" (setf A "-A")) - (true (if A (compile-ar A M) (compile-file M)) - (setf A nil)))) + ("-C" (setf C "-C")) + (true (if A (compile-ar A M) + C (unless (change-dir M) + (write-line 2 (string "** directory is " (real-path))) + (write-line 2 (string "Cannot change to " M)) + (exit 1)) + (compile-file M)) + (setf A nil) + (setf C nil) + ))) )) (define (decompile BINARY DIR)