patch-spl-crates-for-anchor.sh 5.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. spl_associated_token_account_version=
  2. spl_memo_version=
  3. spl_pod_version=
  4. spl_token_version=
  5. spl_token_2022_version=
  6. spl_token_group_interface_version=
  7. spl_token_metadata_interface_version=
  8. spl_tlv_account_resolution_version=
  9. spl_transfer_hook_interface_version=
  10. spl_type_length_value_version=
  11. get_spl_versions() {
  12. declare spl_dir="$1"
  13. spl_associated_token_account_version=$(readCargoVariable version "$spl_dir/associated-token-account/program/Cargo.toml")
  14. spl_memo_version=$(readCargoVariable version "$spl_dir/memo/program/Cargo.toml")
  15. spl_pod_version=$(readCargoVariable version "$spl_dir/libraries/pod/Cargo.toml")
  16. spl_token_version=$(readCargoVariable version "$spl_dir/token/program/Cargo.toml")
  17. spl_token_2022_version=$(readCargoVariable version "$spl_dir/token/program-2022/Cargo.toml"| head -c1) # only use the major version for convenience
  18. spl_token_group_interface_version=$(readCargoVariable version "$spl_dir/token-group/interface/Cargo.toml")
  19. spl_token_metadata_interface_version=$(readCargoVariable version "$spl_dir/token-metadata/interface/Cargo.toml")
  20. spl_tlv_account_resolution_version=$(readCargoVariable version "$spl_dir/libraries/tlv-account-resolution/Cargo.toml")
  21. spl_transfer_hook_interface_version=$(readCargoVariable version "$spl_dir/token/transfer-hook/interface/Cargo.toml")
  22. spl_type_length_value_version=$(readCargoVariable version "$spl_dir/libraries/type-length-value/Cargo.toml")
  23. }
  24. patch_spl_crates() {
  25. declare project_root="$1"
  26. declare Cargo_toml="$2"
  27. declare spl_dir="$3"
  28. update_spl_dependencies "$project_root"
  29. patch_crates_io "$Cargo_toml" "$spl_dir"
  30. }
  31. update_spl_dependencies() {
  32. declare project_root="$1"
  33. declare tomls=()
  34. while IFS='' read -r line; do tomls+=("$line"); done < <(find "$project_root" -name Cargo.toml)
  35. sed -i -e "s#\(spl-associated-token-account = \"\)[^\"]*\(\"\)#\1$spl_associated_token_account_version\2#g" "${tomls[@]}" || return $?
  36. sed -i -e "s#\(spl-associated-token-account = { version = \"\)[^\"]*\(\"\)#\1$spl_associated_token_account_version\2#g" "${tomls[@]}" || return $?
  37. sed -i -e "s#\(spl-memo = \"\)[^\"]*\(\"\)#\1$spl_memo_version\2#g" "${tomls[@]}" || return $?
  38. sed -i -e "s#\(spl-memo = { version = \"\)[^\"]*\(\"\)#\1$spl_memo_version\2#g" "${tomls[@]}" || return $?
  39. sed -i -e "s#\(spl-pod = \"\)[^\"]*\(\"\)#\1$spl_pod_version\2#g" "${tomls[@]}" || return $?
  40. sed -i -e "s#\(spl-pod = { version = \"\)[^\"]*\(\"\)#\1$spl_pod_version\2#g" "${tomls[@]}" || return $?
  41. sed -i -e "s#\(spl-token = \"\)[^\"]*\(\"\)#\1$spl_token_version\2#g" "${tomls[@]}" || return $?
  42. sed -i -e "s#\(spl-token = { version = \"\)[^\"]*\(\"\)#\1$spl_token_version\2#g" "${tomls[@]}" || return $?
  43. sed -i -e "s#\(spl-token-2022 = \"\).*\(\"\)#\1$spl_token_2022_version\2#g" "${tomls[@]}" || return $?
  44. sed -i -e "s#\(spl-token-2022 = { version = \"\)[^\"]*\(\"\)#\1$spl_token_2022_version\2#g" "${tomls[@]}" || return $?
  45. sed -i -e "s#\(spl-token-group-interface = \"\)[^\"]*\(\"\)#\1=$spl_token_group_interface_version\2#g" "${tomls[@]}" || return $?
  46. sed -i -e "s#\(spl-token-group-interface = { version = \"\)[^\"]*\(\"\)#\1=$spl_token_group_interface_version\2#g" "${tomls[@]}" || return $?
  47. sed -i -e "s#\(spl-token-metadata-interface = \"\)[^\"]*\(\"\)#\1=$spl_token_metadata_interface_version\2#g" "${tomls[@]}" || return $?
  48. sed -i -e "s#\(spl-token-metadata-interface = { version = \"\)[^\"]*\(\"\)#\1=$spl_token_metadata_interface_version\2#g" "${tomls[@]}" || return $?
  49. sed -i -e "s#\(spl-tlv-account-resolution = \"\)[^\"]*\(\"\)#\1=$spl_tlv_account_resolution_version\2#g" "${tomls[@]}" || return $?
  50. sed -i -e "s#\(spl-tlv-account-resolution = { version = \"\)[^\"]*\(\"\)#\1=$spl_tlv_account_resolution_version\2#g" "${tomls[@]}" || return $?
  51. sed -i -e "s#\(spl-transfer-hook-interface = \"\)[^\"]*\(\"\)#\1=$spl_transfer_hook_interface_version\2#g" "${tomls[@]}" || return $?
  52. sed -i -e "s#\(spl-transfer-hook-interface = { version = \"\)[^\"]*\(\"\)#\1=$spl_transfer_hook_interface_version\2#g" "${tomls[@]}" || return $?
  53. sed -i -e "s#\(spl-type-length-value = \"\)[^\"]*\(\"\)#\1=$spl_type_length_value_version\2#g" "${tomls[@]}" || return $?
  54. sed -i -e "s#\(spl-type-length-value = { version = \"\)[^\"]*\(\"\)#\1=$spl_type_length_value_version\2#g" "${tomls[@]}" || return $?
  55. # patch ahash. This is super brittle; putting here for convenience, since we are already iterating through the tomls
  56. ahash_minor_version="0.8"
  57. sed -i -e "s#\(ahash = \"\)[^\"]*\(\"\)#\1$ahash_minor_version\2#g" "${tomls[@]}" || return $?
  58. }
  59. patch_crates_io() {
  60. declare Cargo_toml="$1"
  61. declare spl_dir="$2"
  62. cat >> "$Cargo_toml" <<EOF
  63. spl-associated-token-account = { path = "$spl_dir/associated-token-account/program" }
  64. spl-memo = { path = "$spl_dir/memo/program" }
  65. spl-pod = { path = "$spl_dir/libraries/pod" }
  66. spl-token = { path = "$spl_dir/token/program" }
  67. spl-token-2022 = { path = "$spl_dir/token/program-2022" }
  68. spl-token-group-interface = { path = "$spl_dir/token-group/interface" }
  69. spl-token-metadata-interface = { path = "$spl_dir/token-metadata/interface" }
  70. spl-tlv-account-resolution = { path = "$spl_dir/libraries/tlv-account-resolution" }
  71. spl-transfer-hook-interface = { path = "$spl_dir/token/transfer-hook/interface" }
  72. spl-type-length-value = { path = "$spl_dir/libraries/type-length-value" }
  73. EOF
  74. }