* guile-gdbm doesn't work with gdbm-1.14 @ 2018-03-18 8:39 宋文武 2018-03-18 13:50 ` Mark H Weaver 0 siblings, 1 reply; 5+ messages in thread From: 宋文武 @ 2018-03-18 8:39 UTC (permalink / raw) To: guix-devel, guile-user Hello, since version 1.14, gdbm doesn't export "gdbm_errno" anymore [1], so the guile-gdbm ffi binding code [2] need updates now (I'm not confident to do it myself...). [1] http://git.gnu.org.ua/cgit/gdbm.git/commit/?id=c175231e2781abd17eabf412cfb597654a076c7b [2] https://github.com/ijp/guile-gdbm/blob/master/gdbm.scm#L156 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: guile-gdbm doesn't work with gdbm-1.14 2018-03-18 8:39 guile-gdbm doesn't work with gdbm-1.14 宋文武 @ 2018-03-18 13:50 ` Mark H Weaver 2018-03-19 10:20 ` Ricardo Wurmus 2018-03-19 16:47 ` Ludovic Courtès 0 siblings, 2 replies; 5+ messages in thread From: Mark H Weaver @ 2018-03-18 13:50 UTC (permalink / raw) To: 宋文武; +Cc: guix-devel, guile-user [-- Attachment #1: Type: text/plain, Size: 436 bytes --] iyzsong@member.fsf.org (宋文武) writes: > Hello, since version 1.14, gdbm doesn't export "gdbm_errno" anymore [1], > so the guile-gdbm ffi binding code [2] need updates now (I'm not > confident to do it myself...). > > [1] http://git.gnu.org.ua/cgit/gdbm.git/commit/?id=c175231e2781abd17eabf412cfb597654a076c7b > [2] https://github.com/ijp/guile-gdbm/blob/master/gdbm.scm#L156 Here's a preliminary fix. Mark [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: [PATCH] gnu: guile-gdbm-ffi: Add support for gdbm-1.14 --] [-- Type: text/x-patch, Size: 5197 bytes --] From 353abb66adb756c0ad51b4784004034a8a06de8c Mon Sep 17 00:00:00 2001 From: Mark H Weaver <mhw@netris.org> Date: Sun, 18 Mar 2018 08:43:06 -0400 Subject: [PATCH] gnu: guile-gdbm-ffi: Add support for gdbm-1.14. * gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/guile.scm (guile-gdbm-ffi)[native-inputs]: New field. [inputs]: Move above arguments. Add the patch, and the 'patch' program. [propagated-inputs]: Move above arguments. [arguments]: In the builder, add code to apply the patch. --- gnu/local.mk | 1 + gnu/packages/guile.scm | 21 +++++++-- .../patches/guile-gdbm-ffi-support-gdbm-1.14.patch | 53 ++++++++++++++++++++++ 3 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch diff --git a/gnu/local.mk b/gnu/local.mk index 010f1417f..a03b482df 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -742,6 +742,7 @@ dist_patch_DATA = \ %D%/packages/patches/guile-1.8-cpp-4.5.patch \ %D%/packages/patches/guile-2.2-default-utf8.patch \ %D%/packages/patches/guile-default-utf8.patch \ + %D%/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch \ %D%/packages/patches/guile-linux-syscalls.patch \ %D%/packages/patches/guile-present-coding.patch \ %D%/packages/patches/guile-relocatable.patch \ diff --git a/gnu/packages/guile.scm b/gnu/packages/guile.scm index 1c8eaa9ec..f6f8ef9b9 100644 --- a/gnu/packages/guile.scm +++ b/gnu/packages/guile.scm @@ -1134,6 +1134,15 @@ inspired by the SCSH regular expression system.") (base32 "1j8wrsw7v9w6qkl47xz0rdikg50v16nn6kbs3lgzcymjzpa7babj")))) (build-system trivial-build-system) + (inputs + `(("guile" ,guile-2.2) + ;; patch-and-repack doesn't work for git checkouts, + ;; so we must apply the patch manually. + ("patch" ,patch) + ("patch-file" ,(search-patch + "guile-gdbm-ffi-support-gdbm-1.14.patch")))) + (propagated-inputs + `(("gdbm" ,gdbm))) (arguments `(#:modules ((guix build utils)) @@ -1186,12 +1195,16 @@ inspired by the SCSH regular expression system.") (format #f "(dynamic-link \"~a/lib/libgdbm.so\")" (assoc-ref %build-inputs "gdbm")))) + ;; Apply the patch to add support for gdbm-1.14. + (let ((patch-command (string-append (assoc-ref %build-inputs "patch") + "/bin/patch")) + (patch-file (assoc-ref %build-inputs "patch-file"))) + (with-directory-excursion (dirname gdbm.scm-dest) + (format #t "applying '~a'...~%" patch-file) + (invoke patch-command "--force" "--input" patch-file))) + ;; compile to the destination (compile-file gdbm.scm-dest gdbm.go-dest))))) - (inputs - `(("guile" ,guile-2.2))) - (propagated-inputs - `(("gdbm" ,gdbm))) (home-page "https://github.com/ijp/guile-gdbm") (synopsis "Guile bindings to the GDBM library via Guile's FFI") (description diff --git a/gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch b/gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch new file mode 100644 index 000000000..e6b578bdb --- /dev/null +++ b/gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch @@ -0,0 +1,53 @@ +From 1da99396dc65993ba34ac0370ca5d6acda6a3322 Mon Sep 17 00:00:00 2001 +From: Mark H Weaver <mhw@netris.org> +Date: Sun, 18 Mar 2018 07:02:37 -0400 +Subject: [PATCH] Add support for gdbm-1.14. + +As of gdbm-1.14, 'gdbm_errno' no longer exists as a binary interface. +It has been replaced by 'gdbm_errno_location', a function that returns +int*. We now use this new interface if it's available. +--- + gdbm.scm | 18 ++++++++++++++++-- + 1 file changed, 16 insertions(+), 2 deletions(-) + +diff --git a/gdbm.scm b/gdbm.scm +index b92992f..4d38cc3 100644 +--- a/gdbm.scm ++++ b/gdbm.scm +@@ -17,6 +17,9 @@ + ;; You should have received a copy of the GNU General Public License + ;; along with this program. If not, see <http://www.gnu.org/licenses/>. + ++;; Modified by Mark H Weaver <mhw@netris.org> in March 2018 to support ++;; gdbm-1.14 with its new 'gdbm_errno_location' interface. ++ + (define-module (gdbm) + #:use-module (system foreign) + #:use-module (rnrs bytevectors) +@@ -151,10 +154,21 @@ + + ;;; errors + +-(define %errno (dynamic-pointer "gdbm_errno" libgdbm)) ++(define %list-int ++ (list int)) ++ ++(define (dereference-int ptr) ++ (apply (lambda (errno) errno) ++ (parse-c-struct ptr %list-int))) ++ ++(define %errno-location ++ (or (false-if-exception ++ (let ((func (dynamic-func "gdbm_errno_location" libgdbm))) ++ (pointer->procedure '* func '()))) ++ (const (dynamic-pointer "gdbm_errno" libgdbm)))) + + (define (gdbm-errno) +- (pointer-address (dereference-pointer %errno))) ++ (dereference-int (%errno-location))) + + (define (gdbm-error) + (error (pointer->string (%gdbm-strerror (gdbm-errno))))) +-- +2.16.2 + -- 2.16.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: guile-gdbm doesn't work with gdbm-1.14 2018-03-18 13:50 ` Mark H Weaver @ 2018-03-19 10:20 ` Ricardo Wurmus 2018-03-19 16:17 ` Mark H Weaver 2018-03-19 16:47 ` Ludovic Courtès 1 sibling, 1 reply; 5+ messages in thread From: Ricardo Wurmus @ 2018-03-19 10:20 UTC (permalink / raw) To: Mark H Weaver; +Cc: guix-devel, guile-user Mark H Weaver <mhw@netris.org> writes: > iyzsong@member.fsf.org (宋文武) writes: > >> Hello, since version 1.14, gdbm doesn't export "gdbm_errno" anymore [1], >> so the guile-gdbm ffi binding code [2] need updates now (I'm not >> confident to do it myself...). >> >> [1] http://git.gnu.org.ua/cgit/gdbm.git/commit/?id=c175231e2781abd17eabf412cfb597654a076c7b >> [2] https://github.com/ijp/guile-gdbm/blob/master/gdbm.scm#L156 > > Here's a preliminary fix. Thank you. > * gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch: New file. > * gnu/local.mk (dist_patch_DATA): Add it. > * gnu/packages/guile.scm (guile-gdbm-ffi)[native-inputs]: New field. > [inputs]: Move above arguments. Add the patch, and the 'patch' program. > [propagated-inputs]: Move above arguments. > [arguments]: In the builder, add code to apply the patch. I don’t see the native-inputs field in the patch. Shouldn’t the “patch” and “patch-file” inputs be native-inputs? -- Ricardo GPG: BCA6 89B6 3655 3801 C3C6 2150 197A 5888 235F ACAC https://elephly.net ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: guile-gdbm doesn't work with gdbm-1.14 2018-03-19 10:20 ` Ricardo Wurmus @ 2018-03-19 16:17 ` Mark H Weaver 0 siblings, 0 replies; 5+ messages in thread From: Mark H Weaver @ 2018-03-19 16:17 UTC (permalink / raw) To: Ricardo Wurmus; +Cc: guix-devel, guile-user Ricardo Wurmus <rekado@elephly.net> writes: > Mark H Weaver <mhw@netris.org> writes: > >> iyzsong@member.fsf.org (宋文武) writes: >> >>> Hello, since version 1.14, gdbm doesn't export "gdbm_errno" anymore [1], >>> so the guile-gdbm ffi binding code [2] need updates now (I'm not >>> confident to do it myself...). >>> >>> [1] http://git.gnu.org.ua/cgit/gdbm.git/commit/?id=c175231e2781abd17eabf412cfb597654a076c7b >>> [2] https://github.com/ijp/guile-gdbm/blob/master/gdbm.scm#L156 >> >> Here's a preliminary fix. > > Thank you. > >> * gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch: New file. >> * gnu/local.mk (dist_patch_DATA): Add it. >> * gnu/packages/guile.scm (guile-gdbm-ffi)[native-inputs]: New field. >> [inputs]: Move above arguments. Add the patch, and the 'patch' program. >> [propagated-inputs]: Move above arguments. >> [arguments]: In the builder, add code to apply the patch. > > I don’t see the native-inputs field in the patch. Indeed, sorry for the mistake in the commit log. Initially I made them native inputs, but then I moved them to 'inputs'. > Shouldn’t the “patch” and “patch-file” inputs be native-inputs? Yes. However, I noticed that the package already assumes a native build, because it runs 'guile' from 'inputs' to compile the Scheme code. Also, I wasn't sure off-hand how native-inputs are handled in the trivial-build-system. For purposes of this commit, I didn't want to take on the job of also fixing this package for cross-building, which I was likely to get wrong without testing. Given that I no longer use substitutes, that would have been a big job. Does that make sense? Mark ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: guile-gdbm doesn't work with gdbm-1.14 2018-03-18 13:50 ` Mark H Weaver 2018-03-19 10:20 ` Ricardo Wurmus @ 2018-03-19 16:47 ` Ludovic Courtès 1 sibling, 0 replies; 5+ messages in thread From: Ludovic Courtès @ 2018-03-19 16:47 UTC (permalink / raw) To: Mark H Weaver; +Cc: guix-devel, guile-user, Ian Price Hello, Mark H Weaver <mhw@netris.org> skribis: > iyzsong@member.fsf.org (宋文武) writes: > >> Hello, since version 1.14, gdbm doesn't export "gdbm_errno" anymore [1], >> so the guile-gdbm ffi binding code [2] need updates now (I'm not >> confident to do it myself...). Thanks, Mark for the quick fix. > --- /dev/null > +++ b/gnu/packages/patches/guile-gdbm-ffi-support-gdbm-1.14.patch > @@ -0,0 +1,53 @@ > +From 1da99396dc65993ba34ac0370ca5d6acda6a3322 Mon Sep 17 00:00:00 2001 > +From: Mark H Weaver <mhw@netris.org> > +Date: Sun, 18 Mar 2018 07:02:37 -0400 > +Subject: [PATCH] Add support for gdbm-1.14. > + > +As of gdbm-1.14, 'gdbm_errno' no longer exists as a binary interface. > +It has been replaced by 'gdbm_errno_location', a function that returns > +int*. We now use this new interface if it's available. Ian, could you consider applying this patch upstream? Thanks! Ludo’. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-03-19 16:47 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-03-18 8:39 guile-gdbm doesn't work with gdbm-1.14 宋文武 2018-03-18 13:50 ` Mark H Weaver 2018-03-19 10:20 ` Ricardo Wurmus 2018-03-19 16:17 ` Mark H Weaver 2018-03-19 16:47 ` Ludovic Courtès
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/guix.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.