Skip to content

stusmall/maturin-safer-ffi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This project is a small reproduction of two issues.

First is that maturin is looking in the wrong directory for the header.h when the crate is part of a workspace

The second is that the header.h isn't included in the source distribution

To use the compiled wheel and see it work, in a venv run:

cargo xtask && pip install --force-reinstall target/wheels/pythonsdk-0.1.0-py3-none-linux_x86_64.whl && python test.py

and you will see:

    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/xtask`
Building rust packages
Generating headers
Prepping the header for cffi
Building python wheels
Processing ./target/wheels/pythonsdk-0.1.0-py3-none-linux_x86_64.whl
Collecting cffi
  Using cached cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)
Collecting pycparser
  Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)
Installing collected packages: pycparser, cffi, pythonsdk
  Attempting uninstall: pycparser
    Found existing installation: pycparser 2.21
    Uninstalling pycparser-2.21:
      Successfully uninstalled pycparser-2.21
  Attempting uninstall: cffi
    Found existing installation: cffi 1.15.0
    Uninstalling cffi-1.15.0:
      Successfully uninstalled cffi-1.15.0
  Attempting uninstall: pythonsdk
    Found existing installation: pythonsdk 0.1.0
    Uninstalling pythonsdk-0.1.0:
      Successfully uninstalled pythonsdk-0.1.0
Successfully installed cffi-1.15.0 pycparser-2.21 pythonsdk-0.1.0
Hello world!

To see if fail with a source distribution, run: cargo xtask && pip install --force-reinstall target/wheels/pythonsdk-0.1.0.tar.gz && python test.py and you will see

Building rust packages
Generating headers
Prepping the header for cffi
Building python wheels
Processing ./target/wheels/pythonsdk-0.1.0.tar.gz
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Installing backend dependencies ... done
  Preparing metadata (pyproject.toml) ... done
Collecting cffi
  Using cached cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)
Collecting pycparser
  Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB)
Building wheels for collected packages: pythonsdk
  Building wheel for pythonsdk (pyproject.toml) ... done
  Created wheel for pythonsdk: filename=pythonsdk-0.1.0-py3-none-linux_x86_64.whl size=871781 sha256=5a75d240fb9d6594d474236a13dbeaca03b24e7efbe39a1639cb9d55a7640a77
  Stored in directory: /home/stusmall/.cache/pip/wheels/1b/57/9e/93c3823abd0c72f2a744d2be5c83ce25fd82ca7717f6652f50
Successfully built pythonsdk
Installing collected packages: pycparser, cffi, pythonsdk
  Attempting uninstall: pycparser
    Found existing installation: pycparser 2.21
    Uninstalling pycparser-2.21:
      Successfully uninstalled pycparser-2.21
  Attempting uninstall: cffi
    Found existing installation: cffi 1.15.0
    Uninstalling cffi-1.15.0:
      Successfully uninstalled cffi-1.15.0
  Attempting uninstall: pythonsdk
    Found existing installation: pythonsdk 0.1.0
    Uninstalling pythonsdk-0.1.0:
      Successfully uninstalled pythonsdk-0.1.0
Successfully installed cffi-1.15.0 pycparser-2.21 pythonsdk-0.1.0
Traceback (most recent call last):
  File "test.py", line 1, in <module>
    import pythonsdk
  File "/home/stusmall/Workspace/portscanner/sdks/python/venv/lib/python3.8/site-packages/pythonsdk/__init__.py", line 2, in <module>
    lib.hello_world()
AttributeError: cffi library '/home/stusmall/Workspace/portscanner/sdks/python/venv/lib/python3.8/site-packages/pythonsdk/pythonsdk/native.so' has no function, constant or global variable named 'hello_world'

This is because the custom header file isn't included and maturin fails back to cbindgen which files to find the methods

About

Repro case for two bugs

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published