Add bash script to convert builtin help to reStructuredText

Create a convert-help.bash script to extract builtin documentation as
reStructuredText sources in a new Help directory.  Run each executable
with the --help-full option targeting a .rst file to extract the
documentation.  Generate Sphinx "toctree" directives to point each man
page at the corresponding documents it should contain.  Organize
cmake-commands(7), cmake-properties(7), and cmake-variables(7) man pages
into sections similar to those generated by --help-properties and
--help-variables output previously.
This commit is contained in:
Brad King 2013-10-15 11:17:19 -04:00
parent 81759c77af
commit e94958e99c
1 changed files with 306 additions and 0 deletions

306
convert-help.bash Executable file
View File

@ -0,0 +1,306 @@
#!/usr/bin/env bash
if test $# -ne 1; then
echo 1>&2 'Specify cmake executable directory'
exit 1
fi &&
bin="$1" &&
# Extract .rst documentation and generate man section 1 pages
mkdir -p Help/manual &&
cd Help &&
mkdir tmp && cd tmp &&
"$bin"/cmake --help-full ../manual/cmake.1.rst &&
tar c * | (cd .. && tar x) &&
cd .. && rm -rf tmp &&
sed -i '1 i\
cmake(1)\
********\
' manual/cmake.1.rst &&
mkdir tmp && cd tmp &&
"$bin"/ctest --help-full ../manual/ctest.1.rst &&
mv command/ctest_*.rst ../command &&
cd .. && rm -rf tmp &&
sed -i '1 i\
ctest(1)\
********\
' manual/ctest.1.rst &&
mkdir tmp && cd tmp &&
"$bin"/cpack --help-full ../manual/cpack.1.rst &&
mv variable ../var_cpack &&
cd .. && rm -rf tmp &&
sed -i '1 i\
cpack(1)\
********\
' manual/cpack.1.rst &&
mkdir tmp && cd tmp &&
"$bin"/ccmake --help-full ../manual/ccmake.1.rst &&
cd .. && rm -rf tmp &&
sed -i '1 i\
ccmake(1)\
*********\
' manual/ccmake.1.rst &&
mkdir tmp && cd tmp &&
"$bin"/cmake-gui --help-full ../manual/cmake-gui.1.rst &&
cd .. && rm -rf tmp &&
sed -i '1 i\
cmake-gui(1)\
************\
' manual/cmake-gui.1.rst &&
# Remove trailing whitespace and blank lines
find . -name '*.rst' |
while read f; do
sed -e 's/[ \t]*$//' -i "$f" &&
sed -e ':a' -e '/^\n*$/ {$d;N;ba;}' -i "$f"
done
# Generate man section 7 pages
{
deprecated_commands=$(
cat <<EOF
/command/build_name
/command/exec_program
/command/export_library_dependencies
/command/install_files
/command/install_programs
/command/install_targets
/command/link_libraries
/command/make_directory
/command/output_required_files
/command/remove
/command/subdir_depends
/command/subdirs
/command/use_mangled_mesa
/command/utility_source
/command/variable_requires
/command/write_file
EOF
) &&
cat <<EOF &&
cmake-commands(7)
*****************
.. only:: html or latex
.. contents::
Normal Commands
===============
These commands may be used freely in CMake projects.
.. toctree::
EOF
echo "$deprecated_commands" > tmp &&
ls command/*.rst |sort|sed 's|^| /|;s|\.rst$||' |
grep -v /command/ctest_ | grep -v -x -F -f tmp &&
rm tmp &&
cat <<EOF &&
Deprecated Commands
===================
These commands are available only for compatibility with older
versions of CMake. Do not use them in new code.
.. toctree::
$deprecated_commands
CTest Commands
==============
These commands are available only in ctest scripts.
.. toctree::
EOF
ls command/*.rst |sort|sed 's|^| /|;s|\.rst$||' | grep /command/ctest_
} > manual/cmake-commands.7.rst &&
{
cat <<EOF &&
cmake-generators(7)
*******************
.. only:: html or latex
.. contents::
All Generators
==============
.. toctree::
EOF
ls generator/*.rst |sort|sed 's|^| /|;s|\.rst$||'
} > manual/cmake-generators.7.rst &&
{
cat <<EOF &&
cmake-modules(7)
****************
.. only:: html or latex
.. contents::
All Modules
===========
.. toctree::
EOF
ls module/*.rst |sort|sed 's|^| /|;s|\.rst$||'
} > manual/cmake-modules.7.rst &&
{
cat <<EOF &&
cmake-policies(7)
*****************
.. only:: html or latex
.. contents::
All Policies
============
.. toctree::
EOF
ls policy/*.rst |sort|sed 's|^| /|;s|\.rst$||'
} > manual/cmake-policies.7.rst &&
{
cat <<EOF &&
cmake-properties(7)
*******************
.. only:: html or latex
.. contents::
Properties of Global Scope
==========================
.. toctree::
EOF
ls prop_gbl/*.rst |sort|sed 's|^| /|;s|\.rst$||' &&
cat <<EOF &&
Properties on Directories
=========================
.. toctree::
EOF
ls prop_dir/*.rst |sort|sed 's|^| /|;s|\.rst$||' &&
cat <<EOF &&
Properties on Targets
=====================
.. toctree::
EOF
ls prop_tgt/*.rst |sort|sed 's|^| /|;s|\.rst$||' &&
cat <<EOF &&
Properties on Tests
===================
.. toctree::
EOF
ls prop_test/*.rst |sort|sed 's|^| /|;s|\.rst$||' &&
cat <<EOF &&
Properties on Source Files
==========================
.. toctree::
EOF
ls prop_sf/*.rst |sort|sed 's|^| /|;s|\.rst$||' &&
cat <<EOF &&
Properties on Cache Entries
===========================
.. toctree::
EOF
ls prop_cache/*.rst|sort|sed 's|^| /|;s|\.rst$||'
} > manual/cmake-properties.7.rst &&
{
cat <<EOF &&
cmake-variables(7)
******************
.. only:: html or latex
.. contents::
Variables that Provide Information
==================================
.. toctree::
EOF
ls var_info/*.rst |sort|sed 's|^| /|;s|var_info/|variable/|;s|\.rst$||' &&
cat <<EOF &&
Variables that Change Behavior
==============================
.. toctree::
EOF
ls var_cmake/*.rst |sort|sed 's|^| /|;s|var_cmake/|variable/|;s|\.rst$||' &&
cat <<EOF &&
Variables that Describe the System
==================================
.. toctree::
EOF
ls var_sys/*.rst |sort|sed 's|^| /|;s|var_sys/|variable/|;s|\.rst$||' &&
cat <<EOF &&
Variables that Control the Build
================================
.. toctree::
EOF
ls var_build/*.rst |sort|sed 's|^| /|;s|var_build/|variable/|;s|\.rst$||' &&
cat <<EOF &&
Variables for Languages
=======================
.. toctree::
EOF
ls var_lang/*.rst |sort|sed 's|^| /|;s|var_lang/|variable/|;s|\.rst$||' &&
cat <<EOF &&
Variables for CPack
===================
.. toctree::
EOF
ls var_cpack/*.rst |sort|sed 's|^| /|;s|var_cpack/|variable/|;s|\.rst$||'
} > manual/cmake-variables.7.rst &&
mkdir variable &&
mv var_*/* variable &&
rmdir var_* &&
cd .. &&
# Move module help back into .cmake module file comments
(cd Help/module && ls *.rst) |
while read m; do
dm="Help/module/$m" &&
cm="Modules/${m%.rst}.cmake" &&
{
echo '#.rst:' &&
sed -e '
/^./ s/^/# /
/^$/ c #
s/ *$//
' "$dm" &&
echo '' &&
sed -e '1,/^$/d' "$cm"
} >"$cm.new" &&
mv "$cm.new" "$cm" &&
echo ".. cmake-module:: ../../$cm" > "$dm"
done