~ chicken-core (master) /scripts/makedist.scm
Trap1;;;; makedist.scm - Make distribution tarballs234(import (chicken file)5 (chicken fixnum)6 (chicken format)7 (chicken io)8 (chicken irregex)9 (chicken pathname)10 (chicken platform)11 (chicken process)12 (chicken process-context)13 (chicken string))1415(include "mini-srfi-1.scm")1617(define *release* #f)18(define *help* #f)1920(define BUILDVERSION (with-input-from-file "buildversion" read))2122(define *platform*23 (let ((sv (symbol->string (software-version))))24 (cond ((irregex-match ".*bsd" sv) "bsd")25 (else sv))))2627(define *make*28 (cond ((string=? "bsd" *platform*) "gmake")29 (else "make")))3031(define (prefix dir . files)32 (if (null? files)33 (pathname-directory dir)34 (let ((files2 (map (cut make-pathname dir <>) (normalize files))))35 (if (or (pair? (cdr files)) (pair? (car files)))36 files237 (car files2) ) ) ) )3839(define (normalize fs)40 (delete-duplicates41 (map ->string42 (if (pair? fs)43 (flatten fs)44 (list fs) ) )45 equal?) )4647(define (run . args)48 (let ((cmd (apply format args)))49 (display cmd (current-error-port))50 (newline (current-error-port))51 (system* cmd)))5253(define (release full?)54 (let* ((files (with-input-from-file "distribution/manifest" read-lines))55 (distname (conc "chicken-" BUILDVERSION))56 (distfiles (map (cut prefix distname <>) files))57 (tgz (conc distname ".tar.gz")))58 (run "rm -fr ~a ~a" distname tgz)59 (create-directory distname)60 (for-each61 (lambda (d)62 (let ((d (make-pathname distname d)))63 (unless (file-exists? d)64 (print "creating " d)65 (create-directory d 'with-parents))))66 (delete-duplicates (filter-map prefix files) string=?))67 (let ((missing68 (foldl (lambda (missing f)69 (cond70 ((file-exists? f)71 (run "cp -p ~a ~a" (qs f) (qs (make-pathname distname f)))72 missing)73 (else (cons f missing))))74 '() files)))75 (unless (null? missing)76 (warning "files missing" missing) ) )77 (run "tar cfz ~a ~a" (conc distname ".tar.gz") distname)78 (run "rm -fr ~a" distname)))7980(define (usage)81 (print "usage: makedist [-release] [-make PROGRAM] [--platform=PLATFORM] MAKEOPTION ...")82 (exit))8384(define *makeargs*85 (let loop ((args (command-line-arguments)))86 (if (null? args)87 '()88 (let ((arg (car args)))89 (cond ((string=? "-release" arg)90 (set! *release* #t)91 (loop (cdr args)))92 ((string=? "-make" arg)93 (set! *make* (cadr args))94 (loop (cddr args)))95 ((string=? "-help" arg)96 (usage))97 ((string=? "-platform" arg)98 (set! *platform* (cadr args))99 (loop (cddr args)))100 (else (cons arg (loop (cdr args)))))))))101102(run "~a -f Makefile.~a distfiles ~a" *make* *platform* (string-intersperse *makeargs*))103104(release *release*)