chicken-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-hackers] [PATCH] remove obsolete scripts


From: Felix
Subject: [Chicken-hackers] [PATCH] remove obsolete scripts
Date: Tue, 29 Nov 2011 08:10:32 +0100 (CET)

The attached patch removes some scripts from the core repo that
don't belong in there, or which are obsolete. Non-core extensions
are not required anymore (with the exception of the manual->HTML
generation).
>From fc18697f43f62b223cbca53e7ede31784bb217f6 Mon Sep 17 00:00:00 2001
From: felix <address@hidden>
Date: Tue, 29 Nov 2011 08:07:23 +0100
Subject: [PATCH] removed some obsolete scripts

---
 distribution/manifest   |    1 +
 rules.make              |    2 +-
 scripts/README          |   14 --
 scripts/dpkg-eggs.scm   |  151 ---------------
 scripts/make-eggdoc.scm |   59 ------
 scripts/makedist.scm    |   56 ++++--
 scripts/tools.scm       |  469 -----------------------------------------------
 scripts/wiki2html.scm   |  299 ------------------------------
 8 files changed, 41 insertions(+), 1010 deletions(-)
 delete mode 100644 scripts/dpkg-eggs.scm
 delete mode 100644 scripts/make-eggdoc.scm
 delete mode 100644 scripts/tools.scm
 delete mode 100644 scripts/wiki2html.scm

diff --git a/distribution/manifest b/distribution/manifest
index ba7001a..d573346 100644
--- a/distribution/manifest
+++ b/distribution/manifest
@@ -293,6 +293,7 @@ CHICKEN.icns
 scripts/reconstruct-egg-name.scm
 scripts/mini-salmonella.scm
 scripts/make-wrapper.scm
+scripts/makedist.scm
 manual-html/Accessing external objects.html
 manual-html/Acknowledgements.html
 manual-html/Basic mode of operation.html
diff --git a/rules.make b/rules.make
index 929b0a3..e35cb65 100644
--- a/rules.make
+++ b/rules.make
@@ -601,7 +601,7 @@ setup-download.c: $(SRCDIR)setup-download.scm setup-api.c
 distfiles: $(DISTFILES)
 
 dist: distfiles html
-       CSI=$(CSI) $(CSI) -s $(SRCDIR)scripts$(SEP)makedist.scm 
--platform=$(PLATFORM) CHICKEN=$(CHICKEN)
+       CSI=$(CSI) $(CSI) -s $(SRCDIR)scripts$(SEP)makedist.scm -platform 
$(PLATFORM) CHICKEN=$(CHICKEN)
 
 # Jim's `manual-labor' must be installed (just run "chicken-install 
manual-labor")
 html:
diff --git a/scripts/README b/scripts/README
index e427a1f..ca84574 100644
--- a/scripts/README
+++ b/scripts/README
@@ -4,20 +4,11 @@ README for scripts/
 
 This directory contains a couple of things that might be useful:
 
-  tools.scm
-
-    Helper functions for some of the scripts here.
-
   test-dist.sh
 
     Takes a platform-designator and the path to a tarball and unpacks,
     builds and tests the chicken distribution contained therein.
 
-  wiki2html.scm
-
-    A simple svnwiki -> HTML translator used for the manual. Needs
-    `htmlprag' and `matchable' eggs installed.
-
   makedist.scm
 
     Creates a distribution tarball from a chicken svn checkout.
@@ -28,8 +19,3 @@ This directory contains a couple of things that might be 
useful:
     takes a path to a local checkout of the extensions repository
     and compiles each egg from scratch, reporting success or 
     failure.
-
-  identify-branch
-
-    Obtains the branchname, if this is a git(1) checkout, otherwise
-    does nothing.
diff --git a/scripts/dpkg-eggs.scm b/scripts/dpkg-eggs.scm
deleted file mode 100644
index a0b9da1..0000000
--- a/scripts/dpkg-eggs.scm
+++ /dev/null
@@ -1,151 +0,0 @@
-;;
-;; Given a directory tree with egg directories, build Debian packages
-;; for all eggs that have a debian subdirectory.
-;;
-;; Usage: dpkg-eggs --eggdir=DIR --output-dir=DIR
-;;
-
-(require-extension srfi-1)
-(require-extension srfi-13)
-(require-extension posix)
-(require-extension regex)
-(require-extension utils)
-(require-extension args)
-
-(include "tools.scm")
-
-(define s+ string-append)
-
-(define opts
-  `(
-    ,(args:make-option (extension-path)       (required: "DIR")    
-                      (s+ "path to stream-wiki extensions"))
-    ,(args:make-option (wiki-dir)       (required: "DIR")    
-                      (s+ "use wiki documentation in directory DIR"))
-    ,(args:make-option (egg-dir)       (required: "DIR")    
-                      (s+ "operate on eggs in directory DIR"))
-    ,(args:make-option (output-dir)       (required: "DIR")    
-                      (s+ "place Debian packages in directory DIR (will be 
created if it does not exist)"))
-    ,(args:make-option (verbose)       #:none
-                      (s+ "enable verbose mode")
-                      (set! *verbose* #t))
-    ,(args:make-option (exclude)       (required: "EGGS")    
-                      (s+ "a comma separated list of eggs to exclude from 
building"))
-    ,(args:make-option (h help)  #:none               "Print help"
-                      (usage))
-
-    ))
-
-
-;; Use args:usage to generate a formatted list of options (from OPTS),
-;; suitable for embedding into help text.
-(define (usage)
-  (print "Usage: " (car (argv)) " options... [list of eggs to be built] ")
-  (newline)
-  (print "The following options are recognized: ")
-  (newline)
-  (print (parameterize ((args:indent 5)) (args:usage opts)))
-  (exit 1))
-
-
-;; Process arguments and collate options and arguments into OPTIONS
-;; alist, and operands (filenames) into OPERANDS.  You can handle
-;; options as they are processed, or afterwards.
-(define args    (command-line-arguments))
-(set!-values (options operands)  (args:parse args opts))
-
-(define dirsep (string ##sys#pathname-directory-separator))
-
-(define (read-subdirs path)
-  (find-files path directory? cons (list) 0))
-
-;; Compare versions of the format x.x...
-(define (version< v1 v2)
-  (let ((v1 (string-split v1 "."))
-       (v2 (string-split v2 ".")))
-    (every (lambda (s1 s2) 
-            (let ((n1 (string->number s1))
-                  (n2 (string->number s2)))
-              (cond ((and n1 n2)  (<= n1 n2))
-                    (else (string<= s1 s2)))))
-          v1 v2)))
-           
-;; Find the latest release in a given egg directory 
-(define (find-latest-release path)
-  (let ((tags (s+ path dirsep "tags")))
-    (cond ((file-exists? tags) 
-          (let ((lst (filter-map (lambda (x) (and (not (string=? 
(pathname-strip-directory x) ".svn")) x))
-                                 (read-subdirs tags)))
-                (cmp (lambda (x y) (version< (pathname-strip-directory x) 
(pathname-strip-directory y)))))
-            (if (pair? lst) (car (reverse (sort lst cmp))) path)))
-         (else path))))
-           
-;; Find the debian subdirectory in a given egg directory
-(define (find-debian-subdir path . rest)
-  (let-optionals rest ((release (find-latest-release path)))
-    (cond ((file-exists? (s+ path dirsep "trunk" dirsep "debian")) => identity)
-         ((file-exists? (s+ release dirsep "debian")) => identity)
-         (else #f))))
-           
-;; Find wiki documentation for given egg
-(define (find-wiki-doc name wikidir)
-  (cond ((file-exists? (s+ wikidir dirsep name)) => identity)
-       (else #f)))
-
-(define (build-deb eggdir wiki-dir output-dir ext-path path)
-  (let* ((name     (pathname-strip-directory path))
-        (release  (find-latest-release path))
-        (debdir   (find-debian-subdir path release)))
-    (if debdir
-       (let ((start      (cwd))
-             (build-dir  (s+ output-dir dirsep name))
-             (doc        (cond ((file-exists? (s+ release dirsep name 
".html")) => identity)
-                               ((and wiki-dir (file-exists? (s+ wiki-dir 
dirsep name))) => identity)
-                               (else #f))))
-         (message "Release directory is ~a" release)
-         (message "debian subdirectory found in ~a" path)
-         (run (rm -rf ,build-dir))
-         (run (cp -R ,release ,build-dir))
-         (run (cp -R ,debdir ,build-dir))
-         (if (and doc (not (string-suffix? ".html" doc)))
-             (let ((html-path (s+ "html/" name ".html")))
-               (run (csi -s ,(cond ((file-exists? (s+ start "/makehtml.scm")) 
=> identity)
-                                   (else 'makehtml.scm))
-                         ,(s+ "--extension-path=" ext-path) 
-                         ,(s+ "--wikipath=" wiki-dir) 
-                         ,(s+ "--only=" name)))
-               (run (cp ,html-path ,build-dir))))
-         (cd build-dir)
-         (run (chmod a+rx debian/rules))
-         (run (,(s+ "EGG_TREE=\"" eggdir "\"") dpkg-buildpackage -us -uc))
-         (cd start))
-       (message "No debian subdirectory found in ~a" path))))
-
-(define (main options operands)
-  (let ((opt_wikidir   (alist-ref 'wiki-dir options))
-       (opt_eggdir    (alist-ref 'egg-dir options))
-       (opt_extpath   (alist-ref 'extension-path options))
-       (opt_exclude ((lambda (x) (and x (string-split x ","))) (alist-ref 
'exclude options)))
-       (opt_output-dir (alist-ref 'output-dir options)))
-    (if (not (and opt_eggdir opt_output-dir))
-       (begin
-         (error-message "Both egg directory and output directory must be 
specified!")
-         (usage)))
-    (message "Egg directory tree: ~a" opt_eggdir)
-    (message "Output directory tree: ~a" opt_output-dir)
-    ;; make sure target dir exists
-    (if (not (file-exists? opt_output-dir))
-       (begin
-         (message "Creating directory ~a" opt_output-dir)
-         (create-directory opt_output-dir)))
-    (let ((eggdirs (filter-map 
-                   (lambda (x) (and (not (member (pathname-strip-directory x) 
opt_exclude)) x))
-                   (or (and (pair? operands) (map (lambda (x) (s+ opt_eggdir 
dirsep (->string x))) operands))
-                       (read-subdirs opt_eggdir)))))
-      (if (null? eggdirs)
-         (message "No egg directories found in ~a" opt_eggdir)
-         (message "Found egg directories: ~a" eggdirs))
-      (for-each (lambda (x) (build-deb opt_eggdir opt_wikidir opt_output-dir 
opt_extpath x))
-               eggdirs))))
-
-(main options operands)
diff --git a/scripts/make-eggdoc.scm b/scripts/make-eggdoc.scm
deleted file mode 100644
index d92f2e0..0000000
--- a/scripts/make-eggdoc.scm
+++ /dev/null
@@ -1,59 +0,0 @@
-;;;; make-eggdoc.scm - create HTML files for eggs that use eggdoc.
-
-(include "tools.scm")
-
-(use setup-download matchable data-structures regex)
-
-(import foreign)
-
-(define csi (foreign-value "C_CSI_PROGRAM" c-string))
-
-(define *help* #f)
-(define *docroot* ".")
-
-(define *major-version* (##sys#fudge 41))
-
-(define (d fstr . args)
-  (fprintf (current-error-port) "~?~%" fstr args))
-
-(define (usage code)
-  (print "make-eggdoc.scm [--help] [--major-version=MAJOR] [DIR]")
-  (exit code))
-
-
-(define (make-eggdoc dir)
-  (let ((title (sprintf "Eggs Unlimited (release branch ~a)" *major-version*))
-       (eggs (gather-egg-information dir)))
-
-    (for-each 
-     (lambda (egg)
-       (let ((meta (cdr egg)))
-       (d "processing meta ~s" meta)
-        (cond 
-         ((assq 'eggdoc meta) =>
-          (lambda (edoc)
-            (d "edoc is ~a" edoc)
-            (let ((eggname (->string (car egg))))
-            (d "creating HTML from eggdoc file ~a" (cadr edoc))
-            (let* ((egg-dir     (locate-egg/local eggname dir))
-                   (eggref-dir  (sprintf "~s/eggref/~a" *docroot* 
*major-version* ))
-                   (cmd         (sprintf "~a -I ~a -s ~a > ~a" 
-                                        csi
-                                         egg-dir
-                                         (make-pathname egg-dir (->string 
(cadr edoc)))
-                                        (make-pathname eggref-dir eggname 
"html"))))
-              (d "~s" cmd)
-              (system* cmd) )))))))
-     eggs)
-
-    ))
-
-(define (main args)
-  (when *help* (usage 0))
-  (match args
-    ((dir)  (make-eggdoc dir))
-    (()     (make-eggdoc "."))
-    (_ (usage 1))))
-
-(main (simple-args (command-line-arguments)))
-
diff --git a/scripts/makedist.scm b/scripts/makedist.scm
index 7fa8e93..6108a8e 100644
--- a/scripts/makedist.scm
+++ b/scripts/makedist.scm
@@ -1,16 +1,11 @@
 ;;;; makedist.scm - Make distribution tarballs
 
 
-(use srfi-69 irregex)
+(use srfi-69 irregex srfi-1 setup-api)
 
 (define *release* #f)
-
-(load-relative "tools.scm")
-
 (define *help* #f)
 
-(set! *verbose* #t)
-
 (define BUILDVERSION (with-input-from-file "buildversion" read))
 
 (define *platform* 
@@ -30,6 +25,22 @@
        ((string=? "mingw32" *platform*) "mingw32-make")
        (else "make")))
 
+(define (prefix dir . files)
+  (if (null? files)
+      (pathname-directory dir)
+      (let ((files2 (map (cut make-pathname dir <>) (normalize files))))
+       (if (or (pair? (cdr files)) (pair? (car files)))
+           files2
+           (car files2) ) ) ) )
+
+(define (normalize fs)
+  (delete-duplicates
+   (map ->string
+       (if (pair? fs)
+           (flatten fs)
+           (list fs) ) )
+   equal?) )
+
 (define (release full?)
   (let* ((files (read-lines "distribution/manifest"))
         (distname (conc "chicken-" BUILDVERSION)) 
@@ -39,7 +50,7 @@
     (create-directory distname)
     (for-each
      (lambda (d)
-       (let ((d (path distname d)))
+       (let ((d (make-pathname distname d)))
         (unless (file-exists? d)
           (print "creating " d)
           (create-directory d 'with-parents))))
@@ -47,8 +58,8 @@
     (let ((missing '()))
       (for-each
        (lambda (f)
-        (if (-e f)
-            (run (cp -p ,(qs f) ,(qs (path distname f))))
+        (if (file-exists? f)
+            (run (cp -p ,(qs f) ,(qs (make-pathname distname f))))
             (set! f (cons f missing))))
        files)
       (unless (null? missing)
@@ -56,16 +67,27 @@
     (run (tar cfz ,(conc distname ".tar.gz") ,distname))
     (run (rm -fr ,distname)) ) )
 
-(define (usage . _)
-  (print "usage: makedist [--release] [--make=PROGRAM] [--platform=PLATFORM] 
MAKEOPTION ...")
-  (exit 1))
+(define (usage)
+  (print "usage: makedist [-release] [-make PROGRAM] [--platform=PLATFORM] 
MAKEOPTION ...")
+  (exit))
 
 (define *makeargs*
-  (simple-args
-   (command-line-arguments)
-   usage))
-
-(when *help* (usage))
+  (let loop ((args (command-line-arguments)))
+    (if (null? args)
+       '()
+       (let ((arg (car args)))
+         (cond ((string=? "-release" arg) 
+                (set! *release* #t)
+                (loop (cdr args)))
+               ((string=? "-make" arg)
+                (set! *make* (cadr args))
+                (loop (cddr args)))
+               ((string=? "-help" arg)
+                (usage))
+               ((string=? "-platform" arg)
+                (set! *platform* (cadr args))
+                (loop (cddr args)))
+               (else (cons arg (loop (cdr args)))))))))
 
 (run (,*make* -f ,(conc "Makefile." *platform*) distfiles ,@*makeargs*))
 
diff --git a/scripts/tools.scm b/scripts/tools.scm
deleted file mode 100644
index da83c99..0000000
--- a/scripts/tools.scm
+++ /dev/null
@@ -1,469 +0,0 @@
-;;;; tools.scm
-
-
-(use (srfi 1 69) posix utils files regex)
-
-
-(define *verbose* (##sys#fudge 13))
-(define *dependencies* (make-hash-table string=?))
-(define *variables* (make-hash-table string=?))
-(define *actions* (make-hash-table string=?))
-(define *pseudo-targets* '())
-(define *sleep-delay* 2)
-
-(define *windows-shell*
-  (memq (build-platform) '(mingw32 msvc)))
-
-
-;;; Verbosity and output
-
-(define *tty* 
-  (and (##sys#tty-port? (current-output-port)) 
-       (not (feature? #:mingw32))
-       (not (equal? (get-environment-variable "EMACS") "t"))
-       (not (equal? (get-environment-variable "TERM") "dumb"))))
-
-(define *tty-width*
-  (or (and *tty*
-          (not *windows-shell*)
-          (with-input-from-pipe "stty size 2>/dev/null"
-            (lambda () (read) (read))))
-      72))
-
-(define *info-message-escape* (if *tty* "\x1b[0m\x1b[2m" ""))
-(define *target-message-escape* (if *tty* "\x1b[0m\x1b[32m" ""))
-(define *error-message-escape* (if *tty* "\x1b[0m\x1b[31m" ""))
-(define *command-message-escape* (if *tty* "\x1b[0m\x1b[33m" ""))
-(define *reset-escape* (if *tty* "\x1b[0m" ""))
-
-(define (format-message msg #!optional (nl #t))
-  (if (or *verbose* (not *tty*))
-      ((if nl print print*) msg)
-      (for-each
-       (lambda (ln)
-        (printf "\r\x1b[K~a~!"
-                (if (>= (string-length ln) (sub1 *tty-width*))
-                    (string-append
-                     (substring ln 0 (- *tty-width* 5))
-                     "...")
-                    ln) ) )
-       (string-split msg "\n")) ) )
-
-(define (message fstr . args)
-  (when *verbose*
-    (format-message (sprintf "~a* ~?~a " *info-message-escape* fstr args 
*reset-escape*)) ) )
-
-(define (message* fstr . args)
-  (when *verbose*
-    (format-message (sprintf "~a* ~?~a " *info-message-escape* fstr args 
*reset-escape*) #f) ) )
-
-(define (target-message fstr . args)
-  (format-message (sprintf "~a~?~a " *target-message-escape* fstr args 
*reset-escape*)))
-
-(define (command-message fstr . args)
-  (when *verbose*
-    (format-message (sprintf "~a  ~?~a " *command-message-escape* fstr args 
*reset-escape*))) )
-
-(define (error-message fstr . args)
-  (sprintf "~%~a~?~a~%" *error-message-escape* fstr args *reset-escape*))
-
-(define (quit fstr . args)
-  (display (apply error-message fstr args) (current-error-port))
-  (reset) )
-
-(define (cleanup-output)
-  (when (and (not *verbose*) *tty*)
-    (printf "\r\x1b[0m\x1b[K~!") ) )
-
-
-;;; make-code stolen from PLT
-
-(define (find-matching-line str spec)
-  (let ([match? (lambda (s) (string=? s str))])
-    (let loop ([lines spec])
-      (cond
-       [(null? lines) #f]
-       [else (let* ([line (car lines)]
-                   [names (if (string? (car line))
-                              (list (car line))
-                              (car line))])
-              (if (any match? names)
-                  line
-                  (loop (cdr lines))))]))))
-
-(define (form-error s p) (quit "~a: ~s" s p))
-(define (line-error s p n) (quit "~a: ~s in line ~a" s p))
-
-(define (check-spec spec)
-  (and (or (list? spec) (form-error "specification is not a list" spec))
-       (or (pair? spec) (form-error "specification is an empty list" spec))
-       (every
-       (lambda (line)
-         (and (or (and (list? line) (<= 2 (length line) 3))
-                  (form-error "list is not a list with 2 or 3 parts" line))
-              (or (or (string? (car line))
-                      (and (list? (car line))
-                           (every string? (car line))))
-                  (form-error "line does not start with a string or list of 
strings" line))
-              (let ([name (car line)])
-                (or (list? (cadr line))
-                    (line-error "second part of line is not a list" (cadr 
line) name)
-                    (every (lambda (dep)
-                              (or (string? dep)
-                                  (form-error "dependency item is not a 
string" dep)))
-                            (cadr line)))
-                (or (null? (cddr line))
-                    (procedure? (caddr line))
-                    (line-error "command part of line is not a thunk" (caddr 
line) name)))))
-       spec)))
-
-(define (check-argv argv)
-  (or (string? argv)
-      (and (vector? argv)
-          (every string? (vector->list argv)))
-      (error "argument is not a string or string vector" argv)))
-
-(define (make/proc/helper spec argv)
-  (check-spec spec)
-  (check-argv argv)
-  (letrec ([made '()]
-          [exn? (condition-predicate 'exn)]
-          [exn-message (condition-property-accessor 'exn 'message)]
-          [make-file
-           (lambda (s indent)
-             (let ([line (find-matching-line s spec)]
-                   [date (and (not (member s *pseudo-targets*))
-                              (file-exists? s)
-                              (file-modification-time s))])
-               (if line
-                   (let ([deps (cadr line)])
-                     (for-each (let ([new-indent (string-append " " indent)])
-                                 (lambda (d) (make-file d new-indent)))
-                               deps)
-                     (let ([reason
-                            (or (not date)
-                                (any (lambda (dep)
-                                         (unless (file-exists? dep)
-                                           (quit "dependancy ~a was not 
made~%" dep))
-                                         (and (> (file-modification-time dep) 
date)
-                                              dep))
-                                       deps))])
-                       (when reason
-                         (let ([l (cddr line)])
-                           (unless (null? l)
-                             (set! made (cons s made))
-                             ((car l)))))))
-                   (when (not date) 
-                     (quit "don't know how to make ~a" s)))))])
-    (cond
-     [(string? argv) (make-file argv "")]
-     [(equal? argv '#()) (make-file (caar spec) "")]
-     [else (for-each (lambda (f) (make-file f "")) (vector->list argv))]) ) )
-
-(define make/proc
-  (case-lambda
-   [(spec) (make/proc/helper spec '#())]
-   [(spec argv) (make/proc/helper spec argv)]))
-
-
-;;; Run subcommands
-
-(define (execute exps)
-  (for-each
-   (lambda (exp)
-     (let ((cmd (string-intersperse (map ->string (flatten exps)))))
-       (command-message "~A" cmd)
-       (let ((s (system cmd)))
-        (unless (zero? s)
-          (quit (sprintf "invocation of command failed with non-zero 
exit-status ~a: ~a~%" s cmd) s) ) ) ) )
-   exps) )
-
-(define-syntax run
-  (syntax-rules ()
-    ((_ exp ...)
-     (execute (list `exp ...)))))
-
-
-;;; String and path helper functions
-
-(define (prefix dir . files)
-  (if (null? files)
-      (pathname-directory dir)
-      (let ((files2 (map (cut make-pathname dir <>) (normalize files))))
-       (if (or (pair? (cdr files)) (pair? (car files)))
-           files2
-           (car files2) ) ) ) )
-
-(define (suffix suf . files)
-  (if (null? files)
-      (pathname-extension suf)
-      (let ((files2 (map (cut pathname-replace-extension <> suf) (normalize 
files))))
-       (if (or (pair? (cdr files)) (pair? (car files)))
-           files2
-           (car files2) ) ) ) )
-
-(define (normalize fs)
-  (delete-duplicates
-   (map ->string
-       (if (pair? fs)
-           (flatten fs)
-           (list fs) ) )
-   equal?) )
-
-(define path make-pathname)
-
-
-;;; "Stateful" build interface
-
-(define (build-clear)
-  (set! *dependencies* (make-hash-table string=?)) 
-  (set! *actions* (make-hash-table string=?)) 
-  (set! *variables* (make-hash-table string=?)) )
-
-(define (depends target . deps)
-  (let ((deps (normalize deps)))
-    (hash-table-update!
-     *dependencies* target
-     (lambda (old) (lset-union string=? old deps))
-     (lambda () deps) ) ) )
-
-(define actions
-  (let ((doaction 
-         (lambda (name target proc)
-           (hash-table-update! *dependencies* target identity (constantly '()))
-           (hash-table-set! 
-            *actions* target 
-            (lambda ()
-              (target-message "~a\t~a" name target)
-              (proc) ) ) ) ) )
-    (case-lambda
-     ((target proc) (doaction "build " target proc))
-     ((name target proc) (doaction name target proc)) ) ) )
-
-(define (notfile . targets)
-  (set! *pseudo-targets* (lset-union string=? *pseudo-targets* targets)))
-
-(define (clean-on-error t thunk)
-  (handle-exceptions ex
-      (begin
-       (when (file-exists? t)
-         (message "deleting ~a" t)
-         (delete-file t) )
-       (abort ex) )
-    (thunk) ) )
-
-(define (build #!optional
-              (targets "all")
-              #!key
-              continuous
-              (verbose *verbose*) )
-  (fluid-let ((*verbose* verbose))
-    (let* ((deps (hash-table->alist *dependencies*))
-          (wdeps (delete-duplicates (append-map cdr deps) string=?))
-          (targets (list->vector (normalize targets)) ) 
-         (ftable (and continuous (make-hash-table string=?))))
-      (when continuous
-       (for-each 
-        (lambda (dep)
-          (when (file-exists? dep) 
-            (hash-table-set! ftable dep (file-modification-time dep))))
-        wdeps))
-      (let loop ()
-       (make/proc
-        (map (lambda (dep)
-               (let ((target (car dep))
-                     (deps (cdr dep)))
-                (list target deps
-                      (eval
-                       `(lambda ()
-                          (clean-on-error
-                           ',target
-                           (lambda ()
-                             ((hash-table-ref/default *actions* ',target 
noop)))))))))
-             deps)
-        targets)
-       (when continuous
-         (watch-dependencies wdeps ftable)
-         (loop)))
-      (cleanup-output))))
-
-(define (build-dump #!optional (port (current-output-port)))
-  (with-output-to-port port
-    (lambda ()
-      (message "dependencies:")
-      (for-each show-dependencies (hash-table-keys *dependencies*))
-      (when (positive? (hash-table-size *variables*))
-       (message "variables:")
-       (hash-table-walk
-        *variables*
-        (lambda (v x)
-          (message "  ~s:" v)
-          (for-each
-           (lambda (p)
-             (message "    ~a\t-> ~s~%" (car p) (cadr p))) 
-           x))) ) ) ) )
-
-(define (show-dependencies target)
-  (let ((i ""))
-    (let loop ((t target))
-      (message "~a~a ~a" i t (if (member t *pseudo-targets*) "(p)" ""))
-      (fluid-let ((i (string-append i " ")))
-       (for-each loop (hash-table-ref/default *dependencies* t '())) ) ) ) )
-
-
-;;; Command line processing
-
-(define (build* . args)
-  (let ((continuous #f)
-       (targets '()) 
-       (debug #f) )
-    (let-values (((procs arglists) (partition procedure? args)))
-      (let loop ((args (if (null? arglists) 
-                          (command-line-arguments) 
-                          (concatenate arglists))) )
-       (cond ((null? args) 
-              (when debug (build-dump))
-              (for-each (lambda (p) (p)) procs)
-              (build 
-               (if (null? targets) "all" (reverse targets))
-               verbose: *verbose*
-               continuous: continuous) )
-             (else
-              (let ((x (car args)))
-                (cond ((and (> (string-length x) 0) (char=? #\- (string-ref x 
0)))
-                       (cond ((string=? "-v" x) 
-                              (set! *verbose* #t) )
-                             ((member x '("-h" "-help" "--help"))
-                              (usage 0) )
-                             ((string=? "-c" x)
-                              (set! continuous #t) )
-                             ((string=? "-d" x)
-                              (set! debug #t) )
-                             (else (usage 1)) )
-                       (loop (cdr args)) )
-                      ((irregex-match "([-_A-Za-z0-9]+)=(.*)" x) =>
-                       (lambda (m)
-                         (let* ((sym (string->symbol (irregex-match-substring 
m 1))))
-                           (if (##sys#symbol-has-toplevel-binding? sym)
-                               (let ((val (##sys#slot sym 0)))
-                                 (if (or (boolean? val)
-                                         (string? val)
-                                         (symbol? val)
-                                         (eq? (void) val))
-                                     (##sys#setslot sym 0 
(irregex-match-substring m 2)) 
-                                     (quit "variable `~a' already has a 
suspicious value" 
-                                           sym) ) )
-                               (##sys#setslot sym 0 (irregex-match-substring m 
2)) )
-                           (loop (cdr args)) ) ) )
-                      (else
-                       (set! targets (cons x targets))
-                       (loop (cdr args))))))))) ) )
-
-(define (usage code)
-  (print "usage: " (car (argv)) " [ -v | -c | -d | TARGET | VARIABLE=VALUE ] 
...")
-  (exit code) )
-
-
-;;; Check dependencies for changes
-
-(define (watch-dependencies deps tab)
-  (let loop ((f #f))
-    (sleep *sleep-delay*)
-    (cond ((any (lambda (dep)
-                 (and-let* (((file-exists? dep))
-                            (ft (file-modification-time dep))
-                            ((> ft (hash-table-ref/default tab dep 0))))
-                   (hash-table-set! tab dep ft)
-                   (message "~a changed" dep)
-                   #t) )
-               deps))
-         (f (loop #t))
-         (else 
-          (message "waiting for changes ...")
-          (loop #t)))))
-
-
-;;; Other useful procedures
-
-(define -e file-exists?)
-(define -d (conjoin file-exists? directory?))
-(define -x (conjoin file-exists? file-execute-access?))
-
-(define cwd current-directory)
-(define (cd #!optional d) (if d (current-directory d) 
(get-environment-variable "HOME")))
-
-(define (with-cwd dir thunk)
-  (if (or (not dir) (equal? "." dir))
-      (thunk)
-      (let ((old #f))
-       (dynamic-wind
-           (lambda () (set! old (current-directory)))
-           (lambda ()
-             (command-message "cd ~a" dir)
-             (change-directory dir)
-             (thunk) )
-           (lambda ()
-             (change-directory old)
-             (command-message "cd ~a" old) ) ) ) ) )
-
-(define (try-run code #!optional (msg "trying to compile and run some C code") 
(flags "") (cc "cc"))
-  (let ((tmp (create-temporary-file "c")))
-    (with-output-to-file tmp (lambda () (display code)))
-    (message* "~a ..." msg)
-    (let ((r (zero? (system (sprintf "~a ~a ~a 2>/dev/null && ./a.out" cc tmp 
flags)))))
-      (delete-file* tmp)
-      (message (if r "ok" "failed"))
-      r) ) )
-
-(define (true? x)
-  (and x (not (member x '("no" "false" "off" "0" "")))))
-
-(define (simple-args #!optional (args (command-line-arguments)) (error error))
-  (define (assign var val)
-    (##sys#setslot 
-     (string->symbol (string-append "*" var "*"))
-     0
-     (if (string? val) 
-        (or (string->number val) val)
-        val)))
-  (let loop ((args args) (vals '()))
-    (cond ((null? args) (reverse vals))
-         ((irregex-match "(-{1,2})([-_A-Za-z0-9]+)(=)?\\s*(.+)?" (car args)) 
-          =>
-          (lambda (m)
-            (let*-values (((next) (cdr args))
-                          ((var val)
-                           (cond ((equal? "=" (irregex-match-substring m 3))
-                                  (let ((opt (irregex-match-substring m 2))
-                                        (val (irregex-match-substring m 4)))
-                                    (cond (val (values opt val))
-                                          (else 
-                                           (when (null? next)
-                                             (error "missing argument for 
option" 
-                                                    (car args)) )
-                                           (let ((x (car next)))
-                                             (set! next (cdr next))
-                                             (values opt x))))) )
-                                 ((string? (irregex-match-substring m 1))
-                                  (values (irregex-match-substring m 2) #t))
-                                 (else (values #f #f)) ) ) )
-              (cond (var 
-                     (assign var val)
-                     (loop next vals) )
-                    (else (loop next (cons (car args) vals)))))))
-         (else (loop (cdr args) (cons (car args) vals))))))
-
-(define (yes-or-no? str . default)
-  (let ((def (optional default #f)))
-    (let loop ()
-      (printf "~%~A (yes/no) " str)
-      (when def (printf "[~A] " def))
-      (flush-output)
-      (let ((ln (read-line)))
-       (cond ((eof-object? ln) (set! ln "abort"))
-             ((and def (string=? "" ln)) (set! ln def)) )
-       (cond ((string-ci=? "yes" ln) #t)
-             ((string-ci=? "no" ln) #f)
-             (else
-              (printf "~%Please enter \"yes\" or \"no\".~%")
-              (loop) ) ) ) ) ) )
diff --git a/scripts/wiki2html.scm b/scripts/wiki2html.scm
deleted file mode 100644
index a34d53a..0000000
--- a/scripts/wiki2html.scm
+++ /dev/null
@@ -1,299 +0,0 @@
-;;;; wiki2html.scm - quick-and-dirty svnwiki->HTML conversion
-
-
-(load-relative "tools.scm")
-
-(use regex srfi-1 extras utils srfi-13 posix)
-(use htmlprag matchable)
-
-
-;;; inline elements
-
-(define +code+ '(: #\{ #\{ (submatch (*? any)) #\} #\}))
-(define +bold+ '(: (= 3 #\') (submatch (* (~ #\'))) (= 3 #\')))
-(define +italic+ '(: (= 2 #\') (submatch (* (~ #\'))) (= 2 #\')))
-(define +html-tag+ '(: #\< (submatch (* (~ #\>))) #\>))
-(define +enscript-tag+ '(: "<enscript" (* (~ #\>)) #\>))
-
-(define +link+
-  '(: #\[ #\[ (submatch (* (~ #\] #\|))) (? #\| (submatch (* (~ #\])))) #\] 
#\]))
-
-(define +image-link+
-  '(: #\[ #\[ (* space) "image:" (* space)
-      (submatch (* (~ #\] #\|))) (? #\| (submatch (* (~ #\])))) #\] #\]))
-
-(define +inline-element+
-  `(or ,+code+ ,+image-link+ ,+link+ ,+html-tag+ ,+bold+ ,+italic+))
-
-(define +http-url+ '(: (* space) "http://"; (* any)))
-(define +end-enscript-tag+ '(: "</enscript>"))
-
-
-;;; Block elements
-
-(define +header+ '(: (submatch (>= 2 #\=)) (* space) (submatch (* any))))
-(define +pre+ '(: (>= 1 space) (submatch (* any))))
-
-(define +d-list+
-  '(: (* space) #\; (submatch (*? any)) #\space #\: #\space (submatch (* 
any))))
-
-(define +d-head+ '(: (* space) #\; (submatch (* any))))
-(define +u-list+ '(: (* space) (submatch (>= 1 #\*)) (* space) (submatch (* 
any))))
-(define +o-list+ '(: (* space) (submatch (>= 1 #\*)) #\# (* space) (submatch 
(* any))))
-(define +hr+ '(: (* space) (submatch (>= 3 #\-)) (* space)))
-
-(define +block-element+
-  `(or ,+pre+
-       ,+header+
-       ,+d-list+
-       ,+d-head+
-       ,+u-list+
-       ,+o-list+
-       ,+enscript-tag+
-       ,+hr+))
-
-
-;;; Global state
-
-(define *tags* '())
-(define *open* '())
-(define *manual-pages* '())
-(define *list-continuation* #f)
-
-(define (push-tag tag out)
-  ;(fprintf (current-error-port) "start: tag: ~a, open: ~a~%" tag *open*)
-  (unless (and (pair? *open*) (equal? tag (car *open*)))
-    (when (pair? *open*)
-      (cond ((not (pair? tag)) (pop-tag out))
-           ((pair? (car *open*))
-            ;(fprintf (current-error-port) "tag: ~a, open: ~a~%" tag *open*)
-            (when (< (cdr tag) (cdar *open*))
-              (do ((n (cdar *open*) (sub1 n)))
-                  ((= (cdr tag) n))
-                (pop-tag out))))))
-    (unless (and (pair? *open*) (equal? tag (car *open*)))
-      (fprintf out "<~a>~%" (if (pair? tag) (car tag) tag))
-      (set! *list-continuation* #f)
-      ;(fprintf (current-error-port) "PUSH: ~a~%" tag)
-      (set! *open* (cons tag *open*)))))
-
-(define (pop-tag out)
-  (let ((tag (car *open*)))
-    ;(fprintf (current-error-port) "POP: ~a~%" *open*)
-    (fprintf out "</~a>~%" (if (pair? tag) (car tag) tag))
-    (set! *open* (cdr *open*))))
-
-(define (pop-all out)
-  (when (pair? *open*)
-    (pop-tag out)
-    (pop-all out)))
-
-
-;;; Helper syntax
-
-(define-syntax rx
-  (syntax-rules ()
-    ((_ rx) (force (delay (regexp rx))))))
-
-
-;;; Conversion entry point
-
-(define (wiki->html #!optional (in (current-input-port)) (out 
(current-output-port)))
-  (call/cc
-   (lambda (return)
-     (let loop ()
-       (let ((ln (read-line in)))
-        (cond ((eof-object? ln) (return #f))
-              ((not (string-match (rx +block-element+) ln)) 
-               (cond ((string-null? ln)
-                      (set! *list-continuation* #f))
-                     (else
-                      (pop-all out)
-                      (fprintf out "~a~%" (inline ln)))))
-              ((string-match (rx +enscript-tag+) ln) =>
-               (lambda (m)
-                 (pop-all out)
-                 (fprintf out "<pre>~a~%" (substring ln (string-length (car 
m))))
-                 (copy-until-match (rx +end-enscript-tag+) in out) ;XXX 
doesn't parse rest of line
-                 (display "</pre>" out)))
-              ((string-match (rx +header+) ln) =>
-               (lambda (m)
-                 (pop-all out)
-                 (let ((n (sub1 (string-length (second m))))
-                       (name (inline (third m))))
-                   (fprintf out "<a name='~a' /><h~a>~a</h~a>~%" 
-                            name n name n))))
-              ((string-match (rx +pre+) ln) =>
-               (lambda (m)
-                 (cond (*list-continuation* 
-                        (fprintf out "~a~%" (inline (second m))))
-                       (else
-                        (push-tag 'pre out)
-                        (fprintf out "~a~%" (clean (car m)))))))
-              ((string-match (rx +hr+) ln) =>
-               (lambda (m)
-                 (fprintf out "<hr />~%")))
-              ((string-match (rx +d-list+) ln) =>
-               (lambda (m)
-                 (push-tag 'dl out)
-                 (set! *list-continuation* #t)
-                 (fprintf out "<dt>~a</dt><dd>~a</dd>~%" 
-                          (inline (second m)) (inline (or (third m) "")))))
-              ((string-match (rx +d-head+) ln) =>
-               (lambda (m)
-                 (push-tag 'dl out)
-                 (set! *list-continuation* #t)
-                 (fprintf out "<dt>~a</dt>~%" (inline (second m)))))
-              ((string-match (rx +u-list+) ln) =>
-               (lambda (m)
-                 (push-tag `(ul . ,(string-length (second m))) out)
-                 (set! *list-continuation* #t)
-                 (fprintf out "<li>~a~%" (inline (third m)))))
-              ((string-match (rx +o-list+) ln) =>
-               (lambda (m)
-                 (push-tag `(ol . ,(string-length (second m))) out)
-                 (set! *list-continuation* #t)
-                 (fprintf out "<li>~a~%" (inline (third m)))))
-              (else (error "unknown block match" m)))
-        (loop))))))
-
-
-;;; Substitute inline elements
-
-(define (inline str)
-  (or (and-let* ((m (string-search-positions (rx +inline-element+) str)))
-       (string-append
-        (clean (substring str 0 (caar m)))
-        (let ((rest (substring str (caar m))))
-          (define (continue m)
-            (inline (substring rest (string-length (first m)))))
-          (cond ((string-search (rx `(: bos ,+code+)) rest) =>
-                 (lambda (m)
-                   (string-append 
-                    "<tt>" (clean (second m)) "</tt>"
-                    (continue m))))
-                ((string-search (rx `(: bos ,+html-tag+)) rest) =>
-                 (lambda (m)
-                   (string-append
-                    (first m)
-                    (continue m))))
-                ((string-search (rx `(: bos ,+image-link+)) rest) =>
-                 (lambda (m)
-                   (string-append 
-                    "<img src='" (clean (second m)) "' />"
-                    (continue m))))
-                ((string-search (rx `(: bos ,+link+)) rest) =>
-                 (lambda (m)
-                   (let ((m1 (string-trim-both (second m))))
-                     (string-append
-                      (cond ((or (string=? "toc:" m1)
-                                 (string-search (rx '(: bos (* space) 
"tags:")) m1) )
-                             "")
-                            ((find (cut string-ci=? <> m1) *manual-pages*)
-                             (string-append 
-                              "<a href='" (clean m1) ".html'>" (inline m1) 
"</a>"))
-                            (else
-                             (string-append
-                              "<a href='" 
-                              (clean
-                               (let ((href (second m)))
-                                 (if (string-match (rx +http-url+) href)
-                                     href
-                                     (string-append "http://wiki.call-cc.org/"; 
href))))
-                              "'>"
-                              (clean (or (third m) (second m)))
-                              "</a>")))
-                      (continue m)))))
-                ((string-search (rx `(: bos ,+bold+)) rest) =>
-                 (lambda (m)
-                   (string-append
-                    "<b>" (inline (second m)) "</b>"
-                    (continue m)))) 
-                ((string-search (rx `(: bos ,+italic+)) rest) =>
-                 (lambda (m)
-                   (string-append
-                    "<i>" (inline (second m)) "</i>"
-                    (continue m)))) 
-                (else (error "unknown inline match" m rest))))))
-      str))
-
-(define (convert name)
-  (let ((sxml (html->sxml (open-input-string (with-output-to-string 
wiki->html)))))
-    (define (walk n)
-      (match n
-       (('*PI* . _) "")
-       (('enscript strs ...)
-        `(pre ,@(match strs
-                  ((('@ . _) . strs) strs)
-                  (_ strs))))
-       (('procedure strs ...)
-        `(b (p) "[procedure] " ,@strs (br)))
-       (('macro strs ...)
-        `(b (p) "[syntax] " ,@strs (br)))
-       (('parameter strs ...)
-        `(b (p) "[parameter] " ,@strs (br)))
-       (('scheme strs ...)
-        `(pre "\n" ,@strs))
-       (('nowiki content ...)
-        `(div ,@content))
-       (((? symbol? tag) ('@ attr ...) . body)
-        `(,tag (@ ,@attr) ,@(map walk body)))
-       (((? symbol? tag) . body)
-        `(,tag ,@(map walk body)))
-       (_ n)))
-    (display
-     (shtml->html
-      (let ((sxml (wrap name (walk `(body ,@(cdr sxml))))))
-       ;(pp sxml (current-error-port))
-       sxml)))))
-
-(define (wrap name body)
-  `(html (head (title ,(string-append "The CHICKEN User's Manual - " name))
-              (style (@ (type "text/css"))
-                "@import url('manual.css');\n"))
-        ,body))
-
-
-;;; Normalize text
-
-(define (clean str)
-  (string-translate* str '(("<" . "&lt;") ("&" . "&amp;") ("'" . "&apos;") 
("\"" . "&quot;"))))
-
-
-;;; Read until rx matches
-
-(define (copy-until-match rx in out)
-  (let loop ()
-    (let ((ln (read-line in)))
-      (cond ((string-match rx ln) =>
-            (lambda (m)
-              (substring ln (string-length (car m))) ) )
-           (else
-            (display (clean ln) out)
-            (newline out)
-            (loop))))))
-
-
-;;; Run it
-
-(define *outdir* ".")
-
-(define (main args)
-  (let loop ((args args))
-    (match args
-      (()
-       (print "usage: wiki2html [--outdir=DIRECTORY] PAGEFILE ...")
-       (exit 1))
-      ((files ...)
-       (let ((dirs (delete-duplicates (map pathname-directory files) 
string=?)))
-        (set! *manual-pages* (map pathname-strip-directory (append-map 
directory dirs)))
-        (for-each
-         (lambda (file)
-           (print file)
-           (with-input-from-file file 
-             (lambda ()
-               (with-output-to-file (pathname-replace-directory (string-append 
file ".html") *outdir*) 
-                 (cut convert (pathname-file file))))))
-         files))))))
-
-(main (simple-args))
-- 
1.6.0.4


reply via email to

[Prev in Thread] Current Thread [Next in Thread]