patch-crates.sh 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. # source this file
  2. update_solana_dependencies() {
  3. declare project_root="$1"
  4. declare solana_ver="$2"
  5. declare tomls=()
  6. while IFS='' read -r line; do tomls+=("$line"); done < <(find "$project_root" -name Cargo.toml)
  7. crates=(
  8. solana-account-decoder
  9. solana-account-decoder-client-types
  10. solana-banks-client
  11. solana-banks-interface
  12. solana-banks-server
  13. solana-bloom
  14. solana-bucket-map
  15. solana-builtins-default-costs
  16. solana-clap-utils
  17. solana-clap-v3-utils
  18. solana-cli-config
  19. solana-cli-output
  20. solana-client
  21. solana-compute-budget
  22. solana-connection-cache
  23. solana-core
  24. solana-entry
  25. solana-faucet
  26. solana-fee
  27. agave-geyser-plugin-interface
  28. solana-geyser-plugin-manager
  29. solana-gossip
  30. solana-lattice-hash
  31. solana-ledger
  32. solana-log-collector
  33. solana-measure
  34. solana-merkle-tree
  35. solana-metrics
  36. solana-net-utils
  37. solana-perf
  38. solana-poh
  39. solana-program-runtime
  40. solana-program-test
  41. solana-bpf-loader-program
  42. solana-compute-budget-program
  43. solana-stake-program
  44. solana-system-program
  45. solana-vote-program
  46. solana-zk-elgamal-proof-program
  47. solana-zk-token-proof-program
  48. solana-pubsub-client
  49. solana-quic-client
  50. solana-rayon-threadlimit
  51. solana-remote-wallet
  52. solana-rpc
  53. solana-rpc-client
  54. solana-rpc-client-api
  55. solana-rpc-client-nonce-utils
  56. solana-runtime
  57. solana-runtime-transaction
  58. solana-send-transaction-service
  59. solana-storage-bigtable
  60. solana-storage-proto
  61. solana-streamer
  62. solana-svm-rent-collector
  63. solana-svm-transaction
  64. solana-test-validator
  65. solana-thin-client
  66. solana-tpu-client
  67. solana-transaction-status
  68. solana-transaction-status-client-types
  69. solana-udp-client
  70. solana-version
  71. solana-zk-token-sdk
  72. solana-zk-sdk
  73. solana-curve25519
  74. )
  75. set -x
  76. for crate in "${crates[@]}"; do
  77. sed -E -i'' -e "s:(${crate} = \")([=<>]*)[0-9.]+([^\"]*)\".*:\1\2${solana_ver}\3\":" "${tomls[@]}"
  78. sed -E -i'' -e "s:(${crate} = \{ version = \")([=<>]*)[0-9.]+([^\"]*)(\".*):\1\2${solana_ver}\3\4:" "${tomls[@]}"
  79. done
  80. }
  81. patch_crates_io_solana() {
  82. declare Cargo_toml="$1"
  83. declare solana_dir="$2"
  84. cat >> "$Cargo_toml" <<EOF
  85. [patch.crates-io]
  86. EOF
  87. patch_crates_io_solana_no_header "$Cargo_toml" "$solana_dir"
  88. }
  89. patch_crates_io_solana_no_header() {
  90. declare Cargo_toml="$1"
  91. declare solana_dir="$2"
  92. crates_map=()
  93. crates_map+=("solana-account-decoder account-decoder")
  94. crates_map+=("solana-account-decoder-client-types account-decoder-client-types")
  95. crates_map+=("solana-banks-client banks-client")
  96. crates_map+=("solana-banks-interface banks-interface")
  97. crates_map+=("solana-banks-server banks-server")
  98. crates_map+=("solana-bloom bloom")
  99. crates_map+=("solana-bucket-map bucket_map")
  100. crates_map+=("solana-builtins-default-costs builtins-default-costs")
  101. crates_map+=("solana-clap-utils clap-utils")
  102. crates_map+=("solana-clap-v3-utils clap-v3-utils")
  103. crates_map+=("solana-cli-config cli-config")
  104. crates_map+=("solana-cli-output cli-output")
  105. crates_map+=("solana-client client")
  106. crates_map+=("solana-compute-budget compute-budget")
  107. crates_map+=("solana-connection-cache connection-cache")
  108. crates_map+=("solana-core core")
  109. crates_map+=("solana-entry entry")
  110. crates_map+=("solana-faucet faucet")
  111. crates_map+=("solana-fee fee")
  112. crates_map+=("agave-geyser-plugin-interface geyser-plugin-interface")
  113. crates_map+=("solana-geyser-plugin-manager geyser-plugin-manager")
  114. crates_map+=("solana-gossip gossip")
  115. crates_map+=("solana-lattice-hash lattice-hash")
  116. crates_map+=("solana-ledger ledger")
  117. crates_map+=("solana-log-collector log-collector")
  118. crates_map+=("solana-measure measure")
  119. crates_map+=("solana-merkle-tree merkle-tree")
  120. crates_map+=("solana-metrics metrics")
  121. crates_map+=("solana-net-utils net-utils")
  122. crates_map+=("solana-perf perf")
  123. crates_map+=("solana-poh poh")
  124. crates_map+=("solana-program-runtime program-runtime")
  125. crates_map+=("solana-program-test program-test")
  126. crates_map+=("solana-bpf-loader-program programs/bpf_loader")
  127. crates_map+=("solana-compute-budget-program programs/compute-budget")
  128. crates_map+=("solana-stake-program programs/stake")
  129. crates_map+=("solana-system-program programs/system")
  130. crates_map+=("solana-vote-program programs/vote")
  131. crates_map+=("solana-zk-elgamal-proof-program programs/zk-elgamal-proof")
  132. crates_map+=("solana-zk-token-proof-program programs/zk-token-proof")
  133. crates_map+=("solana-pubsub-client pubsub-client")
  134. crates_map+=("solana-quic-client quic-client")
  135. crates_map+=("solana-rayon-threadlimit rayon-threadlimit")
  136. crates_map+=("solana-remote-wallet remote-wallet")
  137. crates_map+=("solana-rpc rpc")
  138. crates_map+=("solana-rpc-client rpc-client")
  139. crates_map+=("solana-rpc-client-api rpc-client-api")
  140. crates_map+=("solana-rpc-client-nonce-utils rpc-client-nonce-utils")
  141. crates_map+=("solana-runtime runtime")
  142. crates_map+=("solana-runtime-transaction runtime-transaction")
  143. crates_map+=("solana-send-transaction-service send-transaction-service")
  144. crates_map+=("solana-storage-bigtable storage-bigtable")
  145. crates_map+=("solana-storage-proto storage-proto")
  146. crates_map+=("solana-streamer streamer")
  147. crates_map+=("solana-svm-rent-collector svm-rent-collector")
  148. crates_map+=("solana-svm-transaction svm-transaction")
  149. crates_map+=("solana-test-validator test-validator")
  150. crates_map+=("solana-thin-client thin-client")
  151. crates_map+=("solana-tpu-client tpu-client")
  152. crates_map+=("solana-transaction-status transaction-status")
  153. crates_map+=("solana-transaction-status-client-types transaction-status-client-types")
  154. crates_map+=("solana-udp-client udp-client")
  155. crates_map+=("solana-version version")
  156. crates_map+=("solana-zk-token-sdk zk-token-sdk")
  157. crates_map+=("solana-zk-sdk zk-sdk")
  158. crates_map+=("solana-bn254 curves/bn254")
  159. crates_map+=("solana-curve25519 curves/curve25519")
  160. crates_map+=("solana-secp256k1-recover curves/secp256k1-recover")
  161. patch_crates=()
  162. for map_entry in "${crates_map[@]}"; do
  163. read -r crate_name crate_path <<<"$map_entry"
  164. full_path="$solana_dir/$crate_path"
  165. if [[ -r "$full_path/Cargo.toml" ]]; then
  166. patch_crates+=("$crate_name = { path = \"$full_path\" }")
  167. fi
  168. done
  169. echo "Patching in $solana_ver from $solana_dir"
  170. echo
  171. if grep -q "# The following entries are auto-generated by $0" "$Cargo_toml"; then
  172. echo "$Cargo_toml is already patched"
  173. else
  174. if ! grep -q '\[patch.crates-io\]' "$Cargo_toml"; then
  175. echo "[patch.crates-io]" >> "$Cargo_toml"
  176. fi
  177. cat >> "$Cargo_toml" <<PATCH
  178. # The following entries are auto-generated by $0
  179. $(printf "%s\n" "${patch_crates[@]}")
  180. PATCH
  181. fi
  182. }