Fix plugin testing, -available? predicates, install hooks.
authorMatt Birkholz <matt@birchwood-abbey.net>
Thu, 3 Mar 2016 18:00:59 +0000 (11:00 -0700)
committerMatt Birkholz <matt@birchwood-abbey.net>
Thu, 3 Mar 2016 19:10:33 +0000 (12:10 -0700)
Signal an error (not warning) if a plugin is not tested because it
appears to be unavailable.

35 files changed:
src/blowfish/Makefile.am
src/blowfish/README
src/blowfish/blowfish-check.scm
src/blowfish/blowfish.pkg
src/blowfish/blowfish.scm
src/blowfish/check.scm
src/blowfish/compile.scm
src/gdbm/Makefile.am
src/gdbm/README
src/gdbm/check.scm
src/gdbm/compile.scm
src/gdbm/gdbm-check.scm
src/gdbm/gdbm.pkg
src/gdbm/gdbm.scm
src/mcrypt/Makefile.am
src/mcrypt/README
src/mcrypt/check.scm
src/mcrypt/compile.scm
src/mcrypt/mcrypt-check.scm
src/mcrypt/mcrypt.pkg
src/mcrypt/mcrypt.scm
src/md5/Makefile.am
src/md5/README
src/md5/check.scm
src/md5/compile.scm
src/md5/md5-check.scm
src/md5/md5.pkg
src/md5/md5.scm
src/mhash/Makefile.am
src/mhash/README
src/mhash/check.scm
src/mhash/compile.scm
src/mhash/mhash-check.scm
src/mhash/mhash.pkg
src/mhash/mhash.scm

index e5cb8c035243fdf5d4b3ec26c61861730c151226..c8fdbde843a1fc6da2a6e9154b498fc951a67619 100644 (file)
@@ -66,6 +66,10 @@ CLEANFILES += test
 
 TESTS = check-scm
 
-install-data-hook uninstall-data-hook:
+install-data-hook:
+       echo '(update-optiondb "$(DESTDIR)$(scmlibdir)/")' \
+       | $(MIT_SCHEME_EXE) --batch-mode
+
+uninstall-hook:
        echo '(update-optiondb "$(DESTDIR)$(scmlibdir)/")' \
        | $(MIT_SCHEME_EXE) --batch-mode
index 400ff5ac3bc49be4aaab6abb807d415808a83118..3d283be3c28694cee9227631e830802d856302e5 100644 (file)
@@ -1,4 +1,4 @@
-The blowfish wrapper.
+The BLOWFISH option.
 
 This is a drop-in replacement for the bfish microcode module and
 runtime/blowfish.scm.  It is not part of the core build and can be
index a2696d282ba361ebb3215eb1c38c071cc84a820c..2f89d742f4e35958bdde97621627f67512d38dd9 100644 (file)
@@ -24,10 +24,10 @@ USA.
 
 |#
 
-;;;; Test the Blowfish wrapper.
+;;;; Test the BLOWFISH option.
 
 (if (not (blowfish-available?))
-    (warn "blowfish wrapper not found")
+    (error "BLOWFISH plugin not found")
     (let ((sample "Some text to encrypt and decrypt."))
       (call-with-binary-output-file "test"
        (lambda (output)
index 6d03fd4892ca6cb5582ec8b2e4bb199b24f67edd..34685216b2644c1170c337ccbe1c9dd1215effc7 100644 (file)
@@ -31,7 +31,7 @@ USA.
   (parent ())
   ;; You'll have to import these from (global-definitions blowfish/).
   ;; They are currently bound in () by exports from (runtime blowfish).
-  #;(export #f
+  (export (blowfish global)
          blowfish-available?
          blowfish-cbc
          blowfish-cfb64
@@ -42,4 +42,8 @@ USA.
          blowfish-set-key
          compute-blowfish-init-vector
          read-blowfish-file-header
-         write-blowfish-file-header))
\ No newline at end of file
+         write-blowfish-file-header))
+
+(define-package (blowfish global)
+  ;; Just to get cref to analyze whether all exports are defined.
+  )
\ No newline at end of file
index 71adaa400995bde9224bf8a7db3cbab3da9d1327..9107cc400a37717908971294e7225991c610d12a 100644 (file)
@@ -24,7 +24,7 @@ USA.
 
 |#
 
-;;;; Blowfish wrapper
+;;;; The BLOWFISH option.
 ;;; package: (blowfish)
 
 (declare (usual-integrations))
@@ -172,10 +172,7 @@ USA.
                                operator)))
 
 (define (blowfish-available?)
-  (let ((path (ignore-errors (lambda ()
-                              (system-library-pathname "blowfish-shim.so")))))
-    (and (pathname? path)
-        (file-loadable? path))))
+  (plugin-available? "blowfish"))
 
 (define (blowfish-encrypt-port input output key init-vector encrypt?)
   ;; Assumes that INPUT is in blocking mode.
index 36ce185904f99d6f02ec41a5b0d11e362492149b..2c6c1bed28e3831b30e8df92a9488bf2d4048d1a 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*- |#
 
-;;;; Test the Blowfish wrapper.
+;;;; Test the BLOWFISH option.
 
 (load "make")
 (with-system-library-directories
index 477c7c8ba7b45d1a25e88394a90b9cb8247960b6..d42c8b7c312759cd0ec384d9e34e00b55c6db446 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*- |#
 
-;;;; Compile the Blowfish wrapper.
+;;;; Compile the BLOWFISH option.
 
 (load-option 'CREF)
 (load-option 'FFI)
index f19e4008b641d0d232035d4a10f1f6f445db8030..5709e13e4209166a239c2e648441041f1a34fc43 100644 (file)
@@ -64,6 +64,10 @@ CLEANFILES += test
 
 TESTS = check-scm
 
-install-data-hook uninstall-data-hook:
+install-data-hook:
+       echo '(update-optiondb "$(DESTDIR)$(scmlibdir)/")' \
+       | $(MIT_SCHEME_EXE) --batch-mode
+
+uninstall-hook:
        echo '(update-optiondb "$(DESTDIR)$(scmlibdir)/")' \
        | $(MIT_SCHEME_EXE) --batch-mode
index fee1fa66bc0aac9e7407f3c290b3227b3b0f4333..3bacf4c61bff20dc5a418f8edb4ba29463d3f3cb 100644 (file)
@@ -1,4 +1,4 @@
-The GDBM wrapper.
+The GDBM option.
 
 This is a drop-in replacement for the gdbm microcode module and
 runtime/gdbm.scm.  It is not part of the core build and can be built
index 77bbd67a18709c4d3c22e9adc992c4387f33068b..62b8095e2feb46c70b2bd27ecde0bef499a1e82f 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*- |#
 
-;;;; Test the GDBM wrapper.
+;;;; Test the GDBM option.
 
 (load "make")
 (with-system-library-directories
index 2052264a185231cac618a1d43ad531abcf0ae4c7..2479f78ec45df06d7f11934873fc2c09a4fe00a4 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*- |#
 
-;;;; Compile the GDBM wrapper.
+;;;; Compile the GDBM option.
 
 (load-option 'CREF)
 (load-option 'FFI)
index 9e2f239401c07e7bdbf513b58c4ed1f00ae9453e..e35559b8868f205a6b7dea2539c44f345a628b2a 100644 (file)
@@ -24,10 +24,10 @@ USA.
 
 |#
 
-;;;; Test the GDBM wrapper.
+;;;; Test the GDBM option.
 
 (if (not (gdbm-available?))
-    (warn "gdbm wrapper not found")
+    (error "GDBM plugin not found")
     (let ((filename.db "gdbm-check.db"))
       (ignore-errors (lambda () (delete-file filename.db)))
       (let ((dbf (gdbm-open filename.db 0 GDBM_WRCREAT #o660)))
index ad4b313f4104403f755cbe10fb380a8988882dbb..05823348a213f810112f51ac8cb4792538ea83bf 100644 (file)
@@ -32,7 +32,7 @@ USA.
   (initialization (initialize-package!))
   ;; You'll have to import these from (global-definitions gdbm/).
   ;; They are currently bound in () by exports from (runtime gdbm).
-  #;(export #f
+  (export (gdbm global)
          gdbm-available?
          gdbm-close
          gdbm-delete
@@ -48,10 +48,14 @@ USA.
          gdbm-version
          gdbm_cachesize
          gdbm_fast
-         gdbm_fastmode
+         ;;gdbm_fastmode obsolete
          gdbm_insert
          gdbm_newdb
          gdbm_reader
          gdbm_replace
          gdbm_wrcreat
-         gdbm_writer))
\ No newline at end of file
+         gdbm_writer))
+
+(define-package (gdbm global)
+  ;; Just to get cref to analyze whether all exports are defined.
+  )
\ No newline at end of file
index 996c72adbd10419a7e79ad7f1e73994e416f5cf6..7295f805d9fce18f2643acc8106d8135c7716e7b 100644 (file)
@@ -24,7 +24,7 @@ USA.
 
 |#
 
-;;;; GDBM wrapper
+;;;; The GDBM option.
 ;;; package: (gdbm)
 
 (declare (usual-integrations))
@@ -32,10 +32,7 @@ USA.
 (C-include "gdbm")
 
 (define (gdbm-available?)
-  (let ((path (ignore-errors (lambda ()
-                              (system-library-pathname "gdbm-shim.so")))))
-    (and (pathname? path)
-        (file-loadable? path))))
+  (plugin-available? "gdbm"))
 
 ;; Parameters to gdbm_open for READERS, WRITERS, and WRITERS who can
 ;; create the database.
index fe30bad10b31986f8121d27da707c931537e5a17..6c1cddbd855b29db7e362bd0c2db9c3f15901a31 100644 (file)
@@ -65,6 +65,10 @@ CLEANFILES += test
 
 TESTS = check-scm
 
-install-data-hook uninstall-data-hook:
+install-data-hook:
+       echo '(update-optiondb "$(DESTDIR)$(scmlibdir)/")' \
+       | $(MIT_SCHEME_EXE) --batch-mode
+
+uninstall-hook:
        echo '(update-optiondb "$(DESTDIR)$(scmlibdir)/")' \
        | $(MIT_SCHEME_EXE) --batch-mode
index d48e8c2e06bdbdfc4156ee3df80147a7d845f59e..7a73aaf9a97fd3dd4040608a910dd9fced01b43b 100644 (file)
@@ -1,4 +1,4 @@
-The mcrypt wrapper.
+The MCRYPT option.
 
 This is a drop-in replacement for the mcrypt microcode module and the
 mcrypt-* procedures in runtime/crypto.scm.  It is not part of the core
index fc1f17c319482702e3a253ac06963def31b9d11f..f47a4edaa635a5005f119301c2f5426c4a6d0580 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*- |#
 
-;;;; Test the mcrypt wrapper.
+;;;; Test the MCRYPT option.
 
 (load "make")
 (with-system-library-directories
index 0479bc167459061f7c07d3ffa2bfa69efb54f7f7..c5576c077bb2a4c0999b351e5d0c04e92a5b65d7 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*- |#
 
-;;;; Compile the mcrypt wrapper.
+;;;; Compile the MCRYPT option.
 
 (load-option 'CREF)
 (load-option 'FFI)
index 4b61be1957d7442a88dee96cd7ee9c0fb0437636..628d020ccb694ecc4baeb0dd45bfcfb361378806 100644 (file)
@@ -24,7 +24,7 @@ USA.
 
 |#
 
-;;;; Test the mcrypt wrapper.
+;;;; Test the MCRYPT option.
 
 (define (random-string length)
   (list->string (make-initialized-list length
@@ -33,7 +33,7 @@ USA.
                                         (ascii->char (random 256))))))
 
 (if (not (mcrypt-available?))
-    (warn "mcrypt plugin not found")
+    (error "MCRYPT plugin not found")
     (begin
       (if (not (member "tripledes" (mcrypt-algorithm-names)))
          (error "No tripledes."))
index 4b75d2b7ea298f83767cb618b267ab81068f359c..5bff033160d1908163e07b53439b5672933f9628 100644 (file)
@@ -26,10 +26,6 @@ USA.
 
 (global-definitions runtime/)
 
-(define-package (mcrypt global)
-  ;; Just to get cref to analyze whether all exports are defined.
-  )
-
 (define-package (mcrypt)
   (files "mcrypt")
   (parent ())
@@ -55,4 +51,8 @@ USA.
          mcrypt-mode-names
          mcrypt-open-module
          mcrypt-self-test
-         mcrypt-supported-key-sizes))
\ No newline at end of file
+         mcrypt-supported-key-sizes))
+
+(define-package (mcrypt global)
+  ;; Just to get cref to analyze whether all exports are defined.
+  )
\ No newline at end of file
index 810fa0a6b36de6a5a1b4f736e437525e3c30c2c4..841dbcb16a3eaf5d08677c1e9bc2a3435ca624c8 100644 (file)
@@ -24,7 +24,7 @@ USA.
 
 |#
 
-;;;; mcrypt wrapper
+;;;; The MCRYPT option.
 ;;; package: (mcrypt)
 
 (declare (usual-integrations))
@@ -41,7 +41,7 @@ USA.
 ;;; multithreaded application... with dynamic module loading support".
 ;;; It is assumed this is the case for MIT Scheme.
 ;;; 
-;;; This wrapper uses an OS mutex to implement lock and unlock
+;;; This plugin uses an OS mutex to implement lock and unlock
 ;;; functions passed to mcrypt_mutex_register, and locks and unlocks
 ;;; it during mcrypt_module_open.  The Scheme mcrypt-context object,
 ;;; representing an MCRYPT "thread", should be used by one Scheme
@@ -80,7 +80,7 @@ USA.
 ;;;       mcrypt_list_algorithms and
 ;;;       mcrypt_list_modes.
 ;;; 
-;;; This wrapper ensures that MCRYPTs and size/name lists returned by
+;;; This plugin ensures that MCRYPTs and size/name lists returned by
 ;;; the library do not "leak" by putting cleanup thunks on a weak
 ;;; alist that is periodically scanned for objects that were GCed and
 ;;; not freed.
@@ -92,10 +92,7 @@ USA.
 (define mcrypt-mode-names-vector)
 
 (define (mcrypt-available?)
-  (let ((path (ignore-errors (lambda ()
-                              (system-library-pathname "mcrypt-shim.so")))))
-    (and (pathname? path)
-        (file-loadable? path))))
+  (plugin-available? "mcrypt"))
 
 (define (init!)
   (if (not mcrypt-initialized?)
index 7ac7bd23aeaf0cba24a7b5619bc1b17eaf02818c..132ed7a50a0134736965a00549b172c35677c9ba 100644 (file)
@@ -65,6 +65,10 @@ CLEANFILES += test
 
 TESTS = check-scm
 
-install-data-hook uninstall-data-hook:
+install-data-hook:
+       echo '(update-optiondb "$(DESTDIR)$(scmlibdir)/")' \
+       | $(MIT_SCHEME_EXE) --batch-mode
+
+uninstall-hook:
        echo '(update-optiondb "$(DESTDIR)$(scmlibdir)/")' \
        | $(MIT_SCHEME_EXE) --batch-mode
index de928cc8fdfff16683728ce31a4239513c01565d..d3a4fdda3a738d8263e58b1dfcbaf52513ba6d2b 100644 (file)
@@ -1,4 +1,4 @@
-The md5 wrapper.
+The MD5 option.
 
 This is a drop-in replacement for the md5 microcode module and the
 md5-* procedures in runtime/crypto.scm.  It is not part of the core
index 09647192ba054d582658965eaadf3ff19d1abef1..060027afeb2cf4f207d8a002c0a929aa6beb00c3 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*- |#
 
-;;;; Test the MD5 wrapper.
+;;;; Test the MD5 option.
 
 (load "make")
 (with-system-library-directories
index 749754eb4f46422ca6d27352d7aab2b9ad14551e..93bc0da8beb42c57f3cd4292e5dfc7a2b98801b6 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*- |#
 
-;;;; Compile the MD5 wrapper.
+;;;; Compile the MD5 option.
 
 (load-option 'CREF)
 (load-option 'FFI)
index eb6beac94947d82bbeec4bb1af2e7ea414a33aed..fb86f209be6f2624d01ef02acbf2394c8eb00d2e 100644 (file)
@@ -24,10 +24,10 @@ USA.
 
 |#
 
-;;;; Test the MD5 wrapper.
+;;;; Test the MD5 option.
 
 (if (not (md5-available?))
-    (warn "md5 wrapper not found")
+    (error "MD5 plugin not found")
     (let ((sample "Some text to hash."))
       (let ((hash (md5-sum->hexadecimal (md5-string sample))))
        (if (not (string=? hash "c8e89c4cbf3abf9aa758d691cbe4b784"))
index 81282b87c6f130d05698fe3283044b3b746e389c..a6229937cbd7b5e5c280ee43c6fe0ff16e8cc2e1 100644 (file)
@@ -31,10 +31,14 @@ USA.
   (parent ())
   ;; You'll have to import these from (global-definitions md5/).  They
   ;; are currently bound in () by exports from (runtime crypto).
-  #;(export #f
+  (export (md5 global)
          md5-available?
          md5-file
          md5-string
          md5-substring
          md5-sum->hexadecimal
-         md5-sum->number))
\ No newline at end of file
+         md5-sum->number))
+
+(define-package (md5 global)
+  ;; Just to get cref to analyze whether all exports are defined.
+  )
\ No newline at end of file
index a13877a252279eb3573444dd8f9811e4b333586b..a8052fa66a5580787789bed5cd8af64b4b6643e4 100644 (file)
@@ -24,14 +24,15 @@ USA.
 
 |#
 
-;;;; MD5 wrapper
+;;;; The MD5 option.
 ;;; package: (md5)
 
 (declare (usual-integrations))
 \f
 (C-include "md5")
 
-(define-integrable (mhash-available?) #f)
+(define (mhash-available?)
+  (plugin-available? "mhash"))
 
 (define (%md5-init)
   ;; Create and return an MD5 digest context.
@@ -74,10 +75,7 @@ USA.
       (%md5-available?)))
 
 (define (%md5-available?)
-  (let ((path (ignore-errors (lambda ()
-                              (system-library-pathname "md5-shim.so")))))
-    (and (pathname? path)
-        (file-loadable? path))))
+  (plugin-available? "md5"))
 
 (define (md5-file filename)
   (cond ((mhash-available?)
index 4f3a2c1db5cbc79dd0f22316e1e390daa1e7f564..aab510bb5d31b6b0bc17d15d692607a2627f4dd2 100644 (file)
@@ -65,6 +65,10 @@ CLEANFILES += test
 
 TESTS = check-scm
 
-install-data-hook uninstall-data-hook:
+install-data-hook:
+       echo '(update-optiondb "$(DESTDIR)$(scmlibdir)/")' \
+       | $(MIT_SCHEME_EXE) --batch-mode
+
+uninstall-hook:
        echo '(update-optiondb "$(DESTDIR)$(scmlibdir)/")' \
        | $(MIT_SCHEME_EXE) --batch-mode
index 6aca4b097de7fee23ebc671062235f2a8abdcd16..f83f43d52217cbb2ad4ad4bb2686323dd2731609 100644 (file)
@@ -1,4 +1,4 @@
-The mhash wrapper.
+The MHASH option.
 
 This is a drop-in replacement for the mhash microcode module and the
 mhash-* procedures in runtime/crypto.scm.  It is not part of the core
index aaaf5065c03cc586ac7244f01a52501d2bf74a27..a03b9f75451ffc2f6c2377f25ace945afe0089dd 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*- |#
 
-;;;; Test the mhash wrapper.
+;;;; Test the MHASH option.
 
 (load "make")
 (with-system-library-directories
index e5b92ce1a366df1b89f57f26fef6c570f46b3f91..9719d778101918d1987c6064ce728be96644afb2 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*- |#
 
-;;;; Compile the mhash wrapper.
+;;;; Compile the MHASH option.
 
 (load-option 'CREF)
 (load-option 'FFI)
index 0dc297449cc55676188395744e9a13dad1bf4fa6..7c58c7928298b4a91dc691b512ad972cc057e3dd 100644 (file)
@@ -24,10 +24,10 @@ USA.
 
 |#
 
-;;;; Test the mhash wrapper.
+;;;; Test the MHASH option.
 
 (if (not (mhash-available?))
-    (warn "mhash wrapper not found")
+    (error "MHASH plugin not found")
     (let ((sample "Some text to hash."))
       (let ((hash (mhash-sum->hexadecimal (mhash-string 'MD5 sample))))
        (if (not (string=? hash "c8e89c4cbf3abf9aa758d691cbe4b784"))
index 3eece26376e6e1e6a3820bffa0820b356a3d3864..b0223d92c5be2785d4ba20a5c3629ef7e1b6b217 100644 (file)
@@ -32,7 +32,7 @@ USA.
   (initialization (initialize-package!))
   ;; You'll have to import these from (global-definitions mhash/).
   ;; They are currently bound in () by exports from (runtime crypto).
-  #;(export #f
+  (export (mhash global)
          make-mhash-keygen-type
          mhash-available?
          mhash-context?
@@ -56,4 +56,8 @@ USA.
          mhash-sum->hexadecimal
          mhash-sum->number
          mhash-type-names
-         mhash-update))
\ No newline at end of file
+         mhash-update))
+
+(define-package (mhash global)
+  ;; Just to get cref to analyze whether all exports are defined.
+  )
\ No newline at end of file
index 9bccc0a046d2689db52f7037a55199fdda4d661a..1cf152b6db04323e3fda3a98b0b7b22512147586 100644 (file)
@@ -24,7 +24,7 @@ USA.
 
 |#
 
-;;;; mhash wrapper
+;;;; The MHASH option.
 ;;; package: (mhash)
 
 (declare (usual-integrations))
@@ -360,39 +360,39 @@ USA.
         v)))))
 \f
 (define (mhash-available?)
-  (let ((path (ignore-errors (lambda ()
-                              (system-library-pathname "mhash-shim.so")))))
-    (and (pathname? path)
-        (file-loadable? path)
-        (begin
-          (if (not mhash-initialized?)
-              (begin
-                (set! mhash-algorithm-names
-                      (make-names-vector
-                       (lambda () (C-call "mhash_count"))
-                       (lambda (hashid)
-                         (let* ((alien (make-alien-to-free
-                                        '(* char)
-                                        (lambda (alien)
-                                          (C-call "mhash_get_hash_name"
-                                                  alien hashid))))
-                                (str (c-peek-cstring alien)))
-                           (free alien)
-                           str))))
-                (set! mhash-keygen-names
-                      (make-names-vector
-                       (lambda () (C-call "mhash_keygen_count"))
-                       (lambda (keygenid)
-                         (let* ((alien (make-alien-to-free
-                                        '(* char)
-                                        (lambda (alien)
-                                          (C-call "mhash_get_keygen_name"
-                                                  alien keygenid))))
-                                (str (c-peek-cstring alien)))
-                           (free alien)
-                           str))))
-                (set! mhash-initialized? #t)))
-          #t))))
+  (and (plugin-available? "mhash")
+       (begin
+        (initialize-mhash-variables!)
+        #t)))
+
+(define (initialize-mhash-variables!)
+  (if (not mhash-initialized?)
+      (begin
+       (set! mhash-algorithm-names
+             (make-names-vector
+              (lambda () (C-call "mhash_count"))
+              (lambda (hashid)
+                (let* ((alien (make-alien-to-free
+                               '(* char)
+                               (lambda (alien)
+                                 (C-call "mhash_get_hash_name"
+                                         alien hashid))))
+                       (str (c-peek-cstring alien)))
+                  (free alien)
+                  str))))
+       (set! mhash-keygen-names
+             (make-names-vector
+              (lambda () (C-call "mhash_keygen_count"))
+              (lambda (keygenid)
+                (let* ((alien (make-alien-to-free
+                               '(* char)
+                               (lambda (alien)
+                                 (C-call "mhash_get_keygen_name"
+                                         alien keygenid))))
+                       (str (c-peek-cstring alien)))
+                  (free alien)
+                  str))))
+       (set! mhash-initialized? #t))))
 
 (define (reset-mhash-variables!)
   (set! mhash-initialized? #f)