patch-crates.sh 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  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. solana-frozen-abi
  28. solana-frozen-abi-macro
  29. agave-geyser-plugin-interface
  30. solana-geyser-plugin-manager
  31. solana-gossip
  32. solana-lattice-hash
  33. solana-ledger
  34. solana-log-collector
  35. solana-logger
  36. solana-measure
  37. solana-merkle-tree
  38. solana-metrics
  39. solana-net-utils
  40. solana-perf
  41. solana-poh
  42. solana-program-runtime
  43. solana-program-test
  44. solana-address-lookup-table-program
  45. solana-bpf-loader-program
  46. solana-compute-budget-program
  47. solana-config-program
  48. solana-stake-program
  49. solana-system-program
  50. solana-vote-program
  51. solana-zk-elgamal-proof-program
  52. solana-zk-token-proof-program
  53. solana-pubsub-client
  54. solana-quic-client
  55. solana-rayon-threadlimit
  56. solana-remote-wallet
  57. solana-rpc
  58. solana-rpc-client
  59. solana-rpc-client-api
  60. solana-rpc-client-nonce-utils
  61. solana-runtime
  62. solana-runtime-transaction
  63. solana-sdk
  64. solana-sdk-macro
  65. solana-program
  66. solana-send-transaction-service
  67. solana-storage-bigtable
  68. solana-storage-proto
  69. solana-streamer
  70. solana-svm-rent-collector
  71. solana-svm-transaction
  72. solana-sysvar-id
  73. solana-test-validator
  74. solana-thin-client
  75. solana-tpu-client
  76. solana-transaction-status
  77. solana-transaction-status-client-types
  78. solana-udp-client
  79. solana-version
  80. solana-zk-token-sdk
  81. solana-zk-sdk
  82. solana-bn254
  83. solana-curve25519
  84. solana-secp256k1-recover
  85. solana-account
  86. solana-account-info
  87. solana-atomic-u64
  88. solana-bincode
  89. solana-borsh
  90. solana-clock
  91. solana-cpi
  92. solana-decode-error
  93. solana-define-syscall
  94. solana-derivation-path
  95. solana-epoch-schedule
  96. solana-feature-set
  97. solana-fee-calculator
  98. solana-hash
  99. solana-inflation
  100. solana-instruction
  101. solana-last-restart-slot
  102. solana-msg
  103. solana-native-token
  104. solana-packet
  105. solana-precompile-error
  106. solana-program-entrypoint
  107. solana-program-error
  108. solana-program-memory
  109. solana-program-option
  110. solana-program-pack
  111. solana-pubkey
  112. solana-rent
  113. solana-sanitize
  114. solana-serde-varint
  115. solana-serialize-utils
  116. solana-sha256-hasher
  117. solana-short-vec
  118. solana-signature
  119. solana-slot-hashes
  120. solana-stable-layout
  121. solana-timings
  122. solana-transaction-error
  123. )
  124. set -x
  125. for crate in "${crates[@]}"; do
  126. sed -E -i'' -e "s:(${crate} = \")([=<>]*)[0-9.]+([^\"]*)\".*:\1\2${solana_ver}\3\":" "${tomls[@]}"
  127. sed -E -i'' -e "s:(${crate} = \{ version = \")([=<>]*)[0-9.]+([^\"]*)(\".*):\1\2${solana_ver}\3\4:" "${tomls[@]}"
  128. done
  129. }
  130. patch_crates_io_solana() {
  131. declare Cargo_toml="$1"
  132. declare solana_dir="$2"
  133. cat >> "$Cargo_toml" <<EOF
  134. [patch.crates-io]
  135. EOF
  136. patch_crates_io_solana_no_header "$Cargo_toml" "$solana_dir"
  137. }
  138. patch_crates_io_solana_no_header() {
  139. declare Cargo_toml="$1"
  140. declare solana_dir="$2"
  141. crates_map=()
  142. crates_map+=("solana-account-decoder account-decoder")
  143. crates_map+=("solana-account-decoder-client-types account-decoder-client-types")
  144. crates_map+=("solana-banks-client banks-client")
  145. crates_map+=("solana-banks-interface banks-interface")
  146. crates_map+=("solana-banks-server banks-server")
  147. crates_map+=("solana-bloom bloom")
  148. crates_map+=("solana-bucket-map bucket_map")
  149. crates_map+=("solana-builtins-default-costs builtins-default-costs")
  150. crates_map+=("solana-clap-utils clap-utils")
  151. crates_map+=("solana-clap-v3-utils clap-v3-utils")
  152. crates_map+=("solana-cli-config cli-config")
  153. crates_map+=("solana-cli-output cli-output")
  154. crates_map+=("solana-client client")
  155. crates_map+=("solana-compute-budget compute-budget")
  156. crates_map+=("solana-connection-cache connection-cache")
  157. crates_map+=("solana-core core")
  158. crates_map+=("solana-entry entry")
  159. crates_map+=("solana-faucet faucet")
  160. crates_map+=("solana-fee fee")
  161. crates_map+=("agave-geyser-plugin-interface geyser-plugin-interface")
  162. crates_map+=("solana-geyser-plugin-manager geyser-plugin-manager")
  163. crates_map+=("solana-gossip gossip")
  164. crates_map+=("solana-lattice-hash lattice-hash")
  165. crates_map+=("solana-ledger ledger")
  166. crates_map+=("solana-log-collector log-collector")
  167. crates_map+=("solana-measure measure")
  168. crates_map+=("solana-merkle-tree merkle-tree")
  169. crates_map+=("solana-metrics metrics")
  170. crates_map+=("solana-net-utils net-utils")
  171. crates_map+=("solana-perf perf")
  172. crates_map+=("solana-poh poh")
  173. crates_map+=("solana-program-runtime program-runtime")
  174. crates_map+=("solana-program-test program-test")
  175. crates_map+=("solana-address-lookup-table-program programs/address-lookup-table")
  176. crates_map+=("solana-bpf-loader-program programs/bpf_loader")
  177. crates_map+=("solana-compute-budget-program programs/compute-budget")
  178. crates_map+=("solana-config-program programs/config")
  179. crates_map+=("solana-stake-program programs/stake")
  180. crates_map+=("solana-system-program programs/system")
  181. crates_map+=("solana-vote-program programs/vote")
  182. crates_map+=("solana-zk-elgamal-proof-program programs/zk-elgamal-proof")
  183. crates_map+=("solana-zk-token-proof-program programs/zk-token-proof")
  184. crates_map+=("solana-pubsub-client pubsub-client")
  185. crates_map+=("solana-quic-client quic-client")
  186. crates_map+=("solana-rayon-threadlimit rayon-threadlimit")
  187. crates_map+=("solana-remote-wallet remote-wallet")
  188. crates_map+=("solana-rpc rpc")
  189. crates_map+=("solana-rpc-client rpc-client")
  190. crates_map+=("solana-rpc-client-api rpc-client-api")
  191. crates_map+=("solana-rpc-client-nonce-utils rpc-client-nonce-utils")
  192. crates_map+=("solana-runtime runtime")
  193. crates_map+=("solana-runtime-transaction runtime-transaction")
  194. crates_map+=("solana-sdk sdk/sdk")
  195. crates_map+=("solana-sdk-macro sdk/macro")
  196. crates_map+=("solana-program sdk/program")
  197. crates_map+=("solana-send-transaction-service send-transaction-service")
  198. crates_map+=("solana-storage-bigtable storage-bigtable")
  199. crates_map+=("solana-storage-proto storage-proto")
  200. crates_map+=("solana-streamer streamer")
  201. crates_map+=("solana-svm-rent-collector svm-rent-collector")
  202. crates_map+=("solana-svm-transaction svm-transaction")
  203. crates_map+=("solana-sysvar-id sdk/sysvar-id")
  204. crates_map+=("solana-test-validator test-validator")
  205. crates_map+=("solana-thin-client thin-client")
  206. crates_map+=("solana-tpu-client tpu-client")
  207. crates_map+=("solana-transaction-status transaction-status")
  208. crates_map+=("solana-transaction-status-client-types transaction-status-client-types")
  209. crates_map+=("solana-udp-client udp-client")
  210. crates_map+=("solana-version version")
  211. crates_map+=("solana-zk-token-sdk zk-token-sdk")
  212. crates_map+=("solana-zk-sdk zk-sdk")
  213. crates_map+=("solana-bn254 curves/bn254")
  214. crates_map+=("solana-curve25519 curves/curve25519")
  215. crates_map+=("solana-secp256k1-recover curves/secp256k1-recover")
  216. crates_map+=("solana-account sdk/account")
  217. crates_map+=("solana-account-info sdk/account-info")
  218. crates_map+=("solana-atomic-u64 sdk/atomic-u64")
  219. crates_map+=("solana-bincode sdk/bincode")
  220. crates_map+=("solana-borsh sdk/borsh")
  221. crates_map+=("solana-clock sdk/clock")
  222. crates_map+=("solana-cpi sdk/cpi")
  223. crates_map+=("solana-decode-error sdk/decode-error")
  224. crates_map+=("solana-define-syscall sdk/define-syscall")
  225. crates_map+=("solana-derivation-path sdk/derivation-path")
  226. crates_map+=("solana-epoch-schedule sdk/epoch-schedule")
  227. crates_map+=("solana-feature-set sdk/feature-set")
  228. crates_map+=("solana-fee-calculator sdk/fee-calculator")
  229. crates_map+=("solana-frozen-abi sdk/frozen-abi")
  230. crates_map+=("solana-frozen-abi-macro sdk/frozen-abi/macro")
  231. crates_map+=("solana-hash sdk/hash")
  232. crates_map+=("solana-inflation sdk/inflation")
  233. crates_map+=("solana-instruction sdk/instruction")
  234. crates_map+=("solana-last-restart-slot sdk/last-restart-slot")
  235. crates_map+=("solana-logger sdk/logger")
  236. crates_map+=("solana-msg sdk/msg")
  237. crates_map+=("solana-native-token sdk/native-token")
  238. crates_map+=("solana-packet sdk/packet")
  239. crates_map+=("solana-precompile-error sdk/precompile-error")
  240. crates_map+=("solana-program-entrypoint sdk/program-entrypoint")
  241. crates_map+=("solana-program-error sdk/program-error")
  242. crates_map+=("solana-program-memory sdk/program-memory")
  243. crates_map+=("solana-program-option sdk/program-option")
  244. crates_map+=("solana-program-pack sdk/program-pack")
  245. crates_map+=("solana-pubkey sdk/pubkey")
  246. crates_map+=("solana-rent sdk/rent")
  247. crates_map+=("solana-sanitize sdk/sanitize")
  248. crates_map+=("solana-serde-varint sdk/serde-varint")
  249. crates_map+=("solana-serialize-utils sdk/serialize-utils")
  250. crates_map+=("solana-sha256-hasher sdk/sha256-hasher")
  251. crates_map+=("solana-short-vec sdk/short-vec")
  252. crates_map+=("solana-signature sdk/signature")
  253. crates_map+=("solana-slot-hashes sdk/slot-hashes")
  254. crates_map+=("solana-stable-layout sdk/stable-layout")
  255. crates_map+=("solana-timings sdk/timings")
  256. crates_map+=("solana-transaction-error sdk/transaction-error")
  257. patch_crates=()
  258. for map_entry in "${crates_map[@]}"; do
  259. read -r crate_name crate_path <<<"$map_entry"
  260. full_path="$solana_dir/$crate_path"
  261. if [[ -r "$full_path/Cargo.toml" ]]; then
  262. patch_crates+=("$crate_name = { path = \"$full_path\" }")
  263. fi
  264. done
  265. echo "Patching in $solana_ver from $solana_dir"
  266. echo
  267. if grep -q "# The following entries are auto-generated by $0" "$Cargo_toml"; then
  268. echo "$Cargo_toml is already patched"
  269. else
  270. if ! grep -q '\[patch.crates-io\]' "$Cargo_toml"; then
  271. echo "[patch.crates-io]" >> "$Cargo_toml"
  272. fi
  273. cat >> "$Cargo_toml" <<PATCH
  274. # The following entries are auto-generated by $0
  275. $(printf "%s\n" "${patch_crates[@]}")
  276. PATCH
  277. fi
  278. }