Blame view

Pods/Target Support Files/Realm/Realm-xcframeworks.sh 4.53 KB
75d24c15   yangbin   123
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  #!/bin/sh
  set -e
  set -u
  set -o pipefail
  
  function on_error {
    echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
  }
  trap 'on_error $LINENO' ERR
  
  
  # This protects against multiple targets copying the same framework dependency at the same time. The solution
  # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
  RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
  
  
76bb5f50   daifengyi   fix project confi...
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
  variant_for_slice()
  {
    case "$1" in
    "realm-monorepo.xcframework/macos-x86_64_arm64")
      echo ""
      ;;
    "realm-monorepo.xcframework/ios-armv7_arm64")
      echo ""
      ;;
    "realm-monorepo.xcframework/ios-arm64_x86_64_i386-simulator")
      echo "simulator"
      ;;
    "realm-monorepo.xcframework/ios-x86_64_arm64-maccatalyst")
      echo "maccatalyst"
      ;;
    "realm-monorepo.xcframework/watchos-armv7k_arm64_32")
      echo ""
      ;;
    "realm-monorepo.xcframework/watchos-arm64_i386_x86_64-simulator")
      echo "simulator"
      ;;
    "realm-monorepo.xcframework/tvos-arm64")
      echo ""
      ;;
    "realm-monorepo.xcframework/tvos-arm64_x86_64-simulator")
      echo "simulator"
      ;;
    esac
  }
  
  archs_for_slice()
  {
    case "$1" in
    "realm-monorepo.xcframework/macos-x86_64_arm64")
      echo "arm64 x86_64"
      ;;
    "realm-monorepo.xcframework/ios-armv7_arm64")
      echo "arm64 armv7"
      ;;
    "realm-monorepo.xcframework/ios-arm64_x86_64_i386-simulator")
      echo "arm64 i386 x86_64"
      ;;
    "realm-monorepo.xcframework/ios-x86_64_arm64-maccatalyst")
      echo "arm64 x86_64"
      ;;
    "realm-monorepo.xcframework/watchos-armv7k_arm64_32")
      echo "arm64_32 armv7k"
      ;;
    "realm-monorepo.xcframework/watchos-arm64_i386_x86_64-simulator")
      echo "arm64 i386 x86_64"
      ;;
    "realm-monorepo.xcframework/tvos-arm64")
      echo "arm64"
      ;;
    "realm-monorepo.xcframework/tvos-arm64_x86_64-simulator")
      echo "arm64 x86_64"
      ;;
    esac
  }
  
75d24c15   yangbin   123
77
78
79
80
81
82
83
84
85
86
87
88
89
  copy_dir()
  {
    local source="$1"
    local destination="$2"
  
    # Use filter instead of exclude so missing patterns don't throw errors.
    echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" \"${source}*\" \"${destination}\""
    rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" "${source}"/* "${destination}"
  }
  
  SELECT_SLICE_RETVAL=""
  
  select_slice() {
76bb5f50   daifengyi   fix project confi...
90
91
92
    local xcframework_name="$1"
    xcframework_name="${xcframework_name##*/}"
    local paths=("${@:2}")
75d24c15   yangbin   123
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
    # Locate the correct slice of the .xcframework for the current architectures
    local target_path=""
  
    # Split archs on space so we can find a slice that has all the needed archs
    local target_archs=$(echo $ARCHS | tr " " "\n")
  
    local target_variant=""
    if [[ "$PLATFORM_NAME" == *"simulator" ]]; then
      target_variant="simulator"
    fi
    if [[ ! -z ${EFFECTIVE_PLATFORM_NAME+x} && "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then
      target_variant="maccatalyst"
    fi
    for i in ${!paths[@]}; do
      local matched_all_archs="1"
76bb5f50   daifengyi   fix project confi...
108
109
110
111
      local slice_archs="$(archs_for_slice "${xcframework_name}/${paths[$i]}")"
      local slice_variant="$(variant_for_slice "${xcframework_name}/${paths[$i]}")"
      for target_arch in $target_archs; do
        if ! [[ "${slice_variant}" == "$target_variant" ]]; then
75d24c15   yangbin   123
112
113
114
115
          matched_all_archs="0"
          break
        fi
  
76bb5f50   daifengyi   fix project confi...
116
        if ! echo "${slice_archs}" | tr " " "\n" | grep -F -q -x "$target_arch"; then
75d24c15   yangbin   123
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
          matched_all_archs="0"
          break
        fi
      done
  
      if [[ "$matched_all_archs" == "1" ]]; then
        # Found a matching slice
        echo "Selected xcframework slice ${paths[$i]}"
        SELECT_SLICE_RETVAL=${paths[$i]}
        break
      fi
    done
  }
  
  install_xcframework() {
    local basepath="$1"
    local name="$2"
    local package_type="$3"
    local paths=("${@:4}")
  
    # Locate the correct slice of the .xcframework for the current architectures
76bb5f50   daifengyi   fix project confi...
138
    select_slice "${basepath}" "${paths[@]}"
75d24c15   yangbin   123
139
140
    local target_path="$SELECT_SLICE_RETVAL"
    if [[ -z "$target_path" ]]; then
76bb5f50   daifengyi   fix project confi...
141
      echo "warning: [CP] $(basename ${basepath}): Unable to find matching slice in '${paths[@]}' for the current build architectures ($ARCHS) and platform (${EFFECTIVE_PLATFORM_NAME-${PLATFORM_NAME}})."
75d24c15   yangbin   123
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
      return
    fi
    local source="$basepath/$target_path"
  
    local destination="${PODS_XCFRAMEWORKS_BUILD_DIR}/${name}"
  
    if [ ! -d "$destination" ]; then
      mkdir -p "$destination"
    fi
  
    copy_dir "$source/" "$destination"
    echo "Copied $source to $destination"
  }
  
  install_xcframework "${PODS_ROOT}/Realm/core/realm-monorepo.xcframework" "Realm" "library" "ios-armv7_arm64" "ios-arm64_x86_64_i386-simulator" "ios-x86_64_arm64-maccatalyst"