14fee23f9Smrg#!/bin/bash 24fee23f9Smrg 34fee23f9Smrg# Runs doxygen and massages the output files. 4b1e83836Smrg# Copyright (C) 2001-2022 Free Software Foundation, Inc. 54fee23f9Smrg# 64fee23f9Smrg# Synopsis: run_doxygen --mode=[html|latex|man|xml] --host_alias=<alias> \ 74fee23f9Smrg# v3srcdir \ 84fee23f9Smrg# v3builddir \ 94fee23f9Smrg# shortname 104fee23f9Smrg# 114fee23f9Smrg# Originally hacked together by Phil Edwards <pme@gcc.gnu.org> 124fee23f9Smrg 134fee23f9Smrg 144fee23f9Smrg# We can check now that the version of doxygen is >= this variable. 1548fb7bfaSmrgDOXYVER=1.7.0 164fee23f9Smrg 174fee23f9Smrgfind_doxygen() { 184fee23f9Smrg local -r v_required=`echo $DOXYVER | \ 194fee23f9Smrg awk -F. '{if(NF<3)$3=0;print ($1*100+$2)*100+$3}'` 204fee23f9Smrg local testing_version doxygen maybedoxy v_found 214fee23f9Smrg # thank you goat book 224fee23f9Smrg set `IFS=:; X="$PATH:/usr/local/bin:/bin:/usr/bin"; echo $X` 234fee23f9Smrg for dir 244fee23f9Smrg do 254fee23f9Smrg # AC_EXEEXT could come in useful here 264fee23f9Smrg maybedoxy="$dir/doxygen" 274fee23f9Smrg test -f "$maybedoxy" && testing_version=`$maybedoxy --version` 284fee23f9Smrg if test -n "$testing_version"; then 294fee23f9Smrg v_found=`echo $testing_version | \ 304fee23f9Smrg awk -F. '{if(NF<3)$3=0;print ($1*100+$2)*100+$3}'` 314fee23f9Smrg if test $v_found -ge $v_required; then 324fee23f9Smrg doxygen="$maybedoxy" 334fee23f9Smrg break 344fee23f9Smrg fi 354fee23f9Smrg fi 364fee23f9Smrg done 374fee23f9Smrg if test -z "$doxygen"; then 38b1e83836Smrg fail "Could not find Doxygen $DOXYVER in path." 394fee23f9Smrg fi 404fee23f9Smrg # We need to use other tools from the same package/version. 414fee23f9Smrg echo :: Using Doxygen tools from ${dir}. 424fee23f9Smrg PATH=$dir:$PATH 434fee23f9Smrg hash -r 444fee23f9Smrg} 454fee23f9Smrg 464fee23f9Smrgprint_usage() { 47b1e83836Smrg cat <<EOF 48b1e83836SmrgUsage: run_doxygen --mode=MODE --host_alias=HOST_ALIAS [<options>] 494fee23f9Smrg <v3-src-dir> <v3-build-dir> <shortnamesp> 504fee23f9Smrg MODE is one of: 514fee23f9Smrg html Generate user-level HTML library documentation. 524fee23f9Smrg man Generate user-level man pages. 534fee23f9Smrg xml Generate user-level XML pages. 544fee23f9Smrg latex Generate user-level LaTeX pages. 554fee23f9Smrg 56b1e83836Smrg HOST_ALIAS is the GCC host alias triplet set at configure time. 57b1e83836Smrg 58b1e83836Smrg shortnamesp is one of YES or NO and is used as the SHORT_NAMES value 59b1e83836Smrg in the Doxygen config file. 60b1e83836Smrg 61b1e83836Smrg Supported options: 62b1e83836Smrg 63b1e83836Smrg --help | -h Print this message and exit. 64b1e83836Smrg --latex_cmd=CMD Set LATEX_CMD_NAME=CMD in the Doxygen config file. 654fee23f9Smrg 664fee23f9SmrgNote: Requires Doxygen ${DOXYVER} or later; get it at 674fee23f9Smrg ftp://ftp.stack.nl/pub/users/dimitri/doxygen-${DOXYVER}.src.tar.gz 684fee23f9Smrg 694fee23f9SmrgEOF 70b1e83836Smrg} 71b1e83836Smrg 72b1e83836Smrg# Print an error message followed by usage to stderr, then exit. 73b1e83836Smrgfail() { 74b1e83836Smrg echo "$0: error: $*" 1>&2 75b1e83836Smrg echo 1>&2 76b1e83836Smrg print_usage 1>&2 774fee23f9Smrg exit 1 784fee23f9Smrg} 794fee23f9Smrg 804fee23f9Smrgparse_options() { 81b1e83836Smrg while [ $# -ne 0 ] 824fee23f9Smrg do 834fee23f9Smrg # Blatantly ripped from autoconf, er, I mean, "gratefully standing 844fee23f9Smrg # on the shoulders of those giants who have gone before us." 85b1e83836Smrg case "$1" in 86b1e83836Smrg -*=*) arg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; 874fee23f9Smrg *) arg= ;; 884fee23f9Smrg esac 894fee23f9Smrg 90b1e83836Smrg case "$1" in 914fee23f9Smrg --mode=*) 924fee23f9Smrg mode=$arg ;; 934fee23f9Smrg --host_alias=*) 944fee23f9Smrg host_alias=$arg ;; 95b1e83836Smrg --help | -h) 96b1e83836Smrg print_usage ; exit ;; 97b1e83836Smrg --mode | --host_alias) 98b1e83836Smrg fail "missing argument: $1" ;; 99b1e83836Smrg --latex_cmd=*) 100b1e83836Smrg latex_cmd=$arg ;; 101b1e83836Smrg --*) 102b1e83836Smrg fail "invalid option: $1" ;; 1034fee23f9Smrg *) 104b1e83836Smrg break ;; 1054fee23f9Smrg esac 106b1e83836Smrg shift 1074fee23f9Smrg done 108b1e83836Smrg 109b1e83836Smrg if [ $# -ne 3 ] 110b1e83836Smrg then 111b1e83836Smrg fail "wrong number of arguments" 112b1e83836Smrg fi 113b1e83836Smrg srcdir="$1" 114b1e83836Smrg builddir="$2" 115b1e83836Smrg outdir="$2/doc/doxygen" 116b1e83836Smrg shortname="$3" 1174fee23f9Smrg} 1184fee23f9Smrg 1194fee23f9Smrg 1204fee23f9Smrg# script begins here 1214fee23f9Smrgmode=unset 1224fee23f9Smrghost_alias=unset 1234fee23f9Smrgsrcdir=unset 1244fee23f9Smrgoutdir=unset 1254fee23f9Smrgshortname=unset 1264fee23f9Smrgdo_html=false 1274fee23f9Smrgdo_man=false 1284fee23f9Smrgdo_xml=false 1294fee23f9Smrgdo_latex=false 130b1e83836Smrglatex_cmd= 1314fee23f9Smrgenabled_sections= 1324fee23f9Smrggenerate_tagfile= 1334fee23f9SmrgDATEtext=`date '+%Y-%m-%d'` 1344fee23f9Smrg 1354fee23f9Smrg# Show how this script is called. 1364fee23f9Smrgecho run_doxygen $* 1374fee23f9Smrg 1384fee23f9Smrgparse_options $* 1394fee23f9Smrgfind_doxygen 1404fee23f9Smrg 1414fee23f9Smrgif test $srcdir = unset || test $outdir = unset || test $mode = unset || test $shortname = unset || test $host_alias = unset; then 1424fee23f9Smrg # this could be better 143b1e83836Smrg fail "You have not given enough information...! $srcdir - " 1444fee23f9Smrgfi 1454fee23f9Smrg 1464fee23f9Smrgcase x"$mode" in 1474fee23f9Smrg xhtml) 1484fee23f9Smrg do_html=true 1494fee23f9Smrg enabled_sections=maint 1504fee23f9Smrg generate_tagfile="$outdir/html/libstdc++.tag" 1514fee23f9Smrg ;; 1524fee23f9Smrg xlatex) 1534fee23f9Smrg do_latex=true 1544fee23f9Smrg enabled_sections=maint 1554fee23f9Smrg ;; 1564fee23f9Smrg xman) 1574fee23f9Smrg do_man=true 1584fee23f9Smrg ;; 1594fee23f9Smrg xxml) 1604fee23f9Smrg do_xml=true 1614fee23f9Smrg enabled_sections=maint 1624fee23f9Smrg ;; 1634fee23f9Smrg *) 1644fee23f9Smrg echo run_doxygen error: $mode is an invalid mode 1>&2 1654fee23f9Smrg exit 1 ;; 1664fee23f9Smrgesac 1674fee23f9Smrg 1684fee23f9Smrgcase x"$shortname" in 1694fee23f9Smrg xYES) 1704fee23f9Smrg ;; 1714fee23f9Smrg xNO) 1724fee23f9Smrg ;; 1734fee23f9Smrg *) 1744fee23f9Smrg echo run_doxygen error: $shortname is invalid 1>&2 1754fee23f9Smrg exit 1 ;; 1764fee23f9Smrgesac 1774fee23f9Smrg 1784fee23f9Smrg 1794fee23f9Smrgmkdir -p $outdir 1804fee23f9Smrgchmod u+w $outdir 1814fee23f9Smrg 1824fee23f9Smrg# Run it 1834fee23f9Smrg( 1844fee23f9Smrg set -e 1854fee23f9Smrg cd $builddir 1864fee23f9Smrg sed -e "s=@outdir@=${outdir}=g" \ 1874fee23f9Smrg -e "s=@srcdir@=${srcdir}=g" \ 1884fee23f9Smrg -e "s=@shortname@=${shortname}=g" \ 1894fee23f9Smrg -e "s=@builddir@=${builddir}=g" \ 1904fee23f9Smrg -e "s=@host_alias@=${host_alias}=g" \ 1914fee23f9Smrg -e "s=@enabled_sections@=${enabled_sections}=" \ 1924fee23f9Smrg -e "s=@do_html@=${do_html}=" \ 1934fee23f9Smrg -e "s=@do_latex@=${do_latex}=" \ 194b1e83836Smrg -e "s=@latex_cmd@=${latex_cmd}=" \ 1954fee23f9Smrg -e "s=@do_man@=${do_man}=" \ 1964fee23f9Smrg -e "s=@do_xml@=${do_xml}=" \ 1974fee23f9Smrg -e "s=@generate_tagfile@=${generate_tagfile}=" \ 1984fee23f9Smrg ${srcdir}/doc/doxygen/user.cfg.in > ${outdir}/${mode}.cfg 1994fee23f9Smrg echo :: NOTE that this may take some time... 2004fee23f9Smrg echo doxygen ${outdir}/${mode}.cfg 2014fee23f9Smrg doxygen ${outdir}/${mode}.cfg 2024fee23f9Smrg) 2034fee23f9Smrgret=$? 2044fee23f9Smrgtest $ret -ne 0 && exit $ret 2054fee23f9Smrg 2064fee23f9Smrgif $do_xml; then 2074fee23f9Smrg echo :: 2084fee23f9Smrg echo :: XML pages begin with 2094fee23f9Smrg echo :: ${outdir}/xml/index.xml 2104fee23f9Smrgfi 2114fee23f9Smrg 2124fee23f9Smrgif $do_latex; then 2134fee23f9Smrg cd ${outdir}/${mode} 2144fee23f9Smrg 215cd5ea10dSmrg # Grrr, Doxygen 1.8.x changed the -w latex options. 216cd5ea10dSmrg need_footer=`doxygen -h | sed -n -e '/-w latex/s=.*footer.*=true=p'` 217cd5ea10dSmrg 218cd5ea10dSmrg # Also drop in the header file (maybe footer file) and style sheet 219cd5ea10dSmrg if $need_footer; then 220cd5ea10dSmrg doxygen -w latex header.tex footer.tex doxygen.sty 221cd5ea10dSmrg else 2224fee23f9Smrg doxygen -w latex header.tex doxygen.sty 223cd5ea10dSmrg fi 2244fee23f9Smrg 2254fee23f9Smrg echo :: 2264fee23f9Smrg echo :: LaTeX pages begin with 2274fee23f9Smrg echo :: ${outdir}/latex/refman.tex 2284fee23f9Smrgfi 2294fee23f9Smrg 2304fee23f9Smrgif $do_html; then 2314fee23f9Smrg cd ${outdir}/${mode} 2324fee23f9Smrg 2334fee23f9Smrg #doxytag -t libstdc++.tag . > /dev/null 2>&1 23448fb7bfaSmrg 23548fb7bfaSmrg # Strip pathnames from tag file. 2364fee23f9Smrg sed -e '/<path>/d' libstdc++.tag > TEMP 2374fee23f9Smrg mv TEMP libstdc++.tag 2384fee23f9Smrg 2394fee23f9Smrg sed -e "s=@DATE@=${DATEtext}=" \ 2404fee23f9Smrg ${srcdir}/doc/doxygen/mainpage.html > index.html 2414fee23f9Smrg 2424fee23f9Smrg # The following bit of line noise changes annoying 2434fee23f9Smrg # std::foo < typename _Ugly1, typename _Ugly2, .... _DefaultUgly17 > 2444fee23f9Smrg # to user-friendly 2454fee23f9Smrg # std::foo 2464fee23f9Smrg # in the major "Compound List" page. 2474fee23f9Smrg sed -e 's=\(::[[:alnum:]_]*\)< .* >=\1=' annotated.html > annstrip.html 2484fee23f9Smrg mv annstrip.html annotated.html 2494fee23f9Smrg 2504fee23f9Smrg cp ${srcdir}/doc/doxygen/tables.html tables.html 2514fee23f9Smrg 2524fee23f9Smrg echo :: 2534fee23f9Smrg echo :: HTML pages begin with 2544fee23f9Smrg echo :: ${outdir}/html/index.html 2554fee23f9Smrgfi 2564fee23f9Smrg 2574fee23f9Smrg# Mess with the man pages. We don't need documentation of the internal 2584fee23f9Smrg# headers, since the man pages for those contain nothing useful anyhow. The 2594fee23f9Smrg# man pages for doxygen modules need to be renamed (or deleted). And the 2604fee23f9Smrg# generated #include lines need to be changed from the internal names to the 2614fee23f9Smrg# standard ones (e.g., "#include <stl_tempbuf.h>" -> "#include <memory>"). 2624fee23f9Smrgif $do_man; then 2634fee23f9Smrgecho :: 2644fee23f9Smrgecho :: Fixing up the man pages... 2654fee23f9Smrgcd $outdir/man/man3 2664fee23f9Smrg 2674fee23f9Smrg# File names with embedded spaces (EVIL!) need to be....? renamed or removed? 2684fee23f9Smrgfind . -name "* *" -print0 | xargs -0r rm # requires GNU tools 2694fee23f9Smrg 2704fee23f9Smrg# man pages are for functions/types/other entities, not source files 2714fee23f9Smrg# directly. who the heck would type "man foo.h" anyhow? 272b1e83836Smrg# FIXME: This also removes std.3 which is the only place that a lot of 273b1e83836Smrg# functions are documented. Should we keep it? 2744fee23f9Smrgfind . -name "[a-z]*" -a ! -name "std_*" -print | xargs rm 2754fee23f9Smrgrm -f *.h.3 *.hpp.3 *config* *.cc.3 *.tcc.3 *_t.3 2764fee23f9Smrg#rm ext_*.3 tr1_*.3 debug_*.3 2774fee23f9Smrg 2784fee23f9Smrg# this is used to examine what we would have deleted, for debugging 2794fee23f9Smrg#mkdir trash 2804fee23f9Smrg#find . -name "[a-z]*" -a ! -name "std_*" -print | xargs -i mv {} trash 2814fee23f9Smrg#mv *.h.3 *config* *.cc.3 *.tcc.3 *_t.3 trash 2824fee23f9Smrg 283b1e83836Smrggxx=$($builddir/scripts/testsuite_flags --build-cxx) 284b1e83836Smrgcppflags=$($builddir/scripts/testsuite_flags --build-includes) 285b1e83836Smrgcxxflags="-Og -g -std=gnu++23" 286b1e83836Smrg 2874fee23f9Smrg# Standardize the displayed header names. If anyone who knows perl cares 2884fee23f9Smrg# enough to rewrite all this, feel free. This only gets run once a century, 2894fee23f9Smrg# and I'm off getting coffee then anyhow, so I didn't care enough to make 2904fee23f9Smrg# this super-fast. 291b1e83836Smrg$gxx $cppflags $cxxflags ${srcdir}/doc/doxygen/stdheader.cc -o ./stdheader || exit 1 292b1e83836Smrg# Doxygen outputs something like "\fC#include <unique_lock\&.h>\fP" and 293b1e83836Smrg# we want that internal header to be replaced with something like <mutex>. 294*0a307195Smrgproblematic=`grep -E -l '#include <.*h>' [a-z]*.3` 2954fee23f9Smrgfor f in $problematic; do 2964fee23f9Smrg # this is also slow, but safe and easy to debug 2974fee23f9Smrg oldh=`sed -n '/fC#include </s/.*<\(.*\)>.*/\1/p' $f` 298b1e83836Smrg newh=`echo $oldh | sed 's/\\\\&\\././g' | ./stdheader` 299b1e83836Smrg sed "s=${oldh/\\/.}=${newh}=" $f > TEMP && mv TEMP $f 3004fee23f9Smrgdone 3014fee23f9Smrgrm stdheader 3024fee23f9Smrg 3034fee23f9Smrg# Some of the pages for generated modules have text that confuses certain 30448fb7bfaSmrg# implementations of man(1), e.g. on GNU/Linux. We need to have another 30548fb7bfaSmrg# top-level *roff tag to /stop/ the .SH NAME entry. 306*0a307195Smrgproblematic=`grep -E --files-without-match '^\.SH SYNOPSIS' [A-Z]*.3` 3074fee23f9Smrg#problematic='Containers.3 Sequences.3 Assoc_containers.3 Iterator_types.3' 3084fee23f9Smrg 3094fee23f9Smrgfor f in $problematic; do 3104fee23f9Smrg sed '/^\.SH NAME/{ 3114fee23f9Smrgn 3124fee23f9Smrga\ 3134fee23f9Smrg\ 3144fee23f9Smrg.SH SYNOPSIS 3154fee23f9Smrg }' $f > TEMP 3164fee23f9Smrg mv TEMP $f 3174fee23f9Smrgdone 3184fee23f9Smrg 3194fee23f9Smrg# Also, break this (generated) line up. It's ugly as sin. 3204fee23f9Smrgproblematic=`grep -l '[^^]Definition at line' *.3` 3214fee23f9Smrgfor f in $problematic; do 3224fee23f9Smrg sed 's/Definition at line/\ 3234fee23f9Smrg.PP\ 3244fee23f9Smrg&/' $f > TEMP 3254fee23f9Smrg mv TEMP $f 3264fee23f9Smrgdone 3274fee23f9Smrg 3284fee23f9Smrgcp ${srcdir}/doc/doxygen/Intro.3 C++Intro.3 3294fee23f9Smrg 3304fee23f9Smrg# Why didn't I do this at the start? Were rabid weasels eating my brain? 3314fee23f9Smrg# Who the fsck would "man std_vector" when the class isn't named that? 3324fee23f9Smrg 333b1e83836Smrg# If no files match a glob, skip the for-loop: 334b1e83836Smrgshopt -s nullglob 3354fee23f9Smrg# First, deal with nested namespaces. 336b1e83836Smrgfor ns in chrono filesystem ranges views literals; do 337b1e83836Smrg for f in std_${ns}_*; do 338b1e83836Smrg newname=`echo $f | sed "s/std_${ns}_/std::${ns}::/"` 3394fee23f9Smrg mv $f $newname 3404fee23f9Smrg done 341b1e83836Smrgdone 3424fee23f9Smrgfor f in *__debug_*; do 3434fee23f9Smrg newname=`echo $f | sed 's/__debug_/__debug::/'` 3444fee23f9Smrg mv $f $newname 3454fee23f9Smrgdone 3464fee23f9Smrgfor f in *decimal_*; do 3474fee23f9Smrg newname=`echo $f | sed 's/decimal_/decimal::/'` 3484fee23f9Smrg mv $f $newname 3494fee23f9Smrgdone 3504fee23f9Smrgfor f in *__detail_*; do 3514fee23f9Smrg newname=`echo $f | sed 's/__detail_/__detail::/'` 3524fee23f9Smrg mv $f $newname 3534fee23f9Smrgdone 35448fb7bfaSmrgfor f in *__gnu_pbds_detail_*; do 35548fb7bfaSmrg newname=`echo $f | sed 's/detail_/detail::/'` 35648fb7bfaSmrg mv $f $newname 35748fb7bfaSmrgdone 3584fee23f9Smrgfor f in *__parallel_*; do 3594fee23f9Smrg newname=`echo $f | sed 's/__parallel_/__parallel::/'` 3604fee23f9Smrg mv $f $newname 3614fee23f9Smrgdone 3624fee23f9Smrg 363f30ff588Smrg# Remove inline namespaces used for versioning. 364f30ff588Smrgfor f in *_V2_*; do 365f30ff588Smrg newname=`echo $f | sed 's/_V2_/::/'` 366f30ff588Smrg sed 's/::_V2::/::/g' $f > $newname 367f30ff588Smrg rm $f 368f30ff588Smrgdone 369f30ff588Smrgfor f in *_experimental_filesystem_v?_*; do 370f30ff588Smrg newname=`echo $f | sed 's/_filesystem_v._/::filesystem::/'` 371f30ff588Smrg sed 's/::filesystem::v.::/::filesystem::/g' $f > $newname 372f30ff588Smrg rm $f 373f30ff588Smrgdone 374f30ff588Smrgfor f in *experimental_fundamentals_v?_*; do 375f30ff588Smrg newname=`echo $f | sed 's/experimental_.*_v[[:digit:]]_/experimental::/'` 376f30ff588Smrg sed 's/::experimental::fundamentals_v[[:digit:]]::/::experimental::/g' $f > $newname 377f30ff588Smrg rm $f 378f30ff588Smrgdone 379f30ff588Smrg 3804fee23f9Smrg# Then, clean up other top-level namespaces. 3814fee23f9Smrgfor f in std_tr1_*; do 3824fee23f9Smrg newname=`echo $f | sed 's/^std_tr1_/std::tr1::/'` 3834fee23f9Smrg mv $f $newname 3844fee23f9Smrgdone 38548fb7bfaSmrgfor f in std_tr2_*; do 38648fb7bfaSmrg newname=`echo $f | sed 's/^std_tr2_/std::tr2::/'` 38748fb7bfaSmrg mv $f $newname 38848fb7bfaSmrgdone 3894fee23f9Smrgfor f in std_*; do 3904fee23f9Smrg newname=`echo $f | sed 's/^std_/std::/'` 3914fee23f9Smrg mv $f $newname 3924fee23f9Smrgdone 3934fee23f9Smrgfor f in __gnu_cxx_*; do 3944fee23f9Smrg newname=`echo $f | sed 's/^__gnu_cxx_/__gnu_cxx::/'` 3954fee23f9Smrg mv $f $newname 3964fee23f9Smrgdone 3974fee23f9Smrgfor f in __gnu_debug_*; do 3984fee23f9Smrg newname=`echo $f | sed 's/^__gnu_debug_/__gnu_debug::/'` 3994fee23f9Smrg mv $f $newname 4004fee23f9Smrgdone 4014fee23f9Smrgfor f in __gnu_parallel_*; do 4024fee23f9Smrg newname=`echo $f | sed 's/^__gnu_parallel_/__gnu_parallel::/'` 4034fee23f9Smrg mv $f $newname 4044fee23f9Smrgdone 4054fee23f9Smrgfor f in __gnu_pbds_*; do 4064fee23f9Smrg newname=`echo $f | sed 's/^__gnu_pbds_/__gnu_pbds::/'` 4074fee23f9Smrg mv $f $newname 4084fee23f9Smrgdone 4094fee23f9Smrgfor f in __cxxabiv1_*; do 4104fee23f9Smrg newname=`echo $f | sed 's/^__cxxabiv1_/abi::/'` 4114fee23f9Smrg mv $f $newname 4124fee23f9Smrgdone 4134fee23f9Smrg 4144fee23f9Smrg# Then piecemeal nested classes 4154fee23f9Smrg 4164fee23f9Smrg 4174fee23f9Smrg# Generic removal bits, where there are things in the generated man 4184fee23f9Smrg# pages that need to be killed. 4194fee23f9Smrgfor f in *_libstdc__-v3_*; do 4204fee23f9Smrg rm $f 4214fee23f9Smrgdone 4224fee23f9Smrg 4234fee23f9Smrgfor f in *_src_*; do 4244fee23f9Smrg rm $f 4254fee23f9Smrgdone 4264fee23f9Smrg 427b1e83836Smrg# Remove all internal implementation details? 428b1e83836Smrg# rm std::_[A-Z]*.3 std::__detail*.3 429b1e83836Smrg 430b1e83836Smrgshopt -u nullglob 431b1e83836Smrg 4324fee23f9Smrg 4334fee23f9Smrg# Also, for some reason, typedefs don't get their own man pages. Sigh. 4344fee23f9Smrgfor f in ios streambuf istream ostream iostream stringbuf \ 4354fee23f9Smrg istringstream ostringstream stringstream filebuf ifstream \ 436b1e83836Smrg ofstream fstream string 4374fee23f9Smrgdo 4384fee23f9Smrg echo ".so man3/std::basic_${f}.3" > std::${f}.3 4394fee23f9Smrg echo ".so man3/std::basic_${f}.3" > std::w${f}.3 4404fee23f9Smrgdone 4414fee23f9Smrg 4424fee23f9Smrgecho :: 4434fee23f9Smrgecho :: Man pages in ${outdir}/man 4444fee23f9Smrgfi 4454fee23f9Smrg 4464fee23f9Smrg# all done 4474fee23f9Smrgecho :: 4484fee23f9Smrg 4494fee23f9Smrgexit 0 450