Leo Famulari <l...@famulari.name> skribis:

> While looking at the build failure of recutils on core-updates [0], I
> noticed that the directory structure of bash:include changed from 4.3 to
> 4.4.
> Using stdc.h as an example, For 4.3, our package creates a tree like this:
> ./include/bash/stdc.h
> For 4.4, it's like this:
> ./include/bash/include/stdc.h

Note that there’s also include/bash/*.h.

> Is this intentional?

Sort of.  It used to be that Bash did not install its headers by itself,
so we had a phase to do that, roughly following what Debian did.

With 4.4, the headers are officially installed (there’s even a .pc
file), so I removed that phase and let ‘make install’ do its thing.

‘bash.pc’ contains this:

--8<---------------cut here---------------start------------->8---


Cflags: ${SHOBJ_CFLAGS} ${CCFLAGS} -I${headersdir} -I${headersdir}/builtins 
--8<---------------cut here---------------end--------------->8---

so everything should work fine for packages that use bash.pc.

However, there are currently zero packages using bash.pc because that
file is brand new, so we’ll have to manually adjust them for now.

I believe this patch should work, though I haven’t yet been able to
rebuild recutils:

diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index b7bd1f0..8262101 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -405,7 +405,19 @@ pictures, sounds, or video.")
                  (list (string-append "--with-bash-headers="
                                       (assoc-ref %build-inputs "bash:include")
-                                      "/include/bash"))))
+                                      "/include/bash"))
+                 #:phases (modify-phases %standard-phases
+                            (add-before 'build 'set-bash4.4-header-location
+                              (lambda _
+                                ;; Adjust the header search path for Bash 4.4
+                                ;; in accordance with 'bash.pc'.
+                                (substitute* "bash/Makefile.in"
+                                  (("AM_CPPFLAGS = (.*)$" _ rest)
+                                   (string-append "AM_CPPFLAGS = " rest
+                                                  " -I$(BASH_HEADERS)/include"
+                                                  "\n")))
+                                #t)))))
     (native-inputs `(("emacs" ,emacs-minimal)
                      ("bc" ,bc)
How does that sound?


Reply via email to