summaryrefslogtreecommitdiffstats
path: root/src/ceph/admin/build-doc
blob: 0caa048767c8ac01c06d0ed4c5c7ca8829969b75 (plain)
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
122
123
124
125
126
127
128
129
130
131
132
133
#!/bin/sh

cd "$(dirname "$0")"
cd ..
TOPDIR=`pwd`

install -d -m0755 build-doc

if command -v dpkg >/dev/null; then
    packages=`cat ${TOPDIR}/doc_deps.deb.txt`
    for package in $packages; do
    if [ "$(dpkg --status -- $package 2>&1 | 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 -o APT::Install-Recommends=true $missing" 1>&2
        exit 1
    fi
elif command -v yum >/dev/null; then
    for package in python-devel python-pip python-virtualenv doxygen ditaa ant libxml2-devel libxslt-devel Cython graphviz; 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 $TOPDIR/src/osd/PG.h $TOPDIR/src/osd/PG.cc | $TOPDIR/doc/scripts/gen_state_diagram.py > $TOPDIR/doc/dev/peering_graph.generated.dot

cd build-doc

[ -z "$vdir" ] && vdir="$TOPDIR/build-doc/virtualenv"

if [ ! -e $vdir ]; then
    virtualenv --system-site-packages $vdir -p python2
fi
$vdir/bin/pip install --quiet -r $TOPDIR/admin/doc-requirements.txt

install -d -m0755 \
    $TOPDIR/build-doc/output/html \
    $TOPDIR/build-doc/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.
# the module are imported by the "automodule::" directive.
mkdir -p $vdir/lib
export LD_LIBRARY_PATH="$vdir/lib"
export PYTHONPATH=$TOPDIR/src/pybind

# FIXME(sileht): I dunno how to pass the include-dirs correctly with pip
# for build_ext step, it should be:
# --global-option=build_ext --global-option="--cython-include-dirs $TOPDIR/src/pybind/rados/"
# but that doesn't work, so copying the file in the rbd module directly, that's ok for docs
for bind in rados rbd cephfs rgw; do
    if [ ${bind} != rados ]; then
        cp -f $TOPDIR/src/pybind/rados/rados.pxd $TOPDIR/src/pybind/${bind}/
    fi
    ln -sf lib${bind}.so.1 $vdir/lib/lib${bind}.so
    gcc -shared -o $vdir/lib/lib${bind}.so.1 -xc /dev/null
    BUILD_DOC=1 \
        CFLAGS="-iquote$TOPDIR/src/include" \
        CPPFLAGS="-iquote$TOPDIR/src/include" \
        LDFLAGS="-L$vdir/lib -Wl,--no-as-needed" \
        $vdir/bin/pip install $TOPDIR/src/pybind/${bind}
    # rgwfile_version(), librgw_create(), rgw_mount()
    nm $vdir/lib/python*/*-packages/${bind}.so | grep -E "U (lib)?${bind}" | \
        awk '{ print "void "$2"(void) {}" }' | \
        gcc -shared -o $vdir/lib/lib${bind}.so.1 -xc -
    if [ ${bind} != rados ]; then
        rm -f $TOPDIR/src/pybind/${bind}/rados.pxd
    fi
done

if [ -z "$@" ]; then
    sphinx_targets="html man"
else
    sphinx_targets=$@
fi
for target in $sphinx_targets; do
    builder=$target
    case $target in
        html)
            builder=dirhtml
            ;;
        man)
            extra_opt="-t man"
            ;;
    esac
    $vdir/bin/sphinx-build -a -b $builder $extra_opt -d doctrees \
                           $TOPDIR/doc $TOPDIR/build-doc/output/$target
done

#
# 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=$TOPDIR/build-doc/output/html/api/libcephfs-java/javadoc
rm -rf $JAVA_OUTDIR
mkdir $JAVA_OUTDIR

# Copy JavaDocs to target directory
cp -a $JAVADIR/doc/* $JAVA_OUTDIR/