Created
August 3, 2025 00:04
-
-
Save markrmiller/fe358c9321197cfbcdb6dbf7cba5ad48 to your computer and use it in GitHub Desktop.
build pylucene
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
set -Eeuo pipefail | |
trap 'echo "❌ failed at line ${LINENO}" >&2' ERR | |
LUCENE_VER=10.0.0 | |
WORKDIR=$(pwd)/pylucene-trunk | |
PYLUCENE=$WORKDIR/lucene-pylucene | |
LUCENE_DIR=$PYLUCENE/lucene-java-$LUCENE_VER | |
JAVA_HOME=/usr/lib/jvm/java-21-openjdk | |
JDK_PKG=jdk21-openjdk | |
if [[ -z "${SUDO_PASSWORD:-}" ]]; then | |
echo "Error: SUDO_PASSWORD environment variable must be set (needed to clean up)" | |
exit 1 | |
fi | |
if [[ -d "$WORKDIR" ]]; then | |
rm -rf "$WORKDIR" | |
fi | |
if ! command -v javac &> /dev/null; then | |
echo "$SUDO_PASSWORD" | sudo -S pacman -Sy --noconfirm --needed base-devel $JDK_PKG apache-ant \ | |
subversion git python python-pip > /dev/null | |
fi | |
mkdir -p "$WORKDIR" | |
cd "$WORKDIR" | |
if [[ -d $PYLUCENE/.svn ]]; then | |
svn up --ignore-externals "$PYLUCENE" > /dev/null | |
else | |
svn co --ignore-externals \ | |
https://svn.apache.org/repos/asf/lucene/pylucene/trunk/ "$PYLUCENE" > /dev/null | |
fi | |
rm -rf "$LUCENE_DIR" | |
git clone --quiet --branch "releases/lucene/$LUCENE_VER" \ | |
https://github.com/apache/lucene.git "$LUCENE_DIR" | |
cd "$PYLUCENE" | |
tar -cf - extensions | tar -C "$LUCENE_DIR"/lucene -xf - | |
echo 'include "lucene:extensions"' >> "$LUCENE_DIR"/settings.gradle | |
export JAVA_HOME="$JAVA_HOME" | |
export PATH="$JAVA_HOME/bin:$PATH" | |
cd "$LUCENE_DIR" | |
./gradlew --no-daemon -q clean jar collectRuntimeJars -x test | |
cd "$PYLUCENE" | |
export PATH="$JAVA_HOME/bin:$PATH" | |
python -m venv .venv | |
source .venv/bin/activate | |
python -m pip -q install --upgrade pip setuptools wheel | |
export LDFLAGS="-L$JAVA_HOME/lib -L$JAVA_HOME/lib/server" | |
export JCC_JDK="$JAVA_HOME" | |
python -m pip -q install --no-binary :all: "JCC>=3.15" | |
export PATH="$JAVA_HOME/bin:$PATH" | |
export JAVA_HOME="$JAVA_HOME" | |
export LD_LIBRARY_PATH="$JAVA_HOME/lib:$JAVA_HOME/lib/server:${LD_LIBRARY_PATH:-}" | |
JCC_CMD="$(which python) -m jcc" | |
PATH="$JAVA_HOME/bin:$PATH" JAVA_HOME="$JAVA_HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH" make -j"$(nproc)" JCC="$JCC_CMD" JCCFLAGS=--shared PYTHON="$(which python)" NUM_FILES=16 all | |
PATH="$JAVA_HOME/bin:$PATH" JAVA_HOME="$JAVA_HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH" make JCC="$JCC_CMD" NUM_FILES=16 test | |
PATH="$JAVA_HOME/bin:$PATH" JAVA_HOME="$JAVA_HOME" LD_LIBRARY_PATH="$LD_LIBRARY_PATH" make JCC="$JCC_CMD" NUM_FILES=16 install | |
echo "smoke test..." | |
export PATH="$JAVA_HOME/bin:$PATH" | |
export LD_LIBRARY_PATH="$JAVA_HOME/lib:$JAVA_HOME/lib/server:${LD_LIBRARY_PATH:-}" | |
python - <<'PY' | |
import lucene, platform, sys | |
lucene.initVM(['-Djava.awt.headless=true']) | |
print(f"✅ PyLucene {lucene.VERSION} loaded — JVM {platform.java_ver()[0]}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment