diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml index 5122fa6354..732540e05d 100644 --- a/.bazelci/presubmit.yml +++ b/.bazelci/presubmit.yml @@ -201,6 +201,7 @@ tasks: platform: rbe_ubuntu1604 environment: RULES_RUST_CRATE_UNIVERSE_BOOTSTRAP: true + OPENSSL_STATIC: "1" working_directory: examples/crate_universe build_targets: - "//..." @@ -212,6 +213,7 @@ tasks: platform: macos environment: RULES_RUST_CRATE_UNIVERSE_BOOTSTRAP: true + OPENSSL_STATIC: "1" working_directory: examples/crate_universe build_targets: - "//..." @@ -223,6 +225,7 @@ tasks: platform: windows environment: RULES_RUST_CRATE_UNIVERSE_BOOTSTRAP: true + OPENSSL_STATIC: "1" working_directory: examples/crate_universe build_flags: - "--enable_runfiles" # this is not enabled by default on windows and is necessary for the cargo build scripts diff --git a/crate_universe/Cargo.lock b/crate_universe/Cargo.lock index 07d15d9c21..9efa40d75f 100644 --- a/crate_universe/Cargo.lock +++ b/crate_universe/Cargo.lock @@ -1,5 +1,13 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "aho-corasick" version = "0.7.15" @@ -55,6 +63,12 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + [[package]] name = "bitflags" version = "1.2.1" @@ -102,6 +116,12 @@ dependencies = [ "regex-automata", ] +[[package]] +name = "bumpalo" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631" + [[package]] name = "byte-tools" version = "0.3.1" @@ -114,6 +134,12 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +[[package]] +name = "bytes" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" + [[package]] name = "camino" version = "1.0.4" @@ -123,11 +149,26 @@ dependencies = [ "serde", ] +[[package]] +name = "cargo-clone-crate" +version = "0.1.6" +source = "git+https://github.com/ehuss/cargo-clone-crate.git?rev=36f5e72513a26ae539d0c3bfa7b3111b9aa11c6c#36f5e72513a26ae539d0c3bfa7b3111b9aa11c6c" +dependencies = [ + "anyhow", + "flate2", + "log", + "regex", + "reqwest", + "semver", + "serde_json", + "tar", +] + [[package]] name = "cargo-lock" -version = "6.0.1" +version = "7.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f16e7adc20969298b1e137ac21ab3a7e7a9412fec71f963ff2fdc41663d70f" +checksum = "7fb04b88bd5b2036e30704f95c6ee16f3b5ca3b4ca307da2889d9006648e5c88" dependencies = [ "semver", "serde", @@ -147,14 +188,17 @@ dependencies = [ [[package]] name = "cargo-raze" version = "0.12.0" -source = "git+https://github.com/UebelAndre/cargo-raze.git?rev=1e9949fd209056bfd7e35b4374b7b345f2920def#1e9949fd209056bfd7e35b4374b7b345f2920def" +source = "git+https://github.com/google/cargo-raze.git?rev=4cbe5272b0fbbb24577bc85b647b13cb9b99ce52#4cbe5272b0fbbb24577bc85b647b13cb9b99ce52" dependencies = [ "anyhow", + "cargo-clone-crate", "cargo-lock", "cargo-platform", - "cargo_metadata 0.12.3", + "cargo_metadata", "cargo_toml", - "cfg-expr", + "cfg-expr 0.6.0", + "crates-index", + "docopt", "glob", "itertools", "log", @@ -175,27 +219,13 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.12.3" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714a157da7991e23d90686b9524b9e12e0407a108647f52e9328f4b3d51ac7f" -dependencies = [ - "cargo-platform", - "semver", - "semver-parser", - "serde", - "serde_json", -] - -[[package]] -name = "cargo_metadata" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "081e3f0755c1f380c2d010481b6fa2e02973586d5f2b24eebb7a2a1d98b143d8" +checksum = "c297bd3135f558552f99a0daa180876984ea2c4ffa7470314540dff8c654109a" dependencies = [ "camino", "cargo-platform", "semver", - "semver-parser", "serde", "serde_json", ] @@ -211,6 +241,24 @@ dependencies = [ "toml", ] +[[package]] +name = "cc" +version = "1.0.70" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cfg-expr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4f9cf6cb58661f5cdcda0240ab42788e009bd957ba56c1367aa01c7c6fbc05" +dependencies = [ + "smallvec", +] + [[package]] name = "cfg-expr" version = "0.7.4" @@ -258,12 +306,28 @@ dependencies = [ "ansi_term", "atty", "bitflags", - "strsim", + "strsim 0.8.0", "textwrap", "unicode-width", "vec_map", ] +[[package]] +name = "core-foundation" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b" + [[package]] name = "cpuid-bool" version = "0.1.2" @@ -277,14 +341,15 @@ dependencies = [ "anyhow", "assert_cmd", "cargo-raze", - "cargo_metadata 0.13.1", - "cfg-expr", + "cargo_metadata", + "cfg-expr 0.7.4", "env_logger", "hex", "indoc", "itertools", "log", "maplit", + "openssl", "predicates", "semver", "serde", @@ -299,6 +364,33 @@ dependencies = [ "uuid", ] +[[package]] +name = "crates-index" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ad4af5c8dd9940a497ef4473e6e558b660a4a1b6e5ce2cb9d85454e2aaaf947" +dependencies = [ + "git2", + "glob", + "hex", + "home", + "memchr", + "semver", + "serde", + "serde_derive", + "serde_json", + "smartstring", +] + +[[package]] +name = "crc32fast" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" +dependencies = [ + "cfg-if", +] + [[package]] name = "crossbeam-utils" version = "0.8.3" @@ -346,12 +438,33 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "docopt" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f" +dependencies = [ + "lazy_static", + "regex", + "serde", + "strsim 0.10.0", +] + [[package]] name = "either" version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +[[package]] +name = "encoding_rs" +version = "0.8.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80df024fbc5ac80f87dfef0d9f5209a252f2a497f7f42944cff24d8253cac065" +dependencies = [ + "cfg-if", +] + [[package]] name = "env_logger" version = "0.8.3" @@ -371,6 +484,30 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +[[package]] +name = "filetime" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "winapi", +] + +[[package]] +name = "flate2" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80edafed416a46fb378521624fab1cfa2eb514784fd8921adbe8a8d8321da811" +dependencies = [ + "cfg-if", + "crc32fast", + "libc", + "miniz_oxide", +] + [[package]] name = "float-cmp" version = "0.8.0" @@ -386,6 +523,21 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + [[package]] name = "form_urlencoded" version = "1.0.1" @@ -402,6 +554,55 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +[[package]] +name = "futures-channel" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" + +[[package]] +name = "futures-io" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" + +[[package]] +name = "futures-sink" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" + +[[package]] +name = "futures-task" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" + +[[package]] +name = "futures-util" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" +dependencies = [ + "autocfg", + "futures-core", + "futures-io", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + [[package]] name = "generic-array" version = "0.12.4" @@ -432,6 +633,21 @@ dependencies = [ "wasi", ] +[[package]] +name = "git2" +version = "0.13.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "659cd14835e75b64d9dba5b660463506763cf0aa6cb640aeeb0e98d841093490" +dependencies = [ + "bitflags", + "libc", + "libgit2-sys", + "log", + "openssl-probe", + "openssl-sys", + "url", +] + [[package]] name = "glob" version = "0.3.0" @@ -462,6 +678,31 @@ dependencies = [ "walkdir", ] +[[package]] +name = "h2" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7f3675cfef6a30c8031cf9e6493ebdc3bb3272a3fea3923c4210d1830e6a472" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" + [[package]] name = "heck" version = "0.3.2" @@ -485,6 +726,52 @@ name = "hex" version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +dependencies = [ + "serde", +] + +[[package]] +name = "home" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2456aef2e6b6a9784192ae780c0f15bc57df0e918585282325e8c8ac27737654" +dependencies = [ + "winapi", +] + +[[package]] +name = "http" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "399c583b2979440c60be0821a6199eca73bc3c8dcd9d070d75ac726e2c6186e5" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" + +[[package]] +name = "httpdate" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440" [[package]] name = "humansize" @@ -498,6 +785,43 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "hyper" +version = "0.14.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13f67199e765030fa08fe0bd581af683f0d5bc04ea09c2b1102012c5fb90e7fd" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "idna" version = "0.2.3" @@ -527,6 +851,16 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "indexmap" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5" +dependencies = [ + "autocfg", + "hashbrown", +] + [[package]] name = "indoc" version = "1.0.3" @@ -536,6 +870,12 @@ dependencies = [ "unindent", ] +[[package]] +name = "ipnet" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f2d64f2edebec4ce84ad108148e67e1064789bee435edc5b60ad398714a3a9" + [[package]] name = "itertools" version = "0.10.0" @@ -551,6 +891,24 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736" +[[package]] +name = "jobserver" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4bf49d50e2961077d9c99f4b7997d770a1114f087c3c2e0069b36c13fc2979d" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -559,9 +917,49 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.93" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" + +[[package]] +name = "libgit2-sys" +version = "0.12.22+1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89c53ac117c44f7042ad8d8f5681378dfbc6010e49ec2c0d1f11dfedc7a4a1c3" +dependencies = [ + "cc", + "libc", + "libssh2-sys", + "libz-sys", + "openssl-sys", + "pkg-config", +] + +[[package]] +name = "libssh2-sys" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9385f66bf6105b241aa65a61cb923ef20efc665cb9f9bb50ac2f0c4b7f378d41" +checksum = "e0186af0d8f171ae6b9c4c90ec51898bad5d08a2d5e470903a50d9ad8959cbee" +dependencies = [ + "cc", + "libc", + "libz-sys", + "openssl-sys", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] [[package]] name = "log" @@ -586,9 +984,65 @@ checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08" [[package]] name = "memchr" -version = "2.3.4" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "mime" +version = "0.3.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "mio" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16" +dependencies = [ + "libc", + "log", + "miow", + "ntapi", + "winapi", +] + +[[package]] +name = "miow" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +dependencies = [ + "winapi", +] + +[[package]] +name = "native-tls" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" +checksum = "48ba9f7719b5a0f42f338907614285fb5fd70e53858141f69898a1fb7203b24d" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] [[package]] name = "normalize-line-endings" @@ -596,6 +1050,15 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" +[[package]] +name = "ntapi" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" +dependencies = [ + "winapi", +] + [[package]] name = "num" version = "0.1.42" @@ -674,6 +1137,16 @@ dependencies = [ "autocfg", ] +[[package]] +name = "num_cpus" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" +dependencies = [ + "hermit-abi", + "libc", +] + [[package]] name = "once_cell" version = "1.7.2" @@ -692,6 +1165,49 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +[[package]] +name = "openssl" +version = "0.10.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d9facdb76fec0b73c406f125d44d86fdad818d66fef0531eec9233ca425ff4a" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-sys", +] + +[[package]] +name = "openssl-probe" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a" + +[[package]] +name = "openssl-src" +version = "111.16.0+1.1.1l" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab2173f69416cf3ec12debb5823d244127d23a9b127d5a5189aa97c5fa2859f" +dependencies = [ + "cc", +] + +[[package]] +name = "openssl-sys" +version = "0.9.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1996d2d305e561b70d1ee0c53f1542833f4e1ac6ce9a6708b6ff2738ca67dc82" +dependencies = [ + "autocfg", + "cc", + "libc", + "openssl-src", + "pkg-config", + "vcpkg", +] + [[package]] name = "parse-zoneinfo" version = "0.3.0" @@ -756,6 +1272,24 @@ dependencies = [ "sha-1", ] +[[package]] +name = "pin-project-lite" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" + [[package]] name = "ppv-lite86" version = "0.2.10" @@ -912,9 +1446,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.6" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8270314b5ccceb518e7e578952f0b72b88222d02e8f77f5ecf7abbb673539041" +checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" dependencies = [ "bitflags", ] @@ -954,6 +1488,41 @@ dependencies = [ "winapi", ] +[[package]] +name = "reqwest" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246e9f61b9bb77df069a947682be06e31ac43ea37862e244a69f177694ea6d22" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "hyper-tls", + "ipnet", + "js-sys", + "lazy_static", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-native-tls", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + [[package]] name = "rustc-serialize" version = "0.3.24" @@ -976,37 +1545,61 @@ dependencies = [ ] [[package]] -name = "semver" -version = "0.11.0" +name = "schannel" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6" +checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" dependencies = [ - "semver-parser", - "serde", + "lazy_static", + "winapi", ] [[package]] -name = "semver-parser" -version = "0.10.2" -source = "git+https://github.com/illicitonion/semver-parser.git?rev=ad6589269eab8851f3d5ad362a6b1cd89a1b6693#ad6589269eab8851f3d5ad362a6b1cd89a1b6693" +name = "security-framework" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23a2ac85147a3a11d77ecf1bc7166ec0b92febfa4461c37944e180f319ece467" dependencies = [ - "pest", + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9dd14d83160b528b7bfd66439110573efcfbe281b17fc2ca9f39f550d619c7e" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012" +dependencies = [ + "serde", ] [[package]] name = "serde" -version = "1.0.125" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171" +checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.125" +version = "1.0.130" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d" +checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" dependencies = [ "proc-macro2", "quote", @@ -1024,6 +1617,18 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_urlencoded" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + [[package]] name = "sha-1" version = "0.8.2" @@ -1049,6 +1654,12 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "slab" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" + [[package]] name = "slug" version = "0.1.4" @@ -1064,11 +1675,31 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +[[package]] +name = "smartstring" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31aa6a31c0c2b21327ce875f7e8952322acfcfd0c27569a6e18a647281352c9b" +dependencies = [ + "serde", + "static_assertions", +] + +[[package]] +name = "socket2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "spdx" -version = "0.4.0" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ebe4f76cacc83caff34a6ad8731a260d5d1213bdedc655968c62f6cbc92783" +checksum = "4e6b6cc773b635ad64a05f00367c6f66d06a8708f7360f67c41d446dacdd0a0f" dependencies = [ "lazy_static", "regex", @@ -1084,12 +1715,24 @@ dependencies = [ "num", ] +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + [[package]] name = "strsim" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "structopt" version = "0.3.21" @@ -1125,6 +1768,16 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "tar" +version = "0.4.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f5515d3add52e0bbdcad7b83c388bb36ba7b754dda3b5f5bc2d38640cdba5c" +dependencies = [ + "filetime", + "libc", +] + [[package]] name = "tempfile" version = "3.2.0" @@ -1213,6 +1866,46 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +[[package]] +name = "tokio" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4efe6fc2395938c8155973d7be49fe8d03a843726e285e100a8a383cc0154ce" +dependencies = [ + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "pin-project-lite", + "winapi", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d3725d3efa29485e87311c5b699de63cde14b00ed4d256b8318aa30ca452cd" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "log", + "pin-project-lite", + "tokio", +] + [[package]] name = "toml" version = "0.5.8" @@ -1222,12 +1915,44 @@ dependencies = [ "serde", ] +[[package]] +name = "tower-service" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" + +[[package]] +name = "tracing" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ca517f43f0fb96e0c3072ed5c275fe5eece87e8cb52f4a77b69226d3b1c9df8" +dependencies = [ + "lazy_static", +] + [[package]] name = "treeline" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7f741b240f1a48843f9b8e0444fb55fb2a4ff67293b50a9179dfd5ea67f8d41" +[[package]] +name = "try-lock" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" + [[package]] name = "typenum" version = "1.13.0" @@ -1354,6 +2079,12 @@ dependencies = [ "getrandom", ] +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + [[package]] name = "vec_map" version = "0.8.2" @@ -1386,12 +2117,100 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "want" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +dependencies = [ + "log", + "try-lock", +] + [[package]] name = "wasi" version = "0.10.2+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +[[package]] +name = "wasm-bindgen" +version = "0.2.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce9b1b516211d33767048e5d47fa2a381ed8b76fc48d2ce4aa39877f9f183e0" +dependencies = [ + "cfg-if", + "serde", + "serde_json", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe8dc78e2326ba5f845f4b5bf548401604fa20b1dd1d365fb73b6c1d6364041" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95fded345a6559c2cfee778d562300c581f7d4ff3edb9b0d230d69800d213972" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44468aa53335841d9d6b6c023eaab07c0cd4bddbcfdee3e2bb1e8d2cb8069fef" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0195807922713af1e67dc66132c7328206ed9766af3858164fb583eedc25fbad" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdb075a845574a1fa5f09fd77e43f7747599301ea3417a9fbffdeedfc1f4a29" + +[[package]] +name = "web-sys" +version = "0.3.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224b2f6b67919060055ef1a67807367c2066ed520c3862cc013d26cf893a783c" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "winapi" version = "0.3.9" @@ -1422,3 +2241,12 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winreg" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +dependencies = [ + "winapi", +] diff --git a/crate_universe/Cargo.toml b/crate_universe/Cargo.toml index b79f194e0e..1cf09ab6a1 100644 --- a/crate_universe/Cargo.toml +++ b/crate_universe/Cargo.toml @@ -14,18 +14,20 @@ edition = "2018" # Several of these dependencies need to be compatible with the version cargo-raze is using. anyhow = "1" -cargo_metadata = "0.13.1" +cargo_metadata = "0.14" # TODO: Use upstream once following changes are merged: # https://github.com/google/cargo-raze/pull/407 # https://github.com/google/cargo-raze/pull/415 -cargo-raze = { git = "https://github.com/UebelAndre/cargo-raze.git", rev = "1e9949fd209056bfd7e35b4374b7b345f2920def", default-features = false } +cargo-raze = { git = "https://github.com/google/cargo-raze.git", rev = "4cbe5272b0fbbb24577bc85b647b13cb9b99ce52" } cfg-expr = "0.7.4" env_logger = "0.8" hex = "0.4" indoc = "1.0.2" itertools = "0.10" log = "0.4" -semver = { version = "0.11", features = ["serde"] } +# openssl is a transitive dep - this enables the feature to allow it to build on buildkite. +openssl = { version = "0.10", features = ["vendored"] } +semver = "1" serde = { version = "1", features = ["derive"] } serde_json = "1" sha2 = "0.9" @@ -44,5 +46,5 @@ spectral = "0.6" tempfile = "3.2.0" [patch.crates-io] -# Until https://github.com/steveklabnik/semver-parser/pull/60 merges. -semver-parser = { git = "https://github.com/illicitonion/semver-parser.git", rev = "ad6589269eab8851f3d5ad362a6b1cd89a1b6693" } +# Until https://github.com/ehuss/cargo-clone-crate/pull/6 is released +cargo-clone-crate = { git = "https://github.com/ehuss/cargo-clone-crate.git", rev = "36f5e72513a26ae539d0c3bfa7b3111b9aa11c6c" } diff --git a/crate_universe/bootstrap.bzl b/crate_universe/bootstrap.bzl index 1777ea4ce7..8198a1bf25 100644 --- a/crate_universe/bootstrap.bzl +++ b/crate_universe/bootstrap.bzl @@ -1,9 +1,12 @@ """A module for declaraing a repository for bootstrapping crate_universe""" -load("//cargo:defs.bzl", "cargo_bootstrap_repository") +load("//cargo:defs.bzl", "cargo_bootstrap_repository", "cargo_env") +load("//crate_universe/third_party/openssl:openssl_repositories.bzl", "openssl_repositories") load("//rust:defs.bzl", "rust_common") def crate_universe_bootstrap(): + openssl_repositories() + cargo_bootstrap_repository( name = "rules_rust_crate_universe_bootstrap", cargo_lockfile = Label("//crate_universe:Cargo.lock"), @@ -11,4 +14,12 @@ def crate_universe_bootstrap(): srcs = [Label("//crate_universe:resolver_srcs")], version = rust_common.default_version, binary = "crate_universe_resolver", + env_label = { + "x86_64-pc-windows-gnu": cargo_env({ + "PERL": "@perl_windows//:perl/bin/perl.exe", + }), + "x86_64-pc-windows-msvc": cargo_env({ + "PERL": "@perl_windows//:perl/bin/perl.exe", + }), + }, ) diff --git a/crate_universe/src/config.rs b/crate_universe/src/config.rs index 7e64e44046..70a2c8f447 100644 --- a/crate_universe/src/config.rs +++ b/crate_universe/src/config.rs @@ -3,7 +3,6 @@ use std::{ path::PathBuf, }; -use semver::VersionReq; use serde::{Deserialize, Serialize}; use url::Url; @@ -14,10 +13,10 @@ use crate::{ resolver::{Resolver, ResolverConfig}, }; -#[derive(Debug, Deserialize, Serialize, Ord, Eq, PartialOrd, PartialEq)] +#[derive(Debug, Deserialize, Serialize, Eq, PartialEq, Ord, PartialOrd)] pub struct Package { pub name: String, - pub semver: VersionReq, + pub semver: String, pub features: Vec, } @@ -58,7 +57,7 @@ pub struct Config { /// replaced by crate names and versions. pub crate_registry_template: String, - pub target_triples: Vec, + pub target_triples: BTreeSet, pub cargo: PathBuf, #[serde(default = "default_rules_rust_workspace_name")] diff --git a/crate_universe/src/consolidator.rs b/crate_universe/src/consolidator.rs index 6281d0cb9f..1ba6a105c2 100644 --- a/crate_universe/src/consolidator.rs +++ b/crate_universe/src/consolidator.rs @@ -4,7 +4,7 @@ use anyhow::anyhow; use cargo_raze::context::{ BuildableDependency, CrateContext, CrateDependencyContext, CrateTargetedDepContext, }; -use cargo_raze::util::{generate_bazel_conditions, get_matching_bazel_triples}; +use cargo_raze::util::get_matching_bazel_triples; use cfg_expr::targets::get_builtin_target_by_triple; use itertools::Itertools; use semver::Version; @@ -41,7 +41,7 @@ pub struct Consolidator { consolidator_config: ConsolidatorConfig, render_config: RenderConfig, digest: String, - target_triples: Vec, + target_triples: BTreeSet, resolved_packages: Vec, member_packages_version_mapping: Dependencies, label_to_crates: BTreeMap>, @@ -52,7 +52,7 @@ impl Consolidator { consolidator_config: ConsolidatorConfig, render_config: RenderConfig, digest: String, - target_triples: Vec, + target_triples: BTreeSet, resolved_packages: Vec, member_packages_version_mapping: Dependencies, label_to_crates: BTreeMap>, @@ -70,25 +70,25 @@ impl Consolidator { fn targeted_dep_context_for( target: &str, - target_triples_filter: &[String], + target_triples_filter: &BTreeSet, ) -> CrateTargetedDepContext { - let triples: Vec<_> = { + let platform_targets: Vec<_> = { if target.starts_with("cfg(") { // User passed a cfg(...) configuration. - get_matching_bazel_triples(&target.to_owned()) - .unwrap_or_default() - .into_iter() - .filter(|target| target_triples_filter.contains(target)) - .collect() + get_matching_bazel_triples( + &target.to_owned(), + &Some(target_triples_filter.iter().cloned().collect()), + ) + .map_or_else(|_err| Vec::new(), |i| i.map(|v| v.to_owned()).collect()) } else { // User passed a triple. - match get_builtin_target_by_triple(&target) { + match get_builtin_target_by_triple(target) { Some(_) => vec![target.to_owned()], _ => vec![], } } }; - if triples.is_empty() { + if platform_targets.is_empty() { panic!( "Target {} in rule attribute doesn't map to any triple", &target @@ -98,22 +98,22 @@ impl Consolidator { CrateTargetedDepContext { target: target.to_owned(), deps: CrateDependencyContext { - dependencies: vec![], - proc_macro_dependencies: vec![], - data_dependencies: vec![], - build_dependencies: vec![], - build_proc_macro_dependencies: vec![], - build_data_dependencies: vec![], - dev_dependencies: vec![], - aliased_dependencies: vec![], + dependencies: BTreeSet::new(), + proc_macro_dependencies: BTreeSet::new(), + data_dependencies: BTreeSet::new(), + build_dependencies: BTreeSet::new(), + build_proc_macro_dependencies: BTreeSet::new(), + build_data_dependencies: BTreeSet::new(), + dev_dependencies: BTreeSet::new(), + aliased_dependencies: BTreeMap::new(), }, - conditions: generate_bazel_conditions("rules_rust", &triples).unwrap(), // UNWRAP: the triple was generated by get_matching_bazel_triples() + platform_targets, } } // Generate a Vec of CrateTargetedDepContext with the deps/data contents from the provided arguments. fn extra_deps_as_targeted_deps( - target_triples_filter: &[String], + target_triples_filter: &BTreeSet, extra_bazel_deps: I, extra_bazel_data_deps: I, extra_build_script_bazel_deps: I, diff --git a/crate_universe/src/main.rs b/crate_universe/src/main.rs index fab4689885..50fca89f4c 100644 --- a/crate_universe/src/main.rs +++ b/crate_universe/src/main.rs @@ -43,7 +43,7 @@ fn main() -> anyhow::Result<()> { eprintln!("Not updating lockfile for `crate_universe` repository with name \"{}\" because it has no `lockfile` attribute.", opt.repo_name); } } else if let Some(lockfile) = lockfile { - return reuse_lockfile(config, &lockfile, &opt); + return reuse_lockfile(config, lockfile, &opt); } generate_dependencies(config, &opt) diff --git a/crate_universe/src/parser.rs b/crate_universe/src/parser.rs index 417d8d8514..9e6c4aa391 100644 --- a/crate_universe/src/parser.rs +++ b/crate_universe/src/parser.rs @@ -200,12 +200,23 @@ pub fn merge_cargo_tomls( } for package in packages { + let AdditionalPackage { + name, + semver, + features, + } = package; + merged_cargo_toml.dependencies.insert( - package.name, + name.clone(), DepSpec { default_features: true, - features: package.features.into_iter().collect(), - version: VersionSpec::Semver(package.semver), + features: features.into_iter().collect(), + version: VersionSpec::Semver(VersionReq::parse(&semver).with_context(|| { + format!( + "Failed to parse semver requirement for package {}, semver: {}", + name, semver + ) + })?), }, ); } diff --git a/crate_universe/src/renderer.rs b/crate_universe/src/renderer.rs index 3e747a99c7..f220df54e6 100644 --- a/crate_universe/src/renderer.rs +++ b/crate_universe/src/renderer.rs @@ -35,73 +35,96 @@ pub struct Renderer { internal_renderer: Tera, } +/// Fully qualified label representing a platform condition. +#[derive(Clone, PartialOrd, Ord, PartialEq, Eq, Serialize, Deserialize, Debug)] +#[serde(transparent)] +pub struct PlatformLabel(String); + +impl PlatformLabel { + pub fn default() -> Self { + Self(String::from("//conditions:default")) + } + + pub fn from_bazel_triple(bazel_triple: &str) -> Self { + Self(format!("@rules_rust//rust/platform:{}", bazel_triple)) + } +} + // Get default and targeted metadata, collated per Bazel condition (which corresponds to a triple). // The default metadata is included in every triple. -fn get_per_triple_metadata(package: &CrateContext) -> BTreeMap { - let mut per_triple_metadata: BTreeMap = BTreeMap::new(); +fn get_per_triple_metadata( + package: &CrateContext, +) -> BTreeMap { + let mut per_triple_metadata: BTreeMap = BTreeMap::new(); // Always add a catch-all to cover the non-targeted dep case. // We merge in the default_deps after the next loop. per_triple_metadata.insert( - String::from("//conditions:default"), + PlatformLabel::default(), CrateTargetedDepContext { target: "Default".to_owned(), deps: empty_deps_context(), - conditions: vec!["//conditions:default".to_owned()], + platform_targets: vec!["//conditions:default".to_owned()], }, ); for dep_context in &package.targeted_deps { - dep_context.conditions.iter().for_each(|condition| { - let targeted_dep_ctx = per_triple_metadata.entry(condition.to_owned()).or_insert( - CrateTargetedDepContext { - target: "".to_owned(), - deps: empty_deps_context(), - conditions: vec![condition.clone()], - }, - ); - - // Mention all the targets that translated into the current condition (ie. current triplet). - targeted_dep_ctx - .target - .push_str(&format!(" {}", &dep_context.target)); - - targeted_dep_ctx - .deps - .dependencies - .extend(dep_context.deps.dependencies.iter().cloned()); - targeted_dep_ctx - .deps - .proc_macro_dependencies - .extend(dep_context.deps.proc_macro_dependencies.iter().cloned()); - targeted_dep_ctx - .deps - .data_dependencies - .extend(dep_context.deps.data_dependencies.iter().cloned()); - targeted_dep_ctx - .deps - .build_dependencies - .extend(dep_context.deps.build_dependencies.iter().cloned()); - targeted_dep_ctx.deps.build_proc_macro_dependencies.extend( - dep_context + dep_context + .platform_targets + .iter() + .for_each(|platform_bazel_triple| { + let targeted_dep_ctx = per_triple_metadata + .entry(PlatformLabel::from_bazel_triple(platform_bazel_triple)) + .or_insert(CrateTargetedDepContext { + target: "".to_owned(), + deps: empty_deps_context(), + platform_targets: vec![platform_bazel_triple.clone()], + }); + + // Mention all the targets that translated into the current condition (ie. current triplet). + targeted_dep_ctx + .target + .push_str(&format!(" {}", &dep_context.target)); + + targeted_dep_ctx .deps - .build_proc_macro_dependencies - .iter() - .cloned(), - ); - targeted_dep_ctx - .deps - .build_data_dependencies - .extend(dep_context.deps.build_data_dependencies.iter().cloned()); - targeted_dep_ctx - .deps - .dev_dependencies - .extend(dep_context.deps.dev_dependencies.iter().cloned()); - targeted_dep_ctx - .deps - .aliased_dependencies - .extend(dep_context.deps.aliased_dependencies.iter().cloned()); - }); + .dependencies + .extend(dep_context.deps.dependencies.iter().cloned()); + targeted_dep_ctx + .deps + .proc_macro_dependencies + .extend(dep_context.deps.proc_macro_dependencies.iter().cloned()); + targeted_dep_ctx + .deps + .data_dependencies + .extend(dep_context.deps.data_dependencies.iter().cloned()); + targeted_dep_ctx + .deps + .build_dependencies + .extend(dep_context.deps.build_dependencies.iter().cloned()); + targeted_dep_ctx.deps.build_proc_macro_dependencies.extend( + dep_context + .deps + .build_proc_macro_dependencies + .iter() + .cloned(), + ); + targeted_dep_ctx + .deps + .build_data_dependencies + .extend(dep_context.deps.build_data_dependencies.iter().cloned()); + targeted_dep_ctx + .deps + .dev_dependencies + .extend(dep_context.deps.dev_dependencies.iter().cloned()); + targeted_dep_ctx.deps.aliased_dependencies.extend( + dep_context + .deps + .aliased_dependencies + .iter() + .map(|(k, v)| (k.clone(), v.clone())), + ); + }); } // Now also add the non-targeted deps to each target. @@ -131,9 +154,13 @@ fn get_per_triple_metadata(package: &CrateContext) -> BTreeMap BTreeMap CrateDependencyContext { CrateDependencyContext { - dependencies: vec![], - proc_macro_dependencies: vec![], - data_dependencies: vec![], - build_dependencies: vec![], - build_proc_macro_dependencies: vec![], - build_data_dependencies: vec![], - dev_dependencies: vec![], - aliased_dependencies: vec![], + dependencies: BTreeSet::new(), + proc_macro_dependencies: BTreeSet::new(), + data_dependencies: BTreeSet::new(), + build_dependencies: BTreeSet::new(), + build_proc_macro_dependencies: BTreeSet::new(), + build_data_dependencies: BTreeSet::new(), + dev_dependencies: BTreeSet::new(), + aliased_dependencies: BTreeMap::new(), } } @@ -323,7 +350,7 @@ impl Renderer { .with_context(|| format!("Could not create output file {}", defs_bzl_path.display()))?; self.render_workspaces(&mut defs_bzl_file)?; - writeln!(defs_bzl_file, "")?; + writeln!(defs_bzl_file)?; self.render_helper_functions(&mut defs_bzl_file)?; self.render_crates(repository_dir)?; @@ -336,7 +363,7 @@ impl Renderer { .with_context(|| format!("Could not create lockfile file: {:?}", lockfile_path))?; let content = serde_json::to_string_pretty(&self.context) .with_context(|| format!("Could not seralize render context: {:?}", self.context))?; - write!(lockfile_file, "{}\n", &content)?; + writeln!(lockfile_file, "{}", &content)?; Ok(()) } @@ -368,7 +395,7 @@ impl Renderer { let mut build_file = File::create(&build_file_path).with_context(|| { format!("Could not create BUILD file: {}", build_file_path.display()) })?; - write!(build_file, "{}\n", &build_file_content)?; + writeln!(build_file, "{}", &build_file_content)?; } Ok(()) @@ -512,7 +539,7 @@ fn string_arg<'a, 'b>( #[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] struct RenderablePackage { crate_context: CrateContext, - per_triple_metadata: BTreeMap, + per_triple_metadata: BTreeMap, is_proc_macro: bool, } diff --git a/crate_universe/src/resolver.rs b/crate_universe/src/resolver.rs index 860dc7e182..5703828c87 100644 --- a/crate_universe/src/resolver.rs +++ b/crate_universe/src/resolver.rs @@ -35,7 +35,7 @@ pub struct Resolver { pub resolver_config: ResolverConfig, pub consolidator_config: ConsolidatorConfig, pub render_config: RenderConfig, - pub target_triples: Vec, + pub target_triples: BTreeSet, pub label_to_crates: BTreeMap>, digest: Option, } @@ -61,7 +61,7 @@ impl Resolver { resolver_config: ResolverConfig, consolidator_config: ConsolidatorConfig, render_config: RenderConfig, - target_triples: Vec, + target_triples: BTreeSet, label_to_crates: BTreeMap>, ) -> Resolver { Resolver { @@ -113,7 +113,7 @@ impl Resolver { hasher.update(rules_rust_workspace_name.as_bytes()); hasher.update(b"\0"); - hasher.update(get_cargo_version(&cargo)?); + hasher.update(get_cargo_version(cargo)?); hasher.update(b"\0"); hasher.update(index_url.as_str().as_bytes()); hasher.update(b"\0"); @@ -245,7 +245,7 @@ impl Resolver { package_aliases_dir: "".to_string(), render_package_aliases: false, target: None, - targets: Some(self.target_triples.clone()), + targets: Some(self.target_triples.iter().cloned().collect()), crates: HashMap::default(), output_buildfile_suffix: "".to_string(), default_gen_buildrs: true, @@ -254,6 +254,7 @@ impl Resolver { rust_rules_workspace_name: self.render_config.rules_rust_workspace_name.clone(), vendor_dir: "".to_string(), experimental_api: false, + binary_deps: HashMap::new(), }; let planner = BuildPlannerImpl::new(metadata, raze_settings); diff --git a/crate_universe/src/serde_utils.rs b/crate_universe/src/serde_utils.rs index 742c0eaea7..1ac2b87881 100644 --- a/crate_universe/src/serde_utils.rs +++ b/crate_universe/src/serde_utils.rs @@ -33,7 +33,7 @@ struct RawDepSpec { } impl FromStr for DepSpec { - type Err = semver::ReqParseError; + type Err = semver::Error; fn from_str(s: &str) -> Result { let version = VersionSpec::Semver(semver::VersionReq::parse(s)?); diff --git a/crate_universe/src/templates/partials/targeted_aliases.template b/crate_universe/src/templates/partials/targeted_aliases.template index b406439eba..f2e731a2cc 100644 --- a/crate_universe/src/templates/partials/targeted_aliases.template +++ b/crate_universe/src/templates/partials/targeted_aliases.template @@ -2,7 +2,7 @@ {%- for condition, targeted_dep in per_triple_metadata %} # {{ targeted_dep.target }} "{{ condition }}": { - {%- for alias in targeted_dep.deps.aliased_dependencies %} + {%- for target, alias in targeted_dep.deps.aliased_dependencies %} "{{alias.target}}": "{{alias.alias}}", {%- endfor %} }, diff --git a/crate_universe/src/templates/partials/targeted_build_script_data_dependencies.template b/crate_universe/src/templates/partials/targeted_build_script_data_dependencies.template index a73b7d004c..10af6ee17f 100644 --- a/crate_universe/src/templates/partials/targeted_build_script_data_dependencies.template +++ b/crate_universe/src/templates/partials/targeted_build_script_data_dependencies.template @@ -4,8 +4,8 @@ {%- endif %} + selects.with_or({ # {{ targeted_dep.target }} ( -{%- for condition in targeted_dep.conditions %} - "{{ condition }}", +{%- for platform in targeted_dep.platform_targets %} + "@rules_rust//rust/platform:{{ platform }}", {%- endfor %} ): [ {%- for dependency in targeted_dep.deps.build_data_dependencies %} diff --git a/crate_universe/src/templates/partials/targeted_build_script_dependencies.template b/crate_universe/src/templates/partials/targeted_build_script_dependencies.template index c248d5ce22..87d9a9616f 100644 --- a/crate_universe/src/templates/partials/targeted_build_script_dependencies.template +++ b/crate_universe/src/templates/partials/targeted_build_script_dependencies.template @@ -4,8 +4,8 @@ {%- endif %} + selects.with_or({ # {{ targeted_dep.target }} ( -{%- for condition in targeted_dep.conditions %} - "{{ condition }}", +{%- for platform in targeted_dep.platform_targets %} + "@rules_rust//rust/platform:{{ platform }}", {%- endfor %} ): [ {%- for dependency in targeted_dep.deps.build_dependencies %} diff --git a/crate_universe/src/templates/partials/targeted_data_dependencies.template b/crate_universe/src/templates/partials/targeted_data_dependencies.template index 8b06d00fc7..ff570105d7 100644 --- a/crate_universe/src/templates/partials/targeted_data_dependencies.template +++ b/crate_universe/src/templates/partials/targeted_data_dependencies.template @@ -4,8 +4,8 @@ {%- endif %} + selects.with_or({ # {{ targeted_dep.target }} ( -{%- for condition in targeted_dep.conditions %} - "{{ condition }}", +{%- for platform in targeted_dep.platform_targets %} + "@rules_rust//rust/platform:{{ platform }}", {%- endfor %} ): [ {%- for dependency in targeted_dep.deps.data_dependencies %} diff --git a/crate_universe/src/templates/partials/targeted_dependencies.template b/crate_universe/src/templates/partials/targeted_dependencies.template index aae7226eff..d1d9da354c 100644 --- a/crate_universe/src/templates/partials/targeted_dependencies.template +++ b/crate_universe/src/templates/partials/targeted_dependencies.template @@ -4,8 +4,8 @@ {%- endif %} + selects.with_or({ # {{ targeted_dep.target }} ( -{%- for condition in targeted_dep.conditions %} - "{{ condition }}", +{%- for platform in targeted_dep.platform_targets %} + "@rules_rust//rust/platform:{{ platform }}", {%- endfor %} ): [ {%- for dependency in targeted_dep.deps.dependencies %} diff --git a/crate_universe/src/testing.rs b/crate_universe/src/testing.rs index 261d6a6895..3708d6db12 100644 --- a/crate_universe/src/testing.rs +++ b/crate_universe/src/testing.rs @@ -2,16 +2,23 @@ use cargo_raze::context::{ BuildableTarget, CrateContext, CrateDependencyContext, GitRepo, LicenseData, SourceDetails, }; use semver::Version; +use std::collections::{BTreeMap, BTreeSet}; pub(crate) fn lazy_static_crate_context(git: bool) -> CrateContext { - let git_data = if git { - Some(GitRepo { - remote: String::from("https://github.com/rust-lang-nursery/lazy-static.rs.git"), - commit: String::from("421669662b35fcb455f2902daed2e20bbbba79b6"), - path_to_crate_root: None, - }) + let source_details = if git { + SourceDetails { + git_data: Some(GitRepo { + remote: String::from("https://github.com/rust-lang-nursery/lazy-static.rs.git"), + commit: String::from("421669662b35fcb455f2902daed2e20bbbba79b6"), + path_to_crate_root: None, + }), + download_url: None, + } } else { - None + SourceDetails { + git_data: None, + download_url: Some("https://registry.url/".parse().unwrap()), + } }; CrateContext { @@ -21,20 +28,19 @@ pub(crate) fn lazy_static_crate_context(git: bool) -> CrateContext { raze_settings: Default::default(), canonical_additional_build_file: None, default_deps: CrateDependencyContext { - dependencies: vec![], - proc_macro_dependencies: vec![], - data_dependencies: vec![], - build_dependencies: vec![], - build_proc_macro_dependencies: vec![], - build_data_dependencies: vec![], - dev_dependencies: vec![], - aliased_dependencies: vec![], + dependencies: BTreeSet::new(), + proc_macro_dependencies: BTreeSet::new(), + data_dependencies: BTreeSet::new(), + build_dependencies: BTreeSet::new(), + build_proc_macro_dependencies: BTreeSet::new(), + build_data_dependencies: BTreeSet::new(), + dev_dependencies: BTreeSet::new(), + aliased_dependencies: BTreeMap::new(), }, - source_details: SourceDetails { git_data }, + source_details, sha256: Some(String::from( "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646", )), - registry_url: String::from("https://registry.url/"), expected_build_path: String::from("UNUSED"), lib_target_name: Some(String::from("UNUSED")), license: LicenseData::default(), @@ -59,14 +65,20 @@ pub(crate) fn lazy_static_crate_context(git: bool) -> CrateContext { } pub(crate) fn maplit_crate_context(git: bool) -> CrateContext { - let git_data = if git { - Some(GitRepo { - remote: String::from("https://github.com/bluss/maplit.git"), - commit: String::from("04936f703da907bc4ffdaced121e4cfd5ecbaec6"), - path_to_crate_root: None, - }) + let source_details = if git { + SourceDetails { + git_data: Some(GitRepo { + remote: String::from("https://github.com/bluss/maplit.git"), + commit: String::from("04936f703da907bc4ffdaced121e4cfd5ecbaec6"), + path_to_crate_root: None, + }), + download_url: None, + } } else { - None + SourceDetails { + git_data: None, + download_url: Some("https://registry.url/".parse().unwrap()), + } }; CrateContext { @@ -76,20 +88,19 @@ pub(crate) fn maplit_crate_context(git: bool) -> CrateContext { raze_settings: Default::default(), canonical_additional_build_file: None, default_deps: CrateDependencyContext { - dependencies: vec![], - proc_macro_dependencies: vec![], - data_dependencies: vec![], - build_dependencies: vec![], - build_proc_macro_dependencies: vec![], - build_data_dependencies: vec![], - dev_dependencies: vec![], - aliased_dependencies: vec![], + dependencies: BTreeSet::new(), + proc_macro_dependencies: BTreeSet::new(), + data_dependencies: BTreeSet::new(), + build_dependencies: BTreeSet::new(), + build_proc_macro_dependencies: BTreeSet::new(), + build_data_dependencies: BTreeSet::new(), + dev_dependencies: BTreeSet::new(), + aliased_dependencies: BTreeMap::new(), }, - source_details: SourceDetails { git_data }, + source_details, sha256: Some(String::from( "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d", )), - registry_url: String::from("https://registry.url/"), expected_build_path: String::from("UNUSED"), lib_target_name: Some(String::from("UNUSED")), license: LicenseData::default(), diff --git a/crate_universe/tests/parser.rs b/crate_universe/tests/parser.rs index a0d2724d40..20e826feb9 100644 --- a/crate_universe/tests/parser.rs +++ b/crate_universe/tests/parser.rs @@ -3,7 +3,6 @@ use crate_universe_resolver::parser::merge_cargo_tomls; use crate_universe_resolver::NamedTempFile; use indoc::indoc; use maplit::{btreemap, btreeset}; -use semver::VersionReq; use spectral::prelude::*; use std::collections::{BTreeMap, BTreeSet}; @@ -37,10 +36,10 @@ fn parses_one_cargo_toml() { let cargo_tomls = btreemap! { "//some:Cargo.toml" => cargo_toml }; let want_deps = indoc! {r#" - lazy_static = { version = ">=1.0.0, <2.0.0", default-features = true, features = [] } - maplit = { version = ">=1.0.1, <2.0.0", default-features = true, features = [] } - serde = { version = ">=1.0.0, <2.0.0", default-features = false, features = ["derive"] } - structopt = { version = ">=0.3.0, <0.4.0", default-features = true, features = [] } + lazy_static = { version = "^1", default-features = true, features = [] } + maplit = { version = "^1.0.1", default-features = true, features = [] } + serde = { version = "^1", default-features = false, features = ["derive"] } + structopt = { version = "^0.3", default-features = true, features = [] } "#}; let want_labels_to_deps = btreemap! { @@ -79,14 +78,14 @@ fn parses_one_cargo_toml() { assert_eq!( value.as_table().unwrap().get("build-dependencies").unwrap(), - &r#"syn = { version = ">=1.0.0, <2.0.0", default-features = true, features = [] }"# + &r#"syn = { version = "^1", default-features = true, features = [] }"# .parse::() .unwrap(), ); assert_eq!( value.as_table().unwrap().get("dev-dependencies").unwrap(), - &r#"futures = { version = ">=0.1.0, <0.2.0", default-features = true, features = [] }"# + &r#"futures = { version = "^0.1", default-features = true, features = [] }"# .parse::() .unwrap(), ); @@ -122,10 +121,10 @@ fn merges_two_cargo_tomls() { }; let want_deps = indoc! {r#" - lazy_static = { version = ">=1.0.0, <2.0.0, >=1.1.0, <1.2.0", default-features = true, features = [] } - maplit = { version = ">=1.0.1, <2.0.0", default-features = true, features = [] } - num_enum = { version = ">=0.5.0, <0.6.0", default-features = true, features = ["complex-expressions"] } - serde = { version = ">=1.0.0, <2.0.0, >=1.0.57, <2.0.0", default-features = true, features = ["derive", "rc"] } + lazy_static = { version = "^1, ^1.1", default-features = true, features = [] } + maplit = { version = "^1.0.1", default-features = true, features = [] } + num_enum = { version = "^0.5", default-features = true, features = ["complex-expressions"] } + serde = { version = "^1, ^1.0.57", default-features = true, features = ["derive", "rc"] } "#}; let want_labels_to_deps = btreemap! { @@ -214,12 +213,12 @@ fn fails_to_merge_different_git() { fn can_have_just_packages() { let packages = vec![Package { name: String::from("serde"), - semver: VersionReq::parse("^1").unwrap(), + semver: String::from("^1"), features: vec![String::from("derive")], }]; let want_deps = indoc! {r#" - serde = { version = ">=1.0.0, <2.0.0", default-features = true, features = ["derive"] } + serde = { version = "^1", default-features = true, features = ["derive"] } "#}; let want_labels_to_deps = BTreeMap::new(); @@ -243,13 +242,13 @@ fn can_add_packages() { let packages = vec![Package { name: String::from("serde"), - semver: VersionReq::parse("^1.0.57").unwrap(), + semver: String::from("^1.0.57"), features: vec![String::from("derive")], }]; let want_deps = indoc! {r#" - lazy_static = { version = ">=1.0.0, <2.0.0", default-features = true, features = [] } - serde = { version = ">=1.0.57, <2.0.0", default-features = true, features = ["derive"] } + lazy_static = { version = "^1", default-features = true, features = [] } + serde = { version = "^1.0.57", default-features = true, features = ["derive"] } "#}; let want_labels_to_deps = btreemap! { @@ -277,7 +276,7 @@ fn package_conflicts_are_errors() { let packages = vec![Package { name: String::from("lazy_static"), - semver: VersionReq::parse("^1").unwrap(), + semver: String::from("^1"), features: vec![], }]; diff --git a/crate_universe/third_party/openssl/BUILD.bazel b/crate_universe/third_party/openssl/BUILD.bazel new file mode 100644 index 0000000000..ea1a6b93c3 --- /dev/null +++ b/crate_universe/third_party/openssl/BUILD.bazel @@ -0,0 +1,11 @@ +# The code here was picked up from the `rules_foreign_cc` openssl example +# https://github.com/bazelbuild/rules_foreign_cc/tree/0.5.1/examples/third_party/openssl + +exports_files( + [ + "BUILD.nasm.bazel", + "BUILD.openssl.bazel", + "BUILD.perl.bazel", + ], + visibility = ["//visibility:public"], +) diff --git a/crate_universe/third_party/openssl/BUILD.nasm.bazel b/crate_universe/third_party/openssl/BUILD.nasm.bazel new file mode 100644 index 0000000000..05d571d417 --- /dev/null +++ b/crate_universe/third_party/openssl/BUILD.nasm.bazel @@ -0,0 +1,17 @@ +# The code here was picked up from the `rules_foreign_cc` openssl example +# https://github.com/bazelbuild/rules_foreign_cc/tree/0.5.1/examples/third_party/openssl + +load("@bazel_skylib//rules:select_file.bzl", "select_file") + +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "all_srcs", + srcs = glob(["**"]), +) + +select_file( + name = "nasm", + srcs = ":all_srcs", + subpath = "nasm.exe", +) diff --git a/crate_universe/third_party/openssl/BUILD.openssl.bazel b/crate_universe/third_party/openssl/BUILD.openssl.bazel new file mode 100644 index 0000000000..865fe224d2 --- /dev/null +++ b/crate_universe/third_party/openssl/BUILD.openssl.bazel @@ -0,0 +1,100 @@ +# The code here was picked up from the `rules_foreign_cc` openssl example +# https://github.com/bazelbuild/rules_foreign_cc/tree/0.5.1/examples/third_party/openssl + +load("@rules_foreign_cc//foreign_cc:defs.bzl", "configure_make", "configure_make_variant") + +# Read https://wiki.openssl.org/index.php/Compilation_and_Installation + +filegroup( + name = "all_srcs", + srcs = glob(["**"]), +) + +CONFIGURE_OPTIONS = [ + "no-comp", + "no-idea", + "no-weak-ssl-ciphers", + "no-shared", +] + +LIB_NAME = "openssl" + +MAKE_TARGETS = [ + "build_libs", + "install_dev", +] + +config_setting( + name = "msvc_compiler", + flag_values = { + "@bazel_tools//tools/cpp:compiler": "msvc-cl", + }, + visibility = ["//visibility:public"], +) + +alias( + name = "openssl", + actual = select({ + ":msvc_compiler": "openssl_msvc", + "//conditions:default": "openssl_default", + }), + visibility = ["//visibility:public"], +) + +configure_make_variant( + name = "openssl_msvc", + build_data = [ + "@nasm_windows//:nasm", + "@perl_windows//:perl", + ], + configure_command = "Configure", + configure_in_place = True, + configure_options = CONFIGURE_OPTIONS + [ + "VC-WIN64A", + # Unset Microsoft Assembler (MASM) flags set by built-in MSVC toolchain, + # as NASM is unsed to build OpenSSL rather than MASM + "ASFLAGS=\" \"", + ], + configure_prefix = "$PERL", + env = { + # The Zi flag must be set otherwise OpenSSL fails to build due to missing .pdb files + "CFLAGS": "-Zi", + "PATH": "$(dirname $(execpath @nasm_windows//:nasm)):$PATH", + "PERL": "$(execpath @perl_windows//:perl)", + }, + lib_name = LIB_NAME, + lib_source = ":all_srcs", + out_static_libs = [ + "libssl.lib", + "libcrypto.lib", + ], + targets = MAKE_TARGETS, + toolchain = "@rules_foreign_cc//toolchains:preinstalled_nmake_toolchain", +) + +configure_make( + name = "openssl_default", + configure_command = "config", + configure_in_place = True, + configure_options = CONFIGURE_OPTIONS, + env = select({ + "@platforms//os:macos": {"AR": ""}, + "//conditions:default": {}, + }), + lib_name = LIB_NAME, + lib_source = ":all_srcs", + # Note that for Linux builds, libssl must come before libcrypto on the linker command-line. + # As such, libssl must be listed before libcrypto + out_static_libs = [ + "libssl.a", + "libcrypto.a", + ], + targets = MAKE_TARGETS, +) + +filegroup( + name = "gen_dir", + srcs = [":openssl"], + output_group = "gen_dir", + visibility = ["//visibility:public"], +) diff --git a/crate_universe/third_party/openssl/BUILD.perl.bazel b/crate_universe/third_party/openssl/BUILD.perl.bazel new file mode 100644 index 0000000000..9c5d9c1111 --- /dev/null +++ b/crate_universe/third_party/openssl/BUILD.perl.bazel @@ -0,0 +1,17 @@ +# The code here was picked up from the `rules_foreign_cc` openssl example +# https://github.com/bazelbuild/rules_foreign_cc/tree/0.5.1/examples/third_party/openssl + +load("@bazel_skylib//rules:select_file.bzl", "select_file") + +package(default_visibility = ["//visibility:public"]) + +filegroup( + name = "all_srcs", + srcs = glob(["**"]), +) + +select_file( + name = "perl", + srcs = ":all_srcs", + subpath = "perl/bin/perl.exe", +) diff --git a/crate_universe/third_party/openssl/openssl_repositories.bzl b/crate_universe/third_party/openssl/openssl_repositories.bzl new file mode 100644 index 0000000000..156ea886e4 --- /dev/null +++ b/crate_universe/third_party/openssl/openssl_repositories.bzl @@ -0,0 +1,45 @@ +"""A module defining the third party dependency OpenSSL + +The code here was picked up from the `rules_foreign_cc` openssl example +https://github.com/bazelbuild/rules_foreign_cc/tree/0.5.1/examples/third_party/openssl +""" + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe") + +def openssl_repositories(): + maybe( + http_archive, + name = "openssl", + build_file = Label("//crate_universe/third_party/openssl:BUILD.openssl.bazel"), + sha256 = "892a0875b9872acd04a9fde79b1f943075d5ea162415de3047c327df33fbaee5", + strip_prefix = "openssl-1.1.1k", + urls = [ + "https://mirror.bazel.build/www.openssl.org/source/openssl-1.1.1k.tar.gz", + "https://www.openssl.org/source/openssl-1.1.1k.tar.gz", + "https://github.com/openssl/openssl/archive/OpenSSL_1_1_1k.tar.gz", + ], + ) + + maybe( + http_archive, + name = "nasm_windows", + build_file = Label("//crate_universe/third_party/openssl:BUILD.nasm.bazel"), + sha256 = "f5c93c146f52b4f1664fa3ce6579f961a910e869ab0dae431bd871bdd2584ef2", + strip_prefix = "nasm-2.15.05", + urls = [ + "https://mirror.bazel.build/www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/nasm-2.15.05-win64.zip", + "https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/nasm-2.15.05-win64.zip", + ], + ) + + maybe( + http_archive, + name = "perl_windows", + build_file = Label("//crate_universe/third_party/openssl:BUILD.perl.bazel"), + sha256 = "aeb973da474f14210d3e1a1f942dcf779e2ae7e71e4c535e6c53ebabe632cc98", + urls = [ + "https://mirror.bazel.build/strawberryperl.com/download/5.32.1.1/strawberry-perl-5.32.1.1-64bit.zip", + "https://strawberryperl.com/download/5.32.1.1/strawberry-perl-5.32.1.1-64bit.zip", + ], + )