Reuse sources from hackerbase.
This commit is contained in:
		
							parent
							
								
									4fb44325de
								
							
						
					
					
						commit
						879107764a
					
				
					 6 changed files with 462 additions and 2 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							|  | @ -1,2 +1,3 @@ | ||||||
| *~ | *~ | ||||||
| brminv | brminv | ||||||
|  | eggs/ | ||||||
|  |  | ||||||
|  | @ -5,8 +5,9 @@ default: ../brminv | ||||||
| SCRP=$(shell chicken-install -repository) | SCRP=$(shell chicken-install -repository) | ||||||
| CSC=CHICKEN_REPOSITORY_PATH=../eggs:$(SCRP) csc | CSC=CHICKEN_REPOSITORY_PATH=../eggs:$(SCRP) csc | ||||||
| 
 | 
 | ||||||
| BRMINV_SOURCES=brminv.scm frontend.import.scm | BRMINV_SOURCES=brminv.scm frontend.import.scm command-line.import.scm	\
 | ||||||
| BRMINV_OBJS=brminv.o frontend.o | 	util-proc.import.scm duck.import.scm | ||||||
|  | BRMINV_OBJS=brminv.o frontend.o command-line.o util-proc.o duck.o | ||||||
| 
 | 
 | ||||||
| %.o: %.scm | %.o: %.scm | ||||||
| 	$(CSC) -c -static $< | 	$(CSC) -c -static $< | ||||||
|  | @ -26,3 +27,18 @@ frontend.scm: | ||||||
| BRMINV_SOURCES=brminv.scm frontend.import.scm | BRMINV_SOURCES=brminv.scm frontend.import.scm | ||||||
| 
 | 
 | ||||||
| brminv.o: $(BRMINV_SOURCES) | brminv.o: $(BRMINV_SOURCES) | ||||||
|  | 
 | ||||||
|  | DUCK-SOURCES=duck.scm | ||||||
|  | 
 | ||||||
|  | duck.o: duck.import.scm | ||||||
|  | duck.import.scm: $(DUCK-SOURCES) | ||||||
|  | 
 | ||||||
|  | UTIL-PROC-SOURCES=util-proc.scm duck.import.scm | ||||||
|  | 
 | ||||||
|  | util-proc.o: util-proc.import.scm | ||||||
|  | util-proc.import.scm: $(UTIL-PROC-SOURCES) | ||||||
|  | 
 | ||||||
|  | COMMAND-LINE-SOURCES=command-line.scm util-proc.import.scm | ||||||
|  | 
 | ||||||
|  | command-line.o: command-line.import.scm | ||||||
|  | command-line.import.scm: $(COMMAND-LINE-SOURCES) | ||||||
|  |  | ||||||
							
								
								
									
										154
									
								
								backend/command-line.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										154
									
								
								backend/command-line.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,154 @@ | ||||||
|  | ;; | ||||||
|  | ;; command-line.scm | ||||||
|  | ;; | ||||||
|  | ;; Argument parsing on command-line with interpreter -- support. | ||||||
|  | ;; | ||||||
|  | ;; ISC License | ||||||
|  | ;; | ||||||
|  | ;; Copyright 2023-2025 Brmlab, z.s. | ||||||
|  | ;; Dominik Pantůček <dominik.pantucek@trustica.cz> | ||||||
|  | ;; | ||||||
|  | ;; Permission to use, copy, modify, and/or distribute this software | ||||||
|  | ;; for any purpose with or without fee is hereby granted, provided | ||||||
|  | ;; that the above copyright notice and this permission notice appear | ||||||
|  | ;; in all copies. | ||||||
|  | ;;  | ||||||
|  | ;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL | ||||||
|  | ;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED | ||||||
|  | ;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE | ||||||
|  | ;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR | ||||||
|  | ;; CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS | ||||||
|  | ;; OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, | ||||||
|  | ;; NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | ||||||
|  | ;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||||
|  | ;; | ||||||
|  | 
 | ||||||
|  | (declare (unit command-line)) | ||||||
|  | 
 | ||||||
|  | (module | ||||||
|  |  command-line | ||||||
|  |  ( | ||||||
|  |   command-line | ||||||
|  | 
 | ||||||
|  |   command-line:parse-command-line | ||||||
|  |   command-line:print-options | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  |  (import scheme | ||||||
|  | 	 (chicken base) | ||||||
|  | 	 (chicken process-context) | ||||||
|  | 	 (chicken format) | ||||||
|  | 	 srfi-1 | ||||||
|  | 	 util-proc) | ||||||
|  | 
 | ||||||
|  |  ;; Consumes given number of arguments from the list and returns the | ||||||
|  |  ;; remainder of the list and a list of arguments consumed. | ||||||
|  |  (define (consume-args args num) | ||||||
|  |    (let loop ((args args) | ||||||
|  | 	      (res '()) | ||||||
|  | 	      (num num)) | ||||||
|  |      (if (= num 0) | ||||||
|  | 	 (list args (reverse res)) | ||||||
|  | 	 (if (null? args) | ||||||
|  | 	     (error 'consume-args "Not enough arguments" num) | ||||||
|  | 	     (loop (cdr args) | ||||||
|  | 		   (cons (car args) res) | ||||||
|  | 		   (- num 1)))))) | ||||||
|  | 
 | ||||||
|  |  ;; Gets command-line arguments after the "--" of csi (not useful when | ||||||
|  |  ;; compiled) | ||||||
|  |  (define (get-command-line-arguments . explicit-argv) | ||||||
|  |    (let* ((args (if (null? explicit-argv) (argv) explicit-argv)) | ||||||
|  | 	  (rargs (member "--" args))) | ||||||
|  |      (if rargs | ||||||
|  | 	 (cdr rargs) | ||||||
|  | 	 (cdr args)))) | ||||||
|  | 
 | ||||||
|  |  ;; Performs the actual parsing based on specification. | ||||||
|  |  (define (command-line:parse-command-line specs+comments) | ||||||
|  |    (let ((specs (filter (lambda (s) (not (string? s))) specs+comments))) | ||||||
|  |      (let loop ((args (get-command-line-arguments))) | ||||||
|  |        (when (not (null? args)) | ||||||
|  | 	 (let* ((arg (car args)) | ||||||
|  | 		(specp (assoc arg specs))) | ||||||
|  | 	   (when (not specp) | ||||||
|  | 	     (error 'parse-command-line "Unknown argument" arg)) | ||||||
|  | 	   (let* ((proc (caddr specp)) | ||||||
|  | 		  (nargs (procedure-num-args proc)) | ||||||
|  | 		  (aargsl (consume-args (cdr args) nargs)) | ||||||
|  | 		  (args (car aargsl)) | ||||||
|  | 		  (aargs (cadr aargsl))) | ||||||
|  | 	     (apply proc aargs) | ||||||
|  | 	     (loop args))))))) | ||||||
|  | 
 | ||||||
|  |  ;; String representation of procedure arguments. | ||||||
|  |  (define (procedure->argstring proc) | ||||||
|  |    (let* ((args (procedure-arg-names proc)) | ||||||
|  | 	  (argss (sprintf "~A" args))) | ||||||
|  |      (substring | ||||||
|  |       (substring argss 0 (- (string-length argss) 1)) | ||||||
|  |       1))) | ||||||
|  | 
 | ||||||
|  |  ;; Prints options descriptions. | ||||||
|  |  (define (command-line:print-options specs) | ||||||
|  |    (let* ((descrs (map (lambda (spec) | ||||||
|  | 			 (if (string? spec) | ||||||
|  | 			     spec | ||||||
|  | 			     (list (car spec) | ||||||
|  | 				   (procedure->argstring (caddr spec)) | ||||||
|  | 				   (cadr spec)))) | ||||||
|  | 		       specs)) | ||||||
|  | 	  (owidth (apply max (map (lambda (desc) | ||||||
|  | 				    (if (string? desc) | ||||||
|  | 					0 | ||||||
|  | 					(string-length (car desc)))) | ||||||
|  | 				  descrs))) | ||||||
|  | 	  (awidth (apply max (map (lambda (desc) | ||||||
|  | 				    (if (string? desc) | ||||||
|  | 					0 | ||||||
|  | 					(string-length (cadr desc)))) | ||||||
|  | 				  descrs)))) | ||||||
|  |      (let loop ((descrs descrs)) | ||||||
|  |        (when (not (null? descrs)) | ||||||
|  | 	 (let ((desc (car descrs))) | ||||||
|  | 	   (if (string? desc) | ||||||
|  | 	       (print desc) | ||||||
|  | 	       (let* ((opt (car desc)) | ||||||
|  | 		      (args (cadr desc)) | ||||||
|  | 		      (help (caddr desc))) | ||||||
|  | 		 (print "  " | ||||||
|  | 			opt | ||||||
|  | 			(make-string (- owidth (string-length opt)) #\space) | ||||||
|  | 			" " | ||||||
|  | 			args | ||||||
|  | 			(make-string (- awidth (string-length args)) #\space) | ||||||
|  | 			"  " | ||||||
|  | 			help))) | ||||||
|  | 	   (loop (cdr descrs))))))) | ||||||
|  | 
 | ||||||
|  |  ;; Syntax for expanding various types of options. | ||||||
|  |  (define-syntax make-option | ||||||
|  |    (syntax-rules () | ||||||
|  |      ((_ (opt (args ...) help body ...)) | ||||||
|  |       (list (symbol->string 'opt) | ||||||
|  | 	    help | ||||||
|  | 	    (lambda (args ...) body ...))) | ||||||
|  |      ((_ str) | ||||||
|  |       str))) | ||||||
|  | 
 | ||||||
|  |  (define-syntax make-options | ||||||
|  |    (syntax-rules () | ||||||
|  |      ((_ exp ...) | ||||||
|  |       (list (make-option exp) ...)))) | ||||||
|  | 
 | ||||||
|  |  ;; Simple syntax wrapper for command-line arguments specification and | ||||||
|  |  ;; immediate parsing. | ||||||
|  |  (define-syntax command-line | ||||||
|  |    (syntax-rules () | ||||||
|  |      ((_ print-help exps ...) | ||||||
|  |       (letrec ((specs (make-options exps ...)) | ||||||
|  | 	       (print-help (lambda () | ||||||
|  | 			     (command-line:print-options specs)))) | ||||||
|  | 	(command-line:parse-command-line specs))))) | ||||||
|  | 
 | ||||||
|  |  ) | ||||||
							
								
								
									
										118
									
								
								backend/duck.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								backend/duck.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,118 @@ | ||||||
|  | ;; | ||||||
|  | ;; duck.scm | ||||||
|  | ;; | ||||||
|  | ;; Duck - a CHICKEN in-source documentation. | ||||||
|  | ;; | ||||||
|  | ;; ISC License | ||||||
|  | ;; | ||||||
|  | ;; Copyright 2023 Dominik Pantůček <dominik.pantucek@trustica.cz> | ||||||
|  | ;; | ||||||
|  | ;; Permission to use, copy, modify, and/or distribute this software | ||||||
|  | ;; for any purpose with or without fee is hereby granted, provided | ||||||
|  | ;; that the above copyright notice and this permission notice appear | ||||||
|  | ;; in all copies. | ||||||
|  | ;;  | ||||||
|  | ;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL | ||||||
|  | ;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED | ||||||
|  | ;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE | ||||||
|  | ;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR | ||||||
|  | ;; CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS | ||||||
|  | ;; OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, | ||||||
|  | ;; NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | ||||||
|  | ;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||||
|  | ;; | ||||||
|  | 
 | ||||||
|  | (declare (unit duck)) | ||||||
|  | 
 | ||||||
|  | (module | ||||||
|  |  duck | ||||||
|  |  ( | ||||||
|  |   module* | ||||||
|  |   duck-extract-defines | ||||||
|  |   duck-extract-doc | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  |  (import scheme | ||||||
|  | 	 (chicken base) | ||||||
|  | 	 (chicken syntax)) | ||||||
|  | 
 | ||||||
|  |  (define-syntax duck-extract-defines | ||||||
|  |    (syntax-rules | ||||||
|  |        (define define/doc | ||||||
|  | 	 make-parameter | ||||||
|  | 	 define* define*/doc | ||||||
|  | 	 define-syntax define-syntax/doc) | ||||||
|  |      ((_ (define-syntax id transformer)) | ||||||
|  |       (define-syntax id transformer)) | ||||||
|  |      ((_ (define-syntax/doc id doc transformer)) | ||||||
|  |       (define-syntax id transformer)) | ||||||
|  | 
 | ||||||
|  |      ((_ (define var val)) | ||||||
|  |       (define var val)) | ||||||
|  |      ((_ (define/doc var doc val)) | ||||||
|  |       (define var val)) | ||||||
|  | 
 | ||||||
|  |      ((_ (define/doc var doc arg (make-parameter val))) | ||||||
|  |       (define var (make-parameter val))) | ||||||
|  | 
 | ||||||
|  |      ((_ (define* var val)) | ||||||
|  |       (define* var val)) | ||||||
|  |      ((_ (define*/doc var doc val)) | ||||||
|  |       (define* var val)) | ||||||
|  | 
 | ||||||
|  |      ((_ (define (proc . args) expr ...)) | ||||||
|  |       (define (proc . args) expr ...)) | ||||||
|  |      ((_ (define/doc (proc . args) doc expr ...)) | ||||||
|  |       (define (proc . args) expr ...)) | ||||||
|  | 
 | ||||||
|  |      ((_ (define* (proc . args) expr ...)) | ||||||
|  |       (define* (proc . args) expr ...)) | ||||||
|  |      ((_ (define*/doc (proc . args) doc expr ...)) | ||||||
|  |       (define* (proc . args) expr ...)) | ||||||
|  | 
 | ||||||
|  |      ((_ expr) | ||||||
|  |       expr))) | ||||||
|  | 
 | ||||||
|  |  (define-syntax duck-extract-doc | ||||||
|  |    (syntax-rules (define/doc make-parameter define*/doc define-syntax/doc syntax-rules) | ||||||
|  |      ((_ (define-syntax/doc id doc | ||||||
|  | 	   (syntax-rules (literal ...) | ||||||
|  | 	     (pattern template) ...))) | ||||||
|  |       (list 'STX 'id `doc '(pattern ...))) | ||||||
|  |      ((_ (define-syntax/doc id doc transformer)) | ||||||
|  |       (list 'STX 'id `doc)) | ||||||
|  |      ((_ (define/doc (proc . args) doc expr ...)) | ||||||
|  |       (list 'FUN 'proc `doc 'args)) | ||||||
|  |      ((_ (define*/doc (proc . args) doc expr ...)) | ||||||
|  |       (list 'FUN 'proc `doc 'args)) | ||||||
|  |      ((_ (define/doc var doc arg (make-parameter val))) | ||||||
|  |       (list 'PAR 'var `doc 'arg 'val)) | ||||||
|  |      ((_ (define*/doc var doc arg (make-parameter val))) | ||||||
|  |       (list 'PAR 'var `doc 'arg 'val)) | ||||||
|  |      ((_ (define/doc var doc val)) | ||||||
|  |       (list 'VAR 'var `doc 'val)) | ||||||
|  |      ((_ (define*/doc var doc val)) | ||||||
|  |       (list 'VAR 'var `doc 'val)) | ||||||
|  |      ((_ expr) | ||||||
|  |       #f))) | ||||||
|  | 
 | ||||||
|  |  (define-syntax module* | ||||||
|  |    (syntax-rules (#:doc) | ||||||
|  |      ((_ modname #:doc (doc ...) exports expr ...) | ||||||
|  |       (module | ||||||
|  |        modname | ||||||
|  |        exports | ||||||
|  |        (import scheme | ||||||
|  | 	       (chicken module) | ||||||
|  | 	       (chicken base) | ||||||
|  | 	       duck | ||||||
|  | 	       ) | ||||||
|  |        (export modname) | ||||||
|  |        (duck-extract-defines expr) ... | ||||||
|  |        (define modname | ||||||
|  | 	 (list (list 'MOD 'modname `(doc ...)) | ||||||
|  | 	       (duck-extract-doc expr) ...)))) | ||||||
|  |      ((_ modname expr ...) | ||||||
|  |       (module* modname #:doc () expr ...)))) | ||||||
|  |   | ||||||
|  |  ) | ||||||
							
								
								
									
										112
									
								
								backend/util-proc.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										112
									
								
								backend/util-proc.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,112 @@ | ||||||
|  | ;; | ||||||
|  | ;; util-proc.scm | ||||||
|  | ;; | ||||||
|  | ;; Auxiliary procedure functions. | ||||||
|  | ;; | ||||||
|  | ;; ISC License | ||||||
|  | ;; | ||||||
|  | ;; Copyright 2023 Brmlab, z.s. | ||||||
|  | ;; Dominik Pantůček <dominik.pantucek@trustica.cz> | ||||||
|  | ;; | ||||||
|  | ;; Permission to use, copy, modify, and/or distribute this software | ||||||
|  | ;; for any purpose with or without fee is hereby granted, provided | ||||||
|  | ;; that the above copyright notice and this permission notice appear | ||||||
|  | ;; in all copies. | ||||||
|  | ;;  | ||||||
|  | ;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL | ||||||
|  | ;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED | ||||||
|  | ;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE | ||||||
|  | ;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR | ||||||
|  | ;; CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS | ||||||
|  | ;; OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, | ||||||
|  | ;; NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | ||||||
|  | ;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||||
|  | ;; | ||||||
|  | 
 | ||||||
|  | (declare (unit util-proc)) | ||||||
|  | 
 | ||||||
|  | (import duck) | ||||||
|  | 
 | ||||||
|  | (module* | ||||||
|  |  util-proc | ||||||
|  |  #:doc ("This module provides a few simple procedures for querying properties | ||||||
|  | of other procedures.") | ||||||
|  |  ( | ||||||
|  |   improper-list-info | ||||||
|  | 
 | ||||||
|  |   procedure-arity=? | ||||||
|  |   procedure-arity>=? | ||||||
|  |   procedure-arity>? | ||||||
|  | 
 | ||||||
|  |   procedure-num-args | ||||||
|  |   procedure-arg-names | ||||||
|  |   ) | ||||||
|  | 
 | ||||||
|  |  (import scheme | ||||||
|  | 	 (chicken base)) | ||||||
|  |   | ||||||
|  |  (define/doc (improper-list-info lst) | ||||||
|  |    ("Returns two values: the proper part of the list length and #t if | ||||||
|  | there is an improper list end") | ||||||
|  |    (let loop ((lst lst) | ||||||
|  | 	      (len 0)) | ||||||
|  |      (if (symbol? lst) | ||||||
|  | 	 (values len #t) | ||||||
|  | 	 (if (null? lst) | ||||||
|  | 	     (values len #f) | ||||||
|  | 	     (loop (cdr lst) | ||||||
|  | 		   (add1 len)))))) | ||||||
|  | 
 | ||||||
|  |  ;; Returns two values: the number of mandatory arguments and | ||||||
|  |  ;; information whether the procedure accepts optional arguments | ||||||
|  |  (define (procedure-arity-info proc) | ||||||
|  |    (let-values (((len rest?) (improper-list-info (procedure-information proc)))) | ||||||
|  |      (values (sub1 len) rest?))) | ||||||
|  | 
 | ||||||
|  |  (define/doc ((procedure-arity=? n) proc) | ||||||
|  |    ("* ```n``` - integer representing the number of arguments | ||||||
|  | * ```proc``` - procedure to query | ||||||
|  | 
 | ||||||
|  | Returns true if the procedure ```proc``` accepts exactly ```n``` | ||||||
|  | arguments.") | ||||||
|  |    (let-values (((args rest?) (procedure-arity-info proc))) | ||||||
|  |      (and (not rest?) | ||||||
|  | 	  (= args n)))) | ||||||
|  | 
 | ||||||
|  |  (define/doc ((procedure-arity>=? n) proc) | ||||||
|  |    ("* ```n``` - integer representing the number of arguments | ||||||
|  | * ```proc``` - procedure to query | ||||||
|  | 
 | ||||||
|  | Returns true if the procedure ```proc``` accepts at least ```n``` | ||||||
|  | arguments.") | ||||||
|  |    (let-values (((args rest?) (procedure-arity-info proc))) | ||||||
|  |      (or rest? | ||||||
|  | 	 (>= args n)))) | ||||||
|  | 
 | ||||||
|  |  (define/doc ((procedure-arity>? n) proc) | ||||||
|  |    ("* ```n``` - integer representing the number of arguments | ||||||
|  | * ```proc``` - procedure to query | ||||||
|  | 
 | ||||||
|  | Returns true if the procedure ```proc``` accepts more than ```n``` | ||||||
|  | arguments.") | ||||||
|  |    (let-values (((args rest?) (procedure-arity-info proc))) | ||||||
|  |      (or rest? | ||||||
|  | 	 (> args n)))) | ||||||
|  | 
 | ||||||
|  |  (define/doc (procedure-num-args proc) | ||||||
|  |    ("* ```proc``` - procedure to check | ||||||
|  | 
 | ||||||
|  | Returns the number of mandatory arguments.") | ||||||
|  |    (let-values (((args rest?) (procedure-arity-info proc))) | ||||||
|  |      args)) | ||||||
|  | 
 | ||||||
|  |  (define/doc (procedure-arg-names proc) | ||||||
|  |    ("* ```proc``` - procedure to check | ||||||
|  | 
 | ||||||
|  | Returns the (possibly improper) list of arguments the procedure | ||||||
|  | ```proc``` accepts. If it accepts arbitrary number of arguments, it is | ||||||
|  | signalled by simple symbol instead of pair at the last position. If it | ||||||
|  | accepts an exact number of arguments, it returns a proper list.") | ||||||
|  |    (cdr (procedure-information proc))) | ||||||
|  | 
 | ||||||
|  |  ) | ||||||
							
								
								
									
										59
									
								
								install-eggs.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								install-eggs.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # install-eggs.sh | ||||||
|  | # | ||||||
|  | # Local installer of CHICKEN eggs required for building. | ||||||
|  | # | ||||||
|  | # ISC License | ||||||
|  | # | ||||||
|  | # Copyright 2023 Brmlab, z.s. | ||||||
|  | # Dominik Pantůček <dominik.pantucek@trustica.cz> | ||||||
|  | # | ||||||
|  | # Permission to use, copy, modify, and/or distribute this software | ||||||
|  | # for any purpose with or without fee is hereby granted, provided | ||||||
|  | # that the above copyright notice and this permission notice appear | ||||||
|  | # in all copies. | ||||||
|  | #  | ||||||
|  | # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL | ||||||
|  | # WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED | ||||||
|  | # WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE | ||||||
|  | # AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR | ||||||
|  | # CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS | ||||||
|  | # OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, | ||||||
|  | # NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | ||||||
|  | # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | # Source root directory | ||||||
|  | owd=$(pwd) | ||||||
|  | cd $(dirname "$0") | ||||||
|  | SRCDIR=$(pwd) | ||||||
|  | cd "$owd" | ||||||
|  | 
 | ||||||
|  | # Make temporary prefix directory (eggs shared throwaway files) | ||||||
|  | TMPDIR=$(mktemp -d) | ||||||
|  | 
 | ||||||
|  | # Installs given egg locally | ||||||
|  | chicken_install() { | ||||||
|  |     echo "Installing $1 ..." | ||||||
|  |     CHICKEN_INSTALL_PREFIX="$TMPDIR" \ | ||||||
|  | 			  CHICKEN_REPOSITORY_PATH="$SRCDIR/eggs":`chicken-install -repository` \ | ||||||
|  | 			  CHICKEN_INSTALL_REPOSITORY="$SRCDIR/eggs" \ | ||||||
|  | 			  chicken-install "$1" 2>&1 | \ | ||||||
|  | 	sed -u 's/^/  /' | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Removes throwaway files | ||||||
|  | chicken_cleanup() { | ||||||
|  |     echo "Cleaning up ..." | ||||||
|  |     rm -fr ${TMPDIR} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | # Always cleanup | ||||||
|  | trap chicken_cleanup INT QUIT | ||||||
|  | 
 | ||||||
|  | # Install required eggs | ||||||
|  | chicken_install spiffy | ||||||
|  | 
 | ||||||
|  | # Normal termination cleanup | ||||||
|  | chicken_cleanup | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue