Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-maturin for openSUSE:Factory 
checked in at 2021-05-08 22:07:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-maturin (Old)
 and      /work/SRC/openSUSE:Factory/.python-maturin.new.2988 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-maturin"

Sat May  8 22:07:51 2021 rev:2 rq:891567 version:0.10.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-maturin/python-maturin.changes    
2021-04-22 18:06:09.446713953 +0200
+++ /work/SRC/openSUSE:Factory/.python-maturin.new.2988/python-maturin.changes  
2021-05-08 22:09:08.049296589 +0200
@@ -1,0 +2,11 @@
+Sat May  8 17:06:53 UTC 2021 - Mia Herkt <[email protected]>
+
+- Update to 0.10.4
+  * Interpreter search now uses python 3.6 to 3.12
+    gh#PyO3/maturin#495
+  * Consider requires-python when searching for interpreters
+    gh#PyO3/maturin#495
+  * Support Rust extension as a submodule in mixed Python/Rust
+    project  gh#PyO3/maturin#489
+
+-------------------------------------------------------------------

Old:
----
  maturin-0.10.3.tar.gz

New:
----
  maturin-0.10.4.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-maturin.spec ++++++
--- /var/tmp/diff_new_pack.1RACe7/_old  2021-05-08 22:09:08.993292502 +0200
+++ /var/tmp/diff_new_pack.1RACe7/_new  2021-05-08 22:09:08.997292484 +0200
@@ -16,12 +16,13 @@
 #
 
 
+%define skip_python2 1
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-maturin
-Version:        0.10.3
+Version:        0.10.4
 Release:        0
 Summary:        Rust/Python Interoperability
-License:        MIT OR Apache-2.0
+License:        Apache-2.0 OR MIT
 URL:            https://github.com/PyO3/maturin
 Source:         
https://files.pythonhosted.org/packages/source/m/maturin/maturin-%{version}.tar.gz
 Source1:        vendor.tar.xz
@@ -31,7 +32,7 @@
 BuildRequires:  python-rpm-macros
 BuildRequires:  rust-packaging
 Requires(post): update-alternatives
-Requires(postun): update-alternatives
+Requires(postun):update-alternatives
 %python_subpackages
 
 %description

++++++ maturin-0.10.3.tar.gz -> maturin-0.10.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/.cirrus.yml 
new/maturin-0.10.4/.cirrus.yml
--- old/maturin-0.10.3/.cirrus.yml      2021-04-13 16:28:35.000000000 +0200
+++ new/maturin-0.10.4/.cirrus.yml      2021-04-28 12:17:09.000000000 +0200
@@ -1,5 +1,5 @@
 freebsd_instance:
-  image_family: freebsd-12-1
+  image_family: freebsd-12-2
 
 env:
   RUST_BACKTRACE: 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/.github/workflows/lint.yml 
new/maturin-0.10.4/.github/workflows/lint.yml
--- old/maturin-0.10.3/.github/workflows/lint.yml       2021-04-13 
16:28:35.000000000 +0200
+++ new/maturin-0.10.4/.github/workflows/lint.yml       2021-04-28 
12:17:09.000000000 +0200
@@ -40,6 +40,6 @@
     steps:
       - uses: actions/checkout@v2
       - uses: actions/setup-python@v2
-      - uses: psf/[email protected] # https://github.com/psf/black/issues/2079
+      - uses: psf/[email protected]
         with:
           args: ". --check"
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/.github/workflows/test-docker.yml 
new/maturin-0.10.4/.github/workflows/test-docker.yml
--- old/maturin-0.10.3/.github/workflows/test-docker.yml        2021-04-13 
16:28:35.000000000 +0200
+++ new/maturin-0.10.4/.github/workflows/test-docker.yml        2021-04-28 
12:17:09.000000000 +0200
@@ -17,7 +17,7 @@
           python-version: 3.8
       - name: Build Docker container
         run: |
-          docker pull konstin2/maturin
-          docker build --cache-from konstin2/maturin -t maturin .
+          docker pull konstin2/maturin:main
+          docker build --cache-from konstin2/maturin:main -t maturin .
       - name: Test the Docker container
         run: ./test-dockerfile.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/maturin-0.10.3/.github/workflows/update-docker-main.yml 
new/maturin-0.10.4/.github/workflows/update-docker-main.yml
--- old/maturin-0.10.3/.github/workflows/update-docker-main.yml 2021-04-13 
16:28:35.000000000 +0200
+++ new/maturin-0.10.4/.github/workflows/update-docker-main.yml 2021-04-28 
12:17:09.000000000 +0200
@@ -16,7 +16,7 @@
         with:
           username: ${{ secrets.DOCKER_USERNAME }}
           password: ${{ secrets.DOCKER_PASSWORD }}
-          cache-from: konstin2/maturin:main
+          cache_froms: konstin2/maturin:main
           repository: konstin2/maturin
           tag_with_ref: false
           tags: main
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/Cargo.lock 
new/maturin-0.10.4/Cargo.lock
--- old/maturin-0.10.3/Cargo.lock       2021-04-13 16:28:35.000000000 +0200
+++ new/maturin-0.10.4/Cargo.lock       2021-04-28 12:17:09.000000000 +0200
@@ -71,18 +71,6 @@
 checksum = "28b2cd92db5cbd74e8e5028f7e27dd7aa3090e89e4f2a197cc7c8dfb69c7063b"
 
 [[package]]
-name = "arrayref"
-version = "0.3.6"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
-
-[[package]]
-name = "arrayvec"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
-
-[[package]]
 name = "ascii"
 version = "0.9.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
@@ -107,11 +95,12 @@
 
 [[package]]
 name = "backtrace"
-version = "0.3.56"
+version = "0.3.58"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc"
+checksum = "88fb5a785d6b44fd9d6700935608639af1b8356de1e55d5f7c2740f4faa15d82"
 dependencies = [
  "addr2line",
+ "cc",
  "cfg-if",
  "libc",
  "miniz_oxide",
@@ -130,12 +119,6 @@
 
 [[package]]
 name = "base64"
-version = "0.12.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
-
-[[package]]
-name = "base64"
 version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
 checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
@@ -147,17 +130,6 @@
 checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
 
 [[package]]
-name = "blake2b_simd"
-version = "0.5.11"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587"
-dependencies = [
- "arrayref",
- "arrayvec",
- "constant_time_eq",
-]
-
-[[package]]
 name = "block-buffer"
 version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
@@ -261,9 +233,9 @@
 
 [[package]]
 name = "cbindgen"
-version = "0.18.0"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "97449daf9b8c245bcad10bbc7c9f4a37c06172c18dd5f9fac340deefc309b957"
+checksum = "38728c31b994e4b849cf59feefb4a8bf26acd299ee0b92c9fb35bd14ad4b8dfa"
 dependencies = [
  "heck",
  "indexmap",
@@ -351,15 +323,9 @@
 
 [[package]]
 name = "configparser"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e2616d8c1fbf887d76dd8e067ec1bc3be7669994378428b4415a8e4ad57baae1"
-
-[[package]]
-name = "constant_time_eq"
-version = "0.1.5"
+version = "2.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+checksum = "4aad39d76dbe45b809ef6d783b8c597732225b8f3d6c4d8ceb4a4f834a844ffe"
 
 [[package]]
 name = "core-foundation"
@@ -393,17 +359,6 @@
 ]
 
 [[package]]
-name = "crossbeam-utils"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49"
-dependencies = [
- "autocfg",
- "cfg-if",
- "lazy_static",
-]
-
-[[package]]
 name = "crypto-mac"
 version = "0.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
@@ -444,18 +399,18 @@
 
 [[package]]
 name = "dirs"
-version = "3.0.1"
+version = "3.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "142995ed02755914747cc6ca76fc7e4583cd18578746716d0508ea6ed558b9ff"
+checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309"
 dependencies = [
  "dirs-sys",
 ]
 
 [[package]]
 name = "dirs-sys"
-version = "0.3.5"
+version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a"
+checksum = "03d86534ed367a67548dc68113a0f5db55432fdfbb6e6f9d77704397d95d5780"
 dependencies = [
  "libc",
  "redox_users",
@@ -492,9 +447,9 @@
 
 [[package]]
 name = "fat-macho"
-version = "0.4.2"
+version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "3543f3e8d37aa0022a95f9984ff069cab35ff2bbec8996b99c99cb419a0319b6"
+checksum = "7cea1ef4f3c3d80c52baa078f176033432c66260c687271007c6b95f33a424fa"
 dependencies = [
  "goblin",
  "llvm-bitcode",
@@ -508,7 +463,7 @@
 dependencies = [
  "cfg-if",
  "libc",
- "redox_syscall 0.2.5",
+ "redox_syscall",
  "winapi",
 ]
 
@@ -548,30 +503,30 @@
 
 [[package]]
 name = "futures-channel"
-version = "0.3.13"
+version = "0.3.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8c2dd2df839b57db9ab69c2c9d8f3e8c81984781937fe2807dc6dcf3b2ad2939"
+checksum = "ce79c6a52a299137a6013061e0cf0e688fce5d7f1bc60125f520912fdb29ec25"
 dependencies = [
  "futures-core",
 ]
 
 [[package]]
 name = "futures-core"
-version = "0.3.13"
+version = "0.3.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "15496a72fabf0e62bdc3df11a59a3787429221dd0710ba8ef163d6f7a9112c94"
+checksum = "098cd1c6dda6ca01650f1a37a794245eb73181d0d4d4e955e2f3c37db7af1815"
 
 [[package]]
 name = "futures-io"
-version = "0.3.13"
+version = "0.3.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "d71c2c65c57704c32f5241c1223167c2c3294fd34ac020c807ddbe6db287ba59"
+checksum = "365a1a1fb30ea1c03a830fdb2158f5236833ac81fa0ad12fe35b29cddc35cb04"
 
 [[package]]
 name = "futures-macro"
-version = "0.3.13"
+version = "0.3.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "ea405816a5139fb39af82c2beb921d52143f556038378d6db21183a5c37fbfb7"
+checksum = "668c6733a182cd7deb4f1de7ba3bf2120823835b3bcfbeacf7d2c4a773c1bb8b"
 dependencies = [
  "proc-macro-hack",
  "proc-macro2",
@@ -581,21 +536,21 @@
 
 [[package]]
 name = "futures-sink"
-version = "0.3.13"
+version = "0.3.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "85754d98985841b7d4f5e8e6fbfa4a4ac847916893ec511a2917ccd8525b8bb3"
+checksum = "5c5629433c555de3d82861a7a4e3794a4c40040390907cfbfd7143a92a426c23"
 
 [[package]]
 name = "futures-task"
-version = "0.3.13"
+version = "0.3.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "fa189ef211c15ee602667a6fcfe1c1fd9e07d42250d2156382820fba33c9df80"
+checksum = "ba7aa51095076f3ba6d9a1f702f74bd05ec65f555d70d2033d55ba8d69f581bc"
 
 [[package]]
 name = "futures-util"
-version = "0.3.13"
+version = "0.3.14"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "1812c7ab8aedf8d6f2701a43e1243acdbcc2b36ab26e2ad421eb99ac963d96d1"
+checksum = "3c144ad54d60f23927f0a6b6d816e4271278b64f005ad65e4e35291d2de9c025"
 dependencies = [
  "futures-core",
  "futures-io",
@@ -655,9 +610,9 @@
 
 [[package]]
 name = "goblin"
-version = "0.3.4"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "669cdc3826f69a51d3f8fc3f86de81c2378110254f678b8407977736122057a4"
+checksum = "532a09cd3df2c6bbfc795fb0434bff8f22255d1d07328180e918a2e6ce122d4d"
 dependencies = [
  "log",
  "plain",
@@ -751,15 +706,15 @@
 
 [[package]]
 name = "httparse"
-version = "1.3.6"
+version = "1.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc35c995b9d93ec174cf9a27d425c7892722101e14993cd227fdb51d70cf9589"
+checksum = "4a1ce40d6fc9764887c2fdc7305c3dcc429ba11ff981c1509416afd5697e4437"
 
 [[package]]
 name = "httpdate"
-version = "0.3.2"
+version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
+checksum = "05842d0d43232b23ccb7060ecb0f0626922c21f30012e97b767b30afd4a5d4b9"
 
 [[package]]
 name = "human-panic"
@@ -787,9 +742,9 @@
 
 [[package]]
 name = "hyper"
-version = "0.14.5"
+version = "0.14.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "8bf09f61b52cfcf4c00de50df88ae423d6c02354e385a86341133b5338630ad1"
+checksum = "1e5f105c494081baa3bf9e200b279e27ec1623895cd504c7dbef8d0b080fcf54"
 dependencies = [
  "bytes",
  "futures-channel",
@@ -826,9 +781,9 @@
 
 [[package]]
 name = "idna"
-version = "0.2.2"
+version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "89829a5d69c23d348314a7ac337fe39173b61149a9864deabd260983aed48c21"
+checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
 dependencies = [
  "matches",
  "unicode-bidi",
@@ -895,9 +850,9 @@
 
 [[package]]
 name = "libc"
-version = "0.2.93"
+version = "0.2.94"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "9385f66bf6105b241aa65a61cb923ef20efc665cb9f9bb50ac2f0c4b7f378d41"
+checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e"
 
 [[package]]
 name = "linked-hash-map"
@@ -925,11 +880,11 @@
 
 [[package]]
 name = "mailparse"
-version = "0.13.2"
+version = "0.13.4"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "31de1f9043c582efde7dbd93de56600df12b6c4488a67eeaefa74ea364019b22"
+checksum = "62db73ff1a42b0e3a8858cf0d5c183bdfc23491f7294ae4a8200c83577457386"
 dependencies = [
- "base64 0.12.3",
+ "base64 0.13.0",
  "charset",
  "quoted_printable",
 ]
@@ -942,7 +897,7 @@
 
 [[package]]
 name = "maturin"
-version = "0.10.3"
+version = "0.10.4"
 dependencies = [
  "anyhow",
  "base64 0.13.0",
@@ -1197,18 +1152,18 @@
 
 [[package]]
 name = "pin-project"
-version = "1.0.6"
+version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc174859768806e91ae575187ada95c91a29e96a98dc5d2cd9a1fed039501ba6"
+checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4"
 dependencies = [
  "pin-project-internal",
 ]
 
 [[package]]
 name = "pin-project-internal"
-version = "1.0.6"
+version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "a490329918e856ed1b083f244e3bfe2d8c4f336407e4ea9e1a9f479ff09049e5"
+checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1256,12 +1211,6 @@
 checksum = "989d43012e2ca1c4a02507c67282691a0a3207f9dc67cec596b43fe925b3d325"
 
 [[package]]
-name = "podio"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b18befed8bc2b61abc79a457295e7e838417326da1586050b919414073977f19"
-
-[[package]]
 name = "ppv-lite86"
 version = "0.2.10"
 source = "registry+https://github.com/rust-lang/crates.io-index";
@@ -1435,35 +1384,28 @@
 
 [[package]]
 name = "redox_syscall"
-version = "0.1.57"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
-
-[[package]]
-name = "redox_syscall"
-version = "0.2.5"
+version = "0.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9"
+checksum = "8270314b5ccceb518e7e578952f0b72b88222d02e8f77f5ecf7abbb673539041"
 dependencies = [
  "bitflags",
 ]
 
 [[package]]
 name = "redox_users"
-version = "0.3.5"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
 dependencies = [
- "getrandom 0.1.16",
- "redox_syscall 0.1.57",
- "rust-argon2",
+ "getrandom 0.2.2",
+ "redox_syscall",
 ]
 
 [[package]]
 name = "regex"
-version = "1.4.5"
+version = "1.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19"
+checksum = "2a26af418b574bd56588335b3a3659a65725d4e636eb1016c2f9e3b38c7cc759"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -1487,9 +1429,9 @@
 
 [[package]]
 name = "reqwest"
-version = "0.11.2"
+version = "0.11.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bf12057f289428dbf5c591c74bf10392e4a8003f993405a902f20117019022d4"
+checksum = "2296f2fac53979e8ccbc4a1136b25dcefd37be9ed7e4a1f6b05a6029c84ff124"
 dependencies = [
  "base64 0.13.0",
  "bytes",
@@ -1547,18 +1489,6 @@
 ]
 
 [[package]]
-name = "rust-argon2"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb"
-dependencies = [
- "base64 0.13.0",
- "blake2b_simd",
- "constant_time_eq",
- "crossbeam-utils",
-]
-
-[[package]]
 name = "rustc-demangle"
 version = "0.1.18"
 source = "registry+https://github.com/rust-lang/crates.io-index";
@@ -1566,9 +1496,9 @@
 
 [[package]]
 name = "rustls"
-version = "0.19.0"
+version = "0.19.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
 dependencies = [
  "base64 0.13.0",
  "log",
@@ -1614,9 +1544,9 @@
 
 [[package]]
 name = "sct"
-version = "0.6.0"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c"
+checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
 dependencies = [
  "ring",
  "untrusted",
@@ -1744,9 +1674,9 @@
 
 [[package]]
 name = "slab"
-version = "0.4.2"
+version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
+checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527"
 
 [[package]]
 name = "socket2"
@@ -1802,9 +1732,9 @@
 
 [[package]]
 name = "syn"
-version = "1.0.69"
+version = "1.0.71"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "48fe99c6bd8b1cc636890bcc071842de909d902c81ac7dab53ba33c421ab8ffb"
+checksum = "ad184cc9470f9117b2ac6817bfe297307418819ba40552f9b3846f05c33d5373"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1831,7 +1761,7 @@
  "cfg-if",
  "libc",
  "rand 0.8.3",
- "redox_syscall 0.2.5",
+ "redox_syscall",
  "remove_dir_all",
  "winapi",
 ]
@@ -1901,9 +1831,9 @@
 
 [[package]]
 name = "tokio"
-version = "1.4.0"
+version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "134af885d758d645f0f0505c9a8b3f9bf8a348fd822e112ab5248138348f1722"
+checksum = "83f0c8e7c0addab50b663055baf787d0af7f413a46e6e7fb9559a4e4db7137a5"
 dependencies = [
  "autocfg",
  "bytes",
@@ -1927,9 +1857,9 @@
 
 [[package]]
 name = "tokio-util"
-version = "0.6.5"
+version = "0.6.6"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "5143d049e85af7fbc36f5454d990e62c2df705b3589f123b71f441b6b59f443f"
+checksum = "940a12c99365c31ea8dd9ba04ec1be183ffe4920102bb7122c2f515437601e8e"
 dependencies = [
  "bytes",
  "futures-core",
@@ -2289,13 +2219,14 @@
 
 [[package]]
 name = "zip"
-version = "0.5.6"
+version = "0.5.12"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "58287c28d78507f5f91f2a4cf1e8310e2c76fd4c6932f93ac60fd1ceb402db7d"
+checksum = "9c83dc9b784d252127720168abd71ea82bf8c3d96b17dc565b5e2a02854f2b27"
 dependencies = [
+ "byteorder",
  "bzip2",
  "crc32fast",
  "flate2",
- "podio",
+ "thiserror",
  "time",
 ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/Cargo.toml 
new/maturin-0.10.4/Cargo.toml
--- old/maturin-0.10.3/Cargo.toml       1970-01-01 01:00:00.000000000 +0100
+++ new/maturin-0.10.4/Cargo.toml       1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +1,7 @@
 [package]
 authors = ["konstin <[email protected]>"]
 name = "maturin"
-version = "0.10.3"
+version = "0.10.4"
 description = "Build and publish crates with pyo3, rust-cpython and cffi 
bindings as well as rust binaries as python packages"
 exclude = ["test-crates/**/*", "sysconfig/*", "test-data/*", "ci/*", "tests/*"]
 readme = "Readme.md"
@@ -37,9 +37,9 @@
 bytesize = "1.0.1"
 glob = "0.3.0"
 cargo_metadata = "0.13.1"
-cbindgen = { version = "0.18.0", default-features = false }
+cbindgen = { version = "0.19.0", default-features = false }
 flate2 = "1.0.18"
-goblin = "0.3.4"
+goblin = "0.4.0"
 human-panic = { version = "1.0.3", optional = true }
 keyring = { version = "0.10.1", optional = true }
 platform-info = "0.1.0"
@@ -63,7 +63,7 @@
 configparser = { version = "2.0.0", optional = true }
 mailparse = "0.13.2"
 fs-err = "2.5.0"
-fat-macho = "0.4.2"
+fat-macho = "0.4.3"
 toml_edit = "0.2.0"
 once_cell = "1.7.2"
 scroll = "0.10.2"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/Changelog.md 
new/maturin-0.10.4/Changelog.md
--- old/maturin-0.10.3/Changelog.md     2021-04-13 16:28:35.000000000 +0200
+++ new/maturin-0.10.4/Changelog.md     2021-04-28 12:17:09.000000000 +0200
@@ -5,7 +5,11 @@
 The format is based on [Keep a 
Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to [Semantic 
Versioning](https://semver.org/spec/v2.0.0.html) (for the cli, not for the 
crate).
 
-## Unreleased
+## 0.10.4 - 2021-04-28
+
+ * Interpreter search now uses python 3.6 to 3.12 in 
[#495](https://github.com/PyO3/maturin/pull/495)
+ * Consider requires-python when searching for interpreters in 
[#495](https://github.com/PyO3/maturin/pull/495)
+ * Support Rust extension as a submodule in mixed Python/Rust projects in 
[#489](https://github.com/PyO3/maturin/pull/489)
 
 ## 0.10.3 - 2021-04-13
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/Dockerfile 
new/maturin-0.10.4/Dockerfile
--- old/maturin-0.10.3/Dockerfile       2021-04-13 16:28:35.000000000 +0200
+++ new/maturin-0.10.4/Dockerfile       2021-04-28 12:17:09.000000000 +0200
@@ -1,3 +1,26 @@
+FROM quay.io/pypa/manylinux2010_x86_64 as builder
+
+ENV PATH /root/.cargo/bin:$PATH
+
+RUN curl --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
+
+# Compile dependencies only for build caching
+ADD Cargo.toml /maturin/Cargo.toml
+ADD Cargo.lock /maturin/Cargo.lock
+RUN mkdir /maturin/src && \
+    touch  /maturin/src/lib.rs && \
+    echo 'fn main() { println!("Dummy") }' > /maturin/src/main.rs && \
+    cargo rustc --bin maturin --manifest-path /maturin/Cargo.toml --release -- 
-C link-arg=-s
+
+ADD . /maturin/
+
+# Manually update the timestamps as ADD keeps the local timestamps and cargo 
would then believe the cache is fresh
+RUN touch /maturin/src/lib.rs /maturin/src/main.rs
+
+RUN cargo rustc --bin maturin --manifest-path /maturin/Cargo.toml --release -- 
-C link-arg=-s \
+    && mv /maturin/target/release/maturin /usr/bin/maturin \
+    && rm -rf /maturin
+
 FROM quay.io/pypa/manylinux2010_x86_64
 
 ENV PATH /root/.cargo/bin:$PATH
@@ -10,11 +33,7 @@
     && python3 -m pip install --no-cache-dir cffi \
     && mkdir /io
 
-ADD . /maturin/
-
-RUN cargo rustc --bin maturin --manifest-path /maturin/Cargo.toml --release -- 
-C link-arg=-s \
-    && mv /maturin/target/release/maturin /usr/bin/maturin \
-    && rm -rf /maturin
+COPY --from=builder /usr/bin/maturin /usr/bin/maturin
 
 WORKDIR /io
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/PKG-INFO new/maturin-0.10.4/PKG-INFO
--- old/maturin-0.10.3/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
+++ new/maturin-0.10.4/PKG-INFO 1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: maturin
-Version: 0.10.3
+Version: 0.10.4
 Classifiers: Topic :: Software Development :: Build Tools
 Classifiers: Programming Language :: Rust
 Classifiers: Programming Language :: Python :: Implementation :: CPython
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/setup.py new/maturin-0.10.4/setup.py
--- old/maturin-0.10.3/setup.py 2021-04-13 16:28:35.000000000 +0200
+++ new/maturin-0.10.4/setup.py 2021-04-28 12:17:09.000000000 +0200
@@ -60,16 +60,26 @@
                     "(https://www.rust-lang.org/tools/install) and try again"
                 )
 
-            cargo_args = [cargo, "rustc", "--bin", "maturin", 
"--message-format=json"]
+            cargo_args = [
+                cargo,
+                "rustc",
+                "--release",
+                "--bin",
+                "maturin",
+                "--message-format=json",
+            ]
 
             if platform.machine() in ("ppc64le", "ppc64", "powerpc"):
                 cargo_args.extend(
                     ["--no-default-features", 
"--features=upload,log,human-panic"]
                 )
 
-            cargo_args.extend(["--", "-C", "link-arg=-s"])
-
-            metadata = 
json.loads(subprocess.check_output(cargo_args).splitlines()[-2])
+            try:
+                metadata = json.loads(
+                    subprocess.check_output(cargo_args).splitlines()[-2]
+                )
+            except subprocess.CalledProcessError as exc:
+                raise RuntimeError("build maturin failed:\n" + 
exc.output.decode())
             print(metadata)
             assert metadata["target"]["name"] == "maturin"
             source = metadata["filenames"][0]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/src/build_context.rs 
new/maturin-0.10.4/src/build_context.rs
--- old/maturin-0.10.3/src/build_context.rs     2021-04-13 16:28:35.000000000 
+0200
+++ new/maturin-0.10.4/src/build_context.rs     2021-04-28 12:17:09.000000000 
+0200
@@ -6,8 +6,9 @@
 use crate::module_writer::write_python_part;
 use crate::module_writer::WheelWriter;
 use crate::module_writer::{write_bin, write_bindings_module, 
write_cffi_module};
-use crate::source_distribution::{get_pyproject_toml, source_distribution};
+use crate::source_distribution::source_distribution;
 use crate::Metadata21;
+use crate::PyProjectToml;
 use crate::PythonInterpreter;
 use crate::Target;
 use anyhow::{anyhow, bail, Context, Result};
@@ -54,27 +55,63 @@
 #[derive(Clone, Debug, PartialEq, Eq)]
 pub enum ProjectLayout {
     /// A rust crate compiled into a shared library with only some glue python 
for cffi
-    PureRust,
-    /// A python package that is extended by a native rust module.
     ///
-    /// Contains the canonicialized (i.e. absolute) path to the python part of 
the project
-    Mixed(PathBuf),
+    /// Contains the the rust extension name
+    PureRust(String),
+    /// A python package that is extended by a native rust module.
+    Mixed {
+        /// Contains the canonicialized (i.e. absolute) path to the python 
part of the project
+        python_module: PathBuf,
+        /// Contains the canonicialized (i.e. absolute) path to the rust part 
of the project
+        rust_module: PathBuf,
+        /// rust extension name
+        extension_name: String,
+    },
 }
 
 impl ProjectLayout {
     /// Checks whether a python module exists besides Cargo.toml with the 
right name
     pub fn determine(project_root: impl AsRef<Path>, module_name: &str) -> 
Result<ProjectLayout> {
-        let python_package_dir = project_root.as_ref().join(module_name);
-        if python_package_dir.is_dir() {
-            if !python_package_dir.join("__init__.py").is_file() {
+        // A dot in the module name means the extension module goes into the 
module folder specified by the path
+        let parts: Vec<&str> = module_name.split('.').collect();
+        let (python_module, rust_module, extension_name) = if parts.len() > 1 {
+            let mut rust_module = project_root.as_ref().to_path_buf();
+            rust_module.extend(&parts[0..parts.len() - 1]);
+            (
+                project_root.as_ref().join(parts[0]),
+                rust_module,
+                parts[parts.len() - 1].to_string(),
+            )
+        } else {
+            (
+                project_root.as_ref().join(module_name),
+                project_root.as_ref().join(module_name),
+                module_name.to_string(),
+            )
+        };
+        if python_module.is_dir() {
+            if !python_module.join("__init__.py").is_file() {
                 bail!("Found a directory with the module name ({}) next to 
Cargo.toml, which indicates a mixed python/rust project, but the directory 
didn't contain an __init__.py file.", module_name)
             }
 
             println!("???? Building a mixed python/rust project");
 
-            Ok(ProjectLayout::Mixed(python_package_dir))
+            Ok(ProjectLayout::Mixed {
+                python_module,
+                rust_module,
+                extension_name,
+            })
         } else {
-            Ok(ProjectLayout::PureRust)
+            Ok(ProjectLayout::PureRust(extension_name))
+        }
+    }
+
+    pub fn extension_name(&self) -> &str {
+        match *self {
+            ProjectLayout::PureRust(ref name) => name,
+            ProjectLayout::Mixed {
+                ref extension_name, ..
+            } => extension_name,
         }
     }
 }
@@ -153,7 +190,7 @@
         fs::create_dir_all(&self.out)
             .context("Failed to create the target directory for the source 
distribution")?;
 
-        match get_pyproject_toml(self.manifest_path.parent().unwrap()) {
+        match PyProjectToml::new(self.manifest_path.parent().unwrap()) {
             Ok(pyproject) => {
                 let sdist_path = source_distribution(
                     &self.out,
@@ -397,11 +434,15 @@
             WheelWriter::new(&tag, &self.out, &self.metadata21, &self.scripts, 
&tags)?;
 
         match self.project_layout {
-            ProjectLayout::Mixed(ref python_module) => {
-                write_python_part(&mut builder, python_module, 
&self.module_name)
+            ProjectLayout::Mixed {
+                ref python_module,
+                ref extension_name,
+                ..
+            } => {
+                write_python_part(&mut builder, python_module, extension_name)
                     .context("Failed to add the python module to the 
package")?;
             }
-            ProjectLayout::PureRust => {}
+            ProjectLayout::PureRust(_) => {}
         }
 
         // I wouldn't know of any case where this would be the wrong (and 
neither do
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/src/build_options.rs 
new/maturin-0.10.4/src/build_options.rs
--- old/maturin-0.10.3/src/build_options.rs     2021-04-13 16:28:35.000000000 
+0200
+++ new/maturin-0.10.4/src/build_options.rs     2021-04-28 12:17:09.000000000 
+0200
@@ -8,6 +8,7 @@
 use crate::Target;
 use anyhow::{bail, format_err, Context, Result};
 use cargo_metadata::{Metadata, MetadataCommand, Node};
+use regex::Regex;
 use serde::{Deserialize, Serialize};
 use std::collections::{HashMap, HashSet};
 use std::env;
@@ -99,10 +100,10 @@
 impl BuildOptions {
     /// Tries to fill the missing metadata for a BuildContext by querying 
cargo and python
     pub fn into_build_context(self, release: bool, strip: bool) -> 
Result<BuildContext> {
-        let manifest_file = self
-            .manifest_path
-            .canonicalize()
-            .context(format_err!("Can't find {}", 
self.manifest_path.display()))?;
+        let manifest_file = &self.manifest_path;
+        if !manifest_file.exists() {
+            bail!("Can't find {}", self.manifest_path.display(),);
+        }
 
         if !manifest_file.is_file() {
             bail!(
@@ -110,15 +111,16 @@
                 self.manifest_path.display(),
                 manifest_file.display()
             );
-        };
+        }
 
         let cargo_toml = CargoToml::from_path(&manifest_file)?;
         let manifest_dir = manifest_file.parent().unwrap();
         let metadata21 = Metadata21::from_cargo_toml(&cargo_toml, 
&manifest_dir)
             .context("Failed to parse Cargo.toml into python metadata")?;
+        let extra_metadata = cargo_toml.remaining_core_metadata();
         let scripts = cargo_toml.scripts();
 
-        let crate_name = cargo_toml.package.name;
+        let crate_name = &cargo_toml.package.name;
 
         // If the package name contains minuses, you must declare a module with
         // underscores as lib name
@@ -128,8 +130,9 @@
             .and_then(|lib| lib.name.as_ref())
             .unwrap_or(&crate_name)
             .to_owned();
+        let extension_name = 
extra_metadata.name.as_ref().unwrap_or(&module_name);
 
-        let project_layout = ProjectLayout::determine(manifest_dir, 
&module_name)?;
+        let project_layout = ProjectLayout::determine(manifest_dir, 
&extension_name)?;
 
         let mut cargo_extra_args = split_extra_args(&self.cargo_extra_args)?;
         if let Some(ref target) = self.target {
@@ -176,9 +179,9 @@
             // Only build a source distribution
             Some(ref interpreter) if interpreter.is_empty() => vec![],
             // User given list of interpreters
-            Some(interpreter) => find_interpreter(&bridge, &interpreter, 
&target)?,
+            Some(interpreter) => find_interpreter(&bridge, &interpreter, 
&target, None)?,
             // Auto-detect interpreters
-            None => find_interpreter(&bridge, &[], &target)?,
+            None => find_interpreter(&bridge, &[], &target, 
get_min_python_minor(&metadata21))?,
         };
 
         let rustc_extra_args = split_extra_args(&self.rustc_extra_args)?;
@@ -208,7 +211,7 @@
             project_layout,
             metadata21,
             scripts,
-            crate_name,
+            crate_name: crate_name.to_string(),
             module_name,
             manifest_path: self.manifest_path,
             out: wheel_dir,
@@ -225,6 +228,29 @@
     }
 }
 
+/// Uses very simple PEP 440 subset parsing to determine the
+/// minimum supported python minor version for interpreter search
+fn get_min_python_minor(metadata21: &Metadata21) -> Option<usize> {
+    if let Some(requires_python) = &metadata21.requires_python {
+        let regex = Regex::new(r#">=3\.(\d+)(?:\.\d)?"#).unwrap();
+        if let Some(captures) = regex.captures(&requires_python) {
+            let min_python_minor = captures[1]
+                .parse::<usize>()
+                .expect("Regex must only match usize");
+            Some(min_python_minor)
+        } else {
+            println!(
+                "???  Couldn't parse the value of requires-python, \
+                    not taking it into account when searching for python 
interpreter. \
+                    Note: Only `>=3.x.y` is currently supported."
+            );
+            None
+        }
+    } else {
+        None
+    }
+}
+
 /// pyo3 supports building abi3 wheels if the unstable-api feature is not 
selected
 fn has_abi3(cargo_metadata: &Metadata) -> Result<Option<(u8, u8)>> {
     let resolve = cargo_metadata
@@ -384,6 +410,7 @@
     bridge: &BridgeModel,
     interpreter: &[PathBuf],
     target: &Target,
+    min_python_minor: Option<usize>,
 ) -> Result<Vec<PythonInterpreter>> {
     match bridge {
         BridgeModel::Bindings(_) => {
@@ -391,7 +418,7 @@
                 PythonInterpreter::check_executables(&interpreter, &target, 
&bridge)
                     .context("The given list of python interpreters is 
invalid")?
             } else {
-                PythonInterpreter::find_all(&target, &bridge)
+                PythonInterpreter::find_all(&target, &bridge, min_python_minor)
                     .context("Finding python interpreters failed")?
             };
 
@@ -660,4 +687,13 @@
 
         assert_eq!(extract_cargo_metadata_args(&args).unwrap(), expected);
     }
+
+    #[test]
+    fn test_get_min_python_minor() {
+        // Nothing specified
+        let cargo_toml = 
CargoToml::from_path("test-crates/pyo3-pure/Cargo.toml").unwrap();
+        let metadata21 =
+            Metadata21::from_cargo_toml(&cargo_toml, 
&"test-crates/pyo3-pure").unwrap();
+        assert_eq!(get_min_python_minor(&metadata21), None);
+    }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/src/lib.rs 
new/maturin-0.10.4/src/lib.rs
--- old/maturin-0.10.3/src/lib.rs       2021-04-13 16:28:35.000000000 +0200
+++ new/maturin-0.10.4/src/lib.rs       2021-04-28 12:17:09.000000000 +0200
@@ -36,13 +36,14 @@
 pub use crate::module_writer::{
     write_dist_info, ModuleWriter, PathWriter, SDistWriter, WheelWriter,
 };
+pub use crate::pyproject_toml::PyProjectToml;
 pub use crate::python_interpreter::PythonInterpreter;
 pub use crate::read_distribution::{
     get_metadata_for_distribution, get_supported_version_for_distribution,
 };
 pub use crate::target::Target;
 pub use auditwheel::Manylinux;
-pub use source_distribution::{get_pyproject_toml, source_distribution};
+pub use source_distribution::source_distribution;
 #[cfg(feature = "upload")]
 pub use {
     crate::registry::Registry,
@@ -57,6 +58,7 @@
 mod develop;
 mod metadata;
 mod module_writer;
+mod pyproject_toml;
 mod python_interpreter;
 mod read_distribution;
 #[cfg(feature = "upload")]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/src/main.rs 
new/maturin-0.10.4/src/main.rs
--- old/maturin-0.10.3/src/main.rs      2021-04-13 16:28:35.000000000 +0200
+++ new/maturin-0.10.4/src/main.rs      2021-04-28 12:17:09.000000000 +0200
@@ -15,10 +15,9 @@
 #[cfg(feature = "password-storage")]
 use keyring::{Keyring, KeyringError};
 use maturin::{
-    develop, get_metadata_for_distribution, get_pyproject_toml,
-    get_supported_version_for_distribution, source_distribution, 
write_dist_info, BridgeModel,
-    BuildOptions, BuiltWheelMetadata, CargoToml, Manylinux, Metadata21, 
PathWriter,
-    PythonInterpreter, Target,
+    develop, get_metadata_for_distribution, 
get_supported_version_for_distribution,
+    source_distribution, write_dist_info, BridgeModel, BuildOptions, 
BuiltWheelMetadata, CargoToml,
+    Manylinux, Metadata21, PathWriter, PyProjectToml, PythonInterpreter, 
Target,
 };
 use std::env;
 use std::path::PathBuf;
@@ -530,7 +529,7 @@
         Opt::ListPython => {
             let target = Target::from_target_triple(None)?;
             // We don't know the targeted bindings yet, so we use the most 
lenient
-            let found = PythonInterpreter::find_all(&target, 
&BridgeModel::Cffi)?;
+            let found = PythonInterpreter::find_all(&target, 
&BridgeModel::Cffi, None)?;
             println!("???? {} python interpreter found:", found.len());
             for interpreter in found {
                 println!(" - {}", interpreter);
@@ -574,7 +573,7 @@
             let manifest_dir = manifest_path.parent().unwrap();
 
             // Ensure the project has a compliant pyproject.toml
-            let pyproject = get_pyproject_toml(&manifest_dir)
+            let pyproject = PyProjectToml::new(&manifest_dir)
                 .context("A pyproject.toml with a PEP 517 compliant 
`[build-system]` table is required to build a source distribution")?;
 
             let cargo_toml = CargoToml::from_path(&manifest_path)?;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/src/metadata.rs 
new/maturin-0.10.4/src/metadata.rs
--- old/maturin-0.10.3/src/metadata.rs  2021-04-13 16:28:35.000000000 +0200
+++ new/maturin-0.10.4/src/metadata.rs  2021-04-28 12:17:09.000000000 +0200
@@ -112,14 +112,22 @@
             description = None;
             description_content_type = None;
         };
+        let name = extra_metadata
+            .name
+            .map(|name| {
+                if let Some(pos) = name.find('.') {
+                    name.split_at(pos).0.to_string()
+                } else {
+                    name.clone()
+                }
+            })
+            .unwrap_or_else(|| cargo_toml.package.name.clone());
 
         Ok(Metadata21 {
             metadata_version: "2.1".to_owned(),
 
             // Mapped from cargo metadata
-            name: extra_metadata
-                .name
-                .unwrap_or_else(|| cargo_toml.package.name.clone()),
+            name,
             version: cargo_toml.package.version.clone(),
             summary: cargo_toml.package.description.clone(),
             description,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/src/module_writer.rs 
new/maturin-0.10.4/src/module_writer.rs
--- old/maturin-0.10.3/src/module_writer.rs     2021-04-13 16:28:35.000000000 
+0200
+++ new/maturin-0.10.4/src/module_writer.rs     2021-04-28 12:17:09.000000000 
+0200
@@ -572,26 +572,31 @@
     target: &Target,
     develop: bool,
 ) -> Result<()> {
+    let ext_name = project_layout.extension_name();
     let so_filename = match python_interpreter {
-        Some(python_interpreter) => 
python_interpreter.get_library_name(&module_name),
+        Some(python_interpreter) => 
python_interpreter.get_library_name(&ext_name),
         // abi3
         None => {
             if target.is_unix() {
-                format!("{base}.abi3.so", base = module_name)
+                format!("{base}.abi3.so", base = ext_name)
             } else {
                 // Apparently there is no tag for abi3 on windows
-                format!("{base}.pyd", base = module_name)
+                format!("{base}.pyd", base = ext_name)
             }
         }
     };
 
     match project_layout {
-        ProjectLayout::Mixed(ref python_module) => {
+        ProjectLayout::Mixed {
+            ref python_module,
+            ref rust_module,
+            ..
+        } => {
             write_python_part(writer, python_module, &module_name)
                 .context("Failed to add the python module to the package")?;
 
             if develop {
-                let target = python_module.join(&so_filename);
+                let target = rust_module.join(&so_filename);
                 fs::copy(&artifact, &target).context(format!(
                     "Failed to copy {} to {}",
                     artifact.display(),
@@ -599,13 +604,10 @@
                 ))?;
             }
 
-            writer.add_file_with_permissions(
-                Path::new(&module_name).join(&so_filename),
-                &artifact,
-                0o755,
-            )?;
+            let relative = 
rust_module.strip_prefix(python_module.parent().unwrap())?;
+            writer.add_file_with_permissions(relative.join(&so_filename), 
&artifact, 0o755)?;
         }
-        ProjectLayout::PureRust => {
+        ProjectLayout::PureRust(_) => {
             writer.add_file_with_permissions(so_filename, &artifact, 0o755)?;
         }
     }
@@ -628,7 +630,11 @@
     let module;
 
     match project_layout {
-        ProjectLayout::Mixed(ref python_module) => {
+        ProjectLayout::Mixed {
+            ref python_module,
+            ref rust_module,
+            ref extension_name,
+        } => {
             write_python_part(writer, python_module, &module_name)
                 .context("Failed to add the python module to the package")?;
 
@@ -646,9 +652,10 @@
                 
File::create(base_path.join("ffi.py"))?.write_all(cffi_declarations.as_bytes())?;
             }
 
-            module = PathBuf::from(module_name).join(module_name);
+            let relative = 
rust_module.strip_prefix(python_module.parent().unwrap())?;
+            module = relative.join(extension_name);
         }
-        ProjectLayout::PureRust => module = PathBuf::from(module_name),
+        ProjectLayout::PureRust(_) => module = PathBuf::from(module_name),
     };
 
     writer.add_directory(&module)?;
@@ -690,24 +697,24 @@
     for absolute in WalkDir::new(&python_module) {
         let absolute = absolute?.into_path();
 
-        let relaitve = 
absolute.strip_prefix(python_module.as_ref().parent().unwrap())?;
+        let relative = 
absolute.strip_prefix(python_module.as_ref().parent().unwrap())?;
 
         // Ignore the cffi folder from develop, if any
-        if relaitve.starts_with(module_name.as_ref().join(&module_name)) {
+        if relative.starts_with(module_name.as_ref().join(&module_name)) {
             continue;
         }
 
         if absolute.is_dir() {
-            writer.add_directory(relaitve)?;
+            writer.add_directory(relative)?;
         } else {
             // Ignore native libraries from develop, if any
-            if let Some(extension) = relaitve.extension() {
+            if let Some(extension) = relative.extension() {
                 if extension.to_string_lossy() == "so" {
                     continue;
                 }
             }
             writer
-                .add_file(relaitve, &absolute)
+                .add_file(relative, &absolute)
                 .context(format!("File to add file from {}", 
absolute.display()))?;
         }
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/src/pyproject_toml.rs 
new/maturin-0.10.4/src/pyproject_toml.rs
--- old/maturin-0.10.3/src/pyproject_toml.rs    1970-01-01 01:00:00.000000000 
+0100
+++ new/maturin-0.10.4/src/pyproject_toml.rs    2021-04-28 12:17:09.000000000 
+0200
@@ -0,0 +1,56 @@
+use anyhow::{format_err, Context, Result};
+use serde::{Deserialize, Serialize};
+use std::fs;
+use std::path::Path;
+
+/// The `[build-system]` section of a pyproject.toml as specified in PEP 517
+#[derive(Serialize, Deserialize, Debug, Clone)]
+#[serde(rename_all = "kebab-case")]
+pub struct BuildSystem {
+    requires: Vec<String>,
+    build_backend: String,
+}
+
+/// The `[tool]` section of a pyproject.toml
+#[derive(Serialize, Deserialize, Debug, Clone)]
+#[serde(rename_all = "kebab-case")]
+pub struct Tool {
+    maturin: Option<ToolMaturin>,
+}
+
+/// The `[tool.maturin]` section of a pyproject.toml
+#[derive(Serialize, Deserialize, Debug, Clone)]
+#[serde(rename_all = "kebab-case")]
+pub struct ToolMaturin {
+    sdist_include: Option<Vec<String>>,
+}
+
+/// A pyproject.toml as specified in PEP 517
+#[derive(Serialize, Deserialize, Debug, Clone)]
+#[serde(rename_all = "kebab-case")]
+pub struct PyProjectToml {
+    build_system: BuildSystem,
+    tool: Option<Tool>,
+}
+
+impl PyProjectToml {
+    /// Returns the contents of a pyproject.toml with a `[build-system]` entry 
or an error
+    ///
+    /// Does no specific error handling because it's only used to check 
whether or not to build
+    /// source distributions
+    pub fn new(project_root: impl AsRef<Path>) -> Result<PyProjectToml> {
+        let path = project_root.as_ref().join("pyproject.toml");
+        let contents = fs::read_to_string(&path).context(format!(
+            "Couldn't find pyproject.toml at {}",
+            path.display()
+        ))?;
+        let cargo_toml = toml::from_str(&contents)
+            .map_err(|err| format_err!("pyproject.toml is not PEP 517 
compliant: {}", err))?;
+        Ok(cargo_toml)
+    }
+
+    /// Returns the value of `[maturin.sdist-include]` in pyproject.toml
+    pub fn sdist_include(&self) -> Option<&Vec<String>> {
+        self.tool.as_ref()?.maturin.as_ref()?.sdist_include.as_ref()
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/src/python_interpreter.rs 
new/maturin-0.10.4/src/python_interpreter.rs
--- old/maturin-0.10.3/src/python_interpreter.rs        2021-04-13 
16:28:35.000000000 +0200
+++ new/maturin-0.10.4/src/python_interpreter.rs        2021-04-28 
12:17:09.000000000 +0200
@@ -23,6 +23,7 @@
     minor: usize,
     target_width: usize,
     pointer_width: usize,
+    min_python_minor: usize,
 ) -> bool {
     // Python 2 support has been dropped
     if major == 2 {
@@ -30,7 +31,7 @@
     }
 
     // Ignore python 3.0 - 3.5
-    if major == 3 && minor < MINIMUM_PYTHON_MINOR {
+    if major == 3 && minor < min_python_minor {
         return true;
     }
 
@@ -83,7 +84,7 @@
 /// As well as the version numbers, etc. of the interpreters we also have to 
find the
 /// pointer width to make sure that the pointer width (32-bit or 64-bit) 
matches across
 /// platforms.
-fn find_all_windows(target: &Target) -> Result<Vec<String>> {
+fn find_all_windows(target: &Target, min_python_minor: usize) -> 
Result<Vec<String>> {
     let code = "import sys; print(sys.executable or '')";
     let mut interpreter = vec![];
     let mut versions_found = HashSet::new();
@@ -123,6 +124,7 @@
                         minor,
                         target.pointer_width(),
                         pointer_width,
+                        min_python_minor,
                     ) {
                         continue;
                     }
@@ -201,6 +203,7 @@
                         minor,
                         target.pointer_width(),
                         pointer_width,
+                        min_python_minor,
                     ) {
                         continue;
                     }
@@ -219,15 +222,6 @@
     Ok(interpreter)
 }
 
-/// Since there is no known way to list the installed python versions on unix
-/// (or just generally to list all binaries in $PATH, which could then be
-/// filtered down), we use this workaround.
-fn find_all_unix() -> Vec<String> {
-    (MINIMUM_PYTHON_MINOR..MAXIMUM_PYTHON_MINOR)
-        .map(|minor| format!("python3.{}", minor))
-        .collect()
-}
-
 #[derive(Debug, Clone, Eq, PartialEq)]
 pub enum InterpreterKind {
     CPython,
@@ -482,11 +476,18 @@
 
     /// Tries to find all installed python versions using the heuristic for the
     /// given platform
-    pub fn find_all(target: &Target, bridge: &BridgeModel) -> 
Result<Vec<PythonInterpreter>> {
+    pub fn find_all(
+        target: &Target,
+        bridge: &BridgeModel,
+        min_python_minor: Option<usize>,
+    ) -> Result<Vec<PythonInterpreter>> {
+        let min_python_minor = 
min_python_minor.unwrap_or(MINIMUM_PYTHON_MINOR);
         let executables = if target.is_windows() {
-            find_all_windows(&target)?
+            find_all_windows(&target, min_python_minor)?
         } else {
-            find_all_unix()
+            (min_python_minor..MAXIMUM_PYTHON_MINOR)
+                .map(|minor| format!("python3.{}", minor))
+                .collect()
         };
         let mut available_versions = Vec::new();
         for executable in executables {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/src/source_distribution.rs 
new/maturin-0.10.4/src/source_distribution.rs
--- old/maturin-0.10.3/src/source_distribution.rs       2021-04-13 
16:28:35.000000000 +0200
+++ new/maturin-0.10.4/src/source_distribution.rs       2021-04-28 
12:17:09.000000000 +0200
@@ -1,10 +1,9 @@
 use crate::module_writer::ModuleWriter;
 use crate::{Metadata21, SDistWriter};
-use anyhow::{bail, format_err, Context, Result};
+use anyhow::{bail, Context, Result};
 use cargo_metadata::Metadata;
 use fs_err as fs;
 use regex::Regex;
-use serde::{Deserialize, Serialize};
 use std::collections::HashMap;
 use std::path::{Path, PathBuf};
 use std::process::Command;
@@ -246,54 +245,3 @@
 
     Ok(source_distribution_path)
 }
-
-/// The `[build-system]` section of a pyproject.toml as specified in PEP 517
-#[derive(Serialize, Deserialize, Debug, Clone)]
-#[serde(rename_all = "kebab-case")]
-pub struct BuildSystem {
-    requires: Vec<String>,
-    build_backend: String,
-}
-
-/// The `[tool]` section of a pyproject.toml
-#[derive(Serialize, Deserialize, Debug, Clone)]
-#[serde(rename_all = "kebab-case")]
-pub struct Tool {
-    maturin: Option<ToolMaturin>,
-}
-
-/// The `[tool.maturin]` section of a pyproject.toml
-#[derive(Serialize, Deserialize, Debug, Clone)]
-#[serde(rename_all = "kebab-case")]
-pub struct ToolMaturin {
-    sdist_include: Option<Vec<String>>,
-}
-
-/// A pyproject.toml as specified in PEP 517
-#[derive(Serialize, Deserialize, Debug, Clone)]
-#[serde(rename_all = "kebab-case")]
-pub struct PyProjectToml {
-    build_system: BuildSystem,
-    tool: Option<Tool>,
-}
-
-impl PyProjectToml {
-    pub fn sdist_include(&self) -> Option<&Vec<String>> {
-        self.tool.as_ref()?.maturin.as_ref()?.sdist_include.as_ref()
-    }
-}
-
-/// Returns the contents of a pyproject.toml with a `[build-system]` entry or 
an error
-///
-/// Does no specific error handling because it's only used to check whether or 
not to build
-/// source distributions
-pub fn get_pyproject_toml(project_root: impl AsRef<Path>) -> 
Result<PyProjectToml> {
-    let path = project_root.as_ref().join("pyproject.toml");
-    let contents = fs::read_to_string(&path).context(format!(
-        "Couldn't find pyproject.toml at {}",
-        path.display()
-    ))?;
-    let cargo_toml = toml::from_str(&contents)
-        .map_err(|err| format_err!("pyproject.toml is not PEP 517 compliant: 
{}", err))?;
-    Ok(cargo_toml)
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/maturin-0.10.3/test-dockerfile.sh 
new/maturin-0.10.4/test-dockerfile.sh
--- old/maturin-0.10.3/test-dockerfile.sh       2021-04-13 16:28:35.000000000 
+0200
+++ new/maturin-0.10.4/test-dockerfile.sh       2021-04-28 12:17:09.000000000 
+0200
@@ -13,7 +13,7 @@
 
 venv-docker/bin/pip install -U pip cffi
 
-docker run -e RUST_BACKTRACE=1 --rm -v $(pwd)/test-crates/hello-world:/io 
maturin build --no-sdist -b bin
+docker run -e RUST_BACKTRACE=1 --rm -v $(pwd):/io -w 
/io/test-crates/hello-world maturin build --no-sdist -b bin
 
 venv-docker/bin/pip install hello-world --no-index --find-links 
test-crates/hello-world/target/wheels/
 
@@ -53,4 +53,12 @@
   exit 1
 fi
 
+docker run -e RUST_BACKTRACE=1 --rm -v 
$(pwd)/test-crates/pyo3-mixed-submodule:/io maturin build --no-sdist -i 
python3.8
+
+venv-docker/bin/pip install pyo3-mixed-submodule --find-links 
test-crates/pyo3-mixed-submodule/target/wheels/
+
+if [[ $(venv-docker/bin/python 
test-crates/pyo3-mixed-submodule/check_installed/check_installed.py) != 
'SUCCESS' ]]; then
+  exit 1
+fi
+
 deactivate

++++++ vendor.tar.xz ++++++
/work/SRC/openSUSE:Factory/python-maturin/vendor.tar.xz 
/work/SRC/openSUSE:Factory/.python-maturin.new.2988/vendor.tar.xz differ: char 
26, line 1

Reply via email to