#!/bin/sh
# Adds the reference to the Glibc documentation and to the Linux manual page
# to the file foo.texi.
# Usage: add-links.sh foo.texi
case "$1" in
*.texi)
f="$1"
g="${f%.texi}"
glibc_inforef=
glibc_link=
if test -f _index.html \
|| { wget -O _index1.html https://www.gnu.org/software/libc/manual/html_node/Function-Index.html \
&& wget -O _index2.html https://www.gnu.org/software/libc/manual/html_node/Variable-Index.html \
&& cat _index1.html _index2.html > _index.html; \
}; then
glibc_page=`sed -n -e "s|^.*$g
.*|\1|p" < _index.html | sed -s 's/#.*//'`
if test -n "$glibc_page"; then
glibc_page_title=`wget -O - "https://www.gnu.org/software/libc/manual/html_node/$glibc_page" 2>/dev/null | sed -n -e 's/^.*]*>[0-9. ]*\(.*\)<\/h.*/\1/p' | sed -e 's|<[^>]*>||g' -e 's|,||g' | head -n 1`
if test -n "$glibc_page_title"; then
glibc_node=`echo "$glibc_page" | sed -e 's/\.html$//' -e 's/_/\\\\u/g' -e 's/\\u00\([0-7]\)/\\x\1/g' -e 's/-/ /g'`
# Avoid the broken built-in 'printf' in the dash shell.
glibc_node=`/usr/bin/printf "$glibc_node" 2>/dev/null || printf "$glibc_node"`
glibc_inforef="@ref{$glibc_node,,$glibc_page_title,libc}"
glibc_link="@url{https://www.gnu.org/software/libc/manual/html_node/$glibc_page}"
else
echo "failed to determine page title of https://www.gnu.org/software/libc/manual/html_node/$glibc_page"
fi
else
echo $f not documented in glibc manual
fi
else
echo "failed to fetch glibc index"
fi
manpages_link=
if wget https://www.kernel.org/doc/man-pages/online/pages/man3/${g}.3.html >/dev/null 2>&1; then
manpages_link="@uref{https://www.kernel.org/doc/man-pages/online/pages/man3/${g}.3.html,,man ${g}}"
else
if wget https://www.kernel.org/doc/man-pages/online/pages/man2/${g}.2.html >/dev/null 2>&1; then
manpages_link="@uref{https://www.kernel.org/doc/man-pages/online/pages/man2/${g}.2.html,,man ${g}}"
else
echo $f not documented among the man pages
fi
fi
if test -n "$glibc_link"; then
if test -n "$manpages_link"; then
documentation="Documentation:\n\
@itemize\n\
@item\n\
@ifinfo\n\
$glibc_inforef,\n\
@end ifinfo\n\
@ifnotinfo\n\
$glibc_link,\n\
@end ifnotinfo\n\
@item\n\
$manpages_link.\n\
@end itemize"
else
documentation="Documentation:@*\n\
@ifinfo\n\
$glibc_inforef.\n\
@end ifinfo\n\
@ifnotinfo\n\
$glibc_link.\n\
@end ifnotinfo"
fi
else
if test -n "$manpages_link"; then
documentation="Documentation:@* $manpages_link"
else
documentation=
fi
fi
if test -n "$documentation"; then
mv ${f} ${f}~
if cat ${f}~ | sed -e '/^Documentation:/,/^$/d' | sed -e "s|^Gnulib module|$documentation\n\
\n\
Gnulib module|" > ${f}; then
echo $f updated
else
echo $f update failed
mv ${f}~ ${f}
fi
fi
;;
*) echo "invalid argument: $1" 1>&2 ;;
esac