racket/collects/openssl/pre-installer.ss
2005-10-04 18:41:49 +00:00

72 lines
2.1 KiB
Scheme

(module pre-installer mzscheme
(require (lib "setup-extension.ss" "make")
(lib "compile.ss" "dynext")
(lib "link.ss" "dynext")
(lib "file.ss"))
(define (pre-installer plthome openssl-dir)
(pre-install plthome
openssl-dir
"mzssl.c"
(build-path openssl-dir
"openssl")
;; header subdirs
(list "openssl")
;; unix libs
(list "ssl" "crypto")
;; windows libs
(let* ([default-paths
(list (build-path openssl-dir "openssl"))]
[paths
(let ([v (getenv "PLT_EXTENSION_LIB_PATHS")])
(if v
(path-list-string->path-list v default-paths)
default-paths))])
(if (ormap (lambda (path)
(and (file-exists? (build-path path "lib" "libeay32xxxxxxx.lib"))
(file-exists? (build-path path "lib" "ssleay32xxxxxxx.lib"))))
paths)
;; Use mangleable names:
(list "libeay32xxxxxxx" "ssleay32xxxxxxx")
;; Use simple names:
(list "libeay32" "ssleay32")))
;; unix extra libs (assume always there)
null
;; Windows extra libs (assume always there)
(list "wsock32.lib")
;; Extra depends:
(list "mzssl.ss")
;; Last-chance k:
(lambda (k) (k))
;; 3m, too:
#t)
;; Under windows, put "{lib,sll}eay32" into the system folder when
;; they're in a "precompiled" dir.
(when (eq? 'windows (system-type))
(let ([dir (build-path openssl-dir
"precompiled"
"native"
(system-library-subpath #f))])
(when (directory-exists? dir)
(let ([l (directory-list dir)])
(let ([libeay (ormap (lambda (f)
(regexp-match #rx"^libeay32.*[.]dll$" f))
l)]
[ssleay (ormap (lambda (f)
(regexp-match #rx"^ssleay32.*[.]dll$" f))
l)])
(when (and libeay ssleay)
(let ([sys-dir (find-system-path 'sys-dir)])
(let ([move-over
(lambda (f)
(unless (file-exists? (build-path sys-dir f))
(printf " Installing ~a into system directory~n" f)
(copy-file (build-path dir f)
(build-path sys-dir f))))])
(move-over (car libeay))
(move-over (car ssleay)))))))))))
(provide pre-installer))