aboutsummaryrefslogtreecommitdiff
path: root/src/bigloo/configure.bgl
blob: e100d8d0cfa70588461c514f7c12872656fa3e20 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
;*=====================================================================*/
;*    serrano/prgm/project/skribe/src/bigloo/configure.bgl             */
;*    -------------------------------------------------------------    */
;*    Author      :  Manuel Serrano                                    */
;*    Creation    :  Wed Jul 23 18:42:21 2003                          */
;*    Last change :  Mon Feb  9 06:51:11 2004 (serrano)                */
;*    Copyright   :  2003-04 Manuel Serrano                            */
;*    -------------------------------------------------------------    */
;*    The general configuration options.                               */
;*=====================================================================*/

;*---------------------------------------------------------------------*/
;*    The module                                                       */
;*---------------------------------------------------------------------*/
(module skribe_configure
   (export (skribe-release)
	   (skribe-url)
	   (skribe-doc-dir)
	   (skribe-ext-dir)
	   (skribe-default-path)
	   (skribe-scheme)
	   
	   (skribe-configure . opt)
	   (skribe-enforce-configure . opt)))

;*---------------------------------------------------------------------*/
;*    skribe-configuration ...                                         */
;*---------------------------------------------------------------------*/
(define (skribe-configuration)
   `((:release ,(skribe-release))
     (:scheme ,(skribe-scheme))
     (:url ,(skribe-url))
     (:doc-dir ,(skribe-doc-dir))
     (:ext-dir ,(skribe-ext-dir))
     (:default-path ,(skribe-default-path))))

;*---------------------------------------------------------------------*/
;*    skribe-configure ...                                             */
;*---------------------------------------------------------------------*/
(define (skribe-configure . opt)
   (let ((conf (skribe-configuration)))
      (cond
	 ((null? opt)
	  conf)
	 ((null? (cdr opt))
	  (let ((cell (assq (car opt) conf)))
	     (if (pair? cell)
		 (cadr cell)
		 'void)))
	 (else
	  (let loop ((opt opt))
	     (cond
		((null? opt)
		 #t)
		((not (keyword? (car opt)))
		 #f)
		((or (null? (cdr opt)) (keyword? (cadr opt)))
		 #f)
		(else
		 (let ((cell (assq (car opt) conf)))
		    (if (and (pair? cell)
			     (if (procedure? (cadr opt))
				 ((cadr opt) (cadr cell))
				 (equal? (cadr opt) (cadr cell))))
			(loop (cddr opt))
			#f)))))))))

;*---------------------------------------------------------------------*/
;*    skribe-enforce-configure ...                                     */
;*---------------------------------------------------------------------*/
(define (skribe-enforce-configure . opt)
   (let loop ((o opt))
      (when (pair? o)
	 (cond
	    ((or (not (keyword? (car o)))
		 (null? (cdr o)))
	     (error 'skribe-enforce-configure
		    "Illegal enforcement"
		    opt))
	    ((skribe-configure (car o) (cadr o))
	     (loop (cddr o)))
	    (else
	     (error 'skribe-enforce-configure
		    (format "Configuration mismatch: ~a" (car o))
		    (if (procedure? (cadr o))
			(format "provided `~a'"
				(skribe-configure (car o)))
			(format "provided `~a', required `~a'"
				(skribe-configure (car o))
				(cadr o)))))))))