diff mbox series

[bug#38228] Fwd: [PATCH] gnu: boost: Build with python3

Message ID cabac34c7411da2121a0490fb46b4864@autistici.org
State Accepted
Headers show
Series [bug#38228] Fwd: [PATCH] gnu: boost: Build with python3 | expand

Commit Message

Giacomo Leidi Nov. 16, 2019, 9:04 a.m. UTC
Hello I'm opening another thread ( old one was 
http://issues.guix.gnu.org/issue/38128 ) to build boost in core-updates 
with python3. The new patch also parameterizes python versions across 
the package definition.

WDYT?

Bye,

Giacomo

-------- Original Message --------
Subject: Re: bug#38128: [PATCH] gnu: Add boost-with-python3
Date: 2019-11-12 00:06
 From: goodoldpaul@autistici.org
To: Efraim Flashner <efraim@flashner.co.il>
Cc: 38128@debbugs.gnu.org, mbakke@fastmail.com

On 2019-11-11 09:36, Efraim Flashner wrote:
> I'm going to re-open this one, sorry.
> 
> Can we replace the '--with-python-version=3.7' and 
> 'libboost_python37.so'
> with parameterized python variables so we don't have to bump it when we
> get a new python version?
> 
> Also, I've attached a package that I've never actually built that uses
> boost built with python3 if you want something to test it out with :)

I'm not sure how to send a patch for core-updates, I never did it so I 
attached it here. Please tell me if I should open another patch.

The patch builds boost with python3 and parameterizes the python 
version, as Efraim suggested. I built it successfully on core updates. 
When I tried building Epour on core-updates and saw that Guix was 
starting to build Bash 5.0 I renounced (:D) and I built it on master 
with boost-with-python3 .

Libtorrent-rasterbar seems to build fine on master but some tests fail 
to pass and they all seem to be network related but then again this is 
torrent we are talking about. I didn't investigate further but I attach 
the log.

I also tried boost-with-python3 with Malmo ( 
https://github.com/microsoft/malmo ) and it seemed to compile fine just 
but that package has other problems such as trying to start gradle so I 
nerver managed to actually run it.

Let me know what you think about the patch,

Bye

Giacomo

Comments

Marius Bakke Nov. 20, 2019, 12:01 a.m. UTC | #1
goodoldpaul@autistici.org writes:

> Hello I'm opening another thread ( old one was 
> http://issues.guix.gnu.org/issue/38128 ) to build boost in core-updates 
> with python3. The new patch also parameterizes python versions across 
> the package definition.
>
> WDYT?
>
> Bye,
>
> Giacomo
>
> -------- Original Message --------
> Subject: Re: bug#38128: [PATCH] gnu: Add boost-with-python3
> Date: 2019-11-12 00:06
>  From: goodoldpaul@autistici.org
> To: Efraim Flashner <efraim@flashner.co.il>
> Cc: 38128@debbugs.gnu.org, mbakke@fastmail.com
>
> On 2019-11-11 09:36, Efraim Flashner wrote:
>> I'm going to re-open this one, sorry.
>> 
>> Can we replace the '--with-python-version=3.7' and 
>> 'libboost_python37.so'
>> with parameterized python variables so we don't have to bump it when we
>> get a new python version?
>> 
>> Also, I've attached a package that I've never actually built that uses
>> boost built with python3 if you want something to test it out with :)
>
> I'm not sure how to send a patch for core-updates, I never did it so I 
> attached it here. Please tell me if I should open another patch.

Excellent.  Here is fine.  :-)

Note that 'boost-with-python3' has already been merged to core-updates.
What we need now is 1) a patch that makes these adjustments to
'boost-with-python3', and 2) a follow-up patch that removes
boost-with-python3 and adjusts the original 'boost' package instead.

The latter will be applied to core-updates after the first patch gets
merged, but you can make (and test :-)) both patches on a local checkout
of the 'master' branch.

> The patch builds boost with python3 and parameterizes the python 
> version, as Efraim suggested. I built it successfully on core updates. 
> When I tried building Epour on core-updates and saw that Guix was 
> starting to build Bash 5.0 I renounced (:D) and I built it on master 
> with boost-with-python3 .

In general, working on the 'core-updates' branch requires a fairly
powerful computer (and lots of time), sorry about that!

> Libtorrent-rasterbar seems to build fine on master but some tests fail 
> to pass and they all seem to be network related but then again this is 
> torrent we are talking about. I didn't investigate further but I attach 
> the log.

Strange.  I suppose these tests are not run when using Boost + Python 2?
In any case we don't have to worry about that just yet ;-)

> I also tried boost-with-python3 with Malmo ( 
> https://github.com/microsoft/malmo ) and it seemed to compile fine just 
> but that package has other problems such as trying to start gradle so I 
> nerver managed to actually run it.

Cool.  Packaging 'gradle' should be a rewarding experience that makes
many people very happy, if you would like a challenge.  ;-)


> From 91a25fb143ad0e2e20e8ddadea0c0610849adf92 Mon Sep 17 00:00:00 2001
> From: Giacomo Leidi <goodoldpaul@autistici.org>
> Date: Tue, 12 Nov 2019 00:24:49 +0100
> Subject: [PATCH] gnu: boost: Build with python3.
>
> * gnu/packages/boost.scm (boost):
> [arguments]: Parameterize python version.
> [native-inputs]: Use python3.

[...]

>      (arguments
> -     `(#:tests? #f
> +     `(#:modules ((guix build gnu-build-system)
> +                  (guix build utils)
> +                  (srfi srfi-1))

If you add (guix build python-build-system) in there ...

>           (replace 'configure
>             (lambda* (#:key inputs outputs #:allow-other-keys)
>               (let ((icu (assoc-ref inputs "icu4c"))
> +                   (python (assoc-ref inputs "python"))
> +                   (python-version
> +                    (take (string-split ,(package-version python) #\.) 2))

... then you can use (python-version (python-version python)) here and
below.

> +               (substitute* "tools/build/src/tools/python.jam"
> +                 (("include/python\\$\\(version\\)")
> +                  "include/python$(version)m"))

I wonder why we have to add the 'm'?  Will that work with Python 2?

Otherwise LGTM.

For 'core-updates', it would be really great to add a 'python2' output
to Boost in case there are packages that do not work with
libboost_python3.so, but I'm not sure how to achieve that.  Future
problems!  :-)
diff mbox series

Patch

From 91a25fb143ad0e2e20e8ddadea0c0610849adf92 Mon Sep 17 00:00:00 2001
From: Giacomo Leidi <goodoldpaul@autistici.org>
Date: Tue, 12 Nov 2019 00:24:49 +0100
Subject: [PATCH] gnu: boost: Build with python3.

* gnu/packages/boost.scm (boost):
[arguments]: Parameterize python version.
[native-inputs]: Use python3.
---
 gnu/packages/boost.scm | 41 +++++++++++++++++++++++++++++------------
 1 file changed, 29 insertions(+), 12 deletions(-)

diff --git a/gnu/packages/boost.scm b/gnu/packages/boost.scm
index a2253a9efc..389fd1fdb6 100644
--- a/gnu/packages/boost.scm
+++ b/gnu/packages/boost.scm
@@ -62,10 +62,13 @@ 
               ("zlib" ,zlib)))
     (native-inputs
      `(("perl" ,perl)
-       ("python" ,python-2)
+       ("python" ,python)
        ("tcsh" ,tcsh)))
     (arguments
-     `(#:tests? #f
+     `(#:modules ((guix build gnu-build-system)
+                  (guix build utils)
+                  (srfi srfi-1))
+       #:tests? #f
        #:make-flags
        (list "threading=multi" "link=shared"
 
@@ -83,6 +86,9 @@ 
          (replace 'configure
            (lambda* (#:key inputs outputs #:allow-other-keys)
              (let ((icu (assoc-ref inputs "icu4c"))
+                   (python (assoc-ref inputs "python"))
+                   (python-version
+                    (take (string-split ,(package-version python) #\.) 2))
                    (out (assoc-ref outputs "out")))
                (substitute* '("libs/config/configure"
                               "libs/spirit/classic/phoenix/test/runtest.sh"
@@ -94,11 +100,19 @@ 
                (setenv "SHELL" (which "sh"))
                (setenv "CONFIG_SHELL" (which "sh"))
 
+               (substitute* "tools/build/src/tools/python.jam"
+                 (("include/python\\$\\(version\\)")
+                  "include/python$(version)m"))
+
                (invoke "./bootstrap.sh"
                        (string-append "--prefix=" out)
-                       ;; Auto-detection looks for ICU only in traditional
-                       ;; install locations.
+                       ;; Auto-detection looks for dependencies only
+                       ;; in traditional install locations.
                        (string-append "--with-icu=" icu)
+                       (string-append "--with-python=" python "/bin/python3")
+                       (string-append "--with-python-root=" python)
+                       (string-append "--with-python-version="
+                                      (string-join python-version "."))
                        "--with-toolset=gcc"))))
          (replace 'build
            (lambda* (#:key make-flags #:allow-other-keys)
@@ -109,15 +123,18 @@ 
            (lambda* (#:key make-flags #:allow-other-keys)
              (apply invoke "./b2" "install" make-flags)))
          (add-after 'install 'provide-libboost_python
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let ((out (assoc-ref outputs "out")))
-               ;; Boost can build support for both Python 2 and Python 3 since
-               ;; version 1.67.0, and suffixes each library with the Python
-               ;; version.  Many consumers only check for libboost_python
-               ;; however, so we provide it here as suggested in
-               ;; <https://github.com/boostorg/python/issues/203>.
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (let* ((out (assoc-ref outputs "out"))
+                    (python (assoc-ref inputs "python"))
+                    (python-version
+                     (take (string-split ,(package-version python) #\.) 2))
+                    (libboost.so (string-append "libboost_python"
+                                                (string-join python-version "")
+                                                ".so")))
                (with-directory-excursion (string-append out "/lib")
-                 (symlink "libboost_python27.so" "libboost_python.so"))
+                 (symlink libboost.so "libboost_python.so")
+                 ;; Some packages also look for libboost_python3.so
+                 (symlink libboost.so "libboost_python3.so"))
                #t))))))
 
     (home-page "https://www.boost.org")
-- 
2.24.0