racket/collects/meta/build/unix-installer/check-install-paths
2010-05-25 15:42:31 -04:00

62 lines
1.9 KiB
Scheme
Executable File

#!/bin/sh
#| -*- scheme -*-
tmp="/tmp/path-compare-$$"
if [ -x "$PLTHOME/bin/racket" ]; then
"$PLTHOME/bin/racket" -r "$0" "$@"
else
"racket" -r "$0" "$@"
fi > "$tmp" || exit 1
cd "`dirname \"$0\"`"
if diff "paths-configure-snapshot" "$tmp"; then
echo "PATHS OK"; rm "$tmp"; exit 0
else echo "*** PATHS DATA MISMATCH (see $tmp) ***"; exit 1
fi
|#
;; Extract path information from the configure script, so it can be compared
;; to a snapshot and generate an error each time things change
(define configure-path
(simplify-path
(build-path
;; (find-executable-path
;; (find-system-path 'exec-file) (find-system-path 'collects-dir) #t)
(find-system-path 'exec-file)
'up 'up "src" "configure")))
(unless (file-exists? configure-path)
(error "Cannot find `configure':" configure-path))
(define current-match (make-parameter #f))
(define (match? . bytess)
(cond [(regexp-match (byte-regexp (apply bytes-append bytess))
(current-input-port))
=> (lambda (m) (current-match (car m)) #t)]
[else #f]))
(define (show-match)
(write-bytes (current-match)))
(with-input-from-file configure-path
(lambda ()
(if (match? #"\n# Installation directory options.\n"
#"(?:#[^\n]*\n)+"
#"(?:[a-z]+=[^\n]+\n)+"
#"\n")
(show-match)
(error "Did not find first block"))
(if (match? #"\n#+ Install targets #+\n\n"
#"unixstyle=no\n"
#"if (?:[^\n]+\n)+fi\n\n"
#"MAKE_COPYTREE=no\n"
#"if [^\n]+\n"
#"(?: +[^\n]+\n)+"
#"else\n"
#"(?: +[^\n]+\n)+"
#"fi\n\n")
(show-match)
(error "Did not find second block"))
(if (match? #"\n +echo \">>> Installation targets:\"\n"
#"(?: +echo [^\n]+\n)+")
(show-match)
(error "Did not find third block"))))
(exit)