patch-crates.sh 6.8 KB

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