meson: rename Rust subprojects to NAME-SEMVER-rs

Use the convention for Rust subprojects that was adopted by Meson 1.5.0
and newer.

Distros would prefer to avoid vendored crate sources, and instead use
local sources from e.g. /usr/share/cargo/registry.  While Meson does not
support a local registry, it can be emulated with MESON_PACKAGE_CACHE_DIR.

However, because the distro might not be using the exact version of the
package, but only one that has the same semver, packagers need to add
some hacks to rewrite the wrap files.  For example, in Fedora:

    export MESON_PACKAGE_CACHE_DIR="%{cargo_registry}/"
    # So... Meson can't actually find them without tweaks
    %define inst_crate_nameversion() %(basename %{cargo_registry}/%{1}-*)
    %define rewrite_wrap_file() sed -e "/source.*/d" -e "s/%{1}-.*/%{inst_crate_nameversion %{1}}/" -i subprojects/%{1}.wrap
    %rewrite_wrap_file proc-macro2
    %rewrite_wrap_file quote
    %rewrite_wrap_file syn
    %rewrite_wrap_file unicode-ident
    %rewrite_wrap_file paste

Having a common convention for the name of Rust wraps makes it possible
to perform this transformation with a script without listing
the wraps one by one, and to share the script across multiple packages
(which will be useful when QEMU starts using Rust in a similar way to Mesa).

For an example of such a script, see
https://lore.kernel.org/r/20250722083507.678542-1-pbonzini@redhat.com/.

Acked-by: Faith Ekstrand <faith.ekstrand@collabora.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36284>
This commit is contained in:
Paolo Bonzini 2025-07-22 08:43:52 +02:00 committed by Marge Bot
parent 2fb53f01f1
commit 8ea232a9ae
63 changed files with 92 additions and 92 deletions

View file

@ -144,15 +144,15 @@ fi
# shellcheck disable=2206
meson_subprojects=(
perfetto
syn
paste
pest
pest_derive
pest_generator
pest_meta
roxmltree
rustc-hash
indexmap
syn-2-rs
paste-1-rs
pest-2-rs
pest_derive-2-rs
pest_generator-2-rs
pest_meta-2-rs
roxmltree-0.20-rs
rustc-hash-2-rs
indexmap-2-rs
${FORCE_FALLBACK_FOR:-}
)

View file

@ -125,7 +125,7 @@ idep_compiler_rs = declare_dependency(
dep_syn = dependency('syn',
version : '>= 2.0.15',
fallback : ['syn', 'dep_syn'],
fallback : ['syn-2-rs', 'dep_syn'],
required : true,
)

View file

@ -121,31 +121,31 @@ if with_tools.contains('etnaviv')
dep_indexmap = dependency('indexmap',
version : '>= 2.2.6',
fallback : ['indexmap', 'dep_indexmap'],
fallback : ['indexmap-2-rs', 'dep_indexmap'],
required : true,
)
dep_roxmltree = dependency('roxmltree',
version : '>= 0.20.roxmltree',
fallback : ['roxmltree', 'dep_roxmltree'],
fallback : ['roxmltree-0.20-rs', 'dep_roxmltree'],
required : true,
)
dep_syn = dependency('syn',
version : '>= 2.0.15',
fallback : ['syn', 'dep_syn'],
fallback : ['syn-2-rs', 'dep_syn'],
required : true,
)
dep_pest_generator = dependency('pest_generator',
version: '>= 2.7.6',
fallback: ['pest_generator', 'dep_pest_generator'],
fallback: ['pest_generator-2-rs', 'dep_pest_generator'],
required: true,
)
dep_pest = dependency('pest',
version: '>= 2.7.6',
fallback: ['pest', 'dep_pest'],
fallback: ['pest-2-rs', 'dep_pest'],
required: true,
)

View file

@ -5,12 +5,12 @@ subdir('latencies')
dep_paste = dependency('paste',
version : '>= 1.0.14',
fallback : ['paste', 'dep_paste'],
fallback : ['paste-1-rs', 'dep_paste'],
required : true,
)
dep_rustc_hash = dependency('rustc-hash',
fallback: ['rustc-hash', 'dep_rustc_hash'],
fallback: ['rustc-hash-2-rs', 'dep_rustc_hash'],
required: true,
)

View file

@ -9,7 +9,7 @@ prog_cbindgen = find_program(
dep_paste = dependency('paste',
version : '>= 1.0.14',
fallback : ['paste', 'dep_paste'],
fallback : ['paste-1-rs', 'dep_paste'],
required : true,
)

View file

@ -3,31 +3,31 @@
dep_cfg_if = dependency('cfg-if',
version: '>= 1.0.0',
fallback: ['cfg-if', 'dep_cfg_if'],
fallback: ['cfg-if-1-rs', 'dep_cfg_if'],
required: true,
)
dep_thiserror = dependency('thiserror',
version: '>= 2.0.11',
fallback: ['thiserror', 'dep_thiserror'],
fallback: ['thiserror-2-rs', 'dep_thiserror'],
required: true,
)
dep_remain = dependency('remain',
version: '>= 0.2.12',
fallback: ['remain', 'dep_remain'],
fallback: ['remain-0.2-rs', 'dep_remain'],
required: true,
)
dep_zerocopy = dependency('zerocopy',
version: '>= 0.8.13',
fallback: ['zerocopy', 'dep_zerocopy'],
fallback: ['zerocopy-0.8-rs', 'dep_zerocopy'],
required: true,
)
dep_zerocopy_derive = dependency('zerocopy-derive',
version: '>= 0.8.13',
fallback: ['zerocopy-derive', 'dep_zerocopy_derive'],
fallback: ['zerocopy-derive-0.8-rs', 'dep_zerocopy_derive'],
required: true,
)
@ -37,19 +37,19 @@ dep_mesa3d_util = [dep_cfg_if, dep_thiserror, dep_remain, dep_zerocopy,
if host_machine.system() == 'linux'
dep_rustix = dependency('rustix',
version: '>= 0.38.31',
fallback: ['rustix', 'dep_rustix'],
fallback: ['rustix-1-rs', 'dep_rustix'],
required: true,
)
dep_bitflags = dependency('bitflags',
version: '>= 2.6.0',
fallback: ['bitflags', 'dep_bitflags'],
fallback: ['bitflags-2-rs', 'dep_bitflags'],
required: true,
)
dep_errno = dependency('errno',
version: '>= 0.3.8',
fallback: ['errno', 'dep_errno'],
fallback: ['errno-0.3-rs', 'dep_errno'],
required: true,
)

View file

@ -5,7 +5,7 @@ inc_virtgpu_kumquat_ffi = include_directories('include')
dep_log = dependency('log',
version: '>= 0.4.22',
fallback: ['log', 'dep_log'],
fallback: ['log-0.4-rs', 'dep_log'],
required: true,
)

View file

@ -3,4 +3,4 @@ directory = bitflags-2.9.1
source_url = https://crates.io/api/v1/crates/bitflags/2.9.1/download
source_filename = bitflags-2.9.1.tar.gz
source_hash = 1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967
patch_directory = bitflags
patch_directory = bitflags-2-rs

View file

@ -3,4 +3,4 @@ directory = cfg-if-1.0.0
source_url = https://crates.io/api/v1/crates/cfg-if/1.0.0/download
source_filename = cfg-if-1.0.0.tar.gz
source_hash = baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd
patch_directory = cfg-if
patch_directory = cfg-if-1-rs

View file

@ -3,4 +3,4 @@ directory = equivalent-1.0.1
source_url = https://crates.io/api/v1/crates/equivalent/1.0.1/download
source_filename = equivalent-1.0.1.tar.gz
source_hash = 5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5
patch_directory = equivalent
patch_directory = equivalent-1-rs

View file

@ -3,4 +3,4 @@ directory = errno-0.3.12
source_url = https://crates.io/api/v1/crates/errno/0.3.12/download
source_filename = errno-0.3.12.tar.gz
source_hash = cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18
patch_directory = errno
patch_directory = errno-0.3-rs

View file

@ -3,4 +3,4 @@ directory = hashbrown-0.14.1
source_url = https://crates.io/api/v1/crates/hashbrown/0.14.1/download
source_filename = hashbrown-0.14.1.tar.gz
source_hash = 7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12
patch_directory = hashbrown
patch_directory = hashbrown-0.14-rs

View file

@ -3,4 +3,4 @@ directory = indexmap-2.2.6
source_url = https://crates.io/api/v1/crates/indexmap/2.2.6/download
source_filename = indexmap-2.2.6.tar.gz
source_hash = 168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26
patch_directory = indexmap
patch_directory = indexmap-2-rs

View file

@ -3,4 +3,4 @@ directory = libc-0.2.168
source_url = https://crates.io/api/v1/crates/libc/0.2.168/download
source_filename = libc-0.2.168.tar.gz
source_hash = 5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d
patch_directory = libc
patch_directory = libc-0.2-rs

View file

@ -3,4 +3,4 @@ directory = log-0.4.27
source_url = https://crates.io/api/v1/crates/log/0.4.27/download
source_filename = log-0.4.27.tar.gz
source_hash = 13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94
patch_directory = log
patch_directory = log-0.4-rs

View file

@ -3,4 +3,4 @@ directory = once_cell-1.8.0
source_url = https://crates.io/api/v1/crates/once_cell/1.8.0/download
source_filename = once_cell-1.8.0.tar.gz
source_hash = 692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56
patch_directory = once_cell
patch_directory = once_cell-1-rs

View file

@ -8,7 +8,7 @@ project(
license : 'MIT OR Apache-2.0',
)
libc = subproject('libc').get_variable('lib')
libc = subproject('libc-0.2-rs').get_variable('lib')
lib = static_library(
'libc_errno',

View file

@ -5,8 +5,8 @@ project(
license : 'MIT OR Apache-2.0',
)
dep_equivalent = subproject('equivalent').get_variable('dep_equivalent')
dep_hashbrown = subproject('hashbrown').get_variable('dep_hashbrown')
dep_equivalent = subproject('equivalent-1-rs').get_variable('dep_equivalent')
dep_hashbrown = subproject('hashbrown-0.14-rs').get_variable('dep_hashbrown')
rust_args = [
'--cfg', 'feature="std"'

View file

@ -5,7 +5,7 @@ project(
license : 'MIT OR Apache-2.0',
)
ucd = subproject('ucd-trie').get_variable('lib')
ucd = subproject('ucd-trie-0.1-rs').get_variable('lib')
lib = static_library(
'pest',

View file

@ -5,8 +5,8 @@ project(
license : 'MIT OR Apache-2.0',
)
pest = subproject('pest').get_variable('lib')
pest_generator = subproject('pest_generator').get_variable('lib')
pest = subproject('pest-2-rs').get_variable('lib')
pest_generator = subproject('pest_generator-2-rs').get_variable('lib')
rust = import('rust')

View file

@ -5,11 +5,11 @@ project(
license : 'MIT OR Apache-2.0',
)
pest = subproject('pest').get_variable('lib')
pest_meta = subproject('pest_meta').get_variable('lib')
quote = subproject('quote').get_variable('lib')
pm2 = subproject('proc-macro2').get_variable('lib')
syn = subproject('syn').get_variable('lib')
pest = subproject('pest-2-rs').get_variable('lib')
pest_meta = subproject('pest_meta-2-rs').get_variable('lib')
quote = subproject('quote-1-rs').get_variable('lib')
pm2 = subproject('proc-macro2-1-rs').get_variable('lib')
syn = subproject('syn-2-rs').get_variable('lib')
rust_args = [
'--cfg', 'feature="std"',

View file

@ -5,8 +5,8 @@ project(
license : 'MIT OR Apache-2.0',
)
once_cell = subproject('once_cell').get_variable('lib')
pest = subproject('pest').get_variable('lib')
once_cell = subproject('once_cell-1-rs').get_variable('lib')
pest = subproject('pest-2-rs').get_variable('lib')
lib = static_library(
'pest_meta',

View file

@ -51,7 +51,7 @@ if rc.version().version_compare('< 1.79')
]
endif
u_ind = subproject('unicode-ident').get_variable('lib')
u_ind = subproject('unicode-ident-1-rs').get_variable('lib')
lib = static_library(
'proc_macro2',

View file

@ -16,10 +16,10 @@ if rc.version().version_compare('< 1.53')
rust_args += ['--cfg', 'needs_invalid_span_workaround']
endif
pm2 = subproject('proc-macro2').get_variable('lib')
pm2 = subproject('proc-macro2-1-rs').get_variable('lib')
# XXX: workround for meson bug: https://github.com/mesonbuild/meson/issues/11306
rust_args += ['-L', 'dependency=subprojects/unicode-ident']
rust_args += ['-L', 'dependency=subprojects/unicode-ident-1-rs']
lib = static_library(
'quote',

View file

@ -8,9 +8,9 @@ project(
license : 'MIT OR Apache-2.0',
)
syn = subproject('syn').get_variable('lib')
quote = subproject('quote').get_variable('lib')
proc_macro2 = subproject('proc-macro2').get_variable('lib')
syn = subproject('syn-2-rs').get_variable('lib')
quote = subproject('quote-1-rs').get_variable('lib')
proc_macro2 = subproject('proc-macro2-1-rs').get_variable('lib')
rust = import('rust')
lib = rust.proc_macro(

View file

@ -8,9 +8,9 @@ project(
license : 'Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT',
)
errno = subproject('errno').get_variable('lib')
libc = subproject('libc').get_variable('lib')
bitflags = subproject('bitflags').get_variable('lib')
errno = subproject('errno-0.3-rs').get_variable('lib')
libc = subproject('libc-0.2-rs').get_variable('lib')
bitflags = subproject('bitflags-2-rs').get_variable('lib')
rustix_args = []
if host_machine.system() == 'linux' or host_machine.system() == 'android'

View file

@ -32,9 +32,9 @@ if rc.version().version_compare('< 1.56')
rust_args += ['--cfg', 'syn_no_negative_literal_parse']
endif
u_ind = subproject('unicode-ident').get_variable('lib')
quote = subproject('quote').get_variable('lib')
pm2 = subproject('proc-macro2').get_variable('lib')
u_ind = subproject('unicode-ident-1-rs').get_variable('lib')
quote = subproject('quote-1-rs').get_variable('lib')
pm2 = subproject('proc-macro2-1-rs').get_variable('lib')
lib = static_library(

View file

@ -8,10 +8,10 @@ project(
license : 'MIT OR Apache-2.0',
)
syn = subproject('syn').get_variable('lib')
quote = subproject('quote').get_variable('lib')
proc_macro2 = subproject('proc-macro2').get_variable('lib')
thiserror_impl = subproject('thiserror-impl').get_variable('lib')
syn = subproject('syn-2-rs').get_variable('lib')
quote = subproject('quote-1-rs').get_variable('lib')
proc_macro2 = subproject('proc-macro2-1-rs').get_variable('lib')
thiserror_impl = subproject('thiserror-impl-2-rs').get_variable('lib')
lib = static_library(
'thiserror',

View file

@ -8,9 +8,9 @@ project(
license : 'MIT OR Apache-2.0',
)
syn = subproject('syn').get_variable('lib')
quote = subproject('quote').get_variable('lib')
proc_macro2 = subproject('proc-macro2').get_variable('lib')
syn = subproject('syn-2-rs').get_variable('lib')
quote = subproject('quote-1-rs').get_variable('lib')
proc_macro2 = subproject('proc-macro2-1-rs').get_variable('lib')
rust = import('rust')
lib = rust.proc_macro(

View file

@ -9,7 +9,7 @@ project(
)
zerocopy_args = ['--cfg', 'feature="derive"']
zerocopy_derive = subproject('zerocopy-derive').get_variable('lib')
zerocopy_derive = subproject('zerocopy-derive-0.8-rs').get_variable('lib')
lib = static_library(
'zerocopy',

View file

@ -8,9 +8,9 @@ project(
license : 'MIT OR Apache-2.0 OR BSD 2-Clause',
)
syn = subproject('syn').get_variable('lib')
quote = subproject('quote').get_variable('lib')
proc_macro2 = subproject('proc-macro2').get_variable('lib')
syn = subproject('syn-2-rs').get_variable('lib')
quote = subproject('quote-1-rs').get_variable('lib')
proc_macro2 = subproject('proc-macro2-1-rs').get_variable('lib')
rust = import('rust')
lib = rust.proc_macro(

View file

@ -3,4 +3,4 @@ directory = paste-1.0.14
source_url = https://crates.io/api/v1/crates/paste/1.0.14/download
source_filename = paste-1.0.14.tar.gz
source_hash = de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c
patch_directory = paste
patch_directory = paste-1-rs

View file

@ -3,4 +3,4 @@ directory = pest-2.8.0
source_url = https://crates.io/api/v1/crates/pest/2.8.0/download
source_filename = pest-2.8.0.tar.gz
source_hash = 198db74531d58c70a361c42201efde7e2591e976d518caf7662a47dc5720e7b6
patch_directory = pest
patch_directory = pest-2-rs

View file

@ -3,4 +3,4 @@ directory = pest_derive-2.8.0
source_url = https://crates.io/api/v1/crates/pest_derive/2.8.0/download
source_filename = pest_derive-2.8.0.tar.gz
source_hash = d725d9cfd79e87dccc9341a2ef39d1b6f6353d68c4b33c177febbe1a402c97c5
patch_directory = pest_derive
patch_directory = pest_derive-2-rs

View file

@ -3,4 +3,4 @@ directory = pest_generator-2.8.0
source_url = https://crates.io/api/v1/crates/pest_generator/2.8.0/download
source_filename = pest_generator-2.8.0.tar.gz
source_hash = db7d01726be8ab66ab32f9df467ae8b1148906685bbe75c82d1e65d7f5b3f841
patch_directory = pest_generator
patch_directory = pest_generator-2-rs

View file

@ -3,4 +3,4 @@ directory = pest_meta-2.8.0
source_url = https://crates.io/api/v1/crates/pest_meta/2.8.0/download
source_filename = pest_meta-2.8.0.tar.gz
source_hash = 7f9f832470494906d1fca5329f8ab5791cc60beb230c74815dff541cbd2b5ca0
patch_directory = pest_meta
patch_directory = pest_meta-2-rs

View file

@ -3,4 +3,4 @@ directory = proc-macro2-1.0.86
source_url = https://crates.io/api/v1/crates/proc-macro2/1.0.86/download
source_filename = proc-macro2-1.0.86.tar.gz
source_hash = 5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77
patch_directory = proc-macro2
patch_directory = proc-macro2-1-rs

View file

@ -3,4 +3,4 @@ directory = quote-1.0.35
source_url = https://crates.io/api/v1/crates/quote/1.0.35/download
source_filename = quote-1.0.35.tar.gz
source_hash = 291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef
patch_directory = quote
patch_directory = quote-1-rs

View file

@ -3,4 +3,4 @@ directory = remain-0.2.12
source_url = https://crates.io/api/v1/crates/remain/0.2.12/download
source_filename = remain-0.2.12.tar.gz
source_hash = 1ad5e011230cad274d0532460c5ab69828ea47ae75681b42a841663efffaf794
patch_directory = remain
patch_directory = remain-0.2-rs

View file

@ -3,4 +3,4 @@ directory = roxmltree-0.20.0
source_url = https://crates.io/api/v1/crates/roxmltree/0.20.0/download
source_filename = roxmltree-0.20.0.tar.gz
source_hash = 6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97
patch_directory = roxmltree
patch_directory = roxmltree-0.20-rs

View file

@ -3,4 +3,4 @@ directory = rustc-hash-2.1.1
source_url = https://crates.io/api/v1/crates/rustc-hash/2.1.1/download
source_filename = rustc-hash-2.1.1.tar.gz
source_hash = 357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d
patch_directory = rustc-hash
patch_directory = rustc-hash-2-rs

View file

@ -3,6 +3,6 @@ directory = rustix-1.0.7
source_url = https://crates.io/api/v1/crates/rustix/1.0.7/download
source_filename = rustix-1.0.7.tar.gz
source_hash = c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266
patch_directory = rustix
patch_directory = rustix-1-rs
diff_files = rustix/0001-BACKPORT-rustix-on-Linux-support-a-build-without-lin.patch
diff_files = rustix-1-rs/0001-BACKPORT-rustix-on-Linux-support-a-build-without-lin.patch

View file

@ -3,4 +3,4 @@ directory = syn-2.0.87
source_url = https://crates.io/api/v1/crates/syn/2.0.87/download
source_filename = syn-2.0.87.tar.gz
source_hash = 25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d
patch_directory = syn
patch_directory = syn-2-rs

View file

@ -3,4 +3,4 @@ directory = thiserror-2.0.11
source_url = https://crates.io/api/v1/crates/thiserror/2.0.11/download
source_filename = thiserror-2.0.11.tar.gz
source_hash = d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc
patch_directory = thiserror
patch_directory = thiserror-2-rs

View file

@ -3,4 +3,4 @@ directory = thiserror-impl-2.0.11
source_url = https://crates.io/api/v1/crates/thiserror-impl/2.0.11/download
source_filename = thiserror-impl-2.0.11.tar.gz
source_hash = 26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2
patch_directory = thiserror-impl
patch_directory = thiserror-impl-2-rs

View file

@ -3,4 +3,4 @@ directory = ucd-trie-0.1.6
source_url = https://crates.io/api/v1/crates/ucd-trie/0.1.6/download
source_filename = ucd-trie-0.1.6.tar.gz
source_hash = ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9
patch_directory = ucd-trie
patch_directory = ucd-trie-0.1-rs

View file

@ -3,4 +3,4 @@ directory = unicode-ident-1.0.12
source_url = https://crates.io/api/v1/crates/unicode-ident/1.0.12/download
source_filename = unicode-ident-1.0.12.tar.gz
source_hash = 3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b
patch_directory = unicode-ident
patch_directory = unicode-ident-1-rs

View file

@ -3,6 +3,6 @@ directory = zerocopy-0.8.13
source_url = https://crates.io/api/v1/crates/zerocopy/0.8.13/download
source_filename = zerocopy-0.8.13.tar.gz
source_hash = 67914ab451f3bfd2e69e5e9d2ef3858484e7074d63f204fd166ec391b54de21d
patch_directory = zerocopy
patch_directory = zerocopy-0.8-rs
diff_files = zerocopy/0001-zerocopy-work-around-Meson-limitation.patch
diff_files = zerocopy-0.8-rs/0001-zerocopy-work-around-Meson-limitation.patch

View file

@ -3,4 +3,4 @@ directory = zerocopy-derive-0.8.13
source_url = https://crates.io/api/v1/crates/zerocopy-derive/0.8.13/download
source_filename = zerocopy-derive-0.8.13.tar.gz
source_hash = 7988d73a4303ca289df03316bc490e934accf371af6bc745393cf3c2c5c4f25d
patch_directory = zerocopy-derive
patch_directory = zerocopy-derive-0.8-rs