Fix allowlist regex in bindgen invocation The allowlist is just a regex, which means bindgen leaves it to the user to resolve Windows vs POSIX filepath differences. We need to support both / and \. It's unclear why only some headers are broken, but it's probably something to do with whether the header is included directly or indirectly. Unfortunately, in doing so, we run into a mess of escaping issues, so the regex is more permissing than ideal. Bug: 595 Change-Id: I8b785aeaaeff162d9eb2aced89928f9602445903 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/58967 Auto-Submit: David Benjamin <davidben@google.com> Reviewed-by: Bob Beck <bbe@google.com> Commit-Queue: Bob Beck <bbe@google.com>
diff --git a/rust/bssl-sys/CMakeLists.txt b/rust/bssl-sys/CMakeLists.txt index 4cf8507..c11510b 100644 --- a/rust/bssl-sys/CMakeLists.txt +++ b/rust/bssl-sys/CMakeLists.txt
@@ -5,15 +5,33 @@ # Generate architecture-specific wrappers. set(WRAPPER_TARGET ${CMAKE_BINARY_DIR}/rust/bssl-sys/src/wrapper_${RUST_BINDINGS}.rs) -set(COMMAND ${BINDGEN_EXECUTABLE} "wrapper.h" +set(COMMAND ${BINDGEN_EXECUTABLE} wrapper.h -o ${WRAPPER_TARGET} --no-derive-default --enable-function-attribute-detection --use-core - --default-macro-constant-type="signed" - --rustified-enum="point_conversion_form_t" - --allowlist-file=".*/include/openssl/.*\\.h" - --allowlist-file=".*/rust_wrapper\\.h" + --default-macro-constant-type=signed + --rustified-enum=point_conversion_form_t + # These regexes need to accept both / and \ to handle Windows file + # path differences, due a bindgen issue. See + # https://crbug.com/boringssl/595. Ideally, we would write [/\\], + # but there are many layers of escaping here. First, CMake + # interprets backslashes. Then CMake generates a Ninja or Make file. + # That, in turn, launches passes inputs to the shell on POSIX, and + # does something else on Windows. + # + # It is unlikely that every layer here has sufficiently well-defined + # escaping and correctly handled the next layer's escaping. On top + # of that, we'd likely need to detect Windows vs POSIX hosts and + # change the input. Instead, just use [[:punct:]] which is more + # permissive than necessary, but we only need to exclude unwanted + # libc heaaders. + # + # If bindgen ever supports some file-based config (see + # https://github.com/rust-lang/rust-bindgen/issues/2508), we can + # switch to that. + --allowlist-file=".*[[:punct:]]include[[:punct:]]openssl[[:punct:]].*\\.h" + --allowlist-file=".*[[:punct:]]rust_wrapper\\.h" -- # these are LLVM arg passthroughs -I../../include # https://doc.rust-lang.org/nightly/rustc/platform-support.html