544be2beb1
The Profile Mode extension is not used by anybody, nor maintained by anybody. The containers do not support the full API specified in recent standards, and so enabling Profile Mode is not source compatible with much modern C++ code. The heuristics that would check the profile information and make useful suggestions never materialized, so it isn't useful. It should be removed. Remove Profile Mode, deprecated since 7.1.0 * doc/Makefile.am: Remove XML file for profile mode docs. * doc/Makefile.in: Regenerate. * doc/xml/authors.xml: Remove authors of profile mode docs. * doc/xml/manual/appendix_contributing.xml: Remove mention of profile mode. * doc/xml/manual/debug.xml: Likewise. * doc/xml/manual/evolution.xml: Document removal of profile mode. * doc/xml/manual/profile_mode.xml: Remove profile mode docs. * doc/xml/manual/spine.xml: Remove profile mode author credit. * doc/xml/manual/test.xml: Remove docs for dg-require-profile-mode directive. * doc/xml/manual/using.xml: Remove docs for profile mode headers and macro. * doc/html/*: Regenerate. * include/Makefile.am: Remove profile mode headers. * include/Makefile.in: Regenerate. * include/bits/c++config (std::__profile): Remove namespace. [_GLIBCXX_PROFILE]: Remove checks for macro. * include/profile/array: Remove. * include/profile/base.h: Remove. * include/profile/bitset: Remove. * include/profile/deque: Remove. * include/profile/forward_list: Remove. * include/profile/impl/profiler.h: Remove. * include/profile/impl/profiler_algos.h: Remove. * include/profile/impl/profiler_container_size.h: Remove. * include/profile/impl/profiler_hash_func.h: Remove. * include/profile/impl/profiler_hashtable_size.h: Remove. * include/profile/impl/profiler_list_to_slist.h: Remove. * include/profile/impl/profiler_list_to_vector.h: Remove. * include/profile/impl/profiler_map_to_unordered_map.h: Remove. * include/profile/impl/profiler_node.h: Remove. * include/profile/impl/profiler_state.h: Remove. * include/profile/impl/profiler_trace.h: Remove. * include/profile/impl/profiler_vector_size.h: Remove. * include/profile/impl/profiler_vector_to_list.h: Remove. * include/profile/iterator_tracker.h: Remove. * include/profile/list: Remove. * include/profile/map: Remove. * include/profile/map.h: Remove. * include/profile/multimap.h: Remove. * include/profile/multiset.h: Remove. * include/profile/ordered_base.h: Remove. * include/profile/set: Remove. * include/profile/set.h: Remove. * include/profile/unordered_base.h: Remove. * include/profile/unordered_map: Remove. * include/profile/unordered_set: Remove. * include/profile/vector: Remove. * scripts/run_doxygen: Do not process profile mode headers. * testsuite/23_containers/array/element_access/60497.cc: Don't use profile mode type. * testsuite/23_containers/array/specialized_algorithms/swap_cxx17.cc: Remove dg-skip-if for profile mode. * testsuite/23_containers/forward_list/capacity/1.cc: Remove preprocessor check for profile mode. * testsuite/23_containers/list/capacity/29134.cc: Likewise. * testsuite/23_containers/map/modifiers/extract.cc: Remove dg-skip-if for profile mode. * testsuite/23_containers/map/modifiers/insert_or_assign/1.cc: Likewise. * testsuite/23_containers/map/modifiers/try_emplace/1.cc: Likewise. * testsuite/23_containers/multimap/modifiers/extract.cc: Likewise. * testsuite/23_containers/multiset/modifiers/extract.cc: Likewise. * testsuite/23_containers/set/modifiers/extract.cc: Likewise. * testsuite/23_containers/unordered_map/modifiers/extract.cc: Likewise. * testsuite/23_containers/unordered_multimap/modifiers/extract.cc: Likewise. * testsuite/23_containers/unordered_multiset/modifiers/extract.cc: Likewise. * testsuite/23_containers/unordered_set/modifiers/extract.cc: Likewise. * testsuite/23_containers/vector/bool/capacity/29134.cc: Remove preprocessor check for profile mode. * testsuite/23_containers/vector/bool/modifiers/insert/31370.cc: Likewise. * testsuite/23_containers/vector/modifiers/insert_vs_emplace.cc: Remove dg-skip-if for profile mode. * testsuite/25_algorithms/binary_search/partitioned.cc: Likewise. * testsuite/25_algorithms/equal_range/partitioned.cc: Likewise. * testsuite/25_algorithms/lexicographical_compare/71545.cc: Likewise. * testsuite/25_algorithms/lower_bound/partitioned.cc: Likewise. * testsuite/25_algorithms/upper_bound/partitioned.cc: Likewise. * testsuite/Makefile.am: Remove profile_flags variable and * testsuite/Makefile.am: Remove profile_flags variable and check-profile target. * testsuite/Makefile.in: Regenerate. * testsuite/ext/profile/all.cc: Remove. * testsuite/ext/profile/mutex_extensions_neg.cc: Remove. * testsuite/ext/profile/profiler_algos.cc: Remove. * testsuite/ext/profile/replace_new.cc: Remove. * testsuite/ext/throw_allocator/deallocate_global.cc: Remove preprocessor check for profile mode. * testsuite/ext/throw_allocator/deallocate_local.cc: Likewise. * testsuite/lib/libstdc++.exp (check_v3_target_profile_mode): Remove. (check_v3_target_normal_mode): Do not check for profile mode macro. * testsuite/libstdc++-prettyprinters/80276.cc: Remove dg-skip-if for profile mode. * testsuite/libstdc++-prettyprinters/compat.cc: Likewise. * testsuite/libstdc++-prettyprinters/cxx11.cc: Likewise. * testsuite/libstdc++-prettyprinters/cxx17.cc: Likewise. * testsuite/libstdc++-prettyprinters/debug.cc: Likewise. * testsuite/libstdc++-prettyprinters/debug_cxx11.cc: Likewise. * testsuite/libstdc++-prettyprinters/libfundts.cc: Likewise. * testsuite/libstdc++-prettyprinters/simple.cc: Likewise. * testsuite/libstdc++-prettyprinters/simple11.cc: Likewise. * testsuite/libstdc++-prettyprinters/whatis.cc: Likewise. * testsuite/libstdc++-prettyprinters/whatis2.cc: Likewise. From-SVN: r271120
415 lines
11 KiB
Bash
415 lines
11 KiB
Bash
#!/bin/bash
|
|
|
|
# Runs doxygen and massages the output files.
|
|
# Copyright (C) 2001-2019 Free Software Foundation, Inc.
|
|
#
|
|
# Synopsis: run_doxygen --mode=[html|latex|man|xml] --host_alias=<alias> \
|
|
# v3srcdir \
|
|
# v3builddir \
|
|
# shortname
|
|
#
|
|
# Originally hacked together by Phil Edwards <pme@gcc.gnu.org>
|
|
|
|
|
|
# We can check now that the version of doxygen is >= this variable.
|
|
DOXYVER=1.7.0
|
|
|
|
find_doxygen() {
|
|
local -r v_required=`echo $DOXYVER | \
|
|
awk -F. '{if(NF<3)$3=0;print ($1*100+$2)*100+$3}'`
|
|
local testing_version doxygen maybedoxy v_found
|
|
# thank you goat book
|
|
set `IFS=:; X="$PATH:/usr/local/bin:/bin:/usr/bin"; echo $X`
|
|
for dir
|
|
do
|
|
# AC_EXEEXT could come in useful here
|
|
maybedoxy="$dir/doxygen"
|
|
test -f "$maybedoxy" && testing_version=`$maybedoxy --version`
|
|
if test -n "$testing_version"; then
|
|
v_found=`echo $testing_version | \
|
|
awk -F. '{if(NF<3)$3=0;print ($1*100+$2)*100+$3}'`
|
|
if test $v_found -ge $v_required; then
|
|
doxygen="$maybedoxy"
|
|
break
|
|
fi
|
|
fi
|
|
done
|
|
if test -z "$doxygen"; then
|
|
echo run_doxygen error: Could not find Doxygen $DOXYVER in path. 1>&2
|
|
print_usage
|
|
fi
|
|
# We need to use other tools from the same package/version.
|
|
echo :: Using Doxygen tools from ${dir}.
|
|
PATH=$dir:$PATH
|
|
hash -r
|
|
}
|
|
|
|
print_usage() {
|
|
cat 1>&2 <<EOF
|
|
Usage: run_doxygen --mode=MODE --host_alias=BUILD_ALIAS [<options>]
|
|
<v3-src-dir> <v3-build-dir> <shortnamesp>
|
|
MODE is one of:
|
|
html Generate user-level HTML library documentation.
|
|
man Generate user-level man pages.
|
|
xml Generate user-level XML pages.
|
|
latex Generate user-level LaTeX pages.
|
|
|
|
BUILD_ALIAS is the GCC build alias set at configure time.
|
|
|
|
Note: Requires Doxygen ${DOXYVER} or later; get it at
|
|
ftp://ftp.stack.nl/pub/users/dimitri/doxygen-${DOXYVER}.src.tar.gz
|
|
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
parse_options() {
|
|
for o
|
|
do
|
|
# Blatantly ripped from autoconf, er, I mean, "gratefully standing
|
|
# on the shoulders of those giants who have gone before us."
|
|
case "$o" in
|
|
-*=*) arg=`echo "$o" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
|
|
*) arg= ;;
|
|
esac
|
|
|
|
case "$o" in
|
|
--mode=*)
|
|
mode=$arg ;;
|
|
--host_alias=*)
|
|
host_alias=$arg ;;
|
|
--mode | --host_alias | --help | -h)
|
|
print_usage ;;
|
|
*)
|
|
# this turned out to be a mess, maybe change to --srcdir=, etc
|
|
if test $srcdir = unset; then
|
|
srcdir=$o
|
|
elif test $outdir = unset; then
|
|
builddir=${o}
|
|
outdir=${o}/doc/doxygen
|
|
elif test $shortname = unset; then
|
|
shortname=$o
|
|
else
|
|
echo run_doxygen error: Too many arguments 1>&2
|
|
exit 1
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
|
|
# script begins here
|
|
mode=unset
|
|
host_alias=unset
|
|
srcdir=unset
|
|
outdir=unset
|
|
shortname=unset
|
|
do_html=false
|
|
do_man=false
|
|
do_xml=false
|
|
do_latex=false
|
|
enabled_sections=
|
|
generate_tagfile=
|
|
DATEtext=`date '+%Y-%m-%d'`
|
|
|
|
# Show how this script is called.
|
|
echo run_doxygen $*
|
|
|
|
parse_options $*
|
|
find_doxygen
|
|
|
|
if test $srcdir = unset || test $outdir = unset || test $mode = unset || test $shortname = unset || test $host_alias = unset; then
|
|
# this could be better
|
|
echo run_doxygen error: You have not given enough information...! 1>&2
|
|
print_usage
|
|
fi
|
|
|
|
case x"$mode" in
|
|
xhtml)
|
|
do_html=true
|
|
enabled_sections=maint
|
|
generate_tagfile="$outdir/html/libstdc++.tag"
|
|
;;
|
|
xlatex)
|
|
do_latex=true
|
|
enabled_sections=maint
|
|
;;
|
|
xman)
|
|
do_man=true
|
|
;;
|
|
xxml)
|
|
do_xml=true
|
|
enabled_sections=maint
|
|
;;
|
|
*)
|
|
echo run_doxygen error: $mode is an invalid mode 1>&2
|
|
exit 1 ;;
|
|
esac
|
|
|
|
case x"$shortname" in
|
|
xYES)
|
|
;;
|
|
xNO)
|
|
;;
|
|
*)
|
|
echo run_doxygen error: $shortname is invalid 1>&2
|
|
exit 1 ;;
|
|
esac
|
|
|
|
|
|
mkdir -p $outdir
|
|
chmod u+w $outdir
|
|
|
|
# Run it
|
|
(
|
|
set -e
|
|
cd $builddir
|
|
sed -e "s=@outdir@=${outdir}=g" \
|
|
-e "s=@srcdir@=${srcdir}=g" \
|
|
-e "s=@shortname@=${shortname}=g" \
|
|
-e "s=@builddir@=${builddir}=g" \
|
|
-e "s=@host_alias@=${host_alias}=g" \
|
|
-e "s=@enabled_sections@=${enabled_sections}=" \
|
|
-e "s=@do_html@=${do_html}=" \
|
|
-e "s=@do_latex@=${do_latex}=" \
|
|
-e "s=@do_man@=${do_man}=" \
|
|
-e "s=@do_xml@=${do_xml}=" \
|
|
-e "s=@generate_tagfile@=${generate_tagfile}=" \
|
|
${srcdir}/doc/doxygen/user.cfg.in > ${outdir}/${mode}.cfg
|
|
echo :: NOTE that this may take some time...
|
|
echo doxygen ${outdir}/${mode}.cfg
|
|
doxygen ${outdir}/${mode}.cfg
|
|
)
|
|
ret=$?
|
|
test $ret -ne 0 && exit $ret
|
|
|
|
if $do_xml; then
|
|
echo ::
|
|
echo :: XML pages begin with
|
|
echo :: ${outdir}/xml/index.xml
|
|
fi
|
|
|
|
if $do_latex; then
|
|
cd ${outdir}/${mode}
|
|
|
|
# Grrr, Doxygen 1.8.x changed the -w latex options.
|
|
need_footer=`doxygen -h | sed -n -e '/-w latex/s=.*footer.*=true=p'`
|
|
|
|
# Also drop in the header file (maybe footer file) and style sheet
|
|
if $need_footer; then
|
|
doxygen -w latex header.tex footer.tex doxygen.sty
|
|
else
|
|
doxygen -w latex header.tex doxygen.sty
|
|
fi
|
|
|
|
echo ::
|
|
echo :: LaTeX pages begin with
|
|
echo :: ${outdir}/latex/refman.tex
|
|
fi
|
|
|
|
if $do_html; then
|
|
cd ${outdir}/${mode}
|
|
|
|
#doxytag -t libstdc++.tag . > /dev/null 2>&1
|
|
|
|
# Strip pathnames from tag file.
|
|
sed -e '/<path>/d' libstdc++.tag > TEMP
|
|
mv TEMP libstdc++.tag
|
|
|
|
sed -e "s=@DATE@=${DATEtext}=" \
|
|
${srcdir}/doc/doxygen/mainpage.html > index.html
|
|
|
|
# The following bit of line noise changes annoying
|
|
# std::foo < typename _Ugly1, typename _Ugly2, .... _DefaultUgly17 >
|
|
# to user-friendly
|
|
# std::foo
|
|
# in the major "Compound List" page.
|
|
sed -e 's=\(::[[:alnum:]_]*\)< .* >=\1=' annotated.html > annstrip.html
|
|
mv annstrip.html annotated.html
|
|
|
|
cp ${srcdir}/doc/doxygen/tables.html tables.html
|
|
|
|
echo ::
|
|
echo :: HTML pages begin with
|
|
echo :: ${outdir}/html/index.html
|
|
fi
|
|
|
|
# Mess with the man pages. We don't need documentation of the internal
|
|
# headers, since the man pages for those contain nothing useful anyhow. The
|
|
# man pages for doxygen modules need to be renamed (or deleted). And the
|
|
# generated #include lines need to be changed from the internal names to the
|
|
# standard ones (e.g., "#include <stl_tempbuf.h>" -> "#include <memory>").
|
|
if $do_man; then
|
|
echo ::
|
|
echo :: Fixing up the man pages...
|
|
cd $outdir/man/man3
|
|
|
|
# File names with embedded spaces (EVIL!) need to be....? renamed or removed?
|
|
find . -name "* *" -print0 | xargs -0r rm # requires GNU tools
|
|
|
|
# man pages are for functions/types/other entities, not source files
|
|
# directly. who the heck would type "man foo.h" anyhow?
|
|
find . -name "[a-z]*" -a ! -name "std_*" -print | xargs rm
|
|
rm -f *.h.3 *.hpp.3 *config* *.cc.3 *.tcc.3 *_t.3
|
|
#rm ext_*.3 tr1_*.3 debug_*.3
|
|
|
|
# this is used to examine what we would have deleted, for debugging
|
|
#mkdir trash
|
|
#find . -name "[a-z]*" -a ! -name "std_*" -print | xargs -i mv {} trash
|
|
#mv *.h.3 *config* *.cc.3 *.tcc.3 *_t.3 trash
|
|
|
|
# Standardize the displayed header names. If anyone who knows perl cares
|
|
# enough to rewrite all this, feel free. This only gets run once a century,
|
|
# and I'm off getting coffee then anyhow, so I didn't care enough to make
|
|
# this super-fast.
|
|
g++ ${srcdir}/doc/doxygen/stdheader.cc -o ./stdheader
|
|
problematic=`egrep -l '#include <.*_.*>' [a-z]*.3`
|
|
for f in $problematic; do
|
|
# this is also slow, but safe and easy to debug
|
|
oldh=`sed -n '/fC#include </s/.*<\(.*\)>.*/\1/p' $f`
|
|
newh=`echo $oldh | ./stdheader`
|
|
sed 's=${oldh}=${newh}=' $f > TEMP
|
|
mv TEMP $f
|
|
done
|
|
rm stdheader
|
|
|
|
# Some of the pages for generated modules have text that confuses certain
|
|
# implementations of man(1), e.g. on GNU/Linux. We need to have another
|
|
# top-level *roff tag to /stop/ the .SH NAME entry.
|
|
problematic=`egrep --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3`
|
|
#problematic='Containers.3 Sequences.3 Assoc_containers.3 Iterator_types.3'
|
|
|
|
for f in $problematic; do
|
|
sed '/^\.SH NAME/{
|
|
n
|
|
a\
|
|
\
|
|
.SH SYNOPSIS
|
|
}' $f > TEMP
|
|
mv TEMP $f
|
|
done
|
|
|
|
# Also, break this (generated) line up. It's ugly as sin.
|
|
problematic=`grep -l '[^^]Definition at line' *.3`
|
|
for f in $problematic; do
|
|
sed 's/Definition at line/\
|
|
.PP\
|
|
&/' $f > TEMP
|
|
mv TEMP $f
|
|
done
|
|
|
|
cp ${srcdir}/doc/doxygen/Intro.3 C++Intro.3
|
|
|
|
# Why didn't I do this at the start? Were rabid weasels eating my brain?
|
|
# Who the fsck would "man std_vector" when the class isn't named that?
|
|
|
|
# First, deal with nested namespaces.
|
|
for f in *chrono_*; do
|
|
newname=`echo $f | sed 's/chrono_/chrono::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in *__debug_*; do
|
|
newname=`echo $f | sed 's/__debug_/__debug::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in *decimal_*; do
|
|
newname=`echo $f | sed 's/decimal_/decimal::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in *__detail_*; do
|
|
newname=`echo $f | sed 's/__detail_/__detail::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in *__gnu_pbds_detail_*; do
|
|
newname=`echo $f | sed 's/detail_/detail::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in *__parallel_*; do
|
|
newname=`echo $f | sed 's/__parallel_/__parallel::/'`
|
|
mv $f $newname
|
|
done
|
|
|
|
# Remove inline namespaces used for versioning.
|
|
for f in *_V2_*; do
|
|
newname=`echo $f | sed 's/_V2_/::/'`
|
|
sed 's/::_V2::/::/g' $f > $newname
|
|
rm $f
|
|
done
|
|
for f in *_experimental_filesystem_v?_*; do
|
|
newname=`echo $f | sed 's/_filesystem_v._/::filesystem::/'`
|
|
sed 's/::filesystem::v.::/::filesystem::/g' $f > $newname
|
|
rm $f
|
|
done
|
|
for f in *experimental_fundamentals_v?_*; do
|
|
newname=`echo $f | sed 's/experimental_.*_v[[:digit:]]_/experimental::/'`
|
|
sed 's/::experimental::fundamentals_v[[:digit:]]::/::experimental::/g' $f > $newname
|
|
rm $f
|
|
done
|
|
|
|
# Then, clean up other top-level namespaces.
|
|
for f in std_tr1_*; do
|
|
newname=`echo $f | sed 's/^std_tr1_/std::tr1::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in std_tr2_*; do
|
|
newname=`echo $f | sed 's/^std_tr2_/std::tr2::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in std_*; do
|
|
newname=`echo $f | sed 's/^std_/std::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in __gnu_cxx_*; do
|
|
newname=`echo $f | sed 's/^__gnu_cxx_/__gnu_cxx::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in __gnu_debug_*; do
|
|
newname=`echo $f | sed 's/^__gnu_debug_/__gnu_debug::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in __gnu_parallel_*; do
|
|
newname=`echo $f | sed 's/^__gnu_parallel_/__gnu_parallel::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in __gnu_pbds_*; do
|
|
newname=`echo $f | sed 's/^__gnu_pbds_/__gnu_pbds::/'`
|
|
mv $f $newname
|
|
done
|
|
for f in __cxxabiv1_*; do
|
|
newname=`echo $f | sed 's/^__cxxabiv1_/abi::/'`
|
|
mv $f $newname
|
|
done
|
|
|
|
# Then piecemeal nested classes
|
|
|
|
|
|
# Generic removal bits, where there are things in the generated man
|
|
# pages that need to be killed.
|
|
for f in *_libstdc__-v3_*; do
|
|
rm $f
|
|
done
|
|
|
|
for f in *_src_*; do
|
|
rm $f
|
|
done
|
|
|
|
|
|
# Also, for some reason, typedefs don't get their own man pages. Sigh.
|
|
for f in ios streambuf istream ostream iostream stringbuf \
|
|
istringstream ostringstream stringstream filebuf ifstream \
|
|
ofstream fstream string;
|
|
do
|
|
echo ".so man3/std::basic_${f}.3" > std::${f}.3
|
|
echo ".so man3/std::basic_${f}.3" > std::w${f}.3
|
|
done
|
|
|
|
echo ::
|
|
echo :: Man pages in ${outdir}/man
|
|
fi
|
|
|
|
# all done
|
|
echo ::
|
|
|
|
exit 0
|