mirror of
https://github.com/ceph/ceph
synced 2024-12-17 17:05:42 +00:00
9cca28a917
ctypes is fundamentally incapable of providing safe callback support (exceptions during callbacks are not handled properly). To fix this, and also gain more flexibility, rewrite/port the librbd bindings to Cython instead. Other Python bindings are expected to migrate to Cython in the future. Reference: http://tracker.ceph.com/issues/13115 To support this, this change also: - Introduces a Makefile for pybind which calls setup.py - Updates the installation files for packages - Adds a hack to admin/build-doc to build a dummy librbd, avoiding the need to build the entire client library just to generate documentation (Sphinx needs to be able to import rbd.so, which depends on librbd.so symbols). With contributions by Josh Durgin <jdurgin@redhat.com> Signed-off-by: Hector Martin <marcan@marcan.st>
101 lines
2.9 KiB
Bash
Executable File
101 lines
2.9 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
cd "$(dirname "$0")"
|
|
cd ..
|
|
TOPDIR=`pwd`
|
|
|
|
install -d -m0755 build-doc
|
|
|
|
if command -v dpkg >/dev/null; then
|
|
for package in python-dev python-pip python-virtualenv doxygen ditaa ant libxml2-dev libxslt1-dev cython; do
|
|
if [ "$(dpkg --status -- $package|sed -n 's/^Status: //p')" != "install ok installed" ]; then
|
|
# add a space after old values
|
|
missing="${missing:+$missing }$package"
|
|
fi
|
|
done
|
|
if [ -n "$missing" ]; then
|
|
echo "$0: missing required packages, please install them:" 1>&2
|
|
echo "sudo apt-get install $missing"
|
|
exit 1
|
|
fi
|
|
elif command -v yum >/dev/null; then
|
|
for package in python-devel python-pip python-virtualenv doxygen ditaa ant libxml-devel libxslt-devel Cython; do
|
|
if ! rpm -q $package >/dev/null ; then
|
|
missing="${missing:+$missing }$package"
|
|
fi
|
|
done
|
|
if [ -n "$missing" ]; then
|
|
echo "$0: missing required packages, please install them:" 1>&2
|
|
echo "yum install $missing"
|
|
exit 1
|
|
fi
|
|
else
|
|
for command in virtualenv doxygen ant ditaa cython; do
|
|
command -v "$command" > /dev/null;
|
|
ret_code=$?
|
|
if [ $ret_code -ne 0 ]; then
|
|
# add a space after old values
|
|
missing="${missing:+$missing }$command"
|
|
fi
|
|
done
|
|
if [ -n "$missing" ]; then
|
|
echo "$0: missing required command, please install them:" 1>&2
|
|
echo "$missing"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Don't enable -e until after running all the potentially-erroring checks
|
|
# for availability of commands
|
|
set -e
|
|
|
|
cat src/osd/PG.h src/osd/PG.cc | doc/scripts/gen_state_diagram.py > doc/dev/peering_graph.generated.dot
|
|
|
|
cd build-doc
|
|
|
|
[ -z "$vdir" ] && vdir="./virtualenv"
|
|
|
|
if [ ! -e $vdir ]; then
|
|
virtualenv --system-site-packages $vdir
|
|
fi
|
|
$vdir/bin/pip install --quiet -r ../admin/doc-requirements.txt
|
|
|
|
install -d -m0755 \
|
|
output/html \
|
|
output/man
|
|
|
|
# To avoid having to build librbd to build the Python bindings to build the docs,
|
|
# create a dummy librbd.so that allows the module to be imported by sphinx.
|
|
mkdir -p $vdir/lib
|
|
export LD_LIBRARY_PATH="$vdir/lib"
|
|
export PYTHONPATH=`pwd`/../src/pybind
|
|
ln -sf librbd.so.1 $vdir/lib/librbd.so
|
|
gcc -shared -o $vdir/lib/librbd.so.1 -xc /dev/null
|
|
CFLAGS="-iquote `pwd`/../src/include" \
|
|
CPPFLAGS="-iquote `pwd`/../src/include" \
|
|
LDFLAGS="-L$vdir/lib -Wl,--no-as-needed" \
|
|
$vdir/bin/pip install `pwd`/../src/pybind
|
|
nm $vdir/lib/python*/*-packages/rbd.so | grep 'U rbd_' | \
|
|
awk '{ print "void "$2"(void) {}" }' | \
|
|
gcc -shared -o $vdir/lib/librbd.so.1 -xc -
|
|
|
|
$vdir/bin/sphinx-build -a -n -b dirhtml -d doctrees ../doc output/html
|
|
$vdir/bin/sphinx-build -a -b man -d doctrees ../doc output/man
|
|
|
|
#
|
|
# Build and install JavaDocs
|
|
#
|
|
JAVADIR=$TOPDIR/src/java
|
|
|
|
# Clean and build JavaDocs
|
|
rm -rf $JAVADIR/doc
|
|
ant -buildfile $JAVADIR/build.xml docs
|
|
|
|
# Create clean target directory
|
|
JAVA_OUTDIR=output/html/api/libcephfs-java/javadoc
|
|
rm -rf $JAVA_OUTDIR
|
|
mkdir $JAVA_OUTDIR
|
|
|
|
# Copy JavaDocs to target directory
|
|
cp -a $JAVADIR/doc/* $JAVA_OUTDIR/
|