Skip to content

Commit ee5c6ef

Browse files
committed
Fix DMG dylib bundling: detect actual linked path from otool
install_name_tool wasn't matching because Homebrew links via Cellar paths (/usr/local/opt/secp256k1/lib/) not /usr/local/lib/. Now uses otool -L to detect the actual linked path from the binary.
1 parent a3ff656 commit ee5c6ef

1 file changed

Lines changed: 27 additions & 15 deletions

File tree

installer/macos/create-dmg.sh

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -77,23 +77,35 @@ STARTEOF
7777
chmod +x "$APP_DIR/start.sh"
7878
fi
7979

80-
# Copy secp256k1 dylib
81-
if [ "$ARCH" = "arm64" ]; then
82-
SECP_LIB="/Users/user0/arm64-deps/lib/libsecp256k1.dylib"
83-
SECP_REAL="/Users/user0/arm64-deps/lib/libsecp256k1.6.dylib"
84-
else
85-
SECP_LIB="/usr/local/lib/libsecp256k1.dylib"
86-
SECP_REAL="/usr/local/lib/libsecp256k1.6.dylib"
87-
fi
88-
if [ -f "$SECP_REAL" ]; then
80+
# Copy secp256k1 dylib and fix load path
81+
# Detect the actual linked path from the binary (Homebrew may use Cellar paths
82+
# like /usr/local/opt/secp256k1/lib/ instead of /usr/local/lib/)
83+
LINKED_SECP=$(otool -L "$APP_DIR/c2pool" | grep secp256k1 | awk '{print $1}')
84+
if [ -n "$LINKED_SECP" ] && [ -f "$LINKED_SECP" ]; then
85+
SECP_REAL=$(realpath "$LINKED_SECP")
8986
cp "$SECP_REAL" "$APP_DIR/lib/libsecp256k1.6.dylib"
9087
ln -sf libsecp256k1.6.dylib "$APP_DIR/lib/libsecp256k1.dylib"
91-
# Fix dylib load path so binary finds the bundled lib
92-
install_name_tool -change "$SECP_LIB" "@executable_path/lib/libsecp256k1.6.dylib" "$APP_DIR/c2pool" 2>/dev/null || true
93-
install_name_tool -change "$SECP_REAL" "@executable_path/lib/libsecp256k1.6.dylib" "$APP_DIR/c2pool" 2>/dev/null || true
94-
elif [ -f "$SECP_LIB" ]; then
95-
cp "$SECP_LIB" "$APP_DIR/lib/libsecp256k1.dylib"
96-
install_name_tool -change "$SECP_LIB" "@executable_path/lib/libsecp256k1.dylib" "$APP_DIR/c2pool" 2>/dev/null || true
88+
install_name_tool -change "$LINKED_SECP" "@executable_path/lib/libsecp256k1.6.dylib" "$APP_DIR/c2pool"
89+
echo " secp256k1: $LINKED_SECP -> @executable_path/lib/libsecp256k1.6.dylib"
90+
else
91+
# Fallback: try known paths
92+
if [ "$ARCH" = "arm64" ]; then
93+
SECP_SEARCH="/Users/user0/arm64-deps/lib /opt/homebrew/lib"
94+
else
95+
SECP_SEARCH="/usr/local/lib /usr/local/opt/secp256k1/lib"
96+
fi
97+
for DIR in $SECP_SEARCH; do
98+
if [ -f "$DIR/libsecp256k1.6.dylib" ]; then
99+
cp "$DIR/libsecp256k1.6.dylib" "$APP_DIR/lib/libsecp256k1.6.dylib"
100+
ln -sf libsecp256k1.6.dylib "$APP_DIR/lib/libsecp256k1.dylib"
101+
# Try all possible linked names
102+
for CANDIDATE in "$DIR/libsecp256k1.dylib" "$DIR/libsecp256k1.6.dylib"; do
103+
install_name_tool -change "$CANDIDATE" "@executable_path/lib/libsecp256k1.6.dylib" "$APP_DIR/c2pool" 2>/dev/null || true
104+
done
105+
echo " secp256k1: $DIR -> @executable_path/lib/libsecp256k1.6.dylib"
106+
break
107+
fi
108+
done
97109
fi
98110

99111
# Add a README

0 commit comments

Comments
 (0)