|
81 | 81 | # On ARM64 it runs under Rosetta 2 and needs /usr/local paths. |
82 | 82 | - name: MacOS patch libgfortran |
83 | 83 | if: contains(matrix.os, 'macos') |
84 | | - run: | |
85 | | - which gfortran-${{ matrix.toolchain.version }} |
86 | | - which gfortran |
87 | | - BREW_PREFIX=$(brew --prefix) |
88 | | -
|
89 | | - # Query the actual library paths that fpm expects |
90 | | - echo "Checking library dependencies of fpm bootstrap binary..." |
91 | | - otool -L $(which fpm) |
92 | | -
|
93 | | - # Extract the gcc version from the bootstrap binary's library paths |
94 | | - BOOTSTRAP_GCC_VERSION=$(otool -L $(which fpm) | grep -o 'gcc@[0-9]\+' | head -n 1 | cut -d@ -f2) |
95 | | - if [ -z "$BOOTSTRAP_GCC_VERSION" ]; then |
96 | | - # Try alternative pattern: /lib/gcc/13/ -> extract 13 |
97 | | - BOOTSTRAP_GCC_VERSION=$(otool -L $(which fpm) | grep libgfortran | grep -o '/lib/gcc/[0-9]\+/' | grep -o '[0-9]\+' | head -n 1) |
98 | | - fi |
99 | | -
|
100 | | - echo "Bootstrap fpm built with gcc@$BOOTSTRAP_GCC_VERSION" |
101 | | - echo "Current toolchain: gcc@${{ matrix.toolchain.version }}" |
102 | | -
|
103 | | - if [ "$BOOTSTRAP_GCC_VERSION" == "${{ matrix.toolchain.version }}" ]; then |
104 | | - echo "✓ Bootstrap gcc version matches current toolchain - no patching needed" |
105 | | - exit 0 |
106 | | - fi |
107 | | -
|
108 | | - echo "⚠ Version mismatch detected - creating compatibility symlinks..." |
109 | | -
|
110 | | - # Find the actual Cellar path by following the symlink |
111 | | - if [ -L "${BREW_PREFIX}/opt/gcc@${{ matrix.toolchain.version }}" ]; then |
112 | | - GCC_CELLAR_PATH=$(cd -P "${BREW_PREFIX}/opt/gcc@${{ matrix.toolchain.version }}" && pwd) |
113 | | - else |
114 | | - GCC_CELLAR_PATH="${BREW_PREFIX}/Cellar/gcc@${{ matrix.toolchain.version }}"/* |
115 | | - fi |
116 | | - echo "GCC Cellar path: $GCC_CELLAR_PATH" |
117 | | -
|
118 | | - # Find the actual library files |
119 | | - CURRENT_GFORTRAN=$(find "$GCC_CELLAR_PATH"/lib/gcc/${{ matrix.toolchain.version }} -name "libgfortran.*.dylib" 2>/dev/null | head -n 1) |
120 | | - CURRENT_QUADMATH=$(find "$GCC_CELLAR_PATH"/lib/gcc/${{ matrix.toolchain.version }} -name "libquadmath.*.dylib" 2>/dev/null | head -n 1) |
121 | | - CURRENT_GCC_S=$(find "$GCC_CELLAR_PATH"/lib/gcc/${{ matrix.toolchain.version }} -name "libgcc_s.*.dylib" 2>/dev/null | head -n 1) |
122 | | -
|
123 | | - echo "Current gcc@${{ matrix.toolchain.version }} libraries:" |
124 | | - echo " libgfortran: $CURRENT_GFORTRAN" |
125 | | - echo " libquadmath: $CURRENT_QUADMATH" |
126 | | - echo " libgcc_s: $CURRENT_GCC_S" |
127 | | -
|
128 | | - # Extract the expected libgfortran path and create symlink |
129 | | - LIBGFORTRAN_PATH=$(otool -L $(which fpm) | grep libgfortran | awk '{print $1}' | head -n 1) |
130 | | - if [ -n "$LIBGFORTRAN_PATH" ] && [ -n "$CURRENT_GFORTRAN" ]; then |
131 | | - TARGET_DIR=$(dirname "$LIBGFORTRAN_PATH") |
132 | | - echo "Creating directory: $TARGET_DIR" |
133 | | - sudo mkdir -p "$TARGET_DIR" |
134 | | - echo "Linking $CURRENT_GFORTRAN to $LIBGFORTRAN_PATH" |
135 | | - sudo ln -fs "$CURRENT_GFORTRAN" "$LIBGFORTRAN_PATH" |
136 | | - fi |
137 | | -
|
138 | | - # Extract the expected libquadmath path and create symlink |
139 | | - LIBQUADMATH_PATH=$(otool -L $(which fpm) | grep libquadmath | awk '{print $1}' | head -n 1) |
140 | | - if [ -n "$LIBQUADMATH_PATH" ] && [ -n "$CURRENT_QUADMATH" ]; then |
141 | | - TARGET_DIR=$(dirname "$LIBQUADMATH_PATH") |
142 | | - echo "Creating directory: $TARGET_DIR" |
143 | | - sudo mkdir -p "$TARGET_DIR" |
144 | | - echo "Linking $CURRENT_QUADMATH to $LIBQUADMATH_PATH" |
145 | | - sudo ln -fs "$CURRENT_QUADMATH" "$LIBQUADMATH_PATH" |
146 | | - fi |
147 | | -
|
148 | | - # Extract the expected libgcc_s path and create symlink |
149 | | - LIBGCC_PATH=$(otool -L $(which fpm) | grep libgcc_s | awk '{print $1}' | head -n 1) |
150 | | - if [ -n "$LIBGCC_PATH" ] && [ -n "$CURRENT_GCC_S" ]; then |
151 | | - TARGET_DIR=$(dirname "$LIBGCC_PATH") |
152 | | - echo "Creating directory: $TARGET_DIR" |
153 | | - sudo mkdir -p "$TARGET_DIR" |
154 | | - echo "Linking $CURRENT_GCC_S to $LIBGCC_PATH" |
155 | | - sudo ln -fs "$CURRENT_GCC_S" "$LIBGCC_PATH" |
156 | | - fi |
| 84 | + uses: ./.github/actions/patch-macos-libgfortran |
| 85 | + with: |
| 86 | + gcc-version: ${{ matrix.toolchain.version }} |
157 | 87 |
|
158 | 88 | # gcc and g++ will point to clang/clang++: use versioned alias for fpm |
159 | 89 | - name: MacOS patch C and C++ compilers |
|
0 commit comments