Skip to content

Commit 63bde63

Browse files
committed
Try removing patchelf dependency
1 parent a03e0e8 commit 63bde63

File tree

10 files changed

+777
-72
lines changed

10 files changed

+777
-72
lines changed

.github/workflows/CI.yml

Lines changed: 31 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,14 @@ jobs:
147147
run: ${{ matrix.settings.build }}
148148
if: ${{ !matrix.settings.docker }}
149149
shell: bash
150+
- name: build wasm
151+
run: |
152+
rustup target add wasm32-wasip1
153+
cd fix-python-soname
154+
cargo build --target wasm32-wasip1 --release
155+
cp target/wasm32-wasip1/release/fix-python-soname.wasm ..
156+
if: contains(matrix.settings.target, 'linux')
157+
shell: bash
150158
- name: Upload artifact
151159
uses: actions/upload-artifact@v4
152160
with:
@@ -155,6 +163,8 @@ jobs:
155163
${{ env.APP_NAME }}.*.node
156164
index.d.ts
157165
index.js
166+
fix-python-soname.wasm
167+
fix-python-soname.js
158168
if-no-files-found: error
159169

160170
test-macOS-windows-binding:
@@ -332,79 +342,9 @@ jobs:
332342
apt-get update -y
333343
apt-get install -y python3 python3-dev patchelf
334344
335-
echo "=== Starting test setup ==="
336-
echo "Current directory: $(pwd)"
337-
echo "Python version: $(python3 --version)"
338-
echo "Patchelf version: $(patchelf --version)"
339-
echo "Using combined approach: SONAME patching + programmatic RTLD_GLOBAL"
340-
echo "CI environment: CI=$CI, GITHUB_ACTIONS=$GITHUB_ACTIONS"
341-
342-
# Check what .node files exist
343-
echo "=== Available .node files ==="
344-
ls -la *.node || echo "No .node files found"
345-
346-
# Check what .node files exist and patch Python dependencies
347-
echo "=== Checking .node file Python dependencies ==="
348-
for file in *.node; do
349-
if [ -f "$file" ]; then
350-
case "$file" in
351-
*linux*)
352-
echo "Checking $file..."
353-
echo "Python dependencies before patching:"
354-
ldd "$file" 2>/dev/null | grep python || echo "No Python dependencies found"
355-
356-
# Check if we need to patch SONAME
357-
current_python_lib=$(ldd "$file" 2>/dev/null | grep "libpython" | head -1 | awk '{print $1}')
358-
if [ -n "$current_python_lib" ]; then
359-
echo "Current Python library: $current_python_lib"
360-
361-
# Find the actual Python library on the system
362-
system_python_lib=$(find /usr/lib* -name "libpython3*.so.*" -type f 2>/dev/null | head -1)
363-
if [ -n "$system_python_lib" ]; then
364-
system_python_soname=$(basename "$system_python_lib")
365-
echo "System Python library: $system_python_soname"
366-
367-
# Only patch if they're different
368-
if [ "$current_python_lib" != "$system_python_soname" ]; then
369-
echo "Patching SONAME from $current_python_lib to $system_python_soname"
370-
patchelf --replace-needed "$current_python_lib" "$system_python_soname" "$file"
371-
echo "SONAME patching completed"
372-
else
373-
echo "SONAME already matches system Python"
374-
fi
375-
else
376-
echo "Warning: Could not find system Python library"
377-
fi
378-
else
379-
echo "No Python library dependency found"
380-
fi
381-
382-
echo "Python dependencies after patching:"
383-
ldd "$file" 2>/dev/null | grep python || echo "No Python dependencies found"
384-
echo "---"
385-
;;
386-
*)
387-
echo "Skipping non-Linux file: $file"
388-
;;
389-
esac
390-
fi
391-
done
392-
393-
# Install pnpm and run tests
394-
echo "=== Installing pnpm ==="
395345
corepack disable
396346
npm i -gf pnpm
397-
398-
echo "=== Running pnpm install ==="
399-
# Should be non-interactive in CI environment
400347
pnpm install --prefer-offline
401-
402-
echo "=== Setting up Python library path ==="
403-
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
404-
echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
405-
406-
407-
echo "=== Running tests ==="
408348
pnpm test
409349
410350
publish:
@@ -430,6 +370,27 @@ jobs:
430370
path: artifacts
431371
- name: Move artifacts
432372
run: pnpm artifacts
373+
- name: Copy fix-python-soname files to Linux packages
374+
run: |
375+
# Find the WASM and JS files from Linux artifacts
376+
WASM_FILE=$(find artifacts -name "fix-python-soname.wasm" | head -n 1)
377+
JS_FILE=$(find artifacts -name "fix-python-soname.js" | head -n 1)
378+
379+
if [ -n "$WASM_FILE" ] && [ -n "$JS_FILE" ]; then
380+
echo "Found WASM file: $WASM_FILE"
381+
echo "Found JS file: $JS_FILE"
382+
383+
# Copy to all Linux npm directories
384+
for dir in npm/*/; do
385+
if [[ "$dir" == *"linux"* ]]; then
386+
echo "Copying files to $dir"
387+
cp "$WASM_FILE" "$dir"
388+
cp "$JS_FILE" "$dir"
389+
fi
390+
done
391+
else
392+
echo "Warning: fix-python-soname files not found in artifacts"
393+
fi
433394
- name: List packages
434395
run: ls -R ./npm
435396
shell: bash

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,5 +199,6 @@ $RECYCLE.BIN/
199199
# Build/Install files
200200
/target
201201
/*.node
202+
/*.wasm
202203
/index.d.ts
203204
/index.js

0 commit comments

Comments
 (0)