Skip to content

Instantly share code, notes, and snippets.

@markrmiller
Created August 3, 2025 00:04
Show Gist options
  • Save markrmiller/fe358c9321197cfbcdb6dbf7cba5ad48 to your computer and use it in GitHub Desktop.
Save markrmiller/fe358c9321197cfbcdb6dbf7cba5ad48 to your computer and use it in GitHub Desktop.
build pylucene
#!/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