unofficial mirror of help-guix@gnu.org 
 help / color / mirror / Atom feed
* Python package with some rust dependency
@ 2024-02-12  1:49 Alexis Simon
  2024-02-12 23:29 ` Carlo Zancanaro
  0 siblings, 1 reply; 11+ messages in thread
From: Alexis Simon @ 2024-02-12  1:49 UTC (permalink / raw)
  To: help-guix

Hi,

I've been trying to package a science python software that mixes some 
C++ and rust dependencies.
https://github.com/molpopgen/fwdpy11

I'm stuck in how to handle this.
Going the pyproject-build-system way, the cargo part errors at accessing 
crates.io as would be expected, I guess I should probably patch the 
cargo.toml to use the local registry?

Going the cargo-build-system way, it errors probably because there's no 
rust crate at the root of the project.

Here is what I've tried so far
https://codeberg.org/alxsim/local-channel/src/branch/main/packages/fwdpy11.scm

Does anyone have pointers on how to handle the build of this packages?

Thanks,
Alexis


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Python package with some rust dependency
  2024-02-12  1:49 Python package with some rust dependency Alexis Simon
@ 2024-02-12 23:29 ` Carlo Zancanaro
  2024-02-13 19:36   ` Alexis Simon
  0 siblings, 1 reply; 11+ messages in thread
From: Carlo Zancanaro @ 2024-02-12 23:29 UTC (permalink / raw)
  To: Alexis Simon; +Cc: help-guix

Hi Alexis,

I don't really know much about building rust. Given this one repository
has both, I wonder if it would make sense to build them separately (as
two packages), and have one as an input of the other.

Presumably this would mean the python package taking the rust package as
an input, but the details might be more involved.

On Sun, Feb 11 2024, Alexis Simon wrote:
> Going the cargo-build-system way, it errors probably because there's
> no rust crate at the root of the project.

One option here might be to add a phase after the unpack phase, to chdir
into the directory with the rust crate. You can see examples in lots of
places in the Guix repository, like wpa-supplicant-gui. Which has a
phase modification:

    (add-after 'unpack 'chdir
      (lambda _ (chdir "wpa_supplicant/wpa_gui-qt4")))

You'll need to change the directory to match where in the fwdpy11 source
you need to go to build the rust stuff.

I hope that helps,

Carlo


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Python package with some rust dependency
  2024-02-12 23:29 ` Carlo Zancanaro
@ 2024-02-13 19:36   ` Alexis Simon
  2024-02-13 21:46     ` Carlo Zancanaro
  0 siblings, 1 reply; 11+ messages in thread
From: Alexis Simon @ 2024-02-13 19:36 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: help-guix

Thanks a lot Carlo

I see what you mean there, but I'm probably out of my depth in terms of 
guix/guile knowledge so this will probably have to wait for me to level up.

On 12/02/2024 15:29, Carlo Zancanaro wrote:
> Hi Alexis,
> 
> I don't really know much about building rust. Given this one repository
> has both, I wonder if it would make sense to build them separately (as
> two packages), and have one as an input of the other.
> 
> Presumably this would mean the python package taking the rust package as
> an input, but the details might be more involved.
> 
> On Sun, Feb 11 2024, Alexis Simon wrote:
>> Going the cargo-build-system way, it errors probably because there's
>> no rust crate at the root of the project.
> 
> One option here might be to add a phase after the unpack phase, to chdir
> into the directory with the rust crate. You can see examples in lots of
> places in the Guix repository, like wpa-supplicant-gui. Which has a
> phase modification:
> 
>      (add-after 'unpack 'chdir
>        (lambda _ (chdir "wpa_supplicant/wpa_gui-qt4")))
> 
> You'll need to change the directory to match where in the fwdpy11 source
> you need to go to build the rust stuff.

Ok, this seems really counter intuitive though to go and use the cargo 
build system for a python package only have a tiny part in rust.

> 
> I hope that helps,

Thanks for the pointers, it helps

> 
> Carlo


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Python package with some rust dependency
  2024-02-13 19:36   ` Alexis Simon
@ 2024-02-13 21:46     ` Carlo Zancanaro
  2024-02-13 21:55       ` Alexis Simon
  0 siblings, 1 reply; 11+ messages in thread
From: Carlo Zancanaro @ 2024-02-13 21:46 UTC (permalink / raw)
  To: Alexis Simon; +Cc: help-guix

On Tue, Feb 13 2024, Alexis Simon wrote:
> Ok, this seems really counter intuitive though to go and use the cargo
> build system for a python package only have a tiny part in rust.

I'm not sure why this is counter-intuitive. The existence of any rust at
all means you need to build rust code. The normal way to do that in Guix
is to use the cargo-build-system.

Equally, I don't find it strange that the upstream build instructions[1]
ask me to install a rust compiler and cbindgen. I need to do that if I
want to build rust code.

It's also worth noting that there are 22 packages in Cargo.lock[2], so
building the one rust file in the repository is a bit more involved.

Carlo

[1]: https://molpopgen.github.io/fwdpy11/misc/developersguide.html
[2]: https://github.com/molpopgen/fwdpy11/blob/main/rust/fp11rust/Cargo.lock


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Python package with some rust dependency
  2024-02-13 21:46     ` Carlo Zancanaro
@ 2024-02-13 21:55       ` Alexis Simon
  2024-02-16  6:08         ` Alexis Simon
  0 siblings, 1 reply; 11+ messages in thread
From: Alexis Simon @ 2024-02-13 21:55 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: help-guix

Fair enough, I just meant that it's pretty hard as a newcomer to know 
which build system You're supposed to use to start with when 
encountering a project where several languages are used.

Alexis

On 13/02/2024 13:46, Carlo Zancanaro wrote:
> On Tue, Feb 13 2024, Alexis Simon wrote:
>> Ok, this seems really counter intuitive though to go and use the cargo
>> build system for a python package only have a tiny part in rust.
> 
> I'm not sure why this is counter-intuitive. The existence of any rust at
> all means you need to build rust code. The normal way to do that in Guix
> is to use the cargo-build-system.
> 
> Equally, I don't find it strange that the upstream build instructions[1]
> ask me to install a rust compiler and cbindgen. I need to do that if I
> want to build rust code.
> 
> It's also worth noting that there are 22 packages in Cargo.lock[2], so
> building the one rust file in the repository is a bit more involved.
> 
> Carlo
> 
> [1]: https://molpopgen.github.io/fwdpy11/misc/developersguide.html
> [2]: https://github.com/molpopgen/fwdpy11/blob/main/rust/fp11rust/Cargo.lock


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Python package with some rust dependency
  2024-02-13 21:55       ` Alexis Simon
@ 2024-02-16  6:08         ` Alexis Simon
  2024-02-17  0:02           ` Alexis Simon
  0 siblings, 1 reply; 11+ messages in thread
From: Alexis Simon @ 2024-02-16  6:08 UTC (permalink / raw)
  To: help-guix

Hi,

So right now I'm trying to go the splitting in two packages way, similar 
to what is done for python-cryptography.

So I managed to build the first one that produces a header file in the 
store /gnu/store/*/lib/header.h

In the second package, I don't get how to copy this file inside the 
build. I've been trying something like this:
```
     (native-inputs (list python-fwdpy11-rust-lib))
     (arguments
       (list
         #:phases
         #~(modify-phases %standard-phases
             (add-before 'build 'copy-rust-lib
                (lambda* (#:key native-inputs #:allow-other-keys)
                  (copy-file (search-input-file
                            native-inputs "lib/fp11rust_api.h")
                           "lib/core/internal/fp11rust_api.h"))))))
```
Which complains there is no match, because it seams the package store 
path is not present in the native-inputs, although I specify it in the 
package.

Thanks,
Alexis

On 13/02/2024 13:55, Alexis Simon wrote:
> Fair enough, I just meant that it's pretty hard as a newcomer to know 
> which build system You're supposed to use to start with when 
> encountering a project where several languages are used.
> 
> Alexis
> 
> On 13/02/2024 13:46, Carlo Zancanaro wrote:
>> On Tue, Feb 13 2024, Alexis Simon wrote:
>>> Ok, this seems really counter intuitive though to go and use the cargo
>>> build system for a python package only have a tiny part in rust.
>>
>> I'm not sure why this is counter-intuitive. The existence of any rust at
>> all means you need to build rust code. The normal way to do that in Guix
>> is to use the cargo-build-system.
>>
>> Equally, I don't find it strange that the upstream build instructions[1]
>> ask me to install a rust compiler and cbindgen. I need to do that if I
>> want to build rust code.
>>
>> It's also worth noting that there are 22 packages in Cargo.lock[2], so
>> building the one rust file in the repository is a bit more involved.
>>
>> Carlo
>>
>> [1]: https://molpopgen.github.io/fwdpy11/misc/developersguide.html
>> [2]: 
>> https://github.com/molpopgen/fwdpy11/blob/main/rust/fp11rust/Cargo.lock
> 


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Python package with some rust dependency
  2024-02-16  6:08         ` Alexis Simon
@ 2024-02-17  0:02           ` Alexis Simon
  2024-02-17 11:50             ` Carlo Zancanaro
  0 siblings, 1 reply; 11+ messages in thread
From: Alexis Simon @ 2024-02-17  0:02 UTC (permalink / raw)
  To: help-guix

[-- Attachment #1: Type: text/plain, Size: 3702 bytes --]

Hi,

So I think I'm nearly there (part of the scm attached).

The last thing I'd like to do is run the python tests inside the 
cargo-build-system but couldn't find an example of it. I don't 
understand how to do that.

I get the following error, which is most probably me not knowing how to 
write scheme.
```
error: in phase 'check-python-module': uncaught exception:
wrong-type-arg "apply" "Apply to non-list: ~S" (#f) (#f)
phase `check-python-module' failed after 0.0 seconds
Backtrace:
            8 (primitive-load "/gnu/store/c2v51hzvlji63jbh0jwn5dbz10j…")
In guix/build/gnu-build-system.scm:
     908:2  7 (gnu-build #:source _ #:outputs _ #:inputs _ #:phases . #)
In ice-9/boot-9.scm:
   1752:10  6 (with-exception-handler _ _ #:unwind? _ # _)
In srfi/srfi-1.scm:
     634:9  5 (for-each #<procedure 7ffff5f29c20 at guix/build/gnu-b…> …)
In ice-9/boot-9.scm:
   1752:10  4 (with-exception-handler _ _ #:unwind? _ # _)
In guix/build/gnu-build-system.scm:
    929:23  3 (_)
In unknown file:
            2 (_ "/gnu/store/qzx9n7452cw0w11c96gvijdnmk6v82m2-python…" …)
In ice-9/boot-9.scm:
   1685:16  1 (raise-exception _ #:continuable? _)
   1685:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure apply: Apply to non-list: #f
```

Thanks
Alexis


On 15/02/2024 22:08, Alexis Simon wrote:
> Hi,
> 
> So right now I'm trying to go the splitting in two packages way, similar 
> to what is done for python-cryptography.
> 
> So I managed to build the first one that produces a header file in the 
> store /gnu/store/*/lib/header.h
> 
> In the second package, I don't get how to copy this file inside the 
> build. I've been trying something like this:
> ```
>      (native-inputs (list python-fwdpy11-rust-lib))
>      (arguments
>        (list
>          #:phases
>          #~(modify-phases %standard-phases
>              (add-before 'build 'copy-rust-lib
>                 (lambda* (#:key native-inputs #:allow-other-keys)
>                   (copy-file (search-input-file
>                             native-inputs "lib/fp11rust_api.h")
>                            "lib/core/internal/fp11rust_api.h"))))))
> ```
> Which complains there is no match, because it seams the package store 
> path is not present in the native-inputs, although I specify it in the 
> package.
> 
> Thanks,
> Alexis
> 
> On 13/02/2024 13:55, Alexis Simon wrote:
>> Fair enough, I just meant that it's pretty hard as a newcomer to know 
>> which build system You're supposed to use to start with when 
>> encountering a project where several languages are used.
>>
>> Alexis
>>
>> On 13/02/2024 13:46, Carlo Zancanaro wrote:
>>> On Tue, Feb 13 2024, Alexis Simon wrote:
>>>> Ok, this seems really counter intuitive though to go and use the cargo
>>>> build system for a python package only have a tiny part in rust.
>>>
>>> I'm not sure why this is counter-intuitive. The existence of any rust at
>>> all means you need to build rust code. The normal way to do that in Guix
>>> is to use the cargo-build-system.
>>>
>>> Equally, I don't find it strange that the upstream build instructions[1]
>>> ask me to install a rust compiler and cbindgen. I need to do that if I
>>> want to build rust code.
>>>
>>> It's also worth noting that there are 22 packages in Cargo.lock[2], so
>>> building the one rust file in the repository is a bit more involved.
>>>
>>> Carlo
>>>
>>> [1]: https://molpopgen.github.io/fwdpy11/misc/developersguide.html
>>> [2]: 
>>> https://github.com/molpopgen/fwdpy11/blob/main/rust/fp11rust/Cargo.lock
>>
> 

[-- Attachment #2: fwdpy11.scm --]
[-- Type: text/x-scheme, Size: 4114 bytes --]

(define-public fwdpy11
  (package
    (name "fwdpy11")
    (version "0.21.6")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "fwdpy11" version))
       (sha256
        (base32 "1mgs7fcda3cr7a7kbnk0x50993131453rlrkq7nv4pxqw53lnrv3"))))
    (build-system cargo-build-system)
    (arguments
      (list
        #:imported-modules `(,@%cargo-build-system-modules
                           ,@%pyproject-build-system-modules)
        #:modules '((guix build cargo-build-system)
                    ((guix build pyproject-build-system) #:prefix py:)
                    (guix build utils))
        #:phases
        #~(modify-phases %standard-phases
            (add-after 'unpack 'chdir-rust
                (lambda _
                  (chdir "rust/fp11rust")))
            (replace 'unpack-rust-crates
                ;; This is to avoid the non-crate source from being erroneously
                ;; unpacked by this phase, causing an error.
                (lambda* (#:key inputs #:allow-other-keys #:rest args)
                  (apply (assoc-ref %standard-phases 'unpack-rust-crates)
                         (append args
                                 (list #:inputs (alist-delete "source" inputs))))))
            (replace 'configure
                (lambda* (#:key inputs #:allow-other-keys #:rest args)
                  (apply (assoc-ref %standard-phases 'configure)
                         (append args
                                 (list #:inputs (alist-delete "source" inputs))))))            
            (delete 'build)
            (delete 'check)
            (delete 'install)
            (delete 'package)
            (add-before 'prepare-python-module 'chdir-root
                        (lambda _ (chdir "../..")))
            (add-after 'prepare-python-module 'build-python-module
              (assoc-ref py:%standard-phases 'build))
            (add-after 'build-python-module 'install-python-module
              (assoc-ref py:%standard-phases 'install))
            (add-after 'install-python-module 'check-python-module
              (lambda* (#:key inputs #:allow-other-keys #:rest args)
                (apply (assoc-ref py:%standard-phases 'check) args)))
            )
        #:cargo-inputs
        `(("rust-autocfg", rust-autocfg-1)
          ("rust-demes", rust-demes-0.5)
          ("rust-demes-forward", rust-demes-forward-0.4)
          ("rust-demes-forward-capi", rust-demes-forward-capi-0.4)
          ("rust-hashbrown", rust-hashbrown-0.12)
          ("rust-indexmap", rust-indexmap-1.8)
          ("rust-itoa", rust-itoa-1)
          ("rust-libc", rust-libc-0.2)
          ("rust-proc-macro2", rust-proc-macro2-1)
          ("rust-quote", rust-quote-1)
          ("rust-regex", rust-regex-1)
          ("rust-regex-syntax", rust-regex-syntax-0.6)
          ("rust-ryu", rust-ryu-1)
          ("rust-serde", rust-serde-1)
          ("rust-serde-derive", rust-serde-derive-1)
          ("rust-serde-yaml", rust-serde-yaml-0.9)
          ("rust-syn", rust-syn-1)
          ("rust-thiserror", rust-thiserror-1)
          ("rust-thiserror-impl", rust-thiserror-impl-1)
          ("rust-unicode-ident", rust-unicode-ident-1)
          ("rust-unsafe-libyaml", rust-unsafe-libyaml-0.2)
          )
      ))
    (native-inputs
     (list python-wrapper
           cmake
           rust-cbindgen
           gsl
           pybind11
           python-wheel
           python-setuptools
           python-setuptools-scm
           python-pytest
           python-pytest-xdist
           python-hypothesis
           python-msprime))
    (propagated-inputs (list python-attrs
                             python-deprecated
                             python-black
                             python-demes
                             python-numpy
                             python-scipy
                             python-tskit))
    (home-page "https://github.com/molpopgen/fwdpy11")
    (synopsis "Forward-time population genetic simulation in Python")
    (description "Forward-time population genetic simulation in Python")
    (license license:gpl3))
)

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Python package with some rust dependency
  2024-02-17  0:02           ` Alexis Simon
@ 2024-02-17 11:50             ` Carlo Zancanaro
  2024-02-17 16:46               ` Alexis Simon
  0 siblings, 1 reply; 11+ messages in thread
From: Carlo Zancanaro @ 2024-02-17 11:50 UTC (permalink / raw)
  To: Alexis Simon; +Cc: help-guix

Hi Alexis,

On Fri, Feb 16 2024, Alexis Simon wrote:
> ```
> error: in phase 'check-python-module': uncaught exception:
> wrong-type-arg "apply" "Apply to non-list: ~S" (#f) (#f)
> phase `check-python-module' failed after 0.0 seconds
> ...
> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> In procedure apply: Apply to non-list: #f
> ```

This error sounds like you're trying to call #f as a function. Since
this is happening in the 'check-python-module phase, we can look at this
code:

>             (add-after 'install-python-module 'check-python-module
>               (lambda* (#:key inputs #:allow-other-keys #:rest args)
>                 (apply (assoc-ref py:%standard-phases 'check) args)))

I assume that (assoc-ref py:%standard-phases 'check) is returning #f,
which is causing the error. Given you don't use inputs, you could try
the same thing as you've done for the other phases like:

    (add-after 'install-python-module 'check-python-module
      (assoc-ref py:%standard-phases 'check))

But I'm not sure that will help you if the assoc-ref is really returning
#f. I guess in the worst case you could just leave out the check phase
entirely.

Also, as an aside, I'm not sure where the 'prepare-python-module phase
is coming from. Does it actually exist?

Carlo


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Python package with some rust dependency
  2024-02-17 11:50             ` Carlo Zancanaro
@ 2024-02-17 16:46               ` Alexis Simon
  2024-02-17 19:25                 ` Alexis Simon
  2024-02-18  3:03                 ` Carlo Zancanaro
  0 siblings, 2 replies; 11+ messages in thread
From: Alexis Simon @ 2024-02-17 16:46 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: help-guix



On 17/02/2024 03:50, Carlo Zancanaro wrote:
> Hi Alexis,
> 
> On Fri, Feb 16 2024, Alexis Simon wrote:
>> ```
>> error: in phase 'check-python-module': uncaught exception:
>> wrong-type-arg "apply" "Apply to non-list: ~S" (#f) (#f)
>> phase `check-python-module' failed after 0.0 seconds
>> ...
>> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
>> In procedure apply: Apply to non-list: #f
>> ```
> 
> This error sounds like you're trying to call #f as a function. Since
> this is happening in the 'check-python-module phase, we can look at this
> code:
> 
>>              (add-after 'install-python-module 'check-python-module
>>                (lambda* (#:key inputs #:allow-other-keys #:rest args)
>>                  (apply (assoc-ref py:%standard-phases 'check) args)))
> 
> I assume that (assoc-ref py:%standard-phases 'check) is returning #f,
> which is causing the error. Given you don't use inputs, you could try
> the same thing as you've done for the other phases like:
> 
>      (add-after 'install-python-module 'check-python-module
>        (assoc-ref py:%standard-phases 'check))
> 
> But I'm not sure that will help you if the assoc-ref is really returning
> #f. I guess in the worst case you could just leave out the check phase
> entirely.

Thanks that makes a bit more sense I think.

> 
> Also, as an aside, I'm not sure where the 'prepare-python-module phase
> is coming from. Does it actually exist?

This is a very good question I had myself and to which I couldn't find 
the answer. I found examples such as those [1] in the repo and couldn't 
find where this phase was specified. But it seems to work.

> 
> Carlo

Alexis

[1] 
https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/python-xyz.scm#n3453


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Python package with some rust dependency
  2024-02-17 16:46               ` Alexis Simon
@ 2024-02-17 19:25                 ` Alexis Simon
  2024-02-18  3:03                 ` Carlo Zancanaro
  1 sibling, 0 replies; 11+ messages in thread
From: Alexis Simon @ 2024-02-17 19:25 UTC (permalink / raw)
  To: Carlo Zancanaro; +Cc: help-guix

[-- Attachment #1: Type: text/plain, Size: 2001 bytes --]

for reference, I finally managed to get this working.
See attached file.
Thanks for the help
Alexis

On 17/02/2024 08:46, Alexis Simon wrote:
> 
> 
> On 17/02/2024 03:50, Carlo Zancanaro wrote:
>> Hi Alexis,
>>
>> On Fri, Feb 16 2024, Alexis Simon wrote:
>>> ```
>>> error: in phase 'check-python-module': uncaught exception:
>>> wrong-type-arg "apply" "Apply to non-list: ~S" (#f) (#f)
>>> phase `check-python-module' failed after 0.0 seconds
>>> ...
>>> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
>>> In procedure apply: Apply to non-list: #f
>>> ```
>>
>> This error sounds like you're trying to call #f as a function. Since
>> this is happening in the 'check-python-module phase, we can look at this
>> code:
>>
>>>              (add-after 'install-python-module 'check-python-module
>>>                (lambda* (#:key inputs #:allow-other-keys #:rest args)
>>>                  (apply (assoc-ref py:%standard-phases 'check) args)))
>>
>> I assume that (assoc-ref py:%standard-phases 'check) is returning #f,
>> which is causing the error. Given you don't use inputs, you could try
>> the same thing as you've done for the other phases like:
>>
>>      (add-after 'install-python-module 'check-python-module
>>        (assoc-ref py:%standard-phases 'check))
>>
>> But I'm not sure that will help you if the assoc-ref is really returning
>> #f. I guess in the worst case you could just leave out the check phase
>> entirely.
> 
> Thanks that makes a bit more sense I think.
> 
>>
>> Also, as an aside, I'm not sure where the 'prepare-python-module phase
>> is coming from. Does it actually exist?
> 
> This is a very good question I had myself and to which I couldn't find 
> the answer. I found examples such as those [1] in the repo and couldn't 
> find where this phase was specified. But it seems to work.
> 
>>
>> Carlo
> 
> Alexis
> 
> [1] 
> https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/python-xyz.scm#n3453
> 

[-- Attachment #2: fwdpy11.scm --]
[-- Type: text/x-scheme, Size: 7851 bytes --]

(define-module (packages fwdpy11)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (gnu packages)
  #:use-module (gnu packages base)
  #:use-module (gnu packages build-tools)
  #:use-module (gnu packages cmake)
  #:use-module (gnu packages check)
  #:use-module (gnu packages rust)
  #:use-module (gnu packages crates-io)
  #:use-module (gnu packages rust-apps)
  #:use-module (gnu packages python)
  #:use-module (gnu packages python-build)
  #:use-module (gnu packages python-xyz)
  #:use-module (gnu packages python-science)
  #:use-module (gnu packages bioinformatics)
  #:use-module (gnu packages serialization)
  #:use-module (gnu packages compression)
  #:use-module (gnu packages maths)
  #:use-module (gnu packages boost)
  #:use-module (gnu packages autotools)
  #:use-module (packages popgen)
  #:use-module (guix packages)
  #:use-module (guix gexp)
  #:use-module (guix download)
  #:use-module (guix git-download)
  #:use-module (guix utils)
  #:use-module (guix build-system python)
  #:use-module (guix build-system cargo)
  #:use-module (guix build-system gnu)
  #:use-module (guix build-system pyproject))

(define-public rust-demes-0.5
  (package
    (name "rust-demes")
    (version "0.5.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "demes" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "0mg78a9f16fayqpg8vkbr0209rj05svppxcfk0ldgn125mw81b11"))))
    (build-system cargo-build-system)
    (arguments
     `(#:skip-build? #t
       #:cargo-inputs (("rust-regex" ,rust-regex-1)
                       ("rust-serde" ,rust-serde-1)
                       ("rust-serde-json" ,rust-serde-json-1)
                       ("rust-serde-yaml" ,rust-serde-yaml-0.9)
                       ("rust-thiserror" ,rust-thiserror-1))))
    (home-page "https://github.com/molpopgen/demes-rs")
    (synopsis "rust implementation of demes specification")
    (description "rust implementation of demes specification")
    (license license:expat)))

(define-public rust-demes-forward-0.4
  (package
    (name "rust-demes-forward")
    (version "0.4.0")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "demes-forward" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "1awhy8vgmj24241vl304f0m17jdqhrw78wm5gn0q3w8y1432mclm"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs (("rust-demes" ,rust-demes-0.5)
                       ("rust-thiserror" ,rust-thiserror-1))
       #:cargo-development-inputs (("rust-anyhow" ,rust-anyhow-1))))
    (home-page "https://github.com/molpopgen/demes-rs")
    (synopsis "rust API for iterating demes models forwards in time")
    (description "rust API for iterating demes models forwards in time")
    (license license:expat)))

(define-public rust-demes-forward-capi-0.4
  (package
    (name "rust-demes-forward-capi")
    (version "0.4.1")
    (source
     (origin
       (method url-fetch)
       (uri (crate-uri "demes-forward-capi" version))
       (file-name (string-append name "-" version ".tar.gz"))
       (sha256
        (base32 "1b3aq2wjw6sr9nqlr8v71hi9kjj4wq48k39irgvlwyipnj74ws7s"))))
    (build-system cargo-build-system)
    (arguments
     `(#:cargo-inputs (("rust-demes-forward" ,rust-demes-forward-0.4)
                       ("rust-libc" ,rust-libc-0.2))))
    (home-page "https://github.com/molpopgen/demes-rs")
    (synopsis "C API to demes-forward crate")
    (description "C API to demes-forward crate")
    (license license:expat)))

(define-public fwdpy11
  (package
    (name "fwdpy11")
    (version "0.21.6")
    (source
     (origin
       (method url-fetch)
       (uri (pypi-uri "fwdpy11" version))
       (sha256
        (base32 "1mgs7fcda3cr7a7kbnk0x50993131453rlrkq7nv4pxqw53lnrv3"))))
    (build-system cargo-build-system)
    (arguments
      (list
        #:imported-modules `(,@%cargo-build-system-modules
                           ,@%pyproject-build-system-modules)
        #:modules '((guix build cargo-build-system)
                    ((guix build pyproject-build-system) #:prefix py:)
                    (guix build utils))
        #:phases
        #~(modify-phases %standard-phases
            (delete 'package)
            (delete 'check)
            (add-after 'unpack 'chdir-rust
                (lambda _
                  (chdir "rust/fp11rust")))
            (replace 'unpack-rust-crates
                ;; This is to avoid the non-crate source from being erroneously
                ;; unpacked by this phase, causing an error.
                (lambda* (#:key inputs #:allow-other-keys #:rest args)
                  (apply (assoc-ref %standard-phases 'unpack-rust-crates)
                         (append args
                                 (list #:inputs (alist-delete "source" inputs))))))
            (replace 'configure
                (lambda* (#:key inputs #:allow-other-keys #:rest args)
                  (apply (assoc-ref %standard-phases 'configure)
                         (append args
                                 (list #:inputs (alist-delete "source" inputs))))))            
            (add-after 'patch-cargo-checksums 'chdir-python
                        (lambda _ (chdir "../..")))
            (add-after 'chdir-python 'enable-bytecode-determinism
              (assoc-ref py:%standard-phases 'enable-bytecode-determinism))
            (replace 'build
              (assoc-ref py:%standard-phases 'build))
            (replace 'install
              (assoc-ref py:%standard-phases 'install))
            (add-after 'install 'add-install-to-pythonpath
              (assoc-ref py:%standard-phases 'add-install-to-pythonpath))
            (add-after 'add-install-to-pythonpath 'check-python-module
              (lambda* (#:key tests? #:allow-other-keys)
                (when tests?
                  (invoke "pytest" "-vv" "tests")))))
       #:cargo-inputs
        `(("rust-autocfg", rust-autocfg-1)
          ("rust-demes", rust-demes-0.5)
          ("rust-demes-forward", rust-demes-forward-0.4)
          ("rust-demes-forward-capi", rust-demes-forward-capi-0.4)
          ("rust-hashbrown", rust-hashbrown-0.12)
          ("rust-indexmap", rust-indexmap-1.8)
          ("rust-itoa", rust-itoa-1)
          ("rust-libc", rust-libc-0.2)
          ("rust-proc-macro2", rust-proc-macro2-1)
          ("rust-quote", rust-quote-1)
          ("rust-regex", rust-regex-1)
          ("rust-regex-syntax", rust-regex-syntax-0.6)
          ("rust-ryu", rust-ryu-1)
          ("rust-serde", rust-serde-1)
          ("rust-serde-derive", rust-serde-derive-1)
          ("rust-serde-yaml", rust-serde-yaml-0.9)
          ("rust-syn", rust-syn-1)
          ("rust-thiserror", rust-thiserror-1)
          ("rust-thiserror-impl", rust-thiserror-impl-1)
          ("rust-unicode-ident", rust-unicode-ident-1)
          ("rust-unsafe-libyaml", rust-unsafe-libyaml-0.2)
          )
      ))
    (native-inputs
     (list python-wrapper
           cmake
           rust-cbindgen
           gsl
           pybind11
           python-wheel
           python-setuptools
           python-setuptools-scm
           python-pytest
           python-pytest-xdist
           python-hypothesis
           python-msprime))
    (propagated-inputs (list python-attrs
                             python-deprecated
                             python-black
                             python-demes
                             python-numpy
                             python-scipy
                             python-tskit))
    (home-page "https://github.com/molpopgen/fwdpy11")
    (synopsis "Forward-time population genetic simulation in Python")
    (description "Forward-time population genetic simulation in Python")
    (license license:gpl3))
)

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Python package with some rust dependency
  2024-02-17 16:46               ` Alexis Simon
  2024-02-17 19:25                 ` Alexis Simon
@ 2024-02-18  3:03                 ` Carlo Zancanaro
  1 sibling, 0 replies; 11+ messages in thread
From: Carlo Zancanaro @ 2024-02-18  3:03 UTC (permalink / raw)
  To: Alexis Simon; +Cc: help-guix

On Sat, Feb 17 2024, Alexis Simon wrote:
> On 17/02/2024 03:50, Carlo Zancanaro wrote:
>> Also, as an aside, I'm not sure where the 'prepare-python-module
>> phase is coming from. Does it actually exist?
>
> This is a very good question I had myself and to which I couldn't find
> the answer. I found examples such as those [1] in the repo and
> couldn't find where this phase was specified. But it seems to work.

I don't doubt that this works at the moment, but I expect that
ed1b2d0a86a0a62d8d843f06669a5f072482c37e on core-updates will break this
(and any other packages that reference non-existent phases).

Packages in the guix repository will presumably be fixed during the
core-updates merge, but any other packages will need to be updated.

Carlo


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-02-18  3:04 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-12  1:49 Python package with some rust dependency Alexis Simon
2024-02-12 23:29 ` Carlo Zancanaro
2024-02-13 19:36   ` Alexis Simon
2024-02-13 21:46     ` Carlo Zancanaro
2024-02-13 21:55       ` Alexis Simon
2024-02-16  6:08         ` Alexis Simon
2024-02-17  0:02           ` Alexis Simon
2024-02-17 11:50             ` Carlo Zancanaro
2024-02-17 16:46               ` Alexis Simon
2024-02-17 19:25                 ` Alexis Simon
2024-02-18  3:03                 ` Carlo Zancanaro

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).