-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild_python.sh
executable file
·121 lines (98 loc) · 2.72 KB
/
build_python.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/bash
set -e # Exit immediately if a command exits with a non-zero status.
echo "Starting Python build process..."
# Define output directories
BASE_DIR="./bindings/python"
PACKAGE_DIR="$BASE_DIR/pubkyapp"
# Create output directories
mkdir -p "$BASE_DIR"
mkdir -p "$PACKAGE_DIR"
# Remove previous build
echo "Removing previous build..."
# shellcheck disable=SC2115
rm -rf "$PACKAGE_DIR"/*
# Cargo Build
echo "Building Rust libraries..."
cargo build
# Modify Cargo.toml to ensure correct crate type
echo "Updating Cargo.toml..."
sed -i '' 's/crate_type = .*/crate_type = ["cdylib"]/' Cargo.toml
# Build release
echo "Building release version..."
cargo build --release
# Generate Python bindings
echo "Generating Python bindings..."
LIBRARY_PATH="./target/release/libpubkyapp.dylib"
# Check if the library file exists
if [ ! -f "$LIBRARY_PATH" ]; then
echo "Error: Library file not found at $LIBRARY_PATH"
echo "Available files in target/release:"
ls -l ./target/release/
exit 1
fi
# Generate the Python bindings
cargo run --bin uniffi-bindgen generate \
--library "$LIBRARY_PATH" \
--language python \
--out-dir "$PACKAGE_DIR"
# Create __init__.py
touch "$PACKAGE_DIR/__init__.py"
# Create setup.py
cat > "$BASE_DIR/setup.py" << EOL
from setuptools import setup, find_packages
setup(
name="pubkyapp",
version="0.1.0",
packages=find_packages(),
package_data={
"pubkyapp": ["*.so", "*.dylib", "*.dll"],
},
install_requires=[],
author="Pubky",
author_email="",
description="Python bindings for the Pubky Mobile SDK",
long_description=open("README.md").read(),
long_description_content_type="text/markdown",
url="",
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
python_requires=">=3.6",
)
EOL
# Create README.md
cat > "$BASE_DIR/README.md" << EOL
# Pubky Mobile Python Bindings
Python bindings for the Pubky Mobile SDK.
## Installation
\`\`\`bash
pip install .
\`\`\`
## Usage
\`\`\`python
from pubkyapp import *
# Generate a new keypair
result = generate_secret_key()
if result[0] == "success":
print(f"Generated key: {result[1]}")
else:
print(f"Error: {result[1]}")
\`\`\`
EOL
# Copy necessary library files
echo "Copying library files..."
case "$(uname)" in
"Darwin")
cp "$LIBRARY_PATH" "$PACKAGE_DIR/"
;;
"Linux")
cp "./target/release/libpubkyapp.so" "$PACKAGE_DIR/"
;;
"MINGW"*|"MSYS"*|"CYGWIN"*)
cp "./target/release/pubkyapp.dll" "$PACKAGE_DIR/"
;;
esac
echo "Python build process completed successfully!"
echo "To install the package, cd into $BASE_DIR and run: pip install ."