~ 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 *help* #f)1819(define BUILDVERSION (with-input-from-file "buildversion" read))2021(define *platform*22 (let ((sv (symbol->string (software-version))))23 (cond ((irregex-match ".*bsd" sv) "bsd")24 (else sv))))2526(define *make*27 (cond ((string=? "bsd" *platform*) "gmake")28 (else "make")))2930(define (prefix dir . files)31 (if (null? files)32 (pathname-directory dir)33 (let ((files2 (map (cut make-pathname dir <>) (normalize files))))34 (if (or (pair? (cdr files)) (pair? (car files)))35 files236 (car files2) ) ) ) )3738(define (normalize fs)39 (delete-duplicates40 (map ->string41 (if (pair? fs)42 (flatten fs)43 (list fs) ) )44 equal?) )4546(define (run . args)47 (let ((cmd (apply format args)))48 (display cmd (current-error-port))49 (newline (current-error-port))50 (system* cmd)))5152(define (release)53 (let* ((files (with-input-from-file "distribution/manifest" read-lines))54 (distname (conc "chicken-" BUILDVERSION))55 (distfiles (map (cut prefix distname <>) files))56 (tgz (conc distname ".tar.gz")))57 (run "rm -fr ~a ~a" distname tgz)58 (create-directory distname)59 (for-each60 (lambda (d)61 (let ((d (make-pathname distname d)))62 (unless (file-exists? d)63 (print "creating " d)64 (create-directory d 'with-parents))))65 (delete-duplicates (filter-map prefix files) string=?))66 (let ((missing67 (foldl (lambda (missing f)68 (cond69 ((file-exists? f)70 (run "cp -p ~a ~a" (qs f) (qs (make-pathname distname f)))71 missing)72 (else (cons f missing))))73 '() files)))74 (unless (null? missing)75 (fprintf (current-error-port) "[ERROR] files missing: ~A~%" missing)76 (exit 1) ) )77 (run "tar cfz ~a ~a" (conc distname ".tar.gz") distname)78 (run "rm -fr ~a" distname)))7980(define (usage)81 (print "usage: makedist [-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=? "-make" arg)90 (set! *make* (cadr args))91 (loop (cddr args)))92 ((string=? "-help" arg)93 (usage))94 ((string=? "-platform" arg)95 (set! *platform* (cadr args))96 (loop (cddr args)))97 (else (cons arg (loop (cdr args)))))))))9899(run "~a -f Makefile.~a distfiles ~a" *make* *platform* (string-intersperse *makeargs*))100101(release)