added automatic variables in (currently only) gnu style.
added switch between make-rule-cml (file make-rule) and make-rule-no-cml
This commit is contained in:
		
							parent
							
								
									c411f67a2c
								
							
						
					
					
						commit
						62be1f7142
					
				| 
						 | 
				
			
			@ -0,0 +1,160 @@
 | 
			
		|||
(define fluid-$@  (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-$<  (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-$?  (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-$^  (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-$+  (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-$*  (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-$@/ (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-/$@ (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-$*/ (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-/$* (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-$</ (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-/$< (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-$^/ (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-/$^ (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-$+/ (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-/$+ (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-$?/ (make-preserved-thread-fluid (list)))
 | 
			
		||||
(define fluid-/$? (make-preserved-thread-fluid (list)))
 | 
			
		||||
 | 
			
		||||
(define (bind-fluids-gnu target prereqs prereqs-results thunk)
 | 
			
		||||
  (let (($@ target)
 | 
			
		||||
	($< (cond 
 | 
			
		||||
	     ((and (list? prereqs) (not (null? prereqs))) (car prereqs))
 | 
			
		||||
	     ((and (list? prereqs) (null? prereqs)) "")
 | 
			
		||||
	     (else prereqs)))
 | 
			
		||||
	($? (cond 
 | 
			
		||||
	     ((not (list? prereqs)) 
 | 
			
		||||
	      (let ((newer-prereq (list)))
 | 
			
		||||
		(if (car (rule-result-wants-build? 
 | 
			
		||||
			  (car prereqs-results)))
 | 
			
		||||
		    (cons newer-prereq newer-prereq)
 | 
			
		||||
		    newer-prereq)))
 | 
			
		||||
	     ((and (list? prereqs) (null? prereqs)) prereqs)
 | 
			
		||||
	     ((list? prereqs)
 | 
			
		||||
	      (let for-prereqs ((newer-prereqs (list))
 | 
			
		||||
				(current-prereq (car prereqs))
 | 
			
		||||
				(todo-prereqs (cdr prereqs))
 | 
			
		||||
				(current-result (car prereqs-results))
 | 
			
		||||
				(todo-results (cdr prereqs-results)))
 | 
			
		||||
		(let ((build? (if (is-rule-result? current-result)
 | 
			
		||||
				  (car (rule-result-wants-build?
 | 
			
		||||
					current-result))
 | 
			
		||||
				  #f)))
 | 
			
		||||
		  (if build?
 | 
			
		||||
		      (if (not (null? todo-prereqs))
 | 
			
		||||
			  (for-prereqs (cons current-prereq 
 | 
			
		||||
					     newer-prereqs)
 | 
			
		||||
				       (car todo-prereqs) 
 | 
			
		||||
				       (cdr todo-prereqs)
 | 
			
		||||
				       (car todo-results) 
 | 
			
		||||
				       (cdr todo-results))
 | 
			
		||||
			  newer-prereqs)
 | 
			
		||||
		      (if (not (null? todo-prereqs))
 | 
			
		||||
			  (for-prereqs newer-prereqs
 | 
			
		||||
				       (car todo-prereqs) 
 | 
			
		||||
				       (cdr todo-prereqs)
 | 
			
		||||
				       (car todo-results) 
 | 
			
		||||
				       (cdr todo-results))
 | 
			
		||||
			  newer-prereqs)))))
 | 
			
		||||
	     (else (error "no match in bind-fluids-gnu fluid-$?"))))
 | 
			
		||||
	($^ (delete-duplicates! prereqs))
 | 
			
		||||
	($+ prereqs)
 | 
			
		||||
	($* ""))
 | 
			
		||||
 | 
			
		||||
    (let-thread-fluids fluid-$@ $@ ;; $@ : file name of the target
 | 
			
		||||
		       ;; $% : target member name, when target is an archive member.
 | 
			
		||||
		       ;; fluid-$% target
 | 
			
		||||
		       
 | 
			
		||||
		       ;; $< : name of the first prerequisite
 | 
			
		||||
		       fluid-$< $<
 | 
			
		||||
		       
 | 
			
		||||
		       ;; $? : names of all prerequisites that are newer than target
 | 
			
		||||
		       fluid-$? $?
 | 
			
		||||
 | 
			
		||||
		       ;; $^ : names of all the prerequisites without duplicates 
 | 
			
		||||
		       ;; $+ : names of all the prerequisites
 | 
			
		||||
		       fluid-$^ $^
 | 
			
		||||
		       fluid-$+ $+
 | 
			
		||||
 | 
			
		||||
		       ;; $* : The stem with which an implicit rule matches.
 | 
			
		||||
		       fluid-$* $*
 | 
			
		||||
	      
 | 
			
		||||
		       ;; we have no parens so we will use the following *scheme*:
 | 
			
		||||
		       ;; e.g. for $@: $@/ denotes directory part of $@
 | 
			
		||||
		       ;; while        /$@ denotes file within directory of $@
 | 
			
		||||
		       ;;
 | 
			
		||||
		       ;; $(@D), $(@F) : directory part and file-within-directory
 | 
			
		||||
		       fluid-$@/ (file-name-directory $@)
 | 
			
		||||
		       fluid-/$@ (file-name-nondirectory $@)
 | 
			
		||||
 | 
			
		||||
		       ;; $(*D), $(*F) : directory part and file-within-directory
 | 
			
		||||
		       fluid-$*/ (file-name-directory $*)
 | 
			
		||||
		       fluid-/$* (file-name-nondirectory $*)
 | 
			
		||||
 | 
			
		||||
		       ;; $(%D), $(%F) : directory part and file-within-directory
 | 
			
		||||
;	$%/ (file-name-directory fluid-$%)
 | 
			
		||||
;	/$% (file-name-nondirectory fluid-$%)
 | 
			
		||||
	
 | 
			
		||||
		       ;; $(<D), $(<F) : directory part and file-within-directory
 | 
			
		||||
		       fluid-$</ (file-name-directory $<)
 | 
			
		||||
		       fluid-/$< (file-name-nondirectory $<)
 | 
			
		||||
 | 
			
		||||
		       ;; $(^D), $(^F) : directory part and file-within-directory
 | 
			
		||||
		       fluid-$^/ (map (lambda (d) 
 | 
			
		||||
					(file-name-directory d))
 | 
			
		||||
				      $^)
 | 
			
		||||
		       fluid-/$^ (map (lambda (f) 
 | 
			
		||||
					(file-name-nondirectory f))
 | 
			
		||||
				      $^)
 | 
			
		||||
	      
 | 
			
		||||
		     ;; $(+D), $(+F) : directory part and file-within-directory
 | 
			
		||||
		       fluid-$+/ (map (lambda (d) 
 | 
			
		||||
					(file-name-directory d))
 | 
			
		||||
				      $+)
 | 
			
		||||
		       fluid-/$+ (map (lambda (f) 
 | 
			
		||||
					(file-name-nondirectory f))
 | 
			
		||||
				      $+)
 | 
			
		||||
	      
 | 
			
		||||
		       ;; $(?D), $(?F) : directory part and the
 | 
			
		||||
		       ;;                file-within-directory part of $?.
 | 
			
		||||
		       fluid-$?/ (map (lambda (d) 
 | 
			
		||||
					(file-name-directory d))
 | 
			
		||||
				      $?)
 | 
			
		||||
		       fluid-/$? (map (lambda (f) 
 | 
			
		||||
					(file-name-nondirectory f))
 | 
			
		||||
				      $?)
 | 
			
		||||
		       thunk)))
 | 
			
		||||
 | 
			
		||||
(define ($@)  (thread-fluid fluid-$@))
 | 
			
		||||
(define ($<)  (thread-fluid fluid-$<))
 | 
			
		||||
(define ($?)  (thread-fluid fluid-$?))
 | 
			
		||||
(define ($^)  (thread-fluid fluid-$^))
 | 
			
		||||
(define ($+)  (thread-fluid fluid-$+))
 | 
			
		||||
(define ($*)  (thread-fluid fluid-$*))
 | 
			
		||||
(define ($@/) (thread-fluid fluid-$@/))
 | 
			
		||||
(define (/$@) (thread-fluid fluid-/$@))
 | 
			
		||||
(define ($*/) (thread-fluid fluid-$*/))
 | 
			
		||||
(define (/$*) (thread-fluid fluid-/$*))
 | 
			
		||||
(define ($</) (thread-fluid fluid-$</))
 | 
			
		||||
(define (/$<) (thread-fluid fluid-/$<))
 | 
			
		||||
(define ($^/) (thread-fluid fluid-$^/))
 | 
			
		||||
(define (/$^) (thread-fluid fluid-/$^))
 | 
			
		||||
(define ($+/) (thread-fluid fluid-$+/))
 | 
			
		||||
(define (/$+) (thread-fluid fluid-/$+))
 | 
			
		||||
(define ($?/) (thread-fluid fluid-$?/))
 | 
			
		||||
(define (/$?) (thread-fluid fluid-/$?))
 | 
			
		||||
 | 
			
		||||
(define (bind-fluids-human target prereqs prereqs-results thunk)
 | 
			
		||||
  (display "not yet implemented."))
 | 
			
		||||
 | 
			
		||||
;;; (define (bind-fluids-human target prereqs prereqs-results thunk)
 | 
			
		||||
;;;   (lambda () 
 | 
			
		||||
;;;     (bind-fluids-gnu target prereqs prereqs-results
 | 
			
		||||
;;; 		     (lambda () 
 | 
			
		||||
;;; 		       (let ((target-fname (make-preserved-thread-fluid $@))
 | 
			
		||||
;;; 			     (prereqs-first (make-preserved-thread-fluid $<))
 | 
			
		||||
;;; 			     (prereqs-to-build (make-preserved-thread-fluid $?))
 | 
			
		||||
;;; 			     (prereqs-unique (make-preserved-thread-fluid $^))
 | 
			
		||||
;;; 			     (prereqs (make-preserved-thread-fluid $+)))
 | 
			
		||||
;;; 			 (thunk))))))
 | 
			
		||||
							
								
								
									
										81
									
								
								packages.scm
								
								
								
								
							
							
						
						
									
										81
									
								
								packages.scm
								
								
								
								
							| 
						 | 
				
			
			@ -140,7 +140,7 @@
 | 
			
		|||
	  rule-result-build-func
 | 
			
		||||
	  rule-make))
 | 
			
		||||
 | 
			
		||||
(define-structure make-rule make-rule-interface
 | 
			
		||||
(define-structure make-rule-cml make-rule-interface
 | 
			
		||||
  (open scheme-with-scsh
 | 
			
		||||
	locks
 | 
			
		||||
	with-lock
 | 
			
		||||
| 
						 | 
				
			
			@ -149,23 +149,12 @@
 | 
			
		|||
	srfi-9
 | 
			
		||||
	finite-types
 | 
			
		||||
	collect-channels
 | 
			
		||||
	dfs
 | 
			
		||||
	(with-prefix rendezvous cml-rv/)
 | 
			
		||||
	(with-prefix rendezvous-channels cml-sync-ch/))
 | 
			
		||||
  (files make-rule))
 | 
			
		||||
 | 
			
		||||
(define-interface make-rule-no-cml-interface
 | 
			
		||||
  (export make-rule
 | 
			
		||||
	  is-rule?
 | 
			
		||||
	  make-empty-rule-set
 | 
			
		||||
	  rule-set-add
 | 
			
		||||
	  is-rule-set?
 | 
			
		||||
	  make-rule-result
 | 
			
		||||
	  is-rule-result?
 | 
			
		||||
	  rule-result-wants-build?
 | 
			
		||||
	  rule-result-build-func
 | 
			
		||||
	  rule-make))
 | 
			
		||||
 | 
			
		||||
(define-structure make-rule-no-cml make-rule-no-cml-interface
 | 
			
		||||
(define-structure make-rule-no-cml make-rule-interface
 | 
			
		||||
  (open scheme-with-scsh
 | 
			
		||||
	locks
 | 
			
		||||
	with-lock
 | 
			
		||||
| 
						 | 
				
			
			@ -175,22 +164,23 @@
 | 
			
		|||
 | 
			
		||||
(define-interface macros-interface
 | 
			
		||||
  (export (makefile :syntax)
 | 
			
		||||
	  (rule :syntax)
 | 
			
		||||
	  (file :syntax)
 | 
			
		||||
	  (makefile-rule :syntax)
 | 
			
		||||
	  (is-out-of-date? :syntax)
 | 
			
		||||
	  (md5 :syntax)
 | 
			
		||||
	  (rule-md5 :syntax)
 | 
			
		||||
	  (file-md5 :syntax)
 | 
			
		||||
	  (phony :syntax)
 | 
			
		||||
	  (always :syntax)
 | 
			
		||||
	  (is-out-of-date! :syntax)
 | 
			
		||||
	  (once :syntax)
 | 
			
		||||
	  (rule-once :syntax)))
 | 
			
		||||
	  (file-once :syntax)))
 | 
			
		||||
 | 
			
		||||
(define-structure macros macros-interface
 | 
			
		||||
  (open scheme-with-scsh
 | 
			
		||||
	srfi-1
 | 
			
		||||
	to-rule-set
 | 
			
		||||
	dfs
 | 
			
		||||
	autovars
 | 
			
		||||
	templates
 | 
			
		||||
	make-rule)
 | 
			
		||||
  (files macros))
 | 
			
		||||
| 
						 | 
				
			
			@ -215,8 +205,9 @@
 | 
			
		|||
(define-interface dfs-interface
 | 
			
		||||
  (export make-dfs
 | 
			
		||||
	  dfs->list
 | 
			
		||||
	  dfs
 | 
			
		||||
	  dfs-dag-show
 | 
			
		||||
	  dfs))
 | 
			
		||||
	  sort))
 | 
			
		||||
 | 
			
		||||
(define-structure dfs dfs-interface
 | 
			
		||||
  (open scheme-with-scsh
 | 
			
		||||
| 
						 | 
				
			
			@ -238,7 +229,7 @@
 | 
			
		|||
  (files misc))
 | 
			
		||||
 | 
			
		||||
(define-interface templates-interface
 | 
			
		||||
  (export make-rule-build-func
 | 
			
		||||
  (export make-file-build-func
 | 
			
		||||
	  make-md5-build-func
 | 
			
		||||
	  make-always-build-func
 | 
			
		||||
	  make-once-build-func
 | 
			
		||||
| 
						 | 
				
			
			@ -249,10 +240,60 @@
 | 
			
		|||
 | 
			
		||||
(define-structure templates templates-interface
 | 
			
		||||
  (open scheme-with-scsh
 | 
			
		||||
	autovars
 | 
			
		||||
	srfi-1
 | 
			
		||||
	big-util
 | 
			
		||||
	srfi-13)
 | 
			
		||||
  (files templates))
 | 
			
		||||
 | 
			
		||||
(define-interface autovars-interface
 | 
			
		||||
  (export bind-fluids-gnu
 | 
			
		||||
	  fluid-$@  
 | 
			
		||||
	  fluid-$<  
 | 
			
		||||
	  fluid-$?  
 | 
			
		||||
	  fluid-$^  
 | 
			
		||||
	  fluid-$+  
 | 
			
		||||
	  fluid-$*  
 | 
			
		||||
	  fluid-$@/ 
 | 
			
		||||
	  fluid-/$@ 
 | 
			
		||||
	  fluid-$*/ 
 | 
			
		||||
	  fluid-/$* 
 | 
			
		||||
	  fluid-$</ 
 | 
			
		||||
	  fluid-/$< 
 | 
			
		||||
	  fluid-$^/ 
 | 
			
		||||
	  fluid-/$^ 
 | 
			
		||||
	  fluid-$+/ 
 | 
			
		||||
	  fluid-/$+ 
 | 
			
		||||
	  fluid-$?/ 
 | 
			
		||||
	  fluid-/$? 
 | 
			
		||||
	  $@  
 | 
			
		||||
	  $<  
 | 
			
		||||
	  $?  
 | 
			
		||||
	  $^  
 | 
			
		||||
	  $+  
 | 
			
		||||
	  $*  
 | 
			
		||||
	  $@/ 
 | 
			
		||||
	  /$@ 
 | 
			
		||||
	  $*/ 
 | 
			
		||||
	  /$* 
 | 
			
		||||
	  $</ 
 | 
			
		||||
	  /$< 
 | 
			
		||||
	  $^/ 
 | 
			
		||||
	  /$^ 
 | 
			
		||||
	  $+/ 
 | 
			
		||||
	  /$+ 
 | 
			
		||||
	  $?/ 
 | 
			
		||||
	  /$? 
 | 
			
		||||
	  bind-fluids-human))
 | 
			
		||||
 | 
			
		||||
(define-structure autovars autovars-interface
 | 
			
		||||
  (open scheme-with-scsh
 | 
			
		||||
	make-rule
 | 
			
		||||
	thread-fluids
 | 
			
		||||
	srfi-1
 | 
			
		||||
	srfi-13)
 | 
			
		||||
  (files autovars))
 | 
			
		||||
 | 
			
		||||
(define-structure make (export make)
 | 
			
		||||
  (open scheme-with-scsh
 | 
			
		||||
	srfi-1
 | 
			
		||||
| 
						 | 
				
			
			@ -261,3 +302,5 @@
 | 
			
		|||
	to-rule-set
 | 
			
		||||
	make-rule)
 | 
			
		||||
  (files make))
 | 
			
		||||
 | 
			
		||||
(define make-rule make-rule-cml)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue