GNU bug report logs - #63416
[PATCH 0/2] Fix more derivation builder gexp issues.

Previous Next

Package: guix-patches;

Reported by: Christopher Baines <mail <at> cbaines.net>

Date: Wed, 10 May 2023 12:27:01 UTC

Severity: normal

Tags: patch

Done: Christopher Baines <mail <at> cbaines.net>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 63416 in the body.
You can then email your comments to 63416 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#63416; Package guix-patches. (Wed, 10 May 2023 12:27:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Christopher Baines <mail <at> cbaines.net>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Wed, 10 May 2023 12:27:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: guix-patches <at> gnu.org
Subject: [PATCH 0/2] Fix more derivation builder gexp issues.
Date: Wed, 10 May 2023 13:26:08 +0100
Christopher Baines (2):
  gnu: gcc: Change custom-gcc to use gexp's.
  gnu: gcc: Change make-gccgo to use gexp's.

 gnu/packages/gcc.scm | 78 ++++++++++++++++++++++----------------------
 1 file changed, 39 insertions(+), 39 deletions(-)


base-commit: e0c35d1578c10a8fe27c8372f3a8bb5dd88b01b8
-- 
2.39.1




Information forwarded to guix-patches <at> gnu.org:
bug#63416; Package guix-patches. (Wed, 10 May 2023 12:29:01 GMT) Full text and rfc822 format available.

Message #8 received at 63416 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: 63416 <at> debbugs.gnu.org
Subject: [PATCH 1/2] gnu: gcc: Change custom-gcc to use gexp's.
Date: Wed, 10 May 2023 13:28:55 +0100
As this seems to be generating broken derivations for i586-gnu otherwise.

* gnu/packages/gcc.scm (custom-gcc): Use gexp's for the generated package
arguments.
---
 gnu/packages/gcc.scm | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 47fb443155..2bd4cad6ec 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -1043,18 +1043,18 @@ (define* (custom-gcc gcc name languages
           (srfi srfi-26)
           (ice-9 regex)))
        ((#:configure-flags flags)
-        `(cons (string-append "--enable-languages="
-                              ,(string-join languages ","))
-               (remove (cut string-match "--enable-languages.*" <>)
-                       ,flags)))
+        #~(cons (string-append "--enable-languages="
+                               ,(string-join languages ","))
+                (remove (cut string-match "--enable-languages.*" <>)
+                        #$flags)))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'remove-broken-or-conflicting-files
-             (lambda* (#:key outputs #:allow-other-keys)
-               (for-each
-                delete-file
-                (find-files (string-append (assoc-ref outputs "out") "/bin")
-                            ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$"))))))))))
+        #~(modify-phases #$phases
+            (add-after 'install 'remove-broken-or-conflicting-files
+              (lambda* (#:key outputs #:allow-other-keys)
+                (for-each
+                 delete-file
+                 (find-files (string-append (assoc-ref outputs "out") "/bin")
+                             ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$"))))))))))
 
 (define %generic-search-paths
   ;; This is the language-neutral search path for GCC.  Entries in $CPATH are

base-commit: e0c35d1578c10a8fe27c8372f3a8bb5dd88b01b8
-- 
2.39.1





Information forwarded to guix-patches <at> gnu.org:
bug#63416; Package guix-patches. (Wed, 10 May 2023 12:29:01 GMT) Full text and rfc822 format available.

Message #11 received at 63416 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: 63416 <at> debbugs.gnu.org
Subject: [PATCH 2/2] gnu: gcc: Change make-gccgo to use gexp's.
Date: Wed, 10 May 2023 13:28:56 +0100
As otherwise this seems to generate broken derivations for i586-gnu.

* gnu/packages/gcc.scm (make-gccgo): Use gexp's for the package arguments.
---
 gnu/packages/gcc.scm | 56 ++++++++++++++++++++++----------------------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 2bd4cad6ec..38884678e0 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -1156,34 +1156,34 @@ (define (make-gccgo gcc)
       (arguments
        (substitute-keyword-arguments (package-arguments gccgo)
          ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'install 'wrap-go-with-tool-path
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (let* ((out (assoc-ref outputs "out"))
-                        (exedir (string-append out "/libexec/gcc"))
-                        (tooldir (dirname (car (find-files exedir "^cgo$")))))
-                   (wrap-program (string-append out "/bin/go")
-                     `("GCCGOTOOLDIR" =
-                       (,(string-append "${GCCGOTOOLDIR:-" tooldir "}")))
-                     `("GOROOT" =
-                       (,(string-append "${GOROOT:-" out "}")))))))
-             (add-before 'configure 'fix-gotools-runpath
-               (lambda _
-                 (substitute* "gotools/Makefile.in"
-                   (("AM_LDFLAGS =" all)
-                    (string-append all " -Wl,-rpath=$(libdir) ")))))
-             (add-before 'configure 'remove-tool-reference-from-libgo
-               (lambda _
-                 (substitute* "libgo/Makefile.in"
-                   (("(GccgoToolDir = \\\")[^\\\"]+" _ start)
-                    (string-append start "/nonexistent"))
-                   ,@(if (version>=? (package-version gccgo) "12.0")
-                       '((("(defaultGOROOT = `)[^`]+" _ start)
-                          (string-append start "/nonexistent")))
-                       '((("(DefaultGoroot = \\\")[^\\\"]+" _ start)
-                          (string-append start "/nonexistent"))))
-                   (("(defaultGOROOTValue.*?return `)[^`]+" _ start)
-                    (string-append start "/nonexistent"))))))))))))
+          #~(modify-phases #$phases
+              (add-after 'install 'wrap-go-with-tool-path
+                (lambda* (#:key outputs #:allow-other-keys)
+                  (let* ((out (assoc-ref outputs "out"))
+                         (exedir (string-append out "/libexec/gcc"))
+                         (tooldir (dirname (car (find-files exedir "^cgo$")))))
+                    (wrap-program (string-append out "/bin/go")
+                      `("GCCGOTOOLDIR" =
+                        (,(string-append "${GCCGOTOOLDIR:-" tooldir "}")))
+                      `("GOROOT" =
+                        (,(string-append "${GOROOT:-" out "}")))))))
+              (add-before 'configure 'fix-gotools-runpath
+                (lambda _
+                  (substitute* "gotools/Makefile.in"
+                    (("AM_LDFLAGS =" all)
+                     (string-append all " -Wl,-rpath=$(libdir) ")))))
+              (add-before 'configure 'remove-tool-reference-from-libgo
+                (lambda _
+                  (substitute* "libgo/Makefile.in"
+                    (("(GccgoToolDir = \\\")[^\\\"]+" _ start)
+                     (string-append start "/nonexistent"))
+                    ,@(if (version>=? (package-version gccgo) "12.0")
+                          '((("(defaultGOROOT = `)[^`]+" _ start)
+                             (string-append start "/nonexistent")))
+                          '((("(DefaultGoroot = \\\")[^\\\"]+" _ start)
+                             (string-append start "/nonexistent"))))
+                    (("(defaultGOROOTValue.*?return `)[^`]+" _ start)
+                     (string-append start "/nonexistent"))))))))))))
 
 (define-public gccgo-4.9
   (custom-gcc (package
-- 
2.39.1





Information forwarded to guix-patches <at> gnu.org:
bug#63416; Package guix-patches. (Thu, 11 May 2023 10:45:02 GMT) Full text and rfc822 format available.

Message #14 received at 63416 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Christopher Baines <mail <at> cbaines.net>
Cc: 63416 <at> debbugs.gnu.org
Subject: Re: bug#63416: [PATCH 0/2] Fix more derivation builder gexp issues.
Date: Thu, 11 May 2023 12:44:48 +0200
Hi,

Christopher Baines <mail <at> cbaines.net> skribis:

> As this seems to be generating broken derivations for i586-gnu otherwise.

“Seems” isn’t confidence-inspiring.  ;-)

Here’s one:

--8<---------------cut here---------------start------------->8---
$ ./pre-inst-env guix build gccgo -s i586-gnu -d 
/gnu/store/yzlmgxq20bk9xcbksi7q1f839056wzhr-gccgo-12.3.0.drv
$ guix gc --references /gnu/store/yzlmgxq20bk9xcbksi7q1f839056wzhr-gccgo-12.3.0.drv |grep builder
/gnu/store/jizw9gjvzb21jm7q7xlm71pw6fr24hhv-gccgo-12.3.0-builder
$ grep -q '#<' /gnu/store/jizw9gjvzb21jm7q7xlm71pw6fr24hhv-gccgo-12.3.0-builder ; echo $?
0
--8<---------------cut here---------------end--------------->8---

> * gnu/packages/gcc.scm (custom-gcc): Use gexp's for the generated package
> arguments.

[...]

> As otherwise this seems to generate broken derivations for i586-gnu.
>
> * gnu/packages/gcc.scm (make-gccgo): Use gexp's for the package arguments.


[...]

> +++ b/gnu/packages/gcc.scm
> @@ -1156,34 +1156,34 @@ (define (make-gccgo gcc)
>        (arguments
>         (substitute-keyword-arguments (package-arguments gccgo)
>           ((#:phases phases)
> -          `(modify-phases ,phases
> -             (add-after 'install 'wrap-go-with-tool-path

If ‘phases’ might be a gexp, then this should be a gexp as well.

Put differently, if one of the gcc* packages starts using gexps, then
all those that inherit from it should switch as well.

Since ‘gcc-11’ uses gexps (only when targeting the Hurd), all the other
ones should use gexps.  That probably includes all those in gcc.scm and
all those in commencement.scm.

Ludo’.




Information forwarded to guix-patches <at> gnu.org:
bug#63416; Package guix-patches. (Thu, 11 May 2023 14:55:01 GMT) Full text and rfc822 format available.

Message #17 received at 63416 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: 63416 <at> debbugs.gnu.org
Subject: [PATCH v2 2/2] gnu: gcc: Change make-gccgo to use gexp's.
Date: Thu, 11 May 2023 15:54:10 +0100
As otherwise this seems to generate broken derivations for i586-gnu.

* gnu/packages/gcc.scm (make-gccgo): Use gexp's for the package arguments.
---
 gnu/packages/gcc.scm | 56 ++++++++++++++++++++++----------------------
 1 file changed, 28 insertions(+), 28 deletions(-)

diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 1db37529f7..1b444c2b02 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -1156,34 +1156,34 @@ (define (make-gccgo gcc)
       (arguments
        (substitute-keyword-arguments (package-arguments gccgo)
          ((#:phases phases)
-          `(modify-phases ,phases
-             (add-after 'install 'wrap-go-with-tool-path
-               (lambda* (#:key outputs #:allow-other-keys)
-                 (let* ((out (assoc-ref outputs "out"))
-                        (exedir (string-append out "/libexec/gcc"))
-                        (tooldir (dirname (car (find-files exedir "^cgo$")))))
-                   (wrap-program (string-append out "/bin/go")
-                     `("GCCGOTOOLDIR" =
-                       (,(string-append "${GCCGOTOOLDIR:-" tooldir "}")))
-                     `("GOROOT" =
-                       (,(string-append "${GOROOT:-" out "}")))))))
-             (add-before 'configure 'fix-gotools-runpath
-               (lambda _
-                 (substitute* "gotools/Makefile.in"
-                   (("AM_LDFLAGS =" all)
-                    (string-append all " -Wl,-rpath=$(libdir) ")))))
-             (add-before 'configure 'remove-tool-reference-from-libgo
-               (lambda _
-                 (substitute* "libgo/Makefile.in"
-                   (("(GccgoToolDir = \\\")[^\\\"]+" _ start)
-                    (string-append start "/nonexistent"))
-                   ,@(if (version>=? (package-version gccgo) "12.0")
-                       '((("(defaultGOROOT = `)[^`]+" _ start)
-                          (string-append start "/nonexistent")))
-                       '((("(DefaultGoroot = \\\")[^\\\"]+" _ start)
-                          (string-append start "/nonexistent"))))
-                   (("(defaultGOROOTValue.*?return `)[^`]+" _ start)
-                    (string-append start "/nonexistent"))))))))))))
+          #~(modify-phases #$phases
+              (add-after 'install 'wrap-go-with-tool-path
+                (lambda* (#:key outputs #:allow-other-keys)
+                  (let* ((out (assoc-ref outputs "out"))
+                         (exedir (string-append out "/libexec/gcc"))
+                         (tooldir (dirname (car (find-files exedir "^cgo$")))))
+                    (wrap-program (string-append out "/bin/go")
+                      `("GCCGOTOOLDIR" =
+                        (,(string-append "${GCCGOTOOLDIR:-" tooldir "}")))
+                      `("GOROOT" =
+                        (,(string-append "${GOROOT:-" out "}")))))))
+              (add-before 'configure 'fix-gotools-runpath
+                (lambda _
+                  (substitute* "gotools/Makefile.in"
+                    (("AM_LDFLAGS =" all)
+                     (string-append all " -Wl,-rpath=$(libdir) ")))))
+              (add-before 'configure 'remove-tool-reference-from-libgo
+                (lambda _
+                  (substitute* "libgo/Makefile.in"
+                    (("(GccgoToolDir = \\\")[^\\\"]+" _ start)
+                     (string-append start "/nonexistent"))
+                    #$@(if (version>=? (package-version gccgo) "12.0")
+                           '((("(defaultGOROOT = `)[^`]+" _ start)
+                              (string-append start "/nonexistent")))
+                           '((("(DefaultGoroot = \\\")[^\\\"]+" _ start)
+                              (string-append start "/nonexistent"))))
+                    (("(defaultGOROOTValue.*?return `)[^`]+" _ start)
+                     (string-append start "/nonexistent"))))))))))))
 
 (define-public gccgo-4.9
   (custom-gcc (package
-- 
2.39.1





Information forwarded to guix-patches <at> gnu.org:
bug#63416; Package guix-patches. (Thu, 11 May 2023 14:55:02 GMT) Full text and rfc822 format available.

Message #20 received at 63416 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: 63416 <at> debbugs.gnu.org
Subject: [PATCH v2 1/2] gnu: gcc: Change custom-gcc to use gexp's.
Date: Thu, 11 May 2023 15:54:09 +0100
As this seems to be generating broken derivations for i586-gnu otherwise.

* gnu/packages/gcc.scm (custom-gcc): Use gexp's for the generated package
arguments.
---
 gnu/packages/gcc.scm | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 47fb443155..1db37529f7 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -1043,18 +1043,18 @@ (define* (custom-gcc gcc name languages
           (srfi srfi-26)
           (ice-9 regex)))
        ((#:configure-flags flags)
-        `(cons (string-append "--enable-languages="
-                              ,(string-join languages ","))
-               (remove (cut string-match "--enable-languages.*" <>)
-                       ,flags)))
+        #~(cons (string-append "--enable-languages="
+                               #$(string-join languages ","))
+                (remove (cut string-match "--enable-languages.*" <>)
+                        #$flags)))
        ((#:phases phases)
-        `(modify-phases ,phases
-           (add-after 'install 'remove-broken-or-conflicting-files
-             (lambda* (#:key outputs #:allow-other-keys)
-               (for-each
-                delete-file
-                (find-files (string-append (assoc-ref outputs "out") "/bin")
-                            ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$"))))))))))
+        #~(modify-phases #$phases
+            (add-after 'install 'remove-broken-or-conflicting-files
+              (lambda* (#:key outputs #:allow-other-keys)
+                (for-each
+                 delete-file
+                 (find-files (string-append (assoc-ref outputs "out") "/bin")
+                             ".*(c\\+\\+|cpp|g\\+\\+|gcov|gcc|lto)(-.*)?$"))))))))))
 
 (define %generic-search-paths
   ;; This is the language-neutral search path for GCC.  Entries in $CPATH are

base-commit: 4557c83a7d9df6edc9dd3b7b2a53e1a0ec3e6e34
-- 
2.39.1





Information forwarded to guix-patches <at> gnu.org:
bug#63416; Package guix-patches. (Thu, 11 May 2023 15:00:02 GMT) Full text and rfc822 format available.

Message #23 received at 63416 <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: 63416 <at> debbugs.gnu.org
Subject: Re: bug#63416: [PATCH 0/2] Fix more derivation builder gexp issues.
Date: Thu, 11 May 2023 15:57:20 +0100
[Message part 1 (text/plain, inline)]
Ludovic Courtès <ludo <at> gnu.org> writes:

> Christopher Baines <mail <at> cbaines.net> skribis:
>
>> As this seems to be generating broken derivations for i586-gnu otherwise.
>
> “Seems” isn’t confidence-inspiring.  ;-)
>
> Here’s one:
>
> $ ./pre-inst-env guix build gccgo -s i586-gnu -d 
> /gnu/store/yzlmgxq20bk9xcbksi7q1f839056wzhr-gccgo-12.3.0.drv
> $ guix gc --references /gnu/store/yzlmgxq20bk9xcbksi7q1f839056wzhr-gccgo-12.3.0.drv |grep builder
> /gnu/store/jizw9gjvzb21jm7q7xlm71pw6fr24hhv-gccgo-12.3.0-builder
> $ grep -q '#<' /gnu/store/jizw9gjvzb21jm7q7xlm71pw6fr24hhv-gccgo-12.3.0-builder ; echo $?
> 0
>
>> * gnu/packages/gcc.scm (custom-gcc): Use gexp's for the generated package
>> arguments.
>
> [...]
>
>> As otherwise this seems to generate broken derivations for i586-gnu.
>>
>> * gnu/packages/gcc.scm (make-gccgo): Use gexp's for the package arguments.
>
>
> [...]
>
>> +++ b/gnu/packages/gcc.scm
>> @@ -1156,34 +1156,34 @@ (define (make-gccgo gcc)
>>        (arguments
>>         (substitute-keyword-arguments (package-arguments gccgo)
>>           ((#:phases phases)
>> -          `(modify-phases ,phases
>> -             (add-after 'install 'wrap-go-with-tool-path
>
> If ‘phases’ might be a gexp, then this should be a gexp as well.
>
> Put differently, if one of the gcc* packages starts using gexps, then
> all those that inherit from it should switch as well.
>
> Since ‘gcc-11’ uses gexps (only when targeting the Hurd), all the other
> ones should use gexps.  That probably includes all those in gcc.scm and
> all those in commencement.scm.

Yep, I think these changes were sufficient, but I missed replacing a few
unquote bits with ungexp, so as QA shows this affected a bunch of
derivations for all systems.

I've fixed those bits now and sent a v2.
[signature.asc (application/pgp-signature, inline)]

Reply sent to Christopher Baines <mail <at> cbaines.net>:
You have taken responsibility. (Mon, 15 May 2023 08:53:02 GMT) Full text and rfc822 format available.

Notification sent to Christopher Baines <mail <at> cbaines.net>:
bug acknowledged by developer. (Mon, 15 May 2023 08:53:02 GMT) Full text and rfc822 format available.

Message #28 received at 63416-done <at> debbugs.gnu.org (full text, mbox):

From: Christopher Baines <mail <at> cbaines.net>
To: 63416-done <at> debbugs.gnu.org
Subject: Re: bug#63416: [PATCH 0/2] Fix more derivation builder gexp issues.
Date: Mon, 15 May 2023 09:51:19 +0100
[Message part 1 (text/plain, inline)]
Christopher Baines <mail <at> cbaines.net> writes:

> Ludovic Courtès <ludo <at> gnu.org> writes:
>
>> Christopher Baines <mail <at> cbaines.net> skribis:
>>
>>> As this seems to be generating broken derivations for i586-gnu otherwise.
>>
>> “Seems” isn’t confidence-inspiring.  ;-)
>>
>> Here’s one:
>>
>> $ ./pre-inst-env guix build gccgo -s i586-gnu -d 
>> /gnu/store/yzlmgxq20bk9xcbksi7q1f839056wzhr-gccgo-12.3.0.drv
>> $ guix gc --references /gnu/store/yzlmgxq20bk9xcbksi7q1f839056wzhr-gccgo-12.3.0.drv |grep builder
>> /gnu/store/jizw9gjvzb21jm7q7xlm71pw6fr24hhv-gccgo-12.3.0-builder
>> $ grep -q '#<' /gnu/store/jizw9gjvzb21jm7q7xlm71pw6fr24hhv-gccgo-12.3.0-builder ; echo $?
>> 0
>>
>>> * gnu/packages/gcc.scm (custom-gcc): Use gexp's for the generated package
>>> arguments.
>>
>> [...]
>>
>>> As otherwise this seems to generate broken derivations for i586-gnu.
>>>
>>> * gnu/packages/gcc.scm (make-gccgo): Use gexp's for the package arguments.
>>
>>
>> [...]
>>
>>> +++ b/gnu/packages/gcc.scm
>>> @@ -1156,34 +1156,34 @@ (define (make-gccgo gcc)
>>>        (arguments
>>>         (substitute-keyword-arguments (package-arguments gccgo)
>>>           ((#:phases phases)
>>> -          `(modify-phases ,phases
>>> -             (add-after 'install 'wrap-go-with-tool-path
>>
>> If ‘phases’ might be a gexp, then this should be a gexp as well.
>>
>> Put differently, if one of the gcc* packages starts using gexps, then
>> all those that inherit from it should switch as well.
>>
>> Since ‘gcc-11’ uses gexps (only when targeting the Hurd), all the other
>> ones should use gexps.  That probably includes all those in gcc.scm and
>> all those in commencement.scm.
>
> Yep, I think these changes were sufficient, but I missed replacing a few
> unquote bits with ungexp, so as QA shows this affected a bunch of
> derivations for all systems.
>
> I've fixed those bits now and sent a v2.

v2 looked good in QA, so I pushed this to master as
70986f052a2b60ccb5f3bd5da520f9cdf5ea60ad.
[signature.asc (application/pgp-signature, inline)]

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Mon, 12 Jun 2023 11:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 318 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.